]> git.lyx.org Git - features.git/commitdiff
Initial revision
authorLars Gullik Bjønnes <larsbj@gullik.org>
Mon, 27 Sep 1999 18:44:28 +0000 (18:44 +0000)
committerLars Gullik Bjønnes <larsbj@gullik.org>
Mon, 27 Sep 1999 18:44:28 +0000 (18:44 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@140 a592a061-630c-0410-9148-cb99ea01b6c8

652 files changed:
.cvsignore [new file with mode: 0644]
ABOUT-NLS [new file with mode: 0644]
ANNOUNCE [new file with mode: 0644]
CHANGES [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
INSTALL [new file with mode: 0644]
INSTALL.OS2 [new file with mode: 0644]
INSTALL.autoconf [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
README [new file with mode: 0644]
README.OS2 [new file with mode: 0644]
UPGRADING [new file with mode: 0644]
WHATSNEW [new file with mode: 0644]
acconfig.h [new file with mode: 0644]
acinclude.m4 [new file with mode: 0644]
autogen.sh [new file with mode: 0755]
config/README [new file with mode: 0644]
config/config.guess [new file with mode: 0755]
config/config.sub [new file with mode: 0755]
config/gettext.m4 [new file with mode: 0644]
config/hack-gcc [new file with mode: 0755]
config/install-sh [new file with mode: 0755]
config/lcmessage.m4 [new file with mode: 0644]
config/lib_configure.m4 [new file with mode: 0644]
config/missing [new file with mode: 0755]
config/mkinstalldirs [new file with mode: 0755]
config/progtest.m4 [new file with mode: 0644]
configure.cmd [new file with mode: 0755]
configure.in [new file with mode: 0644]
development/Code_rules/Popups [new file with mode: 0644]
development/Code_rules/Recommendations [new file with mode: 0644]
development/Code_rules/Rules [new file with mode: 0644]
development/OS2/gnugettext.diff [new file with mode: 0644]
development/gettext.patch [new file with mode: 0644]
development/lyx.rpm.README [new file with mode: 0644]
development/lyx.spec [new file with mode: 0644]
development/lyx3/LyX3-Tasks [new file with mode: 0644]
development/lyx3/README [new file with mode: 0644]
development/lyx3/johnc [new file with mode: 0644]
development/lyx3/lyx3.y [new file with mode: 0644]
development/lyxserver/perl/LyX-Client-0.01.tar.gz [new file with mode: 0644]
development/lyxserver/perl/LyX-Polite-0.01.tar.gz [new file with mode: 0644]
development/lyxserver/perl/README [new file with mode: 0644]
development/lyxserver/sampleclient.tcl [new file with mode: 0644]
development/lyxserver/server_monitor.c [new file with mode: 0644]
development/tools/README.bin.example [new file with mode: 0644]
development/tools/scgen.pl [new file with mode: 0644]
forms/bibforms.fd [new file with mode: 0644]
forms/bibforms.h.patch [new file with mode: 0644]
forms/bullet_forms.C.patch [new file with mode: 0644]
forms/bullet_forms.fd [new file with mode: 0644]
forms/bullet_forms.h.patch [new file with mode: 0644]
forms/credits_form.fd [new file with mode: 0644]
forms/fdfix.sh [new file with mode: 0755]
forms/form1.fd [new file with mode: 0644]
forms/include_form.fd [new file with mode: 0644]
forms/latexoptions.fd [new file with mode: 0644]
forms/layout_forms.fd [new file with mode: 0644]
forms/layout_forms.h.patch [new file with mode: 0644]
forms/lyx.fd [new file with mode: 0644]
forms/lyx_sendfax.fd [new file with mode: 0644]
forms/makefile [new file with mode: 0644]
forms/math_forms.C.patch [new file with mode: 0644]
forms/math_forms.fd [new file with mode: 0644]
forms/print_form.fd [new file with mode: 0644]
forms/ref.fd [new file with mode: 0644]
forms/sp_form.fd [new file with mode: 0644]
images/README [new file with mode: 0644]
images/arrows.xbm [new file with mode: 0644]
images/banner.xpm [new file with mode: 0644]
images/banner_bw.xbm [new file with mode: 0644]
images/bold_bw.xpm [new file with mode: 0644]
images/bop.xbm [new file with mode: 0644]
images/brel.xbm [new file with mode: 0644]
images/build.xpm [new file with mode: 0644]
images/close.xpm [new file with mode: 0644]
images/close_bw.xpm [new file with mode: 0644]
images/copy.xpm [new file with mode: 0644]
images/copy_bw.xpm [new file with mode: 0644]
images/cut.xpm [new file with mode: 0644]
images/cut_bw.xpm [new file with mode: 0644]
images/deco.xbm [new file with mode: 0644]
images/deco.xpm [new file with mode: 0644]
images/delim.xbm [new file with mode: 0644]
images/delim.xpm [new file with mode: 0644]
images/delim0.xpm [new file with mode: 0644]
images/depth.xpm [new file with mode: 0644]
images/depth_bw.xpm [new file with mode: 0644]
images/dots.xbm [new file with mode: 0644]
images/down.xpm [new file with mode: 0644]
images/emph.xpm [new file with mode: 0644]
images/emph_bw.xpm [new file with mode: 0644]
images/equation.xpm [new file with mode: 0644]
images/fig.xpm [new file with mode: 0644]
images/fig_bw.xpm [new file with mode: 0644]
images/foot.xpm [new file with mode: 0644]
images/foot_bw.xpm [new file with mode: 0644]
images/frac.xpm [new file with mode: 0644]
images/free.xpm [new file with mode: 0644]
images/free_bw.xpm [new file with mode: 0644]
images/greek.xbm [new file with mode: 0644]
images/layout_code.xpm [new file with mode: 0644]
images/layout_latex.xpm [new file with mode: 0644]
images/layout_scrap.xpm [new file with mode: 0644]
images/layout_sec.xpm [new file with mode: 0644]
images/layout_std.xpm [new file with mode: 0644]
images/lyx.xpm [new file with mode: 0644]
images/make_ascii_bw.xpm [new file with mode: 0644]
images/make_latex_bw.xpm [new file with mode: 0644]
images/margin.xpm [new file with mode: 0644]
images/margin_bw.xpm [new file with mode: 0644]
images/math.xpm [new file with mode: 0644]
images/math_bw.xpm [new file with mode: 0644]
images/matrix.xpm [new file with mode: 0644]
images/melt.xpm [new file with mode: 0644]
images/melt_bw.xpm [new file with mode: 0644]
images/misc.xbm [new file with mode: 0644]
images/noun.xpm [new file with mode: 0644]
images/noun_bw.xpm [new file with mode: 0644]
images/open.xpm [new file with mode: 0644]
images/open_bw.xpm [new file with mode: 0644]
images/paste.xpm [new file with mode: 0644]
images/paste_bw.xpm [new file with mode: 0644]
images/print1.xpm [new file with mode: 0644]
images/print1_bw.xpm [new file with mode: 0644]
images/quit.xpm [new file with mode: 0644]
images/quit_bw.xpm [new file with mode: 0644]
images/run_latex_bw.xpm [new file with mode: 0644]
images/sans_bw.xpm [new file with mode: 0644]
images/save.xpm [new file with mode: 0644]
images/save_bw.xpm [new file with mode: 0644]
images/smallcaps.xpm [new file with mode: 0644]
images/smallcaps_bw.xpm [new file with mode: 0644]
images/space.xpm [new file with mode: 0644]
images/sqrt.xpm [new file with mode: 0644]
images/tab.xpm [new file with mode: 0644]
images/tab_bw.xpm [new file with mode: 0644]
images/tex.xpm [new file with mode: 0644]
images/tex_bw.xpm [new file with mode: 0644]
images/typeset_ps.xpm [new file with mode: 0644]
images/typeset_ps_bw.xpm [new file with mode: 0644]
images/unknown.xpm [new file with mode: 0644]
images/unknown_bw.xpm [new file with mode: 0644]
images/up.xpm [new file with mode: 0644]
images/varsz.xbm [new file with mode: 0644]
images/view_dvi_bw.xpm [new file with mode: 0644]
images/view_ps_bw.xpm [new file with mode: 0644]
intl/.cvsignore [new file with mode: 0644]
intl/ChangeLog [new file with mode: 0644]
intl/Makefile.in [new file with mode: 0644]
intl/VERSION [new file with mode: 0644]
intl/bindtextdom.c [new file with mode: 0644]
intl/cat-compat.c [new file with mode: 0644]
intl/dcgettext.c [new file with mode: 0644]
intl/dgettext.c [new file with mode: 0644]
intl/explodename.c [new file with mode: 0644]
intl/finddomain.c [new file with mode: 0644]
intl/gettext.c [new file with mode: 0644]
intl/gettext.h [new file with mode: 0644]
intl/gettextP.h [new file with mode: 0644]
intl/hash-string.h [new file with mode: 0644]
intl/intl-compat.c [new file with mode: 0644]
intl/l10nflist.c [new file with mode: 0644]
intl/libgettext.h [new file with mode: 0644]
intl/linux-msg.sed [new file with mode: 0644]
intl/loadinfo.h [new file with mode: 0644]
intl/loadmsgcat.c [new file with mode: 0644]
intl/localealias.c [new file with mode: 0644]
intl/po2tbl.sed.in [new file with mode: 0644]
intl/textdomain.c [new file with mode: 0644]
intl/xopen-msg.sed [new file with mode: 0644]
lib/.cvsignore [new file with mode: 0644]
lib/CREDITS [new file with mode: 0644]
lib/Makefile.am [new file with mode: 0644]
lib/bind/broadway.bind [new file with mode: 0644]
lib/bind/cua.bind [new file with mode: 0644]
lib/bind/de_menus.bind [new file with mode: 0644]
lib/bind/emacs.bind [new file with mode: 0644]
lib/bind/fr_menus.bind [new file with mode: 0644]
lib/bind/hollywood.bind [new file with mode: 0644]
lib/bind/hu_menus.bind [new file with mode: 0644]
lib/bind/math.bind [new file with mode: 0644]
lib/bind/menus.bind [new file with mode: 0644]
lib/bind/pt_menus.bind [new file with mode: 0644]
lib/bind/sciword.bind [new file with mode: 0644]
lib/bind/sv_menus.bind [new file with mode: 0644]
lib/bind/xemacs.bind [new file with mode: 0644]
lib/chkconfig.ltx [new file with mode: 0644]
lib/clipart/platypus.eps [new file with mode: 0644]
lib/configure [new file with mode: 0755]
lib/configure.cmd [new file with mode: 0755]
lib/doc/.cvsignore [new file with mode: 0644]
lib/doc/BUGS.lyx [new file with mode: 0644]
lib/doc/LaTeXConfig.lyx.in [new file with mode: 0644]
lib/examples/Foils.lyx [new file with mode: 0644]
lib/examples/ItemizeBullets.lyx [new file with mode: 0644]
lib/examples/Literate.lyx [new file with mode: 0644]
lib/examples/MathLabeling.lyx [new file with mode: 0644]
lib/examples/Math_macros.lyx [new file with mode: 0644]
lib/examples/Minipage.lyx [new file with mode: 0644]
lib/examples/TableExamples.lyx [new file with mode: 0644]
lib/examples/aa_head.lyx [new file with mode: 0644]
lib/examples/aa_paper.lyx [new file with mode: 0644]
lib/examples/aas_sample.lyx [new file with mode: 0644]
lib/examples/amsart-test.lyx [new file with mode: 0644]
lib/examples/amsbook-test.lyx [new file with mode: 0644]
lib/examples/beispiel_gelyxt.lyx [new file with mode: 0644]
lib/examples/beispiel_roh.lyx [new file with mode: 0644]
lib/examples/ca_splash.lyx [new file with mode: 0644]
lib/examples/de_splash.lyx [new file with mode: 0644]
lib/examples/docbook_example.lyx [new file with mode: 0644]
lib/examples/ejemplo_con_lyx.lyx [new file with mode: 0644]
lib/examples/ejemplo_sin_lyx.lyx [new file with mode: 0644]
lib/examples/es_splash.lyx [new file with mode: 0644]
lib/examples/example_lyxified.lyx [new file with mode: 0644]
lib/examples/example_raw.lyx [new file with mode: 0644]
lib/examples/exemple_brut.lyx [new file with mode: 0644]
lib/examples/exemple_lyxifie.lyx [new file with mode: 0644]
lib/examples/fr_splash.lyx [new file with mode: 0644]
lib/examples/it_splash.lyx [new file with mode: 0644]
lib/examples/landslide.lyx [new file with mode: 0644]
lib/examples/nl_splash.lyx [new file with mode: 0644]
lib/examples/noweb2lyx.lyx [new file with mode: 0644]
lib/examples/pl_splash.lyx [new file with mode: 0644]
lib/examples/primer_lyxan.lyx [new file with mode: 0644]
lib/examples/primer_surov.lyx [new file with mode: 0644]
lib/examples/pt_splash.lyx [new file with mode: 0644]
lib/examples/ru_splash.lyx [new file with mode: 0644]
lib/examples/scriptone.lyx [new file with mode: 0644]
lib/examples/sl_splash.lyx [new file with mode: 0644]
lib/examples/splash.lyx [new file with mode: 0644]
lib/images/amssymb.xbm [new file with mode: 0644]
lib/images/amssymb.xpm [new file with mode: 0644]
lib/images/psnfss1.xbm [new file with mode: 0644]
lib/images/psnfss1.xpm [new file with mode: 0644]
lib/images/psnfss2.xbm [new file with mode: 0644]
lib/images/psnfss2.xpm [new file with mode: 0644]
lib/images/psnfss3.xbm [new file with mode: 0644]
lib/images/psnfss3.xpm [new file with mode: 0644]
lib/images/psnfss4.xbm [new file with mode: 0644]
lib/images/psnfss4.xpm [new file with mode: 0644]
lib/images/standard.xbm [new file with mode: 0644]
lib/images/standard.xpm [new file with mode: 0644]
lib/kbd/american-2.kmap [new file with mode: 0644]
lib/kbd/american.kmap [new file with mode: 0644]
lib/kbd/brazil.kmap [new file with mode: 0644]
lib/kbd/brazil2.kmap [new file with mode: 0644]
lib/kbd/czech.kmap [new file with mode: 0644]
lib/kbd/european.kmap [new file with mode: 0644]
lib/kbd/francais.kmap [new file with mode: 0644]
lib/kbd/french.kmap [new file with mode: 0644]
lib/kbd/german-2.kmap [new file with mode: 0644]
lib/kbd/german-3.kmap [new file with mode: 0644]
lib/kbd/german.kmap [new file with mode: 0644]
lib/kbd/greek.kmap [new file with mode: 0644]
lib/kbd/iso8859-1.cdef [new file with mode: 0644]
lib/kbd/iso8859-2.cdef [new file with mode: 0644]
lib/kbd/iso8859-7.cdef [new file with mode: 0644]
lib/kbd/magyar-2.kmap [new file with mode: 0644]
lib/kbd/magyar-3.kmap [new file with mode: 0644]
lib/kbd/magyar.kmap [new file with mode: 0644]
lib/kbd/polish.kmap [new file with mode: 0644]
lib/kbd/portuges.kmap [new file with mode: 0644]
lib/kbd/romanian.kmap [new file with mode: 0644]
lib/kbd/sf.kmap [new file with mode: 0644]
lib/kbd/sg.kmap [new file with mode: 0644]
lib/kbd/slovak.kmap [new file with mode: 0644]
lib/kbd/slovene.kmap [new file with mode: 0644]
lib/kbd/transilvanian.kmap [new file with mode: 0644]
lib/kbd/turkish-f.kmap [new file with mode: 0644]
lib/kbd/turkish.kmap [new file with mode: 0644]
lib/layouts/IEEEtran.layout [new file with mode: 0644]
lib/layouts/aapaper.inc [new file with mode: 0644]
lib/layouts/aapaper.layout [new file with mode: 0644]
lib/layouts/aastex.layout [new file with mode: 0644]
lib/layouts/amsart-plain.layout [new file with mode: 0644]
lib/layouts/amsart-seq.layout [new file with mode: 0644]
lib/layouts/amsart.layout [new file with mode: 0644]
lib/layouts/amsbook.layout [new file with mode: 0644]
lib/layouts/amsdefs.inc [new file with mode: 0644]
lib/layouts/amsmaths-plain.inc [new file with mode: 0644]
lib/layouts/amsmaths-seq.inc [new file with mode: 0644]
lib/layouts/amsmaths.inc [new file with mode: 0644]
lib/layouts/apa.layout [new file with mode: 0644]
lib/layouts/article.layout [new file with mode: 0644]
lib/layouts/book.layout [new file with mode: 0644]
lib/layouts/broadway.layout [new file with mode: 0644]
lib/layouts/dinbrief.layout [new file with mode: 0644]
lib/layouts/docbook.layout [new file with mode: 0644]
lib/layouts/egs.layout [new file with mode: 0644]
lib/layouts/ejour2.layout [new file with mode: 0644]
lib/layouts/foils.layout [new file with mode: 0644]
lib/layouts/g-brief-de.layout [new file with mode: 0644]
lib/layouts/g-brief-en.layout [new file with mode: 0644]
lib/layouts/hollywood.layout [new file with mode: 0644]
lib/layouts/iletter.layout [new file with mode: 0644]
lib/layouts/latex8.layout [new file with mode: 0644]
lib/layouts/letter.layout [new file with mode: 0644]
lib/layouts/linuxdoc.layout [new file with mode: 0644]
lib/layouts/literate-article.layout [new file with mode: 0644]
lib/layouts/literate-book.layout [new file with mode: 0644]
lib/layouts/literate-report.layout [new file with mode: 0644]
lib/layouts/literate-scrap.inc [new file with mode: 0644]
lib/layouts/lyxmacros.inc [new file with mode: 0644]
lib/layouts/manpage.layout [new file with mode: 0644]
lib/layouts/obsolete.inc [new file with mode: 0644]
lib/layouts/paper.layout [new file with mode: 0644]
lib/layouts/report.layout [new file with mode: 0644]
lib/layouts/revtex.layout [new file with mode: 0644]
lib/layouts/scrartcl.layout [new file with mode: 0644]
lib/layouts/scrbook.layout [new file with mode: 0644]
lib/layouts/scrclass.inc [new file with mode: 0644]
lib/layouts/scrlettr.layout [new file with mode: 0644]
lib/layouts/scrmacros.inc [new file with mode: 0644]
lib/layouts/scrreprt.layout [new file with mode: 0644]
lib/layouts/slides.layout [new file with mode: 0644]
lib/layouts/stdclass.inc [new file with mode: 0644]
lib/layouts/stdlayouts.inc [new file with mode: 0644]
lib/layouts/stdletter.inc [new file with mode: 0644]
lib/layouts/stdlists.inc [new file with mode: 0644]
lib/layouts/stdsections.inc [new file with mode: 0644]
lib/layouts/stdstarsections.inc [new file with mode: 0644]
lib/layouts/stdstruct.inc [new file with mode: 0644]
lib/lyxrc.example [new file with mode: 0644]
lib/reLyX/.cvsignore [new file with mode: 0644]
lib/reLyX/BUGS [new file with mode: 0644]
lib/reLyX/BasicLyX.pm [new file with mode: 0644]
lib/reLyX/CHANGES [new file with mode: 0644]
lib/reLyX/CleanTeX.pm [new file with mode: 0644]
lib/reLyX/LastLyX.pm [new file with mode: 0644]
lib/reLyX/MANIFEST [new file with mode: 0644]
lib/reLyX/MakePreamble.pm [new file with mode: 0644]
lib/reLyX/Makefile.am [new file with mode: 0644]
lib/reLyX/README [new file with mode: 0644]
lib/reLyX/ReadCommands.pm [new file with mode: 0644]
lib/reLyX/RelyxFigure.pm [new file with mode: 0644]
lib/reLyX/RelyxTable.pm [new file with mode: 0644]
lib/reLyX/TODO [new file with mode: 0644]
lib/reLyX/Text/TeX.pm [new file with mode: 0644]
lib/reLyX/Text/manpage.3pm [new file with mode: 0644]
lib/reLyX/Verbatim.pm [new file with mode: 0644]
lib/reLyX/acinclude.m4 [new file with mode: 0644]
lib/reLyX/aclocal.m4 [new file with mode: 0644]
lib/reLyX/configure [new file with mode: 0755]
lib/reLyX/configure.in [new file with mode: 0644]
lib/reLyX/install-sh [new file with mode: 0755]
lib/reLyX/missing [new file with mode: 0755]
lib/reLyX/mkinstalldirs [new file with mode: 0755]
lib/reLyX/noweb2lyx.in [new file with mode: 0644]
lib/reLyX/reLyX.in [new file with mode: 0644]
lib/reLyX/reLyX.man [new file with mode: 0644]
lib/reLyX/reLyX.pod [new file with mode: 0644]
lib/reLyX/reLyXmain.pl [new file with mode: 0644]
lib/reLyX/syntax.default [new file with mode: 0644]
lib/reLyX/test.ltx [new file with mode: 0644]
lib/reLyX/test.lyx [new file with mode: 0644]
lib/templates/README.new_templates [new file with mode: 0644]
lib/templates/aapaper.lyx [new file with mode: 0644]
lib/templates/aastex.lyx [new file with mode: 0644]
lib/templates/dinbrief.lyx [new file with mode: 0644]
lib/templates/docbook_template.lyx [new file with mode: 0644]
lib/templates/g-brief-de.lyx [new file with mode: 0644]
lib/templates/g-brief-en.lyx [new file with mode: 0644]
lib/templates/hollywood.lyx [new file with mode: 0644]
lib/templates/iletter.lyx [new file with mode: 0644]
lib/templates/latex8.lyx [new file with mode: 0644]
lib/templates/letter.lyx [new file with mode: 0644]
lib/templates/linuxdoctemplate.lyx [new file with mode: 0644]
lib/templates/revtex.lyx [new file with mode: 0644]
lib/templates/slides.lyx [new file with mode: 0644]
lib/tex/broadway.cls [new file with mode: 0644]
lib/tex/ejour2.cls [new file with mode: 0644]
lib/tex/hollywood.cls [new file with mode: 0644]
lib/tex/iletter.cls [new file with mode: 0644]
lib/tex/revtex.cls [new file with mode: 0644]
lyx.man [new file with mode: 0644]
po/.cvsignore [new file with mode: 0644]
po/ChangeLog [new file with mode: 0644]
po/Makefile.in.in [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/README [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/es.po [new file with mode: 0644]
po/fi.po [new file with mode: 0644]
po/fr.po [new file with mode: 0644]
po/hu.po [new file with mode: 0644]
po/it.po [new file with mode: 0644]
po/nl.po [new file with mode: 0644]
po/no.po [new file with mode: 0644]
po/pl.po [new file with mode: 0644]
po/pt.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/tr.po [new file with mode: 0644]
po/wa.po [new file with mode: 0644]
src/.cvsignore [new file with mode: 0644]
src/BackStack.h [new file with mode: 0644]
src/BufferView.C [new file with mode: 0644]
src/BufferView.h [new file with mode: 0644]
src/Bullet.C [new file with mode: 0644]
src/Bullet.h [new file with mode: 0644]
src/Chktex.C [new file with mode: 0644]
src/Chktex.h [new file with mode: 0644]
src/DepTable.C [new file with mode: 0644]
src/DepTable.h [new file with mode: 0644]
src/FileInfo.C [new file with mode: 0644]
src/FileInfo.h [new file with mode: 0644]
src/FontInfo.C [new file with mode: 0644]
src/FontInfo.h [new file with mode: 0644]
src/FontLoader.C [new file with mode: 0644]
src/FontLoader.h [new file with mode: 0644]
src/ImportLaTeX.C [new file with mode: 0644]
src/ImportLaTeX.h [new file with mode: 0644]
src/ImportNoweb.C [new file with mode: 0644]
src/ImportNoweb.h [new file with mode: 0644]
src/LString.C [new file with mode: 0644]
src/LString.h [new file with mode: 0644]
src/LaTeX.C [new file with mode: 0644]
src/LaTeX.h [new file with mode: 0644]
src/LaTeXFeatures.C [new file with mode: 0644]
src/LaTeXFeatures.h [new file with mode: 0644]
src/LaTeXLog.C [new file with mode: 0644]
src/Literate.C [new file with mode: 0644]
src/Literate.h [new file with mode: 0644]
src/LyXAction.C [new file with mode: 0644]
src/LyXAction.h [new file with mode: 0644]
src/LyXSendto.C [new file with mode: 0644]
src/LyXView.C [new file with mode: 0644]
src/LyXView.h [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/PaperLayout.C [new file with mode: 0644]
src/ParagraphExtra.C [new file with mode: 0644]
src/Redraw [new file with mode: 0644]
src/Spacing.C [new file with mode: 0644]
src/Spacing.h [new file with mode: 0644]
src/TableLayout.C [new file with mode: 0644]
src/atexit.C [new file with mode: 0644]
src/bibforms.h [new file with mode: 0644]
src/bmtable.C [new file with mode: 0644]
src/bmtable.h [new file with mode: 0644]
src/broken_const.h [new file with mode: 0644]
src/broken_headers.h [new file with mode: 0644]
src/buffer.C [new file with mode: 0644]
src/buffer.h [new file with mode: 0644]
src/bufferlist.C [new file with mode: 0644]
src/bufferlist.h [new file with mode: 0644]
src/bufferparams.C [new file with mode: 0644]
src/bufferparams.h [new file with mode: 0644]
src/bullet_forms.C [new file with mode: 0644]
src/bullet_forms.h [new file with mode: 0644]
src/bullet_forms_cb.C [new file with mode: 0644]
src/chset.C [new file with mode: 0644]
src/chset.h [new file with mode: 0644]
src/combox.C [new file with mode: 0644]
src/combox.h [new file with mode: 0644]
src/commandtags.h [new file with mode: 0644]
src/credits.C [new file with mode: 0644]
src/credits.h [new file with mode: 0644]
src/credits_form.C [new file with mode: 0644]
src/credits_form.h [new file with mode: 0644]
src/definitions.h [new file with mode: 0644]
src/error.C [new file with mode: 0644]
src/error.h [new file with mode: 0644]
src/figure.h [new file with mode: 0644]
src/filedlg.C [new file with mode: 0644]
src/filedlg.h [new file with mode: 0644]
src/filetools.C [new file with mode: 0644]
src/filetools.h [new file with mode: 0644]
src/form1.C [new file with mode: 0644]
src/form1.h [new file with mode: 0644]
src/gettext.h [new file with mode: 0644]
src/include_form.h [new file with mode: 0644]
src/insets/Makefile.am [new file with mode: 0644]
src/insets/figinset.C [new file with mode: 0644]
src/insets/figinset.h [new file with mode: 0644]
src/insets/inset.C [new file with mode: 0644]
src/insets/insetbib.C [new file with mode: 0644]
src/insets/insetbib.h [new file with mode: 0644]
src/insets/insetcommand.C [new file with mode: 0644]
src/insets/insetcommand.h [new file with mode: 0644]
src/insets/inseterror.C [new file with mode: 0644]
src/insets/inseterror.h [new file with mode: 0644]
src/insets/insetinclude.C [new file with mode: 0644]
src/insets/insetinclude.h [new file with mode: 0644]
src/insets/insetindex.C [new file with mode: 0644]
src/insets/insetindex.h [new file with mode: 0644]
src/insets/insetinfo.C [new file with mode: 0644]
src/insets/insetinfo.h [new file with mode: 0644]
src/insets/insetlabel.C [new file with mode: 0644]
src/insets/insetlabel.h [new file with mode: 0644]
src/insets/insetlatex.C [new file with mode: 0644]
src/insets/insetlatex.h [new file with mode: 0644]
src/insets/insetlatexaccent.C [new file with mode: 0644]
src/insets/insetlatexaccent.h [new file with mode: 0644]
src/insets/insetloa.C [new file with mode: 0644]
src/insets/insetloa.h [new file with mode: 0644]
src/insets/insetlof.C [new file with mode: 0644]
src/insets/insetlof.h [new file with mode: 0644]
src/insets/insetlot.C [new file with mode: 0644]
src/insets/insetlot.h [new file with mode: 0644]
src/insets/insetparent.C [new file with mode: 0644]
src/insets/insetparent.h [new file with mode: 0644]
src/insets/insetquotes.C [new file with mode: 0644]
src/insets/insetquotes.h [new file with mode: 0644]
src/insets/insetref.C [new file with mode: 0644]
src/insets/insetref.h [new file with mode: 0644]
src/insets/insetspecialchar.C [new file with mode: 0644]
src/insets/insetspecialchar.h [new file with mode: 0644]
src/insets/insettoc.C [new file with mode: 0644]
src/insets/insettoc.h [new file with mode: 0644]
src/insets/inseturl.C [new file with mode: 0644]
src/insets/inseturl.h [new file with mode: 0644]
src/insets/lyxinset.h [new file with mode: 0644]
src/intl.C [new file with mode: 0644]
src/intl.h [new file with mode: 0644]
src/kbmap.C [new file with mode: 0644]
src/kbmap.h [new file with mode: 0644]
src/lastfiles.C [new file with mode: 0644]
src/lastfiles.h [new file with mode: 0644]
src/latexoptions.C [new file with mode: 0644]
src/latexoptions.h [new file with mode: 0644]
src/layout.C [new file with mode: 0644]
src/layout.h [new file with mode: 0644]
src/layout_forms.C [new file with mode: 0644]
src/layout_forms.h [new file with mode: 0644]
src/lyx.C [new file with mode: 0644]
src/lyx.h [new file with mode: 0644]
src/lyx_cb.C [new file with mode: 0644]
src/lyx_cb.h [new file with mode: 0644]
src/lyx_gui.C [new file with mode: 0644]
src/lyx_gui.h [new file with mode: 0644]
src/lyx_gui_misc.C [new file with mode: 0644]
src/lyx_gui_misc.h [new file with mode: 0644]
src/lyx_main.C [new file with mode: 0644]
src/lyx_main.h [new file with mode: 0644]
src/lyx_sendfax.C [new file with mode: 0644]
src/lyx_sendfax.h [new file with mode: 0644]
src/lyx_sendfax_main.C [new file with mode: 0644]
src/lyx_sty.C [new file with mode: 0644]
src/lyx_sty.h [new file with mode: 0644]
src/lyxcursor.h [new file with mode: 0644]
src/lyxdraw.C [new file with mode: 0644]
src/lyxdraw.h [new file with mode: 0644]
src/lyxfont.C [new file with mode: 0644]
src/lyxfont.h [new file with mode: 0644]
src/lyxfr0.C [new file with mode: 0644]
src/lyxfr0.h [new file with mode: 0644]
src/lyxfr1.C [new file with mode: 0644]
src/lyxfr1.h [new file with mode: 0644]
src/lyxfunc.C [new file with mode: 0644]
src/lyxfunc.h [new file with mode: 0644]
src/lyxlex.C [new file with mode: 0644]
src/lyxlex.h [new file with mode: 0644]
src/lyxlib.h [new file with mode: 0644]
src/lyxlookup.C [new file with mode: 0644]
src/lyxlookup.h [new file with mode: 0644]
src/lyxparagraph.h [new file with mode: 0644]
src/lyxrc.C [new file with mode: 0644]
src/lyxrc.h [new file with mode: 0644]
src/lyxrow.h [new file with mode: 0644]
src/lyxscreen.h [new file with mode: 0644]
src/lyxserver.C [new file with mode: 0644]
src/lyxserver.h [new file with mode: 0644]
src/lyxsum.C [new file with mode: 0644]
src/lyxtext.h [new file with mode: 0644]
src/lyxvc.C [new file with mode: 0644]
src/lyxvc.h [new file with mode: 0644]
src/main.C [new file with mode: 0644]
src/mathed/Makefile.am [new file with mode: 0644]
src/mathed/array.h [new file with mode: 0644]
src/mathed/formula.C [new file with mode: 0644]
src/mathed/formula.h [new file with mode: 0644]
src/mathed/formulamacro.C [new file with mode: 0644]
src/mathed/formulamacro.h [new file with mode: 0644]
src/mathed/math_cursor.C [new file with mode: 0644]
src/mathed/math_cursor.h [new file with mode: 0644]
src/mathed/math_defs.h [new file with mode: 0644]
src/mathed/math_delim.C [new file with mode: 0644]
src/mathed/math_draw.C [new file with mode: 0644]
src/mathed/math_forms.C [new file with mode: 0644]
src/mathed/math_forms.h [new file with mode: 0644]
src/mathed/math_hash.C [new file with mode: 0644]
src/mathed/math_inset.C [new file with mode: 0644]
src/mathed/math_inset.h [new file with mode: 0644]
src/mathed/math_iter.C [new file with mode: 0644]
src/mathed/math_iter.h [new file with mode: 0644]
src/mathed/math_macro.C [new file with mode: 0644]
src/mathed/math_macro.h [new file with mode: 0644]
src/mathed/math_panel.C [new file with mode: 0644]
src/mathed/math_panel.h [new file with mode: 0644]
src/mathed/math_parser.C [new file with mode: 0644]
src/mathed/math_parser.h [new file with mode: 0644]
src/mathed/math_root.C [new file with mode: 0644]
src/mathed/math_root.h [new file with mode: 0644]
src/mathed/math_symbols.C [new file with mode: 0644]
src/mathed/math_utils.C [new file with mode: 0644]
src/mathed/math_write.C [new file with mode: 0644]
src/mathed/symbol_def.h [new file with mode: 0644]
src/menus.C [new file with mode: 0644]
src/menus.h [new file with mode: 0644]
src/minibuffer.C [new file with mode: 0644]
src/minibuffer.h [new file with mode: 0644]
src/nt_defines.h [new file with mode: 0644]
src/os2_defines.h [new file with mode: 0644]
src/os2_errortable.h [new file with mode: 0644]
src/paragraph.C [new file with mode: 0644]
src/pathstack.C [new file with mode: 0644]
src/pathstack.h [new file with mode: 0644]
src/print_form.C [new file with mode: 0644]
src/print_form.h [new file with mode: 0644]
src/screen.C [new file with mode: 0644]
src/sp_form.C [new file with mode: 0644]
src/sp_form.h [new file with mode: 0644]
src/spellchecker.C [new file with mode: 0644]
src/spellchecker.h [new file with mode: 0644]
src/stamp-h.in [new file with mode: 0644]
src/strerror.C [new file with mode: 0644]
src/syscall.C [new file with mode: 0644]
src/syscall.h [new file with mode: 0644]
src/syscontr.C [new file with mode: 0644]
src/syscontr.h [new file with mode: 0644]
src/syssingleton.C [new file with mode: 0644]
src/table.C [new file with mode: 0644]
src/table.h [new file with mode: 0644]
src/tex-accent.C [new file with mode: 0644]
src/tex-accent.h [new file with mode: 0644]
src/tex-defs.h [new file with mode: 0644]
src/tex-strings.C [new file with mode: 0644]
src/tex-strings.h [new file with mode: 0644]
src/texoptions.C [new file with mode: 0644]
src/texrow.C [new file with mode: 0644]
src/texrow.h [new file with mode: 0644]
src/text.C [new file with mode: 0644]
src/text2.C [new file with mode: 0644]
src/textutils.h [new file with mode: 0644]
src/toolbar.C [new file with mode: 0644]
src/toolbar.h [new file with mode: 0644]
src/trans.C [new file with mode: 0644]
src/trans.h [new file with mode: 0644]
src/trans_decl.h [new file with mode: 0644]
src/trans_mgr.C [new file with mode: 0644]
src/trans_mgr.h [new file with mode: 0644]
src/undo.h [new file with mode: 0644]
src/version.h [new file with mode: 0644]
src/vms_defines.h [new file with mode: 0644]
src/vspace.C [new file with mode: 0644]
src/vspace.h [new file with mode: 0644]

diff --git a/.cvsignore b/.cvsignore
new file mode 100644 (file)
index 0000000..9482f16
--- /dev/null
@@ -0,0 +1,4 @@
+config.cache
+config.log
+config.status
+Makefile
diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644 (file)
index 0000000..dacb8b1
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,225 @@
+Notes on the Free Translation Project
+*************************************
+
+   Free software is going international!  The Free Translation Project
+is a way to get maintainers of free software, translators, and users all
+together, so that will gradually become able to speak many languages.
+A few packages already provide translations for their messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do *not*
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work at translations should contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+One advise in advance
+=====================
+
+   If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias or message inheritance) as the
+implementation here.  It is also not possible to offer this additional
+functionality on top of a `catgets' implementation.  Future versions of
+GNU `gettext' will very likely convey even more functionality.  So it
+might be a good idea to change to GNU `gettext' as soon as possible.
+
+   So you need not provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+INSTALL Matters
+===============
+
+   Some packages are "localizable" when properly installed; the
+programs they contain can be made to speak your own native language.
+Most such packages use GNU `gettext'.  Other packages have their own
+ways to internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system provides
+usable `catgets' (if using this is selected by the installer) or
+`gettext' functions.  If neither is available, the GNU `gettext' own
+library will be used.  This library is wholly contained within this
+package, usually in the `intl/' subdirectory, so prior installation of
+the GNU `gettext' package is *not* required.  Installers may use
+special options at configuration time for changing the default
+behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --with-catgets
+     ./configure --disable-nls
+
+will respectively bypass any pre-existing `catgets' or `gettext' to use
+the internationalizing routines provided within this package, enable
+the use of the `catgets' functions (if found on the locale system), or
+else, *totally* disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might be not what is desirable.  You
+should use the more recent version of the GNU `gettext' library.  I.e.
+if the file `intl/VERSION' shows that the library which comes with this
+package is more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   By default the configuration process will not test for the `catgets'
+function and therefore they will not be used.  The reasons are already
+given above: the emulation on top of `catgets' cannot provide all the
+extensions provided by the GNU `gettext' library.  If you nevertheless
+want to use the `catgets' functions use
+
+     ./configure --with-catgets
+
+to enable the test for `catgets' (this causes no harm if `catgets' is
+not available on your system).  If you really select this option we
+would like to hear about the reasons because we cannot think of any
+good one ourself.
+
+   Internationalized packages have usually many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+Using This Package
+==================
+
+   As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+ISO 639 `LL' two-letter code prior to using the programs in the
+package.  For example, let's suppose that you speak German.  At the
+shell prompt, merely execute `setenv LANG de' (in `csh'),
+`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash').  This
+can be done from your `.login' or `.profile' file, once and for all.
+
+   An operating system might already offer message localization for
+many of its programs, while other programs have been installed locally
+with the full capabilities of GNU `gettext'.  Just using `gettext'
+extended syntax for `LANG' would break proper localization of already
+available operating system programs.  In this case, users should set
+both `LANGUAGE' and `LANG' variables in their environment, as programs
+using GNU `gettext' give preference to `LANGUAGE'.  For example, some
+Swedish users would rather read translations in German than English for
+when Swedish is not available.  This is easily accomplished by setting
+`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'.
+
+Translating Teams
+=================
+
+   For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list, courtesy of Linux
+International.  You may reach your translation team at the address
+`LL@li.org', replacing LL by the two-letter ISO 639 code for your
+language.  Language codes are *not* the same as the country codes given
+in ISO 3166.  The following translation teams exist, as of August 1997:
+
+     Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en',
+     Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian
+     `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja',
+     Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish
+     `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es',
+     Swedish `sv', and Turkish `tr'.
+
+For example, you may reach the Chinese translation team by writing to
+`zh@li.org'.
+
+   If you'd like to volunteer to *work* at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is *not* the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+*actively* in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+   Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of August
+1997.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination.
+
+     Ready PO files    cs da de en es fi fr it ja ko nl no pl pt sl sv
+                     .-------------------------------------------------.
+     bash            |       []          []          []                |  3
+     bison           |       []          []          []                |  3
+     clisp           |       [] [] []    []                            |  4
+     cpio            |       []    []    []          []    []          |  5
+     diffutils       |       []    []    []                []       [] |  5
+     enscript        |       []    [] [] []          []          []    |  6
+     fileutils       | []    []    []    []       [] []    [] [] [] [] | 10
+     findutils       |       []    []    [] []    [] []    []       [] |  8
+     flex            |             []    []       []                [] |  4
+     gcal            |       []          []          []    []       [] |  5
+     gettext         |       []    []    []       [] [] [] [] [] [] [] | 11
+     grep            |       []    []    []       [] [] [] []    [] [] |  9
+     hello           |       []    []    []       [] [] [] [] [] [] [] | 10
+     id-utils        |       []          []                []          |  3
+     indent          |    [] []                   []       []          |  4
+     libc            |       []    []    []       [] []    []       [] |  7
+     m4              |       []          []    []    []             [] |  5
+     make            |       []    []    []       [] []    []          |  6
+     music           |                   []                []          |  2
+     ptx             |       []    []    []          [] [] [] []    [] |  8
+     recode          |    [] []    []    []          []    [] [] [] [] |  9
+     sh-utils        |       []          []          [] [] [] []    [] |  7
+     sharutils       |       []    []    []          []             [] |  5
+     tar             |       []          [] []    [] [] [] [] [] [] [] | 10
+     texinfo         |                   []                            |  1
+     textutils       | []    []    []    []       [] [] [] []       [] |  9
+     wdiff           | []    []    []    []          [] [] []       [] |  8
+                     `-------------------------------------------------'
+       16 languages    cs da de en es fi fr it ja ko nl no pl pt sl sv
+       27 packages      3  2 24  1 17  1 26  2  1 11 20  9 19  7  7 17  167
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If August 1997 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites.
+
diff --git a/ANNOUNCE b/ANNOUNCE
new file mode 100644 (file)
index 0000000..a0ed602
--- /dev/null
+++ b/ANNOUNCE
@@ -0,0 +1,114 @@
+Public release of LyX version 1.0.1
+===================================
+
+What is LyX?
+------------
+
+LyX is an advanced open-source "document processor".   Unlike standard
+word processors, LyX encourages writing based on the structure of your
+documents, not their appearance, It lets you concentrate on writing,
+leaving details of visual layout to the software.
+
+With the familiar face of a WSYWIG word processor, LyX produces high
+quality, professional output -- using LaTeX, an industrial
+strength typesetting engine. No knowledge of LaTeX is required to
+use LyX; however, there is also a "TeX mode" which allows you to enter
+plain LaTeX commands.
+
+All in all, LyX is a complete environment for writing documents.  It has
+superior support for scientific writing, but works well for any kind of
+document.
+
+Read more about LyX (including screen shots) at:
+
+    http://www.lyx.org/
+
+What can LyX do?
+----------------
+
+A very incomplete feature list:
+
+- "standard" word processing: fonts, cut & paste, infinite undo...
+- footnotes, citations, cross-referencing, faxes, spellchecking
+- almost any math expression (with a simple, but powerfull interface)
+- automatic, multilevel outline support (enumerated or bullets)
+- tables and embedded postscript figures support
+- import LaTeX or ASCII
+- export LaTeX, ASCII, DVI, PostScript, LinuxDoc-SGML
+- fair support for non-English documents and/or menus
+- extensive documentation, including a tutorial
+- version control using RCS
+
+What's new compared to LyX version 0.12.0?
+------------------------------------------
+
+Most importantly, import of LaTeX documents is possible if you have
+Perl installed.  Other than that, some new features, and lots of bug 
+fixes. See WHATSNEW
+
+How stable is LyX?
+------------------
+
+This release is considered stable, but as with any software, you should 
+take appropriate back-up steps in a production environment.
+
+Where can I get it?
+-------------------
+
+LyX is distributed under the GNU General Public Licence (GPL), which
+means that you can not only use it freely, but also modify and
+redistribute it, provided that you include the source of the program.
+
+The main LyX site is
+
+       ftp://ftp.lyx.org/pub/lyx/
+
+with mirrors at
+
+       ftp://alpha.tat.physik.uni-tuebingen.de/pub/lyx
+        ftp://ftp.lip6.fr/pub/lyx/
+        ftp://ftp.sdsc.edu/pub/other/lyx/
+        ftp://ftp.fciencias.unam.mx/pub/Lyx/
+       ftp://mirror.aarnet.edu.au/pub/LyX/
+       
+The source code package is available at:
+
+        ftp://ftp.lyx.org/pub/lyx/stable/lyx-1.0.0.tar.gz
+       ftp://ftp.devel.lyx.org/pub/lyx/lyx-1.0.0.tar.gz
+
+and at the mirrors listed above.
+
+You need to have XForms version 0.81, 0.86 or 0.88 to compile your own 
+version.  Version 0.88 is highly recomended.
+
+Ready-to-run precompiled binaries for various platforms are available at:
+
+        ftp://ftp.lyx.org/pub/lyx/bin/1.0.0/
+
+Binaries for i386-Linux are also available at your local sunsite mirror:
+
+        ftp://sunsite.unc.edu/pub/Linux/apps/editors/lyx-1.0.0-bin.tar.gz
+
+Credits
+-------
+
+The LyX Team is composed of volunteers from around the world.  Many, many 
+people have helped make the 1.0 release possible, including:
+
+    Lars Gullik Bjoennes, Alejandro Aguilar Sierra, Asger Alstrup,
+    Jean-Marc Lasgouttes, Juergen Vigna, John P. Weiss, Bernhard Iselborn,
+    Andre Spiegel, Allan Rae, Henner Zeller, Robert van der Kamp,
+    David L. Johnson, Amir Karger, Joacim Persson, Peter Suetterlin,
+    SMiyata, Alkis Polyzotis, ...
+
+Special thanks should go to Matthias Ettrich who started it all.
+
+Feedback
+--------
+
+Please direct any comments or questions to the appropriate mailing list as
+described on the LyX homepage (http://www.lyx.org/).
+
+Enjoy!
+
+The LyX Team
diff --git a/CHANGES b/CHANGES
new file mode 100644 (file)
index 0000000..b641997
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,3841 @@
+since 1.0.4pre8
+- Added revtex4 layout, template, and (skeleton) docs (Karger)
+- updated pl.po (Pawel)
+- updated makeDocBookFile (Jose)
+- example and template file for DocBook (Jose)
+
+since 1.0.4pre6
+- recreated all po files to be up to date with the lyx.pot. (Lgb)
+- updated dependencies in src/Makefile.in (Lgb)
+- small fix in table.C where the PWidth was not returned
+  correctly for multicolumn-virtual-multirow-cells (Jug)
+- A (hopefully) last change so that caption for floats work corectly (Jug)
+- Small copy/paste bug fix from Jose (Jug)
+- Now multicolumns work for DocBook and some quirks with
+  caption are now fixed. This should work now pretty good :) (Jug)
+- Small fix for width entry and multicolumns in tabulars (Jug)
+- Introduced Tabular export for Jose's DocBook (Jug)
+- dummy change because of new cvs location (Lgb)
+- Finally corrected detection of DocBook classes. Note that linuxdoc
+  textclasses are now defined with \DeclareLinuxDocClass, while
+  docbook classes use \DeclareDocBookClass (JMarc)
+- Updated no.po (Lgb)
+- Updated pl.po (Pawel)
+- Added key binds for Scientific Word (Serge Winitzki)
+- Better support for russian: cyrrilic input encodings, a
+  few bugfixes and new russian splash screen (Const Kaplinsky)
+- Changed the shortcut of Insert->Float->Figure so that it makes more 
+  sense, as pointed out by Rick (JMarc)
+- Fix the rendering of PS images on some color display (Dan Mueth)
+- OS/2 fixes in file handling (SMiyata and Arndt)
+- Fix possible 8bit problem in math editor (Leonid Zeitlin)
+- In generated LaTeX, font selection must be done before font 
+  encoding selection, as noted by Fred Hucht (JMarc)
+- more docbook updates: the .eps is stripped from the graphics name,
+  the generated Docbook is updated to the latest, v3.1 (Jose')
+
+since 1.0.4pre4
+- some more changes for the scroll-wheel support. using the wheel
+  does not move the cursor. Slight optimization, removing of
+  dead-code from BufferView::WorkAreaButtonPress. (Lgb)
+- to make logic better the whell has been reversed (Lgb)
+- support for accellerated scroll-wheel support (Rvdk, Lgb)
+- fixed custom-pagesize printing bugs.  Added a new lyxrc variable
+  print_paper_dimension_flag for setting custom page sizes.
+  Also made sure the appropriate lyxrc variables were used rather than
+  relying on hardcoded entries   (ARRae)
+- fixed bug in lyxrc parsing, table not in alphabetical order (again!)
+  -- spotted by Reuben Thomas (ARRae)
+- Updates to german translation (Pit)
+- Fix off-by-one error in the File menu (JMarc)
+- Index insets do not show the indexed word anymore, since it is
+  likely the word just before (JMarc)
+- Some changes to make update/view/dependency checking help us to just
+  the number of required latex runs. (Lgb)
+
+since 1.0.4pre2
+- updated documentation from repository (Lgb)
+- changed parsing of the latex log in LaTeX.C to not care about
+  \listfiles anymore. No we should be able to see more/all external
+  files used by LaTex. (Lgb)
+- do not output \listfiles into the latex file anymore (Lgb)
+- Extracted, applied and tested Alexandre Makarenko's patch about
+  better drawing of the () delimiter in mathed (Alejandro)
+- AASTeX updates (Mike)
+- Dutch translation team credits added (Allan)
+- Fix crash when closing math panel with an open symbol menu (Allan)
+- Update to DocBook support (Jose')
+- Fix several crashes when entering explicit TeX macros in math editor
+  (Alejandro)
+- The language setting "french" already provides the index commands;
+  make sure we are not including makeidx.sty in this case (JMarc)
+- fix bug in environments when one of the paragraphs has specific
+  settings  (JMarc) 
+- fix crash when reading .eps file with a malformed BoundingBox (JMarc)
+- Update to fr.po (Emmanuel)
+- provide configuration example to use dvilj4 instead of dvips (in
+  lyxrc.example) (Reuben)
+- Better support for different shells wih different syntax under OS/2 (Arnd)
+- Work around autoconf bug where it fails to detect correct arguments
+  for select() with g++ 2.95 (JMarc)
+
+since 1.0.3
+- Some docbook updates. font handling (Jose')
+- Add new ProvidesURL tag for textclasses which already have a \url
+  definition (JMarc)
+- Simplify the emergency definition of \url (when url.sty is not
+  installed); URLs are now aways output as \url{...} (JMarc)
+- Add binding M-i u for url-insert (Reuben)
+- Fix typos in LyX-provided LaTeX macros (JMarc)
+- Fix a bug where a directory could be mistaken with a regular file,
+  with all the nasty consequences one can imagine; thanks to Benjamin
+  Korvemaker for pointing out this one (JMarc)
+- small fix to configure in the case CXX is explicitely set (Albert Chin)
+- revert the `feature' that caused footnotes to appear on the wrong
+  page when inside a list. This will re-activate an older bug, where 
+  an enumeration inside a footnote inside an enumeration gets a wrong
+  numbering. (JMarc)
+- Fixed small configure bug when the CXX variable is set (Albert
+  Chin-A-Young) 
+- Fixed a bug in DeleteTableRow-Function (Jug)
+- Fixed the evil egcs/alpha bug that has been plaguing us for some time 
+  (Michal Jaegermann)
+- New Italian Docs (Claudio Coco)
+- Improved lyxserver: INFO or ERROR always reported in the output pipe;
+  added '\n' to always terminate server messages; client names
+  remembered, each client notified by name when LyX exits (Stefano)
+- LyX::Client perl class for bidirectional communication in
+  development/lyxserver/perl (Stefano)
+- Updated wa.po (Pablo)
+- Fixed problem that prints were different from previews (Jug)
+- Fixed problem with multiline-cells and multicolumn, finally (Jug)
+- Added also german port for g-brief (Jug)
+- New Catalan translation (Francesc Burrull i Mestres)
+- Added the g-brief support from Thomas Hartkens (Jug)
+- Small fix in text2.C for delete-table-row (Jug)
+- Preliminary support for DocBook documents (Jose')
+- Support for AASTeX package (Mike Ressler)
+- Some tweaks detected by Sun CC 5.0; having a picky compiler is nice...
+  (JMarc)
+
+since 1.0.3pre4
+- similar changes as the one made to VSpace::NONE done several other 
+  places too. (Lgb)
+- New walloon localization (Lorint Hendschel)
+- Fix the lyxserver, so that the answer to the 'hello' message is
+  terminated by '\n' (JMarc)
+- fix to VSpace::NONE in lyx_cb.C (Lgb)
+- remove the gravity of the multi line input in the preamble form
+  so that the scroll bar stops doing stupid things on resize (JMarc)
+- fixed a LaTeX export bug when using 'Keep' and a standard skip as
+  paragraph spacing (JMarc)
+- updated pt.po, new pt_splash document (Pedro Kroger)
+- fixed bug where the width of cells would be lost by copy-and-paste of
+  a table (JMarc)
+
+since 1.0.3pre2
+- fixed a bug in LaTex.C that amde latex be run to few times in certain
+  circumstances. Now latex might be run too many times, especially if 
+  files are generated by exteral programs as makeindex or bibtex. (Lgb)
+- Fixed a bug in no.po (Lgb)
+- LaTeX::scanLogFile now reports an NO_OUTPUT error if a dvi
+  file was not created. (Lgb)
+- LaTex::scanLogFile now reports TOO_MANY_ERRORS if >=100 errors
+  during the LaTex run. (Lgb)
+- Update to revtex.cls (Dan Mueth)
+- honor the LC_CTYPE locale setting (Leonid)
+- fixes to math code for better 8bit support in math text mode 
+  (Leonid Zeitlin)
+- fixed font-default in math mode (Etienne)
+- fixed cut-and-paste of included files, so that parameters are 
+  correctly copied (JMarc)
+- added a check for sys/types.h in configure; this should hopefully
+  help compilation under HP-UX (JMarc)
+- updated sl.po (Roman), it.po (Fulvio)
+- removed safer_getcwd from filetools.[hC] (Lgb)
+- updated OS/2 configure scripts (SMyiata)
+- added new binding 'M-m ~S-quotedbl' for ddot math accent (JMarc)
+- fixed dvips command line when \print_extra_options is used in lyxrc (JMarc) 
+
+since 1.0.2
+- added it.po from Fulvio Boggia (Lgb)
+- search/replace patch from Daniel Naber applied (Lgb)
+- New File->Import->Noweb menu entry (Kayvan Sylvan)
+- fix bug affecting latex dependency tracking (Lgb)
+
+since 1.0.2pre3
+- always use absolute path in .dep files (Lgb)
+- updated cs.po (Ludeck), de.po (Pit), fr.po (Emmanuel)
+- small tweak in lyxserver.C to help cygwin compatibility (JMarc)
+- reLyX 2.9.2.1: Added -n option and equivalent noweb2lyx executable.
+  Written by Kayvan Aghaiepour Sylvan (Karger)
+- fixed the appearance of the Search&Replace popup (JMarc)
+- fixed a bug in search and replace where an inset would match a space;
+  cleaned up LyXFindReplace1::IsSearchStringInText() (JMarc)
+- fixed the reported lyxvc bug as per patch. (Lgb)
+- Updates and corrections to LaTeXConfig.lyx (JMarc)
+- reLyX 2.9.1.1: Windows compatible! Minor bug fixes/command additions (Karger)
+- Updated sl.po (Roman); fix buglet in cs.po and es.po (JMarc)
+- make configure accept the upcoming xforms version 0.89 (and 0.90) as
+  OK, since TC Zhao says they are API compatible. (JMarc)
+
+since 1.0.2pre1
+- Fix bug where lyxlex keyword table for reading layout files was not
+  initialized correctly; removed a few unused LT_xxx codes (JMarc)
+- Fix bug where using the index feature with a AMS class would cause a
+  redefinition error and cleanup the code which handles the amsmath
+  package; this means that I added two new textclass tags
+  (ProvidesAmsmath and ProvidesMakeidx) and used them in the ams
+  classes (JMarc)
+- Added a check in chklatex.ltx to get the LaTeX version; updated
+  LaTeXConfig.lyx.in to explain that you should have at least
+  LaTeX revision 1995/12/01. (JMarc)
+- Add 'francais' as new selectable language (JMarc)
+- Make sure that no extra space is added at the beginning of footnotes
+  (JMarc)
+- Beginning of new french documentation (PH Boinnard), update of German
+  docs and new UserGuide (Pit)
+- Updated de.po (Pit), fr.po (PH Boinnard), pl.po (Dzieko)
+- Make sure that the font commands always toggle, independently of
+  what the setting in the character popup is (JMarc)
+- Correctly disable the Replace All button when document is read-only (Daniel)
+- New README and INSTALL files for OS/2 and updated configure.cmd (Arnd)
+- Cleaned the bibtex code and moved to Buffer (Ale)
+- Citation support for multipart documents using the same old trick (Ale)
+- New french documentation; currently Intro, splash and the tutorial
+  examples are done.
+- fix the shortcut to dots-insert in menus.bind (JMarc)
+- New broadway textclass; updated hollywood textclass (Garst)
+- Let LyXVC handle filenames with spaces. (Lgb)
+- Fix bug where the cancel button of the version control popup did not
+  work correctly (Daniel)
+- Fix compilation buglet on some systems in insetbib.C (JMarc)
+- Small fix to CygWin support (JMarc)
+
+since 1.0.1
+- Removed a stupid warning when loading a child buffer from its parent (Ale)
+- Now parent and children buffers can share the same reference list (Ale)
+- New bufferparam parentname, currently only used by insetincludes (Ale)
+- updated documentation (Lgb)
+- updated no.po (Lgb)
+- Listing of bibtex labels from the bib file (patched by Lgb)
+- Copyright dates updated in a forms/ and lyx.man. (ARRae)
+- reLyX 2.9: graphics commands. Also several bug fixes (Karger)
+- Fix bug when reading cross references from older documents (Jose')
+- Automatically use package algorithm.sty when necessary (JMarc)
+- reLyX supports \epsffile, \epsfbox, \epsf[xy]size, \psfig, \epsfig,
+  but support is probably still broken (Karger)
+- Various changes to src/Makefile and configure script to accomodate
+  cygwin environment (JMarc)
+- Updated sl.po (Roman Maurer), cs.po (Ludek Brukner),
+  pt.po & pt_menus.bind (Pedro Kröger) 
+- fix buglet in dinbrief.layout (JMarc)
+- small fix to OS/2 configure.cmd (SMyiata)
+
+since 1.0.1pre4
+- Cleaned up Literate.lyx (MKew)
+- Cleaned up Literate section of Extended (MKew & ARRae)
+- Added S-C-A/E/B/F keybindings to emacs and xemacs.bind (ARRae)
+- Updated toplevel OS/2 configure.cmd (SMiyata)
+- fix bad line break after menu separator (JMarc)
+- Pedantic version number updates in UPGRADING.
+- The menu separator is displayed on screen as a triangle, like the
+  LaTeX output. (Asger)
+- Updated IEEEtran and latex8 entries in LaTeXConfig.lyx.in (ARRae)
+- Updated OS/2 configuration scripts (SMiyata)
+- New pl.po (Dzieko), pt.po (Pedro Kroger); Updated cs.po (Ludek), 
+  de.po (Pit), nl.po (Ivo Timmermans), fr.po (JMarc), sv.po (Joacim)
+- Splash documents for german (Pit) and polish (Dzieko)
+
+since 1.0.1pre2
+- The splash document is now loaded according to locale (i.e., if
+  LANG is xx, xx_splash.lyx is searched first) (JMarc)
+- Added 'replace all' functionality to find&replace popup (Daniel)
+- updated de.po (Pit), fr.po (JMarc), ru.po (Victor); added cs.po (Ludek 
+  Brukner)
+- Added example file for literate programming (Edmar)
+- Change the 'view log' function so that it shows the log of the 
+  latest literate build if adequate (Edmar)
+- bibitemUpdate now adds bibtex entries if there are any (provided that
+  there weren't any ordinary bibliography entries).  (ARRae)
+- Small fix to bmtable pixmap handling to get correct palette used and
+  substitutions made.  (ARRae)
+- Fix 'index last word', which did not work after a float (JMarc)
+- Fiddled a bit with the definition of the menu separator (JMarc)
+- Added Insert->Special Chars->Menu separator. (Asger)
+- Added underline to "foot" and other marks, to make them look more
+  like hyperlinks. (Asger)
+- Delete autosave and emergency files if we say no to load them. (Asger) 
+- Improve fix to thebibliography environment; make sure that empty
+  citations give reasonable results (JMarc)
+- Make the definition of \LyX use \providecommand (JMarc) 
+
+since 1.0.0
+- imported updated documentation. (Lgb)
+- Fixed reported crash when we had a non-existing figure. (Asger)
+- Fix bug in scrlettr class, which did not allow for several letters (Berndt)
+- Make sure that the thebibliography environment never gets an
+  empty argument (JMarc)
+- Make sure that export->custom works correctly when file name contains
+  weird characters (JMarc)
+- Display a welcome document (example/splash.lyx) when LyX is run
+  without an existing .lyx directory (Daniel)
+- Bug fixed with dvi file export: dvi file export did not work after
+  printing (or previewing) and vice versa as long as the same file was
+  concerned. (Heinrich Bauer)
+- Print form extended so that it now allows for specifying a range of
+  pages and a number of copies to be printed (or exported as postscript) 
+  (Stephan Witt) 
+- Added APA textclass (Randy Gobbel)
+- Added support for literate programming with noweb (Edmar)
+- cleanups to FileInfo.[Ch] (JMarc)
+- Fix printing buglet when only spaces are typed into the 'printer'
+  input field (JMarc)
+- make sure that URL use the \url|foo| form (or another character than |)
+  so that one can use \verb if url.sty is not available (JMarc)
+- remove extraneous space in url:s when no 'Name' is given; remove
+  menu entry for HTML URL (JMarc)
+- Fixed bugs with clicking.  You could not open insets unless you clicked
+  on the left hand side of the button.  Similar for math insets, and other
+  clickable elements. (Asger)
+- Possibly chase symlinks if the binary path is a symlink to a symlink 
+  to a ... to the real executable (Jan Vroonhof) 
+- Cleanup the code for reading directories in the file popup (Jan Vroonhof)
+- Output a warning when the user tries to insert two consecutive spaces 
+  (Daniel Naber)
+- fix printing when there is a space in the file name (Charles P. Wright)
+- fix the slides textclass (JMarc)
+- Several bugfixes for tables (Joacim)
+  * cell 0 (upper left corner) couldn't be set to using linebreaks (C-Ret,
+    nothing happend)
+  * Certain combinations of multicol and linebreak (usually a linebreak row
+    above a row with a multicol in it) gave wrong or broken output in the
+    LaTeX file.
+  * A linebreak cell in the last cell (lower right corner) didn't get a
+    \smallskip{} at the bottom, unless the previous cells on the last row had
+    linebreaks too (in that case, the last text in the last cell didn't show
+    up in the LaTeX at all) ...think that is a simplification of the symptoms
+    actually.
+  * The cursor was jumping to the end of the text in the Extra Table Form
+    popup at every insertion.
+  * The fields in the Extra Table Form wasn't ::Clone()'d
+- Fix crash on solaris when an url has just been inserted (Joacim)
+- Add a \maketitle at the end of the document if it contains only
+  InTitle layouts (JMarc)
+- switched configure to use autoconf 2.13. Developpers should upgrade
+  autoconf (JMarc)
+- Add test in configure to determine the right casts to use in a
+  select() call (JMarc)
+- Fixes for creating a binary distribution. You can now specify
+  PERL=none to configure if you want reLyX to output just a message 
+  telling the user to adjust perl location (JMarc)
+- LyX tends to crash on Linux/AXP when compiled with egcs 1.1.1; see
+  INSTALL for a workaround (Jochen)
+- Updated ru.po (Victor)
+- Exit nicely when DISPLAY is not set correctly (Matt Power)
+- Fix crash when a BibTeX inset has been copied (Allan)
+since 1.0.0pre8
+- Fixed crashes after complex cuts. (Asger)
+- Update to sv.po (Joacim)
+- Fixed positioning of Math Panel pop-ups. (Asger)
+- Fixed click cursor positioning, so that if you click at the left half of
+  a letter, the cursor will go to the point to the left, rather than
+  always to the right. (Asger)
+- Fixed a few bugs in the Insert->menu commands. (Asger)
+- Updated PO files. (Asger)
+- Small fix to stop LyX crashing when layouts etc. end with "\r\n"
+  instead of the expected '\n'.  Now we work on Windows this is
+  very important.   (ARRae)
+- Updated fr.po (JMarc)
+- updated ru.po from Victor Lavrenko <lyx@lavrenko.pp.ru>. Comments
+  appreciated.
+- Clarified license - COPYING (Asger)
+- Tweaked mouse click policy in math insets, and in text a bit. (Asger)
+- New template for revTeX (Amir)
+- Add in development/ a spec file (with an accompanying README) to 
+  create RPMs (Mate)
+- New math function to pull out an argument, currently available by
+  the backspace key. (Alejandro)
+- fix the 'html type' button in url inset popup (JMarc)
+- make the 'name' field in the cross reference popup disabled for LaTeX 
+  documents (JMarc) 
+- Update to sl.po (Roman Maurer)
+- small fix to po/Makefile.in.in for non-GNU make (JMarc)
+- New manpage LinuxDoc class (Jose')
+- reLyX 2.8.1.2: directory bug fix (Karger)
+- Fixed math accent on macros bug (applied Ettiene's patch)  (Alejandro)
+- Removed a flag that hindered initialization of math array after
+  another math array. This should fix the bug in most cases.  (Alejandro)
+- Added optional argument to be able to insert a label without
+  the dialog. Several other commands should have the same. (Alejandro)
+- added some xresources settings to askForText to get l10n for the
+  buttons in fl_show_input. (Lgb)
+- changed MenuLabelInsert and a func in formula.C to use askForText
+  instead of fl_show_input. (Lgb)
+
+since 1.0.0pre7
+- Fix problem with TOC in LinuxDoc documents (Jose')
+- Change the word-* functions so that they behave similarly to emacs
+  (Etienne)
+- fix for unrecognised TeX error (Lgb)
+- updated no.po and removed cruft from all other po files (Lgb)
+- When printing, do not add a space after the \print_to_file switch
+  anymore; this allows to use dvilj instead of dvips (JMarc)
+- made inseturl accessible from all documents. (Lgb)
+- fix to inseturl (when writing LaTeX) (Lgb)
+- made inseturl editable (Lgb)
+
+since 1.0.0pre6
+- New textclass/documentclass hollywood to typeset scripts (Garst)
+- New slovenian translation (Roman Maurer)
+- Updates to the slides textclass and template (JohnW)
+- Fix problem with extra paragraph breaks between math displayed
+  equations (JMarc)
+- Find&Replace now automatically jumps to the next match after doing a 
+  replacement (Daniel Naber) 
+- The color of newline characters on screen can now be changed via 
+  the -NewLineColor option (Edmar)
+- New function server-goto-file-row (Edmar)
+- change the Character popup so that it remains compatible with xforms 0.81.
+  The patches in forms/ have been somewhat redone so that they apply to the 
+  of the 0.88.1 version of fdesign (JMarc)
+- first draft of german translation of Extended.lyx (Pit)
+- Fix a bug with spaces in math labels (Alejandro)
+- Set the timeout for ispell to 15 seconds instead of 2 (JMarc)
+- Make the update button of Insert->Cross_Reference remember what the
+  current entry was (JMarc)
+- fix bug where bibliography insets were not deleted when switching
+  to another layout (JMarc)
+- fix the change case functions which did not work (and corrupted
+  memory) after footnotes (JMarc)
+- fix newly introduced bug which prevented Compose key from working (JMarc)
+- Added french menu bindings fr_menus.bind; not yet complete (Emmanuel) 
+- Protected spaces are output as plain spaces in explicit LaTeX code (Edmar)
+- Better support for Aspell (Kevin Atkinson)
+
+since 1.0.0pre4
+- fix to latex log parsing, it could discover false errors (Lgb)
+- Updated menus.bind to reflect the real menu shortcuts (Etienne)
+- Made the new url inset use url.sty. (Lgb)
+- added url.sty to LaTeXFeatures and to LaTeXConfig.lyx.in (Lgb)
+- Possible fix for the "lyxcrusher" file from Asger. (Lgb)
+- Updated no.po. (Lgb)
+- New (html)url inset for linuxdoc and LaTeX. References also work
+  for linuxdoc now (Jose').
+- IEEEtran document class added. Some documentation in .layout (ARRae)
+- Brand new german documentation from Peter Suetterlin. It is automatically
+  obtained from the Help menu if your LANG is 'de' (JMarc)
+- reLyX 2.8.1.1: -o option, bug fixes, plus a couple new commands
+- new file sv_menus.bind (Joacim)
+- nl.po updated.
+- changed to use fl_root instead of RootWindow (Lgb)
+- some small changes to make doc++ make nicer output. (Lgb)
+- Fix problem where, after search/replace or spellcheck, the font of the 
+  text was not correctly kept (JMarc)
+- Re-introduces styles paragraph*/subparagraph*, since they are needed for
+  completeness. (JMarc)
+- applied the scrollmouse patch from Mark Huang (Lgb)
+- fix autosave to avoid saving when the backup file is already up to date, 
+  and to avoid disabling autosave after the first try (JMarc)
+- added support for footnotes in linuxdoc (Jose')
+- added support for different textclasses in linuxdoc (Jose')
+- fixed two table-bugs: Sometimes, documents from 0.12 would cause
+  tables to be rendered wrong: They would extend far beyond the screen.
+  Other times, LyX produced wrong code: empty parbox{} arguments in
+  tables.  (Asger) 
+- added ru.po from Victor (Lgb)
+- fixed a bug in da.po (%1 used instead of %x1) (Lgb)
+- fixed segfault bug in tr.po (missing items in menu string) (Lgb)
+- updated no.po (Lgb)
+- updated de.po (Peter Suetterlin)
+- make sure the lyxlookup.C compiles under X11R4 (without compose key-handling,
+  though) (JMarc)
+- updated slides textclass (JohnW)
+- fixed the output of <>| in LaTeX. It now outputs the caracters of the 
+  \textxxx{} macros according to the encoding and font (JMarc)
+- Change to display to layouts with Bibliography label so that no space is 
+  used if the label is empty (for cv textclass) (JMarc)
+- Renamed polish-2.kmap to european.kmap. This keyboard map should provide
+  most accented characters used in european language, to be used on a 
+  keyboard which lacks dead keys. (Jacek)
+- Updated fr.po  (Emmanuel)
+- Improved support for LinuxDoc (Jose)
+- for textclass authors: \DeclareSGMLClass can now take an optional
+  argument like \DeclareLaTeXClass (JMarc)
+- Do not try to \protect TeX code inside of moving arguments like
+  section headers; users are supposed to know what they do (JMarc)
+- use LYX_DIR_10x instead of LYX_DIR_12 to specify the system directory (JMarc)
+- The binding `cua' is used by default if none is specified (JMarc)
+- lyxrc is no more overwritten but lyxrc.example is installed instead (JMarc)
+
+since 1.0.0pre3
+- change in formula.C to not add 2 to the width of a mathinset (Lgb)
+- small change to configure to only use -lc and -lm if needed. (Lgb)
+- Reverted to former no-update policy for the "Insert->References" popup
+  This is to allow multipart-doc users to access the labels from a
+  different document.  RefUpdateCB should be changed to handle multipart
+  docs intelligently.   (ARRae)
+- Tiny fix to srcdoc generation in Makefile.in (missing /) (ARRae)
+- reLyX 2.8: (Karger)
+  -- verbatim & \verb
+  -- -h option
+  -- translate math commands (e.g., \sp -> ^). Configurable.
+  -- translate certain arguments to untranslatable commands as regular
+     LaTeX (e.g., second argument to \rotatebox). Configurable.
+  -- translate a few more simple commands + various small bug fixes
+  -- kernel cleanup
+- added toolbar icon for LFUN_RUNDVIPS received by mail
+  from Gerhard Zintel (Lgb)
+
+since 1.0.0pre2
+- Fixes to minibuffer and lyxserver (Joacim)
+- Added an \spell_command entry in lyxrc, for those who use something
+  else than ispell (aspell?) as spellchecker (JMarc)
+- reLyX is now installed even when perl has not been found (JMarc)
+- Fixe several problems with Sun CC on solaris (JMarc)
+- Added Location and Telephone styles to the letter class (JMarc)
+- Update polish-2.kmap, add two swiss kmaps from Alain Borel (JMarc) 
+- change `\' to be output as \textbackslash{}, instead of the esoteric
+  \char`\\ which used to be there. I still do not know how to output `"'
+  though (JMarc)
+- a simple fix for the \centering problem, this problem existed also for
+  \raggedleft and \raggedright. The fix is perhaps not perfect latex file
+  output wise, but it is very simple, and should not have any other
+  implications than the intended one. (Lgb)
+- set the combo dropdown to do double buffering, looks a lot nicer. (Lgb)
+- added a hack to ensure that the screen is updated through the 
+  correct path. As far as I can se there is close to no speed penalty. (Lgb)
+- updated no.po (Lgb)
+- updated documentation (Lgb)
+- Fixed the LaTeX generation code (paragraph.C) to support use of endfloats.sty
+  and subtables/subfigures containing tables.  Fairly simple controls
+  on the addition of '\n' to the output.  Further comments in code. (ARRae)
+- updated fr.po, contributed by Emmanuel Gureghian (JMarc)
+- fix custom export so that dvips can be used as filter (Joacim)
+- fix running of background tasks under OS/2 cmd.exe (SMiyata)
+- Change the behaviour of the character popup (Joacim)
+- fixed a small update bug in table.C (Jug)
+- made isValidLength accept negative values (Lgb)
+- Fix bug inserting an index at the beginning of a paragraph (Joacim)
+- Fixed the display of \mathit characters (JMarc)
+- Updated LaTXConfig.lyx.in to include latex8 description       (ARRae)
+- Further update of inset popup hiding on buffer switch         (ARRae)
+  -- Added a HideFiguresPopups function to hide all figure editing
+     popups on buffer switch.
+  -- Added insetindex popup to be hidden also
+  -- removed insert-figure popup from group to be hidden because it
+     will correctly handle readonly buffers and buffer switches
+  -- All inset popups that work on a particular instance of an inset
+     (recorded by the popup) are now hidden on a buffer switch or
+     read-only toggle.
+- Fixed InsetInclude to hide popup if deleted -- fixes segfault (ARRae)
+- Hide most/all inset popups when buffer switched               (ARRae)
+  -- the contents of the popups only makes sense for the previous buffer
+     and hiding the popups avoids accidental modification of a buffer
+     the user can't see.
+- LinuxDoc: removed support for <tscreen>, cleaned up code for generation
+  of sgml, cleaned up <quote>  (Jose).
+
+since 0.12.1pre8
+- updated dependencies in src/Makefile.in (Lgb)
+- fixed (partly) line breaking in LaTeX output; InsetQuotes::Latex was
+  returning a number of characters instead of a number of lines 
+  (ARRae & JMarc)
+- da.po bugfixed and updated. (Asger)
+- Now, we have both "File->Import->Ascii as Lines" and 
+  "File->Import->Ascii as Paragraph". (Asger)
+- Better behaviour in Version Control with changed documents. (Asger)
+- Optional hyphens will not break words into two when spellchecked. (Asger)
+- Using Ctrl+enter to produce empty lines in LyXCode works correctly, and
+  produces an empty line rather than an error now. (Asger)
+- Export as LaTeX, SGML, and ASCII won't silently overwrite any 
+  files. (Asger)
+- removed assignment to static variable (paragraph_id) in lyxparagraph.h
+  -- assignment was already elsewhere in the code (ARRae)
+- reLyX 2.7.2.1: Translate common optional args to \documentclass (Karger)
+- reLyX 2.7.1.1: support \input and \include. -p option. Whitespace and
+  word-wrap more like LyX. Translate commands generated by specific LyX layouts
+  (e.g., \lyxaddress). (Karger)
+- Changed the time of action on clicks on references, insets, math insets,
+  etc., such that things won't happen until you RELEASE the mouse button,
+  rather than when you press it.  This makes it much easier to select text
+  close to these things. (Asger)
+- added an X error handler. We should no more lose data because of
+  bad X servers (or faulty X-code) (Lgb)
+- Fixed bibtex database support so that it works in a temp. dir (JMarc)
+- Fixed minipage LaTeX generation within floats/footnotes (ARRae)
+- Added support for localized bind-files and localized documentation 
+  (Joacim & JMarc)
+- Fixed crash when \kbmap is true, but no keyboard map has been defined (JMarc)
+- Reworded lib/lyxrc a bit, so that printer setup is hopefully easier
+  to understand (JMarc)
+- fixed readonly operation of dialogs (ARRae)
+- fixed the new File->Import submenu so lastfiles > 4 still works (ARRae)
+- reLyX 2.6.1.3: support \hfill and optional argument to \cite,plus
+  several bug fixes
+- Fix a problem with LinuxDoc documents, where the first character
+  after an \htmlurl was lost in SGML output (JMarc)
+- We had a segfault if a SGML file that did not exist was opened. Fixed!
+  (Perhaps not a perfect fix, but it does not segfault.) (Lgb)
+- Change the spellchecker to reject collated words like 'wellcome' by
+  default. See lyxrc if you do not like that (JMarc)
+- Fix the spellchecker so that it ignores text marked as LaTeX (JMarc)
+- Removed some old SGI specific code which seems to hurt more than it helps 
+  (JMarc)
+- Augment the buffer size MAX_BUF_LEN of LyXLex to 2048 (JMarc)
+- The environment variable PERL is now honored by configure (JMarc)
+- Update configuration scripts for OS/2 (SMiyata)
+- Work around a bug in DEC cxx 6.0. The code is at least as clear as
+  it used to be, in fact (JMarc)
+- Add definition of the lyxcode environment for the slides textclass (JMarc)
+- reLyX 2.6.1.2: lots of bug fixes, support for BibTeX commands (Karger)
+- made VSpace accept negative lengths. (Lgb)
+- applied patch by carsten (Lgb)
+- update of de.po (Peter)
+- update of sv.po (Joacim)
+- update of no.po (Lgb)
+
+since 0.12.1pre7
+- Added protection against !` and ?` ligatures in quote insets (JMarc)
+- Renamed 'Advanced Editing' to 'Extended Features' and removed
+  'How do I-' in help menu (John)
+- Fixed menus.bind to reflect the right bindings for the Layout-Menu (Jug)
+- added new commandtag layout-save-default to be able to insert the
+  "Save Layout as default" menu entry to the binds (Jug)
+- Small fix in table.C for segfault when reading tables converted
+  with reLyX (Jug)
+- Fix the display of labels, refs (all insetcommands, in fact) when
+  -Mono is in effect (JMarc)
+- Changed text Multi-Cell to Multicolumn in table->extra->menu (Jug)
+- Fixed handling of alignment-options for multicolumn-cells (Jug)
+- Added support for the new lyxrc command \relyx_command in
+  lib/configure (JMarc)
+- re-introduce old code in generation of list of references in
+  Insert->Cross_Reference when using the oldish xforms 0.81 (JMarc)
+- reLyX 2.6: better table support, \bibitem support, and bug fixes (Amir)
+- Click on a ToC inset, and the ToC pop-up appears. (Asger)
+- Improved logic on File Open with already opened documents. (Asger)
+- Updated *.po because of menu logic number changes. (Asger)
+- Fixed crashes when switching documents with open math insets. (Asger)
+- Disallow include files with textclass different from the master
+  document textclass (when creating LaTeX file) (JMarc)
+- Fix buglet where typing Return at the beginning of a bibliography
+  entry would lose the bibkey inset (JMarc)
+- Added contributed polish-2.kmap keymap file (JMarc)
+- Fixed bug which caused a segfault when deleting last row when
+  inside a math-inset (Jug)
+- Fixed a buglet in MenuNew with already open document. (Asger)
+- Fixed LString static initialization problem exposed on RedHat 5.1
+  causing crash on File Open. (Asger)
+- Added "File->Import" menu to allow direct import of LaTeX and ASCII files.
+  Requires Perl5.002 and reLyX to work for LaTeX files. (Asger)
+- Fixed wrong identity string. (Asger)
+- Replaced koma-script textclasses with better ones provided by Bernd 
+  Rellermeyer (JMarc)
+
+since 0.12.1pre6
+- Fixed custom-export to that makeDVIOutput is called only if type
+  .dvi or .ps is requested (Jug)
+- Fix buglet in generation of list of references in Insert->Cross_Reference 
+  (JMarc) 
+- Fixed small bug in producing command for fax_program (Jug)
+- Accept floats in bounding box for [e]ps pictures (JMarc)
+- fix bug in mathed where an empty fraction would cause a core dump (JMarc)
+- Add support for sans-serif fonts on screen in math editor (JMarc)
+- Added support for 'Other' spacing in Layout->Document (JMarc)
+- Hopefully made lib/configure more robust when latex could not be run
+  (JMarc)
+- fix crash when the paper layout popup is closed from the window manager 
+  (JMarc)
+- Newly created notes are now empty (JMarc)
+- Fixed bug with appendix and table of contents (Matthias)
+- added support for multiple packages in \DeclareLaTeXClass for classes that
+  need some packages. See for example latex8.layout (JMarc)
+- added Latex8.cls support -- IEEE conference papers (no docs yet) (ARRae)
+- minor fix to eliminate a "warning comparison of enumeral and non-enumeral
+  types" in math_inset.C   (ARRae)
+- attempt to reduce possibility of warnings when closing splashscreen
+  with the window manager (made it FL_NOBORDER and 7secs)    (ARRae)
+
+since 0.12.1pre5
+- table-header changed from multicol4 to multicol5 as there
+  are changes in the save-format (Jug)
+- fixed bug with multicolumns and header p{} (Jug)
+- fixed bug in LaTeX-minipage output (Jug)
+- fixed bug in production of \parbox in last table cell (Jug)
+- added support for User-defined table-headers (Jug)
+- added support for User-defined multicolumn-definition
+  also the width of multicolumns can now be specified extra
+  in the Width-Box (Jug)
+- \footnote[mark][text] only used for list-like environments   (ARRae)
+- Open bibitems with C-o (open-stuff) at the beginning of a paragraph
+  (Matthias)
+- reLyX 2.5.2.3: Read .lyx/syntax.defaults if possible; always use TeX mode,
+  never LaTeX layout, for untranslatable text (Karger)
+- Newlines marked as TeX are no longer output as \\ (JMarc)
+- LaTeX generation cleanup 
+  -- extracted common code into separate functions to improve maintainability
+  -- fixed a font generation bug as a result                      (ARRae)
+- LString::srep empty_rep static initialisation fixes (ARRae)
+- small speedup of LaTeX generation (about 3%) (ARRae)
+- small cosmetic change to LyXTextClassList::load() (ARRae)
+- update de.po (Peter)
+- reLyX 2.5.2.2: syntax files now contain "regular environments", and -s option
+  causes reLyX to read multiple (e.g., user-defined) syntax files (Karger)
+- really fix (??) the tendency of lib/configure to nuke useful files and
+  provide a usable packages.lst when LaTeX cannot be run (JMarc)
+- fixed bug with newlines in tables (Juergen)
+- layoutchoice is now updated at one, you don't have to move the
+  cursor or the mouse to make it update anymore (Lgb & patch posted to list)
+- small changes to the lyxvc code, now has default log msg. (Lgb)
+
+since 0.12.1pre4
+- also the check to hindre latex runs if there are gs' running 
+  has been disabled, it did't work anyway. (Lgb) 
+- new try for a closing to the gs render problem, SIGCHLD removed. (Lgb)
+- os2 files updated
+- reLyX 2.5.1.1: one major and some minor bug fixes (Karger)
+- reLyX 2.5: read in LaTeX command syntax plus bug fixes (Karger)
+- Added appendix support from Matthias. No menu or doc for now (use the
+  `appendix' function to toggle) (JMarc)
+- Added textclass ejour2 for Springer Journals from Martin Vermeer,
+  heavily modified by me; added corresponding documentation to
+  AdvancedEditing.lyx and LaTeXConfig.lyx  (JMarc)
+- Small fixes here and there (JMarc)
+
+since 0.12.1pre3
+- Fixed the behaviour of theorem-like environment in the LaTeX output;
+  updated Foils.lyx accordingly (JMarc)
+- Extended the syntax of LatexParam in layout files, so that arbitrary
+  fixed arguments can be given. Updated foils.layout accordingly
+  (JMarc)
+- Tried to make the documentation of layout files in Customization.lyx
+  a bit better (JMarc)
+- Fixes to sgml support from Jose (JMarc)
+- A few code changes in figinset.C (bad debug statements), lyxlex.h,
+  math_parser.C and vspace.h (warnings) (JMarc) 
+- New dinbrief.layout from Carsten Kaemmerer & Jürgen (JMarc)
+- Fixed hiding of invisible form_title (ARRae)
+- Fixed corrupt layout segfault,
+  reverts to article and gives a warning. (ARRae)
+- linuxdoc: Added more character-symbols to output (Bernhard)
+- linuxdoc: use latex-preamble as linuxdoc-preamble (Bernhard)
+- linuxdoc: problem solved, for NULL-ptr (Jose Abilio)    
+- Duplicated rom for math macros. (Alejandro)
+- Improved math parser error messages function. Better messages, and
+  updates lyxlex line number. (Alejandro)
+- Fixed bug reading accented undefined names. (Alejandro)
+- Fixed two bugs in layout files handling (JMarc) 
+- Fixed a typo in the hu.po translation file below (JMarc)
+- reLyX 2.4: Table support! (Also accents and center/flush[right|left])(Karger)
+- Added Hungarian translation and binding file, supplied by Kadar
+  András <kadara@eik.bme.hu> and Krémer Péter(JMarc)
+- Fixed Insert->Index in menus.bind (JMarc)
+- Fixed Layout->Document so that the font size and page headings lists
+  are refreshed correctly when switching class, as reported by Kalle
+  (JMarc) 
+- Updated a but Customization.lyx about layout files parameters
+  (JMarc)
+- Added new landslide.lyx example, provided by Kimmo Koli (JMarc)
+- Changed a bit the citation and index insets, so that the popups are
+  closed only when *their* inset is deleted (JMarc)
+- Fixed a color problem when using a private colormap (JMarc)
+
+since 0.12.1pre2
+- minor doc updates to Tutorial, UserGuide, and Introduction (Karger)
+- reLyX 2.3.1.1: lots of bug fixes and support for -c option (Karger)
+- New textclasses for koma-script package created by Bernd K"ummerlen
+  <bkuemmer@ix.urz.uni-heidelberg.de> (JMarc)
+- New tag \screen_font_popup in lyxrc, which has the meaning of the
+  existing \screen_font_menu; the semantic of the later is changed to
+  *really* apply to menus (JMarc)
+- Fix to lib/configure: works when LaTeX is broken (JMarc)
+- Fixes to configure: recover when perl is not found; add a
+  replacement for atexit on SunOS (JMarc)
+- Fix to src/Makefile.in: changed the order of libraries and added a
+  missing $(LIBOBJS) (JMarc)
+
+since 0.12.1pre1
+- SGML-buglet fixed, causing errors in sections with [] and {} (Bernhard)
+- inserted redraw after SGML-processing, such that error-boxes will be seen
+  immediatly (Bernhard)
+- added Buffer::redraw() for screen-update (Bernhard)
+- Fixed a bug regarding the insetbib-popup causing a crash if the inset was
+  deleted while the popup was active, same for insetcitation and
+  insetindex. (Joacim)
+- Changes to the documentation, re the numbers of undo-levels (Joacim)
+- A few more _()'s (Joacim)
+- Fixed the makepatch command and *really* re-added the reLyX.in
+  wrapper :-( (JMarc)
+- Fixed(?) problem with bibliography item number broken after 127. Now
+  the limit is 255 (JMarc)
+- Fixed problem with character £ in encodings other than latin1
+  (JMarc)
+- Removed the CommandTitle tag in layout files and added new tag
+  InTitle (JMarc)
+- Cleaned up ams layouts, so that Abstract works, among others (JMarc)
+- re-added the new reLyX wrapper, which got lost ; added reLyX
+  installation in binary distributions (JMarc)
+- Fixed the behaviour of Static labels in theorem-like environments ;
+  at least now what you get on screen is consistent with what you get
+  on paper ; fixlet to foils.layout (JMarc)
+- Patch by ARRae for missing paragraph breaks in environments (JMarc)
+- reLyX 2.3: reads layouts from LIBDIR/layouts/ (Karger) + buglet (JAMatos)
+- reLyX 2.2.3.1: -r and -t to handle unknown environments + buglets (Karger)
+- reLyX 2.2.2.1: -d (debug) + some bug fixes (Karger)
+- reLyX has a man page! (Karger)
+
+since 0.12.0
+- fixed a bug regarding melt and added an entry in the reference manual for
+  melt (Joacim)
+- fixed a few cosmetic bugs in the GUI (Joacim)        
+- Modified the way dvips is called in File->Print. NOTE THAT YOU WILL
+  HAVE TO FIDDLE WITH LYXRC TO PASS THE PRINTER NAME TO DVIPS. This is
+  the price to pay to have it work on mis-configured systems (JMarc)
+- You can now override the LYX_LIBS variable to make a binary
+  distribution of LyX with static libforms and libXpm. (JMarc)
+- Fixed bug in reLyX installation and textclass.lst generation (JMarc)
+- Fixed problem with inline when not using gcc (JMarc)
+- Fixed some warnings reported by SGI CC (JMarc)       
+- Fixed some problems for the \hlines in longtable-header/footers (Jug)
+- endess-loop by converting layouts to linuxdoc belonging to references
+  killed (Bernhard)
+- extra parameter for Buffer::GetNextParameter. Now it's possible to
+  change the convertion behaviour of single characters depending on the
+  layout. (Bernhard)
+- New wrapper reLyX.in (JMarc & Karger)
+- Fix a bug in lib/configure, where files are deleted by mistake
+  (JMarc)
+- Updates to WHATSNEW, INSTALL, UPGRADING and BUGS.lyx (JMarc)
+- configure also checks for the C++ compiler xlC (JMarc)
+- reLyX 2.2.1.1: Bug fixes + added abstract environment (Karger)
+- added typecasts to unsigned char for arguments to ctype-functions, to
+  fix problems regarding locale+ctype on Solaris2.5 (Joacim)
+- added a help text for melt (Joacim)
+- new wrapper around reLyX generated by autoconf (Amir & JMarc)
+- moved reLyX to lib/ and modified Makefiles for installation and
+  binary distribution (JMarc)
+- Fixed problems with determination of LyX library dir (JMarc)
+- Fix buglet with fonts ; fixed buglet with installation of .mo
+  files. (JMarc)
+- Updated `problems' section of INSTALL (JMarc)
+- use g++ for compilation if this is possible (JMarc)
+
+since 0.12.0pre8
+- Fixed bad placed cursor after pasting bug in math mode. (Alejandro)
+- Prevented some problems from missing arguments of LyX functions
+  in math mode, in some cases only correct arguments are used. (Alejandro)
+- More math array metrics problems fixed, specially for 1 column
+  matrices.  (Alejandro)
+- reLyX v2.2. Updated from pre-alpha to alpha (Karger)
+- CleanTeX is now called from reLyX, not a separate program (Karger)
+- new very basic fr.po file submitted by Emmanuel Gureghian (JMarc)
+- .mo files are not installed under the same name as LyX
+  (i.e. lyx$(program_suffix) (JMarc)
+- reLyX added to the bindist target (JMarc)
+- Update of de.po (Peter)
+- New subsection in Customization: Menu shortcuts for alternative 
+  languages. (Peter)
+- Menu shortcuts file menus_de.bind in lib/bind (Peter)
+- Fixed warnings about casting pointers to int on 64bit architectures
+  (JMarc)
+- Fixed compilation problems with DEC cxx (JMarc)
+- add support for environment variable LYX_LOCALEDIR (JMarc)
+- rewrote README.bin.example (JMarc)
+- Remove the bogus 'lp' default in Print popup ; use the name of the
+  printer when printing to file (JMarc)
+- Fixed the order of the entries in the Insert->Float submenu (JMarc)
+- Removed the 'M-c i' binding. (JMarc)
+- Fixed the reference to sgml-tools in AdvancedEdit.lyx ; fixed
+  (again) Intro.lyx (JMarc)
+
+since 0.12.0pre7
+- small change in iletter.tex (Jug)
+- fixed the fontchange in the Table-Layout that it returns to
+  FL_BLACK if the buttons are activated (Jug)
+- fixed update-bug in Layout-Table (Jug)
+- fixed the input fields for lengths in PaperLayout and TableLayout
+  with the above function. BLANK-chars are now striped so the error
+  should occur again (Jug)
+- Updated ANNOUNCEMENT. (Asger)
+- Updated BUGS.lyx. (Asger)
+- Fixed small problem with floatflt: It does not take positional arguments.
+  (Asger)
+- Fixed problem with filenames.with.dots.in.them. (Asger)
+- Fixed italics and small caps in all docs (JMarc)
+- Fixed some annoying vertical navigation bugs of math arrays. (Alejandro)
+- Fixed metrics bug with 1x1 math arrays. (Alejandro)
+- No more void \labels with equations. (Alejandro)
+- Removed "copy a void array" error message. (Alejandro) 
+- many small bug-fixes to below-mentioned reLyX (Karger)
+- Fixes suggested by Jmarc, plus italic->emph change, in Tutorial (Karger)
+- added check for X11 availability in configure ; improved the various
+  error messages (JMarc)
+- nuked the nonfeature 'swap Y<->Z' from Options->Keyboard and docs (JMarc)
+- fixlets to the documentations (JMarc)
+- added close handler to table_options forms (JMarc)
+- fixed the LaTeX output routines so that the length of insets is
+  taken in account (JMarc)
+- Changed the double keystroke deadkey behavior (alkis)
+- Updated de.po (Peter)
+- Small changes to AdvancedEdit (section aapaper) (Peter)
+- sort of working, most probably buggy, pre-alpha reLyX (Karger)
+- mentioned reLyX in Tutorial and User's Guide "LaTeX Users" chapters (Karger)
+- Added short description of comment environment. (Asger)
+- Fixed problem of pasting the wrong place. (Asger)
+- Made LyXServer a bit more robust: Ignores end-of-line markers and empty
+  requests. Will hopefully prevent crashes. (Asger)
+- Updated BUGS.lyx. (Asger)
+- Included OS/2 info for LyXServer in Customization. (Asger)
+- Fixed crash with file-browser on directory without read-permission. (Asger)
+- Changed default pasting mode with middle button to "as paragraphs". 
+  Hopefully fixed crashes with this on too. (Asger)
+- improved index entry insertion (menu support and minibuffer arg) (CFO-G)
+- added documentation in References.lyx for index entries and printing (CFO-G)
+
+since 0.12.0pre6
+- some updates to the docs (JMarc)
+- chkconfig.ltx warns that detection of ec fonts may take a long time
+  (JMarc)
+- simple workaround for problems with LyXCode and spaces (JMarc)             
+- fixed bugs in the production of LaTeX code for the ExtraParagraph
+  stuff (minipages & indented text) (Jug)
+- fixed the wrong <Hot-Key> in the Fax-Form (Jug)
+- fixed (hopefully) the problems with Standard-Paragraph in higher
+  depth in a list-environment (Jug)
+- some fixes with the letter-layouts (added the stdlists.inc)
+  and templates (fixed iletter.*) (Jug)
+- added new example file Minipage.lyx (Jug)
+- Cleaned up BUGS.lyx (CFO-G)
+- bugfix for linuxdoc: problem with wrong path leading to 
+  ununderstandable error-messages while generating dvi- or postscript-
+  output (Bernhard)
+- options changed for SGML-tools 1.0.*-compliance. We will get
+  trouble now for linuxdoc 0.99.*/1.5! (Bernhard)
+- fixed a bug with drawing of caption lables, and noindented text
+  in floats. (Lgb)
+- added minimal size on the main window. (Lgb)
+- small changes to lyxfunc, so that perhaps backspace will work better (Lgb)
+- installed new banner and icon (JMarc)
+- fixed Intro.lyx so that it is LaTeX-able (JMarc)
+- replace 'Reference guide' with 'Reference manual' everywhere (JMarc)
+- fixed problem with po/Makefile and SGI make (JMarc)
+- fixed reading of labels with spaces in LyX 0.10.7 files (JMarc)
+- fixed the vertical resize repaint problem (*phew*) (Joacim)
+- Fixed bug when switching documents, one of them in math mode. (Alejandro)
+- Fixed bad width of a math array. (Alejandro)
+- Frac now behaves more like LaTeX (for the limits problem). (Alejandro)
+- bugfix to gettext.m4, which dod not recognize an installed gettext !
+  Thanks to Joacim Persson for pointing this out (JMarc)
+- minor bugfix in the clean and distclean targets of Makefile.in (JMarc)
+- minor updates of aapaper and de.po (Peter)
+- spellchecked all docs and examples (CFO-G)
+- Fixed repaint problems. (Asger)
+- Small stuff. (Asger)
+
+since 0.12.0pre5
+- small change to SpecialTools.lyx. used \chapter* for Introduction. (Lgb) 
+- doc bugfixes ; SCO configure bugfixes (JMarc)
+- Fixed crash after erroneous "font-size default" command. (Asger)
+- Fixed "Insert LyX file" to ignore buffer-parameters. (Asger)
+- Continued updating Customization: Cleaned up the I18N section. (Asger)
+- Fixed ruined Special Tools. (Asger)
+- A few cosmetic changes in LyXServer. (Asger)
+- Updated Customization: Clean-ups, finished description of font setup,
+  updated description of LyXServer and moved it to Special Tools. (Asger)
+- Renamed lyxrc command \update_statusbox to \display_shortcuts. (Asger)
+- Rewrote LyXServer: Use LString all over. Made robust LyXComm class.
+  Added -dbg 8192 to debug LyXServer. (Asger)
+- Cleaned up the example development/server_monitor.c. (Asger)
+- Merged LyXVC.lyx into Special Tools. (Asger)
+- Updates in User Guide. (Asger)
+- I most have been drunk when I implemented the label name escaping.
+  Several problems were fixed and I've changed it to be kind of MIME-ish. 
+  The thing should work now. (Asger)
+- Fixed bug of parsing spaces at the end of a line in math arrays  (Alejandro)
+- Now it's possible to put any math symbol on the toolbar (Alejandro)
+- increased some buffersizes in lyxserver. (Lgb)
+- replaced the #if 0 gettext stuff in lyxfunc with N_() (Lgb)
+- Added po/README with information on how to update a po file. (Asger)
+- Updated da.po, no.po (Asger, Lgb)
+- BUGS.lyx updated. (Asger)
+- Better handling of errors with FilePtrs - fixes reported bug
+  with "lyx non_existant_directory/test.lyx". (Asger)
+- Fixed miscoloring of InsetCommand's in TeX mode. (Asger)
+- Fixed size calculation of menu labels, and added a bit more space to
+  make it look a bit better. (Asger) Fixed it. (Lgb)
+- Fixed missing progress of spellchecker progress meter. (Asger)
+- Make LyX use "\pounds{}" instead of "£" in LaTeX output. (Asger)
+- Make LyX escape problematic characters in names of labels rather
+  than forbid them. (Asger)
+- Make LyX handle error situations after "spellchecker running" or "rendering"
+  nag-boxes better, including when sending faxes. (Asger)
+- Changed definition of a LyX filename from files ending with ".lyx" or
+  ".lyx#" to files containing ".lyx". This makes it possible to open
+  "LaTeXConfiguration.lyx.in" again. (Also for SGML files.) (Asger)
+- A few small things. (Asger)
+
+since 0.12.0pre4
+- nl.po added, fi.po updated
+- tiny bug in de.po fixed (Lgb)
+- small update to LaTeX.[hC] to make it possible to use natbib.sty. (Lgb)
+- fixed a stupid bug in lyxvc.C (Lgb)
+- removed all trace of the old `make depend' target (JMarc)
+- compose key handling is finally working ! Well, in fact, it works on
+  my machine...(JMarc) I fixed a couple of in the compose code, and made
+  it work as it has used to concerning deadkeys. (Lgb)
+- added basic support for \part and \part* (no automatic numbering
+  though) (JMarc)
+
+since 0.12.0pre3
+- updated de.po and cleaned-up shortcuts (Peter)
+- small changes in aapaper.layout: Some wrong indentations, take out 
+  stdstarsections (Bibliography now in stdstruct)(Peter)
+- Replaced the shortcut for OK in lyx_sendfax.fd with #O (Joacim)
+- argument to moveCursorUpdate bool instead of int (Joacim)
+- fixed a "foreverbug" with the title form. (Lgb)
+- LyXVC::showLog now works as it should (Lgb)
+- The cursor is now updated when running some of the insertion commands. (Lgb)
+- when inserting single chars the undo info is stored for
+  every 20th character (Lgb)
+- More pragmas added, this showed a "bug" functions declared but
+  never defined. (Lgb)
+- Some small cleanup related to commented code. (Lgb)
+- Updates to Customization.lyx, Tutorial.lyx, ABOUT_NLS and
+  INSTALL.autoconf (JMarc)
+- Show LyXDir and UserDir in Help->Version (JMarc)
+- Fix the order of menu items in Insert->Lists & TOCs (JMarc)
+- Fix the problems in Makefiles reported by Juegen (JMarc)
+- Cleanups in lyxlookup.[Ch]. Still does not work (JMarc)
+- fixed handling of file in subdirectories for includeinsets (JMarc)
+- `fixed' behaviour of Font tag in layout files by adding a new tag
+  TextFont (JMarc)
+- bugfix in configure (JMarc)
+- updated a bit Customization.lyx, BUGS.lyx and INSTALL (JMarc)
+- visual cleanup of the Find&replace dialog (JMarc)
+- quick fix for a bug regarding "options:" in the minibuffer in combination
+  with gettext (Joacim)
+- "case insensitive" and "complete word" search in form1, lyxfr0, lyxfr1 (HB)
+
+since 0.12.0pre2
+- Increased the time short-cut keys are displayed in minibuffer 
+  from 4 to 6 seconds. (Asger)
+- Increased LyXLex buffer to avoid warnings when viewing
+  the user guide. (Lgb & Asger)
+- Small fixes in a few doc files. (Asger)
+- Added partial Danish translation file da.po. (Asger)
+- Fixed Cursor-Down Bug in tables (as reported) (Jug)
+- Fixed a bug in producing code for minipages (Jug)
+- got toggle-user-defined-style button working, and fixed the bug with the
+  Apply-button in Layout-->Character Removed an unused parameter for
+  lyx_cb.C:ToggleAndShow and LyXText::ToggleFree (Joacim)
+- Added foils documentation to Special Tools [foils.cls v2.1]. (ARRae)
+- Extended the Foils.lyx example file (ARRae)
+- Fixed up the foils.layout file to match foils.cls v2.1 output (ARRae)
+- Fixed the "too many '\n' at end of an envirnment" problem that caused
+  the [] at the end of a Proof environment to be on the wrong line (ARRae)
+- Fixed up cursor movement so floats, insets and hfills are treated
+  as words. (ARRae)
+- Added two bug reports to BUGS.lyx since they are unlikely to be fixed
+  before 0.12 (ARRae)
+- Moved Bibliography from stdstarsections.inc to stdstructs.inc (ARRae)
+- added a missing break in LyXFunc::Dispatch (did you wonder where those
+  strange paragraph documents came from?) (Lgb)
+- the cursor is now updated after each character(-group) inserted into
+  the document. (Lgb)
+
+since 0.12.0-pre1
+- Changed the name of the dependencies file to <file>.dep, this fixes
+  a bug when \use_tempdir false, or when a document is renamed. (Lgb)
+- Now limits should work in LyX as in LaTeX, as expected. (Alejandro)
+- (temporary) fix for deadlock between MenuRunLaTeX vs ispell and gs (Joacim)
+- changed the default default papersize to usletter ; some clean up in
+  dvips and xdvi paper handling (JMarc)
+- fixed accented `i' in latin1 and latin2 encodings (JMarc)
+- lib/configure ignores environment variables like LATEX or GS (JMarc)
+- updated BUGS and BUGS.lyx (JMarc)
+- added a word count to the spellchecker. As requested. Not error prone. (Lgb)
+- po file for german (de.po) added (Lgb) (made by Peter Metternich)
+- improved a bit the `bindist' target of the makefiles. (JMarc)
+- improved(?) compose key handling (JMarc)
+- fixed the problem with ON/OFF in LyXFont (JMarc)
+- xforms-81 + gcc-2.6.3 compatibility (ARRae)
+- Bullet Selection now checks libXpm version and WriteAlert()'s
+  This should stop those pesky Slackware-induced segfaults (ARRae)
+- Fixed (or at least limited) a segfault when deleting insets (ARRae)
+- small fix to LString == and != and LString=(char) (ARRae)
+- fixed a bug in figinset.C regarding the Subfigure radio button in the
+  figure form. It was impossible to unset Subfigure. (Joacim)
+- thereby the problem with the inlined moebius.ps in 4.4 in
+  UserGuide.lyx could be solved. (Joacim)
+- cured a couple of forms from the vi-syndrome (forms with input fields
+  that have widgets with plain keys as shortcuts, making it impossible to
+  input those keys in the input fields) (Joacim)
+- added a section in Chapter 5 in Customization.lyx about translating
+  LyX (Joacim)
+- Fixed Export to DVI to save in current directory. (Asger)
+- Changed default background color from "bisque" to "LemonChiffon1". (Asger)
+  o switched again to "linen" (Lgb)
+- A few small things. (Asger)
+- Fixed spellchecker to send ' and escape chars to ispell. (Asger)
+- fixed a bug in src/gettext.h ( N_() )  (Joacim)
+- used the fixed N_() to replace the ugly kludge LyXFont::setGUINames with
+  something less kludgy (that actually works in non-english versions too ;)
+  This method should be used for similar strings in lyxfunc.C (can wait
+  till 0.13) (Joacim)
+- implemented new code for input methods handling in lyxlookup.[Ch] (JMarc)
+- fixed the bindist target of Makefile (JMarc)
+- small fix in LString.[Ch] when const is broken (JMarc)
+- The user directory is not ~/.lyx/ but rather ~/.$LYX_NAME/, to allow
+  different versions of LyX to coexist (JMarc)
+- Updated a bit UserGuide.lyx and lyxrc (JMarc)
+- small fix to letter.layout (JMarc)
+- the warnings of makedepend are now sent to the wastebasket (JMarc)
+- fixed problem with expr in configure (JMarc)
+- fixed small logic error in InsetInclude, reported by SMyiata (JMarc)
+- Closed four holes in read-only protection with respect to the
+  minibuffer (CFO-G)
+- Disabled replace input for search-replace on read-only buffers (CFO-G)
+- Fixed bug with math accents reported by Jean Marc. (Alejandro)
+- Fixed bug about writting math macros with argument and cutting at 
+  the rigth edge of a row bug, both reported by David. (Alejandro)
+- Expanded to a reasonable limit the macro table. (Alejandro)
+- Wrote Math Chapter for Tutorial (+ other small Tutorial changes) (Karger)
+- Math additions to examples/example_{lyxified|raw}.lyx (Karger)
+
+since 0.11.53
+- small change/fix in lyxvc. Will be finished in 0.12pre (Lgb)
+- configure now checks for X11/forms.h (JMarc)
+- fix for configure not finding forms.h on broken HPUX systems (JMarc)
+- small fix to amsart.layout (JMarc)
+- small updates to UserGuide.lyx, INSTALL and Makefile.in (JMarc)
+- Added functions listbox in math panel.  (Alejandro)
+- Fixed some bugs related with mouse selection. (Alejandro)
+- Fixed a couple of bugs of \frac. (Alejandro)
+- rewrote aapaper.layout to use standard includes, removed double 
+  Inputs in paper.layout  (Peter)
+- Mentioned aapaper in UserGuide, fixed some typos (Peter)
+- added *.gmo and *.swp (swap files for vim) to the list of patterns for
+  files not to include in patches with makepatch (Joacim)
+- following a ref no longer pushes an Undo onto the stack, this fix is a
+  kludge - see BufferView.C (Joacim)
+- GUI*Names in lyxfont.C made accessible by gettext (Joacim)
+- cleaned up in forms/, fixed the patchfiles and added a shortcut for
+  "Use AMS Math"  (Joacim)
+- fixed bug with no shortcuts for lastfiles (Joacim)
+- fixed the newly-inserted-footnote segfault (ARRae)
+- renamed toc-update to toc-view and updated References to match (ARRae)
+- more bullet stuff in SpecialTools (ARRae)
+- more stuff in References (ARRae)
+- added toggle-cursor-follows-scrollbar lyxfunc (ARRae)
+- Fixed form1 borderwidth (ARRae)
+- Changed "Documents" menu keybindings in menus, cua, emacs (ARRae)
+- Added/fixed several key bindings in menus/emacs.bind (ARRae)
+- Added xemacs.bind which also has AucTeX and HM--HTML bindings (ARRae)
+- Updated Reference.lyx for several keybindings/functions (ARRae)
+- Updated SpecialTools.lyx bullet-related entries (ARRae)
+- Fixed small bug with handling of some bullet shapes (ARRae)
+- Added checking of ob->spec in bmtable.C (ARRae)
+- Fixed call to isReadonly() in bullet_forms_cb.C (ARRae)
+- Improved checking for isLinuxDoc() in bullet handling (ARRae)
+- Made "Cancel" and "Copy" correctly cancel selections when mark-on (ARRae)
+- Completed \LyX{} translation in typewriter-mode mods by dlj (ARRae)
+- Stopped insertion of marginpars in minipages (ARRae)
+- UpdateAllVisibleBufferRelatedPopups() added, supports most popups (ARRae)
+
+since 0.11.52
+- fixed bug regarding input of regular text in readonly math mode. (Joacim)
+- bugfixes for undo/redo in math mode (Joacim)
+- made a few more insets readonly-aware (Joacim)
+- Fixed Figure pop-up, including adding % of column width (CFO-G)
+- Menu insertion of floats and ASCII files now goes through Dispatch,
+  fixing read-only modification bugs (CFO-G)
+- Fixed previewing of documents at sites where A4 is not the default
+  papersize in LaTeX by adding a lyxrc entry for the real default size (CFO-G)
+- Updated doc for A&A: \thanks, columns (Peter)
+- Some fixes to please DEC cxx and gcc 2.6.3 (JMarc)
+- small spell checking and fixes to the A&A layout below (JMarc)
+- fixes to the amsart layout (JMarc)
+- Added layout for A&A paper with example, template and documentation
+  in SpecialTools.lyx (Peter)
+- small fix regarding readonly-mode: AutoSave(), Figure insets. (Joacim)
+- Added bindings to reference-goto and reference-back in emacs
+  and cua. (Alejandro)
+- Completed mouse selection (but not necesarily bug-free). (Alejandro)
+- LaTeX validation in Mathed side. Only used macros are expanded. (Alejandro)
+- Now LyX is not marked dirty if open or selected a math box.  (Alejandro)
+- Fine tunning math selection and mouse positioning. (Alejandro)
+- Fixed most (all?) of the places where read-only files could be
+  modified (CFO-G)
+- fixed a ro bug in insetinclude. (Lgb)
+- fixed resize bug. (Lgb)
+- Fixed bugs in insetinclude with relative filenames; fixed output of
+  'nice' included files (JMarc)
+- finer detection of xforms versions in configure (JMarc)
+- removed use_amsmath in lyxrc (JMarc)
+- Fixed up TexRow::operator+= so it doesn't reverse the added list (ARRae)
+- Fixed up MathAccentWrite so characters are correctly written (ARRae)
+- Small additions to UserGuide, Special Tools and Foils example (ARRae)
+- Small fix/addition to footnote handling (ARRae)
+- Added "Go to Reference" button in "Insert Reference" form. (Alejandro)
+- Added "Use AMS-Math" check button in Layout->Document form. (Alejandro)
+- Removed third parameter from lyxfunc::Dispatch. Added 
+  lyxfunc::setHintMessage(bool) instead. (Alejandro)
+- Partially implemented mouse selection in math mode. (Alejandro)
+- Modified read-only protection so that all layout and figure forms can be 
+  viewed but not modified (CFO-G)
+- Modified read-only protection so that documents can be spellchecked,
+  but the spellchecker can't modify the buffer (CFO-G)
+
+since 0.11.51
+- Scrollbar now resized correctly when closing last buffer (ARRae) 
+- fixed segfaults in LyXParagraph::{SetOnlyLayout(),SetLayout()} (ARRae)
+- replaced several "" with LString() or .clean() (ARRae)
+- Cleaned up Juergen's TableExample.lyx (ARRae)
+- writeFileAscii() now puts "References" above bibliography (ARRae)
+- Small updates for Customization.lyx and References.lyx (ARRae)
+- Small additions to menus.bind: four FoilTeX entries (ARRae)
+- Speed improvement in LyXParagraph::BeginningOfMainBody() and
+  LyXParagraph::getFont(int) and LyXText::GetFont(...) (ARRae) 
+- Fixed the "enumeration in a footnote in an enumeration" problem.
+  Required the three other changes listed below (ARRae)
+- Made makeLaTeXFile() and the other TeX producing methods use
+  LStrings and fwrite to generate the LaTeX file. (ARRae)
+- Supercharged the LString operator = and += methods (ARRae)
+- Added TexRow::operator+=() (ARRae)
+- Made TexRow::reset() iterative instead of recursive (ARRae)
+- fixed some of the bugs in readonly-mode, more to do (Joacim).
+- Expanded and fixed AMS layouts (dlj0, with help from gureghia and Jean-Marc)
+- Fixed cursor's bad position at new display inset inside text. (Alejandro)
+- New rc variable and buffer param: use_amsmath. If true, the
+  package amsmath will be automatically included unless an ams
+  class (amsart, amsbook) is being used. This also prevents
+  from expanding predefined math macros.                       (Alejandro)
+- Support for pseudoactions in lyxaction.getActionName. At the same
+  time, the bubble help and the new statusbox (why this name?) works with 
+  pseudoactions. (Alejandro) 
+- Removed xforms drawing functions from formulaMacro. (Alejandro)
+- Fixed misfeature with accented macro names (mathed). Now it's
+  possible to accent other insets. (Alejandro)
+- "reference-goto" jumps to the correct position. (Alejandro)
+- Changed \i, \j to \imath, \jmath in math_symbols, as must be. (Alejandro)
+- Optative display of symbol names when are inserted by the
+  math panel. Currently works if update_statusbox is true. (Alejandro)
+- Math menus use lyxfunc to allow hint message, if enabled.  (Alejandro)
+- Added support for two-column floating figures and tables. (CFO-G)
+- Fixed minibuffer input of floats. (CFO-G)
+- Made "status-box" handle arguments better. (Asger)
+- Fixed layout selection, such that it appears in status-box. (Asger)
+- Removed extremely annoying 1 second pause after each menu-command. Instead,
+  improved display of it. (Asger)
+- Added more space around inset-buttons to make the cursor visible. (Asger)
+- Added "scgen.pl" again. (Asger)
+- Filter out 8-bit characters from labels. (Asger)
+- Make "Insert Citation" and "Insert BibTeX" show form automatically
+  when appropriate. (Asger)
+- Made default background color "bisque". (Asger)
+- Got rid of "help.[Ch]" and "StatusBox.[Ch]". (Asger)
+- Finetuned "statusbox": Merged into minibuffer, removed separate statusbox,
+  and don't display when commands are entered by key. (Asger)
+- "self-insert" accepts several characters now. (Asger)
+- Improvements in minibuffer behaviour. (Asger)
+- Fixed up "Insert LyX file" and added it to the Insert menu. (Asger)
+- scgen.pl improved to make prioritized guesses, and speeded up. Characters 
+  at the beginning of a word are preferred to characters inside a word. (Asger)
+- Fixed crashes with commands that aren't allowed when no document is 
+  open. (Asger)
+- fixed (I hope) autosave and writeFile bug (Lgb)
+- more imporvements to cursor blink (Lgb)
+- some small changes to minibuffer and lyxfunc. (Lgb)
+- fixed arg<->argument bug in lyxfunc. (Lgb)
+- fixed bug in toolbar (regarding toolbar-add-to) (Lgb)
+- Introducing development/tools/scgen.pl (Joacim)
+- fixed a bug regarding certain minibuffer messages not staying visible
+  long enough (Joacim)
+- fixed bug with LyXFunc::Dispatch: crash on toolbar-add-to with no args
+  (still crashes deeper down with *valid* args though)  (Joacim)
+
+since 0.11.50
+- showstopper bug in combox.C (uninitialized variable) fixed. This was
+  a bit strange since it only showed when LANG=no. (Lgb)
+- fixed bug regarding defaultbindings. (Lgb)
+- added some more errorchecking when making a backup copy. (Lgb)
+- All menu shortcuts works now (in English). (Joacim)
+- Most of the dialog shortcuts too. (only two buttons in file dialog that
+  are set in LyXFileDlg::SetButton(), and parts of the layout->table dialog
+  remains.)  ...in English only. (Joacim)
+- Implemented small status window that informs about short-cuts. You can
+  turn it off with a "\update_statusbox false" lyxrc directive. (Asger)
+- Added "Ordinary Quote" to Insert->Special Characters... (Asger)
+- Added a bunch of keybindings for menus. (Asger)
+- Fixed short-cut for "Insert->Cross-reference...". (Asger)
+- Fixed crash in connection to Error insets. (Asger)
+- Fixed crash when .lyx does not exist. (Asger)
+- Clear paragraph environment combox when no document is open. (Asger)
+- Updated info about ispell in User Guide, i.e. making a symlink between 
+  deutsch and german dictionary files. (Asger)
+- Updated and extended "Customization". (Asger)
+- Updated all documents after ChkTeX runs. (Asger)
+
+since 0.11.49
+- Changed AskQuestion to use i18n-strings on the button labels. (Joacim & Lgb)
+- Configure now detects the version of your xpm.h headers. changed a
+  bit the messages for xforms versions (JMarc)
+- The automatic LyX-->\LyX{} conversion is disabled in typewriter
+  font. (JMarc)
+- Added a part on configuration files in Customization.lyx (JMarc)
+- Added validation for math macros. If a predefined macro is used 
+  (currently only \binom and \boldsymbol) in a non-AMS class,
+  the macro is defined in the preamble. (Alejandro)
+- Added support for bold symbols using \boldsymbol. This was not
+  necessary for AMS class users. Currently there's no way to see
+  bold symbols WYSIWYM, you have to use TeX (former macro) mode. (Alejandro) 
+- Mathed's limits bug at parsing time fixed. (Alejandro)  
+  Hopefully fixed the configurable toolbar. Had to change some in the
+  init order to fix it. Now the XForms is initialized before lyxrc is
+  read, but the forms are created after. (Lgb)
+- Matthias Zenker sent me some new toolbar icons, now included. At the same
+  time I fixed a bug in the Toolbar::read code regarding arguments (Lgb)
+- Added some code to make LyX retain the filemode and inode when making
+  backup copy and saving the document. Needs some polishing. (Lgb)
+- Possible fix for the cursor drawing bug. Pleae test. (Lgb)
+- Bug fix in filebrowser. (Asger)
+- Bug fix with sgmltools. (Asger)
+- Warn if included postscript filename contains illegal characters. 
+  If you really need such a filename, you can still enter it in the text
+  box in the figure pop-up. (Asger)
+- Implemented display of command name and list of defined short-cut keys for 
+  each action executed when using -dbg 64. Somebody please put this in a
+  small window next to the minibuffer. (Asger)
+- Small fixes in Tutorial.lyx. (Asger)
+- Clear selection after "Paste". (Asger)
+- Make LyX prefer writable directories as default for New and
+  Open file. (Asger)
+- Fixed hang after failed sgml2latex. (Asger)
+- Fixed hang scanning LaTeX log-file with non-existing pictures
+  with "l." in the filename. (Asger)
+- Fixed hang with "View dvi" while rendering pictures. (Asger)
+
+since 0.11.48
+- removed isEmpty and notEmpty from LString, replaced with empty (Lgb)
+- fixed stupid bug with .fd files and fdesign, updated fdfix.sh (Lgb)
+
+since 0.11.47
+- updated the fd files for the "new" shortcut scheme. (Lgb)
+- Slightly fixed display of "<hfill>text<hfill>". Still has cosmetic bug:
+  the last hfill is not extended to the left hand margin. (Asger)
+- Added "\exit_confirmation" flag to lyxrc. This can be used to turn off
+  the confirmation of exit when there are documents that haven't been
+  saved. (Asger)
+- Fix crash with "lyx file.sgml". (Asger)
+- Better logic with "New" and already open documents. (Asger)
+- Top level text files updated. (Asger)
+- 8-bit bug with bind command fixed: \bind "M-f ø" "buffer-open" works now
+  from the LyX side of things.  However, it will just give you an error,
+  because X11 requires you to use \bind "M-f oslash" "buffer-open"
+  instead. (Check the man page for XStringToKeysym for more information on 
+  the names for characters). (Asger)
+- updated Customization.lyx (JMarc)
+- LyXTextclass::Read stops if there is an error in an include
+  file. (JMarc)
+- Fix bug with \DeclareLatexClass[foo]{bar} in chkconfig.ltx (JMarc)
+- Fix core dump when an .sgml file is open from the command line (JMarc)
+- The file open dialog now has a "Examples" button (JMarc)
+- fix the size of a few popups for the larger size of my fonts (JMarc)
+- initial po-file for Swedish (Joacim)
+- cleanup among the accelerators towards idex/scex (Joacim)
+- added accelerators to those (all?) menu items that lacked one (Joacim)
+- a few more _()'s added (Joacim)
+- Added Tutorial.lyx. Complete (?) first draft, except for math
+  chapter (Karger)
+
+since 0.11.46
+- removed BufferParam::cursor, which was not used anyway (JMarc)
+- the default roman font is now times instead of utopia, for people
+  who have slow computers and/or buggy PS font servers (JMarc)
+- tried to fix 'buffer-export custom'. It still does not work from a
+  keybinding (help!) (JMarc)
+- the configuration files created by configure in the user's .lyx/
+  directory are removed if they are identical to the system-global ones
+  (JMarc) 
+- Added the 'fax send' command as autodetected.
+- some cleanup in chset.C (JMarc)
+- changed behaviour of minipages, now more paragraphs can be part
+  of a single minipage. Environments are always in the same minipage.
+  This is forced as otherwise we get LaTeX-Errors!!! (Jug)
+- ParagraphExtraOpt's now Apply also on selections (Jug)
+- I fixed the Insert/Include File-Dialog to display the appropriate
+  filetypes (*.lyx for Include / *.tex for Input / * for Verbatim) (Jug)
+- added new example file MultirowTable.lyx to lib/examples (Jug)
+- Fixed segfault with math-macros reported by JMarc.  (Alejandro)
+- Restored the geometric part of frames (for buttons).  (Alejandro)
+- Removed some warnings.  (Alejandro)
+- Cleanned and improved implementation of user defined math
+  macros. (Alejandro) (At the cost that currently only subparagraphs
+  are allowed.)
+- New document example about user defined math macros.  (Alejandro)
+- Prevented segfault if undo in an empty math box. (Alejandro)              
+- new code for quotes, from Ilya Ovchinnikov, plus a bugfix (JMarc)
+- Layout->Table is greyed out when unavailable (JMarc)
+- added support for FreeSpacing for linuxdoc layouts (JMarc)
+- Added a binding for File->Export->Custom (JMarc)
+- removed LaTeX from the Insert->Figure Popup (JMarc)
+- added support for 'fax send' in lib/configure (I forgot which
+  package has this command...) (JMarc)
+- began to update Customization.lyx to fit better John's
+  recommandations. Much is left to do (JMarc)
+- Enumeration in a footnote fixed to look like LaTeX output (ARRae)
+- Bibliography numbering corrected and also made sure you can't
+  change the depth of a bibliography entry.  (ARRae)
+- Switching between documents now returns you back to the cursor
+  location instead of the top of the document. (ARRae)
+- fixed the redraw bug in screen.C and use only X funcs to draw
+  on the workarea. (Lgb)
+- made the black dot disappear (Lgb)
+- ran purify and corrected some warnings/errors reported by it. (Lgb)
+- removed a couple of enums from definitions.h to LyXParagraph (Lgb)
+- changed LString::chars() to LString::c_str() since that is what ANSI C++
+  is going to use. (Lgb)
+- made a real class out of TexRow, I *think* I did it correctly, but I get
+  segfauls when errorinsets is automaically deleted (Lgb)
+- made LFUN_CENTER more natural (Lgb)
+
+since 0.11.45
+- work on header files to make them nicer in doc++ (Lgb)
+- stupid fix for the display update bug. (Lgb)
+- patch to paragraph.C posted to the list by Matthias inserted (Lgb)
+- Execute-command now works also in math mode.  (Alejandro)
+- Correct metrics for the last row of a 1 column matrix. (Alejandro)
+- AtClose for all math popups.  (Alejandro)
+- A small correction in UserGuide (the non-standard sizes at the
+  end of the math chapter had been missed).  (Alejandro)
+- Fixed crash with redefinition of partial key binding. Clean-ups
+  in kbmap.C. (Asger)
+- Cleaned up support for ldots, opt. hyphen, end-of-sentence dot. (Asger)
+- Updated docs to new special chars format, language clean-up in new
+  table documentation. (Asger)
+- Made InsetCommand handle nested parenthesis in arguments and options:
+  e.g. \cite[test[test]]{Test{Test}} is handled correctly now. (Asger)
+
+since 0.11.44
+- Added some pragmas for g++, made the lyx binary 2Megs smaller when
+  built with debug info (Lgb)
+- Reverted to use only X calls for drawing in to the workarea
+  (the only exception now is the box used by editable insetcommands) (Lgb)
+- Undo/Redo are greyed out is unavailable (JMarc)
+- updates to the paper textclass (JMarc)
+- add a little blurb in lyxrc.defaults explaining that it should not
+  be modified (JMarc)
+- Fixes to the export->Custom command (JMarc)
+- when exporting to LaTeX, insetinclude inherit the 'nice' feature
+  (JMarc)
+- fix 'weird error' with insetlatexaccent (JMarc)
+- fix leak in creation of Floats submenu (JMarc)
+- cleanup of the layout menu (JMarc)
+- add confirmation dialog to 'Save layout as default' feature (JMarc)
+- braces, {}, added around several fl_raise_form() calls (ARRae)
+- bibitem inset now updated if changed (ARRae)
+- Cursor[Left|Right]OneWord now treats insets as words (ARRae)
+- "cancel" now cancels a selection also (ARRae)
+- bullet selection
+     o package checking moved to LaTeXFeatures (ARRae)
+     o Added entry to LyXAction/LyXFunc (ARRae)
+- \cursor_follows_scrollbar option added to lyxrc (ARRae)
+- Table Options popup now works with xforms-0.81 (ARRae) 
+- LaTeXLog popup now raises if already shown. (ARRae)
+- Fixed serious bugs in ChangeExtension. (Asger)
+- Fixed problems with extensions of documents, also SGML. (Asger)
+- ANNOUNCE file updated. It's not ready for 0.12 yet. Help me! (Asger)
+- Fixed font bug: "Reset font" would crash sometimes. (Asger)
+- Fixed display of Error boxes. (Asger)
+- added Ascii File-Type for Export->Custom (Jug)
+- fixed lyxrc-settings in LyXGUI::LyXGUI (moved to LyXGUI::init) (Jug)
+- fixed some entries in lib/lyxrc which have been forgotten to update (Jug)
+- the export_custom_command now is written only the first time in the
+  above init and if the command-field is empty (Jug)
+- fixed display-bug for multicol-table-entries (I saw that when preparing
+  LongTable.lyx example file) (Jug)
+- Updated UserGuide.lyx added the new table documentation (Jug)
+- Added Longtable.lyx to lib/examples (Jug)
+- fixed bug (and it was a bug) that if a table was the first paragraph
+  and adding a paragraph before the table was removed (actually all newlines
+  have been removed till the first character was found this is deadly for
+  tables!!!) (Jug)
+- fixed various problems with quote inset (JMarc)
+- the print dialog now keeps its default. (JMarc)
+- SendTo has been moved in the export submenu and renamed to Custom;
+  added a new lyxrc tag \custom_export_format to indicate the file
+  extension needed; renamed \sendto_command to \custom_export_command
+  (JMarc)
+- updated a few doc files (JMarc)
+- Mathed changes:    (Alejandro)
+  o Fixed bug on vertical matrix alignment.
+  o Changed "Macro mode" to "TeX mode" to avoid confusion with user
+    defined macros.
+  o Finally Undo/Redo for math mode. No problems after some testing.
+  o Fixed problem on reading spaces in text mode.  
+
+since 0.11.43
+- vertical resize now uses fitCursor() so cursor remains visible (ARRae)
+- scrollbar now updates cursor position (ARRae)
+- small changes to lyx_main.C for gcc-2.6.3 compatability (ARRae)
+- bibforms.h.patch, eliminates warnings I caused during compile (ARRae)
+- some bugfixes and speedups (cursor movement and scrolling) (Matthias)
+- Some latex commands changed (quotes) (Ilya Ovchinnikov)
+- new menu command 'Save layout as default' which make a default
+  template from the layout options of the current buffer (JMarc)
+- removed all the buffer-level keywords from lyxrc (they are useless
+  now) (JMarc)
+- changed the semanitcs of \ascii_linelen in lyxrc, so that it applies
+  also to LaTeX files and LinuxDoc files (JMarc)
+- renamed a few lyxrc commands for consistency; more has to be done
+  (JMarc) 
+- fixed the bug with keeping the layout after a section (you know what
+  I mean) (JMarc)
+- introduced new methods LyXLayout::isParagraph() and
+  LyXLayout::isEnvironment(); please use them instead of testing for
+  latextype; updated the code accordingly (JMarc)
+- Extended ChkTeX documentation. More will come. (Asger)
+- Always generate "\textXX{text} " rather than "\textXX{text }". (Asger)
+- Reset autosave timer at saves. (Asger)
+- Improved order of paragraph environments in combox. (Asger)
+- Fixed bug with font setting. (Asger)
+- Improved list of font attributes in Layout->Character pop-up. (Asger)
+- Fixed reported bug with wrong conversion message. (Asger)
+- Misc. clean-ups. (Asger)
+
+since 0.11.42
+- made the hyphen char be a colored "-" instead of a sentered "." (Lgb)
+- some changes to the quotes...Please check it Jean-Marc (Lgb)
+- some cleanup for better sequence in drawing in screen.C, this might
+  make things a triffle slower. (Lgb)
+- lots of changes to get printing to pixmaps better. However the
+  drawing functions are not always called in the correct sequence.
+  For instance LyXScreen::expose should only be called by
+  BufferView::WorkAreaExpose (or with it in the call chain) (Lgb)
+- fixed recalculate of column-width after multicolumn-(un)set (Jug)
+- enabled alignment setting on fixed width columns only if cell
+  is (part of) multicolumn (Jug)
+- fixed/added support to read in tab-separated ascii-files directly
+  into tables. As Lines and As Paragraphs works identically here (Jug)
+- fixed a small bug regarding the Linebreak/Parbox-Feature (Jug)
+- makepatch updated to ignore "core" and "libintl.a" files. (Asger)
+- Buffer open behaviour a bit improved. (Asger)
+- Started updating Reference.lyx. (Asger)
+- Removed obsolete "load auto save" command. (Asger)
+- Partially fixed buffer rebreaks. (Asger)
+- Documented ChkTeX in Special Tools. Updated Special Tools in general. (Asger)
+- Added CloseAllBufferRelatedPopups()    (ARRae)
+    - solves the potential segfaults caused by having popups open
+      that expect to be able to change a buffers settings when
+      there are no buffers available (ie. after closing last file)
+- Rewrote Foils and ItemizeBullets example files (ARRae)
+- small cleanup of foils.layout (ARRae)
+- configure: fixed the order of multiple directories in --with-extra*
+  (JMarc)
+- lib/configure: added a check for chktex (JMarc)
+- layout.[Ch], lib/layouts/*: added Tags SecNumDepth and TocDepth;
+  added support for that where this was needed (JMarc)
+- lyxrc: removed tags \paperpagestyle, \papercolumns, \secnumdepth,
+  \tocdepth. They do not belong there IMO (JMarc)
+- po/Makefile.in.in: added a kludge for people without GNU
+  gettext. Tell me whether this works for you (JMarc)
+- LyXAction.C: Added cut and paste as forbidden on ro files (JMarc)
+- removed references to sos.h since it is currently unused and some
+  people have problems compiling it (JMarc)
+- insetquotes.C: Added support for so-called ''swedish'' quotes. I
+  know these names are stupid, but the user do not see them; fixed
+  some bugs there (JMarc)
+- text.C, text2.C: fixed some bugs where COMMANDTITLE was not taken as
+  a command (JMarc)
+- Several Mathed's bugs fixed: (Alejandro)
+  o Cursor misplaced after a big operator and a scripted expression, and
+    more robustness for array::Resize (thanks Ralf Gugisch for the patch).
+  o As suggested by John, each time a { is typed in TeX mode, it's
+    closed with a }.
+  o Removed OpenMathInset so math mode always create a new inset, as
+    requested by David and Amir.
+  o Several fixes and cosmetic enhancements to math-macro. 
+  o Fixed several (but not all) matrix and label bugs.
+  o User defined macro names bugs.  
+- Implemented "chktex". (Asger)
+- some cleanup in lyxdraw.[hC] (Lgb)
+- fixed a bug that made VC not work all the time (Lgb)
+- Fixed some bugs regarding tables (Jug)
+- Fixed the visual for Multicolumns, now only the last cell is
+  expanded and not all cells egually as it was before (like
+  LaTeX does it) (Jug)
+- Make word selection stop at end of paragraphs and insets. (Asger)
+- Improved display of open footnotes, margin notes, etc. (Asger)
+- Fix crash on opening of non-lyx file. (Asger)
+- Updated man page. (Asger)
+- Added "-sysdir directory" flag to set system directory. Notice that this
+  will not seem to work because LibFileSearch prefers built_directory to
+  system_directory. However, I'm sure it does work. (Asger)
+- Fix \kbmap lyxrc flag. (Asger)
+- Small clean-ups. (Asger)
+- Hopefully fixed all spurious crashes on exit. (Asger)
+
+since 0.11.41
+- cleanup in table.[Ch] (added column_struct and row_struct) (Jug)
+- added longtable-features \endhead \endfirsthead \endfoot \endlastfoot
+  \newpage (Jug)
+- added the posibility to force a \parbox{width}{} in a table cell.
+  I called this feature "linebreaks" as it inserts the linebreaks
+  AS-IS on screen display. This option is only selectable if we have
+  something in the width-field (Jug)
+- cleaned up the Fax-Facility, as I've seen that some things where
+  not quite clear. Doing this I added a message window which pops
+  up if the sendfax-command has some std[out/err] output and shows
+  this on screen display (Jug)
+- Implemented two new commands:
+      "end-of-sentence-period-insert" that inserts "\@." bound to C-period.
+      "dots-insert" that inserts ". . ." (\dots) bound to M-period.
+  Updated documentation to use them. (Asger)
+- Improved display of InsetCommands. (Asger)
+- Make "Save As..." work better with LinuxDoc. (Asger)
+- Continued work on updating UserGuide.lyx. (Asger)
+- BUGS.lyx updated and trimmed. I removed "Fixed bugs", because that section
+  was larger than "Existing Bugs". (Asger)
+- Added warning message after "Reconfigure" to make users restart LyX. (Asger)
+- Partially fixed update of counters in footnotes. (Asger)
+- Fixed color bleed. (Asger)
+- Cleaned out global "current_textclass". (Asger)
+- Fixed bug with cursor after footnotes. I introduced it. (Asger)
+- removed development/foils (ARRae)
+- fixed up bullet_forms patches and regenerated (ARRae)
+- added "rm *~" to forms/makefile distclean (ARRae) 
+- renamed the option --keep-logs of lib/configure to keep-temps, since
+  this is more accurate; fixed a bug with sgml-tools there (JMarc)
+- updated (not completely) the description of layout files in
+  Customization.lyx. Added a small explanation about the use of the
+  .lyx/ directory (JMarc)
+- Updated UserGuide.lyx: trimmed preamble, updated section on
+  bibliography (no BibTeX), removed section on [] and explanations about
+  running LaTeX several times, fixed a number of crossrefs and labels,
+  added a description of the LaTeX log window, a pointer to
+  LaTeXConfig.lyx (JMarc) 
+- updated a bit the layout files (JMarc)
+- rewrote part of the quote inset: now supports >>quotes<< and
+  ,,quotes'' (JMarc)
+- added LString::clean(), LString::lose()  (Bernhard)
+- fixed missing LStrings in LinuxDoc  (Bernhard)
+- LinuxDoc-character-conversion also inside URLS...
+  [Hope it's correct]  (Bernhard)
+
+since 0.11.40
+- fixed crash when using bibitem popup (ARRae)
+- added typecast to emumeral type used as parameter to LString::+
+  without it gcc 2.6.3 gives an error (ARRae)
+- made fdfix also handle scex and idex + lcolor<->lcol (Lgb)
+- Improvements in LaTeX runs:
+  - Chars ~ $ and % are substituted in filenames because LaTeX chokes on those.
+- If LaTeX log contains "Rerun LaTeX.", we rerun LaTeX. (Lgb)
+- fixed crash when using a new file name as a line parameter (Petr)
+- XForms 0.81 code for the menu_font option (Petr)
+- fixed (?) the dreaded configure failure; added a switch --keep-logs
+  to lib/configure to help debug problems like that (JMarc)
+- added detection of rotating.sty. I hope the description is
+  reasonable. (JMarc)
+- A few forms have been updated to the popup style sheet. (Asger)
+- Fixes in window title updating: When buffer is changed (or saved), the 
+  window title is updated. Added "(read only)" when buffer is readonly. (Asger)
+- LaTeX error box popup enlarged and made resizable and closable. (Asger)
+- Various clean-ups. (Asger)
+- Fixed idex. It might leak, but that's not a problem because the strings
+  live until LyX is closed, so the leak is a close time. (Asger)
+- Cleaned up the lib/examples directory. (Asger)
+- Fixed crash when loading many documents with lots of insets. (Asger)
+- Fixed search backwards bug reported by Allan. (Asger)
+- Renamed "Edit->Floats" submenu to "Edit->Floats & Insets". (Asger)
+- Fixed hangs from LaTeX errors like "\def\foo{bar". (Asger)
+
+since 0.11.39
+- Fixed the Ascii-Export, now also multicolumn and TableContRows
+  work correctly (even better when using a (t/g)roff postprocessor :) (Jug)
+- Added new debug-flag 4096, which I have to use when looking at the
+  roff-output for table-processing, attention with this flag as if
+  you use it you have to remove the lyx_tmp(dir) by hand!!! (Jug)
+- Extended the Rotation-Support to Table-Cells also. Try it!!! (Jug)
+- export ascii text now writes "Abstract" (ARRae)
+- export acsii text bug fixed:  (ARRae)
+      - now correctly skips over tex embedded in a paragraph
+- fixed autosave:  (ARRae)
+      - no longer leaves files in TMP_DIR if the rename fails
+      - tries writing autosave file directly if failure occurs             
+- Search/Replace & spellchecker replace fixed. (Asger)
+- Implemented lazy loading of textclasses. Force loading on startup with
+  "-dbg 1024". (Asger)
+- Fixed remove error boxes. (Asger)
+- new better and improved scheme for reading the TextClass
+  descriptions directly from the layout file at configure time. I am
+  sure this will break for many people, but since I use LaTeX for the
+  parsing, I should have less problems than with sed; updated the layout
+  files (JMarc)
+- adapted the layout-reading routines for the new format of
+  textclass.lst; removed the newly-introduced Description tag; please
+  remove your old textclass.lst files (JMarc) 
+- fix a bug with the file-name-in-window-title feature, where closing
+  the last window caused a crash (Lgb) (I did it first :-)
+- A few changes to accomodate DEC cxx (in particular in
+  intl/libgettext.h, a change which should go in the next release of
+  GNU gettext) (JMarc)
+- A few cosmetic changes to the docs; some others to slides.layout
+  (JMarc)
+- fixed a bug in MakeAbsPath where "foo/./"+"../bar" ==> "foo/bar"
+  (JMarc)
+- changed a few unconditionnal debug messages to optional debug
+  messages (JMarc)
+- made a proposal for solution of the i18n<->shortcut problem, applied to
+  menus and insetinclude. Added a file in development/Code-rules for, 
+  Dialogs (Lgb)
+
+since 0.11.38
+- linuxdoc: url{}{} and htmlurl{}{} correctly read in again (Bernhard)
+- Rewrite and cleanup of Translation classes. Bindings to accents and 
+  translation work in a unified (?) way. (alkis)
+- major mods to bullet implementation. Split code into separate files,
+  slight mods to panel layout, new patches in forms/ (ARRae)
+- bullet panel .xpm and .xbm files regenerated that now look clearer
+  and have a grey rather than white background.  (ARRae)
+- small change to forms/fdfix.sh, sed script now starts line 8 instead
+  of line 6 -- required to avoid internationalising two new #includes 
+  needed for bullet_forms.C -- this shouldn't cause any problems (ARRae)
+- added a 'distclean' to forms/makefile, rm's *.orig, *.rej  (ARRae)
+- Implemented buffer title in window in a clean-way. (Asger)
+- Clean-up, bug-fixes and better error recovery in textclass/layout handling. 
+  (Asger)
+- Textclass definition loading prepared for being made lazy. We just need
+  to have the textclass descriptions in textclass.lst, and I'll implement
+  lazy layout file loading. That should increase start-up time substantially.
+  (Asger)
+- Fixed "make srcdoc". (Asger)
+- Small fixes in UPGRADING. (Asger)
+
+since 0.11.37
+- small change to menus.C to work better with gettext (menu names) (Lgb)
+- made a makefile in forms. This can be used to regenerate .C files from
+  .fd files. (Lgb)
+- New lyxrc option: menu_font. It allows to set the font used for popups
+  (FL_NORMAL_STYLE). It is now <menu_font>-*-*-*-?-*-*-*-*-<font_norm>. 
+  If this font is not available, the popup font is set to 
+  -*-helvetica-medium-r-*-*-*-?-*-*-*-*-*-* as before. The default value
+  of menu_font is "-*-helvetica-medium-r". (Petr)
+- Some fixes in Introduction.lyx and UserGuide.lyx, but I didn't get all the
+  way through UserGuide. (Asger)
+- Bug fix in canceled buffer reload. (Asger)
+- If emergency saved file exist, ask whether to try to load that. (Asger)
+- Changed behaviour of \temp_dir. When this alredy exists it is
+  handled like /tmp (so it won't be created, but lyx_tmpXXXXX is
+  created instead (Jug)
+- fixed small bug in minipage-handling (Jug)
+- Made the Table-Layout-Menu a bit smaller (Jug)
+- Right-Mouse-Button in tables now moves first the Cursor to
+  the position and then opens/updates the Table-Layout-Menu (Jug)
+- added support for rotating the tables 90 ', with rotating.sty,
+  this works ONLY for Postscript!!! And is NOT WYSIWYMG. (Jug)
+- Added new Description tag to layout files; used it in
+  Layout/Document; updated layout files to provide descriptions
+  (JMarc)
+- Added the possibility of having several layout files for the same
+  class; the name of the layout file should be
+    <classname>_<something>.layout
+- renamed the Option tag to Other and moved it into ClassOptions
+  (JMarc)
+- changed again the way to detect layout files; the format of
+  textclass.lst has been changed to be only a list of layout
+  names; you should run Options->Reconfigure to regenerate your local
+  textclass.lst file (JMarc)
+- updated the UPGRADING file (JMarc)
+- Added a fix for header files when -ansi is set (JMarc)
+- cleanup to allow compiling with gcc 2.6.3 (ARRae)
+      NOTE: still need configure to drop -ansi if 2.6.3 detected
+- switch off rendering if \ps_command is empty; display filename
+  of EPS-file instead. Give some nicer render-status report (Henner)
+
+since 0.11.36
+- added support for KeepEmpty in LyXText (Jug)
+- changes to support xforms 0.81 (ARRae)
+- bug fix related to having more than 4 lastfiles (ARRae)
+- Bullet popup improvements, panels loaded from disk at runtime,
+      using LibFileSearch, support for mono also (ARRae)
+- bmtable extended: reading xpm's from disk and freeing them also (ARRae)
+- fixed lib/Makefile.in to move doc/*.eps also (ARRae) 
+- detection of algorithm.sty (Bernhard) 
+- line-length reduction in export of SGML (Bernhard)
+- Added "all" keyword for the allowed chars field of \kmod in the
+  .kmap files. This will use the native chars that TeX allows for
+  each accent. Also cleanup and bug-fixes in Trans and Intl (alkis)
+- Moved allowAccents to BufferParams. Also moved get_accent from
+  LyXFunc to tex-accent.C (didn't use any LyXFunc state anyway and
+  I needed it in TransManager) (alkis)
+- Dirty hack to make \bind and Trans work together. Any bindings on
+  accents are delegated to Trans which puts them in the default 
+  keymap (alkis).
+- updated the revtex.layout file; fixed a bug with the Option tag; 
+  separated stdsections.inc inot two files (JMarc)
+- added a new boolean tag in layout files (KeepEmpty) as per Juergen's
+  request; not used currently (JMarc)
+- fixed the problem with lib/configure and color-ls (JMarc)
+- small modification of Makefile.in for OS/2 (JMarc)
+- added a new lyxrc command \ps_command, which is autodetected and
+  defaults to 'gs'. It is used in figinset to launch Ghostscript (JMarc)
+- applied the change from Falko Sauermann to fixing the disapearing
+  layout list bug (JMarc)
+- added a hack to help people without GNU gettext to build LyX after
+  they have applied patches. You should really install gettext instead
+  (JMarc) 
+- added some support in lib/Makefile.in for a images/ directory (JMarc)
+- Improved delimiter dialog: using right mouse button the right
+  delimiter is selected, the region displaying the chosen delimiters works
+  as the apply button (not yet removed), the chosen delimiters are
+  initialized correctly after close/reopen the math panel.  (Alejandro) 
+- Fixed some (not all) bugs related with matrix: double clearing in Matrix
+  and Par destructors caused a segfault (anyway I inserted your patch,
+  Henner, for robustness, but an array never should be cleared twice);
+  alignment with void cells now seems to work. (Alejandro)
+- More bugs caused for the leaks stuff: labels and macros. (Alejandro)
+- buffer doesn't jump to cursor anymore when figure gets ready (Henner)
+- Sizes of rotated figures are displayed right now (Henner)
+- A number of bug fixed. BUGS.lyx updated. (Asger)
+- Added "error-remove-all" that removes all error-boxes. You can find it
+  under "Edit/Floats/Remove all Error boxes". (Asger)
+- Better handling of resize, but not perfect yet. (Asger)
+- Crash in paragraph environments with a manual label and an open footnote
+  removed. (Asger)
+- Various clean-ups. (Asger)
+- Up to 10% speed-up on rebreak. (Asger)
+- Added two new, obvious methods "bool LString::suffixIs(char)" and 
+  "bool LString::suffixIs(char const *)". Used them here and there. (Asger)
+- Use "void foo(LString bar=LString());" to signify default initialization
+  of empty strings. (Asger)
+- fix in insetlatexaccent (Lgb)
+
+since 0.11.35
+- Added a new flag NeedProtect to indicate whether the content of a
+  layout is a moving argument; used it (JMarc)
+- footnotes use \thanks in title layouts (JMarc)
+- Some cleanups to the i18n code. Should work now (JMarc)
+- some bug fixes to my earlier patch, concerning lib/configure and
+  default textclass (JMarc)
+- cosmetic changes to emacs.bind and bufferlist.C (JMarc)
+- Scrollbar and up/down buttons made thinner (ARRae)
+- Small improvements to bullet handling (ARRae)
+- removed development/bullets (ARRae)
+- Installed itemize bullet selection (ARRae)
+       - can read/write .lyx files
+       - user input of LaTeX commands
+       - example file added to lib/examples
+- Small fix: file.C to allow compilation (ARRae)
+- Got rid of old ScanLogFile. (Asger)
+- Stub for "chktex" support put in buffer.C. (Asger)
+- Various mostly cosmetic improvements in source code. (Asger)
+- Small bug fixes. (Asger)
+- Better error handling with key bindings. (Asger)
+- Fixed errors with overriding key bindings. (Asger)
+- Removed "pc-modern.bind" because it's obsolete. (Asger)
+- Figure size defaults to saved size instead of A4 if PostScript file is
+  not readable/missing (Henner)
+- Shows an empty \fbox{} for each undefined figure 
+  (i.e. no filename given) (Henner)
+- Added method LString::charPos(char) that returns a char
+  position. (Alejandro)
+- Removed several "leaks" from mathed, including that which caused a bug
+  in macros when somebody else removed it. ;-)             (Alejandro)
+- Fixed the bug that prevented font changing in math mode. (Alejandro)
+- Fixed some incorrect behaviour of ExtraParagraphIndent and inserted
+  indent for minipage-paragraphs if the paragraph_separation = indent. (Jug)
+- Inserted code for handling footnotes in section-headings (I still need
+  a flag in the layout files, as for now the code is always inserted). (Jug)
+- From now on you can write paragraphs in a table-cell =:), try to press
+  Ctrl-Enter in a table cell. This is NOT WYSIWYG as the linebreaks are
+  not written to the output-file. There are sure still some minor bugs
+  here but I find this is one of the most important enhacements I made
+  for tables. (Jug)
+- Write routine for tables updated to "tabular4", to reflect the above
+  modifications (this is NOT backward compatible). (Jug)
+- Activated definetively the SimpleTeXOneTablePar function and cleaned
+  up SimpleTeXOnePar (removed all Table-Stuff). (Jug)
+- Added and modified a bunch of functions to text.C, text2.C and paragraph.C
+  for the above table-feature. (Jug)
+- Added a "Sendto ..." Entry in the File-Menu. This permits you to send
+  the file in the actual buffer in LyX-,LaTeX,DVI- or Postscript-Format to
+  a command which you define in a Upcoming window. It inserts to a new
+  token for lyxrc \sendto_command for which you can define a default
+  command for this function. (Jug)
+- Small table fix. (Jug)
+- Fixed segfault on close bug (at least I can't see it anymore) (Lgb)
+- changed a lot of X-primitives to XForms-primitives (Lgb)
+- update to OS2 files (miyata)
+- uptodate documentation included (0.10.7) (weiss)
+- small add to space support (spiegel)
+
+since 0.11.34
+- Added a "There are unsaved buffers: Exit anyway?" question if LyX
+  would exit with unsaved buffers. (Jug)
+- Added visual feedback on LyX-Main-Screen if the paragraph is in a
+  minipage-environment (purple dotted line on the left). (Jug)
+- TableLayout-Menu now comes to front if it is already opened (Jug)
+- Fixed Button-(De)Activation in the ParagraphExtra-Layout-Menu (Jug)
+- Recoded some things for Minipage and Paragraph-Indent, especially
+  now if I (un)set a Paragraph-indent of a List-Environment, it is
+  (un)set for the whole List (cause as Jean-Marc advised it really
+  don't work if I select it only on ONE List-Env-Paragraph). If I
+  set minipage for a List-Environment-Paragraph with a ExtraIndent
+  set, the Indent for the whole List-Environment is removed. (Jug)
+- Split the function SimpleTeXOnePar into SimpleTeXOnePar and
+  SimpleTeXOneTablePar. I need this for the upcoming new features
+  as this function is already too large and it would become unable
+  to mantain if we don't split it. I did not yet activate this new
+  function. (Jug)
+- Coded a lot for introducing new Table-Features. You have to #define
+  JUG_TEST to be able to test them (they are for not enabled). (Jug)
+- New insetparent used as reference for a child's document parent.
+  Use "parent-insert <parent filename>".                     (Alejandro)
+- New function "reference-back" to return from a referenced
+  label or from a child/parent document.                     (Alejandro)
+- New function "reference-goto". Should I to explain? :)     (Alejandro)
+- Work on new font loading code: FontLoader finished. Now I only need to use 
+  it in lyxfont.C and that should be it. Will follow soon. (Asger)
+- Make "bold" toggle. (Asger)
+- Activated new font loading code. (Asger)
+- lyxrc spellchecked. (Asger)
+- Removed "pc-modern" bindings in favour of CUA style bindings. Created
+  "menus.bind" to reduce redundancy and make management of bind files 
+  easier. (Emacs binding file cleaned up, but bindings are the same
+  except for new math bindings as defined in math.bind) (Asger)
+- Changed environment variable to use to specify LyX system directory
+  from LYX_DIR to LYX_DIR_12 to avoid conflict with LyX 0.10, and future
+  versions. (Asger)
+- Fixed reference counter problem with LString.C. (Asger)
+- Neglible clean-ups. (Asger)
+- some small fixes to the buffer files. (altered and removed funcs) (Lgb)
+- even better working VCS (Lgb)
+- small change to main form, is it better? (Lgb)
+
+since 0.11.33
+- New function char *LyXAction::getActionName(action).   (Alejandro)
+- Improved LyXAction::helpText. Faster, removed a lot of
+  redundant data. If there's no help string for an action,
+  it returns the command name.  (Alejandro)
+- Bugfix: NULL-ptr-dereferrencing while using LinuxDoc (Bernhard)
+- Bugfix: <descrip>-environment works (almost) correctly (Bernhard)
+- Correction: algorithm-float now has correct representation, even
+  if closed (Bernhard)
+- Added support for algorithm-floats (Bernhard)
+- Added "loa"-inset (list-of-algorithms) (Bernhard)
+- Changed Menu. Now child-files can be included using menu. (Bernhard)
+- Added algorithm-float to menu (Bernhard)
+- Added action for adding floats (Bernhard)
+- Added support for gettext in configure (JMarc)
+- simplified a bit the Makefiles. (JMarc)
+- changed #include "config.h" to #include <config.h> everywhere (JMarc)
+- change the LaTeX file generation so that babel is included later (JMarc)
+- --with-warnings is by default off if you do not use GNU C (JMarc)
+- changed the code for the detection of textclasses. You do not need
+  to edit textclass.def if you create a new layout (JMarc)
+- renamed layout/textclass.def to textclass.lst and packages.def to
+  packages.lst (JMarc)
+- added a new tag ObsoletedBy <style> in style definitions. This
+  allows the style to be automatically replaced by another one; used
+  this to translate transparently LaTeX_Title to Title; removed the
+  old Title layout (JMarc)
+- fixed the title related layouts in amsart.layout (JMarc)
+- Added preliminary support for \minipage-environment (Jug)
+- Fixed some inconsistences between Nice and NonNice LaTeX-Output
+  (please check if I did it right) (Jug)
+- Fixed some problems for IndentedParagraphs, added full
+  WYSIWYG (Jug)
+- ran lyx through purify, some leaks (about 1k) and array bounds fixed.
+  We still leak more than 2k (most in math_*) (Lgb)
+- small cleanup (Lgb)
+- first working version of Version Control (use with care) (Lgb) 
+since 0.11.32
+- New banner page. (Asger)
+- Bug fix: Menu bugs causing crashes. (Asger)
+- Bug fix: Parsing of LaTeX command went out of bounds. (Asger)
+- Bux fix: Potential crash in combox. (Asger)
+- Improvements in spellchecker. (Asger)
+- Small bug fix in file browser: If you typed an absolute path in the name box,
+  the path was ignored. Now, it's respected disregarding current directory. 
+  (Asger)
+- Save more robust: If we fail, allow the user to rename and try again. (Asger)
+- Work on new font loading code. Work in progress. (Asger)
+- Fixed release of Export Pop-up to avoid FL_MAXPUP error. (Asger)
+- Changed behaviour of LyXScrollbar to normal X-behaviour (Jug)
+- Added ParagraphExtraOptions with IndentedParagraphs (Jug)
+- Fixed the Export-Menu (Jug)
+- Fixed the bind files for the new buffer-export command (Jug)
+- Button look for editable insetcommands.   (Alejandro)
+- Improved \maketitle support: no more need to write explicitly
+  \maketitle in tex mode.   (Alejandro)
+- New latextype CommandTitle, new method bool layout::isCommand(). (Alejandro)
+- Example file Maketitle.lyx updated to show these changes. (Alejandro)
+- menubar: frame changed and help not flushright anymore. Comments? (Lgb)
+- a lot of "user strings" converted from "Qwerty" to _("Qwerty") (Lgb)
+- a po/ dir and a intl/ is now in the sources, these are made by the
+  gettextize program, what remains of active support by developers is
+  support in configure for gettext. (Lgb)
+- configurable toolbar should now work again. (Lgb)
+- bufferlist canged to use new and delete dynamically when documents
+  are opened and closed. We still have the limit of 50 buffers. I'll remove
+  that later. Also encapsulated the access to buffer[] This might have
+  put some bugs or leaks into the open, so please test. (Lgb)
+
+since 0.11.31
+- partially fixed some .kmap files (JMarc)
+- Corrected the installation of the files in lib/layout (JMarc)
+- added detection of the color package and fixed its validation (JMarc)
+- fixed the handling of float placement options (JMarc)
+- Large reorganisation of the layout files; I'm sure I broke a bunch
+  of them, but I fixed a bug in the reading routines in the meantime (JMarc)
+- added the debug level TCLASS=1024 to debug reading of textclasses (JMarc)
+- Fix crash when searching for an empty string (JMarc)
+- some clean-up in intl.C and trans.C; removed kfopen() (JMarc)
+- added a test for gcc strength reduction bug (JMarc)
+- fixed a few kmap files for unquoted commas(JMarc)
+- Added support for p{} alignment in tables. NOT WYSIWYMG!!! (Jug)
+- Fixed the use_longtable handling (Jug)
+- New method InsetCommand::getScreenLabel() to avoid confusion
+  with Inset::getLabel(int). (Alejandro)
+- Got back the special InsetBibkey::Write method. (Alejandro)
+- Added the method InsetRef::gotoLabel(), guess what it does :) (Alejandro)
+- Added the function reference-toggle to toggle an InsetRef
+  between REF and PAGE_REF non-interactively. (Alejandro)
+- Removed the Reference dialog, it's no more necesary: To go to a label, 
+  click on a reference inset, to change the reference type, use the function
+  reference-toggle. To change the label, just insert a new one. (Alejandro)
+- Several mathed fixes: oslash/emptyset, bot/perp, extra line
+  after Matrix, spaces around names, etc. (Alejandro)
+- Removed a lot of unuseful comments from lyxfunc. (Alejandro)
+- Automatic handling of bibtex. Please test and report. (Lgb)
+- merged paths.[hC] and filetools.[CH] into one file. (Lgb)
+- changed NametoPath to OnlyPath. (Lgb)
+- Better VC support. Still not functional, but it is better. (Lgb)
+- some general cleanup. (Lgb)
+
+since 0.11.30
+- Added preliminary support for longtable package. Changed the
+  document-format-version to 2.16 (changed back to 2.15 Lgb) and the
+  table-version from  multipart2 to multipart3. (Jug)
+- Now most of the Table-Layout-Form options (like alignment, borders ...)
+  work also on selections (Jug)
+- Added functions to add/remove all table-borders on selection (Jug)
+- Changed umllaut to umlaut in greek-keymap (forgot it before :) (Jug)
+- Small fix for errorboxes in tables (Jug)
+- Fix for Option-Keyboard do accept other... keyboards and
+  a spell from umllaut to umlaut. (Jug)
+- New option --with-warnings in configure automatically set to on for
+  development versions; this option does not imply -Wno-unused with gcc
+  anymore (JMarc)
+- Better handling for sgml-tools in lib/configure; since this implied
+  a change in chklatex.ltx, it will probably break the OS/2
+  configure.cmd (JMarc)
+- The file dialog now uses the current buffer's directory as initial
+  dir (JMarc) 
+- " no longer inserts an InsetQuote in TeX mode (JMarc)
+- Keybindings should no ignore NumLock setting in Linux (please try
+  this!) (JMarc)
+- Fix the crash with Options->LaTeX when there is no open file (JMarc)
+- Text in TeX mode is no longer broken at spaces (JMarc)
+- more work on the VC support (not yet functional) (Lgb)
+- some shuffling of code and cleanup (especially to insets). (Lgb)
+- work on the error reporting on LaTeX and the use of TeXErrors. (Lgb)
+- a preliminary (probably non working) InsetRef to use when inserting
+  crossreferences. (Lgb)
+- changed InsetLabel to be a subclass of InsetCommand (Lgb)
+- added a method BufferView::available() that tells whether there is a
+  valid buffer there; used it in many places in the code (JMarc)
+- better detection of the C++ compiler in configure (JMarc)
+- Break the << and >> ligatures with T1 fonts (JMarc)
+- The #warning directives are only active when --with-warnings is set
+  (e.g. for development versions) (JMarc)
+- A small bugfix in autoconf routines for detecting X (JMarc)
+- the current paragraph depth is shown in minibuffer along with the
+  current font (JMarc)
+
+since 0.11.29 (0.11.29.1 0.11.29.2)
+- removed calls to mktemp and repaced with calls to tmpnam (Lgb)
+- some changes to code so that we can remove the -Wno-unused switch (Lgb)
+- more work on the Version Control, not yet finished, but a bit closer (Lgb)
+- some rework of the tex header files. (Lgb)
+- partial reorganization of the LinuxDoc code. It should be little bit
+  easier to read. Parts should move in next step to paragraph-class. (Bernhard)
+- Display of End-Of-Line marker for ctrl+enter (protected newline). (Asger)
+- Backspace much faster. (Asger)
+- Assorted minor speed-ups. (Asger)
+- Fixed -Mono switch. (Asger)
+- Detail bug-fixes/improvements in displaying. (Asger)
+- README updated. (Asger)
+- BUGS.lyx updated. (Asger)
+- several linuxdoc changes, fixes. (Bernhard)
+- better handling of Latin1 characters (JMarc)
+- quotes should always work now; nicer french quotes (JMarc)
+- Added new docs, modified a bit to get along smoothly with 0.11.x (JMarc)
+- A few clean-ups for DEC cxx; some changes to BUGS, BUGS.lyx and
+  LaTeXConfig.lyx.in (JMarc)
+- Fixed mathed's bugs concerning deleting and inserting rows (Alejandro)
+- Preliminary text mode under math mode (Alejandro)
+- Now the labels browser works again for math labels  (Alejandro)
+- Improved the insetinclude class and its dialog  (Alejandro)
+- Some fixes to intl.C and to label insets (Alkis)
+- renamed [pf]eatures.[Ch] to LaTeXFeatures.[Ch]. This should solve
+  problems with existing features.h (JMarc)
+- Fixed problem where a new file would be read only (JMarc)
+- Fixed a couple of annoying mathed bugs.  (Alejandro)
+- Small enhancement to minibuffer.  (Alejandro)
+- rewrote Intl. Now passes translation requests to a Trans class. No more
+  delete-ing and new-ing when switching kbmaps, Trans is smart enough.
+  Added new keyword for .kmap files: kcomb deadkey1 deadkey2 allowed that
+  allows you to combine two deadkeys on the same character. (npoly))
+- LFUN_BACKSPACE first consults with Trans to see if the cursor has moved
+  in the previous keystroke (useful for deadkeys). Backspace will delete
+  the previous character (if any was inserted) or cancel the previous
+  deadkey. (npoly)
+- Intl reads its default values (primary language, secondary language,
+  font encoding) from lyxrc. (npoly)
+
+since 0.11.28
+- the most uptodate documentation included.
+- the keymaps should now be working (almost) correctly. (npoly/Lgb)
+- some more changes to the insetinclude (for the better I hope) (Lgb)
+- added a new command LFUN_LAYOUTNO (lyx internal only) takes an int instead
+  of a string as argument. fixed LFUN_LAYOUT. (Lgb)
+- made a new file lyxdraw.[hC] it contains the GC functions and the
+  Draw functions from text.C. Also some changes to text.C. (Lgb)
+- removed the current_buffer completely from bufferlist, BufferList should
+  now be so encapsulated that the buffers at last can be stored as a linked
+  list. I have been wanting to do that for 1.5 years!!! However the removal
+  of current_buffer can have introduced some minor bugs, but I have not seen
+  any so far. (Lgb)
+- removed the "Read-Only" popup. (Lgb)
+- pre pre alpha preliminary support for RCS, I planned to do this decent,
+  but I got caught in cleaning instead. In the prelim support LyX is able
+  to detect that a file is under controll by RCS (the file must be made with
+  0.11.29 if it shall work correctly. I will complete this promptly on the
+  return from my vacation. (Lgb)
+- Partly rewrote the Quotes inset (JMarc)
+- renamed package.h to features.[Ch] and moved some code there. Inset
+  now do their own validation. (JMarc) small fixes to this (Lgb)
+- fix UserGuide.lyx so that the EPS figures appear correctly (JMarc)
+- A little change to makepatch to make patches shorter (JMarc)
+- minipatch to table.C and TableLayout.C
+- updated letter-layouts. Created new stdletter.layout and
+  updated letter.layout,iletter.layout and dinbrief.layout (Jug)
+- updated the file tex/iletter.tex (Jug)
+- small fix for New with template (Jug)
+- some fixes in LyXLex, there was a wrong handling of \" (Jug)
+- fixed the segfault if deleting last row/column from
+  Layout-Table-Menu and introduced security check for delete table (Jug)
+- Added function lyxaction::getApproxFunc and getApproxFuncName. Allow to get
+  a lyx action from an incomplete or approximate string. If the string is 
+  exactly equal than an action name, the next action is returned.   (Alejandro)
+- Improved the minibuffer:   (Alejandro)
+  o Added history to store the last MAX_HISTORY commands typed. To browse
+    the history use the Up and Down keys while the focus is on the minibufer.
+  o Typing tab to get next command in table or to complete the name from
+    an approximate or incomplete string (using getApproxFuncName reported
+    above). By typing Tab several times you can browse the entire 
+    function table.
+  o As the minibuffer is using now a prehandler as keyboard callback, 
+    the dirty trick of the hidden buttons are no more necessary so they
+    were removed.
+- Moved getIncludeonlyList and getReferenceList to buffer.C since they
+  are buffer's properties. The reference popup doesn't yet work, maybe
+  because some bug in ReturnNextInsetPointer.   (Alejandro)
+  
+since 0.11.27
+- made possible to change pipe-filenames in monitor-program (Bernhard)
+- Allow all extensions by ExpandPath-call in read of Resource
+  \serverpipe (Bernhard)
+- made paragraph-layout <quote> in LinuxDoc available (Bernhard)
+- Fixed a few warnings and bugs found by DEC cxx (JMarc)
+- fixed a bug where a LyXLex file was closed twice. (JMarc)
+- fixed a buglet in configure with Sun's broken /bin/tr (JMarc)
+- a few tweaks to LaTeX preamble generations (JMarc)
+- Fixed mathed bug \not{}. (Alejandro)
+- Added switch "verbatim" to insetinclude. (Alejandro)
+- Improved the Include dialog. Also, button "Load" works. (Alejandro)
+- Added destructors to some classes (lyxGUI, lyxMain, lyxserver)
+  but aren't used because that "smart" exit.   (Alejandro)
+- Three new non-interactive functions for bibtex: bibtex-style,
+  bibtex-database-add, bibtex-database-del (guess their mean).
+  The cursor has to be in front of the bibtex inset (by now).  (Alejandro)
+- Started to implement getIncludeonlyList(). (Alejandro)
+- Cleaned lyxfunc of some unuseful arrays and added preliminary message and
+  error functions. IMO in a future lyxfunc should not use directly the
+  minibuffer but let it's owner to display the messages. (Alejandro)
+- Created a mechanism to check out that a command is RO (so I removed
+  from lyxfunc a lot of lines). Currently it consist in an attribute table
+  that contains only the RO commands but in a future could be expanded
+  to include more attributes to all commands.   (Alejandro)
+- Improved lyxserver:     (Alejandro)
+  o Added destructor. Now lyxserver closes the pipes and
+    removes the io callback.
+  o Added Error notify, in case that lyxfunc reports an error.
+  o Implemented a silly communication protocol: If a client send 
+    LYXSRV:<clientname>:hello,  LyX will correspond the greeting
+    without bothering lyxfunc. So the client will know that LyX is
+    listening. If LyX send LYXSRV:<clientname>:bye, the clients 
+    shouldn't expect nor send more messages.
+  o Added function server-get-tip to get a help line about a command.
+    btw helpText is now (char const*) because it's not used as LString
+    currently and can be easily converted to LString where that's really
+    necessary (conclusion: LString is great but please don't abuse)
+  o Created a testing tool (server_monitor) as an example on how to
+    use the new protocol.
+  o Tested with barracuda, the Qt bibtex browser (it works! :)
+- New layout file commands Input and NosStyle; Font...EndFont also
+  redefines the LabelFont; new layout directive CopyStyle; converted
+  several layouts to use a common layout file stdclass.layout. (JMarc)
+- Section layouts can now have a number and a labelstring; used this
+  for Chapter; defined layout Chapter* (JMarc)
+- LyXLex::GetLongString() tries more carefully to keep a resonable
+  indentation (JMarc)
+- A few changes in LaTeX file preamble generation code.
+- Some improvements in OS/2 support in Makefiles (JMarc)
+- Rewrote parts of LaTeXConfig.lyx.in to be more like what John wants
+  (JMarc) 
+- added a global bool finished to make lyx quit more graciously. (Lgb)
+
+since 0.11.26 
+- rewrote part of the code that generates the preamble
+  of a LaTeX files; more things are now omitted when unnecessary (JMarc)
+- Added support for global and layout-specific preambles in
+  textclasses (JMarc)
+- added support for \lyxline and layouts in Paragraph::validate (JMarc)
+- Added a new method LyXLex::GetLongString(endtoken) (used to read
+  preambles (JMarc).
+- fixed a bug in ascii file output (JMarc)
+- LyXLex now closes files that it has opened (JMarc)
+- inserted new Table-Layout-Menu and reactivated right mousebutton
+  on Tables, which now will open the Table-Layout-Menu or Update
+  an already open Window (Jug)
+- split LyXLength into LyXLength and LyXGlueLength (Andre)
+- made insets for toc,lof and lot and added three new commands
+  o "toc-insert"
+  o "lof-insert"
+  o "lot-insert" (Lgb)
+- backwardscompability fix in insetlatexaccent (Lgb)
+- some changes because of the bufferlist->current() removal (Lgb)
+- prelim support for real read-only buffers, needs some more work. (Lgb)
+- some cleanup (Lgb)
+- made Buffer:makeLatex only include the needed parts from lyx_sty (Lgb)
+- OS/2 support stuffs in src and configure script replacements.
+  Reconfigure from inside LyX does not work yet (SMiyata)
+- Mathed bug fixes: {}delims, extra tabs, bold accents, array mess. (Alejandro)
+- Added math.bind with some additional math mode key bindings. (Alejandro)
+- Partial implementation of buffer-child-open.  (Alejandro)
+- Fixed a couple of font related mathed bugs.   (Alejandro)
+
+since 0.11.25
+- fixed bug in lyxfunc, now lyx ignores Mode_Switch (Lgb)
+- fixed bug in BufferParams::readPreamble (I think) (Lgb)
+- added a const to Formula::Display (Lgb)
+- some more refinements to LaTeX::run (Lgb)
+- preliminary support for multipart documents (Alejandro/Lgb)
+- change in ChangeExtension(...) to allow extension="". (Lgb)
+- all bufferlist->current() removed. uses now current_view->currentBuffer()
+  instead. This is a little better, but this also needs to change, but not
+  for 0.12. (Lgb)
+- enhanced LyXParagraph::validate() to also validate files included through
+  InsetInclude. (Lgb)
+- New InsetInclude to support including child documents. Use
+  command "buffer-child-insert [filename]" to insert it.        (Alejandro)
+- New method LString.rsplit (reverse split). To separate a filename
+  and its path use fname = oname.rsplit(path, '/').             (Alejandro)
+- First step in integration of new classes for abstraction from 
+  System-calls (Bernhard)
+- Better handling of read-only files. They can't be overwritten now. (Asger)
+- Emergency save enhanced: We try to emergency save three different places:
+    1) Same place as document.
+    2) In HOME directory.
+    3) In "/tmp/" directory.
+  (Asger)
+- Fixed bug with wrong numbering of itemize after "paragraph" and
+  "subparagraph" environments. (Asger)
+- Fixed stupid bug with setting of font attributes. (Asger)
+- Work on system-calls class. Fixed bugs, better error handling and new
+  feature: The callback is passed the returnvalue from the child, even if
+  it was executed in the background :-) (Asger)
+
+since 0.11.24
+- fixed a bug in LaTeX that caused the error message to not show. (Lgb)
+- fixed small bug in LString::frontStrip (Lgb)
+- redone a large bit of class LaTeX, it now uses checksums to resolve
+  LaTeX runs. As far as I can see LaTeX is now never run more than the
+  requiered times at any point. It is not totally finished, what remains
+  are support for makeindex and bibtex. (Lgb)
+- DepTable.[hC] refined. a couple of new funcs. (Lgb)
+- the reg...() funcs in bufferparams has been removed (Lgb)
+- validate() in lyxparagraph has been enhanced (Lgb)
+- rewrote InsetInfo::read (fixed buggy algo) (Lgb)
+- added some consts to insets. (Lgb)
+- rewrote BufferParams::readPreamble to not use LyXParagraph (Lgb)
+- Fixed DefaultFont handling error in buffer.C (ARRae)
+- changed from vmargin.sty to geometry.sty (Jug)
+- changed also the configure-stuff from vmargin to geometry (Jug)
+- fixed bug in lyxrc which does not know about PaperPackages like a4.sty
+  look at system.lyxrc for info (Jug)
+- added the function CheckToken to lyxlex (I need this) (Jug)
+- added the File LaTeXLog.C (guess for what) (Jug)
+- added the not activated View Latex-Logfile (Jug)
+- improved (?) the code for FontSize and PageStyle textclass options (JMarc)
+- cleaned up the code to run LyX in place (JMarc)
+- updated BUGS.lyx (JMarc)
+- Several mathed bugs fixed.  (Alejandro)
+- Improved column alignment in math mode (insert tabs with C-Tab).  (Alejandro)
+- Enabled cut & paste between different insets in math mode.   (Alejandro)
+- Preliminary support to define interactively macros with two new
+  functions "math-macro <name> [nargs]" and "math-macro-arg #". (Alejandro)
+
+since 0.11.23
+- New (proof-of-concpet) bannerscreen. (Asger)
+- Implemented two new commands:
+  layout-copy  Copies current paragraph environment type
+  layout-paste Pastes paragraph environment type
+  Bound to "ctrl-C" and "ctrl-V" in pcmodern.bind. 
+  Bound to "m-W" and "ctrl-Y" in emacs.bind (Asger)
+- BUGS.lyx updated to lyx format 2.14. (Asger)
+- Fixed problems with missing text after footnotes. (Asger)
+- Small fix in math font handling. (Asger)
+- LString documentation improved. (Asger)
+- Fixed stupid bug with font attributes and changing of layout. (Asger)
+- Smallcaps made smaller on screen. I'm not sure it's exactly like LaTeX, but 
+  it's pretty good. (Asger)
+- Added "latin5" to Input Encoding option as H. Turgut Uyar requested. (Asger)
+- Reluctant change: Matthias is being phased out as primus motor.  
+  I don't think it's fair to blame Matthias for the many changes
+  we are doing to LyX, so I've removed his signature from the README
+  file.  We owe everything to Matthias, so this is an act of respect
+  rather than despect. (Asger)
+- Fixed some mathed's bugs (Alejandro)
+- Typing a space at the end of a math inset will leave math mode and
+  insert a space in text mode.  (Alejandro)
+- Extended the set of special ($%#&{}_) and ordinary (?) 
+  characters in mathed.  (Alejandro)
+- Added a small space to math function insets (macro-names)  (Alejandro)
+- Fixed a few bugs (JMarc)
+- Improved Bibtex and BibKey insets (JMarc)
+- Added some font effects to file dialog and CREDITS file (JMarc)
+- fixed LString::token and a bug reported by David (JMarc)
+- hopefully fixed figure rotation and scaling problems (JMarc)
+- some clean-up (JMarc)
+- some changes to the figinset popup, not very nice yet. (Lgb)
+- tried to make the lyxserver work again, it does not... however
+  there is probably only small fixing needed to make it work (Lgb)
+- reduced xxxinset::descent +3 to +1 (Lgb)
+- small patch to filedlg posted to via@ inserted (Lgb)
+
+since 0.11.22
+- Fixed segfaults-while-saving problem (ARRae)
+- lib/configure now checks for more programs; updated
+  LaTeXConfig.lyx.in (JMarc) 
+- renamed a few lyxrc commands for consistency (JMarc)
+- unavailable menu items in the file menu are greyed-out (JMarc)
+- fixed the bug killing LyX when the file menu is left open (JMarc)
+- changed the depth of the icons shadow to 1 (JMarc)
+- Work area now cleared and scrollbar reset after last file closed
+  (ARRae)
+- some general cleanup (table.h) (Lgb)
+- trying to get the lyxserver working again. Not quite done yet. (Lgb)
+
+since 0.11.21
+- Redone the whole Page-Layout stuff, now called Paper-Layout (Jug)
+- Changed LYX_FORMAT from 2.13 to 2.14. This is needed in order to
+  be able to convert the old papersize-stuff to the new format (Jug)
+- configure now checks more closely the xforms version; a few fixes
+  there (JMarc) 
+- the default LYX_DIR is now ${prefix}/share/lyx (JMarc)
+- compiles with DEC cxx (JMarc)
+- LyX is now able to read environmentvariables by reference inside the
+  lyxrc-files. (Bernhard) 
+- New layout tag LatexParam, currently only used to support dinglists
+  in foils layout. Provides arguement for environments or commands (ARRae)
+- began writing new multirun algorithm (see LaTeX.C) (Lgb)
+- included small fix posted to list (Lgb)
+
+since 0.11.20
+- Small fixes and clean-ups here and there. (Asger)
+- Fixed regular expression matcher. It should be pretty good now. (Asger)
+- Optimized screen drawing: LyXText::Draw is twice as fast as before. (Asger)
+- Optimized rebreak: 2.8 times as fast on UserGuide.lyx. (Asger)
+- Added method "token" (similar to strtok) to LString. (Alejandro) 
+- New layout tag ClassOption, currently only used for foils' font
+  sizes. Doesn't affect standard layouts. (Alejandro)
+- Added "default" to pagestyle and fontsize strings. If default
+  is used no LaTeX code has to be written. This should be extended
+  to other document options.  (Alejandro)
+- Fixed some bugs to make bibliography more usable, finished  support
+  for nonnumeric bibkeys, added arguments for cite and bibtex
+  commands.  (Alejandro)
+- Make sure default screen is not larger than monitor (Asger)
+- Improvements in font handling. (Asger)
+- Massaged LaTeXConfig.lyx.in a bit. (Asger)
+- Make LyXLex \r compatible to help OS/2 port. (Asger)
+- Fixed centering bug for DYNAMIC margintype (Section, subsection..) (Asger)
+- Improved error control in reading of layouts, toolbar, lyxrc. (Asger)
+- Fixed a bunch of very old errors in layout files. (Asger)
+- Added support for iso8859-9 (turkish) screen fonts. (HTU)
+- one line fix in LaTeX.h to make error insets work again. (Lgb)
+
+since 0.11.19
+- Tiny fix to configure for xforms 0.86; another tiny fix to sos.* for
+  compilers that do not have a real bool type. (JMarc)
+- updated lib/configure to check whether your latex program is really
+  LaTeX2e; added checks for vmargin.sty and setspace.sty, along with
+  documentation in LaTeXConfig.lyx.in (JMarc)
+- \ and " are now output using \char when possible. This is better
+  understood by the various LaTeX to HTML converters (JMarc)
+- Fixed display of Noun and Emph logical font attributes. (Asger)
+- In typewriter family fonts, all blanks are generated as "~" in the
+  LaTeX file. Other improvements in LaTeX generation. (Asger)
+- Added new files: ANNOUNCE, WHATSNEW and UPGRADING to prepare for 0.12.
+  Notice that those files are only drafts and ANY comment or request for change
+  is asked for. (Asger)
+- Misc. fixes. (Asger)
+- Finally corrected cosmetic bug introduced in 0.11.13 by me. It turns out
+  that the original kernel was bugged with a great performance penalty as a 
+  consequence.  Now, things should be correct and fast. I think this explains 
+  why some people have reported bad performance with remote X servers. (Asger)
+- Make LyX work with xforms 0.86. Required a little hacking. Primary benefit:
+  LaTeX Preamble features scrollbars :-) (Asger)
+- Small clean-up in mathed font size selection. (Asger)
+- Fixed bugs in automatic system directory detection. (Asger)
+- Inserted handling for Vmargin.sty with new Layout-Page-Menu (Jug)
+- two small fixes from lyx@via inserted (Lgb)
+- added Index List to Insert menu (Lgb)
+- added a (nonworing) command to Edit: Show LaTeX Log (Lgb)
+
+since 0.11.18
+- update lib/configure to allow running LyX from the build directory;
+  it is rather a hack, so tell me if it works (JMarc)
+- change \epsfig to \graphics in the generation of lyxrc.defaults; fix
+  lyxrc.C to allow reading it (JMarc)
+- a backslash is now output as \textbackslash. (JMarc) (Is it?)
+- Updated BUGS.lyx (JMarc)
+- updated lyx_debug_level everywhere to use lyxerr instead. (Lgb)
+- also changed a lot of fprintf(stderr... to lyxerr->print(... (Lgb)
+- begun writing of a validate func. (Lgb)
+- added a "Comment" style to some of the layouts. This use the 
+  "verbatim.sty" This is the easy solution, if we want a better solution
+  we can do that later. (Lgb)
+- added support for setspace.sty It is not complete however, missing 
+  are support for arbitary spacing and per paragraph spacing. (Lgb)
+- some more cleanup (moving of enums from definitons.h) (Lgb)
+- two unused functions in lyx_cb.C removed. (Lgb)
+- small update to vspace.[hC] (enums) (Lgb)
+- Except for "../images/", LyX compiles with only one warning with -pedantic.
+  (Asger)
+- Implemented "Increase" and "Decrease" size options in character style
+  pop-up. Font size names changed to match Rich's second proposal. (Asger)
+- Bug fixes in new font code: color should work correctly, LaTeX generating
+  bug fixed and improved, reading and writing of underbar correct, and a
+  few other fixes. All in all, the new font code seems pretty stable now. 
+  (Asger)
+- Added monitor dpi setting to lyxrc. LyX autodetects this, but it's 
+  overridable using the "\dpi integer" lyxrc command. This setting is
+  used for calculating the size of fonts and vertical spaces. Because
+  of this, the default zoom factor has been changed to 150% so the fonts
+  are readable. (Asger)
+- LyX system directory normalized to reduce "/p1/../p2/" to "/p1/p2/". (Asger)
+- LyXGUI is initialized before documents are loaded, unless "-nw" is
+  given. The reason is that XForms have to parse the command line before
+  we know what arguments are documents and which are not. Also, we have 
+  GUI warnings and error boxes unless the user specified -nw.  As a different
+  side-effect, this fixes lots of bugs. (Asger)
+- Added "\document_path" lyxrc command. (Asger)
+- All lyxrc commands that supply paths understand "~/" now. (Asger)
+- Removed BUGS.lyx from root dir. If you want to read it, you have to
+  start lyx, and then it's easier to fetch it under the Help menu. 
+  Redundancy is bad. The bug file in lib/doc updated. (Asger)
+- included part of the OS/2 patch and added support for a
+  os2_defines.h header file (JMarc) 
+- lib/configure now generates a file packages.def containing the list
+  of LaTeX packages that have been found ; a few fixes (JMarc)
+- Help files are not added to the last files list in the 'Files' menu
+  (JMarc)
+- support for inputing latin1 characters using the keyboard's compose
+  key (JMarc)  
+- Mathed changes (a lot):   (Alejandro)
+  o More natural structure of paragraphs to make easier the introduction
+    of selection, macros and possibly a good font renderer in a future.
+  o Removed several hacks. Now the design is cleanner but the cleanup
+    of the code is not yet finished.
+  o Fixed several reported bugs and implemented some suggestions.
+  o Renaming to be consistent with the rest of the names. Now the mostly 
+    used prefix is "Mathed".
+  o Builtin macros "binom", "cases", "substack" as a first step toward
+    minimal AMS support.
+  o Improved selection: multiline, multicolumn. Still some details have
+    to be fixed (sometimes it pastes wrong number of columns).
+  o Removed pixmap and file from math-inset parameters. That could be 
+    non-threads safe (depending on how threads be implemented).
+- new versions of the docs included so that they will reach a bigger
+  audience (Lgb)
+
+since 0.11.17
+- 30% speed-up on rebreak gained yet again after profiling :-) (Asger)
+- Layout file system changed: The default font can be declared with the same
+  syntax as other fonts. Use the "DefaultFont" directive. This supercedes
+  the obsolete "defaultfamily", "defaulshape", ... directives. See
+  "article.layout" for an example. (Asger)
+- Some memory "profiling" reduced executable size from 711k to 675k :-) (Asger)
+- Font handling clean-up continued:
+  - Font representation changed to mega fast bit table.
+  - Old bugs with inheritage of font features in nested environments fixed.
+  - LaTeX font change generation changed to use the \textXX{ } variants.
+ (Asger)
+- Use "\the_end" marker to mark the end of a file. Now ReadLyX2Format reports
+  whether the reading of a document is complete or not for lyx-format >=2.13. 
+  (Asger)
+- Finally got totally rid of the old math mode. (Asger)
+- Font handling cleaned up. Bugs fixed, bugs introduced. This is work in
+  progress. Don't report bugs. (Asger)
+- Color font property added. Work in progress. (Asger)
+- Font zoom handling changed to use zoom directive that specifies how
+  many percent increase in size, you want. Font size handling changed to
+  use floats internally for better accuracy. (Asger)
+- "ref-insert" renamed to "reference-insert". (Asger)
+- "buffer-load-auto-save" renamed to "buffer-open-auto-save". (Asger)
+- (Updated) Bugs file added under Help menu as "Known Bugs". (Asger)
+- Only show TOC pop-up with Reference guide. (Asger)
+- Bug with Insert LaTeX figure hacked around. (Asger)
+- 30% speed-up on rebreak after profiling results. (Asger)
+- LString representation extended with length field. Now LString::length() is
+  extremely fast, inlined constant time. Abuse as you wish. 
+  Global srep made local to LString class. (Asger)
+- Delay after breaking paragraphs decreased. (Asger)
+- Let scrollbar slider fill entire work area when no document is open. (Asger)
+- Prevent rebreak when only y coordinate changes. (Asger)
+- Prevent crashes when doing stuff on empty work area. (Asger)
+- Hundreds of functions changed to use LString const&. (Asger)
+- LString speed and memory usage improved. (Asger)
+- LString bounds checking removed for non-development releases. (Asger)
+- Bugfix in LString::regExp(). "*ab" matches "aab" now. (Asger)
+- Various clean-ups. (Asger)
+- Bug fix in buffer.C regarding writing of preamble. Lars, we did not
+  consider case 0, so it was bugged after all :-) (Asger)
+- introduced a class FilePtr to be used instead of FILE* (Lgb)
+- made a BufferView class (Lgb)
+- got rid of OpenFile OpenAllFile and CloseFile in file.[hC] (Lgb)
+- cleaned up FD_form_main a bit. (Lgb)
+- added a \noun command to lyx.sty (will do for now) (Lgb)
+- moved screen (pointer) from class Buffer to class BufferView (Lgb)
+- changed the class LyXScreen representation to have a pixmap per object.
+  This introduced some bugs... However either the LyXScreen must have the
+  Pixmap as a private variable or the BufferView must have it, eitherway
+  it cannot be a shared variable among all the LyXScreens. (Lgb)
+- moved some funcs from lyx_cb to BufferView (Lgb)
+- moved a couple of funcs from Buffer to BufferView (Lgb)
+- the title form is now double buffered and the popup time is reduced to
+  10 secs (from 15) (Lgb)
+- MenuOpenByName fixed and renamed to openByName() (Lgb)
+- small buf in LaTeX::run() fixed. (Lgb)
+- LaTeX if now run only once if no more is needed. (Lgb)
+- got rid of form1.C.patch. (Lgb)
+- probably some more that I don't remember. (Lgb)
+since 0.11.16
+- added detection of the ec fonts in lib/configure; fixed a few bugs
+  there (JMarc)
+- new method LString::subst for strings. Hope I implemented it
+  correctly (JMarc)
+- LexRC::printError() now understand a special string $$Token, which
+  is replaced by the current token; used this in various places to
+  simplify code  (JMarc)
+- most of minibuffer.C interface uses LString now; did the same for
+  lyx_gui_misc.C and rewrote a bunch of WriteAlert() and
+  minibuffer->Set() calls. (JMarc)
+- new function TmpFileName() which interfaces mktemp() (JMarc)
+- Fixes to the epsfig handling; the option 'none' is now understood in
+  addition to 'default'. (JMarc)
+- A few changes in the Makefiles to help the OS/2 port; removed the
+  -devel thing in configure  (JMarc)
+- Optimized a lot of code after profiling a lyx run with loading of a very big
+  document (The Return of Sherlock Holmes). 15% speed-up gained :-) (Asger)
+- Small fixes. (Asger)
+- Enhanced droplist combox so that you can drop the choices by clicking
+  on the text field also. (Asger)
+- made a lot of function into member functions of LyXFont (Lgb)
+- changed the font loading algorithm a bit, to cope with non
+  existant fonts (Lgb)
+- fixed a bug in toolbar.C reported on lyx@via (Lgb)
+- a lot of font handling updated to use enums instead. (Lgb)
+- Make spellchecker work again from menu. (Asger)
+- LyX prompts an error if closing a file after saving fails. (Asger)
+- Bugfixes in file browser. (Asger)
+- Changed LyXLex specs a bit to bug-fix document reading. Bug-fixed 8-bit
+  behaviour. (Asger)
+- Finished (almost) bibliography support using insetbibkey and a bibref list 
+  is updated everytime a cite is edited. Changes marked with ale970302,
+  looks like a hack until a further cleaning of the code.(Alejandro)
+  
+since 0.11.15
+- Fixed bugs with accented chars. (Asger)
+- Fixed bug that caused |h|o|r|i|z|o|n|t|a|l| lines. (Asger)
+- Various clean-ups. (Asger)
+- Prepared LyX for use with XForms 0.84. (Asger)
+- Fixed problem with labels and -Mono switch. Labels are palegreen now. (Asger)
+- fixed the layoutchoice (Lgb)
+- began rewrite of intl.[hC], kbmaps are now completely broken (Lgb)
+- some fixing on accents, more is needed. (Lgb)
+- made buffers keep a list of bufferViews (not fully implemented) (Lgb)
+- the menu is now shorter and the layout choice does not show anything
+  when no document is loaded. (Lgb)
+- the gui init is now last of the inits. This means that no gui is involved
+  before late. We can now begin to implement command line switches like:
+  o  -nw   (no-window)
+  o  -f <func>   execute function (this can only be a subset of functions)
+  should be possible to do something like: lyx -nw -f print foobar.lyx  (Lgb)
+
+since 0.11.14
+- made preliminary index generation using makeindex work. (Lgb)
+- Fixed determination of LyX system dir using $PATH if necessary. (Asger)
+- LyX allows spaces in document filenames now :-) (Asger)
+- Almost implemented Apropos command, except that I don't know how to get
+  the lyxfunc from a global function (see help.C). (Asger)
+- Renamed docu.[Ch] to help.[Ch]. (Asger)
+- Moved help text from toolbar to LyXFunc::helpText(kb_action). Now, when
+  you implement a new command, please add a help-text entry to the table in
+  lyx_func.C. Many commands still need better help texts. Later, this
+  table can be used to create pop-up menus. (Asger)
+- Changed ranges allowed for LString::operator[]: It is not legal to
+  access implicit null character at end of string. (Asger)
+- Assorted clean ups. (Asger)
+- Finished what Jean-Marc started: removed special seperator and
+  layouts functions for toolbar. Use the "\layouts" and "\separator"
+  commands instead. (Asger, Lgb)
+- LyXlex made more robust: reports errors if lines are too long
+  instead of crashing. (Asger)
+- Fixed Ascent and Decent in a lot of inset because of the above change.(Lgb)
+- Some changes that seems to revert recent Lars' changes, but this is
+  a dialectic process.  :-)   (Alejandro)
+  o No more need to cast (char const*) from long in Dispatch 
+    (the only action that had been forced to pass a non-char* argument 
+     (menu->buffer-write), in fact doesn't accept any argument.) ;-)
+  o action methods agruped in a new class LyXAction. lyxaction is
+    one of the very few objects that deserves to be global.
+  o keyseq is part of the internal state of lyxfunc, should not be separated.
+    however, keymap can be separated. so I removed bind.C.
+  o removed several globals, including dispatch variables that are not
+    used outside Dispatch.
+  o more unbroken minibuffer; it displays options again and server actions
+    can be invoked from the minibuffer
+  o some bugs that caused segf when creating toolbar fixed.
+
+since 0.11.13
+- added a method LexRC::printError() for printing error messages
+  during file parsing; used it in lyxlex.C, layout.C and lyxrc.C  (JMarc)
+- Changed toolbar.C to use LString and lyxerr; updated lyxrc (JMarc)
+- Changed most occurences of LyXLex::text() to LyXLex::GetString() (JMarc)
+- fixed the handling of -g in configure (JMarc)
+- fixed the handling of <>|\ for T1 fonts (JMarc)
+- unbroke the minibuffer. (Lgb)
+- unbroke (almost) the toolbar, some work still needed. (Lgb)
+- unbroke keybindings, some work still needed. (Lgb)
+- general cleanup + small fix in the bindfiles. (Lgb)
+- made lyx backwards compatible with respect to bar (Lgb)
+
+since 0.11.12
+- Some cleanups in buffer.C (JMarc)
+- The minibuffer is updated when there is a buffer switch; the
+  filename now uses MakeDisplayPath (JMarc). 
+- "Up" is now "Upright" in the Character Layout dialog ; the font
+  encoding now correctly defaults to "default"  (JMarc)
+- Created the function LibFileSearch() to read library files, and used
+  it in several places (JMarc).
+- lyxrc.defaut is now automatically read before lyxrc (JMarc).
+- fixed a bug in AddPath() when one of the paths is empty (JMarc)
+- Allowed again CXXFLAGS to be overriden in configure (JMarc)
+- Fixed the appearance of the LyX banner (JMarc)
+- Fixed a bug in \lyxtitle{} that I introduced earlier in a so-called
+  "cleanup" (JMarc)
+- mini-patch in FileInfo.h (jug)
+- changed the Document Save Window added Cancel Button (jug)
+- Fixed code generation for "--" in typewriter mode to "-{}-". (Asger)
+- Obsolete "modern" font state removed. (Asger)
+- Micro improvements and bugfixes in lyxrc. (Asger)
+- Micro speed- and clean-up by defining LyXFont x = LyXFont... method. (Asger)
+- Big performance boost when typing at the end of a paragraph obtained
+  by ignoring obscure special case. The code is bugged, but I don't
+  understand it enough to fix it. Matthias, can you help? (Asger)
+- New InsetCommand class, a smarter InsetLatex.  (Alejandro)
+- Preliminary bibliography and BibTeX support using InsetCommand. (Alejandro)
+- got rid of three more global variables. (Lgb)
+- moved a few funcs out of file.C (Lgb)
+- replaced the bar in LyXFont with misc, should be easy to do things like
+  crossout or strikethrough now. (a bit buggy yet) (Lgb)
+- fixed lyx.fd so that lyx.C.patch is not needed anymore. (Lgb)
+- renamed LyXBufferView to LyXView. (Lgb)
+- moved the toolbar inside LyXView. (Lgb)
+- moved LyXFunc inside LyXView. (Lgb)
+- added lots of bugs related to the above changes... (Lgb)
+- disabled lyxserver needs some rewrite to function. (Lgb)
+- broke the customiable toolbar. If you have your own toolbar
+  comment it out for the time being. (Lgb)
+- broke all bindings, this should be worked on quite fast.
+  However I decided to release a broken bind anyway. The next
+  release should come pretty quick. (Lgb)
+- renamed LString::isNull and LString::notNull to isEmpty and notEmpty (Lgb)
+- broke execution of commands from the minibuffer. The minibuffer should
+  be moved into LyXView. (Lgb)
+- broke math_panel, it asumes global lyxfunc. Fix is needed. (Lgb)
+
+since 0.11.11
+- fixed a stupid bug with <>| (JMarc)
+- included Alejandro's small mathed patch. (Lgb)
+- made a new class FileInfo, use this to get info about files (Lgb)
+- make LyX use #foobar.lyx#, foobar.lyx~, foobar.lyx.emergency (Lgb)
+- some cleanup and rewrite in filedlg.[hC] (Lgb)
+- got rid of symgen.[hC] Finally!! (Lgb)
+- deleted lyxparameters.[hC] (Lgb)
+- added Id to all object files. (Lgb)
+- check to see if autosave file is newer upon loading a file. (Lgb)
+- some cleanup in lyx_cb.C and lyx.h (Lgb)
+- fixed a bug in LaTeX::run()/LaTeX::deleteAllFiles() (Lgb)
+- Use LString in vspace.[Ch]. Updated all callers. (Andre)
+
+since 0.11.10
+- Replaced the documentation file browser by several menu items. The
+  files are searched first in user_lyxdir/doc; in particular,
+  LaTeXConfig.lyx is found at the right place. (JMarc)
+- Added more languages to the languages liste to be up to date with
+  babel 3.6 (JMarc)
+- Corrected the output of <>|\ in typewriter font; replaced \(..\)
+  contructs with \ensuremath{..}}, since this is not fragile. Commented
+  out code that conflicts with latin2 encoding. (JMarc)
+- Removed the warning when the user_lyxdir/lyxrc file does not exist. (JMarc)
+- Completely rewrote the configure script in lib/; it creates a new
+  lyxrc.defaults file instead of generating the whole lyxrc. This is
+  however useless until LyX reads this file (JMarc).
+- Fixed GetBool bug. Sheesh, this is an old one. Wonder why nobody
+  noticed... (Asger)
+- Fixed bugs in NameToPath() and FileOpenSearch(). (Asger)
+- Implemented spellchecker lyxrc commands. (Asger)
+- Man page updated. (Asger)
+- Included the relevant parts of Petr Mejzlík's latin-2 patch. (Asger)
+- Updated lyxrc. (Asger)
+- Implemented reconfigure command that starts configure in user lyx
+  directory and reloads lyx.defaults. (Asger)
+- README updated to new scheme and rearranged such that the most important
+  stuff for a general user is at the top. (Asger)
+- \input command changed to search current directory, user lyx dir and then
+  system lyx directory. This has the nice side-effect that lyxrc.defaults
+  is read. (Asger)
+- \bind_file command changed to search in user lyx bind dir and then in 
+  system lyx bind dir. (Asger)
+- Removed \lyx_layout_lib lyxrc command. (Asger)
+- Changed the ~/.lyx creation process as Jean-Marc suggested. (Asger)
+- Changed ~/.lyx dir to be hardcoded, i.e. never ~/.lyx-devel/. (Asger)
+- Copyright & Warranty missing display fixed. (Asger)
+- Search paths changed to new  ~/.lyx/ scheme: $User/dir;$LyX/dir. (Asger)
+- A lot of real fixes that help the OS/2 port without hurting us. Most of 
+  these changes were present in slightly different form in a patch S. Miyata
+  prepared. I suggest that S. Miyata prepares a new OS/2 patch with inclusion
+  into the main LyX source distribution in mind. It will hopefully be a lot 
+  smaller now, and thus no problem for unix LyX. (Asger)
+- Removed pedantic question "Are you really sure you want to quit?" (Asger)
+- Finally fixed reading error (and removed the strip thing). (Asger)
+- Bumped LYX_FORMAT to 2.11. (Asger)
+- Fixed file browser in connection with Save As. (Asger)
+- A few bug fixes in menus.C and lyxfunc.C. (Asger)
+- A few changes and suggestions for LString use in lyx_sendfax_main.C. (Asger)
+- Toolbar and scrollbar buttons are borderwidth -2 to provide visual 
+  feedback. (Asger)
+- Copyright and Warranty options merged into one new form. (Asger)
+- Credits form text wrapped to meet Jean-Marc's system's demands. (Asger)
+- Document, spellchecker and paragraph forms size fixed. (Asger)
+- Updated the Ascii-Export and Fax-Support to use LString (Juergen)
+- Corrected some bugs in Ascii-Export introduced in 0.11.x (Juergen)
+- Remade the Fax-Support-Form to be equal as the other forms
+  in LyX (fixed also the FL_CANCEL, for closing form) (Juergen)
+- Bug concerning LinuxDoc: Now enumerate and itemize at document-end
+  ok. (Bernhard)
+- Wrong written 0-Bytes eliminated (Bernhard)
+- Bug that caused crash on start-up fixed. (Asger)
+- New commands added:
+       buffer-fax
+       buffer-make-nice-latex
+       buffer-make-linuxdoc
+       buffer-make-ascii
+  Keybindings added. (Asger)
+- Started to implement .lyx directory handling. This is incomplete and
+  results will be bad. (Asger)
+- Label bugs in keyboard form fixed. (Asger)
+- Filedialog keyboard handling and close handling rewritten. This
+  required quite a few changes and a dirty timer hack because of
+  missing xforms modal dialog features (it would have been a snap
+  with Qt). Result is that the file dialog is perfect :-) (Asger)
+- If you specify a pattern starting with a ".", the file dialog will
+  show hidden files (impossible to get such before). (Asger)
+- Improved display of long filenames in pop-up dialogs. (Asger)
+- Possible to load any filename. (Asger)
+- Fixed sources for "config.h" errors, and now the #undef __STRICT_ANSI
+  thing works. No warnings when compiling :-) (I didn't fix the
+  configure bug that comments out the #undef directive) (Asger)
+- Small fix in lyx_cb.C
+- Fixed phonebook bugs introduced in my last patch
+- Put default path for phonebook to $(HOME)/.lyx/phonebook [user_dir]
+- Fixed the above #undef directive and a few other things (JMarc)
+- Finished the implementation of .lyx directory handling. A few
+  problems remain; renamed system.lyxrc to lyxrc (JMarc) 
+
+since 0.11.9
+- Font size in all forms changed to FL_NORMAL from FL_MEDIUM to correct
+  problems. (Asger)
+- When you run "lyx filename.lyx" where filename.lyx does not exist,
+  LyX asks if you want to create a new document with this name. (Asger)
+- MenuNew and MenuOpen more intelligent. (Asger)
+- MenuSaveAs more intelligent and uses file browser. (Asger)
+- Fixed a bug which caused problems with the default background 
+  and selection colors. (Asger)
+- Implemented three new commands:
+        buffer-typeset-ps: Updates PostScript file.
+        buffer-new-template: New file from template.
+        buffer-reload: Revert to saved file
+  The buffer-new command has been changed to not ask for a template.
+  The item "Run LaTeX" in the file menu has been renamed to "Update dvi".
+  The buffer-typeset-ps has been added to the file menu as "Update PostScript".
+  The buffer-reload has been added to the file menu as "Revert to saved".
+- File menu entry Quit renamed to Exit again. This is what Motif, Windows,
+  OS/2 and KDE applications uses. Why shouldn't we? (Asger)
+- Keybindings updated. (Asger)
+- Bug when inserting an empty label name fixed. (Asger)
+- lyx_cb.C restructured and somewhat cleaned up. (Asger)
+- Main form layout slightly changed. Now, it's not as compact as before, and
+  the scollbar is closely attached to the work area and has a new improved
+  appearance. Also, a hack makes it possible to position the toolbar where
+  the coder wants (previously, it was hardcoded). (Asger)
+- Re-implemented the borderwidth -1 setting which got lost in the patch
+  plethora (this time it's a global border-width). (Asger)
+- A few not-so-good things about Robert's patch fixed: 
+       <lyx_cb.h> -> "lyx_cb.h"
+  and LyX would hang if the spellchecker was closed when a session was 
+  started. Now, the spellchecker ignores the close-request (temporary
+  remedy). (Asger)
+- began cleanup that shall lead to multiple frames and buffer visible
+  at the same time. (Lgb)
+- changed parameter list to lyxfunc Dispatch(char const*, long) so that
+  almost everything can be passed as argument (perhaps this should have 
+  been void* (Lgb)
+
+since 0.11.8(-2)
+- #undef'ine __STRICT_ANSI__ when gcc is used to work around -ansi
+  problems. (Jean-Marc) 
+- Fix the code that finds gcc's default include path. (Jean-Marc)
+- add a new flag --with-gcc-hack to configure to allow re-compilation
+  without optimization after an error. (Jean-Marc)
+- remove a few unused files. (Jean-Marc)
+- Updated README file. (Asger)
+- Comment about -sDEVICE=x11alpha in system.lyxrc.in added. (Asger)
+- Help text updated with the new -xpos and -ypos parameters. (Asger)
+- Fixed small bug that occured if you provided background_color, but not
+  selection_color. (Asger)
+- Made margins in the main window smaller so that the editing area is
+  bigger. Should improve usage on small screen. (Asger)
+- Fixed wrong \ps_renderer command. Now it's renamed to \ps_picviewer and
+  system.lyxrc.in has been updated accordingly. Thanks for Jean-Marc for
+  discovering this one. (Asger)
+- Math hard-space display bug fixed. (Asger)
+- Renamed latex.[Ch fd] to latexoptions.[Ch fd] to avoid namespace conflict
+  on case-insensitive platforms (OS-2). (Asger)
+- A few other small fixes. (Asger)
+- Moved CREDITS file to lib/ directory. Makefile.in updated. (Asger)
+- Updated man page. (Asger)
+- All forms redesigned to be 100dpi compatible and usable on 640x480 
+  displays. Many forms are now smaller. (Asger)
+- Cross-reference dialog improved. (Asger)
+- Valsliders in document form changed to counters. (Asger)
+- Graphics for math decorations improved. (Asger)
+- New spellchecking option: Input Encoding option for ispell. (Asger)
+- Use "visual: default" instead of the "depth:8" which caused problems.
+  I think this solution is better than "depth:best" which introduces
+  warnings on my display. I hope this works for everybody. XForms
+  does not provide good support in this area. (Asger)
+- Implemented new options: -xpos and -ypos that specify where the
+  main form should be positioned. You have to specify both x and y 
+  before the position is used. Negative positions are ignored. 
+  If no valid position is specified, the default is to center the main form.
+  Remember that all command line switches can also be given as X
+  resources. Now I happily have
+      lyx*width: 1016
+      lyx*height: 712
+      lyx*xpos: 0
+      lyx*ypos: 0
+  in my .Xdefaults. (Asger)
+- The file dialog does not display hidden files. (Asger)
+- Created two functions in lyx_cb.C: CancelCloseBoxCB() and 
+  IgnoreCloseBoxCB() that do nothing and return FL_CANCEL and
+  FL_IGNORE resp. Added lots of fl_set_form_atclose() calls (one
+  for each form) to protect LyX from being killed when a dialog's
+  close box is pressed. In most situations CancelCloseBoxCB is 
+  hooked in, which is like pressing the Cancel button. In some
+  situiations, however, IgnoreCloseBoxCB was used (fax and file
+  dialogs), because using the Cancel variation resulted in strange
+  behavior. The authors of fax and file dialogs should look into
+  it. (RvdK)
+- Couldn't help it. Once again changed the GUI depth from 2 to 1 
+  pixel. I promise I won't change it again, so if you don't like 
+  it, replace the -1 in -2 again in LyXGUI::setDefaults(). (RvdK)
+- replaced int FontEqual(...) with bool operator==(...) (and !=)(Lgb)
+- cleaned up a little namespace pollution (Lgb)
+
+since 0.11.7
+- Finally implemented MakeDisplayPath and RegexpMatch so that the
+  pattern in the filebrowser is respected. Also, links are
+  displayed correctly in the filebrowser now. 
+  Now it seems that the introduction of LString to all path and
+  filename stuff has been completed. (Asger)
+- Fixed a bug in the fileselector. (Asger)
+- Implemented \ps_renderer lyxrc command to allow setting of which 
+  program to use for rendering postscript pictures. (Asger)
+- Implemented \ps_viewer and \dvi_viewer lyxrc commands to allow
+  setting of which programs to use to view postscript and dvi files
+  respectively. The \dvi_viewer command make the old xdvi_options
+  command obsolete. system.lyxrc updated to reflect all of this.
+  Also updated menus to reflect this. 
+  *NOTICE* Change of short-cut keys in file menu. (Asger)
+- Fixed determination of LyX system dir as Jean-Marc suggested. (Asger)
+- Fix bugs in Makefile.in regarding make bindist. (Asger)
+- Fixed few bugs in man page. (Asger)
+- New way of determining the LyX system directory: (Asger)
+       // Directories are searched in this order:
+       // 1) LYX_DIR environment variable
+       // 2) path of binary/../
+       // 3) path of binary/../lib/name of binary/
+       // 4) hardcoded lyx_dir
+       // The direcory is checked for the present of the file
+       // "chkconfig.ltx", and if that is present, the directory
+       // is accepted as the system directory.
+       // If no chkconfig.ltx file is found, a warning is given,
+       // and the hardcoded lyx_dir is used.
+- New command line options: -help and --help (Asger)
+- Small bugfixes. (Asger)
+- moved the files around to reduce the clutter in the main directory;
+  removed some old files. (Jean-Marc)
+- moved the data files in the lib/ directory. Changed the directory
+  search rule 2) above to "path of binary/../lib" (Jean-Marc) 
+- implemented the new and improved configuration tool in
+  lib/. (Jean-Marc)
+- added a replacement for the strerror() function for SunOS 4.1.[123]
+  (Jean-Marc and Stephan) 
+- added -ansi has a default gcc compile flag (Jean-Marc)
+- minor bug fix in buffer.C (Jean-Marc)
+- output characters [, ] and * between curly braces to avoid problems
+  with optional arguments (with e.g. \item and \\) (Jean-Marc)
+- small cosmetic changes in lyx_sty.h (Jean-Marc)
+- Added new document parameter "Default Skip".  Used for parskip when
+  separation method is "skip"; and for individual detached paragraphs 
+  when separation method is "indent".  Added new user functions 
+  "break-paragraph-skip", "delete-backward-skip", "delete-forward-skip", 
+  for easy input of detached paragraphs. (Andre)
+
+since 0.11.6
+- Some of the stuff that Shreeniwas redone or reversed because of
+  problems with other compilers. (Asger)
+- Some work done to use Error-class. (Asger)
+- Spellchecked a bunch of files, and cleaned README as Alejandro
+  suggested. (Asger)
+- Shreeniwas Sapre const-char cleaned LyX and some other stuff.
+- Fixed a bunch of bugs, and now even the fileselector works. (Asger)
+- removed support for old lyx format. (Lgb)
+- fix in NameToPath (caused index error) (Lgb)
+- removed a couple of leaks. (Lgb)
+
+since 0.11.5
+- 80 files changed to use LString more. A number of bugs fixed, and
+  a number of bugs introduced.(and removed) (Asger)
+- added rotation of wysiwyg-figures. (Henner)
+- Tried to fix (again!) the interaction between " and german styles (Jean-Marc)
+- Cosmetic changes to paper.layout (Jean-Marc)
+- Added "glue" to LyXLengths. In the Layout Paragraph dialog, Vertical
+  Spaces, you may write now: "1cm +4mm -2mm", "1+0.1-0.2 in", or
+  "10+-2pt", for example. (Andre)
+- Fixed some bugs related to the introduction of "char const*".  (Alejandro)
+- Back to don't skip a char to leave mathed with arrow keys. (Alejandro)
+
+since 0.11.4
+- Converted to LString, documented and bugfixed inseterror, insetinfo, 
+  insetlatex and insetlatexdel, and some other small stuff. (Asger)
+- Changed way of opening insets from doubleclick to singleclick. Now
+  doubleclick is only used for selecting words, and everything is
+  logical IMO. (Asger)
+- added `-devel' suffix to the name of LyX binary and LYX_DIR for
+  development version. Bug fixes to configure (Jean-Marc)
+- several changes here and there to help compile with DEC's cxx, which
+  looks very picky. (Jean-Marc)
+- Enhanced layout paragraph dialog, disallow illegal input. (Andre Spiegel)
+- switch from "const char *" to "char const *" (Lgb)
+- more stringificaton and lyxlexifications (Lgb)
+- added a bug that won't go awat :-( (Lgb)
+
+since 0.11.3
+- Implemented new display of optional hyphens: a small red dot
+  and converted insetlatexdel.[Ch] to use LString. (Asger)
+- Fixed a number of LString bugs in insetlatexaccent.C. (Asger)
+- Fixed a typo in lastfiles.C. (Asger)
+- obviously very last kernel-bug fixed ;-) (Matthias) (0.10.8)
+- Enhanced Vertical Spaces in the Layout Paragraph dialog. (Andre Spiegel)
+- Added more units to LyXLength + other small changes (Lgb)
+- LyX can now be built for several architectures simultaneously, as
+  long as your Makefile understands `VPATH' (Jean-Marc)
+- small configure fixes (Jean-Marc)
+- LString fix and addons (Lgb)
+- fix to layout combox (LyX)
+- some more changes to InsetLaTeXAccent (Lgb)
+- implemented algorithm for multiple LaTeX runs (Lgb)
+- switched to autoconf 2.11. Things are somehow cleaner, but there
+  might be new bugs (Jean-Marc). 
+- 'make depend' now uses X11's makedepend by default (Jean-Marc)
+- commented out the 'abstract' layout in book.layout (Jean-Marc)
+- lyx now uses lyxlex to do the file reading (almost), however I have not
+  been able to track down all the bugs, so please help (Lgb)
+- also recursive decent through the paragraphs when printing (Lgb)
+- a new function in lyxlex nextToken (Lgb)
+- fix in Makefile.in to make (gnu)depend work. added -I../images (Lgb)
+
+since 0.11.2 
+- Implemented two new lyxrc commands: (Asger)
+    \num_lastfiles int -> defines the maximal number of lastfiles
+    \check_lastfiles bool -> should the lastfiles be checked for existance?
+- Small changes in comments in system.lyxrc. (Asger)
+- Changed default width of Ascii export from 80 to 75. (Asger)
+- Implemented display of current document's filename in window title. For
+  this, I introduced a new file: lyx_gui_misc.[Ch] where different,
+  simple GUI specific routines should go. (Asger) (not used yet)
+- A bunch of spelling errors in comments all over corrected. (Asger)
+- New info in README: how to submit a patch, other internet resources.
+  More finetuning. I'm getting tired of README :-) (Asger)
+- Bugfixes in lastfiles. It should be pretty robust now. (Asger)
+- Changed behaviour on how to open floats like footnotes and margin notes:
+  Now such are opened with a single left click instead of a double click.
+  That's easier and IMO more logical. (Asger)
+- File menu changed back to New, Open... as it should be. (Asger)
+- Added warnings to lyxlex, so that bad integers, floats and boolean are
+  reported to the user. True is still false to LyX, but now the user is
+  told. (Asger)
+- Small fixes to lyxfunc (not yet finished) (Alejandro) 
+- Added documentation for mathed (Alejandro) 
+- Fixed a small bug in LString that caused a segfault
+  at starting (Alejandro) 
+- Small enhancements to the doc support: unified the directory names using
+  srcdoc, modified makepatch to avoid srcdoc dir, changed a line in paths.h
+  that caused a 20MB image, etc.   (Alejandro)
+- re-applied a patch to configure that I managed to delete (Jean-Marc)
+- moved the configure stuff to config/; added a new option
+  --with-extra-prefix to configure. (Jean-Marc)
+- fixed the bugs introduced by the above patch :-P (Jean-Marc)
+- RunLaTeX() moved to Buffer (Lgb)
+- new operators for LString (Lgb)
+- Bugs fixed in LString (needs still work) (Lgb)
+- LyXTextParameters does no longer exist (Lgb)
+- All inset classes now have their own files (Lgb)
+- insetlatexaccent modified is now much more strict in what it accepts.
+  all kmap files updated to reflect this. Accentcode in lyxfunc also 
+  modified. (Lgb)
+- new accent: ogonek (terrible on screen, someone fix this please) (Lgb)
+- introduced LString in a lot of new functions (Lgb)
+- removed the 'W' modifier now we have `S`, `C` and `M` (Lgb)
+- other small changes in lyxfunc (Lgb)
+- split buffer and bufferlist into two files (four) (Lgb)
+- use fwrite to print out strings in a couple of places (Lgb)
+- more source documentation (Lgb)
+
+since 0.11.1
+- Updates to configure, chklatex.ltx and README files (Jean-Marc)
+- Added maketitle stuff to report.layout and book.layout (Jean-Marc)
+- added a temprary sting class "LString" (Lgb)
+- update to amsart.layout (David)
+- fix to menus.C + swaped first two items in File (Lgb)
+- changed LastFiles to use the LString class + more checks (Lgb)
+- lots of small fixes and shuffling of code... (Lgb)
+- Created the class LyXFunc from stuff of the file "keybind.C"
+  and cleaned the code at the same time. Encapsulated the functionality of
+  the dispatcher, reorganized the code (the keyboard specific stuff has been
+  separated from the main dispatcher). Also separated the class declaration
+  from the kb_action tags.  (Alejandro)
+- A new file about coding rules. Created a subdirectory in the development
+  subdir for related documents.   (Alejandro)
+- began using doc++ to document the sources. (Lgb)
+- source (*.[HCh]) moved to src (Jean Marc, Lgb)
+- more work on lastfiles.[hC] (Lgb)
+- file dialog stuff (Andre)
+- if you are planning  to do something tell me about it. (Lgb)
+
+since 0.11.0
+- applied the ->ascii and fax patch
+- begining of more OO framwork to divide GUI from LyX kernel. (Lgb)
+- some work on lastfiles.[hC] to make it GUI unaware. (Lgb)
+- try to get rid of init() (in lyx_cb.C) (Lgb)
+- added fix from JC 
+
+since 0.10.7
+- made lastfiles use lyxlex. (Lgb)
+- began cleanup, added main.C, lyx_main.h, lyx_gui.[Ch] (Lgb)
+
+since 0.10.6
+- Created (Alejandro) and enhanced (Jean Marc) foilsTeX class.
+- Updated the README file once again to make it more user friendly. (Asger)
+- Added four new commands: paragraph-up[-select], paragraph-down[-select]
+  that are bound to ctrl+up/down in both emacs.bind and pc-modern.bind. (Asger)
+- Changed backspace & delete to use real "Cut" if we have a selection. (Asger)
+- One real memory leak fixed in paths.C plus a bunch of delete[]s. (Asger)
+- Updated README with info on the new organization and added a paragraph
+  about the chkconfig.ltx stuff. (Asger)
+- Changed spellchecker once again: Only real words are passed to ispell. 
+  Words are a-z A-Z and all codes above 192. Added "ignore word" button which
+  ignores the current word once. A few, hidden memory leaks fixed. (Asger)
+- Fixed filebrowser so Rescan works without changing focus. (Asger)
+- Updated sample.lyxrc to keep in synch with system.lyxrc. (Asger)
+- Fixed non-closing macro mode bug when closing mathinsets  (Alejandro)
+- Left/right keys moves 1 space the cursor after close math mode (Alejandro)
+- better detection and handling of SCO in configure (Jean-Marc)
+- better error handling in configure (Jean-Marc)
+- new fix to autoconf to handle fussy C++ compilers (Jean-Marc)
+- small color change to toolbar icons. (Lgb)
+- "Reference" changed to "References" in layout files. (Lgb)
+- added a Code_Rules file in development. (Lgb)
+- added a few more XFlush() (Lgb)
+- changed "References" to "Bibliography" in report.layout and book.layout
+  according to Lamport. (Lgb)
+- small cursor fixes (Matthias)
+- updated chkconfig.ltx to be easier to understand and added support
+  for the foils layout (Jean-Marc) 
+- added support in chkconfig.ltx for the standard document classes,
+  including slides (Jean-Marc) 
+- the execution of chkconfig.ltx is now done at configure time instead of
+  install time (Jean-Marc)
+- fixed a bug with columns settings when the file is saved (Jean-Marc)
+- changed some of the bahaviour in floats: empty paragraphs now is deleted,
+  this also implies that you explicit much add a caption (if you don't
+  edit it at once). (Lgb)
+- removed some gcc specific #ifdef's (Lgb)
+- initialization bug fixed in spellchecker.C (Lgb & Asger, with help :-) )
+- changes to make LaTeX's thebibliography work (Lgb)
+- Added support for different input encodings at ispell interface. (?)
+- a cursor positioning bug in tables fixed (Matthias)
+- table refinements (Matthias)
+
+since 0.10.5
+- fixed the selection stuff for the new selection-way (fast_selection false)
+  for search-replace and the spellchecker (Matthias)
+- highly editable insets (for example mathinsets) can be opened with 
+  char-forward and char-backward now (Matthias) 
+- Fixed the clear-bug with auto-delete-selection. Now it should be
+  easier to fill out templates with address layouts (Matthias) 
+- Added a README.new_templates. Fixes to some templates. (Matthias)
+- small other fixes (Matthias)
+
+since 0.10.4
+- Fixed infinite-loop bug in paths.C   (David & Alejandro)
+- Fixed small bug in mathed_init_fonts   (Alejandro)
+- Added a break-paragraph when inserting display inset
+  inside a text paragraph (provisional solution)    (Alejandro)
+- Allow to insert things like "\alpha\alpha" in mathed's macro mode (Alejandro)
+- Small clean up of Buffer.C   (Alejandro)
+
+since 0.10.3
+- Support for colored selection in math mode  (Alejandro)
+- Now it's possible to unlock an inset with cursor keys  (Alejandro)
+- improvements to the configure script for SCO (Jean-Marc)
+- tiny updates to configure.in and chkconfig.ltx (Jean-Marc)
+- more improvements to the --with-broken-const option and to 
+  the binary distribution target of Makefile.in (Jean-Marc)
+- fix to compile on other compilers than gcc (Lgb)
+- correct the --with-two-colors bug (?)
+- fixed some of the bw icons (Lgb)
+- increased buffersize in NextToken in symgen.C and figinset.C (Lgb)
+- added a check for NULL in MakeRelPath, this check is no good... (Lgb)
+- test compiled on sgi 5.3, solaris 2.5, and SunOs 4.1.3  (Lgb)
+- Smarten up the spellchecker. Now it really works with 8-bit languages
+  and the "escape chars" from spelloptions are respected. (Asger)
+- Bugfixes in lyxfont.C (Asger)
+- support for background and selection colors. Rubbanding still
+  supported by setting \fast_selection in either lyxrc or commandline
+  argument (Matthias)
+- fixed a very old bug that sometimes didn't let figures appear :-)  
+  The selection is no more cleared when updateting insets, too (Matthias)
+- fixed a bug with footnotelabels that have been printed with fixed-font since
+  0.10.1 thanks to the FootColor-patch, NOT done by me... (Matthias)
+- made the text-in-box insets a bit larger and drawed a rectangle around
+  to look better with background colors.  Also fixed the LabelInset that 
+  drawed itself over its size! (Matthias)
+- changed commandline-option InsetColor to NoteColor since this
+  only changed the color of the Note-Inset. (Matthias)
+- small fixes in LyXText::SetHeightOfRow(...)
+  for nicer screenprinting (Matthias)
+- few improvements to locked inset cursor handling (Matthias)
+- ran lyx through purify: no leaks (Lgb)
+- stupid, but good change to LyXFont (Lgb)
+- fix to Combox.C (?)
+
+since 0.10.2 
+- Fixed a display related bug. (Alejandro) 
+- All binary operators and relations are displayed correctly (Alejandro)
+- New command to let users modify a math font size (Alejandro)
+- Implemented multiple labels for eqnarrays (Alejandro)
+- Implemented a command to supress the equation number for a 
+  single line. (Alejandro)
+- Limited local selection for math insets (Alejandro)
+- improvements to the configure and chkconfig.ltx scripts (Jean-Marc)
+- fixed label-printing for David's smallcaps-labels (Matthias)
+- internally middle mouse paste (only highlighted text, only
+  inside one buffer. Will be improved in the near future so that
+  LyX really helds the X-Primary-Selection...hopefully) (Matthias)
+- new function "break-paragraph-keep-layout" bind to "M-Return" in
+  the bindfiles that also keeps the current depth (Matthias)
+- Spellchecker options code rewritten. (Asger)
+- Minor bugfixes in spellchecker. (Asger)
+- chkconfig.ltx language clean up. (Asger)
+- Missing shortcuts added to menus. (Asger)
+- File-menu context-dependent on textclass. (Asger)
+- Yet another clean up of the README file. (Asger)
+
+since 0.10.1
+- open floats are now in a red box with a small label at the top-left 
+   corner  (Matthias)
+- opening of floats with dbl-click, closing with click on the label (Matthias)
+- popup on right-mouse when inside a float, therefore changed table-popup
+   to appear only when the hit was on the table (Matthias)
+- figure- and tablefloats are now open after loading (Matthias)
+- put "insert primary selection (lines)" on the middle-mouse (Matthias)
+- small bugfix concerning nested environments and layouts with 
+    top_label or centered_top_label (Matthias)
+- very small fix to the layout-desciption of abstract layout (Matthias)
+- documents no longer marked as changed after processing of  figinsets.
+   Therefore UpdateInset got a "mark_dirty"-boolean parameter (Matthias)
+- no more undo stored when entering highly-editable-insets (mathinsets), 
+   but when these are changed  (as LYX_UNDO_INSERT). This is called by
+   mathinsets via LockedInsetStoreUndo(). Several other minor fixes to 
+   undo-handling with insets (little steps forward completly transparent
+   mathed-integration)  (Matthias)
+- new inset feature "const char* EditMessage()" that appears in the minibuffer
+   when editing. So no missleading "Opened inset" anymore... (Matthias)
+- Added experimental chkconfig.tex which check for the availability of
+  some packages. It should be expanded if there is interest. (Jean-Marc)
+- Added new layout to support the paper.cls documentclass. (Jean-Marc)
+- Added reverse video and monochrome support to lyx, through the use of
+  switches: -Reverse -Mono -MathColor -MathFrameColor -FootColor -FillColor
+  -OnOffLineColor -LatexColor -InsetColor -LightedColor.
+  The switches default to the present configuration.
+- enhancements to configure script with latex autodetection
+- new functions: file-insert, file-new, file-open (Uwe)
+- support for fancyheadings (Uwe)
+- Changed default placement of dialogs to be around mouse to improve
+  keyboard usage. (Asger)
+- Changed appearance of labels from "\label{name}" to "name" in a
+  grey box. (Asger)
+- Fixed small errors in a few bubble-help texts. (Asger)
+  
+since 0.10.0
+- implemented a bubble-help for the icons (Matthias)
+- updated lyx.C to fit with the lyx.fd file (Headings sizes now Large)
+  (Matthias)
+- filebrowser gets a suggested field now, i.e. "newfile" when
+  creating a new file, otherwise it is cleared (Matthias)
+- borderwidth set to -2 for visual feedback when clicking on icons (Matthias)
+- small bugfix in UpdateInset (Matthias)
+- marked "Formula" and "Numbered Formula" layouts a obsolete.
+   Search for "Obsolete Layouts" in lyx_cb.C (Matthias)
+- lastfiles::newfile now called when writing or loading a file, not anymore
+   when just calling newfile  (Matthias)
+
+since pre0.10.3
+- \cline support for tables => vertical multicolumns (Matthias)
+- reimplemented the keyboard-control for the combobox (Matthias)
+- mathinsets now work in latex commands. This was done by adding
+   "fragile" as a parameter to the insets' Latex feature. (Matthias)
+- the reference-box now shows mathinset-labels, too. Will still work
+   when mathinsets allow several lables (Matthias)
+- cut/copy-selection fixes (also table copy bug) (Matthias)
+- floats at beginning of description fixed (Matthias)
+- fixed two serious bugs in text-class (ptr-par instead of ptr->par) (Matthias)
+- autosave interval default changed from 120 to 300 because of the undo
+  feature. (Asger)
+- Added ctrl+ins for copy, shift+del for cut, and shift+ins for paste
+  to the pc-modern bind file. (Asger)
+- Added info on how to submit a patch to README. (Asger)
+- added options \kbmap, \kbmap_primary, and \kbmap_secondary to lyxrc. (Lgb)
+- added DEBUG_KBMAP (Lgb)
+- border with set to (-)1 some new icons included and old ones modified.
+  This still needs some tuneup.
+- fixed a long time bug in QuitLyX() (Lgb)
+- some (very) small changes to the main window. (Lgb)
+since pre0.10.2
+- fixes to make LyX compile on SGI CC (Xiaokun)
+- rework of combox (true pop-up and grabbing) (Alejandro)
+- combox used in Layouts->Document. (Alejandro)
+- allow default.map (should we provide one?) (Lgb/Jacques)
+- fixed bug in intl.C. This one has been there ever since I changed
+  intl.C to use the structures in tex-defs.h insetad of its own. Several
+  people have tried to fix this, but they have only fixed the sympthoms, not
+  the real problem. Hopefully it is correct now. (Lgb)
+
+since pre0.10.1
+- rework of DeleteLineForward, DeleteWord[Forward, Backward] (Matthias)
+- fixes to undo and delete-empty-paragraph-mechanism (Matthias)
+- small change to emacs.bind to fit more with X-Emacs [home, end] (Matthias)
+  (these are only included in comments, GNU Emacs does not
+    have these bindings [Lgb])
+- few small fixes (Matthias)
+- several small fixes (posted to lyx@via)
+- combox now used in Options->Keyboard. Should not introduce new bugs, but
+  something is still wrong in intl.C (Lgb)
+- added activate(), deactivate() to Combox (Lgb)
+
+since 0.9.28
+- Visual label and numbering for equations  (Alejandro)
+- Proper handle of locked insets in buffer  (Alejandro)
+- Several Mathed misfeatures fixed  (Alejandro)
+- Math forms cleaned up. (Asger Alstrup)
+- Bug in system.lyxrc fixed: Fontencoding back to T1. (Asger Alstrup)
+- Added new --with-broken-const option to configure (Jean-Marc)
+- Checked in all file that config.h is the first to be #included (Jean-Marc)
+- Update to INSTALL and README.bin (Jean-Marc)
+- correct undo enabled for delete-word[line] functions (Matthias)
+- print-to-ps-file now prints in the directory of the document (Matthias)
+- little table bugfix (too wide margins in multicolumns) (Matthias)
+- copy & paste bugfix to avoid half tables (Matthias)
+- toolbar-fixes: pointer_grab with sb_right_cursor and 
+  disabling of other widgets when the layout-choice is down.
+  Now the layout-choice should behave like a real widget :-) (Matthias)
+since 0.9.27
+- reenabled "lyxquote"-macro in lyx_sty.h and file.C as "lxq". (Matthias)
+- Improved inset-locking. Now every buffer can have its own 
+   the_locking_inset (Matthias)
+- new layout-description command "latexclass", few delete[] fixes  (Matthias)
+- linux-doc-sgml-bug concerning footnotes fixed (Matthias
+- fixes to paragraph enumeration in footnotes (Matthias)
+- another fix to the DepthCB-stuff (Matthias)
+- deleteting tmpbuf when exiting re-enabled (Matthias)
+- fixed the INOUT-bug with menus (Matthias)
+- avoids display-insets in tables (Matthias)
+- correct placement of error boxes even with mathinsets in 
+   document (Matthias)
+- rework of figinsets path-handling. Now figinsets use an
+   absolute path internally, what is hidden for the user.
+   You will see the effect when moving a figinset into
+   another buffer. See figinset.C for further details (Matthias)
+- filebrowser to create new document (Matthias)
+- small other fixes (Matthias)
+- Change to configure to check that the xforms library is 0.81 (Jean-Marc)
+
+since 0.9.26
+- Several Mathed improvements: better limits display, visual decorations
+  and accents, spaces, oint, single greek, dots, etc.  (Alejandro)
+- bugfixes and little enhancement for insert-reference (Matthias)
+- new functions layout-character, layout-document, layout-paragraph,
+   layout-quotes, font-roman, little fixes (Matthias)
+- little changes to menus and bindfiles (Matthias)
+- dvips set as epsfig-driver in system.lyxrc (Matthias)
+- small fix to LyXText::OpenStuff and OpenMathInset(Matthias)
+- changes to lyx_sty.h to avoid floats on pages with
+   lyx-title-layout (Matthias)
+- few figinset fixes concerning memory (de-)allocation(Matthias)
+-  the "do not display this figure"-option of figinsets now works.(Matthias)
+- scrollbar set back to old look but with 3D arrows (Matthias)
+- no more segfault when chosing a kbmap. (Matthias)
+- once again: "Newline" in preamble input is possible (Matthias)
+
+since 0.9.25
+- makepatch changed to use YYMMDD date format instead of DDMMYY so the 
+  patchfiles sort better. (Asger Alstrup)
+- Clean up and restructuring of default system-lyxrc file. (Asger Alstrup)
+- Minor changes to minibuffer messages and man-page. (Asger Alstrup)
+- Minor simplification of parsing of booleans in lyx_rc.C so GetBool is
+  used. (Asger Alstrup)
+- wysiwyg delimiters and decorations!  (Alejandro)
+- Hopefully solved the tmpbuf \input and figinset problem by setting
+   input@path in the generated tex-file if necessary (Matthias)
+- enabled undo for editing insets (Matthias)
+- Rotating arrow and keyboard control for layout combobox (Matthias)
+- New function "drop-layouts-choice" (Matthias)
+- MiniBuffer::Activate(), MiniBuffer::Deactivate() (Matthias)
+- LFUN_DEPTH alias "depth-next" works again (Matthias)
+- little bugfix in text2.C CheckParagraph. Happend when the cursor
+   was inside a table and a figinset is processed. Many thanks
+   to the very good bugreports:-)  (Matthias)
+- small fix to ComboBox: correct gravity for the browser (Matthias)
+- changed various delete's to delete[] (Matthias)
+- small fix to UpdateInset (Matthias)
+- Small fixing to combox  (Alejandro)
+- Mathed bugs fixed related to delimiters, macro mode
+  and parser's panic (Alejandro) 
+- math-display is used in math mode to toggle the display status of
+  and existing formula (Alejandro)
+- A new action math-delim, needs 2 arguments separated by a ' '.  (Alejandro)
+
+since 0.9.24
+- Documentation for Mathed  (Alejandro)
+- Fixed several reported Mathed bugs  (Alejandro)
+- Moved minibuffer out from lyx_cb and added protection against
+  blank inputs  (Alejandro) 
+- lyx.fd created for lyx.C. Be careful with this one. (Asger Alstrup)
+- Filebrowser simplified. (Asger Alstrup)
+- Shortcuts and resizeability added to most dialogs. (Asger Alstrup)
+- bugfixes to tables (Matthias)
+- little optical changes to combobox (colors) (Matthias)
+- GUI warning when exiting because of unreachable layout descriptions
+  (Matthias)
+- small bugfix in bind-files (Matthias)
+- little change to menus (float instead of the missleading caption) (Matthias)
+- small changes to fileformat to allow reasonable diff/patch (Matthias)
+- bugifxes to texcode generation (Matthias)
+
+since 0.9.23
+- not much only small fixes (?)
+
+since 0.9.22
+- Some mathed bugs fixed (Alejandro)   
+- Preliminary support for math accents  (Alejandro)
+- A step to incorporate mathed as the new math mode (Alejandro) 
+- Support for label and numbering a formula (Alejandro) 
+- Preliminary support for maketitle (Alejandro) 
+- Bugfixes for wysiwyg tables, pageUp/pageDown-scrolling,
+  buffer resizing, file browser, find & replace and undo (Matthias)
+- cleanup for the layout descriptions (Matthias)
+- enhancments to the lyx environment handling: defaultfamily, defaultseries,
+  defaultshape and defaultsize. Also centered_top_label_environment
+  (Matthias)
+- the layout object in the mainform now uses a combox. Not as encapsulated
+  as I'd want it to be. (Lgb)
+- small changes to the combox class + added FL_COMBOX_INPUT (Lgb)
+- general cosmetic cleanup + small stuff (Lgb)
+- fixed configure's --with-extra-lib on Solaris 2.x (Jean-Marc)
+- fixed configure so that it does not use libstdc++ if not present (Jean-Marc)
+- updated devel/tools/autoconf.patch with a new fix (Jean-Marc)
+
+since 0.9.21
+- Configure changes. Option --with-sun-headers is automatic now (Jean-Marc)
+- Changed the function bzero() to macro BZERO() which uses either memset() 
+  or bzero() (Jean-Marc)
+- Added support for | in file.C and corrected prettyprinting of `LaTeX2e'
+  (Jean-Marc)
+- A few changes to help compile with Sun's CC -- does not work yet (Jean-Marc)
+- fix to spellchecker (Floyd)
+- some cleanup (Lgb)
+- a combobox is now included in the source but not used (Alejandro)
+
+since 0.9.20
+- Correct scrolling during inset lock. Therefore new method 
+  LyXScreen::FitManualCursor  (Matthias) 
+- No weird scrolling anymore when locking a highly editable inset (Matthias)
+- bugfixes in CheckParagraph that is used to update insets (Matthias)
+- state info for fontloading. New Store() and Reset() method for minibuffer
+  (Matthias)
+- MoveCursorUpdate now works again  (Matthias)
+- Display()-Insets are now printed on the screen as Display()-Insets. 
+  Also code to make sure Display()-Insets cannot occur on weird places
+  (Matthias)
+- small fix to cut and paste (Matthias)
+- small fix in inserting figures: no more latex when figinset (Matthias)
+- Automatic scrolling to keep the cursor visible for mathisnets (Matthias)
+- Fixed bug in Minibuffer that created unnecessary pseudoactions (Alejandro)
+- To prevent that \xdvi_extra_options cause segfault, now is used
+  the size of the table instead of the last enum.                (Alejandro) 
+- Added function bool lyxlex::GetBool() to parse "false" and 
+  "true"  (Alejandro)
+- Fixed several Mathed bugs.  (Alejandro)  
+- Windows menu item renamed to Documents. (Asger Alstrup)
+
+since 0.9.19
+- bugfix in symgen.h (Robert Withrow)
+- removed malloc and free in paths.C (Lgb)
+- corrected command names in *.bind (Lgb)
+- removed malloc and free from spellchecker.C. Added new and delete[]
+  instead. Please test the spelchecker to see if anything went wrong. (Lgb)
+- removed the info lines generated upon startup, use -dbg 1 to see them (Lgb)
+- Cleaned up dialogs, menus and minibuffer dialog to improve user interface.
+  Remove wierd forms "HiFi" and "Calc". All references to the word "buffer" 
+  changed to "document" in user interface. Another small stuff. (Asger Alstrup)
+- The traditionnal infinitesimal changes to configure (Jean-Marc).
+- Changed command names view and view-ps into buffer-view and buffer-view-ps,
+  and updated .bind files accordingly. (RvdK).
+- Changed command name greek-toggle into math-greek-toggle and moved the
+  command from the keyboard menu to to math menu (M-m g) in both .bind
+  files. (RvdK)
+- added a #error in lyx_main.C to gard against wrong version of xforms (Lgb)
+- removed all KP_x from *.bind files, these were broken, please
+  use xev to check what keysyms the keypad really returns (Lgb)
+
+since 0.9.18
+- remade the MiniBuffer class. it now encapsulates all the minibuffer
+  stuff. Even the input object is hidden in this class. (Lgb)
+- some changes to Toolbar, and added a new func toolbar-add-to (Lgb)
+- added a quit pixmap (Lgb)
+- two new keymaps (three) (nn sorry didn't record the names)
+- Removed the void idle string from lyx_func_table and changed
+  LookupLyxFunc accordingly. Now last element can be selected. (Alejandro :)
+- Added void Inset::SetDisplay(bool) and implemented in InsetFormula
+  (Alejandro)
+- Fixed several Mathed bugs. (Alejandro)
+- Changed command names to new set with object.event order. (RvdK)
+- Changed `right' and `left' in command names to `forward' and `backward' 
+  for consistency with other command names. (RvdK)
+- Added user command `cancel' again (got lost in 0.9.18). (RvdK)
+- Changed command name `meta-fake' to `meta-prefix'. (RvdK)
+- Once again removed most of the built-in bindings. Did *not* remove the 
+  movement, edit, accent and default keypad keys. (Rvdk)
+- Replace bind section in system.lyxrc with stuff that supports the
+  .bind files. (RvdK)
+- Renamed Search & Replace to Find & Replace in menu and dialog. (RvdK)
+- Renamed preview to view in command names and menus. (RvdK)
+- Changed and/or added accelerators to several menus. (RvdK).
+- added option to Document Layout form to allow \float_placement value
+  to be changed on a per document basis. (thornley)
+- added new command \float_placement to allow figure and table floats
+  to be placed according to the users wish, rather than using LaTeX's
+  default values. (thornley)
+- configure changes to improve portability (Jean-Marc)
+- usage of a free object instead of a canvas for the work_area:
+  Advantage is the better focus managment. The work_area gets
+  the input now, even when the cursor is on a menu.
+  When xforms someday will keep the focus of a form, LyX will, too. (Matthias)
+- new look of the main form (Matthias)
+- minibuffer is editable now (an input-widget) (Matthias)
+- enables undo for replace-string and insert-string (Matthias)
+- bugfix in texing tables (what Jean-Marc mentioned) (Matthias)
+- few changes in insetlocking and mathinsets (Matthias)
+- insets can now be edited with dbl-click AND middle mouse. (Matthias)
+- inset can be "highly" editable (like mathinsets). With these
+   a usual click is enough to edit them (Matthias)
+
+since 0.9.17
+- changed getenv("USER") into getenv("LOGNAME") (posix) (Lgb) (suggestion
+  at lyx@via) 
+- set the depth to 8 always. (Lgb) (suggestion at lyx@via)
+- screen is now correct (Lgb)
+- LyX should now read the lyxrc file correctly (I hope) (Lgb)
+- update to mathed (Alejandro)
+- cosmetic cleanup, and spell fix (Jean-Marc)
+- small changes to figinset (Matthias)
+- moved form_search into form1.fd (Matthias)
+- update to tables (multicolumn) and undo (Matthias)
+- Patched LookupLyxFunc(). Scan range now depends on sizeof
+  lyx_func_table. Last element could not be selected. (RvdK).
+- Added two new user commands: depth-dec and depth-inc. (RvdK). (I
+  changed the names. Lgb.)
+- Very small change to DepthCB() to support depth-dec command. (RvdK).
+- Added new user command: menu-open. (RvdK).
+- Added new function MenuOpenByName() in lyx_cb.C that opens a
+  visible menu of a given name. (RvdK). (NB! Almost nothing should
+  be added to lyx_main.C. Lgb)
+- Added new user command: spellcheck. (RvdK).
+- Disabled the Meta-xxx visible menu accelerators. (RvdK).
+- Changed some of the visible menu accelerators, some of the menu
+  item texts and removed fixed binding strings. (RvdK).
+- Added new \bind_file lyxrc command that loads a bind file from
+  system dir (unless an absolute path is given). (RvdK).
+- Introduced two new bind files, pc-modern.bind and emacs.bind that
+  hold default binding configuarations. (RvdK).
+- Changed Makefile.in. The .bind files are now installed to the
+  system dir. (RvdK).
+- Added user commands `cancel' and `meta-fake' for \bindable
+  cancel and meta fake functionality and added cancel and meta-fake 
+  features in keybind.C. (RvdK).
+- When building a key sequence, the minibuffer always reflects this state,
+  without time-out. (RvdK).
+- When a prefix key is entered, the available key options appear after one 
+  second in the minibuffer. (Rvdk)
+- Possible to execute commands from minibuffer. (Lgb) (not very clever done)
+  it is not even possible to see what you write :-(
+- change to InsetFig::Browsefile (thornley)
+- made a MiniBuffer class (methods: Set, Init, and expose) (Lgb)
+
+since 0.9.16
+- configure updates : removed support for installing lyx.sty, for xforms 0.75, 
+  updated INSTALL file, removed a few macros from lyx_sty.h and enclosed
+  it in \makeatletter ... \makeatother (Jean-Marc)
+- fiddling in lyx_sty.h (Lgb)
+- new bindable function: push-toolbar(int nth) and a hack in 
+  create_form_form_main so that other objs can know where
+  the toolbar is. (not finished) (Lgb)
+- Class Inset split into two classes: interaction methods
+  now are placed in UpdatableInset class, and the_locking_inset
+  is an object of this class.  (Alejandro)
+- All references to Displaymath layout removed from formula.C.
+  Now lyx should center a mathinset if its method
+  Display() returns true. Also, for a clean scrolling, the
+  method HotSpot returns the position of the inset, since
+  a mathinset moves current lyx cursor.  (Alejandro)
+- Now Mathed supports Arrays, eqnarrays and numbered equations.  (Alejandro)
+- Enhaced local TeX mode for mathed, and several bugs fixed  (Aljandro)
+- Rewriten mathed's cloning mechanism. No more segfaults when UNDO (Alejandro) 
+- Unlimited UNDO and REDO (Matthias)
+- the string "LyX" will be texed with the new lyxlogo as \LyX{}
+   Also TeX and LaTeX. (code is in file.C, "idea for labels")
+- AutoCorrection with special Autocorrect-buffer
+- Some cleanup and several bugfixes of the LyXText-class (Matthias)
+- layout conversion error fixed and several more bugfixes (Matthias)
+- improved tables (dashed unvisible lines, some fixes) (Matthias)
+- float-labels and lines appear red now (Matthias)
+- Added LYX_SYMBOL_FAMILY to the font module (Matthias)
+- TexRowStuff changed in a way that allows LaTeX to
+  run in background in the future (Matthias)
+
+since 0.9.15
+- Fixed several bugs related to lyxlex in lyxrc.C (Alejandro)
+- added a \input to lyxrc (Alejandro)
+- C-k now _is_ delete-line-forward (Alejandro) (That was now, wasn't it?)
+- kill-line-forward now works as expected (Lgb)
+- table and menu update (Matthias)
+- lyx.sty removed, is now included in lyx. (Lgb)
+- \def\LyX included in lyx_sty.h, IMO need changes. (Lgb from David)
+- fixes to compile lyx on SGI/NCC (Xiaokun)
+- small fix in MakeLaTeX... + added some info lines in .tex file (Lgb)
+
+since 0.9.14
+- Introduced several features to mathed, and bugs fixed. (Alejandro)
+- update to configure (Jean-Marc)
+- menu and table stuff (Matthias)
+
+since 0.9.13
+- Configure changes (Jean-Marc)
+- enhancements to lyxlex (Alejandro)
+- speed up and other (i.e. toolbar change) (Matthias)
+- fix depth item in toolbar + other small toolbar changes (Lgb)
+- more clean up (or obfusc. depends on view) (Lgb)
+- update of isolyx.lyx, not good yet, but better. (Lgb)
+- have I forgot anything? Please make a note in changes when sending patches.
+  (just add the note to the absolute top of the file)
+
+since 0.9.12
+- More configure changes (Jean-Marc)
+- some bugfixes (several)
+- freespacing (Robert)
+- using LyXLex for parsing of lyxrc (not broken is it?) (Lgb & Alejandro)
+- more cleanup and moving around (Lgb)
+- have I forgot anything? Please make a note in changes when sending patches.
+
+since 0.9.11
+- Math panel enhanced.  (Alejandro)
+- Created a simple lexical analizer class from existing code. (Alejandro)
+- preliminary support for read only buffers (Dirk)
+- use tmpdir for generated files (Dirk)
+- reorganization of code (Dirk and Lars Gullik)
+  (did I overdo this? lgb)
+- command line arguments and resources (a couple) (Lars Gullik)
+- removed a sympthom (latex file sometimes contained '\0')
+  this still needs to be fixed in a decent way. (Lars Gullik)
+- support for debug levels look in definitions.h (Lars Gullik)
+
+since 0.9.10
+- a nasty bug in argument passing removed (Dirk)
+- BufferList now actually works. 
+  buffer[current_buffer] replaced with bufferlist.current() (Lars Gullik)
+  (this is why 0.9.11 was released)
+- some minor fixes (Lars Gullik)
+- all (99%) unused variables have been commented out (or removed.) (Lgb)
+
+since 0.9.9
+- Several enhancements and bugs fixed to MathEd. (Alejandro)
+- New path/filename mingling code (Dirk)
+- Some cleanup and adding more bugs. (Lars Gullik)
+- buffers almost dynamic alocated (disabled, might be removed). (Lars Gullik)
+- most of the forms moved to external files (Dirk)
+
+since 0.9.8
+- bugs fixed (Matthias)
+- a new symbolgenerator (not quite finished, hopefully useful) (Lars Gullik)
+- three new keymaps. (Boloni Laszo)
+- Sharing text keybind handling to mathed, and bugs fixed. (Alejandro)
+- support for the new xforms lib (0.8x) the old one is still
+  usable (just remember '#define oldxf' in config.h) (Lars Gullik)
+- some improvements to make usable pseudoactions in toolbar. (Alejandro)
+
+since 0.9.7
+- TAGS in makefile + small change to makepatch (Lars)
+- toolbar configurable from .lyxrc (Lars)
+- pseudoaction handling and some improvements in toolbar. (Lars & Alejandro)
+- some changes to quit sequence and title form (Lars)
+- some new commands and keybindings (Robert)
+- configure improvements (Jean-Marc)
+- first steps for wysiwyg-tables (Matthias)
+- improvements in row-printing (top labels and chapter labels) (Matthias)
+- some bugfixes (code & layouts)
+- see APPLIED Patches. Authors of these patches, please drop me
+  a short line for the CHANGES list, thanks.
+
+since 0.9.6
+- configure improvements (Jean-Marc)
+- a lot of small things (Robert)
+- some things (Lars)
+- Bugfixes (Graham)
+
+since 0.9.5
+- Integration of MathEd (Alejandro)
+- configure patches (Jean-Marc)
+- few bugfixes
+
+since 0.9.4
+- user definable toolbar, deadkey handling improved,
+  various small improvements (Lars)
+- configure improved (Jean-Marc)
+- faster rebreaking when texing and opening/closing all floats (Matthias)
+- popups move to front now when reinvoked (Matthias)
+
+since 0.9.3
+- improved wysiwyg figures (Ivan)
+- bugfixes (Matthias)
+
+since 0.9.2
+- improved bind. Greek keyboard (Alejandro)
+- improved wysiwyg figures (Ivan)
+- bug fixes 
+- new inset features for figures and mathed (Matthias)
+
+since 0.9.1
+- many many bugfixes
+- better keymap handling
+- wysiwyg figures (preliminary support) (Ivan)
+
+since 0.8.3 (this is new development branch 0.9.1)
+ 0.9.1 is basically the same as 0.8.3 with
+ some alterations to the keyhandling code and
+ better internal support for dead-keys.
+
+since 0.8
+- improved mathtables (Alejandro)
+- improved configure script (Jean-Marc)
+- few bugfixes 
+
+since 0.7p4d11
+- several bugfixes (when will that end?))
+  and "goto note" function (Matthias)
+- kbmaps documentation (Ivan)
+
+since 0.7p4d10
+- nicer latex-code (Matthias)
+- kbmaps (Ivan Schreter)
+- menus don't segfault anymore (XForms bug) (Lars Gullik)
+- printer enhancements (D.A. Niggemann)
+- Few bugfixes, little linuxdoc enhancements (Matthias)
+
+since 0.7p4d9
+- new menus (Lars Gullik)
+- note inset, simple help system, label/reference support,
+  credits popup, few bug fixes (Matthias Ettrich)
+
+since 0.7p4d8
+- font underline support (Matthias) 
+- layout bug correction and config. handling enhancements (D.A. Niggemann)
+- real configure script (Thomas Pundt)
+
+since 0.7p4d7
+- fixed the layout display when specifying a document on command line 
+  (Matthias)
+- changed the search order for layouts seeking (Lars Gullik)
+- changed the Copyright notice timeout (Lars Gullik)
+- added layout class "letter" (Matthias)
+- implemented a current row. Before this change LyX had to go through the whole
+  document from the beginning each time it accesses a row on the screen. 
+  (Matthias)
+- bug corrections and more... (Matthias Ettrich and Lars Gullik)
+
+since 0.7p4d6
+- spellchecker (Hubert Schreier)
+- layout parser redesign (Alejandro Aguilar Sierra)
+- math symbol form enhancements (Alejandro Aguilar Sierra)
+- Imakefile rework and lyx form close callback (Pascal Andre)
+- bug corrections and more ... (Christian Buescher and Lars Gullik)
+
+since 0.7p4d5
+- math symbol support (Alejandro Aguilar Sierra)
+- keymaps 32bits patch (Christian Buescher)
+- LinuxDoc SGML support enhancement (Pascal Andre)
+- external style definition files (Pascal Andre)
+
+since 0.7p4d4
+- user-definable keys (Christian Buescher)
+- lyxserver (Christian Buescher)
+- LinuxDoc SGML support (Pascal Andre)
+- bugfix in select word (very first and very last)
+
+since 0.7p4d3
+- dead-key support for isolatin characters.
+  (Lars Gullik)
+- fontencoding command added (Lars Gullik)
+- epsfig-driver support (Lars Gullik)
+- multicol.lyx documentation added (Lars Gullik)
+- isolyx.lyx documentation added (Lars Gullik)
+- fontsizes and font_norm can be set now via GUI or 
+  lyxrc
+- pasting of the primary selection is now possible
+- internally improved cut and paste
+  (necessary to implement tables and
+  equations in the future)
+- less memory leaks
+
+since 0.7p4
+- added a table of contents:
+  support for tocdepth, tabel visible in extra window,
+  ability to jump to the corresponding position in 
+  the text by clicking into the table of contents
+- added support for spellchecker
+- support for psnfss and inputenc. Removed the
+  obsolete isolatin1 stuff.
+- delete can be mapped to backspace in the .lyxrc
+- temporary fix of the scrollbar's behavior. I also
+  added two scroll buttons until XForms comes with
+  a real scrollbar.
+- small bug in delete character fixed, concerning
+  the screen refresh
+- other little bugfixes
+
+since 0.7p3
+- improved word-wise movement
+- tex code in LaTeX Commands like lyxrightaddress was 
+  wrong since a senseless protec was added after
+  the tex code.
+
+since 0.7p2
+- close buffer caused a segfault with an empty 
+  buffer
+- M-v and C-v did not do what emacs does
+- xdvi extra options works now
+
+since 0.7
+- fixed a terrible bug concerning footnotes.
+  (saving and cut & paste)
+  
+since LyX 0.5 
+  (sorry I was too lazy too report the various 
+  changes)
+
+since 1.05p2
+- changed toolkit to XForms and improved a LOT of
+  things. 
+
+since 1.05
+- Motif2.0 fix: When the layouts combobox was
+  set to another layout (for example when moving
+  the cursor through the text) the layouts where
+  set again. That means that user defined changes
+  to the paragraphs like vertical spaces etc. where
+  reseted to the default values.
+  This bug didn't occur with Motif < 2.0
+
+since 1.04
+- new font handling (saver and more variable) since
+  a lot of segementationt faults (that nowbody told
+  me :-( ) occured on systems that had other fonts 
+  installed.
+- less bugs (specifying a file at the commandline,
+  user defined preambles, generated tex-code)
+- you may preview and print from within NoName now
+- tex runs now in the directory where the lyx-file
+  is. This is better, since the dvi-file may need
+  pictures.
+- editor asks when exiting with unsaved changes.
+- you may use editres with noname now
+
+since 1.03:
+- You can run LaTeX from within NoName now.
+- Generated TeX-code should be less buggy.
+- Editor is improved (cut&paste, search&replace)
+- Creating a new file is easier.
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..2b85308
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,379 @@
+While LyX has been released nominally under the GPL in the past, it 
+has in fact never been truly GPL.  Particularly, it has always been 
+linked to a closed source library.  While some have taken a view that 
+such actions violate the GPL, this is a legal impossibility.  The law 
+is quite clear that the release of the software by the original authors 
+and copyright holders changed the licenses. 
+Rather than leaving the issue to be debated, the following 
+clarifications are given.  This is *not* a change of license, but a 
+clarification of the license that LyX has always used.  All patches 
+submitted to LyX fall under this same license.
+
+1) LyX is quasi-GPL software.  The terms of the GPL apply save where 
+they conflict with this statement.
+2) There is no limitation on the license or nature of any software, 
+source, binary, library, or other, that may be linked to LyX, or to 
+which LyX may be linked.  Particularly, the second full paragraph of
+section 2, from 'These requirements apply to the modified work' 
+through 'who wrote it.' is rejected in its entirety. 
+
+3) There is no limitation on combining LyX source code with code 
+subject to any other license, provided that the LyX source remains 
+under this same license.  Particularly,  Section 3 of the GPL is 
+rejected in its entirety. To redistribute a modified version of LyX, 
+the entire source code of the modified LyX must be made available under
+the terms of this license or such other licenses as apply to portions 
+of the original or modified code.
+4) Any other clause or interpretation of the GPL limiting the 
+combination of other software of any type and LyX is rejected in its 
+entirety, provided that the LyX code and modifications to the LyX 
+source code remains under this same license, or such other licenses as
+apply to portions of the original or modified code.
+5)  Nothing in this statement purports to alter or interpret the 
+license of any other software.  Any combination of other software with 
+LyX must also meet the requirements of that software.
+
+------------------------------------------------------------------------
+                   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
+           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/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..daa2639
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,13 @@
+1999-09-27  Lara Gullik Bjønnes  <larsbj@lyx.org>
+       * All over: Tried to clean everything up so that only the files
+         that we really need are included in the cvs repository.
+       * Switched to use automake.
+       * Generaton of reLyX is not perfect, LYX_DIR does not get substituted.
+       * Install has not been checked.
+
+1999-09-22  Lars Gullik Bjønnes  <larsbj@lyx.org>
+
+       * po/pt.po: Three errors:
+              l.533 and l.538 format specification error
+              l. 402 duplicate entry, I just deleted it.
+
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..93803ca
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,380 @@
+Compiling and installing LyX
+============================
+
+Quick compilation guide
+-----------------------
+
+These four steps will compile, test and install LyX:
+
+       1) ./configure
+          configures LyX to your system.
+
+       2) make
+          compiles the program.
+
+       3) src/lyx
+          runs the program so you can check it out.
+
+       4) make install
+          will install it.
+
+
+Requirements
+------------
+
+You will need to have both an Xforms library and Xpm library to compile 
+LyX.  It is imperative that you have the correct versions of these 
+libraries, and their associated header files.
+
+As of LyX version 1.0.0, you will need to have Xforms library and header
+version 0.81, 0.86, or 0.88.  Version 0.88 is a stable release and the
+recommended version.  On some systems, such as linux ELF, there are shared 
+library versions of the Xforms library, which require an installation step 
+to configure the system.
+
+Xforms is available (free) only in binary format, source code is not
+available.  If it is not available for your machine, contact the Xforms
+developers to request a version for your system.  You can get it from
+
+    http://bragg.phys.uwm.edu/xforms
+    ftp://bragg.phys.uwm.edu/pub/xforms/
+    ftp://ftp.lyx.org/pub/xforms/
+    ftp://ftp.fu-berlin.de/unix/X11/gui/xforms
+    ftp://ftp.cs.ruu.nl/pub/XFORMS/
+
+In addition, you must have libXpm version 4.7 (or newer; 4.8 rumoured
+to work).
+
+libXpm can be found at:
+           http://www.funet.fi/pub/Linux/sunsite/X11/libs/!INDEX.html
+           (or similar locations at other sunsites like sunsite.unc.edu)
+
+If you compile LyX with gcc, you should not need to have libg++ installed 
+on most systems.  However, see the note in the section `Problems'.
+
+If you make modifications to files in src/ (for example by applying a 
+patch), you will need to have the GNU gettext package installed, due to 
+some dependencies in the makefiles. You can find the latest (alpha) 
+version from:
+
+    ftp://alpha.gnu.org/gnu/gettext-0.10.xx.tar.gz.
+
+LyX contains a hack to work around this, but you should not rely too
+much on it.
+
+
+Finally, the two following programs should be available at
+configuration time:
+
+  o Perl (at least 5.002) is needed for the reLyX script. reLyX will
+    not be installed if perl is not found.  If the environment
+    variable PERL is set to point to some program, this value will be
+    used, even if the program does no exist (this can be useful if
+    the machine on which LyX is built is not the one where it will
+    run). 
+
+  o LaTeX2e should be correctly setup for the user you are logged
+    as. Otherwise, LyX will not be able to run a number of tests. Note
+    that users can run these tests manually with Option->Configure.
+
+
+Creating the Makefile
+---------------------
+
+LyX can be configured using GNU autoconf utility which attempts to guess 
+the configuration needed to suit your system.  The standard way to use it 
+is described in the file INSTALL.autoconf.  In most cases you will be able 
+to create the Makefile by typing
+
+  ./configure
+
+For more complicated cases, LyX configure takes the following specific
+flags:
+
+  o --with-extra-lib=DIRECTORY that specifies the path where LyX will find
+    extra libraries (Xpm, xforms) it needs.  Defaults to NONE (i.e. search 
+    in standard places).  You can specify several directories, separated
+    by colons.
+
+  o --with-extra-inc=DIRECTORY that gives the place where LyX will find
+    xforms headers.  Defaults to NONE (i.e.  search in standard places).
+    You can specify several directories, separated by colons.
+
+  o --with-extra-prefix[=DIRECTORY] that is equivalent to
+       --with-extra-lib=DIRECTORY/lib --with-extra-inc=DIRECTORY/include
+   If DIRECTORY is not specified, the current prefix is used.
+
+  o --with-two-colors=[yes|no] that forces LyX to use two colors pixmaps
+    (bitmaps) instead of the full-colored standard ones.  Defaults to no.
+
+
+There are also flags to control the internationalization support in
+LyX:
+
+  o --disable-nls suppresses all internationalization support,
+    yielding a somewhat smaller code. 
+
+  o --with-included-gettext forces the use of the included GNU gettext
+    library, although you might have another one installed.
+
+  o --with-catgets allows to use the catget() functions which can
+    exist on your system.  This can cause problems, though. Use with
+    care.
+
+  o You can also set the environment variable LINGUAS to a list of
+    language in case ou do not want to install all the translation 
+    files. For example, if you are only interested in German and
+    Finnish, you can type (with sh or bash)
+        export LINGUAS='de fi'
+    before running configure.
+
+Moreover, the following generic configure flags may be useful:
+
+  o --prefix=DIRECTORY specifies the root directory to use for
+    installation. [defaults to where lyx has already been installed or
+    /usr/local]
+
+  o --program-suffix=STRING sets the name of the installed LyX binary and 
+      of the LyX library directory to lyxSTRING. This may be used to
+      compile lyx as lyx-1.0.0 and avoid clashes with earlier/later versions.
+
+  o --datadir=DIRECTORY gives the directory where all extra LyX 
+    files (lyxrc example, documentation, templates and layouts
+    definitions) will be installed. 
+    [defaults to ${prefix}/share/lyx${program_suffix}]
+
+  o --bindir=DIRECTORY gives the directory where the lyx binary
+    will be installed. [defaults to ${prefix}/bin]
+
+  o --mandir=DIRECTORY gives the directory where the man pages will go.
+    [defaults to ${prefix}/man]
+
+Note that the --with-extra-* commands are not really robust when it
+comes to use of relative paths.  If you really want to use a relative path
+here, you can prepend it with "`pwd`/". 
+
+If you do not like the default compile flags used (-g -O2 on gcc), you can 
+set CXXFLAGS variable to other values as follows:
+
+  o CXXFLAGS='-O2' (sh, bash)
+  o setenv CXXFLAGS '-O2' (csh, tcsh)
+
+Similarly, if you want to force the use of some specific compiler, you can 
+give a value to the CXX variable.
+
+If you encounter problems, please read the section 'Problems' at the end of 
+this file. 
+
+In particular, the following options could be useful in some
+desperate cases:
+
+  o --with-debug that specifies whether you want to have debug information
+    by default on standard error.  Default is no. 
+
+  o --with-warnings that make the compiler output more warnings during
+    the compilation of LyX.  Opposite is --without-warnings.  By default,
+    this flag is on for development versions only.
+
+  o --with-broken-headers that provides prototypes to replace functions
+    not correctly defined in SunOS4 and SCO header files.  Its only effect is
+    to suppress a few warnings.  It is autodetected by default.
+
+  o --without-latex-config that disables the automatic detection of your
+    latex.  This detection is automatically disabled if latex cannot be found. 
+    If you find that you have to use this flag, please report it as a bug.
+
+  o --with-broken-const attempts to fix a bug in gcc 2.7.[012] (see the
+    section 'Problems').
+
+  o ---with-gcc-hack which provide a wrapper around gcc that tries to
+    compile without optimization after a compilation failed (see the
+    section 'Problems').
+
+  o --without-liberty suppresses the detection of the -liberty library
+    (see the section 'Problems').
+
+
+Compiling and installing LyX
+----------------------------
+
+Once you've got the Makefile created, you just have to type:
+
+  make all
+  make install
+
+All should be OK ;)
+
+BTW: in the images subdirectory there is also a small icon "lyx.xpm",
+that can be used to display lyx-documents in filemanagers.
+
+If configure fails for some strange reason
+------------------------------------------
+
+Even when configure fails, it creates a Makefile.  You always can check
+the contents of this file, modify it and run 'make'.
+
+Compiling For Multiple Architectures
+------------------------------------
+
+You can compile LyX for more than one kind of computer at the same
+time, by placing the object files for each architecture in their own
+directory.  To do this, you must use a version of `make' that supports
+the `VPATH' variable, such as GNU `make'.  `cd' to the directory where
+you want the object files and executables to go and run the
+`configure' script.  `configure' automatically checks for the source
+code in the directory that `configure' is in and in `..'.
+
+If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile LyX for one architecture at a time in
+the source code directory.  After you have installed LyX for one
+architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Stripping LyX
+-------------
+
+A LyX binary for linux is about 1M when compiled without debug-information 
+and with dynamic libraries.  If yours is much bigger you probably compiled 
+it with debug-informations (-g).  If you don't want to debug LyX just enter
+
+          strip src/lyx
+
+before installing.  Note that this is done automatically for public
+versions.
+
+
+Problems
+--------
+
+This section provides several hints that have been submitted by LyX
+team member or users to help compiling on some particular
+architectures. If you find that some of this hints are wrong, please
+notify us.
+
+  o If you have problems indicating that configure cannot find a part of
+    the xforms or Xpm library, use the --with-extra-lib and --with-extra-inc 
+    options of configure to specify where these libraries reside.  
+
+  o Configure will seemingly fail to find xpm.h and forms.h on linux if
+    you did a 'make mrproper' in the kernel directory, because this
+    removes some symbolic links that are needed for compilation. A 'make
+    symlinks' in linux kernel sources fixes that.
+
+  o If you have GNU gettext installed on your system (e.g. on linux),
+    you will get tons of warnings like:
+
+    bullet_forms.C:101: warning: passing `char *' to argument 1 of
+    `__builtin_constant_p(int)' lacks a cast
+
+    These are in harmless warnings caused by a bug in libintl.h, but
+    will be solved if you use --with-included-gettext when configuring
+    LyX.
+
+  o On Digital Unix with cxx, you may have a compilation error in
+    lyx_main.C if you have GNU gettext installed. This is due to a bug
+    in gettext. To solve this, you can either (1) configure with
+    --with-included-gettext or (2) add -D__STDC__ to cxx flags.
+
+  o The configure script seems to hang while it is checking the LaTeX setup.
+    We think that this is not a real problem, but rather a symptom of the 
+    fact that the ec-fonts are being rendered.  This process can take quite 
+    some time, so the remedy is simply to have patience. (The fonts need to 
+    be rendered at some point to be usable anyways.)
+
+  o According to John Collins <collins@phys.psu.edu>, on SunOS 4.1.3 you may 
+    find two sets of X libraries, and they are of course incompatible :-)
+    One is the set provided as part of OpenWindows, and one is the standard
+    X distribution (e.g., X11R5).  If you encounter problems (or if, for
+    some obscure reasons configure cannot find your X libraries) you can
+    use the following options:
+
+     o --x-libraries=DIRECTORY that indicates where the X libraries reside.
+
+     o --x-includes=DIRECTORY that indicate where the X include files reside.
+
+    The standard X11R5 libraries should work when the OpenWindows ones
+    don't.
+
+  o Some systems lack functions that LyX needs.  To fix this, configure
+    tries to link against the -liberty library, if it is available. 
+    If you experience problems with missing symbols at link time, you 
+    could try to install libiberty.a, which comes with several GNU 
+    packages (in particular libg++).  In any case, please report your 
+    problems to lyx-devel@lists.lyx.org. 
+
+    The option --without-liberty disable the detection of -liberty.  It
+    is meant for debugging purpose only.
+
+  o There are several known bugs in gcc 2.7.xx that cause compiler
+    errors.  This is in particular the case in spellchecker.C under
+    HP-UX 9.05 (ask Bernhard Iselborn <biselbor@rhrk.uni-kl.de> for
+    more comments) and in lyxrc.C under Linux/Alpha or DEC OSF/1.  In
+    both cases, the solution is to recompile the offending file
+    without optimization and resume the compilation process with
+    'make'.  To make things simpler, you can use the option
+    --with-gcc-hack of configure that will do that for you
+    automatically.  
+
+  o According to David Sundqvist <David_Sundqvist@vd.volvo.se>, some
+    changes are needed to compile with aCC on HP-UX 10.20. These are the
+    relevant changes in the makefile (with comments tagged on):  
+
+    CXX = /opt/aCC/bin/aCC 
+    CXXFLAGS = -O +inst_none # The aCC compiler tries to run instantiations
+                             # which currently break.
+
+    LIBS = -lforms -lXpm  -lSM -lICE -lc -lm -lX11 -lCsup # must link with Csup
+    LDFLAGS = -L/opt/aCC/lib # perhaps not needed. 
+
+  o There is a bug in gcc 2.7.[012] in the handling of const which can
+    cause various unpredictable problems.  If you experience weird
+    crashes with a LyX compiled by gcc 2.7.[012], try to configure
+    with the --with-broken-const flag and recompile.  If this improves
+    things, please report it to the mailing list.  Note that this 
+    compiler bug is fixed in gcc 2.7.2.1 and in several Linux 
+    distributions of gcc 2.7.[012].
+
+    This bug is currently not autodetected, but any code to do so
+    would be welcome.  A patch for gcc 2.7.2 is as follows:
+
+*** clean-ss-951203/expr.c      Sun Nov 26 08:18:07 1995
+--- ss-951203/expr.c    Mon Dec  4 11:41:18 1995
+*************** expand_expr (exp, target, tmode, modifie
+*** 4582,4587 ****
+           through a pointer to const does not mean that the value there can
+           never change.  Languages where it can never change should
+           also set TREE_STATIC.  */
+!       RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) | TREE_STATIC (exp);
+        return temp;
+        }
+--- 4582,4588 ----
+           through a pointer to const does not mean that the value there can
+           never change.  Languages where it can never change should
+           also set TREE_STATIC.  */
+!       RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) & TREE_STATIC (exp);
+        return temp;
+        }
+
+
+  o On Digital Unix with gcc, you can get warnings like
+
+warning, LyXFamilyNames not found in original or external symbol tables, value defaults to 0
+warning, LyXSeriesNames not found in original or external symbol tables, value de
+
+    These concern symbols beginning with an uppercase letter and seems
+    to be harmless. Similarly, the compilation can end with the
+    following warning:
+
+/bin/ld:
+Warning: Linking some objects which contain exception information sections
+        and some which do not. This may cause fatal runtime exception handling
+        problems (last obj encountered without exceptions was ../intl/libintl.a).
+
+
+    You can safely ignore it. 
+
+  o Configure fails to work with cxx V5.0-3 on Digital Unix
+    V3.2c.  This is due to a bug in this particular version of cxx. 
+    Contact Achim Bohnet <ach@rosat.mpe-garching.mpg.de> for more
+    details concerning this problem.
+
diff --git a/INSTALL.OS2 b/INSTALL.OS2
new file mode 100644 (file)
index 0000000..65b1faf
--- /dev/null
@@ -0,0 +1,589 @@
+
+INSTALL.OS2 file for OS/2 version of LyX 1.0.1
+by Shigeru Miyata <miyata@kusm.kyoto-u.ac.jp>
+modified by Arnd Hanses <Arnd.H.Hanses@rz.ruhr-uni-bochum.de>
+##############################################################
+
+- This INSTALL.OS2 file is a more detailed step by step guide on
+  installing (or compiling) LyX and related useful (or even 
+  necessary) optional programs on OS/2.
+
+- For general information on LyX please refer to the generic
+  README and README.OS2. For generic compilation instructions 
+  refer to INSTALL. WHATSNEW also contains important information.
+
+Thanks to all contributors to this piece of documentation,
+namely Mika Kristian Laitio <lamikr@cc.jyu.fi>.
+I hope this will make live a bit easier for OS/2 LyXers.
+
+Happy LyXing!
+
+
+
+       CONTENTS:
+       ========
+
+A. Installation Details
+
+   I.  Requirements/Optional Software
+       1) XFree/2
+       2) xpm.dll library (depends on distribution)
+       3) 'GNU file utilities' and 'sed'
+       4) LaTeX and 'dvips' (Options)
+       5) 'Xdvi', 'gs', 'ghostview' or 'gv' (Options)
+       6) 'perl' (Option)
+       7) 'man' and 'gnugroff' (Options)
+
+   II. Installing a Binary Distribution
+
+
+B. Compiling/Installing the Source Distribution
+
+
+
+       A. Installation Details:
+       ------------------------
+
+* Introduction:
+  ------------
+  LyX and related programs have been ported from UNIX, following
+  the UNIX design philosophy to do complex tasks combining small 
+  external standard utilities. 
+  UNIX is designed as a multi user system, where a professional
+  system administrator maintains applications. On a single user 
+  workstation the user has to do this complicated job. Often
+  programs assume you are familiar with the details of the UNIX
+  standard. Even if documentation therefore seems complicated,
+  you should try to read all the documents, UNIX manual (man) 
+  pages and FAQ a program supplies.
+
+
+  I. Requirements/Optional Software:
+     ------------------------------
+
+1) XFree86 for OS/2
+   ----------------
+
+   Use only a current version. Check 
+
+       http://www-set.gmd.de/~veit/os2/xf86os2.html
+
+  An OS/2 specific FAQ answering most of the questions about 
+  using XFree86/2 is found always up to date at:
+
+       http://www-set.gmd.de/~veit/os2/xf86os2.html
+
+
+2) 'xpm.dll' library (if indicated in README.bin)
+   -----------------
+
+   Check hobbes for 'xpm', or:
+
+       http://set.gmd.de/~veit/os2/xf86plib.html
+
+3) 'sed' and 'GNU utilities' (Option)
+   -------------------------
+   - Required: 'sed.exe'
+
+   - Optional: 'groff.exe' for ASCII text export, 'GNU text 
+     utilities', 'man' to read man/man1/lyx.1. 
+
+   You can search for OS/2 ports of those standard UNIX utilities on:
+
+       Hobbes or ftp.leo.org 
+
+   in unix or gnu directories. Put the executables into a directory
+   in PATH, e. g.:
+
+       d:\bin 
+   (Hint: Often ports assume a UNIX-like 'sh.exe' in '\bin'!)
+
+    and put the dll's into a directory in LIBPATH.
+
+
+4) 'LaTeX' and 'dvips' (Option)
+   -------------------
+
+   You will need them for printable output. With emTeX make sure that
+   you have latex2e.cmd in \emtex\bin-directory. If it is missing (i.
+   e. if you installed emtex from emtex-bin-os2.zip) create it using 
+   the following commands from \emtex\doc\english:
+
+       cd \emtex\btexfmts
+       makefmt 386 latex2e US 8bit -b \emtex\bin\latex2e
+
+   Now you can print US-english text. If LyX cannot find the files
+   'latex.cmd' or 'latex2e.cmd' (available if your LaTeX is installed 
+   correctly) it will work with standard options. Then you can use it
+   as an editor to write files in native (*.lyx) and LaTeX (*.tex) 
+   format. You can later print LaTeX files on every system with a
+   proper LaTeX2e installation (or send them to your editor).
+
+ * A preconfigured version of emTeX may be found searching:
+
+       http://tsikora.tiac.net/os2/os2-body.html
+       
+   for 'emTeX'. Install first 'emTeX' and then unzip 'dvips583' into 
+   your emtex root directory.
+
+ * Additional TeX macros for special purposes (e. g. Babel) are
+   available on your local CTAN mirror. There you will find also the
+   documentation how to install it. Please read Help->LaTeXconfig for 
+   availability of the LaTeX packages after installing LyX. 
+
+   Babel is - unlike with almost all other recent TeX distributions -
+   not standard with emTeX. For non-US languages you can install Babel
+   and recreate the LaTeX format files with the correct languages 
+   after selected, reading the respective original documentation. All 
+   further problems should be discussed with the author (Eberhard 
+   Mattes) and on emTeX list. 
+
+ * In Germany I recommend:
+
+ftp://ftp.dante.de/tex-archive/help/Catalogue/catalogue.html
+
+   as the starting point for browsing CTAN. Dvips is also available
+   on:
+
+http://www.leo.org/pub/comp/os/os2/leo/emTeX/contrib/index.html.
+
+
+   
+
+5) 'Xdvi', 'gs', 'ghostview' or 'gv' with 'xaw3d' (Options)
+   ----------------------------------------------
+
+ * For fast preview you need XDVI.
+
+[Excerpt from Peter Ganten's README.OS2 (missing in the package):
+ ....
+ -- Xdvi now understands drive letters and semicolons as path 
+    separators
+ -- Xdvi is now compiled with the SEARCH-SUBDIRECTORIES flag
+ -- Xdvi will now call ghostscript to display postscript-pictures (see
+    note below)
+ -- MakeTeXPk.cmd will now look into your psfonts.map file and call
+    gsftopk to display postscript fonts
+ -- Xdvi will now use virtual fonts ... ]
+
+ * For perfect preview of the printed
+   output of LyX you need ghostview or gv (the latter needs xaw3d.dll 
+   being renamed to xaw.dll) and a special version of Ghostscript for 
+   X11. (The standard 'gsos2' lacks '-sDEVICE=x11' and will *not*
+   work!). 
+
+ * OS/2 ports (and necessary info) can be found using the links in:
+
+http://www-set.gmd.de/~veit/os2/xf86ported.html,
+
+   and Ghostscript in Michael Holzapfel's page:
+
+http://www.ime.rwth-aachen.de/~michael/os2/ghostscript/index.html.
+       
+ * Configuration of EmTeX and XDVI to work poperly is a bit tricky,
+   as they use different directory structures and syntax: 
+
+    - You can export documents in tex format and preview later with 
+      emTeX's tools.
+
+    - Else you must unzip 'xdvi.zip' and 'xaw3d.zip' in %x11root%. Then
+      correct the line 
+
+       mapfile='d:\emtex\data\dvips\psfonts.map'
+
+      in 'MakeTeXpk.cmd' so that it points to the psfonts.map file
+      which came with dvips*.zip'. You will find this 'MakeTeXpk.cmd'
+      in
+
+       %x11root%\xfree86\bin
+
+      SET XDVIFONTS to your upper TeX fonts directory 'foo':
+
+       SET XDVIFONTS=x:/foo/*/%ddpi/%f.%p
+
+      The asterisk means: search subdirectories and will be expanded,
+      e.g. to 
+
+x:/foo/pixel.lj/300dpi/fontname.pk
+
+      For preview of Postscript fonts (Type 1) you need the
+      corresponding virtual fonts und must use SET XDVIVFS like above:
+
+SET XDVIVFS=D:/foo/vf;D:/foo/vf/adobe
+
+     There is no possibility to search subdirectories here, so you have
+     to list all directories with virtual fonts.
+
+  * Gv needs to find gs.exe: You should rename gsos2.exe to gs.exe, 
+    and move the executables and the dll to %PATH%. [According to the
+    original documentation moving the dll to %LIBPATH% should work as 
+    well. But on my system it doesn't.] Also you should add to 
+    config.sys:
+
+SET GS_LIB=x:/path_to_your_gs2dll.dll;*.ps_helper_files;type_1fonts
+SET GS_FONTPATH=path_to_aditional_fonts_not_included_in_fontmap 
+
+    For details please refer to the (often complicated) docs of the
+    respective packages.
+
+
+Here an example:
+...
+SET GS_LIB=D:/HYOTY/GSTOOLS/gs5.50;E:/PSFONTS;
+SET GS_FONTPATH=D:/APPS/GSTOOLS/gs5.50/FONTS;E:/PSFONTS;
+
+rem This is where EmTeX tree begins
+SET EMTEXDIR=D:\EMTEX
+
+rem  This is where Xdvi/dvips look for fonts (bitmap, virtual, type1
+fonts, resp.)
+SET XDVIFONTS=D:/texfonts/*/%ddpi/%f.%p
+SET XDVIVFS=D:/texfonts/vf/%f.vf
+SET T1FONTS=D:\PSFONTS;D:\XFREE86\LIB\X11\FONTS\TYPE1;
+SET TEXCONFIG=D:/EMTEX/data/dvips
+
+rem  TeX/LaTeX has to find its font metrics (*.tfm)
+SET TEXTFM=D:\EMTEX\tfm!!
+
+rem  TeX/LaTeX has to find its macros, etc. (*.sty; *.cls; *.tcp; etc.)
+SET TEXINPUT=D:\EMTEX\TEXINPUT\LATEX2E!!;D:\EMTEX\TEXINPUT!!
+
+rem  This is where dvipm/Xdvi looks for input data to preview
+SET DVIDRVinput=D:\EMTEX\doc;D:\EMTEX\doc\latex;D:\EMTEX\doc\english;
+SET DVIDRVGRAPH=D:\EMTEX\DOC
+SET XDVIFIGS=D:/EMTEX/data/dvips;D:/HYOTY/GSTOOLS/gs5.50;E:/PSFONTS;
+SET indexstyle=D:\emtex\idxstyle
+
+rem Call mf386.exe to render missing bitmap fonts
+SET MFJOBOPT=/3
+
+SET indexstyle=D:\XFREE86\USR\emtex\idxstyle
+SET EMTEXED=emacsclient +%1 %2
+
+rem Where chktex stores its user configuration
+SET chktexrc=%home%
+.......
+
+Do not copy it! You need to adapt it to your directory structure.
+
+
+6) perl:
+   ----
+
+For LaTeX import (relyx.cmd) you need perl:
+Check your local CPAN server for a recent OS/2 port or try:
+
+       http://www.perl.org
+
+Note:
+----
+If perl cannot find its modules and libraries it has a hardcoded
+path chosen at compile time that does not match your configuration.
+You can recompile with your directory structure or exchange the path
+as follows (from man perlos2):
+
+       PERLLIB_PREFIX
+
+       Specific for EMX port. Should have the form
+
+         path1;path2
+
+       or
+
+         path1 path2
+
+       If the beginning of some prebuilt path matches path1, it
+       is substituted with path2.
+
+       Should be used if the perl library is moved from the
+       default location in preference to PERL(5)LIB, since this
+       would not leave wrong entries in @INC.  Say, if the
+       compiled version of perl looks for @INC in f:/perllib/lib,
+       and you want to install the library in h:/opt/gnu, do
+
+         set PERLLIB_PREFIX=f:/perllib/lib;h:/opt/gnu"
+On my system 'f:/perllib/lib' is hardcoded and has to be exchanged
+for 'd:/bin/perllib/lib'. Also like many other programs ported from
+UNIX (unfortunately this is also true for many XFree/2 programs) it 
+uses a UNIX-like sh; you should give its path. 
+I recommend sh.exe of pdksh.zip; other shells have problems.
+
+Here an example of my config.sys:
+
+rem Not default directory of perllib/lib (here:d:\bin) 
+set PERLLIB_PREFIX=f:/perllib/lib;d:/bin/perllib/lib
+rem Where sh.exe of pdksh.zip resides:
+set PERL_SH_DIR=D:\bin
+
+excerpt from perlos2:
+
+      After you installed the components you needed and updated
+       the Config.sys correspondingly, you need to hand-edit
+       Config.pm. This file resides somewhere deep in the
+       location you installed your perl library, find it out by
+
+         perl -MConfig -le "print $INC{'Config.pm'}"
+
+       You need to correct all the entries which look like file
+       paths (they currently start with f:/).
+
+       Warning
+
+       The automatic and manual perl installation leave
+       precompiled paths inside perl executables. While these
+       paths are overwriteable (see the section on
+       PERLLIB_PREFIX, the section on PERL_SH_DIR), one may get
+       better results by binary editing of paths inside the
+       executables/DLLs.
+
+7) 'man' and 'gnugroff':
+   --------------------
+
+For reading unformatted manual pages in UNIX 'roff' format like the 
+ones coming with LyX you need 'manxxx.zip' and 'gnugroff.zip', both 
+available from www.leo.org.
+
+Hint: 
+----
+gnugroff.zip (README.OS2 date: Feb 24th 1994) from Leo has a little 
+bug concerning doc macros:
+
+Please change file prefix and suffix in groff/tmac/mdoc directory to 
+the following:
+
+       doc-common
+       doc-ditroff
+       doc-nroff
+       doc-syms
+
+or adapt the content of
+
+       groff\tmac\doc 
+
+accordingly, so that it will find the distribution macros with 
+non-standard names.
+
+My proposed settings for man and groff are:
+
+rem path to font directory
+SET GROFF_FONT_PATH=D:/USR/local/lib/GROFF/FONT
+rem path to tmac directory
+SET GROFF_TMAC_PATH=D:/USR/local/lib/GROFF/TMAC
+SET REFER=D:/XFREE86/USR/local/lib/GROFF/DICT/PAPERS/IND
+rem system primary codepage
+SET GROFF_TYPESETTER=cp850
+rem where man finds it manual pages
+SET MANPATH=D:/XFREE86/MAN;D:/XFREE86/usr/emx/doc/MAN
+rem necessary for correct formatting of BSD man pages
+set NROFF=GROFF -Tascii -mandoc
+
+
+
+II. Installing a Binary Distribution:
+    --------------------------------
+
+0) Only for update: If you are upgrading from LyX v. 0.12.0,
+   old documentation files in %HOME%/.lyx/doc/ and 
+   %X11ROOT%/XFree86/lib/X11/lyx/doc should be removed before 
+   unpacking (since they are read only). You might wish to make 
+   a backup, if you want to keep old docs.
+
+1) Unpack the distribution in the directory %X11ROOT% 
+
+2) In config.sys SET LANG and LANGUAGE according to 
+   your preferences and restart. 
+     Beware: All programs supporting local
+   languages will be affected, e.g.:
+
+SET LANG=de_DE         rem german helpfiles will be used
+SET LANGUAGE=de_DE     rem german menus and messages
+
+Note1: For keyboard problems read the XFree documentation. Lyx 
+       helpfiles also contain several hints.
+
+Note2: German users should always use Layout; Document; Language:German
+        and Encoding:latin1 to avoid problems with special characters. 
+       This might apply to other languages, too.
+
+Note3: As distributed, LyX expects to find
+       its internationalization files in the directory
+ %X11ROOT%/XFree86/lib/X11/locale
+       its system configuration files in the directory
+ %X11ROOT%/XFree86/lib/X11/lyx
+       If you unpacked the distribution in directory c:\foo, add
+       the environment variables LYX_LOCALEDIR and LYX_DIR_10x
+       to config.sys to point to c:/foo/XFree86/lib/X11/locale and 
+       c:/foo/XFree86/lib/X11/lyx as follows:
+ SET LYX_LOCALEDIR=c:/foo/XFree86/lib/X11/locale 
+ SET LYX_DIR_10x=c:/foo/XFree86/lib/X11/lyx
+       Note that, if you do not have any interest in having LyX display
+       its messages in other languages than english, you can safely 
+       skip this step for LYX_LOCALEDIR.
+
+3) At the root of the drive where your %HOME% resides, create a
+   directory named tmp, if you haven't got one. LyX will need it, so 
+   remember not to delete it later.
+
+4) If updating make a backup of %HOME%\.lyx\lyxrc.defaults as it will 
+   be changed.
+   Read README and WHATSNEW about updating and run 
+   Options;Reconfigure as indicated.
+
+5) Configure LyX for your system by executing
+     lyx
+   and choose Options->Reconfigure in the menu bar.
+   Watch the messages there.
+
+6) If you don't have %HOME%\.lyx\lyxrc now then move 
+   %X11ROOT%\XFree86\lyxrc.example to %HOME%\.lyx\lyxrc. 
+   Verify if LYX is able to find the programs mentioned 
+   there and in %HOME%\.lyx\lyxrc.defaults. If not, 
+   change name and path as required. Read LyX doc in
+
+       Help->Customization 
+
+  about customizing LyX for your needs. Read 
+
+       Help->LatexConfiguration 
+
+   to verify that all installed LaTeX packages which LyX can use 
+   have been detected.
+   Remember to repeat the check after any 'Reconfigure'!
+
+7) Printer setup is difficult. The most simple solution is to print to a
+   postscript file and the use gvpm for printing. If you have installed
+   'printlp.exe' of 'gnugroff.zip' from 'ww.leo.org', you could try to 
+   directly print to the local OS/2 spooler:
+
+Excerpt from 'gnugroff.zip' README.OS2:
+
+- New printlp and printdvi programs: Printlp captures all stdin input
+  and spools it to "lpt1" (default) or the output device set in the
+  environment variable LP_DEVICE. Printdvi captures all stdin input
+  into a temporary file and calls the command "v" with the name as
+  argument (v is the viewer in emTeX) or the command in the
+  environment variable DVI_PRINT_COMMAND. If the command contains a
+  %s, this will be replaced by the temporary file name.
+
+I recommend to add to config.sys
+
+       SET DVI_PRINT_COMMAND=VP
+
+and to add to your lyxrc
+       \print_spool_command "printdvi"
+
+or printlp for postscript printer or if you already configured a 
+postscript filter according to the LyX documentation. A different solution
+to try is this one from Marcus von Cube (for xephem): Create an
+
+       /* xprint.cmd */
+       parse arg file
+       file = translate( file, "\", "/" )
+       '@print /d:lpt2 /b' file
+
+(you may want to change "print /d:lpt2 /b" to "printdvi") or create a
+
+       LPR-Installation:
+
+If your %ETC%\INETD.LST contains the following line:
+       printer tcp lpd
+and inetd is running, you should be able to use lpr:
+       lpr -s localhost -p lpt2 -b <filename>
+It accepts "/" as path seperator.
+
+This would mean adding 
+       \print_spool_command "lpr"
+       \print_spool_printerprefix "-s localhost -p lpt2 -b"
+
+
+=======================================================================
+
+       B. Compiling/Installing the source distribution with emx:
+          -----------------------------------------------------
+
+++++to be written++++++
+
+Some hints:
+
+Run configure.cmd from top level lyx-xxx directory of the source distribution.
+To create a smaller stripped version optimized for pentium on emx 0.9c type:
+       configure.cmd --pentium-optimize
+
+1,368,068 bytes (1.0.1 on emx 0.9c)
+
+To create a smaller english-only version type:
+       configure.cmd --disable-nls --pentium-optimize
+and then type
+cd src
+x11make
+
+I recommend to run 
+       lib\configure.cmd --without-latex-config. 
+The LaTeX configuration should better made when running LyX the first
+time and can always be repeated with Menu: Options->Reconfigure. So I 
+added --without-latex-config to the call at the end of top configure.cmd.
+
+Run the following if you have tee.exe:
+       configure.cmd 2>&1|tee errors.log
+or
+       configure.cmd --pentium-optimize 2>&1|tee errors.log
+
+Read the logfile for any problems:
+       cd.. & e errors.log
+
+I recommend the following compilation settings:
+
+set CC=gcc
+set CONFIG_SHELL=d:/bin/sh.exe
+set MAKE_SHELL=d:/bin/sh.exe
+set EMX_FIX_CMD="emxbind -a \$@ ..."
+SET C_INCLUDE_PATH=D:/XFREE86/INCLUDE/X11;d:/XFREE86/usr/emx/include
+set CPLUS_INCLUDE_PATH=D:/XFREE86/INCLUDE/X11;d:/XFREE86/usr/emx/include/cpp;d:/XFREE86/usr/emx/include
+set OBJC_INCLUDE_PATH=D:/XFREE86/INCLUDE/X11;d:/XFREE86/usr/emx/include
+SET LIBRARY_PATH=D:/XFREE86/LIB/X11;d:/XFREE86/usr/emx/lib
+set PROTODIR=d:/XFREE86/usr/emx/include/cpp/gen
+set GCCLOAD=5
+set GCCOPT=-pipe
+set emxopt=-c
+set MAKE=x11make.exe
+set shell=/bin/sh
+
+Now you can run
+
+x11make
+
+directly from toplevel source directory.
+
+
+Note by Shigeru Miyata <miyata@kusm.kyoto-u.ac.jp>:
+----------------------
+Run configure.cmd rather than configure!  Notice it is not the
+one in binary package, which is actually lib/configure.cmd, but
+the one in the top directory of the source distribution.
+It won't check the xpm version and other things BTW since I think
+I can assume rather uniform installations on OS/2 (actually the
+outdated error of the sh-script comes from an old header file,
+not from the library, though.  Remove the incompatible header or
+you will experience very weird, hard to track crashes).
+Makefiles are not perfect, however:
+  - You have to type make in src/ directory;
+  - If you do not specify --disable-nls, you have to make libintl
+    first;
+  - make install/bindist won't work, the makefile in po/ directory
+    not generated;
+  - In order to link xforms statically, "-lforms" in LYX_LIBS flag
+    must be modified manually to "-lforms_s -lulib -lsocket";
+  - And probably more ;-(
+Here is a statistic (exact size depends on libraries used,
+codepage, etc.):
+                          unstripped      stripped
+emx09c                     10,735,882       1,634,308
+emx09d                     15,938,707       2,899,972
+emx09d (-fno-exceptions)   13,246,507       1,519,620
+In LyX 1.2, g++-2.8 (emx09d) or later will be the definite
+requirement.  (You cannot link 1.1 with emx09c, since the
+executable size far exceeds 70M unstripped due to template codes,
+for example.)
+
+
+\1a
\ No newline at end of file
diff --git a/INSTALL.autoconf b/INSTALL.autoconf
new file mode 100644 (file)
index 0000000..50dbe43
--- /dev/null
@@ -0,0 +1,183 @@
+Basic Installation
+==================
+
+   These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+   The file `configure.in' is used to create `configure' by a program
+called `autoconf'.  You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  You can give `configure'
+initial values for variables by setting them in the environment.  Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory.  After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+   By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc.  You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on.  Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+     CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+   If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+     Use and save the results of the tests in FILE instead of
+     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
+     debugging `configure'.
+
+`--help'
+     Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--version'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..8d1f2c4
--- /dev/null
@@ -0,0 +1,11 @@
+AUTOMAKE_OPTIONS = foreign
+DISTCLEANFILES= *.orig *.rej *~ *.bak lyx.1 core
+MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure
+SUBDIRS = intl po src lib
+EXTRA_DIST = ANNOUNCE CHANGES INSTALL.OS2 INSTALL.autoconf README.OS2 \
+       UPGRADING WHATSNEW acconfig.h lyx.man \
+       config development forms images
+ETAGS_ARGS = --c++
+man_MANS = lyx.1
+lyx.1:
+       cp -p $(srcdir)/lyx.man lyx.1
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..3044d3d
--- /dev/null
+++ b/README
@@ -0,0 +1,217 @@
+This is a LyX 1.0.x (stable) release
+------------------------------------
+
+What is LyX?
+
+       LyX is an advanced open-source "document processor". Unlike
+       standard word processors, LyX encourages writing based on the
+       structure of your documents, not their appearance. It lets you
+       concentrate on writing, leaving details of visual layout to the
+       software.
+
+       You can read more about this concept in the documentation,
+       which you'll find under the Help menu.  If you plan to use LyX, 
+       you really should read about it to be able to make the best of 
+       it.
+
+What is LyX not?
+
+       LyX is not just another word processor that claims to be a
+       Desktop Publishing program.  It's a more modern way of
+       creating documents that look much nicer, but without wasting 
+       time with layout-fiddling.  For these reasons you might need 
+       little time to get used to the differences.
+       If you are looking for a free Desktop Publishing program for
+       Unix, you will be disappointed.
+
+What do I need to run LyX?
+
+       A Unix-like system or OS/2 with XFree
+       At least X11 Release 5
+       A decent LaTeX2e installation (e.g. teTeX or NTeX) not older
+          than 1995/12/01
+       Optionally ghostscript and ghostview (or compatible)
+       Perl5.002 or later to import LaTeX files into LyX
+
+What's new?
+
+       Read WHATSNEW.
+
+How do I install a binary distribution of LyX?
+
+       Unpack it and run it.  We recommend unpacking it in /usr/local,
+       but it should work anywhere.  In particular, you can try LyX
+       in a temporary directory before installing permanently by
+       typing "bin/lyx".
+
+       We recommend that you configure LyX system-wide by copying the
+        file share/lyx/lyxrc.example to share/lyx/lyxrc, and then
+       reading and modifying it.
+
+       You should read the notes regarding this particular build in
+       the file README.bin.
+
+How do I upgrade from an earlier LyX version?
+
+       Read the file UPGRADING for info on this subject.
+       If you are upgrading from version 0.12.0 or later, you don't 
+       need to do anything special.
+
+What do I need to compile LyX from the source distribution?
+
+       1. A good c++ compiler.  Development is being done mainly on
+          gcc/g++, but many others work.
+       2. The Xforms library version 0.81, 0.86 or 0.88.
+       3. LibXpm version 4.7 (or newer).
+
+       Read the file "INSTALL" for more information on compiling.
+
+Okay, I've installed LyX. What now?
+
+       Once you've installed it, and everything looks fine, go read
+       the "Introduction" item under the Help menu.  You should follow
+       the instructions there, which tell you to read (or at least skim)
+       the Tutorial. After that, you should also read "Help/LaTeX
+       configuration" which provides info on your LaTeX configuration
+       as LyX sees it.  You might be missing a package or two that you'd
+       like to have.
+
+       User-level configuration is possible with a file "~/.lyx/lyxrc".
+       You can use the system-wide lyxrc file (which should be somewhere
+       like /usr/local/share/lyx/lyxrc) as a template for your personal
+       lyxrc file.  Remember that a personal configuration file will be
+       used instead of, not in addition to, any system-wide file.
+
+Does LyX have support for non-English speakers/writers/readers?
+
+       Yes. LyX supports writing in many languages.
+
+       Menus and error messages have been translated to the following
+       languages (* means there are language-specific keyboard menu
+       bindings as well):
+
+       Catalan     (ca)
+       Czech       (cs)
+       Danish      (da)
+       German      (de)    *
+       Spanish     (es)
+       Finnish     (fi)
+       French      (fr)    *
+       Hungarian   (hu)    *
+       Italian     (it)
+       Dutch       (nl)
+       Norwegian   (no)
+       Polish      (pl)
+       Portuguese  (pt)    *
+       Russian     (ru)
+       Slovenian   (sl)
+       Swedish     (sv)    *
+       Turkish     (tr)
+       Walloon     (wa)
+
+       Keymaps can ease typing in one or more of the following languages:
+
+       Czech
+       French, Swiss French
+       German, Swiss German
+       Greek
+       Hungarian (Magyar)
+       Polish
+       Portugese
+       Romanian
+       Slovenian
+       Turkish
+
+Internet resources of relevance to LyX
+
+       The LyX homepage contains valuable information about LyX and the
+       various LyX mailing lists, as well as links to mirrors and other
+       LyX homepages around the world:
+       http://www.lyx.org/
+
+       Main LyX archive site:
+       ftp://ftp.lyx.org/pub/lyx/
+
+       The LyX Development page has information about the development
+       effort. LyX is now under CVS control, so you can get the very
+       latest sources from there at any time.
+       http://www.devel.lyx.org/
+       ftp://www.devel.lyx.org/pub/lyx/
+
+What is the numbering scheme for releases? Is it like the Linux kernel?
+
+       Yes, it's like the Linux kernel since LyX version 0.8:
+
+               0.10.x, 0.12.x, 1.0.x    ... are stable, public releases
+               0.11.x, 0.13.x, 1.1.x    ... are developer releases
+
+       Of course you may also use the developer releases, but only
+       at your own risk. This is definitely higher than your risk when 
+       using the public releases, even if this is your own risk, too.
+
+How do I submit a bug report?
+
+       If possible, read the "Known Bugs" document found under the
+       Help menu.  You'll find detailed info on submitting bug reports
+       there.
+
+       You should also check the BUGS file in this directory.
+
+       If you can't do that, send details to the LyX Developers mailing
+       list.  Don't forget to mention which version you are having
+       problems with!
+
+How do I prepare a binary distribution for the use of others?
+
+       1) Compile LyX with the right compiler switches for your
+       architecture. In particular you might want to ensure that libraries
+       like xforms and xpm are statically linked. To this end, you
+       can use a command like
+
+               make LYX_LIBS='/foo/libforms.a /bar/libXpm.a'
+
+       Moreover, make sure you use the --without-latex-config switch
+       of configure, since others might not be interested by your
+       configuration :-) 
+
+       2) Create a file README.bin describing your distribution and
+       referring to *you* if problems arise. As a model, you can use the 
+       file development/tools/README.bin.example which was originally
+       written for Linux by David L. Johnson. Do *not* use directly
+       the file in the distribution, since it refers to Linux and
+       points to David L. Johnson for help. However, it can be a good
+       starting point. Note that removing the file completely is
+       better than not editing it at all.
+
+       3) Type `make bindist'. This will create a file
+       lyx-1.xx.yy-bin.tar.gz. Rename it to reflect you architecture 
+       and the peculiarities of your build (e.g. static vs. dynamic).
+
+       4) Check that everything is correct by unpacking the distribution 
+       in some private place and running it. In particular, check the 
+       output of `ldd lyx' to know which libraries are really needed.
+
+       5) Upload your binary file to ftp.lyx.org:/pub/lyx/uploads.
+
+How can I participate in the development of LyX? 
+
+       Any help with the development of LyX is greatly appreciated--
+       after all LyX wouldn't be what it is today without the help
+       of volunteers. We need your help!
+
+       If you want to work on LyX, you should contact the developer's 
+       mailing list for discussion on how to do your stuff.  LyX is being 
+       cleaned up, and therefore it's important to follow some rules. 
+       Read about those rules in development/Code_rules/.
+
+       If you don't know C++, there are many other ways to contribute.
+       Write documentation. Help to internationalize LyX by translating
+       documentation or menus/error messages, or by writing a new keymap.
+       Write a new textclass.  Work on reLyX (Perl). Find bugs (but please
+       read the list of known bugs first). Contribute money. Or just offer
+       feature suggestions (but please read the online TODO list first).  
+
+Thank you for trying LyX, and we appreciate your feedback in the mailing
+lists.
+
+The LyX Team.
diff --git a/README.OS2 b/README.OS2
new file mode 100644 (file)
index 0000000..4491efd
--- /dev/null
@@ -0,0 +1,197 @@
+
+README file for OS/2 version of LyX 1.0.1
+by Shigeru Miyata <miyata@kusm.kyoto-u.ac.jp>
+modified by Arnd Hanses <Arnd.H.Hanses@rz.ruhr-uni-bochum.de>
+##############################################################
+
+- This README.OS2 addresses experienced users of XFree86 and 
+  LyX on OS/2 and covers in very short form the steps for 
+  updating (installing) LyX.
+
+- For general information on LyX please refer to the generic
+  README. For generic compiling instructions refer to INSTALL.
+
+- For a more detailed step by step guide on installing (or compiling) 
+  LyX and other related useful (or even necessary) optional programs 
+  on OS/2 please refer to INSTALL.OS2. If you are not already an
+  experienced user of LyX an OS/2 you are advised to read it.
+
+- For a description of the binary distribution and any necessary 
+  support libraries please refer to README.bin, which comes with the
+  binary distribution.
+
+
+LyX has been ported to OS/2 with XFree86 by Shigeru Miyata and
+has been installed and used successfully by many people. 
+Unfortunately there is yet no easy to install and complete distribu-
+tion of XFree86-related software for OS/2. Despite increasing popula-
+rity of X on OS/2, extensive printed documentation about XFree/2 and 
+related programs like LyX is still not available. So you will 
+have to study the available documentation (man pages, READMEs, faq,
+etc.) thoroughly to avoid unnecessary grief for you and for other 
+people, trying to help you on the net. Nevertheless, there are 
+existing tutorials and manuals covering X on UNIX family operating
+systems, which do contain some valuable information even for X on 
+OS/2. 
+    [A hint as a starting point for users speaking German: 
+       http://www.rrzn-uni-hannover.de/Umdrucke/WSC.5/WSC5_1.html].
+
+This release is considered to be stable for general use, but - like 
+any other piece of software - certainly is not bug free.
+So take the usual precautions like adopting a regular backup policy. 
+Standard disclaimers of non liability apply.
+
+As this is a voluntary project with a large number of contributions 
+by many people, hints and bug fixes to the program and/or the 
+documentation are always appreciated and thoroughly considered. If
+you have the necessary skills (or want to take the chance to acquire 
+them) for programming in LaTeX or C++ you can become a LyX developer.
+You can support further development by making a donation, if you feel 
+that LyX made your live a bit easier or you want to support open source
+software.
+Please refer to the links at www.lyx.org for details.
+
+==============================================================
+
+       A. Quick Update:
+          ------------
+
+0) Only for update: If you are upgrading from LyX v. 0.12.0,
+   any old documentation files in %HOME%/.lyx/doc/ and 
+   %X11ROOT%/XFree86/lib/X11/lyx/doc should be removed before 
+   unpacking (since they are read only). You might wish to make 
+   a backup, if you want to keep old docs.
+
+1) Unpack the archive at %X11ROOT%. 
+
+2) Run lyx and let the program copy configuration files to
+       %HOME%\.lyx\.
+
+3) If you don't have %HOME%\.lyx\lyxrc then move 
+   %X11ROOT%\XFree86\lyxrc.example to %HOME%\.lyx\lyxrc. 
+   If updating, make a backup of old version, if you want.
+   Read README and WHATSNEW about updating and run 
+   Options->Reconfigure as indicated.
+
+4) Verify if LYX is able to find the programs mentioned 
+   in %HOME%\.lyx\lyxrc and in %HOME%\.lyx\lyxrc.defaults; if not, 
+   change name and path as required.
+
+   Note: Remember to repeat the check after any 'Reconfigure'!
+
+5) In config.sys SET LANG and LANGUAGE according to 
+   your preferences. Beware: All programs supporting local
+   languages will be affected, e.g.:
+
+SET LANG=de_DE         rem german helpfiles will be used
+SET LANGUAGE=de_DE     rem german menus and messages
+
+6) Restart OS/2 and run LyX. Have fun!
+
+
+
+       B. Help/Problems:
+          -------------
+
+* Please refer to the manpage (type 'man lyx' on the command line or
+  use 'xman')
+
+* If you encounter apparently OS/2 specific bugs, (i.e. bugs not
+  already mentioned in the documentation or the buglist) you can report
+  them to the XFree86/OS2 mailing list as well as to the LyX developer 
+  mailing list. 
+
+* For any questions on using LyX please subscribe to the the LyX user 
+  mailing list.
+
+  - To subscribe to the XFree86 mailing list send mail to
+      majordomo@borneo.gmd.de
+    with "subscribe" as the subject.
+    To contribute to the mailing list, mail to
+      xfreeos2@borneo.gmd.de
+
+  - For subscription to lyx-user list (general help on LyX) go to
+       http://www.lyx.org
+    and search for subscription info.
+
+* Hints:
+  -----
+1. To prevent 'file not found' with EmTeX and some non-US versions 
+   of Warp, I recommend:
+
+       1) In filenames use only A-Z, a-z, 1-9. 
+       
+       2) Use a recent LaTeX package inputenc.sty. Select
+          Layout->Document->Encoding:latin1, so that LyX adds 
+          the LaTeX command '\usepackage[latin1]{inputenc}'.
+
+2. LaTeX import occasionally produces buggy *.lyx files. LyX tries 
+   to save data in case of problems (and does a good job here),
+   but I recommend:
+
+       To import LaTeX close down and restart LyX (or close all
+       documents, you are working on) and try the import, so that 
+       in case of any problems none of your existing documents will 
+       be affected.
+
+3. Inline preview of inline images sometimes does not show the
+   image: If you want to preview the image, just click on it and 
+   select fullscreen preview. 
+
+4. Some XFree/2 programs (as ported from UNIX) expect a sh.exe
+   in \bin directory: I recommend to install sh.exe of pdksh.zip 
+   in x:\bin (x: drive of %X11ROOT%). To work around problems you
+   can try the commands 
+       set EMXSHELL=x:\bin\sh.exe
+   before starting the programs. As far as I know, LyX runs without 
+   problems in this way.
+
+
+Some suggestions in case of problems:
+------------------------------------
+1) Please check, if your x:\xfree86\lib does appear correctly in
+   libpath.
+
+2) Please check against the file list, if you did install all files of
+   the distribution.
+
+3) Remove all installed files and 
+       %.home%/.lyx/ 
+   and perform a 
+       chkdsk /f 
+   and a consistency check of your lyx binary package (unzip -tv
+   foo.zip). 
+
+4) Reinstall the complete package and check out if everything appears,
+   no truncated files, no crc errors, etc.
+
+5) Run 
+       lyx -dbg 1026 >lyxerrors.log 2>&1
+   or, if you have tee.exe,
+       lyx -dbg 1026 2>&1|tee lyxerrors.log
+  and watch out for any error messages. Report any remaining problems. 
+  As this is a completely voluntary project, everybody involved will be
+  grateful for user efforts like detailed bug reports, suggestions,
+  fixes, additions to the documentation, etc. 
+
+6) Have fun! (I'm sure).
+
+
+       C. Tips for Advanced Users:
+          -----------------------
+* You can start LyX automatically by adding 
+       'start/min/n xconsole.exe'
+       'set EMXSHELL=x:\bin\sh.exe'
+       'start/min/n lyx >/dev/console$ 2>&1'
+  to xinitrc.cmd before the line that invokes the 
+  window manager, so that LyX' messages appear in the 
+  console window and LyX appears in the pm-task list.
+
+* You can start LyX automatically by adding 
+       'detach xconsole.exe'
+       'detach lyx >/dev/console$ 2>&1'
+  to xinitrc.cmd before the line that invokes the 
+  window manager, so that LyX' messages appear in the 
+  console window and LyX does not appear in the PM task list.
+
+\1a
\ No newline at end of file
diff --git a/UPGRADING b/UPGRADING
new file mode 100644 (file)
index 0000000..712bb36
--- /dev/null
+++ b/UPGRADING
@@ -0,0 +1,27 @@
+How do I upgrade my existing LyX system to version 1.0.2?
+---------------------------------------------------------
+
+If you upgrade from version 0.12.0 or 1.0.0, you shouldn't have 
+any problems.  Just run "make install", and it will automatically
+update the necessary files, provided that you install LyX the
+same place as an existing version.
+
+Document transfer
+-----------------
+
+In general, you don't need to convert any documents saved with LyX
+v0.10, v0.12.0 or v1.0.0 to use them with LyX v1.0.2.
+
+LyX v1.0.2 can read all documents saved with lyx-0.12.0 and later correctly.
+Documents saved with lyx-0.10.x are read correctly up to the old math 
+mode, which is not supported anymore. If you have documents with such 
+math formulas, you convert it using the program COLD, written by Preben 
+Rhandol. COLD can be found at:
+
+  http://www.pvv.org/~randhol/lyx/COLD/
+  ftp://ftp.lyx.org/pub/lyx/contrib/
+
+or at one of LyX archive mirror sites listed in README.
+
+Documents saved with LyX version 1.0.2 can be read correctly by 
+LyX v0.12.0 and v1.0.0 and v1.0.1, except for new features.
diff --git a/WHATSNEW b/WHATSNEW
new file mode 100644 (file)
index 0000000..ef84976
--- /dev/null
+++ b/WHATSNEW
@@ -0,0 +1,94 @@
+What's new in 1.0.3 compared to LyX version 1.0.2?
+--------------------------------------------------
+
+LyX 1.0.3 is mainly a bugfix update to 1.0.2.
+
+- improved dependency tracking when running LaTeX (fixes one important
+  bug in 1.0.2).
+
+- new italian and walloon localizations of the user interface.
+
+- New slovene and spanish translations of the Tutorial.
+
+What's new in 1.0.2 compared to LyX version 1.0.1?
+--------------------------------------------------
+
+LyX 1.0.2 is a minor update to LyX 1.0.1. Besides fixing many bugs
+compared to version 1.0.0, it adds the following features:
+
+- Improved reLyX: supports EPS image inclusion and works in windows.
+
+- New french translation of Intro.lyx and Tutorial.lyx; new german
+  translation of UserGuide.lyx.
+
+- Better multipart document support.
+
+- LyX is now able to parse your BibTex files and show a list of
+  entries. 
+
+- New broadway textclass (for plays).
+
+
+What's new in 1.0.1 compared to LyX version 1.0.0?
+--------------------------------------------------
+
+LyX 1.0.1 is a minor update to LyX 1.0.0. Besides fixing many bugs
+compared to version 1.0.0, it adds the following features:
+
+- Support for selecting pages and number of copies in print dialog
+
+- New function 'Replace all' in Find&Replace popup
+
+- Support for optional argument of \sqrt in math editor
+
+- Support for literate programming with the 'noweb' program
+
+- New LaTeX document classe: APA 
+
+
+
+What's new in 1.0.0 compared to LyX version 0.12.0?
+----------------------------------------------------
+
+LyX 1.0.0 is a stable release. Besides fixing many bugs compared to
+version 0.12.0, it adds the following features:
+
+- much improved reLyX script: many bugs have been fixed, new options
+  have been added, many constructs are now correctly handled. reLyX is now 
+  installed along with LyX and has its own man page. Separate upgrades
+  of reLyX will be made available later.  The reLyX script is utilized
+  by the File->Import LaTeX command in LyX.
+
+- Much improved LinuxDoc (sgml-tools) support: multiple textclasses,
+  footnotes, and generally better output.
+
+- New textclasses scrartcl, scrbook, scrreprt and scrlettr
+  implementing the corresponding classes of the koma-script
+  package. New textclasses latex8 for some IEEE journals, IEEEtran for
+  various IEEE Transactions journals and ejour2 for some Springer Verlag
+  Journals.  New textclass hollywood to typeset your own film scripts.
+
+- Better support (keyboard bindings, keyboard mappings, and/or menu
+  and error message translations) for several languages.
+
+- Documentation has been partly translated to German, Swedish, and Czech. You
+  will get this automatically from the Help menu if you set up the LANG
+  environment variable correctly (i.e. to 'de' or 'sv').
+
+- Documentation has been generally improved and expanded.
+
+- Improved table support.
+
+- Support for arbitrary line spacing in documents.
+
+- easier handling of index entries.
+
+- The printer configuration scheme has changed a bit to help people
+  whose dvips is not configured correctly. As a consequence, you might
+  have to modify your lyxrc a bit. All users are advised to re-run
+  Option->Reconfigure to update LyX configuration.
+
+
+Note that your existing global lyxrc file will not be overwritten by
+default since now LyX only installs a file lyxrc.example to use as
+template. 
diff --git a/acconfig.h b/acconfig.h
new file mode 100644 (file)
index 0000000..0dce1c8
--- /dev/null
@@ -0,0 +1,153 @@
+/* -*- C++ -*- */
+/* This is the compilation configuration file for LyX. It was generated by 
+   autoconf's configure. You might want to change some of the defaults if 
+   something goes wrong during the compilation
+   
+   * This file is part of
+   * ======================================================
+   *
+   *           LyX, the High Level Word Processor
+   *
+   *           Copyright (C) 1995 Matthias Ettrich
+   *
+   *======================================================*/
+
+#ifndef _CONFIG_H
+#define _CONFIG_H
+
+@TOP@
+
+/* Define to work around a bug with const handling in gcc 2.7.[012] */
+#undef BROKEN_CONST
+
+/* Define on SunOS 4 and SCO, were some functions are missing from the headers */
+#undef BROKEN_HEADERS
+
+/* Define if you want debugging turned on as default. */
+#undef DEBUG_AS_DEFAULT
+
+/* Define if you are building a development version of LyX */
+#undef DEVEL_VERSION
+
+/* Define to 1 if NLS is requested.  */
+#undef ENABLE_NLS
+
+/* Define to nothing if your compiler does not understand the
+   `explicit' directive */
+#undef explicit
+
+/* define this to the location of forms.h to be used with #include,
+  e.g. <forms.h> */
+#undef FORMS_H_LOCATION
+
+/* Define if your locale.h file contains LC_MESSAGES.  */
+#undef HAVE_LC_MESSAGES
+
+/* Define as 1 if you have catgets and don't want to use GNU gettext.  */
+#undef HAVE_CATGETS
+
+/* Define as 1 if you have gettext and don't want to use GNU gettext.  */
+#undef HAVE_GETTEXT
+
+/* Define as 1 if you have the stpcopy function */
+#undef HAVE_STPCPY
+
+/*
+/* Define if the bool type is known to your compiler */
+#undef HAVE_bool
+*/
+
+/* Define to the name of the distribution.  */
+#undef PACKAGE
+
+/* You might want to define TWO_COLOR_ICONS if you want to spare
+ your colormap.  This will use monochrome icons instead of colored
+ ones. */
+#undef TWO_COLOR_ICONS
+
+/* Define to the version of the distribution.  */
+#undef VERSION
+
+/* Define this if you want to see the #warning directives put here and
+   there by the developpers to get attention */
+#undef WITH_WARNINGS
+
+/* define this to the location of xpm.h to be used with #include,
+  e.g. <xpm.h> */
+#undef XPM_H_LOCATION
+
+
+@BOTTOM@ 
+
+/************************************************************ 
+ ** You should not need to change anything beyond this point */
+
+/* even though -ansi might have been specified for gcc, we want all
+  usual prototypes.  */
+#ifdef __STRICT_ANSI__
+/**/#undef __STRICT_ANSI__
+#endif
+
+#ifdef HAVE_MEMSET
+#define BZERO(a,b)      memset(a,0,b)
+#else
+#define BZERO(a,b)      bzero(a,b)
+#endif
+
+#ifndef HAVE_STRCHR
+#define strchr(a,b)     index(a,b)
+#endif
+
+#ifndef HAVE_MEMMOVE
+#define memmove(a, b, c)  bcopy(b, a, c)
+#endif
+
+#ifndef HAVE_STRERROR
+#if defined (__cplusplus)
+extern "C"
+#endif
+char * strerror(int n);
+#endif
+
+/*
+#ifndef HAVE_bool
+#define bool int
+#define true 1
+#define false 0
+#endif
+*/
+
+#if SIZEOF_VOID_P == SIZEOF_INT
+# define PTR_AS_INT(p) int(p)
+#else
+# define PTR_AS_INT(p) long(p)
+#endif
+
+#ifdef BROKEN_CONST
+#include <string.h>
+#include "broken_const.h"
+#endif  
+
+#ifdef BROKEN_HEADERS
+#include "broken_headers.h"
+#endif
+
+/* C++ always support the keyword `inline' */
+#if defined inline && defined __cplusplus
+/**/#undef inline
+#endif
+
+#ifdef __EMX__
+#include "os2_defines.h"
+#endif
+
+#ifdef VMS
+#include "vms_defines.h"
+#endif
+
+#if defined(__CYGWIN__) || defined( __CYGWIN32__)
+#include "nt_defines.h"
+#endif
+
+#endif /* _CONFIG_H */
+
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644 (file)
index 0000000..34deca7
--- /dev/null
@@ -0,0 +1,642 @@
+dnl Some useful functions for LyXs configure.in                 -*- sh -*-
+dnl Author: Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr)
+dnl         Lars Gullik Bjønnes (larsbj@lyx.org)
+
+
+dnl Usage LYX_GET_VERSION   Sets "lyx_version" to the version of LyX being 
+dnl   built, displays it and sets variable "lyx_devel" to yes or no depending 
+dnl   whether the version is a development release or not. 
+AC_DEFUN(LYX_GET_VERSION,[
+changequote(, ) dnl
+# Get LyX version from $1 and guess wether is is stable or experimental.
+VERSION=`grep '#define *LYX_VERSION' $1 | 
+             sed -e 's/^.*"\([0-9.]*\)[^0-9.].*$/\1/' 2>/dev/null`
+echo "configuring LyX version $VERSION"
+if echo "$VERSION" | grep '[0-9]*\.[0-9]*[13579]\.[0-9]*' >/dev/null ; then
+  lyx_devel_version=yes
+  echo "WARNING: This is a development version. Expect bugs."
+else
+  lyx_devel_version=no
+fi
+changequote([, ]) dnl
+PACKAGE=lyx${program_suffix}
+AC_SUBST(lyx_devel_version)
+if test $lyx_devel_version = yes ; then 
+  AC_DEFINE(DEVEL_VERSION, 1, Define if you are building a development version of LyX)
+fi])
+
+dnl Usage: LYX_ERROR(message)  Displays the warning "message" and sets the
+dnl flag lyx_error to yes.
+AC_DEFUN(LYX_ERROR,[
+lyx_error_txt="$lyx_error_txt
+** $1
+"
+lyx_error=yes])
+
+
+dnl Usage: LYX_WARNING(message)  Displays the warning "message" and sets the
+dnl flag lyx_warning to yes.
+AC_DEFUN(LYX_WARNING,[
+lyx_warning_txt="$lyx_warning_txt
+== $1
+"
+lyx_warning=yes])
+
+
+dnl Usage: LYX_LIB_ERROR(file,library)  Displays an error message indication 
+dnl  that 'file' cannot be found because 'lib' may be uncorrectly installed.
+AC_DEFUN(LYX_LIB_ERROR,[
+LYX_ERROR([Cannot find $1. Please check that the $2 library
+   is correctly installed on your system.])])
+
+
+dnl Usage: LYX_CHECK_ERRORS  Displays a warning message if a LYX_ERROR
+dnl   has occured previously. 
+AC_DEFUN(LYX_CHECK_ERRORS,[
+if test x$lyx_error = xyes; then
+cat <<EOF
+**** The following problems have been detected by configure. 
+**** Please check the messages below before running 'make'.
+**** (see the section 'Problems' in the INSTALL file)
+$lyx_error_txt
+$lyx_warning_txt
+deleting cache $cache_file
+EOF
+  rm -f $cache_file
+else
+
+if test x$lyx_warning = xyes; then
+cat <<EOF
+=== The following minor problems have been detected by configure. 
+=== Please check the messages below before running 'make'.
+=== (see the section 'Problems' in the INSTALL file)
+$lyx_warning_txt
+EOF
+fi
+cat <<EOF
+Configuration of LyX was successful.  
+Type 'make' to compile the program, 
+and then 'make install' to install it.
+EOF
+fi])
+
+
+dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
+dnl             
+define(LYX_SEARCH_PROG,[dnl
+for ac_prog in $2 ; do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+  set dummy $ac_prog ; ac_word=$[2]
+  if test -z "[$]$1"; then
+    IFS="${IFS=        }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+    for ac_dir in $PATH; do
+      test -z "$ac_dir" && ac_dir=.
+      if test -f [$ac_dir/$ac_word]; then
+        $1="$ac_prog"
+        break
+      fi
+    done
+    IFS="$ac_save_ifs"
+  fi
+
+  if test -n "[$]$1"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  ifelse($3,,,[$3])
+  test -n "[$]$1" && break
+done
+])dnl
+
+
+AC_DEFUN(LYX_PROG_CXX_WORKS,
+[AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_TRY_COMPILER([class foo { int bar; }; int main(){return(0);}], ac_cv_prog_cxx_works, ac_cv_prog_cxx_cross)
+AC_LANG_RESTORE
+if test $ac_cv_prog_cxx_works = no; then
+  CXX=
+fi
+cross_compiling=$ac_cv_prog_cxx_cross
+])
+
+
+AC_DEFUN(LYX_PROG_CXX,
+[AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
+AC_MSG_CHECKING([for a working C++ compiler])
+LYX_SEARCH_PROG(CXX, $CCC g++ gcc c++ CC cxx xlC cc++, LYX_PROG_CXX_WORKS)
+
+if test -z "$CXX" ; then
+  AC_ERROR([Unable to find a working C++ compiler])
+fi
+
+AC_SUBST(CXX)
+AC_MSG_RESULT($CXX)
+
+AC_MSG_CHECKING([whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler])
+AC_MSG_RESULT($cross_compiling)
+
+AC_PROG_CXX_GNU
+
+dnl We might want to get or shut warnings.
+AC_ARG_WITH(warnings,
+  [  --with-warnings         tell GNU C++ to display more warnings],,
+  [if test $lyx_devel_version = yes && test $ac_cv_prog_gxx = yes ; then
+     with_warnings=yes;
+   else
+     with_warnings=no;
+   fi;])
+if test "x$with_warnings" = xyes ; then
+  lyx_flags="$lyx_flags warnings"
+  AC_DEFINE(WITH_WARNINGS, 1,
+  [Define this if you want to see the warning directives put here and
+   there by the developpers to get attention])
+fi
+
+# optimize less for development versions
+if test "$lyx_devel_version" = yes ; then
+  lyx_opt="-O"
+else
+  lyx_opt="-O2"
+fi
+
+# set the debug flags correctly.
+if test $ac_cv_prog_gxx = yes; then
+  GXX=yes
+dnl Check whether -g works, even if CXXFLAGS is set, in case the package
+dnl plays around with CXXFLAGS (such as to build both debugging and
+dnl normal versions of a library), tasteless as that idea is.
+  ac_test_CXXFLAGS="${CXXFLAGS+set}"
+  ac_save_CXXFLAGS="$CXXFLAGS"
+  CXXFLAGS=
+dnl Check the version of g++
+  gxx_version=`g++ --version`
+  
+  AC_PROG_CXX_G
+  if test "$ac_test_CXXFLAGS" = set; then
+    CXXFLAGS="$ac_save_CXXFLAGS"
+  elif test $ac_cv_prog_cxx_g = yes; then
+    case $gxx_version in
+      2.7*) CXXFLAGS="$lyx_opt";;
+      *)    CXXFLAGS="-g $lyx_opt -fno-exceptions";;
+    esac
+  else
+    CXXFLAGS="$lyx_opt"
+  fi
+  if test $with_warnings = yes ; then
+    CXXFLAGS="$CXXFLAGS -ansi -Wall"
+    # a small hack to avoid problems with headers
+    echo '#undef __STRICT_ANSI__' >>confdefs.h
+  fi
+else
+  GXX=
+  test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
+fi
+])dnl
+
+
+AC_DEFUN(LYX_GXX_STRENGTH_REDUCE,[
+#check for the strength reduction bug of gcc
+if test x$GXX = xyes && test $cross_compiling = no ; then
+  AC_CACHE_CHECK( "for gcc strength-reduce bug", ac_cv_c_gcc_strength_bug,
+                  AC_TRY_RUN([
+int main(void) {
+  static int Array[[3]];
+  unsigned int B = 3;
+  int i;
+  for(i=0; i<B; i++) Array[[i]] = i - 3;
+  exit( Array[[1]] != -2 );
+}],
+    ac_cv_c_gcc_strength_bug="no",
+    ac_cv_c_gcc_strength_bug="yes",
+    ac_cv_c_gcc_strength_bug="yes") )
+  if test "$ac_cv_c_gcc_strength_bug" = "yes"
+  then
+    CXXFLAGS="$CXXFLAGS -fno-strength-reduce"
+  fi
+fi
+])dnl
+
+dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
+dnl   supports RTTI
+AC_DEFUN(LYX_CXX_RTTI,[
+### Check whether the compiler supports runtime type information
+AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
+ [AC_TRY_RUN([
+class rtti {
+public:
+   virtual int tag() { return 0; }
+};
+class derived1 : public rtti {
+public:
+    int tag() { return 1; }
+};
+class derived2 : public rtti {
+public:
+    int tag() { return 2; }
+};
+int main() {
+    derived1 * foo1 = new derived1();
+    derived2 * foo2 = new derived2();
+    rtti * bar = foo1;
+    derived1 * bar1 = dynamic_cast<derived1 *>(bar);
+    if (bar1 == 0)
+       exit(1);
+    bar = foo2;
+    bar1 = dynamic_cast<derived1 *>(bar);
+    if (bar1 != 0)
+       exit(1);
+    return 0;
+}
+],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
+])
+if test x$lyx_cv_rtti = xyes ; then
+  AC_DEFINE(HAVE_RTTI, 1, 
+   [Define to 1 if your compiler supports runtime type information])
+fi])
+
+
+dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
+dnl   understands the "explicit" directive.
+AC_DEFUN(LYX_CXX_EXPLICIT,[
+### Check whether the compiler understands the keyword `explicit'
+AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
+ [AC_TRY_COMPILE([
+class Expl {
+public:
+       explicit Expl() {};
+};],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
+])
+if test $lyx_cv_explicit = no ; then
+  AC_DEFINE(explicit,[ ], 
+   [Define to nothing if your compiler does not understand the
+   'explicit' directive])
+fi])
+
+
+dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
+dnl   has a working stl stack template
+AC_DEFUN(LYX_CXX_STL_STACK,[
+AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
+ [AC_TRY_COMPILE([
+#include <stack>
+],[
+    stack<int> stakk;
+    stakk.push(0);
+],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
+])
+if test $lyx_cv_broken_stack = yes ; then
+  AC_DEFINE(BROKEN_STL_STACK, 1, 
+   [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
+   correctly])
+fi])
+
+
+dnl Usage: LYX_CXX_STL_STRING : checks whether the C++ compiler
+dnl   has a working stl string container
+AC_DEFUN(LYX_CXX_STL_STRING,[
+AC_ARG_WITH(included-string,
+[  --with-included-string  use LyX string class instead of STL string],,
+[AC_CHECK_HEADER(std/bastring.h,
+  [with_included_string=yes],
+  [with_included_string=no])])
+if test x$with_included_string = xyes ; then
+  AC_DEFINE(USE_INCLUDED_STRING, 1, 
+    [Define to use the LString class bundled with LyX])
+  lyx_flags="$lyx_flags included-string"
+fi])
+
+
+dnl LYX_CXX_MUTABLE
+AC_DEFUN(LYX_CXX_MUTABLE, [
+AC_REQUIRE([LYX_PROG_CXX])
+AC_MSG_CHECKING(if C++ compiler supports mutable)
+AC_TRY_COMPILE(
+[
+class k {       
+        mutable char *c;
+public:
+   void foo() const { c=0; }
+};
+],[
+],[
+  ac_mutable=yes
+  AC_DEFINE(HAVE_MUTABLE, 1, 
+   [Defined if you compiler supports 'mutable'.])
+],[
+  ac_mutable=no
+]) 
+AC_MSG_RESULT([$ac_mutable])
+])
+
+
+dnl LYX_CXX_PARTIAL
+AC_DEFUN(LYX_CXX_PARTIAL, [
+AC_REQUIRE([LYX_PROG_CXX])
+AC_MSG_CHECKING(if C++ compiler supports partial specialization)
+AC_TRY_COMPILE(
+[
+template<class T, class K>
+class k {       
+public:
+};
+template<class T> class k<void,T> { };
+],[
+  k<float, float> b;
+  k<void,void> a;
+],[
+  ac_partial_specialization=yes
+  AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1, 
+   [Defined if your compiler supports partial specialization.])
+],[
+  ac_partial_specialization=no
+]) 
+AC_MSG_RESULT([$ac_partial_specialization])
+])
+
+dnl Usage: LYX_CXX_NAMESPACES : checks whether the C++ compiler
+dnl   has a correct namespace handling and define CXX_WORKING_NAMESPACES 
+dnl   if true. This macro does not do a thourough test, but it should be 
+dnl   good enough to suit our needs.
+AC_DEFUN(LYX_CXX_NAMESPACES,[
+AC_CACHE_CHECK(for correct namespaces support,lyx_cv_cxx_namespace,
+ [AC_TRY_COMPILE([
+  #include <vector>
+  using std::vector;
+],[
+       vector<int> test;
+       return 0;
+],lyx_cv_cxx_namespace=yes,lyx_cv_cxx_namespace=no)
+])
+if test $lyx_cv_cxx_namespace = yes ; then
+  AC_DEFINE(CXX_WORKING_NAMESPACES, 1, 
+   [Define if your C++ compiler has correct support for namespaces])
+fi])
+
+
+dnl Usage LYX_PATH_XPM: Checks for xpm library and header
+AC_DEFUN(LYX_PATH_XPM,[
+### Check for Xpm library
+AC_CHECK_LIB(Xpm, XpmCreateBufferFromImage,LYX_LIBS="-lXpm $LYX_LIBS",
+        [LYX_LIB_ERROR(libXpm,Xpm)], $LYX_LIBS)
+
+### Check for Xpm headers
+lyx_cv_xpm_h_location="<xpm.h>"
+AC_CHECK_HEADER(X11/xpm.h,[
+  ac_cv_header_xpm_h=yes
+  lyx_cv_xpm_h_location="<X11/xpm.h>"],[
+AC_CHECK_HEADER(xpm.h,[],[
+LYX_LIB_ERROR(xpm.h,Xpm)])])
+AC_DEFINE_UNQUOTED(XPM_H_LOCATION,$lyx_cv_xpm_h_location)
+
+### Test for the header version
+if test $ac_cv_header_xpm_h = yes; then
+  AC_CACHE_CHECK([xpm header version],lyx_cv_xpmversion,
+  [ cat > conftest.$ac_ext <<EOF
+#line __oline__ "configure"
+#include "confdefs.h"
+
+#include XPM_H_LOCATION
+"%%%"lyx_cv_xpmv=XpmVersion;lyx_cv_xpmr=XpmRevision"%%%"
+EOF
+    eval `(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
+      grep '^"%%%"'  2>/dev/null | \
+      sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
+    case "$lyx_cv_xpmr" in
+changequote(,)
+     [0-9]) lyxxpmr_alpha=`echo $lyx_cv_xpmr |tr 123456789 abcdefghi`
+            lyxxpmv_alpha=" (aka 3.$lyx_cv_xpmv$lyxxpmr_alpha)";;
+changequote([,])
+         *) ;;
+    esac
+    lyx_cv_xpmversion="$lyx_cv_xpmv.$lyx_cv_xpmr$lyxxpmv_alpha"
+    rm -f conftest*])
+  case "$lyx_cv_xpmr" in 
+changequote(,)
+        [789]|[0-9][0-9]*) ;;
+changequote([,])
+        *) LYX_WARNING([Version $lyx_cv_xpmversion of the Xpm library is a bit old. 
+   If you experience strange crashes with LyX, try to upgrade 
+   to at least version 4.7 (aka 3.4g).
+   If you have installed a newer version of the library, check whether you
+   have an old xpm.h header file in your include path.]);;
+  esac
+fi])
+
+
+dnl Usage LYX_PATH_XFORMS: Checks for xforms library and flags
+AC_DEFUN(LYX_PATH_XFORMS,[
+### Check for xforms library
+AC_CHECK_LIB(forms, fl_initialize, LYX_LIBS="-lforms $LYX_LIBS", 
+  [AC_CHECK_LIB(xforms, fl_initialize, LYX_LIBS="-lxforms $LYX_LIBS", 
+    [LYX_LIB_ERROR(libforms or libxforms,xforms)], $LYX_LIBS)], $LYX_LIBS) 
+
+### Check for xforms headers
+lyx_cv_forms_h_location="<forms.h>"
+AC_CHECK_HEADER(X11/forms.h,[
+  ac_cv_header_forms_h=yes
+  lyx_cv_forms_h_location="<X11/forms.h>"],[
+AC_CHECK_HEADER(forms.h,[],[
+LYX_LIB_ERROR(forms.h,forms)])])
+AC_DEFINE_UNQUOTED(FORMS_H_LOCATION,$lyx_cv_forms_h_location)
+if test $ac_cv_header_forms_h = yes; then
+  AC_CACHE_CHECK([xforms header version],lyx_cv_xfversion,
+  [ cat > conftest.$ac_ext <<EOF
+#line __oline__ "configure"
+#include "confdefs.h"
+
+#include FORMS_H_LOCATION
+#if ! defined(FL_INCLUDE_VERSION)
+"%%%"(unknown)"%%%"
+#else
+"%%%"FL_VERSION.FL_REVISION"%%%"
+#endif
+EOF
+lyx_cv_xfversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
+  grep '^"%%%"'  2>/dev/null | \
+  sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
+rm -f conftest*])
+case "$lyx_cv_xfversion" in 
+  "(unknown)"|0.82|0.83|0.84|0.85) 
+     LYX_ERROR(dnl
+Version $lyx_cv_xfversion of xforms is not compatible with LyX. 
+   This version of LyX works best with version 0.88[,] although it
+   supports also versions 0.81[,] 0.86 and 0.87.) ;;
+  0.81|0.86|0.87) 
+     LYX_WARNING(dnl
+While LyX is compatible with version $lyx_cv_xfversion of xforms[,] 
+   it is recommended that you upgrade to version 0.88.) ;;
+     0.88) ;;
+     0.89) LYX_WARNING(dnl
+LyX should work ok with version $lyx_cv_xfversion of xforms[,] but
+it is an unproven version and might still have some bugs. If you
+have problems[,] please use version 0.88 instead.) ;;
+          *) LYX_WARNING(dnl
+Version $lyx_cv_xfversion of xforms might not be compatible with LyX[,] 
+   since it is newer than 0.88. You might have slight problems with it.);;
+esac
+fi])
+
+
+dnl Usage: LYX_HPUX  Checks for HP-UX and update CXXFLAGS accordingly
+AC_DEFUN(LYX_HPUX,
+[#It seems that HPUX requires using -fpcc-struct-return with gcc.
+AC_CACHE_CHECK(for HP-UX,ac_cv_hpux,[
+os=`uname -s | tr '[A-Z]' '[a-z]'`
+ac_cv_hpux=no
+test "$os" = hp-ux && ac_cv_hpux=yes])
+if test "$ac_cv_hpux" = yes; then
+ test "x$GXX" = xyes && CXXFLAGS="$CXXFLAGS -fpcc-struct-return"
+fi])
+
+
+dnl Usage: LYX_SUNOS4 Checks for SunOS 4.x and sets the flag lyx_broken_headers
+dnl   if necessary
+AC_DEFUN(LYX_SUNOS4,
+[#The headers are not correct under SunOS4
+AC_CACHE_CHECK(for SunOS 4.x,ac_cv_sunos4,[
+changequote(, ) dnl
+os=`uname -a | sed -e 's/^\([^ ]*\) [^ ]* \([0-9]\)\..*/\1\2/'`
+changequote([, ]) dnl
+ac_cv_sunos4=no
+test "$os" = SunOS4 && ac_cv_sunos4=yes])
+if test "$ac_cv_sunos4" = yes; then
+ test "x$GXX" = xyes && lyx_broken_headers=yes
+fi])
+
+
+dnl Usage: LYX_SCO Checks for SCO and sets the flag lyx_broken_headers
+dnl   if necessary
+AC_DEFUN(LYX_SCO,
+[AC_CACHE_CHECK(for SCO 3.2v4,ac_cv_sco,[
+ac_cv_sco=no
+if test `uname -s` != "SCO_SV"; then
+  lyx_machine_rel=`uname -m`:`uname -r`
+  if test $lyx_machine_rel = i386:3.2 || test $lyx_machine_rel = i486:3.2;
+  then
+    if test -f /usr/options/cb.name; then
+      ac_cv_sco=no
+    elif /bin/uname -X 2>/dev/null >/dev/null ; then
+      ac_cv_sco=yes
+    fi
+  fi
+fi])
+if test "$ac_cv_sco" = yes; then
+ test "x$GXX" = xyes && lyx_broken_headers=yes
+fi])
+
+
+dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value, 
+dnl                       [default-yes-value])  
+dnl  Adds a --with-'dir-name' option (described by 'desc') and puts the 
+dnl  resulting directory name in 'dir-var-name'.
+AC_DEFUN(LYX_WITH_DIR,[
+  AC_ARG_WITH($1,[  --with-$1     specify $2])
+  AC_MSG_CHECKING([for $2])
+  if test -z "$with_$3"; then
+     AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
+  else
+    test "x$with_$3" = xyes && with_$3=$5
+    lyx_cv_$3="$with_$3"
+  fi
+  AC_MSG_RESULT($lyx_cv_$3)])
+
+
+dnl Usage: LYX_LOOP_DIR(value,action)
+dnl Executes action for values of variable `dir' in `values'. `values' can 
+dnl use ":" as a separator.
+AC_DEFUN(LYX_LOOP_DIR,[
+IFS="${IFS=    }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+for dir in `eval "echo $1"`; do
+  if test ! "$dir" = NONE; then
+    test ! -d "$dir" && AC_ERROR([\"$dir\" is not a directory])
+    $2
+  fi
+done
+IFS=$ac_save_ifs
+])
+
+
+dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable 
+dnl var-name. 
+AC_DEFUN(LYX_ADD_LIB_DIR,[
+$1="${$1} -L$2"
+if test "`(uname) 2>/dev/null`" = SunOS &&
+    uname -r | grep '^5' >/dev/null; then
+  if test $ac_cv_prog_gxx = yes ; then 
+    $1="${$1} -Wl[,]-R$2" 
+  else
+    $1="${$1} -R$2"
+  fi
+fi])
+
+
+dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable 
+dnl var-name. 
+AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
+
+
+dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)]
+dnl if the cache file is inconsistent with the current host,
+dnl target and build system types, execute CMD or print a default
+dnl error message.
+AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [
+    AC_REQUIRE([AC_CANONICAL_SYSTEM])
+    AC_MSG_CHECKING([config.cache system type])
+    if { test x"${ac_cv_host_system_type+set}" = x"set" &&
+         test x"$ac_cv_host_system_type" != x"$host"; } ||
+       { test x"${ac_cv_build_system_type+set}" = x"set" &&
+         test x"$ac_cv_build_system_type" != x"$build"; } ||
+       { test x"${ac_cv_target_system_type+set}" = x"set" &&
+         test x"$ac_cv_target_system_type" != x"$target"; }; then
+        AC_MSG_RESULT([different])
+        ifelse($#, 1, [$1],
+                [AC_MSG_ERROR(["you must remove config.cache and restart configure"])])
+    else
+        AC_MSG_RESULT([same])
+    fi
+    ac_cv_host_system_type="$host"
+    ac_cv_build_system_type="$build"
+    ac_cv_target_system_type="$target"
+])
+
+dnl We use this until autoconf fixes its version.
+AC_DEFUN(LYX_FUNC_SELECT_ARGTYPES,
+[AC_MSG_CHECKING([types of arguments for select()])
+ AC_CACHE_VAL(ac_cv_func_select_arg234,dnl
+ [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl
+  [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl
+   [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do
+     for ac_cv_func_select_arg1 in 'int' 'size_t' 'unsigned long' 'unsigned'; do      for ac_cv_func_select_arg5 in 'struct timeval *' 'const struct timeval *'; do
+       AC_TRY_COMPILE(dnl
+[#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+extern int select ($ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg234,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5);],,dnl
+        [ac_not_found=no ; break 3],ac_not_found=yes)
+      done
+     done
+    done
+   ])dnl AC_CACHE_VAL
+  ])dnl AC_CACHE_VAL
+ ])dnl AC_CACHE_VAL
+ if test "$ac_not_found" = yes; then
+  ac_cv_func_select_arg1=int 
+  ac_cv_func_select_arg234='int *' 
+  ac_cv_func_select_arg5='struct timeval *'
+ fi
+ AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5])
+ AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1)
+ AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234))
+ AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5))
+])
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..d52fbe1
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+ACLOCAL=aclocal
+AUTOHEADER=autoheader
+AUTOMAKE="automake -a -c --foreign"
+AUTOCONF=autoconf
+
+# Generate the Makefiles and configure files
+if ( aclocal --version ) </dev/null > /dev/null 2>&1; then
+       echo "Building macros."
+       $ACLOCAL ; (cd lib/reLyX; $ACLOCAL )
+else
+       echo "aclocal not found -- aborting"
+       exit
+fi
+
+if ( autoheader --version ) </dev/null > /dev/null 2>&1; then
+       echo "Building config header template"
+       $AUTOHEADER
+else
+       echo "autoheader not found -- aborting"
+       exit
+fi
+
+if ( $AUTOMAKE --version ) </dev/null > /dev/null 2>&1; then
+       echo "Building Makefile templates"
+       $AUTOMAKE ; (cd lib/reLyX ; $AUTOMAKE )
+else
+       echo "automake not found -- aborting"
+       exit
+fi
+
+if ( $AUTOCONF --version ) </dev/null > /dev/null 2>&1; then
+       echo "Building configure"
+       $AUTOCONF ; ( cd lib/reLyX ; $AUTOCONF )
+       echo 'run "./configure ; make"'
+else
+       echo "autoconf not found -- aborting"
+       exit
+fi
+
diff --git a/config/README b/config/README
new file mode 100644 (file)
index 0000000..797b6d6
--- /dev/null
@@ -0,0 +1,32 @@
+README for LyX configure stuff
+Author: Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr)
+-----------------------------------------------------------------------
+
+This directory contains the things used to build the configure
+scripts. The file present here are the following:
+
+makefile               a simple makefile to build configure script
+acconfig.h             template file describing src/config.h.in
+aclocal.m4             local macros for configure.in
+configure.in           the template from which configure is built
+lib_configure.m4       the template from which lib/configure is built
+install-sh             shell script used when no good install program
+                       is found
+mkinstalldirs          shell script used to create installation dirs.
+stamp-h.in             file used by Makefile to check dependencies
+hack-gcc               a shell script to work around possible gcc bugs
+
+How to use the makefile
+-----------------------
+
+When you make a modification to some configure component, just type
+'make', with the config/ directory being current. This will create
+configure, lib/configure and config.h.in. Do *not* try to run directly
+autoconf or autoheader. Note that these scripts require autoconf 2.12
+or later.
+
+There is also a target 'clean' which delete backup files, etc.
+
+Note: please do not rename `makefile' to `Makefile'! This name was
+chosen in order avoid being excluded from LyX patches...
+
diff --git a/config/config.guess b/config/config.guess
new file mode 100755 (executable)
index 0000000..1ec70cc
--- /dev/null
@@ -0,0 +1,951 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# The master version of this file is at the FSF in /home/gd/gnu/lib.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit system type (host/target name).
+#
+# Only a few systems have been added to this list; please add others
+# (but try to keep the structure clean).
+#
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 8/24/94.)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    alpha:OSF1:*:*)
+       if test $UNAME_RELEASE = "V4.0"; then
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+       fi
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       cat <<EOF >dummy.s
+       .globl main
+       .ent main
+main:
+       .frame \$30,0,\$26,0
+       .prologue 0
+       .long 0x47e03d80 # implver $0
+       lda \$2,259
+       .long 0x47e20c21 # amask $2,$1
+       srl \$1,8,\$2
+       sll \$2,2,\$2
+       sll \$0,3,\$0
+       addl \$1,\$0,\$0
+       addl \$2,\$0,\$0
+       ret \$31,(\$26),1
+       .end main
+EOF
+       ${CC-cc} dummy.s -o dummy 2>/dev/null
+       if test "$?" = 0 ; then
+               ./dummy
+               case "$?" in
+                       7)
+                               UNAME_MACHINE="alpha"
+                               ;;
+                       15)
+                               UNAME_MACHINE="alphaev5"
+                               ;;
+                       14)
+                               UNAME_MACHINE="alphaev56"
+                               ;;
+                       10)
+                               UNAME_MACHINE="alphapca56"
+                               ;;
+                       16)
+                               UNAME_MACHINE="alphaev6"
+                               ;;
+               esac
+       fi
+       rm -f dummy.s dummy
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
+       exit 0 ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-cbm-sysv4
+       exit 0;;
+    amiga:NetBSD:*:*)
+      echo m68k-cbm-netbsd${UNAME_RELEASE}
+      exit 0 ;;
+    amiga:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit 0 ;;
+    arc64:OpenBSD:*:*)
+       echo mips64el-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    arc:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    hkmips:OpenBSD:*:*)
+       echo mips-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    pmax:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sgi:OpenBSD:*:*)
+       echo mips-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+       echo mipsel-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit 0;;
+    arm32:NetBSD:*:*)
+       echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       exit 0 ;;
+    SR2?01:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit 0;;
+    Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|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 0 ;;
+    NILE:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit 0 ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    i86pc:SunOS:5.*:*)
+       echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit 0 ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit 0 ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit 0 ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:NetBSD:*:*)
+       echo m68k-atari-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    atari*:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sun3*:NetBSD:*:*)
+       echo m68k-sun-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sun3*:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mac68k:NetBSD:*:*)
+       echo m68k-apple-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mac68k:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+       echo m88k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit 0 ;;
+    macppc:NetBSD:*:*)
+        echo powerpc-apple-netbsd${UNAME_RELEASE}
+        exit 0 ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit 0 ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit 0 ;;
+    2020:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       sed 's/^        //' << EOF >dummy.c
+       int main (argc, argv) int argc; char **argv; {
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       ${CC-cc} dummy.c -o dummy \
+         && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+         && rm dummy.c dummy && exit 0
+       rm -f dummy.c dummy
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit 0 ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit 0 ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit 0 ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+        if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
+       if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
+            -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+       else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+       fi
+        else echo i586-dg-dgux${UNAME_RELEASE}
+        fi
+       exit 0 ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit 0 ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit 0 ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+       exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i?86:AIX:*:*)
+       echo i386-ibm-aix
+       exit 0 ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               sed 's/^                //' << EOF >dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+               rm -f dummy.c dummy
+               echo rs6000-ibm-aix3.2.5
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit 0 ;;
+    *:AIX:*:4)
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -EHl ${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=4.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit 0 ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/6?? | 9000/7?? | 9000/80[24] | 9000/8?[13679] | 9000/892 )
+              sed 's/^              //' << EOF >dummy.c
+              #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
+       (${CC-cc} dummy.c -o dummy 2>/dev/null ) && HP_ARCH=`./dummy`
+       rm -f dummy.c dummy
+       esac
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit 0 ;;
+    3050*:HI-UX:*:*)
+       sed 's/^        //' << EOF >dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+       rm -f dummy.c dummy
+       echo unknown-hitachi-hiuxwe2
+       exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit 0 ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit 0 ;;
+    i?86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit 0 ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*X-MP:*:*:*)
+       echo xmp-cray-unicos
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE}
+       exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+       exit 0 ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE}
+       exit 0 ;;
+    CRAY-2:*:*:*)
+       echo cray2-cray-unicos
+        exit 0 ;;
+    F300:UNIX_System_V:*:*)
+        FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    F301:UNIX_System_V:*:*)
+       echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
+       exit 0 ;;
+    hp3[0-9][05]:NetBSD:*:*)
+       echo m68k-hp-netbsd${UNAME_RELEASE}
+       exit 0 ;;
+    hp300:OpenBSD:*:*)
+       echo m68k-unknown-openbsd${UNAME_RELEASE}
+       exit 0 ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    i?86:BSD/386:*:* | *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit 0 ;;
+    *:FreeBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit 0 ;;
+    *:NetBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       exit 0 ;;
+    *:OpenBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+       exit 0 ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin32
+       exit 0 ;;
+    i*:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit 0 ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin32
+       exit 0 ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit 0 ;;
+    *:GNU:*:*)
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit 0 ;;
+    *:Linux:*:*)
+       # uname on the ARM produces all sorts of strangeness, and we need to
+       # filter it out.
+       case "$UNAME_MACHINE" in
+         arm* | sa110*)              UNAME_MACHINE="arm" ;;
+       esac
+
+       # The BFD linker knows what the default object file format is, so
+       # first see if it will tell us.
+       ld_help_string=`ld --help 2>&1`
+       ld_supported_emulations=`echo $ld_help_string \
+                        | sed -ne '/supported emulations:/!d
+                                   s/[         ][      ]*/ /g
+                                   s/.*supported emulations: *//
+                                   s/ .*//
+                                   p'`
+        case "$ld_supported_emulations" in
+         i?86linux)  echo "${UNAME_MACHINE}-pc-linux-gnuaout"      ; exit 0 ;;
+         i?86coff)   echo "${UNAME_MACHINE}-pc-linux-gnucoff"      ; exit 0 ;;
+         sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+         armlinux)   echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+         m68klinux)  echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+         elf32ppc)   echo "powerpc-unknown-linux-gnu"              ; exit 0 ;;
+       esac
+
+       if test "${UNAME_MACHINE}" = "alpha" ; then
+               sed 's/^        //'  <<EOF >dummy.s
+               .globl main
+               .ent main
+       main:
+               .frame \$30,0,\$26,0
+               .prologue 0
+               .long 0x47e03d80 # implver $0
+               lda \$2,259
+               .long 0x47e20c21 # amask $2,$1
+               srl \$1,8,\$2
+               sll \$2,2,\$2
+               sll \$0,3,\$0
+               addl \$1,\$0,\$0
+               addl \$2,\$0,\$0
+               ret \$31,(\$26),1
+               .end main
+EOF
+               LIBC=""
+               ${CC-cc} dummy.s -o dummy 2>/dev/null
+               if test "$?" = 0 ; then
+                       ./dummy
+                       case "$?" in
+                       7)
+                               UNAME_MACHINE="alpha"
+                               ;;
+                       15)
+                               UNAME_MACHINE="alphaev5"
+                               ;;
+                       14)
+                               UNAME_MACHINE="alphaev56"
+                               ;;
+                       10)
+                               UNAME_MACHINE="alphapca56"
+                               ;;
+                       16)
+                               UNAME_MACHINE="alphaev6"
+                               ;;
+                       esac    
+
+                       objdump --private-headers dummy | \
+                         grep ld.so.1 > /dev/null
+                       if test "$?" = 0 ; then
+                               LIBC="libc1"
+                       fi
+               fi      
+               rm -f dummy.s dummy
+               echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
+       elif test "${UNAME_MACHINE}" = "mips" ; then
+         cat >dummy.c <<EOF
+main(argc, argv)
+     int argc;
+     char *argv[];
+{
+#ifdef __MIPSEB__
+  printf ("%s-unknown-linux-gnu\n", argv[1]);
+#endif
+#ifdef __MIPSEL__
+  printf ("%sel-unknown-linux-gnu\n", argv[1]);
+#endif
+  return 0;
+}
+EOF
+         ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
+         rm -f dummy.c dummy
+       else
+         # Either a pre-BFD a.out linker (linux-gnuoldld)
+         # or one that does not give us useful --help.
+         # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
+         # If ld does not provide *any* "supported emulations:"
+         # that means it is gnuoldld.
+         echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
+         test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
+
+         case "${UNAME_MACHINE}" in
+         i?86)
+           VENDOR=pc;
+           ;;
+         *)
+           VENDOR=unknown;
+           ;;
+         esac
+         # Determine whether the default compiler is a.out or elf
+         cat >dummy.c <<EOF
+#include <features.h>
+main(argc, argv)
+     int argc;
+     char *argv[];
+{
+#ifdef __ELF__
+# ifdef __GLIBC__
+#  if __GLIBC__ >= 2
+    printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
+#  else
+    printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+#  endif
+# else
+   printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+# endif
+#else
+  printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
+#endif
+  return 0;
+}
+EOF
+         ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
+         rm -f dummy.c dummy
+       fi ;;
+# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.  earlier versions
+# are messed up and put the nodename in both sysname and nodename.
+    i?86:DYNIX/ptx:4*:*)
+       echo i386-sequent-sysv4
+       exit 0 ;;
+    i?86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit 0 ;;
+    i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+       fi
+       exit 0 ;;
+    i?86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit 0 ;;
+    i?86:UnixWare:*:*)
+       if /bin/uname -X 2>/dev/null >/dev/null ; then
+         (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+           && UNAME_MACHINE=i586
+       fi
+       echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION}
+       exit 0 ;;
+    pc:*:*:*)
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+       echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit 0 ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit 0 ;;
+    M68*:*:R3V[567]*:*)
+       test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit 0 ;;
+    i?86:LynxOS:2.*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit 0 ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit 0 ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit 0 ;;
+    PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                           # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit 0 ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit 0 ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit 0 ;;
+    news*:NEWS-OS:*:6*)
+       echo mips-sony-newsos6
+       exit 0 ;;
+    R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit 0 ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit 0 ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+cat >dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+  printf ("vax-dec-bsd\n"); exit (0);
+#else
+  printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
+rm -f dummy.c dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit 0 ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit 0 ;;
+    c34*)
+       echo c34-convex-bsd
+       exit 0 ;;
+    c38*)
+       echo c38-convex-bsd
+       exit 0 ;;
+    c4*)
+       echo c4-convex-bsd
+       exit 0 ;;
+    esac
+fi
+
+#echo '(Unable to guess system type)' 1>&2
+
+exit 1
diff --git a/config/config.sub b/config/config.sub
new file mode 100755 (executable)
index 0000000..ba26d74
--- /dev/null
@@ -0,0 +1,955 @@
+#! /bin/sh
+# Configuration validation subroutine script, version 1.1.
+#   Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+if [ x$1 = x ]
+then
+       echo Configuration name missing. 1>&2
+       echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
+       echo "or     $0 ALIAS" 1>&2
+       echo where ALIAS is a recognized configuration type. 1>&2
+       exit 1
+fi
+
+# First pass through any local machine types.
+case $1 in
+       *local*)
+               echo $1
+               exit 0
+               ;;
+       *)
+       ;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  linux-gnu*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple)
+               os=
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco5)
+               os=sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
+               | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
+               | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \
+               | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
+               | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
+               | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
+               | mipstx39 | mipstx39el | armv[34][lb] \
+               | sparc | sparclet | sparclite | sparc64 | v850)
+               basic_machine=$basic_machine-unknown
+               ;;
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i[34567]86)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
+             | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
+             | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
+             | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
+             | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
+             | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
+             | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
+             | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
+             | sparc64-* | mips64-* | mipsel-* | armv[34][lb]-*\
+             | mips64el-* | mips64orion-* | mips64orionel-*  \
+             | mipstx39-* | mipstx39el-* \
+             | f301-*)
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-cbm
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-cbm
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-cbm
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       cray2)
+               basic_machine=cray2-cray
+               os=-unicos
+               ;;
+       [ctj]90-cray)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i[34567]86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i[34567]86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i[34567]86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i[34567]86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       mipsel*-linux*)
+               basic_machine=mipsel-unknown
+               os=-linux-gnu
+               ;;
+       mips*-linux*)
+               basic_machine=mips-unknown
+               os=-linux-gnu
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+        pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pentium | p5 | k5 | nexen)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | k6 | 6x86)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | nexen-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | k6-* | 6x86-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=rs6000-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       xmp)
+               basic_machine=xmp-cray
+               os=-unicos
+               ;;
+        xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       mips)
+               if [ x$os = x-linux-gnu ]; then
+                       basic_machine=mips-unknown
+               else
+                       basic_machine=mips-mips
+               fi
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sparc)
+               basic_machine=sparc-sun
+               ;;
+        cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+             | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -uxpv* | -beos*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+        *-gould)
+               os=-sysv
+               ;;
+        *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+        *-sgi)
+               os=-irix
+               ;;
+        *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f301-fujitsu)
+               os=-uxpv
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -aix*)
+                               vendor=ibm
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -vxsim* | -vxworks*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
diff --git a/config/gettext.m4 b/config/gettext.m4
new file mode 100644 (file)
index 0000000..64f2e8e
--- /dev/null
@@ -0,0 +1,293 @@
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# serial 3
+
+AC_DEFUN(AM_WITH_NLS,
+  [AC_MSG_CHECKING([whether NLS is requested])
+    dnl Default is enabled NLS
+    AC_ARG_ENABLE(nls,
+      [  --disable-nls           do not use Native Language Support],
+      USE_NLS=$enableval, USE_NLS=yes)
+    AC_MSG_RESULT($USE_NLS)
+    AC_SUBST(USE_NLS)
+
+    USE_INCLUDED_LIBINTL=no
+
+    dnl If we use NLS figure out what method
+    if test "$USE_NLS" = "yes"; then
+      AC_DEFINE(ENABLE_NLS)
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If gettext or catgets are available (in this order) we
+        dnl use this.  Else we have to fall back to GNU NLS library.
+       dnl catgets is only used if permitted by option --with-catgets.
+       nls_cv_header_intl=
+       nls_cv_header_libgt=
+       CATOBJEXT=NONE
+
+       AC_CHECK_HEADER(libintl.h,
+         [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
+           [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
+              gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
+
+          if test "$gt_cv_func_gettext_libc" != "yes"; then
+            AC_CHECK_LIB(intl, bindtextdomain,
+              [LIBS="-lintl $LIBS"
+               AC_CACHE_CHECK([for gettext in libintl],
+                gt_cv_func_gettext_libintl,
+                [AC_TRY_LINK([], [return (int) gettext ("")],
+                gt_cv_func_gettext_libintl=yes,
+                gt_cv_func_gettext_libintl=no)])])
+          fi
+
+          if test "$gt_cv_func_gettext_libc" = "yes" \
+             || test "$gt_cv_func_gettext_libintl" = "yes"; then
+             AC_DEFINE(HAVE_GETTEXT)
+             AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+               [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
+             if test "$MSGFMT" != "no"; then
+               AC_CHECK_FUNCS(dcgettext)
+               AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+               AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+                 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+               AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
+                              return _nl_msg_cat_cntr],
+                 [CATOBJEXT=.gmo
+                  DATADIRNAME=share],
+                 [CATOBJEXT=.mo
+                  DATADIRNAME=lib])
+               INSTOBJEXT=.mo
+             fi
+           fi
+       ])
+
+        if test "$CATOBJEXT" = "NONE"; then
+         AC_MSG_CHECKING([whether catgets can be used])
+         AC_ARG_WITH(catgets,
+           [  --with-catgets          use catgets functions if available],
+           nls_cv_use_catgets=$withval, nls_cv_use_catgets=no)
+         AC_MSG_RESULT($nls_cv_use_catgets)
+
+         if test "$nls_cv_use_catgets" = "yes"; then
+           dnl No gettext in C library.  Try catgets next.
+           AC_CHECK_LIB(i, main)
+           AC_CHECK_FUNC(catgets,
+             [AC_DEFINE(HAVE_CATGETS)
+              INTLOBJS="\$(CATOBJS)"
+              AC_PATH_PROG(GENCAT, gencat, no)dnl
+              if test "$GENCAT" != "no"; then
+                AC_PATH_PROG(GMSGFMT, gmsgfmt, no)
+                if test "$GMSGFMT" = "no"; then
+                  AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt,
+                   [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)
+                fi
+                AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+                  [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+                USE_INCLUDED_LIBINTL=yes
+                CATOBJEXT=.cat
+                INSTOBJEXT=.cat
+                DATADIRNAME=lib
+                INTLDEPS='$(top_builddir)/intl/libintl.a'
+                INTLLIBS=$INTLDEPS
+                LIBS=`echo $LIBS | sed -e 's/-lintl//'`
+                nls_cv_header_intl=intl/libintl.h
+                nls_cv_header_libgt=intl/libgettext.h
+              fi])
+         fi
+        fi
+
+        if test "$CATOBJEXT" = "NONE"; then
+         dnl Neither gettext nor catgets in included in the C library.
+         dnl Fall back on GNU gettext library.
+         nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        INTLOBJS="\$(GETTOBJS)"
+        AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+         [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
+        AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+        AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+         [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+        AC_SUBST(MSGFMT)
+       USE_INCLUDED_LIBINTL=yes
+        CATOBJEXT=.gmo
+        INSTOBJEXT=.mo
+        DATADIRNAME=share
+       INTLDEPS='$(top_builddir)/intl/libintl.a'
+       INTLLIBS=$INTLDEPS
+       LIBS=`echo $LIBS | sed -e 's/-lintl//'`
+        nls_cv_header_intl=intl/libintl.h
+        nls_cv_header_libgt=intl/libgettext.h
+      fi
+
+      dnl Test whether we really found GNU xgettext.
+      if test "$XGETTEXT" != ":"; then
+       dnl If it is no GNU xgettext we define it as : so that the
+       dnl Makefiles still can work.
+       if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+         : ;
+       else
+         AC_MSG_RESULT(
+           [found xgettext programs is not GNU xgettext; ignore it])
+         XGETTEXT=":"
+       fi
+      fi
+
+      # We need to process the po/ directory.
+      POSUB=po
+    else
+      DATADIRNAME=share
+      nls_cv_header_intl=intl/libintl.h
+      nls_cv_header_libgt=intl/libgettext.h
+    fi
+
+    # If this is used in GNU gettext we have to set USE_NLS to `yes'
+    # because some of the sources are only built for this goal.
+    if test "$PACKAGE" = gettext; then
+      USE_NLS=yes
+      USE_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl These rules are solely for the distribution goal.  While doing this
+    dnl we only have to keep exactly one list of the available catalogs
+    dnl in configure.in.
+    for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATALOGS)
+    AC_SUBST(CATOBJEXT)
+    AC_SUBST(DATADIRNAME)
+    AC_SUBST(GMOFILES)
+    AC_SUBST(INSTOBJEXT)
+    AC_SUBST(INTLDEPS)
+    AC_SUBST(INTLLIBS)
+    AC_SUBST(INTLOBJS)
+    AC_SUBST(POFILES)
+    AC_SUBST(POSUB)
+  ])
+
+AC_DEFUN(AM_GNU_GETTEXT,
+  [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+   AC_REQUIRE([AC_PROG_CC])dnl
+   AC_REQUIRE([AC_PROG_RANLIB])dnl
+   AC_REQUIRE([AC_ISC_POSIX])dnl
+   AC_REQUIRE([AC_HEADER_STDC])dnl
+   AC_REQUIRE([AC_C_CONST])dnl
+   AC_REQUIRE([AC_C_INLINE])dnl
+   AC_REQUIRE([AC_TYPE_OFF_T])dnl
+   AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+   AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+   AC_REQUIRE([AC_FUNC_MMAP])dnl
+
+   AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
+unistd.h values.h sys/param.h])
+   AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
+__argz_count __argz_stringify __argz_next])
+
+   if test "${ac_cv_func_stpcpy+set}" != "set"; then
+     AC_CHECK_FUNCS(stpcpy)
+   fi
+   if test "${ac_cv_func_stpcpy}" = "yes"; then
+     AC_DEFINE(HAVE_STPCPY)
+   fi
+
+   AM_LC_MESSAGES
+   AM_WITH_NLS
+
+   if test "x$CATOBJEXT" != "x"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       AC_MSG_CHECKING(for catalogs to be installed)
+       NEW_LINGUAS=
+       for lang in ${LINGUAS=$ALL_LINGUAS}; do
+         case "$ALL_LINGUAS" in
+          *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
+         esac
+       done
+       LINGUAS=$NEW_LINGUAS
+       AC_MSG_RESULT($LINGUAS)
+     fi
+
+     dnl Construct list of names of catalog files to be constructed.
+     if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+   dnl Determine which catalog format we have (if any is needed)
+   dnl For now we know about two different formats:
+   dnl   Linux libc-5 and the normal X/Open format
+   test -d intl || mkdir intl
+   if test "$CATOBJEXT" = ".cat"; then
+     AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
+
+     dnl Transform the SED scripts while copying because some dumb SEDs
+     dnl cannot handle comments.
+     sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
+   fi
+   dnl po2tbl.sed is always needed.
+   sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
+     $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
+
+   dnl In the intl/Makefile.in we have a special dependency which makes
+   dnl only sense for gettext.  We comment this out for non-gettext
+   dnl packages.
+   if test "$PACKAGE" = "gettext"; then
+     GT_NO="#NO#"
+     GT_YES=
+   else
+     GT_NO=
+     GT_YES="#YES#"
+   fi
+   AC_SUBST(GT_NO)
+   AC_SUBST(GT_YES)
+
+   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+   dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
+   dnl Try to locate is.
+   MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   AC_SUBST(MKINSTALLDIRS)
+
+   dnl *** For now the libtool support in intl/Makefile is not for real.
+   l=
+   AC_SUBST(l)
+
+   dnl Generate list of files to be processed by xgettext which will
+   dnl be included in po/Makefile.
+   test -d po || mkdir po
+   if test "x$srcdir" != "x."; then
+     if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
+       posrcprefix="$srcdir/"
+     else
+       posrcprefix="../$srcdir/"
+     fi
+   else
+     posrcprefix="../"
+   fi
+   rm -f po/POTFILES
+   sed -e "/^#/d" -e "/^\$/d" -e "s,.*,        $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
+       < $srcdir/po/POTFILES.in > po/POTFILES
+  ])
diff --git a/config/hack-gcc b/config/hack-gcc
new file mode 100755 (executable)
index 0000000..26b2329
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh 
+# This is hack-gcc, an ugly hack to force gcc to recompile without
+# optimization when an error occurs. It is meant as wrapper around gcc
+# that works around compiler bugs when optimization is on . Do what
+# you want with this code.  
+
+# Author Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr)
+
+ARGS=`echo "$*" | sed -e 's/\"/\\\"/g`
+
+if test "x$ARGS" = x ; then
+  echo "usage: $0 [gcc name] [normal gcc options]"
+  exit 0
+fi
+
+if eval "$ARGS" ; then
+  exit 0
+else
+  echo "$0: an error occurred, retrying without optimization." >&2
+  eval `echo $ARGS | sed -e 's/-O[0-9]*//'`
+fi
diff --git a/config/install-sh b/config/install-sh
new file mode 100755 (executable)
index 0000000..0ff4b6a
--- /dev/null
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+#
+# install - install a program, script, or datafile
+# This comes from X11R5; it is not part of GNU.
+#
+# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
+#
+# 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}"
+
+instcmd="$mvprog"
+chmodcmd=""
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           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;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+fi
+
+if [ x"$dst" = x ]
+then
+       echo "install:  no destination specified"
+       exit 1
+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`
+fi
+
+# Make a temp file name in the proper directory.
+
+dstdir=`dirname $dst`
+dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+$doit $instcmd $src $dsttmp
+
+# and set any options; do chmod last to preserve setuid bits
+
+if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi
+if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi
+if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi
+if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi
+
+# Now rename the file to the real destination.
+
+$doit $rmcmd $dst
+$doit $mvcmd $dsttmp $dst
+
+
+exit 0
diff --git a/config/lcmessage.m4 b/config/lcmessage.m4
new file mode 100644 (file)
index 0000000..d94fc33
--- /dev/null
@@ -0,0 +1,14 @@
+# Check whether LC_MESSAGES is available in <locale.h>.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# serial 1
+
+AC_DEFUN(AM_LC_MESSAGES,
+  [if test $ac_cv_header_locale_h = yes; then
+    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      AC_DEFINE(HAVE_LC_MESSAGES)
+    fi
+  fi])
diff --git a/config/lib_configure.m4 b/config/lib_configure.m4
new file mode 100644 (file)
index 0000000..e2cd1bb
--- /dev/null
@@ -0,0 +1,354 @@
+#! /bin/sh
+dnl Use 'make' to create configure from this m4 script.
+# This script is a hand-made configure script. It contains a lot of
+# code stolen from GNU autoconf. I removed all the code that was not
+# useful for configuring a LyX installation.
+
+
+dnl ######### Begin M4 macros #########################################
+dnl This is a template for my stripped-down configure script.
+dnl First, a few convenient macros.
+changequote([,])dnl
+dnl
+dnl
+dnl MSG_CHECKING(FEATURE-DESCRIPTION,PREFIX)
+dnl
+define(MSG_CHECKING,
+[echo $ac_n "$2checking $1""... $ac_c"])dnl
+dnl
+dnl
+dnl MSG_RESULT(RESULT-DESCRIPTION)
+dnl
+define(MSG_RESULT,
+[echo "$ac_t""$1"])dnl
+dnl
+dnl
+dnl SEARCH_PROG(FEATURE-DESCRIPTION,VARIABLE-NAME,PROGRAMS-LIST,
+dnl             ACTION-IF-FOUND,ACTION-IF-NOT-FOUND)
+dnl
+define(SEARCH_PROG,[dnl
+changequote([,])dnl
+MSG_CHECKING($1)
+MSG_RESULT()
+$2=
+for ac_prog in $3
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$[2]
+if test -n "$ac_word"; then
+  MSG_CHECKING([for \"$ac_word\"],[+])
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x [$ac_dir/$ac_word]; then
+      $2="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "[$]$2"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  ifelse($4,,,[$4])
+  MSG_RESULT($ac_result)
+  test -n "[$]$2" && break
+fi
+done
+
+if test -z "[$]$2" ; then
+  $2=none
+ifelse($5,,,[  $5
+])dnl
+fi
+changequote(,)dnl
+])dnl
+dnl
+dnl
+dnl PROVIDE_DEFAULT_FILE(FILE, DEFAULT-VALUE)
+dnl
+define(PROVIDE_DEFAULT_FILE,[dnl
+# if $1 does not exist (because LaTeX did not run), 
+# then provide a standard version.
+if test ! -f $1 ; then
+  cat >$1 <<EOF
+$2
+EOF
+fi])
+changequote(,)dnl
+dnl ######### End M4 macros #############################################
+
+
+####some configuration variables
+lyx_check_config=yes
+lyx_keep_temps=no
+srcdir=
+
+#### Parse the command line
+for ac_option do
+  case "$ac_option" in
+    -help | --help | -h)
+      cat << EOF
+Usage: configure [options] 
+Options: 
+  --help                   show this help lines
+  --keep-temps             keep temporary files (for debug. purposes)
+  --without-latex-config   do not run LaTeX to determine configuration
+EOF
+      exit 0;;
+    --without-latex-config)
+      lyx_check_config=no ;;
+    --keep-temps)
+      lyx_keep_temps=yes ;;
+  esac 
+done
+
+
+#### Checking for some echo oddities
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+#### I do not really know why this is useful, but we might as well keep it.
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+
+#### Guess the directory in which configure is located.
+changequote([,])dnl
+ac_prog=[$]0
+changequote(,)dnl
+srcdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` 
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+test "x$srcdir" = "x$ac_prog" && srcdir=.
+if test ! -r ${srcdir}/chkconfig.ltx ; then
+  echo "configure: error: cannot find chkconfig.ltx script"
+  exit 1
+fi
+
+
+#### Create the build directories if necessary
+for dir in bind doc kbd layouts templates reLyX ; do
+  test ! -d $dir && mkdir $dir
+done
+
+
+#### Searching some useful programs
+define(CHECKLATEX2E,[
+## Check whether this is really LaTeX2e
+rm -f chklatex.ltx
+cat >chklatex.ltx <<EOF
+\\nonstopmode\\makeatletter
+\\ifx\\undefined\\documentclass\\else
+  \\message{ThisIsLaTeX2e}
+\\fi
+\\@@end
+EOF
+if eval ${LATEX} chklatex.ltx </dev/null 2>/dev/null \
+                       | grep 'ThisIsLaTeX2e' >/dev/null; then
+  :
+else
+  LATEX=
+  ac_result="not useable"
+fi
+rm -f chklatex.ltx chklatex.log])dnl
+dnl
+# Search LaTeX2e
+SEARCH_PROG([for a LaTeX2e program],LATEX,latex latex2e,CHECKLATEX2E,dnl
+  [lyx_check_config=no])
+
+# Search for an installed reLyX or a ready-to-install one
+save_PATH=${PATH}
+PATH=${PATH}:./reLyX/
+SEARCH_PROG([for reLyX LaTeX-to-LyX translator],RELYX,reLyX)
+PATH=${save_PATH}
+
+# Search something to process a literate document
+SEARCH_PROG([for a Literate programming processor],LITERATE,"noweave -delay -index")
+if test "$LITERATE" = "none"; then LITERATE_EXT="none"; else LITERATE_EXT=".nw"; fi
+
+# Search for a Postscript interpreter
+SEARCH_PROG([for a Postscript interpreter],GS, gs)
+
+# Search something to preview postscript
+SEARCH_PROG([for a Postscript previewer],GHOSTVIEW,gv ghostview)
+
+# Search a *roff program (used to translate tables in ASCII export)
+SEARCH_PROG([for a *roff formatter],ROFF,groff nroff)
+ascii_roff_command=$ROFF
+test $ROFF = "groff" && ascii_roff_command="groff -t -Tlatin1 \$\$FName"
+test $ROFF = "nroff" && ascii_roff_command="tbl \$\$FName | nroff"
+
+# Search the ChkTeX program
+SEARCH_PROG([for ChkTeX],CHKTEX,chktex)
+chktex_command=$CHKTEX
+test $CHKTEX = "chktex" && chktex_command="$CHKTEX -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38"
+
+# Search for a spellchecker
+SEARCH_PROG([for a spell-checker], SPELL,ispell)
+
+# Search a Fax handling program
+SEARCH_PROG([for a fax driver], FAX, sendfax faxsend fax)
+if test $FAX = sendfax ; then
+  fax_command="sendfax -n -h '\$\$Host' -c '\$\$Comment' -x '\$\$Enterprise' -d '\$\$Name'@'\$\$Phone' '\$\$FName'"
+elif test $FAX = faxsend ; then
+  fax_command="faxsend '\$\$Phone' '\$\$FName'"
+elif test $FAX = fax ; then
+  fax_command="fax send '\$\$Phone' '\$\$FName'"
+else
+  fax_command="none"
+fi
+
+# Search for LinuxDoc support
+SEARCH_PROG([for SGML-tools 1.x (LinuxDoc)], LINUXDOC, sgml2lyx)
+chk_linuxdoc=no
+if test $LINUXDOC != none; then
+  chk_linuxdoc=yes
+  linuxdoc_cmd="\\def\\haslinuxdoc{yes}"
+fi
+
+# Search for DocBook support
+SEARCH_PROG([for SGML-tools 2.x (DocBook)], DOCBOOK, sgmltools)
+chk_docbook=no
+if test $DOCBOOK != none; then
+  chk_docbook=yes
+  docbook_cmd="\\def\\hasdocbook{yes}"
+fi
+
+
+# Search for a spool command
+SEARCH_PROG([for a spool command], LPR, lp lpr)
+case $LPR in
+  lp) print_spool_command=lp
+      print_spool_printerprefix="-d ";;
+ lpr) print_spool_command=lpr
+      print_spool_printerprefix="-P";;
+   *) :;; # leave to empty values
+esac
+
+#### Explore the LaTeX configuration
+MSG_CHECKING(LaTeX configuration)
+# First, remove the files that we want to re-create
+rm -f textclass.lst packages.lst chkconfig.sed
+if test ${lyx_check_config} = no ; then
+  MSG_RESULT(default values)
+else
+  MSG_RESULT(auto)
+  rm -f wrap_chkconfig.ltx chkconfig.vars chkconfig.classes chklayouts.tex
+  cat >wrap_chkconfig.ltx <<EOF
+\\newcommand\\srcdir{${srcdir}}
+${linuxdoc_cmd}
+${docbook_cmd}
+\\input{${srcdir}/chkconfig.ltx}
+EOF
+  ## Construct the list of classes to test for.
+  # build the list of available layout files and convert it to commands 
+  # for chkconfig.ltx 
+  for file in ./layouts/*.layout ${srcdir}/layouts/*.layout ; do 
+    case $file in
+      */\*.layout) ;;
+      *) echo $file ;;
+    esac
+  done | sed -e 's%^.*layouts/\(.*\)\.layout$%\\TestDocClass{\1}%'\
+             > chklayouts.tex
+changequote([,])dnl
+  [eval] ${LATEX} wrap_chkconfig.ltx 2>/dev/null | grep '^\+'
+  [eval] `cat chkconfig.vars | sed 's/-/_/g'`
+changequote(,)dnl
+fi
+
+# Do we have all the files we need? Useful if latex did not run
+changequote([,])dnl
+echo creating textclass.lst 
+PROVIDE_DEFAULT_FILE(textclass.lst,dnl
+[# This file declares layouts and their associated definition files
+# (include dir. relative to the place where this file is).
+# It contains only default values, since chkconfig.ltx could not be run 
+# for some reason. Run ./configure if you need to update it after a
+# configuration change.  
+article        article article
+report report  report
+book   book    book
+linuxdoc       linuxdoc        linuxdoc
+letter letter  letter])
+
+PROVIDE_DEFAULT_FILE(chkconfig.sed,[s/@.*@/???/g])
+
+echo creating packages.lst
+PROVIDE_DEFAULT_FILE(packages.lst,dnl
+[# This file should contain the list of LaTeX packages that have been
+# recognized by LyX. Unfortunately, since configure could not find
+# your LaTeX2e program, the tests have not been run. Run ./configure
+# if you need to update it after a configuration change.
+])
+changequote(,)dnl
+
+echo creating doc/LaTeXConfig.lyx
+echo "s/@chk_linuxdoc@/$chk_linuxdoc/g" >> chkconfig.sed
+echo "s/@chk_docbook@/$chk_docbook/g" >> chkconfig.sed
+sed -f chkconfig.sed ${srcdir}/doc/LaTeXConfig.lyx.in >doc/LaTeXConfig.lyx
+
+echo creating lyxrc.defaults
+rm -f lyxrc.defaults
+cat >lyxrc.defaults <<EOF
+# This file has been automatically generated by LyX' lib/configure
+# script. It contains default settings that have been determined by
+# examining your system. PLEASE DO NOT MODIFY ANYTHING HERE! If you
+# want to customize LyX, make a copy of the file LYXDIR/lyxrc as
+# ~/.lyx/lyxrc and edit this file instead. Any setting in lyxrc will
+# override the values given here.
+\\latex_command "$LATEX"
+\\relyx_command "$RELYX"
+\\literate_command "$LITERATE"
+\\literate_extension "$LITERATE_EXT"
+\\ps_command "$GS"
+\\view_ps_command "$GHOSTVIEW -swap"
+\\view_pspic_command "$GHOSTVIEW"
+\\ascii_roff_command "$ascii_roff_command"
+\\chktex_command "$chktex_command"
+\\spell_command "$SPELL"
+\\fax_command "$fax_command"
+\\print_spool_command "$print_spool_command"
+\\print_spool_printerprefix "$print_spool_printerprefix"
+\\font_encoding "$chk_fontenc"
+EOF
+
+# Remove superfluous files if we are not writing in the main lib
+# directory 
+for file in lyxrc.defaults textclass.lst packages.lst \
+            doc/LaTeXConfig.lyx ; do
+  # we rename the file first, so that we avoid comparing a file with itself
+  mv $file $file.new
+  if test -r $srcdir/$file && diff $file.new $srcdir/$file >/dev/null 2>/dev/null ; 
+  then 
+    echo "removing $file, which is identical to the system global version"
+    rm -f $file.new
+  else
+    mv $file.new $file
+  fi
+done
+
+
+# Final clean-up
+if test $lyx_keep_temps = no ; then
+rm -f chkconfig.sed chkconfig.vars wrap_chkconfig.* chklayouts.tex \
+      missfont.log
+fi
diff --git a/config/missing b/config/missing
new file mode 100755 (executable)
index 0000000..7789652
--- /dev/null
@@ -0,0 +1,190 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997 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
+
+case "$1" in
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing - GNU libit 0.0"
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+  aclocal)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acinclude.m4' or \`configure.in'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`configure.in'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acconfig.h' or \`configure.in'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in`
+    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.in'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.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/config/mkinstalldirs b/config/mkinstalldirs
new file mode 100755 (executable)
index 0000000..cd1fe0a
--- /dev/null
@@ -0,0 +1,32 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+
+for file
+do
+   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+   shift
+
+   pathcomp=
+   for d in ${1+"$@"} ; do
+     pathcomp="$pathcomp$d"
+     case "$pathcomp" in
+       -* ) pathcomp=./$pathcomp ;;
+     esac
+
+     if test ! -d "$pathcomp"; then
+        echo "mkdir $pathcomp" 1>&2
+        mkdir "$pathcomp" || errstatus=$?
+     fi
+
+     pathcomp="$pathcomp/"
+   done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/config/progtest.m4 b/config/progtest.m4
new file mode 100644 (file)
index 0000000..13a85fa
--- /dev/null
@@ -0,0 +1,42 @@
+# Search path for a program which passes the given test.
+# Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+# serial 1
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN(AM_PATH_PROG_WITH_TEST,
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  /*)
+  ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in ifelse([$5], , $PATH, [$5]); do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if [$3]; then
+       ac_cv_path_$1="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+  ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test -n "[$]$1"; then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
diff --git a/configure.cmd b/configure.cmd
new file mode 100755 (executable)
index 0000000..267e1c1
--- /dev/null
@@ -0,0 +1,258 @@
+/* OS/2 REXX : The top level configure.cmd; Don't delete this comment. */
+call RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs'
+call SysLoadFuncs
+intl='yes'
+latexconfig='yes'
+extraopt=''
+static='no'
+optionsread=0
+parse arg option1 option2 option3 gabbages
+if (option1='--disable-nls')|(option2='--disable-nls')|(option3='--disable-nls') then
+  do
+    optionsread=optionsread+1
+    intl='no'
+  end
+if (option1='--with-extra-optimize')|(option2='--with-extra-optimize')|(option3='--with-extra-optimize') then
+  do
+    optionsread=optionsread+1
+    '@gcc -v 2>&1|grep 2.7'
+    if rc=0 then
+      extraopt='-malign-loops=2 -malign-jumps=2 -malign-functions=2 -ffast-math'
+  end
+if (option1='--link-static-xforms')|(option2='--link-static-xforms')|(option3='--link-static-xforms') then
+  do
+    optionsread=optionsread+1
+    static='yes'
+  end
+if \(gabbages='')|(\(option3='')&(optionsread<3))|(\(option2='')&(optionsread<2))|(\(option1='')&(optionsread<1)) then
+  do
+    say 'Unknown option! Use only: --with-extra-optimize --disable-nls --link-static-xforms'
+    exit
+  end
+
+env='OS2ENVIRONMENT'
+X11ROOT=value('X11ROOT',,env)
+
+/* I don't think I know how to substitute all the occurences    *
+ * of a substring to something else with REXX comes with Warp3. *
+ * Of course Object REXX has ANSI function changestr            */
+curdir=directory()
+do until pos('\',curdir)=0
+  parse var curdir tmp1 '\' tmp2
+  curdir=tmp1'#/'tmp2
+end
+curdir=translate(curdir,'\','#')
+
+os2config.1='@prefix@ 'X11ROOT'\/XFree86'
+os2config.2='@exec_prefix@ 'subword(os2config.1,2)
+os2config.3='@srcdir@ 'curdir
+os2config.4='@top_srcdir@ 'subword(os2config.3,2)
+os2config.5='@bindir@ 'subword(os2config.2,2)'\/bin'
+os2config.6='@libdir@ 'subword(os2config.2,2)'\/lib'
+os2config.7='@datadir@ 'subword(os2config.2,2)'\/lib'
+os2config.8='@mandir@ 'subword(os2config.1,2)'\/man'
+os2config.9='@CPPIMPLFLAGS@ -I'subword(os2config.1,2)'\/include'
+os2config.10='@program_suffix@'
+os2config.11='@lyx_devel_version@ $(lyx_devel_version)'
+os2config.12='@PACKAGE@ lyx'
+os2config.13='@DATADIRNAME@ lib'
+
+contains=0
+do until contains > 0
+  testversion=linein('src/version.h')
+  contains=pos('#define LYX_VERSION', testversion)
+end
+os2config.14='@LYX_VERSION@ 'strip(subword(testversion,3,1),,'"')
+os2config.15='@VERSION@ 'subword(os2config.14,2)
+
+CXXFLAGS=value('CXXFLAGS',,env)
+if CXXFLAGS='' then
+  do
+    CXXFLAGS='-g -m486 -O -fno-strength-reduce -Zmtd -Zsysv-signals -D__ST_MT_ERRNO__ -Wall -Wno-unused'
+    '@gcc -v 2>&1|grep 2.8'
+    if rc=0 then
+      CXXFLAGS=CXXFLAGS' -fno-exceptions -fno-rtti'
+  end
+CFLAGS=value('CFLAGS',,env)
+if CFLAGS='' then
+  CFLAGS='-g -m486 -O2 -fno-strength-reduce -Zmtd -Zsysv-signals -D__ST_MT_ERRNO__ -Wall -Wno-unused'
+/* extraopt is added to CXXFLAGS/CFLAGS even if the environment variable is set */
+CXXFLAGS=CXXFLAGS' 'extraopt
+CFLAGS=CFLAGS' 'extraopt
+os2config.16='@CXXFLAGS@ 'CXXFLAGS
+os2config.17='@CFLAGS@ 'CFLAGS
+
+os2config.18='@CC@ gcc'
+os2config.19='@CXX@ gcc'   /* os2config.12='@CXX@ g++' */
+os2config.20='@RANLIB@ ar s'
+if static='yes' then
+  os2config.21='@LYX_LIBS@ -lforms_s -lulib -lXpm'
+else
+  os2config.21='@LYX_LIBS@ -lforms -lXpm'
+os2config.22='@LIBS@ -lSM -lICE -lX11 -lsocket'
+
+if opt='yes' then
+  do
+    os2config.23='@LDFLAGS@ -Zmtd -Zsysv-signals -Zbin-files -s -lwrap -L'subword(os2config.6,2)
+  end
+else
+  do
+    os2config.23='@LDFLAGS@ -Zmtd -Zsysv-signals -Zbin-files -L'subword(os2config.6,2)
+  end
+
+os2config.24='@CPPFLAGS@ -I'subword(os2config.1,2)'\/include -I..\/intl'
+os2config.25='@SET_MAKE@'  /* ??? */
+os2config.26='@CXX_COMMAND@ gcc.exe'
+
+/* Full path is given in order to distinguish it from IBM install. */
+os2config.27='@INSTALL@ 'subword(os2config.5,2)'\/install'
+os2config.28='@INSTALL_DATA@ 'subword(os2config.5,2)'\/install'
+os2config.29='@INSTALL_PROGRAM@ 'subword(os2config.5,2)'\/install'
+os2config.30='@INSTALL_TARGET@ install-os2'
+os2config.31='@LIBOBJS@'
+if intl='yes' then
+  do
+    os2config.32='@INTLLIBS@ ..\/intl\/libintl.a'
+    os2config.33='@INTLSUB@ intl'
+    os2config.34='@POSUB@'     /* os2config.27='@POSUB@ po' */
+    os2config.35='@USE_INCLUDED_LIBINTL@ yes'
+  end
+else
+  do
+    os2config.32='@INTLLIBS@'
+    os2config.33='@INTLSUB@'
+    os2config.34='@POSUB@'
+    os2config.35='@USE_INCLUDED_LIBINTL@'
+  end
+os2config.36='@INTLOBJS@'
+os2config.37='@DEFS@'
+os2config.38='@program_transform_name@'
+os2config.39='@l@'
+os2config.40='@EXEEXT@ .exe'
+os2config.41='@PERL@ perl'
+os2config.42='@LYX_DIR@ $ENV{X11ROOT}\/XFree86\/lib\/X11\/lyx'
+os2config.0=42
+
+rc=SysFileDelete('os2config.sed')
+do i=1 to os2config.0
+  parse var os2config.i from_string to_string
+  rc=lineout('os2config.sed','s/'from_string'/'to_string'/g')
+end
+if devel='no' then
+  rc=lineout('os2config.sed','s/lyx_devel_version = yes/lyx_devel_version = no/')
+rc=lineout('os2config.sed','s/#undef HAVE_ALLOCA$/#define HAVE_ALLOCA 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_ALLOCA_H/#define HAVE_ALLOCA_H 1/')
+rc=lineout('os2config.sed','s/#undef STDC_HEADERS/#define STDC_HEADERS 1/')
+rc=lineout('os2config.sed','s/#undef PACKAGE/#define PACKAGE \"lyx\"/')
+rc=lineout('os2config.sed','s/#undef VERSION/#define VERSION \"'subword(os2config.14,2)'\"/')
+rc=lineout('os2config.sed','s/#undef HAVE_GETCWD/#define HAVE_GETCWD 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_GETPAGESIZE/#define HAVE_GETPAGESIZE 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_MEMMOVE/#define HAVE_MEMMOVE 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_MEMSET/#define HAVE_MEMSET 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_PUTENV/#define HAVE_PUTENV 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_SETLOCALE/#define HAVE_SETLOCALE 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_XOPENIM/#define HAVE_XOPENIM 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_STRCHR/#define HAVE_STRCHR 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_STRERROR/#define HAVE_STRERROR 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_DIRENT_H/#define HAVE_DIRENT_H 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_ERRNO_H/#define HAVE_ERRNO_H 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_LIMITS_H/#define HAVE_LIMITS_H 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_LOCALE_H/#define HAVE_LOCALE_H 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_MALLOC_H/#define HAVE_MALLOC_H 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_STRING_H/#define HAVE_STRING_H 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_SYS_DIR_H/#define HAVE_SYS_DIR_H 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_SYS_SELECT_H/#define HAVE_SYS_SELECT_H 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_SYS_TIME_H/#define HAVE_SYS_TIME_H 1/')
+rc=lineout('os2config.sed','s/#undef HAVE_UNISTD_H/#define HAVE_UNISTD_H 1/')
+rc=lineout('os2config.sed','s/#undef XPM_H_LOCATION/#define XPM_H_LOCATION <X11\/xpm.h>/')
+rc=lineout('os2config.sed','s/#undef FORMS_H_LOCATION/#define FORMS_H_LOCATION <forms.h>/')
+rc=lineout('os2config.sed','s/#undef SIZEOF_INT/#define SIZEOF_INT 4/')
+rc=lineout('os2config.sed','s/#undef SIZEOF_VOID_P/#define SIZEOF_VOID_P 4/')
+rc=lineout('os2config.sed','s/#undef HAVE_bool/#define HAVE_bool 1/')
+rc=lineout('os2config.sed','s/#undef SELECT_TYPE_ARG1/#define SELECT_TYPE_ARG1 (int)/')
+rc=lineout('os2config.sed','s/#undef SELECT_TYPE_ARG234/#define SELECT_TYPE_ARG234 (fd_set *)/')
+rc=lineout('os2config.sed','s/#undef SELECT_TYPE_ARG5/#define SELECT_TYPE_ARG5 (struct timeval *)/')
+rc=lineout('os2config.sed','s/#undef WITH_WARNINGS/#define WITH_WARNINGS 1/')
+if devel='yes' then
+rc=lineout('os2config.sed','s/#undef DEVEL_VERSION/#define DEVEL_VERSION 1/')
+rc=lineout('os2config.sed','s/SHELL/#SHELL/')
+rc=lineout('os2config.sed','s/SCRIPT_SUFFIX=/SCRIPT_SUFFIX=.cmd/')
+rc=lineout('os2config.sed','s/^DEFS = -DLOCALEDIR/DEFS = -DHAVE_CONFIG_H=1 -DLOCALEDIR/')
+if intl='yes' then
+rc=lineout('os2config.sed','s/#undef ENABLE_NLS/#define ENABLE_NLS 1/')
+/*
+rc=lineout('os2config.sed','s/  for [^ ]* in / -for %1 in (/')
+rc=lineout('os2config.sed','s/; do /) do /')
+*/
+rc=lineout('os2config.sed','s/(cd lib && $(MAKE) install)/(cd lib && $(MAKE) os2install)/')
+rc=lineout('os2config.sed','s/ln -s/cp/g')
+rc=lineout('os2config.sed','s/-o lyx /-o lyx.exe /')
+rc=lineout('os2config.sed','s/$(INSTALL_PROGRAM) reLyX\/reLyX $(bindir)\/reLyX/$(INSTALL_PROGRAM) reLyX\/reLyX.cmd $(bindir)\/reLyX.cmd/')
+rc=lineout('os2config.sed','s/"reLyX /"reLyX.cmd /')
+rc=lineout('os2config.sed')   /* Close the file */
+
+/* Test if xforms and Xpm are available. */
+rc=SysFileTree(X11ROOT'\XFree86\lib\forms.a',found,'F')
+if found.0 = 0 then
+  say "Can't find forms.a. Please check that the xforms library is correctly installed on your system."
+rc=SysFileTree(X11ROOT'\XFree86\lib\Xpm.a',found,'F')
+if found.0 = 0 then
+  say "Can't find Xpm.a. Please check that the Xpm library is correctly installed on your system."
+
+'touch config.status'
+'touch config/stamp-h.in'
+'sed -f os2config.sed Makefile.in > Makefile'
+'sed -f os2config.sed lib/Makefile.in > lib\Makefile'
+'sed -f os2config.sed src/Makefile.in > src\Makefile'
+'sed -f os2config.sed src/config.h.in > src\config.h'
+if intl='yes' then
+  call SysFileTree 'intl\intlh.inst','patched','F'
+  if patched.0 = 0 then
+  /* Figure out how GNU patch program is called here */
+  /* If run without arguments,
+     GNU patch emits "usage" into stderr and none into stdout, and
+     IBM patch emits nothing into stderr and an error message "SYS1575..." into stdout
+  */
+  do
+    do
+    '@patch 2>&1 | grep SYS1575 >nul'
+    if rc=0 then
+      do
+        say 'configure tries to run GNU patch with the command "patch"'
+        say 'and detects IBM patch instead.  Please type the collect'
+        say 'name to invoke GNU patch:'
+        parse pull patch
+      end
+    else patch='patch'
+        patch' -d intl<development\OS2\gnugettext.diff'
+        'touch intl/intlh.inst'
+        'cp intl/libgettext.h intl/libintl.h'
+    'sed -f os2config.sed intl/Makefile.in > intl\Makefile'
+    end
+  end
+'cd lib'
+/* Check if perl 5.002 or later is available */
+PERL=SysSearchPath('PATH', 'perl.exe')
+if PERL='' then PERL=SysSearchPath('PATH', 'perl_.exe')
+if PERL='' then PERL=SysSearchPath('PATH', 'perl__.exe')
+if PERL='' then PERL=SysSearchPath('PATH', 'perl___.exe')
+PERL ' -e "require 5.002"'
+if rc=0 then
+  do
+    call SysFileDelete 'reLyX\reLyX.cmd'
+    rc=lineout('reLyX\reLyX.cmd','extproc 'filespec("name",PERL)' -S')
+    rc=lineout('reLyX\reLyX.cmd')
+    'sed -f ../os2config.sed reLyX/reLyX.in >> reLyX\reLyX.cmd'
+    rc=SysFileTree('reLyX\reLyXmain.pl.in',found,'F')
+    if found.0 = 0 then
+      'cmd /c copy reLyX\reLyXmain.pl reLyX\reLyXmain.pl.in'
+    'sed -e "s/noweb2lyx/noweb2lyx.cmd/" reLyX/reLyXmain.pl.in > reLyX\reLyXmain.pl'
+    call SysFileDelete 'reLyX\noweb2lyx.cmd'
+    rc=lineout('reLyX\noweb2lyx.cmd','extproc 'filespec("name",PERL)' -S')
+    rc=lineout('reLyX\noweb2lyx.cmd')
+    'sed -f ../os2config.sed reLyX/noweb2lyx.in >> reLyX\noweb2lyx.cmd'
+  end
+/* The extension ".cmd" is added to distinguish it from sh-script */
+/* On single-user OS/2, system wide configuration is normally not necessary */
+'cmd /c configure.cmd --without-latex-config & cd ..'
+\1a
\ No newline at end of file
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..d759e2f
--- /dev/null
@@ -0,0 +1,239 @@
+#! /bin/bash
+dnl Process with autoconf to generate configure script   -*- sh -*-
+
+AC_INIT(src/lyx.C)
+AC_PREREQ(2.13) dnl We want to use autoconf 2.13
+AM_CONFIG_HEADER(src/config.h)
+dnl This is a trick to make autoheader do the right thing
+dnl AM_CONFIG_HEADER(src/config.h)
+AC_CONFIG_AUX_DIR(config)
+LYX_GET_VERSION(${srcdir}/src/version.h)
+
+AC_CANONICAL_SYSTEM
+AC_VALIDATE_CACHE_SYSTEM_TYPE
+
+AM_INIT_AUTOMAKE(lyx, $VERSION)
+
+# The list of languages known to LyX
+# This is needed by GNU gettext
+ALL_LINGUAS="ca cs da de es fi fr hu it nl no pl pt ru sl sv tr wa"
+
+AC_PREFIX_PROGRAM(lyx)
+
+# fix the value of the prefixes.
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+### Set the execute permissions of the various scripts correctly
+for file in config/install-sh config/mkinstalldirs config/hack-gcc \
+            lib/configure ; do
+  chmod 755 ${srcdir}/${file}
+done
+
+### Check for programs
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+AC_PROG_RANLIB
+
+### we will also need a C compiler to compile GNU gettext
+AC_PROG_CC
+
+### check for special systems
+AC_ISC_POSIX
+AC_AIX
+LYX_HPUX
+LYX_SUNOS4
+LYX_SCO
+
+### Check for program extensions (.exe or nothing)
+AC_EXEEXT
+
+### Check for a C++ compiler
+AC_LANG_CPLUSPLUS
+LYX_PROG_CXX
+AC_PROG_CXXCPP
+
+### Compiler Characteristics
+AC_C_CONST
+AC_C_INLINE
+
+### check the size of pointers and ints
+# the defaults are given for cross compilation.
+AC_CHECK_SIZEOF(void *, 4)
+AC_CHECK_SIZEOF(int, 4)
+LYX_CXX_MUTABLE
+LYX_CXX_PARTIAL
+LYX_CXX_EXPLICIT
+LYX_CXX_STL_STACK
+LYX_CXX_STL_STRING
+LYX_CXX_NAMESPACES
+LYX_CXX_RTTI
+
+### check for compiler brokenness
+LYX_GXX_STRENGTH_REDUCE
+
+### Libarary Files
+dnl by testing these we check if it is ok to have
+dnl -lc and -lm as args to the compiler
+AC_CHECK_LIB(m, sin)
+AC_CHECK_LIB(c, fopen)
+
+# A hack to work around gcc compiler errors
+AC_ARG_WITH(gcc-hack,[  --with-gcc-hack         add a wrapper around gcc])
+if test "x$with_gcc_hack" = xyes ; then
+  CXX_COMMAND='${top_srcdir}/config/hack-gcc ${CXX}'
+  lyx_flags="$lyx_flags gcc-hack"
+else
+  CXX_COMMAND='${CXX}'
+fi
+AC_SUBST(CXX_COMMAND)
+
+### Add extra directories to check for libraries.
+LYX_WITH_DIR([extra-lib],[extra library directory],extra_lib, NONE)
+LYX_LOOP_DIR($lyx_cv_extra_lib,LYX_ADD_LIB_DIR(lyx_ldflags,$dir))
+test ! x"$lyx_ldflags" = x && LDFLAGS="$lyx_ldflags $LDFLAGS"
+
+### Add extra directories to check for include files.
+LYX_WITH_DIR([extra-inc],[extra include directory],extra_inc, NONE)
+LYX_LOOP_DIR($lyx_cv_extra_inc,LYX_ADD_INC_DIR(lyx_cppflags,$dir))
+test ! x"$lyx_cppflags" = x && CPPFLAGS="$lyx_cppflags $CPPFLAGS"
+
+### Add both includes and libraries
+LYX_WITH_DIR([extra-prefix],[extra lib+include directory],extra_prefix, NONE, ${prefix})
+LYX_LOOP_DIR($lyx_cv_extra_prefix,[
+LYX_ADD_INC_DIR(CPPFLAGS,$dir/include)
+  LYX_ADD_LIB_DIR(LDFLAGS,$dir/lib)])
+### Check for the -liberty library
+test "x$GXX" = xyes && lyx_use_liberty=yes
+AC_ARG_WITH(liberty,
+  [  --without-liberty       do not try to link against libiberty.a],
+  [lyx_use_liberty=$withval])
+if test x$lyx_use_liberty = xyes; then
+  # AC_CHECK_LIB(iberty,main,LIBS="-liberty $LIBS")
+  AC_CHECK_LIB(iberty,main)
+fi
+
+### Check for X libraries
+# Check for the pt library (for SCO, needed for X)
+AC_CHECK_LIB(pt,ptsname,X_EXTRA_LIBS="-lpt $X_EXTRA_LIBS")
+# The real thing.
+AC_PATH_XTRA
+LIBS="$X_PRE_LIBS $LIBS $X_LIBS -lX11 $X_EXTRA_LIBS"
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+
+## Check whether X is new enough to handle the input method stuff
+AC_CHECK_FUNC(XOpenIM)
+
+### Check for xforms and xpm (only if X has been found).
+if test "$have_x" = yes ; then
+# We surely need these two libraries and want to check carefully the
+# version numbers... 
+LYX_PATH_XPM
+LYX_PATH_XFORMS
+AC_SUBST(LYX_LIBS)
+else
+LYX_ERROR(dnl
+[Cannot find X window libraries and/or headers. Check your installation. 
+   If you use a Linux system, check that you have installed 
+   the development tools.])
+fi
+
+
+### Setup GNU gettext
+dnl GNU gettext is written in C
+AC_LANG_C
+AM_GNU_GETTEXT
+# a hack for those who try to change LyX, but do not have gettext installed 
+case  "${XGETTEXT}" in 
+ *:) XGETTEXT='cp ${srcdir}/lyx.pot ./${PACKAGE}.po ; :'
+esac
+
+AC_SUBST(LINGUAS)
+
+AC_LANG_CPLUSPLUS
+
+# some standard header files
+AC_HEADER_DIRENT
+AC_HEADER_MAJOR
+AC_CHECK_HEADERS(sys/time.h sys/types.h sys/select.h)
+
+# some standard structures
+AC_HEADER_STAT
+AC_HEADER_TIME
+AC_STRUCT_ST_BLKSIZE
+AC_STRUCT_ST_BLOCKS
+AC_STRUCT_ST_RDEV
+
+# some standard types
+AC_TYPE_MODE_T
+AC_TYPE_OFF_T
+AC_TYPE_PID_T
+AC_TYPE_SIGNAL
+AC_TYPE_SIZE_T
+AC_TYPE_UID_T
+
+# some functions we'd like to have
+AC_ARG_WITH(broken-headers,
+    [  --with-broken-headers      define some functions on SunOS4 and SCO],
+    [lyx_broken_headers=$withval])
+if test "x$lyx_broken_headers" = "xyes"; then
+  lyx_flags="$lyx_flags broken-headers"
+  AC_DEFINE(BROKEN_HEADERS, 1,
+    [Define on SunOS 4 and SCO, were some functions are missing from the headers])
+fi
+AC_CHECK_FUNCS(memmove memset strchr putenv setenv mkfifo)
+
+dnl Until this is fixed in autoconf we provide our own version
+LYX_FUNC_SELECT_ARGTYPES
+
+# SunOS 4.1.3 does not have strerror and atexit
+AC_REPLACE_FUNCS(strerror atexit)
+
+dnl This check should be removed. If the compiler does not understand
+dnl bool it is so broken that we should not support it. (Lgb)
+dnl AC_CACHE_CHECK([for bool type],lyx_cv_have_bool,[
+dnl AC_TRY_LINK(, [bool foo = true;], lyx_cv_have_bool=yes,lyx_cv_have_bool=no)])
+dnl if test $lyx_cv_have_bool = 'yes' ; then
+dnl    AC_DEFINE(HAVE_bool,1,
+dnl  [Define if the bool type is known to your compiler])
+dnl fi
+
+### and now some special lyx flags.
+AC_ARG_WITH(two-colors,[  --with-two-colors       use two color pixmaps],
+  [AC_DEFINE(TWO_COLOR_ICONS)
+   lyx_flags="$lyx_flags two-colors"])
+AC_ARG_WITH(debug,[  --with-debug            output debug information by default],
+  [AC_DEFINE(DEBUG_AS_DEFAULT,1,
+    [Define if you want debugging turned on as default.])
+   lyx_flags="$lyx_flags debug"])
+
+### Finish the work.
+AC_CONFIG_SUBDIRS(lib lib/reLyX)
+AC_OUTPUT([Makefile \
+       lib/Makefile \
+       intl/Makefile \
+       po/Makefile.in \
+       src/Makefile \
+       src/mathed/Makefile \
+       src/insets/Makefile \
+],  [sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile])
+
+
+cat <<EOF
+
+Configuration:
+  Source code location:       ${srcdir}
+  C++ Compiler:                   ${CXX}
+  C++ Compiler flags:             ${CXXFLAGS}
+  C   Compiler:                   ${CC}
+  C   Compiler flags:             ${CFLAGS}
+  LyX binary dir:             `eval "echo \`eval \"echo ${bindir}\"\`"`
+  LyX files dir:              `eval "echo \`eval \"echo ${datadir}/${PACKAGE}\"\`"`
+  Special flags:              ${lyx_flags}
+
+EOF
+
+# Display a final warning if there has been a LYX_ERROR
+LYX_CHECK_ERRORS
+
diff --git a/development/Code_rules/Popups b/development/Code_rules/Popups
new file mode 100644 (file)
index 0000000..6a6780e
--- /dev/null
@@ -0,0 +1,67 @@
+Rules for the use of popups
+===========================
+
+We need to have some rules in order to keep LyX enjoyable to use.  This
+document describes the rules for designing popups.  Please obey the rules.
+If you don't do it correctly, somebody else has to fix it for you, and we 
+don't like to waste time because you were lazy.  So, read it now, design 
+your popups, and come back and check if your new popup is in compliance.
+
+Internationalization
+--------------------
+
+We need some rules to be followed so that popups and short-cuts will
+work properly with regard to internationalization and gettext.
+
+We have made a method to make the shortcuts in xforms work correctly with
+internationalizationed shortcuts. We concat the label and the shortcut like 
+this:
+
+       <ident>|<shortcut>  (where <ident> often is a label)
+
+And have made two funcs to extract that info: scex and idex
+(shortcut-extract and ident-extract). To minimize the translation effort 
+you should use stuff like:
+
+       fl_add_object(<params>, idex(_("<ident>|<shortcut>")));
+       fl_set_shortcut(<obj>, scex(_("<ident>|<shortcut>")));
+
+Make sure the two texts are identical, such that gettext will join them.
+
+This will also help use make the labels and shortcuts consistent across 
+all the dialogs.
+
+Some <ident>|<shortcuts> pairs have been decided:
+
+1. Most popups have at least three buttons in common:
+
+       - OK            No shortcut in the usual case (it is a return button)
+       - Apply         "Apply|#A"
+       - Cancel        "Cancel|^[" (This is the escape key)
+                       You can optionally use "Cancel|#C^[" also.
+       - Close         Either return-button, "Close|^[" or "Close|#C^[".
+
+Design rules
+------------
+
+1) Remember that you have to add this function to your form definition:
+
+               fl_set_form_atclose(form, CancelCloseBoxCB, NULL);
+
+   to prevent crashes when the users close the popup with the window manager.
+   You need to #include "lyx_gui_misc.h" to get CancelCloseBoxCB.
+
+More will follow...
+
+NB! If any of the shortcut keys is a part of the label and you want it to
+be underlined in the label, that character must be the _first_ in the
+accelerator string (allthough it may be an alt-key etc). Case _sensitive_.
+  Apply|Pp#p#P     won't get an underlined 'p'
+  Apply|GpaAP      won't either.
+  Apply|aA         nope
+  Apply|pP#p#P     will underline the first 'p'
+  Apply|Aa         will underline the 'A'
+  Apply|#Aa        will also underline the 'A'!
+See the docs for xforms... (fl_set_shortcut() etc)
+It seems xforms .86 doesn't recognise 128+ chars as shortcuts. (not with
+fl_set_shortcut() anyway)  /Joacim
diff --git a/development/Code_rules/Recommendations b/development/Code_rules/Recommendations
new file mode 100644 (file)
index 0000000..b78d292
--- /dev/null
@@ -0,0 +1,63 @@
+These are some rules for effective C++ programming. These are taken from 
+Scott Meyers, and is presented in their short form. These are not all the 
+rules Meyers presents, only the most important of them. LyX does not yet 
+follow these rules, but they should be the goal.
+
+- Use const and inline instead of #define
+
+- Use the same form in corresponding calls to new and delete,
+  i.e. write delete[] obj; if new obj[n]; was used to create
+  the object and write delete obj; if you wrote new obj;
+  Notice strings should be LString's instead of char *'s.
+
+- Define a copy constructor and an assignment operator for all
+  classes with dynamically allocated memory.
+
+- make destructors virtual in base classes.
+
+- assign to all data members in operator=.
+
+- strive for class interfaces that are complete and minimal
+
+- differentiate among member functions, global functions and friend
+  functions.
+
+- avoid data members in the public interface.
+
+- use const whenever possible
+
+- pass and return objects by reference instead of by value
+
+- choose carefully between function overloading and
+  parameter defaulting.
+
+- never return a reference to a local object or a dereferenced
+  pointer initialized by new within the function.
+
+- use enums for integral constants.
+
+- minimize compilation dependencies between files.
+
+- pay attention to compiler warnings
+
+- differentiate between inheritance of interface and
+  inheritance of implementation.
+
+- differentiate between inheritance and templates
+
+- know what functions C++ silently writes and calls.
+
+- ensure that global objects are initialized before they are used.
+
+--------
+
+S. Meyers. Effective C++, 50 Specific Ways to Improve Your Programs and 
+Design. Addison-Wesley, 1992
+
+==================================
+
+And one of mine: (Lgb)
+
+- When swiching on enums, refrain from using "default:" if possible.
+
+
diff --git a/development/Code_rules/Rules b/development/Code_rules/Rules
new file mode 100644 (file)
index 0000000..f065a90
--- /dev/null
@@ -0,0 +1,106 @@
+Rules for the code in LyX
+-------------------------
+
+The aim of this file is to serve as a guide for the developers, to aid us to
+get clean and uniform code. Still uncomplete.
+
+In general, if you want to contribute to the main source, we expect at least 
+that you:
+
+- write good C++ code: Readable, well commented and taking advantage of the 
+  OO model.
+- adapt the code to the structures already existing in LyX, or in case that 
+  you have better ideas, discuss them on the developer's list before writing 
+  the code.
+
+These guidelines should save us a lot of work while cleaning up the code and 
+help us to have quality code. LyX has been haunted by problems coming from 
+unfinished projects by people who have left the team. Those problems will 
+hopefully disappear if the code is easy to hand over to somebody else.
+
+
+* Naming rules for classes
+
+  - Use descriptive but simple and short names. For stuff specific to LyX
+    use LyX as prefix. Some modules, like mathed or spellchecker, could have
+    other prefixes.
+
+  - Class names are usually capitalized, and function names lowercased.
+    Enums are in CAPS.
+
+  - Long variables are named like thisLongVariableName.
+
+
+* Formatting
+
+  - Please adapt the formatting of your code to the setting in LyX in that
+    particular file. Lars and Asger are slowly, but surely moving the source 
+    towards Linux kernel style formatting, aka K&R style. We suggest that you 
+    also do this, but this is NOT something that has been decided generally.
+
+
+* Use existing structures
+
+  - Use LString whereever possible. LyX will someday move to Unicode, and
+    that will be easy if everybody uses LString now.
+
+  - Check out the filename and path tools in filetools.h
+
+  - Use the Error class to report errors and messages
+
+  [add description of other existing structures]
+
+
+* Declarations
+  
+  - Use this order for the access sections of your class: public,
+    protected, private. The public section is interesting for every
+    user of the class. The private section is only of interest for the
+    implementors of the class (you).
+  
+  - Avoid to declare global objects in the declaration file of the class. 
+    If the same variable is used for all object, use a static member.
+
+  - Avoid global or static variables. An exception to this rule is 
+    very private stuff like the math stack.
+
+  - Use the const keyword like this: char const * instead of const char *
+    because this is more logical.
+
+
+* Documentation
+
+  - The documentation is generated from the header files.
+  - You document for the other developers, not for yourself.
+  - You should document what the funtion do, not the implementation.
+  - in the .C files you document the implementation.
+  - Short description (///), large description (/** ... */)
+    (someone explain this please)
+  - You make the documentation by doing "make srcdoc" in the root,
+    and then you'll find HTML in the srcdoc/ directory. Read with
+    Netscape for best results.
+
+
+* NAMING RULES FOR USER-COMMANDS
+   
+  Here's the set of rules to apply when a new command name is introduced:
+  1) Use the object.event order. That is, use `word-forward' instead of 
+     `forward-word'.
+  2) Don't introduce an alias for an already named object. Same for events.
+  3) Forward movement or focus is called `forward' (not `right').
+  4) Backward movement or focus is called `backward' (not `left').
+  5) Upward movement of focus is called `up'.
+  6) Downward movement is called `down'.
+  7) The begin of an object is called `begin' (not `start').
+  8) The end of an object is called `end'.
+
+
+* Using external GUI constructors (XForms fdesign)
+
+  - Fdesign generated files should not be changed at all. The only changes
+    needed are gettext, compability with 0.81 or when you have made your own
+    xforms objects and have just a dummy in the .fd file in place of your
+    own. In case you have to change the generated files for any of the
+    reasons above, you should provide a patch against the clean generated
+    file. Your callbacks must be in a separate file.
diff --git a/development/OS2/gnugettext.diff b/development/OS2/gnugettext.diff
new file mode 100644 (file)
index 0000000..9757617
--- /dev/null
@@ -0,0 +1,172 @@
+diff -ub intl.orig/bindtextdom.c intl/bindtextdom.c
+--- intl.orig/bindtextdom.c    Thu Aug 28 09:18:18 1997
++++ intl/bindtextdom.c Fri Apr 10 10:40:36 1998
+@@ -94,15 +94,15 @@
+   if (dirname == NULL)
+     /* The current binding has be to returned.  */
+-    return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
++    return binding == NULL ? (char *) strdup(__XOS2RedirRoot(_nl_default_dirname)) : binding->dirname;
+   if (binding != NULL)
+     {
+       /* The domain is already bound.  Replace the old binding.  */
+       char *new_dirname;
+-      if (strcmp (dirname, _nl_default_dirname) == 0)
+-      new_dirname = (char *) _nl_default_dirname;
++      if (strcmp (dirname, __XOS2RedirRoot(_nl_default_dirname)) == 0)
++      new_dirname = (char *) strdup(__XOS2RedirRoot(_nl_default_dirname));
+       else
+       {
+         size_t len = strlen (dirname) + 1;
+@@ -113,7 +113,7 @@
+         memcpy (new_dirname, dirname, len);
+       }
+-      if (strcmp (binding->dirname, _nl_default_dirname) != 0)
++      if (strcmp (binding->dirname, __XOS2RedirRoot(_nl_default_dirname)) != 0)
+         free (binding->dirname);
+       binding->dirname = new_dirname;
+@@ -134,8 +134,8 @@
+         return NULL;
+       memcpy (new_binding->domainname, domainname, len);
+-      if (strcmp (dirname, _nl_default_dirname) == 0)
+-      new_binding->dirname = (char *) _nl_default_dirname;
++      if (strcmp (dirname, __XOS2RedirRoot(_nl_default_dirname)) == 0)
++      new_binding->dirname = (char *) strdup(__XOS2RedirRoot(_nl_default_dirname));
+       else
+       {
+         len = strlen (dirname) + 1;
+diff -ub intl.orig/dcgettext.c intl/dcgettext.c
+--- intl.orig/dcgettext.c      Thu Aug 28 09:18:20 1997
++++ intl/dcgettext.c   Fri Apr 10 10:40:34 1998
+@@ -154,6 +154,7 @@
+ const char *_nl_current_default_domain = _nl_default_default_domain;
+ /* Contains the default location of the message catalogs.  */
++
+ const char _nl_default_dirname[] = GNULOCALEDIR;
+ /* List with bindings of specific domains created by bindtextdomain()
+@@ -260,8 +261,12 @@
+     }
+   if (binding == NULL)
+-    dirname = (char *) _nl_default_dirname;
++    dirname = (char *) strdup(__XOS2RedirRoot(_nl_default_dirname));
++#ifdef __EMX__
++  else if (binding->dirname[0] == '/' || (isalpha(binding->dirname[0]) && binding->dirname[1] == ':'))
++#else
+   else if (binding->dirname[0] == '/')
++#endif
+     dirname = binding->dirname;
+   else
+     {
+@@ -326,7 +331,7 @@
+   while (1)
+     {
+       /* Make CATEGORYVALUE point to the next element of the list.  */
+-      while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
++      while (categoryvalue[0] != '\0' && categoryvalue[0] == PATH_SEPARATOR)
+       ++categoryvalue;
+       if (categoryvalue[0] == '\0')
+       {
+@@ -340,7 +345,7 @@
+       else
+       {
+         char *cp = single_locale;
+-        while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
++        while (categoryvalue[0] != '\0' && categoryvalue[0] != PATH_SEPARATOR)
+           *cp++ = *categoryvalue++;
+         *cp = '\0';
+       }
+diff -ub intl.orig/gettext.h intl/gettext.h
+--- intl.orig/gettext.h        Thu Aug 28 09:18:20 1997
++++ intl/gettext.h     Wed Apr  8 15:47:08 1998
+@@ -25,6 +25,12 @@
+ # include <limits.h>
+ #endif
++#ifdef __EMX__
++#define PATH_SEPARATOR ';'
++#else
++#define PATH_SEPARATOR ':'
++#endif
++
+ /* @@ end of prolog @@ */
+ /* The magic number of the GNU message catalog format.  */
+diff -ub intl.orig/l10nflist.c intl/l10nflist.c
+--- intl.orig/l10nflist.c      Thu Aug 28 09:18:22 1997
++++ intl/l10nflist.c   Thu Apr  9 00:03:58 1998
+@@ -222,7 +222,11 @@
+   /* Construct file name.  */
+   memcpy (abs_filename, dirlist, dirlist_len);
++#ifndef __EMX__
+   __argz_stringify (abs_filename, dirlist_len, ':');
++#else
++  __argz_stringify (abs_filename, dirlist_len, ';');
++#endif
+   cp = abs_filename + (dirlist_len - 1);
+   *cp++ = '/';
+   cp = stpcpy (cp, language);
+diff -ub intl.orig/libgettext.h intl/libgettext.h
+--- intl.orig/libgettext.h     Wed Sep 17 14:28:58 1997
++++ intl/libgettext.h  Wed Apr  8 15:47:08 1998
+@@ -36,6 +36,13 @@
+ # include <locale.h>
+ #endif
++#ifdef __EMX__
++#undef GNULOCALEDIR
++#define GNULOCALEDIR "/XFree86/lib/X11/locale"
++#include <X11/Xlocale.h>
++#else
++#define __XOS2RedirRoot(path) path
++#endif
+ #ifdef __cplusplus
+ extern "C" {
+diff -ub intl.orig/localealias.c intl/localealias.c
+--- intl.orig/localealias.c    Thu Aug 28 09:18:22 1997
++++ intl/localealias.c Wed Apr  8 15:47:08 1998
+@@ -72,6 +72,11 @@
+ #include "gettext.h"
+ #include "gettextP.h"
++#ifdef __EMX__
++#undef LOCALE_ALIAS_PATH
++#define LOCALE_ALIAS_PATH "/XFree86/lib/X11/locale"
++#endif
++
+ /* @@ end of prolog @@ */
+ #ifdef _LIBC
+@@ -170,11 +175,11 @@
+       {
+         const char *start;
+-        while (locale_alias_path[0] == ':')
++        while (locale_alias_path[0] == PATH_SEPARATOR)
+           ++locale_alias_path;
+         start = locale_alias_path;
+-        while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
++        while (locale_alias_path[0] != '\0' && locale_alias_path[0] != PATH_SEPARATOR)
+           ++locale_alias_path;
+         if (start < locale_alias_path)
+@@ -350,6 +355,9 @@
+      const struct alias_map *map1;
+      const struct alias_map *map2;
+ {
++#ifdef __EMX__
++#define strcasecmp stricmp
++#endif
+ #if defined _LIBC || defined HAVE_STRCASECMP
+   return strcasecmp (map1->alias, map2->alias);
+ #else
diff --git a/development/gettext.patch b/development/gettext.patch
new file mode 100644 (file)
index 0000000..a746b23
--- /dev/null
@@ -0,0 +1,34 @@
+This patch contains the modifications that have been made to
+the files from GNU gettext 0.10.31
+
+--- /afs/inria.fr/rocq/home/meval/lasgoutt/.common/src/gettext-0.10.31/intl/Makefile.in        Fri Aug 15 23:36:39 1997
++++ intl/Makefile.in   Wed Sep  3 14:35:31 1997
+@@ -79,7 +79,7 @@
+ .c.lo:
+       $(LIBTOOL) --mode=compile $(COMPILE) $<
+-INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib
++INCLUDES = -I../src -I. -I$(top_srcdir)/src -I$(top_srcdir)/intl 
+ all: all-@USE_INCLUDED_LIBINTL@
+@@ -150,7 +150,7 @@
+ info dvi:
+-$(OBJECTS): ../config.h libgettext.h
++$(OBJECTS): ../src/config.h libgettext.h
+ bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
+ dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
+--- /afs/inria.fr/rocq/home/meval/lasgoutt/.common/src/gettext-0.10.31/po/Makefile.in.in       Fri Aug 15 23:43:26 1997
++++ po/Makefile.in.in  Tue Sep  2 18:53:19 1997
+@@ -48,7 +48,7 @@
+ CFLAGS = @CFLAGS@
+ CPPFLAGS = @CPPFLAGS@
+-INCLUDES = -I.. -I$(top_srcdir)/intl
++INCLUDES = -I../src -I$(top_srcdir)/intl
+ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
diff --git a/development/lyx.rpm.README b/development/lyx.rpm.README
new file mode 100644 (file)
index 0000000..a631757
--- /dev/null
@@ -0,0 +1,37 @@
+Here is what to do to make a binary rpm using the spec file lyx.spec.
+The description below apply only to the Intel platform, but only minor
+changes should be needed for other platforms.
+
+1) Install xforms-88 or later. You can find an xforms-0.88 rpm
+at
+
+ftp://moni.msci.memphis.edu/pub
+
+2) Install LaTeX.  You can do this using rpms (you need tetex-xdvi,
+tetex, tetex-latex) from your RH distribution.
+
+3) Copy lyx.spec to /usr/src/redhat/SPECS
+
+4) Copy lyx-1.0.0.tar.gz to /usr/src/redhat/SOURCES
+
+5) Issue the command 
+
+       rpm -bb /usr/src/redhat/SPECS/lyx.spec
+
+This builds the binary rpm, and puts it in /usr/src/redhat/RPMS/i386.
+Note that building lyx requires about 35M free space on your disk.
+
+6) Now install the package:
+
+       rpm -Uvh /usr/src/redhat/RPMS/i386/lyx-1.0.0-1.i386.rpm
+
+If you get dependency errors about xforms or tetex, then you need to
+use the --nodeps option (because you installed xforms or tetex not in
+rpm form):
+
+        rpm -Uvh --nodeps /usr/src/redhat/RPMS/i386/lyx-1.0.0-1.i386.rpm
+
+You should not get any more errors.
+       
+mw@moni.msci.memphis.edu
+
diff --git a/development/lyx.spec b/development/lyx.spec
new file mode 100644 (file)
index 0000000..28e2a81
--- /dev/null
@@ -0,0 +1,71 @@
+Summary:   A WYSIWYG frontend to LaTeX
+Name:      lyx
+Version:   1.0.2
+Release:   1
+Source:    ftp://ftp.lyx.org/pub/lyx/stable/lyx-%PACKAGE_VERSION.tar.gz
+Copyright: GPL
+Group:     X11/Applications/Publishing
+Requires:  xforms >= 0.88, tetex-xdvi, tetex, tetex-latex
+Packager:  Mate Wierdl <mw@moni.msci.memphis.edu>
+URL:       http://www.lyx.org
+Buildroot: /tmp/lyx-root
+%description
+LyX is a wordprocessor frontend to LaTeX, which gives both the
+ease-of-use of a wordprocessor, and the flexibility and power of LaTeX.
+
+%prep
+
+%setup
+
+%build
+
+CXXFLAGS="$RPM_OPT_FLAGS" ./configure --with-included-gettext 
+
+make
+
+%install
+#rename the installation root more appropriately
+INST_ROOT=$RPM_BUILD_ROOT
+rm -rf $INST_ROOT
+
+make   install prefix=$INST_ROOT/usr/local 
+cp -a images/lyx.xpm $INST_ROOT/usr/local/share/lyx/images
+
+strip $INST_ROOT/usr/local/bin/lyx
+
+# Have a copy of the reLyX README in the doc directory
+cp lib/reLyX/README reLyX.README
+%post
+# Before configuring lyx for the local system
+# PATH needs to be imported 
+if [ -f /etc/profile ]; then
+    . /etc/profile
+fi
+
+# Now configure LyX
+echo "Configuring LyX for your system..."
+cd /usr/local/share/lyx
+./configure --srcdir
+
+# Take care of leftover lyxrc in /etc
+if [ -f /etc/lyxrc ]; then
+    echo "Moving the old config file /etc/lyxrc to" 
+    echo "/usr/local/share/lyx/lyxrc-from-etc"
+    echo "If you do not need it delete it."     
+    mv /etc/lyxrc /usr/local/share/lyx/lyxrc-from-etc
+fi
+
+%clean
+#rename the installation root more appropriately
+INST_ROOT=$RPM_BUILD_ROOT
+rm -rf $INST_ROOT
+
+%files
+%doc ANNOUNCE BUGS CHANGES COPYING README
+%doc ABOUT-NLS UPGRADING WHATSNEW  reLyX.README
+/usr/local/bin/*
+/usr/local/man/*/*
+/usr/local/share/lyx
+/usr/local/share/locale/*/LC_MESSAGES/lyx.mo
+
diff --git a/development/lyx3/LyX3-Tasks b/development/lyx3/LyX3-Tasks
new file mode 100644 (file)
index 0000000..c43e9c7
--- /dev/null
@@ -0,0 +1,259 @@
+-*- text -*-
+
+This is a tasklist/todo list for the 0.13.x development series. We
+should perhaps name these seies LyX3 as a common name. As I see it
+there are three major tasks to be done:
+
+       o Buffer structure rewrite
+               So that it will be easier to expand for
+               new and unknow future features.
+               The main problems with the current structure is that
+               is intended to be viewed by only one window at the
+               time. It also uses characters as the smallest unit, it
+               would probably be better to use something a bit
+               bigger.
+               The LyXText class does not necessarily need to change
+               a lot, it could be per-view. However all the special
+               code in it needs to be (re)moved. Also a lot of the 
+               functionality needs to be relocated.
+       o Switch to LaTeX as fileformat
+               Will ease move from latex to LyX a lot.
+               Also will let people work both in (ex) emacs
+               and LyX on the same files.
+       o GUI independence.
+               Should be a compile time switch what gui (toolkit)
+               you wish to use. We are going to support Xforms first,
+               and I am sure that GTK and Qt will follow soon. I also
+               plan to do support for Fl (even a text only toolkit
+               should be possible. ncurses perhaps. Even the
+               lyxserver could be a special case of this: a view with
+               no view being able to coexist with other views or alone)
+               We will do this by providing an interface all the
+               toolkits will need to follow. Functions that the LyX
+               core will expect to be there. 
+
+When these three is finished, we will probably declare a code freeze
+and try to release a new version. Hopefully other features has also
+been added, and none removed.
+
+
+====================
+
+In addition to these there are a lot of small tasks that should be
+performed, that has no direct bearing on features, but are more geared
+towards code quality:
+
+       o always try to use POSIX commands.
+       o switch to use POSIX signals
+       o rewrite LString to be a true subset of STL string
+               then it will be _very_ easy to switch to
+               multibyte characters later if we want to.
+       o use STL storage containers (or prepare for it)
+               code reuse. Very often faster and better tested 
+               than what we make/do ourselves.
+       o use C++ iostreams
+               better interface and typesafe
+       o make as much as possible of the code reentreanant(?)
+               should make it easier to move to threads later.
+       o signal slot mechanism (borrowed from GTK-- project)
+               better interface, leaner code, typesafe. I have
+               been using this for another project and it works
+               like a charm.
+       o other code rewrites to make multiple buffers/windows
+         possible, without too much hassle.
+               - get rid of most of the global variables.
+               - non shared variables in shared structures 
+                 (i.e. the cursor in the text class)
+       o make source documentation better. Remember that the better
+         we document LyX internals the easier is it for new
+         developers to begin working on LyX.
+
+
+Some other things related to structure and services in the code:
+       o change pathpush and pathpop to be a class instead.
+       o class FileInfo does way too much, move the unneeded parts to
+         a super class or friends.
+       o a process manager class to handle execution of external
+         commands.
+               - ensure that not too many commands are executed at
+                 the same time.
+               - ensure that non-compatible commands are running at
+                 the same time. 
+               - to setup file descriptors where communicating with
+                 the processes can take place.
+       o make a liblyx for functions/classes delivering services to LyX
+               - lyxsum
+               - FileInfo
+               - syscall/syscontr/syssingleton
+               - strerror.C
+       o get rid of definitions.h
+       o pass an inforeceiver around in the object structure.
+         (this instead of passing minibuffers, and lyxerrors.)
+       o get a regexp package (GNU) and use it in filedialogs, search
+         and the like.
+
+
+Some small things to do with the linker:
+
+       o link partially in the subdirs, should make linking faster.
+               PostgreSQL does this so we should be able to do it
+               too. 
+
+================
+
+Also a lot of new features are thought of, only some of these are likely
+to make it into 0.14:
+
+       o rewrite of table code. Should probably be written as some
+         kind of an inset. At least get the code out of the kernel.
+               - colortbl  -multirow
+               - hhline    -multicolumn
+               - dcolumn
+       o index support (and multiple indeces support)
+               - multind ?
+       o tocs for each section
+               - minitoc
+       o multiple table of contentes
+               - multitoc
+       o trivlist?
+       o better version control (both document and file wise)
+               - version.sty
+               - cvs
+               - sccs 
+       o I am sure mathed improvements. (Alejandro's department)
+               - better macro support
+               - better amsmath support
+       o character styles (similar to emph and noun)
+               Will make a lot of small things conceptual instead of
+               specific. Will be alot easier to change the
+               presentation of a filename f.ex. This is actually very
+               important, because this is where the user can't be
+               conceptual in the current version.
+       o macro support. Similar to the math-macro support, but
+         usable in regular text too.
+       o support for abbrevations (static macros)
+       o add a incremental search function.
+       o change the "Find and Replace" to Query Replace.
+       o better/more search functions:
+               - replace & find next
+               - replace & find previous
+               We should perhaps try to make the interface a bit
+               emacs like, that should at least give us the 
+               features we want.
+       o improved template support.
+       o collapse "New" and "New from Template" into one item.
+       o make lyx recognize some file types (i.e. gzipped) and do
+         the right thing when encountering them.
+       o We should look at all the LyX specific paragraph styles and
+         check carefully that we really need them. We should also try
+         to collapse some of them into singel items (i.e. chapter and
+         chapter*)
+       o the "LyX-Code" environment should be removed. Add a verbatim
+         environment instead.
+       o tabbing support
+       o picture support
+       o better graphics support
+       o rotating and scaling of text
+       o PSTricks (we should be able to support some of this package)
+       o better reference support
+               - varioref
+       o better citation support
+               Especially the support for some of the main
+               bibtex supplied styles are needed. (harvard natbib...)
+               A complete support for natbib should perhaps be enough.
+       o improved spellchecker
+               - an ispell class should be made, this should
+                 take care of communicating with the ispell
+                 process.
+       o online configuration
+               So that users should not need to edit lyxrc
+               manualy
+       o better fontsupport
+               T1-lib font renderer.
+       o better latex code quality
+               This means reading LaTeX books to get an better idea
+               on how things are done in the latex world. 
+       o perhaps find better names for the paragraph styles
+         "paragraph" and "subparagraph"
+       o support for filecontents
+               This can make a latex document selfcontained, all the
+               needed graphics can be in the document.
+       o support for optional args to latex commands
+               - For sectioning commands I have an idea on how we can
+                 do this: have a popup on RMB to set properties.
+       o pdf support
+               pdftex
+       o hyperlink support
+               - url.sty (or better packages)
+               - hyperref.sty
+       o references to external documents
+               - xr.sty
+       o better babel support
+               - make it possible to tune the language strings
+               - the possibility for several languages in the same
+                 document. 
+       o title page support
+       o draft copy
+               - draftcopy.sty
+       o better float support (allow user to make its own floats)
+       o support newtheorem (allow user to make its own thorem like envirs)
+       o a bit more wysiwyg where it is appropiate.
+               - show bullets the way they will be on paper
+               - show a few more characters as they will be on paper
+                 (--, ---)
+       o online generation of new paragraph styles (or editing or old
+         ones)
+       o support for inlined sectioning commands (i.e. \paragraph{} )
+       o we should parse the command line ourselves.
+       o remove support for XResources, with multiple toolkits it
+         will be impossible to manage. And they are not very needed
+         either.
+       o the possebility to collapse parts of the document.
+         (i.e. collapse the contents of a section. Would make moving
+          parts of the document around very easy)
+       o better LyXServer support
+               - perhaps use UNIX sockets instead of pipes
+               - make a decent protocol with return codes.
+               - make it indepentent of the GUI
+               - prob: concurrency (locks)
+       o other packages to support:
+               - keyval (we should not use it directly, but know how
+                       to parse options for it.)
+               - here.sty
+               - ulem.sty
+               - indentfirst.sty
+               - lscape.sty
+
+I am sure others has a list as long as mine...
+
+
+======================
+
+We should also do some work to enhance the support we already have for
+some packages, I think these are the packages supported by 0.12:
+       - longtable     - color (papercolor boxes?)
+       - setspace (should support setting spacing on individual paragraphs)
+       - psnffs packages
+       - geometry      - makeidx
+       - verbatim      - algorithm
+       - inputenc      - fancyhdr (we only have _very_ basic support)
+       - fontenc       - a4
+       - graphics      - a4wide
+
+(I am sure I have forgot some, please fill me in.)
+
+
+======================
+
+Wild thoughts:
+
+       o the internal text-encoding could be Cork (T1)
+       o always keep the output file (.tex) 7bit.
+       o use plugins for insets.
+
+
+====================== 
+
+If you have other wishes for features, or comments, please let us know.
+
+       Lgb
diff --git a/development/lyx3/README b/development/lyx3/README
new file mode 100644 (file)
index 0000000..f832562
--- /dev/null
@@ -0,0 +1,47 @@
+Project: LyX File format 3.0 (subset of LaTeX) 
+============================
+
+Initial coordinator: Alejandro Aguilar Sierra
+
+
+On the developers list has been discussed several times the advantages of a
+LyX format compatible with LaTeX. Some of the advantages we would have are:
+
+- A better grammar than that of the current format would led us to simpler
+  and powerful syntax for insets (I'm thinking on math, figures, tables and
+  accents).
+
+- Almost anything can be expressed better with a powerful grammar.
+
+- There are many anything->LaTeX and LaTeX->anything converters around.
+  The exchange of documents would be better.
+  
+- We could have better control on the preamble of a document (options, 
+  packages included, macros). Only include those that are needed
+  for the document.
+  
+- We could save disk space using only one format.
+
+
+
+The following are not goals of this project:
+
+- The parser doesn't have to be able to read every latex file (for instance
+  LaTeX2.09). Still would be necessary filters to import latex files
+  generated elsewhere.
+
+- With a more readable format some LaTeX experts couldn't resist the
+  temptation to edit manually the files. This wouldn't be recommended, for
+  the same reason as above. Any special thing can (should) be written using
+  TeX mode under LyX.
+
+
+
+Q. Why LaTeX and not linux-sgml?
+
+A. Well, say some good reasons in favor of linux-sgml. Does it can
+   express complex mathematics expressions, nested layouts, etc. in
+   a better way?
+
+
+Alejandro
diff --git a/development/lyx3/johnc b/development/lyx3/johnc
new file mode 100644 (file)
index 0000000..9202260
--- /dev/null
@@ -0,0 +1,164 @@
+This is part of a private discussion I had with John Collins, the author 
+of the first LaTeX2LyX conversor. Attached is also a document describing his
+ideas about the subject. Such ideas could be useful for our project.
+
+Alejandro
+
+------------------------------------------------------------
+From: John Collins <John.Collins@cern.ch>
+Date: Wed, 4 Sep 1996 11:39:45 +0200 (MET DST)
+To: Alejandro Aguilar Sierra <asierra@servidor.unam.mx>
+Subject: Re: TeX2LyX document
+
+[Removed non-related stuff, AAS]
+
+I am not convinced devising a lyx format as a subset of latex is ideal. 
+It would take some time to explain my thoughts.  But the problem I see
+with latex is that its syntax is not pleasant, so that it is relatively
+time-consuming and/or memory intensive to parse it.  Most importantly from
+the point of view of an editor, it cannot be locally and bidirectionally
+parsed.  (I can explain further.)  IMHO, the important matter in the
+relation to latex is that the format should be in (1-1) correspondence
+with a suitably rational subset of latex.  Is your format supposed to be
+just a file format, or will it also be used for the representation of a
+document in memory?  If the latter is true, then I would particularly stay
+away from a directly latex based format.  A file format could be closer to
+latex, since it might need to read by humans. 
+
+But you have obviously thought about the issue and have come to different
+conclusions.  
+
+My experience in writing ET convinced me that a good internal format is
+important to speed and to robustness.  ET will run with good speed on an
+8088 processor(!), whereas the scientific word processor Scientific Word,
+which has somewhat of the same philosophy as ET and lyx, needs a minimum
+of a Pentium to be acceptable, and even then it frequently crashes the
+operating system. (Scientific Word appears to use a latex-based format
+internally.)
+
+John Collins
+
+
+----------------------------------------------------
+From: John Collins <collins@phys.psu.edu>
+Date: Fri, 12 Jan 1996 11:57:23 -0500
+To: lyx@via.ecp.fr
+Subject: Latex2lyx
+
+Although I have been working on the latex2lyx program, I do not have
+something ready for use yet.  The trouble is that I am staring at
+several other priority projects including a research grant renewal.
+
+I realize a quick-and-dirty version would be useful, so perhaps I ought
+to get that out.  That could probably be done quickly from my
+preexisting code.  Several messages have provoked me to think that
+would be worth doing.
+
+What I realized over the Christmas break is that by a suitable design
+of C++ classes I can fairly easily make a powerful, efficient and
+robust (La)TeX parser.  (It would also give useful error messages.)
+The tricky bit was to figure out the right design.  But I have that
+now, and the basic program.  I would estimate about a month to get
+something presentable to the lyx collaboration.
+
+I have appended some of my thoughts about the overall ideas.  They
+correspond to what I did for my ET editor.  I'd appreciate comments.
+
+
+John Collins
+
+============================================================
+
+            Latex2lyx convertor
+             ===================
+
+1.  Latex2lyx and the lyx2latex convertor in the lyx program should be
+as close to 1-1 as reasonable.  This is particularly important for
+collaborations where some people are using lyx and some are not.  Then
+ordinary TeX files serve as the communications medium.
+
+2.  Perfect 1-1 conversion is not possible, because there are several
+different TeX constructs that are equivalent (for example a blank line
+and \par).
+
+3.  Parts of a TeX file not translated by latex2lyx should be converted
+into something like LyX TeX style.  One then has raw TeX in the lyx
+file, and that is reconstructed when making the TeX file.
+
+4.  Some enhancements to lyx will be necessary to handle converted
+files sensibly.  (E.g., (a) multiline pieces of raw TeX, including
+arbitrary numbers of blank lines, (b) comments.)
+
+5.  It appears necessary to change some of the lyx2latex conversion
+done by lyx to approach the 1-1 ideal better.  (My preference, for
+example, would be for paragraphs not to be enclosed in braces,
+normally.  Paragraphs with font changes, etc would need different
+treatment, of course.)  User preferences will undoubtedly vary here, so
+some configuration options are likely to be needed.
+
+6.  In particular, white space and new lines are often used to prettify
+TeX files to make them convenient for humans to edit.  I feel it would
+be useful to provide a mechanism for entering extra space and newlines
+in a lyx file, not for the purpose of getting the corresponding spaces
+and newlines in the hard copy, but for making the TeX file pretty.
+(User preferences will vary here, of course.)  This will not matter
+much if lyx is the only editor being used, but it will be important if
+the .tex file is being worked on by a collaborator.  Automatic
+prettyprinting of the output .tex file would help here, but lyx's
+preprogrammed concept of prettyprinting may not agree with a user's
+need-of-the-moment.
+
+7.  The most general case of a TeX file would be very hard to deal
+with, since catcodes and TeX macros may be redefined in an arbitrary
+way.  Moreover the definitions may be hidden away in a TeX format
+file.  So it is necessary to restrict latex2lyx's scope to files where
+catcodes don't change, and where the macros don't lose their standard
+meanings.
+
+8.  I think all TeX files that I have ever seen satisfy this
+requirement, except possibly in their preambles where commands are
+defined or redefined.
+
+9.  The program should handle incorrect TeX gracefully, and with useful
+error messages.  At worst it should bundle up the
+incorrect/misunderstood TeX as uninterpreted raw TeX that would be
+recreated in the .tex file.  (I emphasize this because one commerical
+competitor to lyx, Scientific Word (for MS-Windows), does a
+particularly bad job: it sometimes crashes the operating system when
+reading correct Latex files, and often loses bits of a file when the
+structure doesn't correspond to Scientific Word's standards for LaTeX.
+That is sufficiently unfriendly that I stopped using it.)
+
+10.  latex2lyx is aimed at converting document contents, not TeX
+programming, so it need not attempt to understand the semanitics of
+\defs, \newcommands etc.  (Although it should know the syntax, to parse
+the commands.)
+
+11.  Since the most general case of a TeX macro definition is likely to
+cause indigestion to latex2lyx (and quite often to a human reader, even
+a TeXpert), there needs to be a mechanism to force latex2lyx to treat
+sections of the tex file as raw TeX which is not to be converted.  I
+propose that the conversion be controlled by metacommands (like
+preprocessor metacommands in C).  These must be TeX comments, so that
+they are invisible to TeX.
+
+12.  It would be useful to recognize that other programs might want to
+use the same mechanism.  I propose the following kind of format:
+
+           %#{}raw
+            %#{}end.raw
+
+
+The signature of a metacommand is %#{program_name}command ....  The #
+is reminiscent of a C metacommand.  To allow a mechanism for
+metacommand sets for different programs, I allow a place for an
+identifier for a program.  For example we MIGHT have
+
+           %#{lyx}begin.preamble
+            %#{lyx}end.preamble
+
+for stuff that's to be bundled up in the LaTeX preamble used by lyx.
+However, for that case, my preference is for latex2lyx to bundle up
+ALL of the preamble automatically, except for those commands that are
+specifically used by lyx (e.g., \usepackage).
+
diff --git a/development/lyx3/lyx3.y b/development/lyx3/lyx3.y
new file mode 100644 (file)
index 0000000..94ac91f
--- /dev/null
@@ -0,0 +1,51 @@
+Brief discussion on LaTeX grammar
+---------------------------------
+
+LaTeX syntax is relatively simple. Any command is like this:
+
+  \command_name [<options>]{<argument_1>}...
+
+This can be expressed as a grammar in yacc/bison syntax. Capitalized words
+are tokens (terminals) returned by lex:
+
+command    :    LT_command options arguments
+arguments  :    argument
+           |    argument arguments
+          |    /* empty: It's possible to not have arguments */
+          ;
+
+argument   :    '{'  anything '}'
+           ;
+          
+options    :     '[' word_list ']'
+           |     /* empty: It's possible to don't have options */
+          ;
+
+word_list  :     LT_word ',' word_list
+           |     LT_word
+          ;
+
+anything   :     /* Any valid token */
+           |     command
+          |     LT_punctuation
+          |     LT_accent
+          |     LT_etc
+          ;
+
+This is quite simple and can be easily parsed by any LALR parser as a yacc
+or bison generated one. BUT the difficulty comes because the number of
+arguments depends on the value of LT_command, and that the symbols '{' and
+'}' have more uses that to separate arguments. This expression:
+
+          \section{Hello world} {\bf Once}
+
+is ambiguos since the parser would interpret the last group as a second
+argument. Maybe the simpler approach is declaring a grammar for each of the
+commands that LyX will to understand. Another is that if the parser knows
+the identity of a command should know also how many arguments should expect.
+[Aren't these two suggestions almost identical? I mean, if we tell the parser
+what parameters each command take, we also have a grammar for each of the
+commands, LyX will understand... Asger]
+
+AAS
diff --git a/development/lyxserver/perl/LyX-Client-0.01.tar.gz b/development/lyxserver/perl/LyX-Client-0.01.tar.gz
new file mode 100644 (file)
index 0000000..4004823
Binary files /dev/null and b/development/lyxserver/perl/LyX-Client-0.01.tar.gz differ
diff --git a/development/lyxserver/perl/LyX-Polite-0.01.tar.gz b/development/lyxserver/perl/LyX-Polite-0.01.tar.gz
new file mode 100644 (file)
index 0000000..2534008
Binary files /dev/null and b/development/lyxserver/perl/LyX-Polite-0.01.tar.gz differ
diff --git a/development/lyxserver/perl/README b/development/lyxserver/perl/README
new file mode 100644 (file)
index 0000000..9788f47
--- /dev/null
@@ -0,0 +1,10 @@
+LyX::Client - a perl interface to communication with LyX
+
+Documentation and installation instructions are in
+LyX-Client-*.tar.gz, unpack it with:
+
+tar zxvf LyX-Client-*.tar.gz
+
+then read the README file in the LyX-Client direactory.
+
+Copyright (c) 1999 Stefano Ghirlanda, stefano@zool.su.se.
diff --git a/development/lyxserver/sampleclient.tcl b/development/lyxserver/sampleclient.tcl
new file mode 100644 (file)
index 0000000..9a3455c
--- /dev/null
@@ -0,0 +1,266 @@
+# this one avoids absolute path names: \
+exec wish -f $0 "$@"
+# =========================================================================
+#   File: sampleclient.tcl, chb, Sun 05.11.1995 (19:24)
+#   sampleclient.tcl,v 1.1.1.1 1996/08/19 14:39:38 larsbj Exp
+#   This file contains examples for communicating to LyX via the
+#   LyXserver interface. It contains a panel of shortcuts to
+#   demonstrate how users can define their own macros. It also shows
+#   how new commands can be built into LyX using the 'notify' mechanism.
+# =========================================================================
+
+
+# --- 1. check cmdargs (pipename) -----------------------------------------
+
+if { [llength $argv] > 0 } {
+    set inpipe  [lrange $argv 0 0].in
+    set outpipe [lrange $argv 0 0].out
+} else {
+    set inpipe  $env(HOME)/.lyxpipe.in
+    set outpipe $env(HOME)/.lyxpipe.out
+}
+
+
+# --- 2. check if pipe is there; if not inform about lyxrc ----------------
+
+proc inform {} {
+    global inpipe outpipe
+    puts "$inpipe or $outpipe not found"
+    puts "Either LyX is not running or it is not configured"
+    puts "to start the server. To start the server, insert"
+    puts "     \serverpipe \"<pipename>\""
+    puts "in your .lyxrc"
+    exit
+}
+
+if { ![file exists $inpipe] }           inform
+if { "[file type $inpipe]" != "fifo" }  inform
+if { ![file exists $outpipe] }          inform
+if { "[file type $outpipe]" != "fifo" } inform
+
+
+# --- 3. check if addinput is defined, if not; fake it --------------------
+
+if { [info command addinput] == "" } {
+    puts "Warning: this wish does not have the addinput command"
+    puts "         reading back information from LyX is disabled"
+
+    proc addinput {opt file cmd} {}
+    proc removeinput {file} {}
+}
+
+
+# --- 4. define addinput callbacks ----------------------------------------
+
+set outbuf ""
+
+proc outputhandler {fd} {
+    global lyxnotify
+    gets $fd outbuf
+    set type [lrange [split $outbuf :] 0 0]
+    if { "$type" == "NOTIFY" } {
+       set val [lrange [split $outbuf :] 1 1]
+       # puts "$val"
+       if { [catch { set lyxnotify($val) }] == 0 } {
+           eval $lyxnotify($val)
+       }
+    }
+}
+
+set outfd [open $outpipe r]
+
+proc out_on {} {
+    global outfd
+    addinput -read $outfd "outputhandler %F"
+}
+
+proc out_off {} {
+    global outfd
+    removeinput $outfd
+}
+
+out_on
+
+
+# --- 5. make windows -----------------------------------------------------
+
+toplevel .t
+button .t.b1 -text "->"   -command {lyxsend_form {\\rightarrow }}
+button .t.b2 -text "<-"   -command {lyxsend_form {\\leftarrow }}
+button .t.b3 -text "-->"  -command {lyxsend_form {\\longrightarrow }}
+button .t.b4 -text "<--"  -command {lyxsend_form {\\longleftarro w}}
+button .t.b5 -text "<->"  -command {lyxsend_form {\\leftrightarrow }}
+button .t.b6 -text "<-->" -command {lyxsend_form {\\longleftrightarrow }}
+button .t.b7 -text "..."  -command {lyxsend_tex  {\\ldots }}
+label  .t.t  -text "TeX Arrows:"
+
+pack .t.t  -fill x -in .t
+pack .t.b1 -fill x -in .t
+pack .t.b2 -fill x -in .t
+pack .t.b3 -fill x -in .t
+pack .t.b4 -fill x -in .t
+pack .t.b5 -fill x -in .t
+pack .t.b6 -fill x -in .t
+pack .t.b7 -fill x -in .t
+
+label  .func -text "New Functions"
+button .xp   -text "Transpose Chars" -command "lyx_transpose"
+button .dw   -text "Delete word"     -command "lyx_delword"
+button .sp   -text "Save position"   -command "lyx_savepos"
+button .rp   -text "Restore pos"     -command "lyx_restorepos"
+button .gi   -text "Get Buffer info" -command "lyx_getinfo"
+button .q    -text "Quit"            -command "exit"
+
+pack .func -fill x
+pack .xp   -fill x
+pack .dw   -fill x
+pack .sp   -fill x
+pack .rp   -fill x
+pack .gi   -fill x
+pack .q    -fill x
+
+
+# --- 6. functions --------------------------------------------------------
+
+# ---
+#  Format for communication:
+#
+#    client->LyX:          "LYXCMD:<client>:<command>:<argument>" >$inpipe
+#    LyX->client (answer): "INFO:<client>:<command>:<data>"       <$outpipe
+#    LyX->client (notify): "NOTIFY:<key-sequence>"                <$outpipe
+#    (notifies are asynchroneous and are handled by 'outputhandler'
+#     above)
+# ---
+
+proc lyxsend_form {string} {
+    global inpipe outpipe outfd
+#    out_off
+#    exec echo "LYXCMD:sampleclient:get-latex:" >$inpipe
+#    gets $outfd buf
+#    set chr [lrange [split $buf :] 3 3]
+#    out_on
+#
+#    if { "$chr" != "F" } {
+#      exec echo "LYXCMD:sampleclient:set-formula:" >$inpipe
+#    }
+#    exec echo "LYXCMD:sampleclient:insert-self:$string" >$inpipe
+#    if { "$chr" != "F" } {
+#      exec echo "LYXCMD:sampleclient:set-formula:" >$inpipe
+#    }
+
+    exec echo "LYXCMD:sampleclient:insert-inset-formula-latex-del:$string" >$inpipe
+
+}
+
+proc lyxsend_tex {string} {
+    global inpipe outpipe outfd
+#    out_off
+#    exec echo "LYXCMD:sampleclient:get-latex:" >$inpipe
+#    gets $outfd buf
+#    set chr [lrange [split $buf :] 3 3]
+#    out_on
+#
+#   if { "$chr" != "L" } {
+#      exec echo "LYXCMD:sampleclient:set-tex:" >$inpipe
+#    }
+#    exec echo "LYXCMD:sampleclient:insert-self:$string" >$inpipe
+#    if { "$chr" != "L" } {
+#      exec echo "LYXCMD:sampleclient:set-tex:" >$inpipe
+#    }
+    exec echo "LYXCMD:sampleclient:insert-inset-latex-del:$string" >$inpipe
+
+}
+
+proc lyx_transpose {} {
+    global inpipe outpipe outfd
+    out_off
+    exec echo "LYXCMD:sampleclient:char-after:" >$inpipe
+    gets $outfd buf
+    set chr [lrange [split $buf :] 3 3]
+    if { "$chr" == "EOF" } {out_on; return}
+    if { [string length $chr] > 1 } {
+       set chr [string range $chr 1 1]
+    }
+    exec echo "LYXCMD:sampleclient:delete-forward:" >$inpipe
+    exec echo "LYXCMD:sampleclient:left:" >$inpipe
+    if { "$chr" == "{ }" } {
+       exec echo "LYXCMD:sampleclient:insert-self: " >$inpipe
+    } else {
+       exec echo "LYXCMD:sampleclient:insert-self:$chr" >$inpipe
+    }
+    out_on
+}
+
+set lyxnotify(C-t) lyx_transpose
+
+proc lyx_delword {} {
+    global inpipe outpipe outfd
+    exec echo "LYXCMD:sampleclient:word-right-select:" >$inpipe
+    exec echo "LYXCMD:sampleclient:left-select:" >$inpipe
+    # !!! should check for end of line here:
+    #     if ( char-after == char-in-word ) right;
+    exec echo "LYXCMD:sampleclient:delete-forward:" >$inpipe
+}
+
+set lyxnotify(M-d) lyx_delword
+
+set posx ""
+set posy ""
+
+proc lyx_savepos {} {
+    global posx posy inpipe outpipe outfd
+
+    out_off
+    exec echo "LYXCMD:sampleclient:get-xy:" >$inpipe
+    gets $outfd buf
+    set arg [lrange [split $buf :] 3 3]
+    # TCL is SO pathetic!
+    set arg [string range $arg 1 [expr [string length $arg]-2]]
+    set posx [lrange $arg 0 0]
+    set posy [lrange $arg 1 1]
+    out_on
+}
+
+set "lyxnotify({C-x slash})" lyx_savepos
+
+proc lyx_restorepos {} {
+    global posx posy inpipe
+    if { "$posx" == "" } return
+    exec echo "LYXCMD:sampleclient:set-xy:$posx $posy" >$inpipe
+    exec echo "LYXCMD:sampleclient:recenter:" >$inpipe
+}
+
+set "lyxnotify({C-x j})" lyx_restorepos
+
+proc lyx_getinfo {} {
+    global inpipe outpipe outfd
+    out_off
+    exec echo "LYXCMD:sampleclient:get-name:" >$inpipe
+    gets $outfd buf
+    set fname [lrange [split $buf :] 3 3]
+    exec echo "LYXCMD:sampleclient:get-layout:" >$inpipe
+    gets $outfd buf
+    set layout [lrange [split $buf :] 3 3]
+    exec echo "LYXCMD:sampleclient:get-font:" >$inpipe
+    gets $outfd buf
+    set fnt [lrange [split $buf :] 3 3]
+    exec echo "LYXCMD:sampleclient:get-latex:" >$inpipe
+    gets $outfd buf
+    set ltx [lrange [split $buf :] 3 3]
+    exec echo "LYXCMD:sampleclient:get-xy:" >$inpipe
+    gets $outfd buf
+    set arg [lrange [split $buf :] 3 3]
+    set arg [string range $arg 1 [expr [string length $arg]-2]]
+
+    puts "---------------"
+    puts "Buffer:         $fname"
+    puts "Current layout: $layout"
+    puts "Font flag:      $fnt"
+    puts "Latex flag:     $ltx"
+    puts "Position:       $arg"
+
+    out_on
+}
+
+
+# === End of file: sampleclient.tcl =======================================
diff --git a/development/lyxserver/server_monitor.c b/development/lyxserver/server_monitor.c
new file mode 100644 (file)
index 0000000..76b1fcf
--- /dev/null
@@ -0,0 +1,274 @@
+/*
+ * LyXServer monitor. To send command to a running instance of LyX
+ * and receive information from LyX.
+ * 
+ * To build it type:
+ * > gcc -g server_monitor.c -o monitor -lforms -L/usr/X11/lib -lX11 -lm
+ * > ./monitor
+ * Before you run lyx uncomment the line "\serverpipe" from your
+ * ~/.lyx/lyxrc file, according with your home path.
+ * 
+ * Created: 970531
+ * Copyright (C) 1997 Alejandro Aguilar Sierra (asierra@servidor.unam.mx)
+ * Updated: 980104
+ * Copyright (C) 1998 Asger Alstrup (alstrup@diku.dk)
+ */
+
+
+/* Form definition file generated with fdesign. */
+
+#include "forms.h"
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>    
+
+int lyx_listen = 0;
+int  pipein=-1, pipeout=-1;
+char pipename[100];        
+char const *clientname = "monitor";
+
+/**** Forms and Objects ****/
+
+typedef struct {
+       FL_FORM *server;
+       void *vdata;
+       long ldata;
+       FL_OBJECT *pipename;
+       FL_OBJECT *command;
+       FL_OBJECT *arg;
+       FL_OBJECT *info;
+       FL_OBJECT *client;
+       FL_OBJECT *submit;
+       FL_OBJECT *notify;
+} FD_server;
+
+
+enum { LS_DUMMY=1, LS_OPEN, LS_CLOSE, LS_SUBMIT };
+
+static FD_server *fd_server;
+
+void closepipe();
+void server_cb(FL_OBJECT *ob, long data);
+
+
+FD_server *create_form_server(void)
+{
+  FL_OBJECT *obj;
+  FD_server *fdui = (FD_server *) fl_calloc(1, sizeof(*fdui));
+
+  fdui->server = fl_bgn_form(FL_NO_BOX, 620, 260);
+  obj = fl_add_box(FL_UP_BOX,0,0,620,260,"");
+  fdui->pipename = obj = fl_add_input(FL_NORMAL_INPUT,110,10,190,40,"Pipe name");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,server_cb,0);
+    fl_set_object_shortcut(obj,"#P",1);
+  fdui->client = obj = fl_add_input(FL_NORMAL_INPUT,410,10,190,40,"Client name");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,server_cb,0);
+    fl_set_object_shortcut(obj,"#N",1);
+  fdui->command = obj = fl_add_input(FL_NORMAL_INPUT,110,60,190,40,"Command");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,server_cb,0);
+    fl_set_object_shortcut(obj,"#C",1);
+  fdui->arg = obj = fl_add_input(FL_NORMAL_INPUT,410,60,190,40,"Argument");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,server_cb,0);
+    fl_set_object_shortcut(obj,"#A",1);
+  obj = fl_add_text(FL_NORMAL_TEXT,10,110,100,40,"Info");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_RIGHT|FL_ALIGN_INSIDE);
+  fdui->info = obj = fl_add_text(FL_NORMAL_TEXT,110,110,490,40,"");
+    fl_set_object_boxtype(obj,FL_DOWN_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+  obj = fl_add_text(FL_NORMAL_TEXT,10,160,100,40,"Notify");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_RIGHT|FL_ALIGN_INSIDE);
+  fdui->notify = obj = fl_add_text(FL_NORMAL_TEXT,110,160,490,40,"");
+    fl_set_object_boxtype(obj,FL_DOWN_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+  obj = fl_add_button(FL_NORMAL_BUTTON,10,210,140,40,"Open pipes");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+    fl_set_object_callback(obj,server_cb,LS_OPEN);
+    fl_set_object_shortcut(obj,"#O",1);
+  obj = fl_add_button(FL_NORMAL_BUTTON,160,210,140,40,"Close pipes");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+    fl_set_object_callback(obj,server_cb,LS_CLOSE);
+    fl_set_object_shortcut(obj,"#l",1);
+  fdui->submit = obj = fl_add_button(FL_NORMAL_BUTTON,310,210,170,40,"Submit Command");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+    fl_set_object_callback(obj,server_cb,LS_SUBMIT);
+    fl_set_object_shortcut(obj,"#S",1);
+  obj = fl_add_button(FL_NORMAL_BUTTON,490,210,120,40,"Done");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+    fl_set_object_shortcut(obj,"#D^[",1);
+  fl_end_form();
+
+  fdui->server->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+
+void io_cb(int fd, void *data)
+{
+    int n;
+    char s[255];
+
+    n = read(fd, &s[0], 200);
+    if (n>=0)
+      s[n] = 0;
+    fprintf(stderr, "monitor: Coming: %s\n", s);
+    if (strncmp(s, "LYXSRV:", 7)==0) {
+       if (strstr(s, "bye")) {
+           lyx_listen = 0;
+           fprintf(stderr, "monitor: LyX has closed connection!\n");
+           closepipe();
+           return;
+       }
+       if (strstr(s, "hello")) {
+           lyx_listen = 1;
+           fprintf(stderr, "monitor: LyX is listening!\n");
+           fl_set_object_lcol(fd_server->submit,FL_BLACK);
+           fl_activate_object(fd_server->submit);
+       }                            
+    }
+    if (s[0]=='I')
+      fl_set_object_label(fd_server->info, s);
+    else
+      fl_set_object_label(fd_server->notify, s); 
+}
+
+void openpipe()
+{
+    char buf[100];
+    clientname = fl_get_input(fd_server->client);
+    if (pipein==-1) {
+        char *pipename = strdup(fl_get_input(fd_server->pipename));
+        char s[255];
+
+        fprintf(stderr, "monitor: Opening pipes ");
+        strcpy(s, pipename);
+        strcat(s, ".in");
+        fprintf(stderr, "[%s] and ", s);
+        pipein = open(s, O_RDWR);
+        strcpy(s, pipename);
+        strcat(s, ".out");
+        fprintf(stderr, "[%s]\n", s);
+        pipeout = open(s, O_RDONLY|O_NONBLOCK);
+        fprintf(stderr, "monitor: Opened %d %d\n", pipein, pipeout);
+
+       if (pipein<0 || pipeout<0) {
+           perror("monitor: Couldn't open the pipes");
+           pipein = pipeout = -1;
+           return;
+       }
+       fl_add_io_callback(pipeout, FL_READ, io_cb, 0);
+       
+       // greet LyX
+       sprintf(buf, "LYXSRV:%s:hello", clientname);
+       write(pipein, buf, strlen(buf));
+       free(pipename);
+    } else 
+        fprintf(stderr, "monitor: Pipes already opened, close them first\n");
+}             
+
+
+void closepipe()
+{
+    char buf[100];
+    
+    if (pipein==-1 && pipeout==-1) {
+       fprintf(stderr, "monitor: Pipes are not opened\n");
+       return;
+    }
+       
+    if (pipein>=0) {
+       close(pipein);
+    }
+             
+    if (pipeout>=0) {
+       if (lyx_listen) {
+           lyx_listen = 0;
+           /* Say goodbye */
+           sprintf(buf, "LYXSRV:%s:bye\n", clientname);
+           write(pipeout, buf, strlen(buf));
+       }
+       close(pipeout);
+       fl_remove_io_callback(pipeout, FL_READ, io_cb);
+    }     
+    pipein = pipeout = -1;
+    fl_set_object_lcol(fd_server->submit,FL_INACTIVE);
+    fl_deactivate_object(fd_server->submit);    
+}
+
+
+void submit()
+{
+    char s[255];
+    const char *clientname = fl_get_input(fd_server->client);
+    const char *argument = fl_get_input(fd_server->arg);
+    const char *command = fl_get_input(fd_server->command);
+    
+    sprintf(s, "LYXCMD:%s:%s:%s\n", clientname, command, argument);
+    fprintf(stderr, "monitor: command: %s\n", s);
+    if (pipein>=0) 
+      write(pipein, s, strlen(s));
+    else
+      fprintf(stderr, "monitor: Pipe is not opened\n");
+}
+
+
+/* callbacks for form server */
+void server_cb(FL_OBJECT *ob, long data)
+{
+
+    switch (data) {
+     case 0: break;
+     case LS_OPEN:
+       openpipe();
+       break;
+     case LS_CLOSE:
+       closepipe();
+       break;
+     case LS_SUBMIT:
+       submit();
+       break;
+     case LS_DUMMY:
+       break;
+    }
+}
+
+
+int main(int argc, char *argv[])
+{
+    fl_initialize(&argc, argv, 0, 0, 0);
+    fd_server = create_form_server();
+
+    strcpy(pipename, getenv("HOME"));
+    strcat(pipename, "/.lyxpipe"),
+    
+    /* fill-in form initialization code */
+    fl_set_input(fd_server->pipename, pipename);
+    fl_set_input(fd_server->client, clientname);
+    fl_deactivate_object(fd_server->submit);
+    fl_set_object_lcol(fd_server->submit,FL_INACTIVE);
+    
+    /* show the first form */
+    fl_show_form(fd_server->server,FL_PLACE_MOUSE,FL_FULLBORDER,"LyX Server Monitor");
+    fl_do_forms();
+    if (pipein != -1)
+      closepipe();
+    return 0;
+}
+
diff --git a/development/tools/README.bin.example b/development/tools/README.bin.example
new file mode 100644 (file)
index 0000000..25e4e6d
--- /dev/null
@@ -0,0 +1,41 @@
+README file for the binary distribution of LyX 1.0.2
+======================================================
+
+Please read the file README for general information on LyX.
+
+To use this binary distribution of LyX, please follow these steps:
+
+1) Unpack the distribution in the directory /usr/local (if you unpack
+   it in a different place, please read the note below)
+
+2) Configure LyX for you system by executing
+     cd share/lyx ; ./configure
+
+3) Make sure that the directory bin/ is in your path. For example, if
+   you unpacked the distribution in /usr/local, your PATH environment
+   variable should contain "/usr/local/bin".
+
+4) If you want to use reLyX, the LaTeX-to-LyX translator, you will
+   have to edit the first line of the script, which should read
+     #!/usr/local/bin/perl
+   if you have perl installed as /usr/local/bin/perl. 
+   Note that reLyX requires at least perl version 5.002.
+
+That's it. Happy LyXing !
+
+
+If you did not unpack the distribution in /usr/local
+----------------------------------------------------
+
+LyX can perfectly work in this situation, except for one thing: as
+distributed, LyX expects to find its internationalization files in the
+directory /usr/local/share/locale. If you unpacked the distribution in
+directory /foo, you should set the environment variable LYX_LOCALEDIR
+to point to /foo/share/locale as follows:
+  LYX_LOCALEDIR=/foo/share/locale            (if you use sh or bash as shell)
+or
+  setenv LYX_LOCALEDIR /foo/share/locale     (for csh or tcsh)
+
+Note that, if if you do not have any interest in having LyX display
+its messages in other languages than english, you can safely skip this
+step.
diff --git a/development/tools/scgen.pl b/development/tools/scgen.pl
new file mode 100644 (file)
index 0000000..5c99057
--- /dev/null
@@ -0,0 +1,207 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Prolog
+%
+% Shortcut generator v1.0
+%
+% This program is known to work with SWI-Prolog version 2.9.5, which you
+% can find at
+%
+%    http://www.swi.psy.uva.nl/usr/jan/SWI-Prolog.html
+%
+% Purpose: to generate shortcuts for labels in menus and dialogs that are
+% guaranteed to be unique within a set of labels. The shortcuts are
+% generated in a prioritized manner, such that characters at the beginning
+% of words are preferred to characters in the middle of words.
+%
+% You might find this progam useful if you are translating LyX.
+%
+% Don't use this file in the development/tools-directory; copy it
+% somewhere out of the LyX-distribution tree, unless you're improving
+% the tool itself.  The input is to be hard-coded into the file and that
+% may cause unnecessary garbage to appear in any patch you're putting
+% together.
+%
+% The labels are supposed to be entered at "LABELS" below,
+% and you get one solution (hopefully) with "go.". 
+% If there are no solutions, the Prolog-interpretator will reply with a
+% "No."
+%
+% You can get all candidate solutions with "all.", but this requires
+% lots of memory.
+%
+% You can inspect the correspondance between the original strings and
+% the prioritized ones with "inspect.".
+%
+% I have no idea what the big O for the algorithm is, but I suspect it's
+% rather steep.
+% Asger speculates that the algorithm is O(n^m), where n is the cardinality
+% of the candidate sets, while m is the number of sets. Since we do an
+% exhausitive search, this has to be the case.
+
+% Predicates:
+
+% print out one solution, i.e. a set of label/shortcut's
+% writef/2 may be specific for SWI-prolog
+show_one_alternative([]).
+show_one_alternative([L/_/C|Rest]):-
+  writef('%s|#%n\n',[L,C]),
+  show_one_alternative(Rest).
+
+% printout predicate for "all."
+show_solutions([]).
+show_solutions([H|T]):-
+  write('-----------\n'),
+  show_one_alternative(H),
+  show_solutions(T).
+
+% print out correspondance between original strings and prioritized ones.
+show_priority([]).
+show_priority([L/P/_|Rest]):-
+  writef('%s|%n\n',[L,P]),
+  show_priority(Rest).
+
+% character is from a set of allowed characters.
+% "AZaz09"=[65, 90, 97, 122, 48, 57]
+allowed_char(C):-
+  C >= 97, C =< 122. % a-z
+allowed_char(C):-
+  C >= 65, C =< 90. % A-Z
+allowed_char(C):-
+  C >= 48, C =< 57. % 0-9
+
+% turn lowercase to uppercase; alt-<key> is case insensitive
+uppercase(L,U):-
+  (L >= 97, L =< 122) -> U is L - 32;
+  U is L.
+
+% possible_char/2: Gets all characters in label, one after one.
+possible_char(_/Label,Char):-
+  member(Char,Label).          % the character is part of the label
+
+% prepare_labels/2: Prepares all labels. Constructs a new list of pairs 
+% where the original string is coupled with the prepared string.
+prepare_labels([], []).
+prepare_labels([H1|T1], [H1/H2|T2]):-
+       prepare_string(H1, H2),
+       prepare_labels(T1, T2).
+
+% prepare_string/2: Prepares a string by removing duplicate characters,
+% prioritizing initials letters, removing illegal characters and turning
+% lowercase to uppercase characters.
+prepare_string(Label,Result):-
+  string_to_list(Label,List1), % make a list of the string
+  prioritize(List1, List2),    % Prioritize string
+  filter_chars(List2, List3),  % Filter out unwanted chars
+  unique(List3, Result).       % Remove duplicates
+
+% prioritize/2: This predicate rearranges a list, such that
+% chars at the beginning of words are put first in the list.
+% i.e. prioritize("Foo bar", "Fboo ar")" is true.
+prioritize(L1,L2):-
+       initial_chars(L1, I),   % Find all initial characters
+       subtract(L1, I, Rest),  % and the others
+       append(I, Rest, L2).    % and we have the result.
+
+% initial_chars/2: Returns a list of characters that appear at the beginning
+% of words. i.e. initial_chars("Foo bar", "Fb") is true.
+initial_chars([],[]).
+initial_chars([A|T1], [A|T3]):-
+       rest_after_space(T1, T2),       % Return rest of list after space
+       initial_chars(T2, T3).
+
+% rest_after_space/2: Returns the list after the first space.
+% i.e. "rest_after_space("Foo bar", "bar") is true.
+rest_after_space([], []).
+rest_after_space([32, H1|T1], [H1|T1]):- !.
+rest_after_space([_|T1], T2):-
+       rest_after_space(T1, T2).
+
+% filterchars/2: Filter outs non-allowed characters from list, and turns
+% lowercase to uppercase.
+filter_chars([], []).
+filter_chars([H|T1], [C|T2]):-
+       allowed_char(H), !, uppercase(H, C),
+       filter_chars(T1, T2).
+filter_chars([_|T1], T2):-
+       filter_chars(T1, T2).
+
+% unique/2: This predicate removes duplicate characters without reordering.
+% i.e. unique("Foo bar", "Fo bar") is true.
+unique([], []).
+unique([H|T1], [H|T3]):-
+       delete(T1, H, T2),      % Remove duplicates.
+       unique(T2,T3).
+
+% working_shortcuts/2 instantiates Char in the first argument for a whole
+% menu/dialog.
+working_shortcuts([],_). % end of the list
+
+working_shortcuts([Label/Char|Rest],Used):-
+  possible_char(Label,Char), % i.e. part of the label string
+  \+member(Char,Used),  % not used by any other shortcut
+  working_shortcuts(Rest,[Char|Used]). % and all the other labels have
+                                       % shortcuts
+% The prolog motor will backtrack up and down the list of labels
+% until it finds a set with unique characters for each label
+
+
+% Label strings goes here.
+% Just cut&paste the strings from the LyX-source, and remove any
+% control sequences for menus.  We could add a couple of predicates to scan
+% a file, but re-consulting this file takes only a fraction of a second
+% so I didn't bother to add a fancy user interface here.  The solution is
+% printed like <label> '|#' <key>, allthough this isn't nessecarily useful,
+% for menus for instance.
+%
+% The characters are picked with priority from left to right within
+% strings, and the labels are listed in falling priority.
+% If you want a certain label to have a certain shortcut, try adding that
+% character in front of the string (like 'Exit' -> 'xExit') and move it
+% higher up in the list.
+% If this doesn't work, replace the string with only that character
+% ('Exit' -> 'x'). If you get a "No." then, you lose.
+% Use "inspect." to inspect the resulting priotized strings.
+
+% LABELS
+lab(Labels):-
+  Strings = [
+"New...",
+"New from template...",
+"Open...",
+"Close",
+"Save",
+"Save As...",
+"Revert to saved",
+"View dvi",
+"View PostScript",
+"Update dvi",
+"Update PostScript",
+"Print...",
+"Fax...",
+"Export",
+"Exit"
+% NB, no comma on the last one. Easy to forget.
+  ],
+  prepare_labels(Strings, Str),
+  bagof(L/_,member(L,Str),Labels).
+
+% Inspect mapping between original string and prioritized ones.
+inspect:-
+       lab(Labels),
+       show_priority(Labels).
+
+% Find ALL solutions (they are often legion - don't bother ;)
+all:- % May (probably, on large dialogs) run out on memory.
+  lab(Labels),
+  setof(Labels,working_shortcuts(Labels,[]),Solutions),
+  show_solutions(Solutions).
+
+% Find one solution
+one:-
+  lab(Labels),
+  working_shortcuts(Labels,[]),
+  show_one_alternative(Labels).
+
+% Entry point.
+go:-
+  one.
diff --git a/forms/bibforms.fd b/forms/bibforms.fd
new file mode 100644 (file)
index 0000000..d49de08
--- /dev/null
@@ -0,0 +1,202 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 2
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: citation_form
+Width: 220
+Height: 130
+Number of Objects: 5
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 220 130
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 10 130 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Key:|#K
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: key
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 20 90 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: bibitem_cb
+argument: 1
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 120 90 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: bibitem_cb
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 50 130 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Remark:|#R
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: label
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: bibitem_form
+Width: 220
+Height: 130
+Number of Objects: 5
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 220 130
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 10 130 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Key:|#K
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: key
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 20 90 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: bibitem_cb
+argument: 3
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 120 90 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: bibitem_cb
+argument: 2
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 50 130 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Label:|#L
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: label
+callback: 
+argument: 
+
+==============================
+create_the_forms
diff --git a/forms/bibforms.h.patch b/forms/bibforms.h.patch
new file mode 100644 (file)
index 0000000..c394161
--- /dev/null
@@ -0,0 +1,32 @@
+--- bibforms.h Tue Oct  7 21:30:55 1997
++++ ../src/bibforms.h  Tue Oct  7 19:57:53 1997
+@@ -2,12 +2,6 @@
+ #define FD_citation_form_h_
+ /* Header file generated with fdesign. */
+-/**** Callback routines ****/
+-
+-extern void bibitem_cb(FL_OBJECT *, long);
+-
+-extern void bibitem_cb(FL_OBJECT *, long);
+-
+ /**** Forms and Objects ****/
+@@ -19,7 +13,7 @@
+       FL_OBJECT *label;
+ } FD_citation_form;
+-extern FD_citation_form * create_form_citation_form(void);
++
+ typedef struct {
+       FL_FORM *bibitem_form;
+       void *vdata;
+@@ -27,7 +21,5 @@
+       FL_OBJECT *key;
+       FL_OBJECT *label;
+ } FD_bibitem_form;
+-
+-extern FD_bibitem_form * create_form_bibitem_form(void);
+ #endif /* FD_citation_form_h_ */
diff --git a/forms/bullet_forms.C.patch b/forms/bullet_forms.C.patch
new file mode 100644 (file)
index 0000000..9f6f1d8
--- /dev/null
@@ -0,0 +1,53 @@
+--- bullet_forms.c     Wed Sep 24 22:03:42 1997
++++ bullet_forms.c.patched     Wed Sep 24 22:05:31 1997
+@@ -3,6 +3,10 @@
+ #include "forms.h"
+ #include <stdlib.h>
+ #include "bullet_forms.h"
++#include "bmtable.h"
++#include "filetools.h"
++
++extern int mono_video;
+ FD_form_bullet *create_form_form_bullet(void)
+ {
+@@ -10,10 +14,28 @@
+   FD_form_bullet *fdui = (FD_form_bullet *) fl_calloc(1, sizeof(*fdui));
+   fdui->form_bullet = fl_bgn_form(FL_NO_BOX, 370, 390);
++  fl_set_border_width(-1);
+   obj = fl_add_box(FL_UP_BOX,0,0,370,390,"");
+-  fdui->replace_this_with_a_BMTable = obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON,90,105,260,180,"");
+-    fl_set_object_boxtype(obj,FL_NO_BOX);
+-    fl_set_pixmapbutton_file(obj, "psnfss2.xpm");
++ 
++  // make the border thick again to improve the bmtable looks
++  fl_set_border_width(-3);
++ 
++  fdui->bmtable_bullet_panel = obj = fl_add_bmtable(1, 90, 105, 265, 180, "");
++     fl_set_object_callback(obj, BulletBMTableCB, 0);
++     fl_set_object_lcol(obj, FL_BLUE);
++     fl_set_object_boxtype(obj, FL_UP_BOX);
++     if (mono_video) {
++        fl_set_bmtable_file(obj, 6, 6,
++                           LibFileSearch("images",
++                                         "standard.xbm").c_str());
++     }
++     else {
++        fl_set_bmtable_pixmap_file(obj, 6, 6,
++                                  LibFileSearch("images",
++                                                "standard.xpm").c_str());
++    }
++
++  fl_set_border_width(-1);
+   obj = fl_add_frame(FL_ENGRAVED_FRAME,95,20,255,70,"");
+   obj = fl_add_frame(FL_ENGRAVED_FRAME,0,340,370,50,"");
+   fdui->choice_bullet_size = obj = fl_add_choice(FL_NORMAL_CHOICE,15,45,65,30,"Size|#z");
+@@ -38,5 +60,7 @@
+     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+     fl_set_object_lstyle(obj,FL_FIXED_STYLE);
++    fl_set_input_return(obj, FL_RETURN_CHANGED);
++    fl_set_input_maxchars(obj,80);
+     fl_set_object_callback(obj,InputBulletLaTeXCB,0);
+   fdui->radio_bullet_depth = fl_bgn_group();
diff --git a/forms/bullet_forms.fd b/forms/bullet_forms.fd
new file mode 100644 (file)
index 0000000..0407de0
--- /dev/null
@@ -0,0 +1,452 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 1
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: form_bullet
+Width: 370
+Height: 390
+Number of Objects: 24
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 370 390
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_PIXMAPBUTTON
+type: NORMAL_BUTTON
+box: 90 105 260 180
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: replace_this_with_a_BMTable
+callback: 
+argument: 
+       file: psnfss2.xpm
+       fullpath: 1
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 95 20 255 70
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 0 340 370 50
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 15 45 65 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_TOP
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Size|#z
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_bullet_size
+callback: ChoiceBulletSizeCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 25 350 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_ok
+callback: BulletOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 135 350 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_apply
+callback: BulletApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 245 350 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_cancel
+callback: BulletCancelCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 300 275 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_FIXED_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: LaTeX|#L
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_bullet_latex
+callback: InputBulletLaTeXCB
+argument: 0
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_depth
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RADIO_BUTTON
+box: 105 35 55 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_LARGE_SIZE
+lcol: FL_BLACK
+label: 1|#1
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_depth_1
+callback: BulletDepthCB
+argument: 0
+       value: 1
+
+--------------------
+class: FL_BUTTON
+type: RADIO_BUTTON
+box: 165 35 55 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_LARGE_SIZE
+lcol: FL_BLACK
+label: 2|#2
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_depth_2
+callback: BulletDepthCB
+argument: 1
+
+--------------------
+class: FL_BUTTON
+type: RADIO_BUTTON
+box: 225 35 55 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_LARGE_SIZE
+lcol: FL_BLACK
+label: 3|#3
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_depth_3
+callback: BulletDepthCB
+argument: 2
+
+--------------------
+class: FL_BUTTON
+type: RADIO_BUTTON
+box: 285 35 55 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_LARGE_SIZE
+lcol: FL_BLACK
+label: 4|#4
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_depth_4
+callback: BulletDepthCB
+argument: 3
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 105 10 85 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Bullet Depth
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_panel
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RADIO_BUTTON
+box: 15 105 65 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Standard|#S
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_panel_standard
+callback: BulletPanelCB
+argument: 0
+       value: 1
+
+--------------------
+class: FL_BUTTON
+type: RADIO_BUTTON
+box: 15 135 65 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Maths|#M
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_panel_maths
+callback: BulletPanelCB
+argument: 1
+
+--------------------
+class: FL_BUTTON
+type: RADIO_BUTTON
+box: 15 195 65 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Ding 2|#i
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_panel_ding2
+callback: BulletPanelCB
+argument: 3
+
+--------------------
+class: FL_BUTTON
+type: RADIO_BUTTON
+box: 15 225 65 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Ding 3|#n
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_panel_ding3
+callback: BulletPanelCB
+argument: 4
+
+--------------------
+class: FL_BUTTON
+type: RADIO_BUTTON
+box: 15 255 65 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Ding 4|#g
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_panel_ding4
+callback: BulletPanelCB
+argument: 5
+
+--------------------
+class: FL_BUTTON
+type: RADIO_BUTTON
+box: 15 165 65 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Ding 1|#D
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: radio_bullet_panel_ding1
+callback: BulletPanelCB
+argument: 2
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+==============================
+create_the_forms
diff --git a/forms/bullet_forms.h.patch b/forms/bullet_forms.h.patch
new file mode 100644 (file)
index 0000000..6fbbe6a
--- /dev/null
@@ -0,0 +1,23 @@
+--- bullet_forms.h     Thu Dec  4 12:33:14 1997
++++ ../src/bullet_forms.h      Thu Dec  4 12:34:48 1997
+@@ -11,5 +11,11 @@
+ extern void InputBulletLaTeXCB(FL_OBJECT *, long);
+ extern void BulletDepthCB(FL_OBJECT *, long);
+ extern void BulletPanelCB(FL_OBJECT *, long);
++extern void BulletBMTableCB(FL_OBJECT *, long);
++
++
++/**** Additional routines ****/
++extern void bulletForm();
++extern bool updateBulletForm(); 
+@@ -20,7 +39,7 @@
+       void *vdata;
+       char *cdata;
+       long  ldata;
+-      FL_OBJECT *replace_this_with_a_BMTable;
++      FL_OBJECT *bmtable_bullet_panel;
+       FL_OBJECT *choice_bullet_size;
+       FL_OBJECT *button_ok;
+       FL_OBJECT *button_apply;
diff --git a/forms/credits_form.fd b/forms/credits_form.fd
new file mode 100644 (file)
index 0000000..e9353ae
--- /dev/null
@@ -0,0 +1,202 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 2
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: form_credits
+Width: 500
+Height: 330
+Number of Objects: 5
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 500 330
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 180 290 140 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_NONE
+gravity: FL_South FL_South
+name: 
+callback: CreditsOKCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 10 40 480 30
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER|FL_ALIGN_INSIDE
+style: FL_ITALIC_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Matthias
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NorthWest FL_NorthEast
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 10 10 480 30
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: All these people have contributed to the LyX project. Thanks,
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NorthWest FL_NorthEast
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: NORMAL_BROWSER
+box: 10 80 480 200
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NorthWest FL_SouthEast
+name: browser_credits
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: copyright
+Width: 450
+Height: 430
+Number of Objects: 5
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 450 430
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 10 10 430 50
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: LyX is Copyright (C) 1995 by Matthias Ettrich,\n1995-1999 LyX Team
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NorthWest FL_NorthEast
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 10 70 430 110
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: This program is free software; you can redistribute it\nand/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version.
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 160 390 140 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_NONE
+gravity: FL_South FL_South
+name: 
+callback: CopyrightOKCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 10 190 430 190
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: LyX is distributed in the hope that it will\nbe useful, but WITHOUT ANY WARRANTY;\nwithout even the implied warranty of MERCHANTABILITY\nor FITNESS FOR A PARTICULAR PURPOSE.\nSee the GNU General Public License for more details.\nYou should have received a copy of\nthe GNU General Public License\nalong with this program; if not, write to\nthe Free Software Foundation, Inc.,\n675 Mass Ave, Cambridge, MA 02139, USA.
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+==============================
+create_the_forms
diff --git a/forms/fdfix.sh b/forms/fdfix.sh
new file mode 100755 (executable)
index 0000000..58001da
--- /dev/null
@@ -0,0 +1,85 @@
+#! /bin/sh
+
+if [ "$1" = "$2" ]; then
+    echo "Input and Output file can not be the same."
+    exit 1
+fi
+
+if [ -f $2 ]; then
+       echo "Output file already exists, overwrite?"
+       read
+       if [ "$REPLY" != "y" ]; then
+           exit 0
+       fi
+fi
+
+if [ ! -f $1 ]; then
+    echo "Input file does not exist, can not continue"
+    exit 1
+fi
+
+# If there is a patch for the outputfile patch the input file with it.
+if [ -f "$2.patch" ]; then
+    echo "Patching $1 with $2.patch"
+    patch -s $1 < "$2.patch"
+fi
+
+echo "// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext" > $2
+echo "#include <config.h>" >> $2
+echo "#include \"lyx_gui_misc.h\"" >> $2
+echo "#include \"gettext.h\"" >> $2
+echo >> $2
+
+# The commands to sed does this:
+#
+# -e 's/#include "forms\.h"/#include FORMS_H_LOCATION/'
+#
+#  Replace "forms.h" by FORMS_H_LOCATION in #include directives. This
+#  macro is defined in config.h and is either <forms.h> or
+#  <X11/forms.h>. 
+#
+# -e '/fl_/ s/".[^|]*"/_(&)/'
+#  
+#  For all lines containing "fl_" and a string _not_ containging |,
+#  replace the string with _(string)
+#
+# -e '/shortcut/ s/".*[|].*"/scex(_(&))/'
+#
+#  For all lines containing "shortcut" and a string containing |, replace
+#  the string with scex(_(string))
+#
+# -e '/fl_add/ s/".*[|].*"/idex(_(&))/'
+#  For all lines containing "fl_add" and a string containing |, replace
+#  the string with idex(_(string))
+#
+# -e '/fl_add/ s/idex("\(.*\)").*$/&fl_set_button_shortcut(obj,"\1",1);/'
+# For all lines containing "fl_add" and a string containing |, add the
+# shortcut command after the end of this line
+#
+# -e 's/fl_set_object_lcolor/fl_set_object_lcol/' 
+#
+#  For all lines replace "fl_set_object_lcolor" with "fl_set_object_lcol"
+#  This will be removed when we don't support 0.81
+#
+# -e 's/fdui->.*->fdui = fdui/\/\/&/'
+#
+#  For all lines replace "fdui->...->fdui" with "//fdui->...->fdui"
+#  This will be removed when we don't support 0.81
+#
+# -e 's/\(\(FD_[^ ]*\) \*fdui.*\)sizeof(\*fdui)/\1sizeof(\2)/'
+#
+#  Some picky/broken compilers (eg AIX's xlC) don't like evaluating  
+#  sizeof(*fdui) before fdui has been given a value and output a warning. 
+#  This will not be needed anymore as soon as fdesign is fixed (already 
+#  reported to its authors).
+
+
+cat $1 | sed \
+-e 's/#include "forms\.h"/#include FORMS_H_LOCATION/' \
+-e '/fl_/ s/".[^|]*"/_(&)/' \
+-e '/shortcut/ s/".*[|].*"/scex(_(&))/' \
+-e '/fl_add/ s/".*[|].*"/idex(_(&))/' \
+-e '/fl_add/ s/idex(\(.*\)").*$/&fl_set_button_shortcut(obj,scex(\1")),1);/' \
+-e 's/fl_set_object_lcolor/fl_set_object_lcol/' \
+-e 's/fdui->.*->fdui = fdui/\/\/&/' \
+-e 's/\(\(FD_[^ ]*\) \*fdui.*\)sizeof(\*fdui)/\1sizeof(\2)/' >> $2
diff --git a/forms/form1.fd b/forms/form1.fd
new file mode 100644 (file)
index 0000000..4f2b0e4
--- /dev/null
@@ -0,0 +1,1714 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 5
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: KeyMap
+Width: 400
+Height: 400
+Number of Objects: 20
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 400 400
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 200 210 190 140
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 210 280 170 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Set Charset|#C
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: AcceptChset
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 210 310 170 30
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE+FL_EMBOSSED_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_RED
+label: Charset not found!
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: ChsetErr
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 290 60 100 90
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE+FL_EMBOSSED_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_RED
+label: Error:\n\nKeymap\nnot found
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: KeymapErr
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 210 240 170 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Character set:|#H
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Charset
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 210 180 100
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 20 380 170
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_TOP
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 130 360 120 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Accept
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 120 70 160 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Other...|#O
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: OtherKeymap
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 120 150 160 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Other...|#T
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: OtherKeymap2
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 10 90 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Language
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 200 80 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Mapping
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: KeyMapOn
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 250 180 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Primary key map|#r
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: KeyOnBtn
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 220 180 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: No key mapping|#N
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: KeyOffBtn
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 280 180 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Secondary key map|#e
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: KeyOnBtn2
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 110 100 30
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_RIGHT|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Secondary
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 30 100 30
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_RIGHT|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Primary
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: Figure
+Width: 420
+Height: 390
+Number of Objects: 43
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 420 390
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 230 220 180 80
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 230 60 180 140
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 244 200 56
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 60 200 160
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 10 230 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: EPS file|#E
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: EpsFile
+callback: GraphicsCB
+argument: 2
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 270 350 140 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Full Screen Preview|#v
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Preview
+callback: GraphicsCB
+argument: 1
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 320 10 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Browse...|#B
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Browse
+callback: GraphicsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: FLOAT_INPUT
+box: 20 180 80 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Width
+callback: GraphicsCB
+argument: 2
+
+--------------------
+class: FL_INPUT
+type: FLOAT_INPUT
+box: 120 180 80 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Height
+callback: GraphicsCB
+argument: 2
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 100 350 60 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: ApplyBtn
+callback: GraphicsCB
+argument: 7
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 350 70 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: OkBtn
+callback: GraphicsCB
+argument: 8
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 180 350 70 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: CancelBtn
+callback: GraphicsCB
+argument: 9
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 230 230 180 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Display Frame|#F
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Frame
+callback: GraphicsCB
+argument: 53
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 230 260 180 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Do Translations|#r
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Translations
+callback: GraphicsCB
+argument: 54
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 240 210 70 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Options
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: FLOAT_INPUT
+box: 100 260 80 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Angle:|#L
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Angle
+callback: GraphicsCB
+argument: 2
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: HeightGrp
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 110 130 110 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: % of Page|#g
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: page2
+callback: GraphicsCB
+argument: 23
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 110 70 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Default|#t
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Default2
+callback: GraphicsCB
+argument: 20
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 110 90 60 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: cm|#m
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: cm2
+callback: GraphicsCB
+argument: 21
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 110 110 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: inches|#h
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: in2
+callback: GraphicsCB
+argument: 22
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 237 50 53 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Display
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 120 50 60 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Height
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: HeightLabel
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 50 60 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Width
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: WidthLabel
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 230 90 30
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Rotation
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: DisplayGrp
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 230 130 180 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Display in Color|#D
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Wysiwyg3
+callback: GraphicsCB
+argument: 63
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 230 160 180 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Do not display this figure|#y
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Wysiwyg0
+callback: GraphicsCB
+argument: 3
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 230 100 180 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Display as Grayscale|#i
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Wysiwyg2
+callback: GraphicsCB
+argument: 43
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 230 70 180 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Display as Monochrome|#s
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Wysiwyg1
+callback: GraphicsCB
+argument: 33
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: WidthGrp
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 70 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Default|#U
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Default1
+callback: GraphicsCB
+argument: 10
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 90 60 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: cm|#c
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: cm1
+callback: GraphicsCB
+argument: 11
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 110 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: inches|#n
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: in1
+callback: GraphicsCB
+argument: 12
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 130 110 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: % of Page|#P
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: page1
+callback: GraphicsCB
+argument: 13
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 150 110 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: % of Column|#o
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: column1
+callback: GraphicsCB
+argument: 14
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 310 400 30
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 150 310 260 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Caption|#k
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Subcaption
+callback: GraphicsCB
+argument: 2
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 310 90 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Subfigure|#q
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Subfigure
+callback: GraphicsCB
+argument: 70
+
+=============== FORM ===============
+Name: FileDlg
+Width: 440
+Height: 380
+Number of Objects: 13
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 440 380
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 10 260 420 30
+boxtype: FL_SHADOW_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_X
+gravity: FL_SouthWest FL_SouthEast
+name: FileInfo
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 100 10 330 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Directory:|#D
+shortcut: 
+resize: FL_RESIZE_X
+gravity: FL_NorthWest FL_NorthEast
+name: DirBox
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 100 40 330 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Pattern:|#P
+shortcut: 
+resize: FL_RESIZE_X
+gravity: FL_NorthWest FL_NorthEast
+name: PatBox
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: HOLD_BROWSER
+box: 10 80 320 170
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_TOP
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NorthWest FL_SouthEast
+name: List
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 100 300 330 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Filename:|#F
+shortcut: 
+resize: FL_RESIZE_X
+gravity: FL_SouthWest FL_SouthEast
+name: Filename
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 340 80 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Rescan|#R#r
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NorthEast FL_NorthEast
+name: Rescan
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 340 120 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Home|#H#h
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NorthEast FL_NorthEast
+name: Home
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 340 160 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: User1|#1
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NorthEast FL_NorthEast
+name: User1
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 340 200 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: User2|#2
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_NorthEast FL_NorthEast
+name: User2
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 220 340 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: Ready
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 330 340 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: Cancel
+callback: 
+argument: 
+
+--------------------
+class: FL_TIMER
+type: HIDDEN_TIMER
+box: 10 350 20 20
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_RED
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthWest FL_SouthWest
+name: timer
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: form_table
+Width: 310
+Height: 130
+Number of Objects: 6
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 310 130
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 90 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_ok
+callback: TableOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 110 90 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_apply
+callback: TableApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 210 90 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_cancel
+callback: TableCancelCB
+argument: 0
+
+--------------------
+class: FL_VALSLIDER
+type: HOR_SLIDER
+box: 80 50 220 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Columns
+shortcut: 
+resize: FL_RESIZE_X
+gravity: FL_NoGravity FL_NoGravity
+name: slider_columns
+callback: 
+argument: 
+
+--------------------
+class: FL_VALSLIDER
+type: HOR_SLIDER
+box: 80 10 220 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Rows
+shortcut: 
+resize: FL_RESIZE_X
+gravity: FL_NoGravity FL_NoGravity
+name: slider_rows
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: form_search
+Width: 440
+Height: 160
+Number of Objects: 11
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 440 160
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 300 10 130 80
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 110 10 180 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Find|#n
+shortcut: 
+resize: FL_RESIZE_X
+gravity: FL_NorthWest FL_NorthEast
+name: input_search
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 110 40 180 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Replace with|#W
+shortcut: 
+resize: FL_RESIZE_X
+gravity: FL_West FL_East
+name: input_replace
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 200 80 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: @>|#F
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: 
+callback: SearchForwardCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 110 80 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: @<|#B
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: 
+callback: SearchBackwardCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 110 120 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Replace|#R#r
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: replace_button
+callback: SearchReplaceCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 350 120 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close|^[
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthWest FL_SouthWest
+name: 
+callback: SearchCancelCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 300 20 150 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Case sensitive|#s#S
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: btnCaseSensitive
+callback: 
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 300 50 150 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Match word|#M#m
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: btnMatchWord
+callback: 
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 200 120 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Replace All|#A#a
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: replaceall_button
+callback: SearchReplaceAllCB
+argument: 0
+
+==============================
+--------------------
diff --git a/forms/include_form.fd b/forms/include_form.fd
new file mode 100644 (file)
index 0000000..6b451c8
--- /dev/null
@@ -0,0 +1,268 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 1
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: include
+Width: 340
+Height: 210
+Number of Objects: 14
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 340 210
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 70 160 90
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 230 30 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Browse|#B
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: browsebt
+callback: include_cb
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 180 70 150 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Don't typeset|#D
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: flag1
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 120 170 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: include_cb
+argument: 1
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 230 170 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: include_cb
+argument: 2
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 230 130 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Load|#L
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: include_cb
+argument: 5
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 10 30 210 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: File name:|#F
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 180 100 150 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Visible space|#s
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: flag41
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: include_grp
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 130 160 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Verbatim|#V
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: flag4
+callback: include_cb
+argument: 10
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 100 160 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Use input|#i
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: flag2
+callback: include_cb
+argument: 11
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 70 160 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Use include|#U
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: flag3
+callback: include_cb
+argument: 11
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+==============================
+create_the_forms
diff --git a/forms/latexoptions.fd b/forms/latexoptions.fd
new file mode 100644 (file)
index 0000000..15e7c06
--- /dev/null
@@ -0,0 +1,184 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 2
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: LaTeXOptions
+Width: 310
+Height: 90
+Number of Objects: 5
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 310 90
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 10 310 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Allow accents on ALL characters|#w
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: accents
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 50 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: LaTeXOptionsOK
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 110 50 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: LaTeXOptionsApply
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 210 50 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: LaTeXOptionsCancel
+argument: 0
+
+=============== FORM ===============
+Name: LaTeXLog
+Width: 470
+Height: 380
+Number of Objects: 4
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 470 380
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: NORMAL_BROWSER
+box: 10 10 450 320
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: browser_latexlog
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 270 340 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: LatexLogClose
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 370 340 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Update|#Uu
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: LatexLogUpdate
+argument: 0
+
+==============================
+create_the_forms
diff --git a/forms/layout_forms.fd b/forms/layout_forms.fd
new file mode 100644 (file)
index 0000000..4fa00ce
--- /dev/null
@@ -0,0 +1,3791 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 9
+Unit of measure: FL_COORD_PIXEL
+SnapGrid: 5
+
+=============== FORM ===============
+Name: form_document
+Width: 580
+Height: 430
+Number of Objects: 39
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 580 430
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 290 110 120 70
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 300 100 100 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Separation
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_radio_separation
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 290 120 110 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Indent|#I
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_indent
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 290 150 110 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Skip|#K
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_skip
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 120 20 160 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Class:|#C
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_class
+callback: ChoiceClassCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 120 60 160 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Pagestyle:|#P
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_pagestyle
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 120 110 160 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Fonts:|#F
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_fonts
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 120 150 160 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Font Size:|#O
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_fontsize
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 470 390 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_cancel
+callback: DocumentCancelCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 360 390 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_apply
+callback: DocumentApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 250 390 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_ok
+callback: DocumentOKCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 450 195 120 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Float Placement:|#L
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_float_placement
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 120 230 190 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: PS Driver:|#S
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_postscript_driver
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 120 270 190 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Encoding:|#D
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_inputenc
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 290 20 122 70
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 432 20 136 70
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_radio_sides
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 290 30 120 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: One|#n
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_sides_one
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 290 60 120 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Two|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_sides_two
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 300 10 60 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Sides
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 440 10 80 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Columns
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_radio_columns
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 432 30 110 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: One|#e
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_columns_one
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 432 60 110 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Two|#w
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_columns_two
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 450 235 120 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Extra Options:|#X
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_extra
+callback: 
+argument: 
+
+--------------------
+class: FL_BOX
+type: FRAME_BOX
+box: 120 190 190 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Language:
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_language
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 220 310 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_default_skip
+callback: DocumentDefskipCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 120 310 90 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Default Skip:|#u
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_default_skip
+callback: DocumentDefskipCB
+argument: 0
+
+--------------------
+class: FL_COUNTER
+type: SIMPLE_COUNTER
+box: 490 275 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_BLUE
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Section number depth
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: slider_secnumdepth
+callback: 
+argument: 
+
+--------------------
+class: FL_COUNTER
+type: SIMPLE_COUNTER
+box: 490 315 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_BLUE
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Table of contents depth
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: slider_tocdepth
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 120 350 120 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Spacing|#g
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_spacing
+callback: DocumentSpacingCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 430 110 130 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Bullet Shapes|#B
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_bullets
+callback: DocumentBulletsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 430 145 120 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Use AMS Math|#M
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: check_use_amsmath
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: FLOAT_INPUT
+box: 250 350 95 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_spacing
+callback: DocumentSpacingCB
+argument: 0
+
+=============== FORM ===============
+Name: form_character
+Width: 300
+Height: 375
+Number of Objects: 15
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 300 375
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 10 280 195
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 94 15 191 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Family:|#F
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_family
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 94 55 191 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Series:|#S
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_series
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 94 95 191 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Shape:|#H
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_shape
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 95 230 191 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Size:|#Z
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_size
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 95 290 190 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Misc:|#M
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_bar
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 60 330 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_apply
+callback: CharacterApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 175 330 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_close
+callback: CharacterCloseCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 95 135 191 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Color:|#C
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_color
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 30 175 260 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Toggle on all these|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: check_toggle_all
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 220 280 45
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 210 210 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: These are never toggled
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 280 280 45
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 270 215 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: These are always toggled
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: form_paragraph
+Width: 490
+Height: 290
+Number of Objects: 33
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 490 290
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 127 250 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: button_ok
+callback: ParagraphOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 244 250 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: button_apply
+callback: ParagraphApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 360 250 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: button_cancel
+callback: ParagraphCancelCB
+argument: 0
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 360 110 120 50
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 110 340 90
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 360 20 120 70
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 210 20 140 70
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 20 190 70
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 100 210 360 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Label Width:|#d
+shortcut: 
+resize: FL_RESIZE_X
+gravity: FL_West FL_East
+name: input_labelwidth
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 370 100 60 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Indent
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 230 30 120 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Above|#b
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: check_lines_top
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 230 60 120 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Below|#E
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: check_lines_bottom
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 360 30 120 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Above|#o
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: check_pagebreaks_top
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 360 60 120 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Below|#l
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: check_pagebreaks_bottom
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 360 120 120 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: No Indent|#I
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: check_noindent
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_radio_alignment
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 30 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Right|#R
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_align_right
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 60 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Left|#f
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_align_left
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 100 30 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Block|#c
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_align_block
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 100 60 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Center|#n
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_align_center
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 180 120 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_space_above
+callback: ParagraphVSpaceCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 180 160 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_space_below
+callback: ParagraphVSpaceCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 70 120 100 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Above:|#v
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_space_above
+callback: ParagraphVSpaceCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 70 160 100 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Below:|#w
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_space_below
+callback: ParagraphVSpaceCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 370 10 100 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Pagebreaks
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 230 10 50 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Lines
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 10 80 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Alignment
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 100 130 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Vertical Spaces
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 250 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: ExtraOpt|#X
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: button_pextra
+callback: ParagraphExtraOpen
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 270 120 40 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Keep|#K
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: check_space_above
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 270 160 40 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Keep|#p
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: check_space_below
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: form_preamble
+Width: 380
+Height: 420
+Number of Objects: 5
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 380 420
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 50 380 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK|#O
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: button_ok
+callback: PreambleOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 160 380 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: button_apply
+callback: PreambleApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 270 380 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: button_cancel
+callback: PreambleCancelCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: MULTILINE_INPUT
+box: 10 10 360 360
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_preamble
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: form_quotes
+Width: 340
+Height: 130
+Number of Objects: 10
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 340 130
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 90 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: QuotesOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 120 90 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: QuotesApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 230 90 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: QuotesCancelCB
+argument: 0
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 90 10 160 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Type:|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_quotes_language
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_radio_quotes_number
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 90 50 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Single|#S
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_single
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 170 50 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Double|#D
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_double
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 290 230 10 10
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Text
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: form_paper
+Width: 440
+Height: 430
+Number of Objects: 31
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 440 430
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 230 100 200 100
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 290 20 140 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Special:|#S
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_paperpackage
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 230 220 200 130
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 180 190 170
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 170 70 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Margins
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 240 210 160 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Foot/Head Margins
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 320 390 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_cancel
+callback: PaperCancelCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 210 390 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_apply
+callback: PaperApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 100 390 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_ok
+callback: PaperOKCB
+argument: 0
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 440 360 10 10
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 440 350 10 10
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 100 190 70
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 90 95 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Orientation
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: greoup_radio_orientation
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 20 105 120 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Portrait|#o
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_portrait
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 20 135 120 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Landscape|#L
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_landscape
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 70 20 160 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Papersize:|#P
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: choice_papersize2
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 240 90 150 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Custom Papersize
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 20 55 170 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Use Geometry Package|#U
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: push_use_geometry
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 330 115 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Width:|#W
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_custom_width
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 330 155 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Height:|#H
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_custom_height
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 100 190 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Top:|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_top_margin
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 100 230 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Bottom:|#B
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_bottom_margin
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 100 270 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Left:|#e
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_left_margin
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 100 310 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Right:|#R
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_right_margin
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 330 230 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Headheight:|#i
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_head_height
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 330 270 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Headsep:|#d
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_head_sep
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 330 310 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Footskip:|#F
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_foot_skip
+callback: PaperMarginsCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 10 360 420 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: text_warning
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: form_table_options
+Width: 540
+Height: 310
+Number of Objects: 41
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 540 310
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 300 120 110 60
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 300 20 110 90
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 275 330 30
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: text_warning
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 430 270 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_close
+callback: TableOptCloseCB
+argument: 0
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 20 20 145 105
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 30 10 70 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Borders
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 75 45 25 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Top|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_border_top
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 75 75 25 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_BOTTOM_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Bottom|#B
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_border_bottom
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 55 60 25 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Left|#L
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_border_left
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 95 60 25 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_RIGHT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Right|#R
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_border_right
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 175 20 105 105
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 180 10 90 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Alignment
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 300 10 100 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Special Cell
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 300 30 95 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Multicolumn|#M
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_multicolumn
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 170 120 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Append Column|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_append_column
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 140 170 120 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Delete Column|#O
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_delete_column
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 200 120 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Append Row|#p
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_append_row
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 140 200 120 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Delete Row|#w
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_delete_row
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 240 250 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Delete Table|#D
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_table_delete
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 290 240 60 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Column
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_table_column
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 360 240 60 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Row
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_table_row
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 140 120 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Set Borders|#S
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_set_borders
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 140 140 120 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Unset Borders|#U
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_unset_borders
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 300 130 90 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Longtable
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_longtable
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 330 190 95 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Width
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_column_width
+callback: SetPWidthCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 300 155 90 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Rotate 90°|#9
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_rotate_table
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 300 55 95 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Linebreaks|#N
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_linebreak_cell
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 300 110 100 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Spec. Table
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 420 20 100 160
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 425 10 85 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Longtable
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 420 30 90 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: First Head
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_lt_firsthead
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 420 60 90 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Head
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_lt_head
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 420 90 90 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Foot
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_lt_foot
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 420 120 90 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Last Foot
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_lt_lastfoot
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 420 150 90 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: New Page
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_lt_newpage
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 300 80 95 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Rotate 90°
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_rotate_cell
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 430 235 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Extra|#X
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: button_table_extra
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 175 30 80 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Left|#e
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_align_left
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 175 55 80 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Right|#i
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_align_right
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 175 80 80 25
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Center|#C
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_align_center
+callback: TableOptionsCB
+argument: 0
+
+=============== FORM ===============
+Name: form_paragraph_extra
+Width: 460
+Height: 250
+Number of Objects: 25
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 460 250
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 20 170 100
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 350 20 100 100
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 190 20 150 100
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 10 120 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Extra Options
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 240 30 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Length|#L
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_pextra_width
+callback: CheckPExtraOptCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 130 210 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: button_ok
+callback: ParagraphExtraOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 240 210 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: button_apply
+callback: ParagraphExtraApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 350 210 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: button_cancel
+callback: ParagraphExtraCancelCB
+argument: 0
+
+--------------------
+class: FL_INPUT
+type: INT_INPUT
+box: 240 70 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: or %|#o
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_pextra_widthp
+callback: CheckPExtraOptCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 200 10 60 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Width
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 350 10 90 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Alignment
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_alignment
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 360 30 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Top|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_pextra_top
+callback: CheckPExtraOptCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 360 60 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Middle|#d
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_pextra_middle
+callback: CheckPExtraOptCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 360 90 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Bottom|#B
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_pextra_bottom
+callback: CheckPExtraOptCB
+argument: 0
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 10 170 330 30
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: text_warning
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 130 300 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: HFill between Minipage paragraphs|#H
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_pextra_hfill
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 160 260 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Start new Minipage|#S
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_pextra_startmp
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_extraopt
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 30 160 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Indented Paragraph|#I
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_pextra_indent
+callback: CheckPExtraOptCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 60 160 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Minipage|#M
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_pextra_minipage
+callback: CheckPExtraOptCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 90 160 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Floatflt|#F
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_pextra_floatflt
+callback: CheckPExtraOptCB
+argument: 0
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: form_table_extra
+Width: 330
+Height: 200
+Number of Objects: 8
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 330 200
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 15 95 305 60
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 85 205 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Special Multicolumn Alignment
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 15 20 305 60
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 25 35 280 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_special_alignment
+callback: TableOptionsCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 220 160 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: TableSpeCloseCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 10 170 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Special Column Alignment
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 25 110 280 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_special_multialign
+callback: TableOptionsCB
+argument: 0
+
+==============================
+create_the_forms
diff --git a/forms/layout_forms.h.patch b/forms/layout_forms.h.patch
new file mode 100644 (file)
index 0000000..4cde3e9
--- /dev/null
@@ -0,0 +1,26 @@
+--- layout_forms.h     Tue Dec  2 02:50:13 1997
++++ layout_forms.h.patched     Tue Dec  2 03:05:24 1997
+@@ -43,4 +43,23 @@
+ extern void TableOptionsCB(FL_OBJECT *, long);
+ extern void TableSpeCloseCB(FL_OBJECT *, long);
++/* Additional Functions/Methods */
++
++#include "bufferparams.h"
++
++extern bool UpdateLayoutDocument(BufferParams *params = NULL);
++extern bool UpdateLayoutPreamble();
++extern bool UpdateLayoutPaper();
++extern bool UpdateLayoutQuotes();
++extern bool UpdateLayoutParagraph();
++extern bool UpdateParagraphExtra();
++extern bool UpdateLayoutTable(int);
++
++extern void MenuLayoutCharacter();
++extern void MenuLayoutDocument();
++extern void MenuLayoutPreamble();
++extern void MenuLayoutPaper();
++extern void MenuLayoutQuotes();
++extern void MenuLayoutParagraph();
++extern void MenuLayoutTable(int);
diff --git a/forms/lyx.fd b/forms/lyx.fd
new file mode 100644 (file)
index 0000000..54c7892
--- /dev/null
@@ -0,0 +1,634 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 5
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: form_title
+Width: 425
+Height: 290
+Number of Objects: 2
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 425 290
+boxtype: FL_UP_BOX
+colors: FL_BLACK FL_TOP_BCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TIMER
+type: HIDDEN_TIMER
+box: 110 170 190 60
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_RED
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: timer_title
+callback: TimerCB
+argument: 0
+
+=============== FORM ===============
+Name: form_figure
+Width: 340
+Height: 150
+Number of Objects: 10
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 340 150
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 20 320 80
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_radio_fugre
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 30 320 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Encapsulated Postscript (*.eps, *.ps)|#E
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_postscript
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 60 320 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Inlined EPS (*.eps, *.ps)|#I
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_inline
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 110 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: FigureOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 120 110 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: FigureApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 230 110 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: FigureCancelCB
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 10 50 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Type
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: form_screen
+Width: 390
+Height: 220
+Number of Objects: 9
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 390 220
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 140 10 240 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Roman Font|#R
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_roman
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 140 40 240 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Sans Serif Font|#S
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_sans
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 140 70 240 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Typewriter Font|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_typewriter
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 140 100 240 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Font Norm|#N
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_font_norm
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: INT_INPUT
+box: 140 140 50 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Font Zoom|#Z
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: intinput_size
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 60 180 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: ScreenOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 170 180 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: ScreenApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 280 180 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: ScreenCancelCB
+argument: 0
+
+=============== FORM ===============
+Name: form_toc
+Width: 420
+Height: 340
+Number of Objects: 4
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 420 340
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: HOLD_BROWSER
+box: 10 10 400 280
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NorthWest FL_SouthEast
+name: browser_toc
+callback: TocSelectCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 310 300 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close
+shortcut: ^M
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: 
+callback: TocCancelCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 200 300 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Update|Uu#u
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: 
+callback: TocUpdateCB
+argument: 0
+
+=============== FORM ===============
+Name: form_ref
+Width: 290
+Height: 330
+Number of Objects: 8
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 290 330
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: HOLD_BROWSER
+box: 10 10 270 140
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NorthWest FL_SouthEast
+name: browser_ref
+callback: 
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 180 200 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Update|#U
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: 
+callback: RefUpdateCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 180 240 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close|#C^[
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: 
+callback: RefHideCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 240 160 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Insert Reference|#I^M
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthWest FL_SouthWest
+name: 
+callback: RefSelectCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 200 160 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Insert Page Number|#P
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthWest FL_SouthWest
+name: 
+callback: RefSelectCB
+argument: 1
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 280 160 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Go to Reference|#G
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthWest FL_SouthWest
+name: 
+callback: RefSelectCB
+argument: 2
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 160 200 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Name|#N
+shortcut: 
+resize: FL_RESIZE_X
+gravity: FL_NorthWest FL_SouthEast
+name: ref_name
+callback: 
+argument: 
+
+==============================
+create_the_forms
diff --git a/forms/lyx_sendfax.fd b/forms/lyx_sendfax.fd
new file mode 100644 (file)
index 0000000..81797f9
--- /dev/null
@@ -0,0 +1,442 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 3
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: xsendfax
+Width: 600
+Height: 330
+Number of Objects: 18
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 600 330
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 15 465 125
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 90 30 377 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Fax no.:|#F
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Input_Phone
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 90 65 377 29
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Dest. Name:|#N
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Input_Name
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 90 100 377 29
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Enterprise:|#E
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Input_Enterprise
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: MULTILINE_INPUT
+box: 15 165 575 106
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE+FL_EMBOSSED_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Input_Comment
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 20 290 180 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK|#O
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Button_Send
+callback: FaxSendCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 400 290 180 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Button_Cancel
+callback: FaxCancelCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 210 290 180 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Button_Apply
+callback: FaxApplyCB
+argument: 0
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 485 30 105 100
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 490 20 95 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Phone Book
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 490 45 15 15
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_RIGHT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Select from|#S
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Button_SPhone
+callback: FaxOpenPhonebookCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 490 65 15 15
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_RIGHT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Add to|#t
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: cb_add_phoneno
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 490 85 15 15
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_RIGHT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Delete from|#D
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: cb_delete_phoneno
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 490 105 15 15
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_RIGHT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Save|#V
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: pb_save
+callback: cb_save_phoneno
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 15 5 100 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Destination:
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 155 585 125
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 15 145 85 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Comment:
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: phonebook
+Width: 600
+Height: 320
+Number of Objects: 2
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 600 320
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: HOLD_BROWSER
+box: 2 2 598 318
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_MEDIUM_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: browser
+callback: cb_select_phoneno
+argument: 0
+
+=============== FORM ===============
+Name: logfile
+Width: 510
+Height: 190
+Number of Objects: 3
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 510 190
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: NORMAL_BROWSER
+box: 10 10 490 130
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: browser
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 410 150 90 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: Button_Close
+callback: FaxLogfileCloseCB
+argument: 0
+
+==============================
+create_the_forms
diff --git a/forms/makefile b/forms/makefile
new file mode 100644 (file)
index 0000000..5863ac8
--- /dev/null
@@ -0,0 +1,62 @@
+###/* This file is part of
+###* ======================================================
+###*
+###*           LyX, the High Level Word Processor
+###*
+###*           Copyright (C) 1995-99 The LyX Team
+###*
+###*======================================================*/
+###
+###
+### Makefile by Lars Gullik Bjønnes (larsbj@ifi.uio.no)
+###  
+
+SHELL = /bin/sh
+.SUFFIXES: .fd .c
+
+# Various commands
+FDESIGN = fdesign
+
+SRCS = bullet_forms.fd credits_form.fd form1.fd \
+       latexoptions.fd layout_forms.fd lyx.fd lyx_sendfax.fd math_forms.fd \
+       print_form.fd sp_form.fd
+
+OBJS = bullet_forms.c credits_form.c form1.c \
+       latexoptions.c layout_forms.c lyx.c lyx_sendfax.c math_forms.c \
+       print_form.c sp_form.c
+
+COBJS = bullet_forms.C credits_form.C form1.C \
+       latexoptions.C layout_forms.C lyx.C lyx_sendfax.C math_forms.C \
+       print_form.C sp_form.C
+
+all:
+       @echo "This is a makefile intended for the maintainer only."
+       @echo "Only run it if you are absolutely sure about what you"
+       @echo "are doing."
+
+c: $(OBJS)
+
+d: c $(COBJS)
+
+e: c
+       for hfil in *.h ; do \
+               if [ -f "$$hfil.patch" ] ; then \
+                       (echo "Patching $$hfil with $$hfil.patch" ; \
+                       patch -s $$hfil < $$hfil.patch) \
+               fi; \
+       done
+
+updatesrc: d e
+       for fil in *.C *.h ; do cp $$fil ../src ; done
+
+.fd.c:
+       $(FDESIGN) -convert $<
+
+.c.C:
+       ./fdfix.sh $< $@
+
+clean:
+       rm -f *.[hcC] *.bak
+
+distclean: clean
+       rm -f *.orig *.rej *~
diff --git a/forms/math_forms.C.patch b/forms/math_forms.C.patch
new file mode 100644 (file)
index 0000000..d85697b
--- /dev/null
@@ -0,0 +1,39 @@
+--- math_forms.c       Fri Dec 12 01:32:42 1997
++++ math_forms.c.patched       Fri Dec 12 01:32:18 1997
+@@ -2,7 +2,7 @@
+ #include "forms.h"
+ #include <stdlib.h>
+-#include "math_forms.h"
++#include "math_panel.h"
+ FD_panel *create_form_panel(void)
+ {
+@@ -17,7 +17,9 @@
+   fdui->func_browse = obj = fl_add_browser(FL_SELECT_BROWSER,180,40,94,110,"Functions");
+     fl_set_object_lalign(obj,FL_ALIGN_TOP);
+     fl_set_object_callback(obj,button_cb,MM_FUNC);
++#if FL_REVISION > 85
+     fl_set_browser_hscrollbar(obj, FL_OFF);
++#endif
+   fdui->greek = obj = fl_add_button(FL_NORMAL_BUTTON,10,90,50,30,"Greek");
+     fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+     fl_set_object_lstyle(obj,15);
+@@ -79,7 +81,7 @@
+   fdui->delim = fl_bgn_form(FL_NO_BOX, 250, 260);
+   obj = fl_add_box(FL_UP_BOX,0,0,250,260,"");
+-  fdui->menu = obj = fl_add_button(FL_PUSH_BUTTON,40,70,170,140,"");
++  fdui->menu = obj = fl_add_bmtable(FL_PUSH_BUTTON,40,70,170,140,"");
+     fl_set_object_lcolor(obj,FL_BLUE);
+     fl_set_object_callback(obj,delim_cb,2);
+@@ -166,7 +168,7 @@
+   fdui->deco = fl_bgn_form(FL_NO_BOX, 160, 150);
+   obj = fl_add_box(FL_UP_BOX,0,0,160,150,"");
+-  fdui->menu = obj = fl_add_button(FL_PUSH_BUTTON,10,10,140,90,"");
++  fdui->menu = obj = fl_add_bmtable(FL_PUSH_BUTTON,10,10,140,90,"");
+     fl_set_object_lcolor(obj,FL_BLUE);
+     fl_set_object_callback(obj,deco_cb,MM_APPLY);
+   obj = fl_add_button(FL_RETURN_BUTTON,30,110,100,30,"Close");
diff --git a/forms/math_forms.fd b/forms/math_forms.fd
new file mode 100644 (file)
index 0000000..042b56f
--- /dev/null
@@ -0,0 +1,930 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 5
+Unit of measure: FL_COORD_PIXEL
+SnapGrid: 2
+
+=============== FORM ===============
+Name: panel
+Width: 290
+Height: 172
+Number of Objects: 16
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 290 172
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 80 14 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close 
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: button_cb
+argument: 100
+
+--------------------
+class: FL_BROWSER
+type: SELECT_BROWSER
+box: 180 40 94 110
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_TOP
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: Functions
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: func_browse
+callback: button_cb
+argument: MM_FUNC
+  h_pref: FL_OFF
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 90 50 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: 15
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Greek
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: greek
+callback: button_cb
+argument: MM_GREEK
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 120 50 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: 15
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: ­ Û
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: arrow
+callback: button_cb
+argument: MM_ARROW
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 60 90 50 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: 15
+size: 0
+lcol: FL_BLACK
+label: ± ´
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: boperator
+callback: button_cb
+argument: MM_BOP
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 110 90 50 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: 15
+size: 0
+lcol: FL_BLACK
+label: £ @
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: brelats
+callback: button_cb
+argument: MM_BRELATS
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 60 120 50 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: 15
+size: 0
+lcol: FL_BLACK
+label: S  ò
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: varsize
+callback: button_cb
+argument: MM_VARSIZE
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 110 120 50 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_TIMESITALIC_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Misc
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: misc
+callback: button_cb
+argument: MM_MISC
+
+--------------------
+class: FL_PIXMAPBUTTON
+type: NORMAL_BUTTON
+box: 130 50 30 30
+boxtype: FL_UP_BOX
+colors: FL_MCOL FL_BLUE
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: equation
+callback: button_cb
+argument: MM_EQU
+
+--------------------
+class: FL_PIXMAPBUTTON
+type: NORMAL_BUTTON
+box: 10 15 30 30
+boxtype: FL_UP_BOX
+colors: FL_MCOL FL_BLUE
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: sqrt
+callback: button_cb
+argument: MM_SQRT
+
+--------------------
+class: FL_PIXMAPBUTTON
+type: NORMAL_BUTTON
+box: 40 15 30 30
+boxtype: FL_UP_BOX
+colors: FL_MCOL FL_BLUE
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_COL1
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: frac
+callback: button_cb
+argument: MM_FRAC
+
+--------------------
+class: FL_PIXMAPBUTTON
+type: NORMAL_BUTTON
+box: 10 50 30 30
+boxtype: FL_UP_BOX
+colors: FL_MCOL FL_BLUE
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: delim
+callback: button_cb
+argument: MM_DELIM
+
+--------------------
+class: FL_PIXMAPBUTTON
+type: NORMAL_BUTTON
+box: 100 50 30 30
+boxtype: FL_UP_BOX
+colors: FL_MCOL FL_BLUE
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: matrix
+callback: button_cb
+argument: MM_MATRIX
+
+--------------------
+class: FL_PIXMAPBUTTON
+type: NORMAL_BUTTON
+box: 40 50 30 30
+boxtype: FL_UP_BOX
+colors: FL_MCOL FL_BLUE
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: deco
+callback: button_cb
+argument: MM_DECO
+
+--------------------
+class: FL_PIXMAPBUTTON
+type: NORMAL_BUTTON
+box: 70 50 30 30
+boxtype: FL_UP_BOX
+colors: FL_MCOL FL_BLUE
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: space
+callback: button_cb
+argument: MM_SPACE
+
+=============== FORM ===============
+Name: delim
+Width: 250
+Height: 260
+Number of Objects: 10
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 250 260
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: PUSH_BUTTON
+box: 40 70 170 140
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLUE
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: menu
+callback: delim_cb
+argument: 2
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: lado
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 40 40 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Right|#R
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: right
+callback: delim_cb
+argument: 4
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 40 10 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Left|#L
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: left
+callback: delim_cb
+argument: 3
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 170 220 70 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: delim_cb
+argument: MM_CLOSE
+
+--------------------
+class: FL_PIXMAPBUTTON
+type: NORMAL_BUTTON
+box: 130 20 50 40
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_BOTTOM
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: pix
+callback: delim_cb
+argument: MM_APPLY
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 90 220 70 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: delim_cb
+argument: MM_APPLY
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 220 70 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: delim_cb
+argument: MM_OK
+
+=============== FORM ===============
+Name: matrix
+Width: 280
+Height: 170
+Number of Objects: 8
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 280 170
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 130 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK  
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: matrix_cb
+argument: MM_OK
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 190 130 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: matrix_cb
+argument: MM_CLOSE
+
+--------------------
+class: FL_VALSLIDER
+type: HOR_NICE_SLIDER
+box: 10 30 160 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_TOP
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Rows
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: rows
+callback: matrix_cb
+argument: -1
+       bounds: 1 20
+       precision: 0
+       return: FL_RETURN_END_CHANGED
+
+--------------------
+class: FL_VALSLIDER
+type: HOR_NICE_SLIDER
+box: 10 90 160 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_TOP
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Columns 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: columns
+callback: matrix_cb
+argument: 2
+       bounds: 1 20
+       precision: 0
+       return: FL_RETURN_END_CHANGED
+
+--------------------
+class: FL_CHOICE
+type: NORMAL_CHOICE
+box: 180 30 90 30
+boxtype: FL_FRAME_BOX
+colors: FL_COL1 FL_BLACK
+alignment: FL_ALIGN_TOP
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Vertical align|#V
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: valign
+callback: matrix_cb
+argument: -1
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 180 90 90 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Horizontal align|#H
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: halign
+callback: matrix_cb
+argument: 2
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 100 130 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: matrix_cb
+argument: MM_APPLY
+
+=============== FORM ===============
+Name: deco
+Width: 160
+Height: 150
+Number of Objects: 3
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 160 150
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: PUSH_BUTTON
+box: 10 10 140 90
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLUE
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: menu
+callback: deco_cb
+argument: MM_APPLY
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 30 110 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: deco_cb
+argument: MM_CLOSE
+
+=============== FORM ===============
+Name: space
+Width: 280
+Height: 150
+Number of Objects: 12
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 280 150
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 110 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK 
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: space_cb
+argument: MM_OK
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 190 110 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: space_cb
+argument: MM_CLOSE
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 100 110 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: space_cb
+argument: MM_APPLY
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: spaces
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 20 10 120 30
+boxtype: FL_NO_BOX
+colors: FL_MCOL FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Thin|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: space_cb
+argument: 1
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 20 40 120 30
+boxtype: FL_NO_BOX
+colors: FL_MCOL FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Medium|#M
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: space_cb
+argument: 2
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 20 70 120 30
+boxtype: FL_NO_BOX
+colors: FL_MCOL FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Thick|#H
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: space_cb
+argument: 3
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 140 10 120 30
+boxtype: FL_NO_BOX
+colors: FL_MCOL FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Negative|#N
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: space_cb
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 140 40 120 30
+boxtype: FL_NO_BOX
+colors: FL_MCOL FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Quadratin|#Q
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: space_cb
+argument: 4
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 140 70 120 30
+boxtype: FL_NO_BOX
+colors: FL_MCOL FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 2Quadratin|#2
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: space_cb
+argument: 5
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+==============================
+create_the_forms
diff --git a/forms/print_form.fd b/forms/print_form.fd
new file mode 100644 (file)
index 0000000..dab01b8
--- /dev/null
@@ -0,0 +1,815 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 2
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: form_print
+Width: 340
+Height: 360
+Number of Objects: 30
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 340 360
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 215 320 90
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 205 70 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Print to
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 90 225 230 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_printer
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 90 265 230 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_file
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_radio_printto
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 225 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Printer|#P
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_printer
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 265 80 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: File|#F
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_file
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 180 20 150 70
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 20 160 180
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 315 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: PrintOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 120 315 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: PrintApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 230 315 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: PrintCancelCB
+argument: 0
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_radio_pages
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 30 160 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: All Pages|#G
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_all_pages
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 60 160 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Only Odd Pages|#O
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_odd_pages
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 90 160 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Only Even Pages|#E
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_even_pages
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_radio_order
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 180 30 150 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Normal Order|#N
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_order_normal
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 180 60 150 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Reverse Order|#R
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_order_reverse
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 200 10 60 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Order
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 10 50 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Print
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 20 160 140 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Pages:
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_pages
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 180 110 150 90
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 200 95 50 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Copies
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 190 160 130 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Count:
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_copies
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 180 115 140 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Unsorted|#U
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: do_unsorted
+callback: 
+argument: 
+
+=============== FORM ===============
+Name: form_sendto
+Width: 340
+Height: 210
+Number of Objects: 14
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 340 210
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 20 310 80
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 10 80 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: File Type
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 10 130 320 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_TOP_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Command:|#C
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input_cmd
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 170 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: SendtoOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 120 170 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: SendtoApplyCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 230 170 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: SendtoCancelCB
+argument: 0
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: group_ftype
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 110 30 110 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: DVI|#D
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_ftype_dvi
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 110 60 110 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Postscript|#P
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_ftype_ps
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 60 100 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: LaTeX|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_ftype_latex
+callback: 
+argument: 
+       value: 1
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 30 100 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: LyX|#L
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_ftype_lyx
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 220 30 90 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Ascii|#s
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: radio_ftype_ascii
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+==============================
+create_the_forms
diff --git a/forms/ref.fd b/forms/ref.fd
new file mode 100644 (file)
index 0000000..f9d8aee
--- /dev/null
@@ -0,0 +1,196 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 1
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: ref
+Width: 210
+Height: 170
+Number of Objects: 10
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 210 170
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 20 130 60
+boxtype: FL_NO_BOX
+colors: FL_BLACK FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 120 130 80 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close
+shortcut: ^M
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: label_close_cb
+argument: 0
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 10 110 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Reference Type|#R
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 130 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Goto Label|#G
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: goto_label_cb
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 10 90 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Change Label|#C
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: label_change_cb
+argument: 0
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: pg_grp
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 20 30 20 20
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Page Number|#P
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: flag1
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 20 50 20 20
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Reference|#R
+shortcut:
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: flag2
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+==============================
+create_the_forms
diff --git a/forms/sp_form.fd b/forms/sp_form.fd
new file mode 100644 (file)
index 0000000..0376236
--- /dev/null
@@ -0,0 +1,634 @@
+Magic: 13000
+
+Internal Form Definition File
+    (do not change)
+
+Number of forms: 2
+Unit of measure: FL_COORD_PIXEL
+
+=============== FORM ===============
+Name: form_spell_options
+Width: 340
+Height: 400
+Number of Objects: 19
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 340 400
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: 0
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 20 320 110
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_FRAME
+type: ENGRAVED_FRAME
+box: 10 150 320 200
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_DEFAULT_SIZE
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BEGIN_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: 0
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: lang_buts
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 30 320 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Use language of document|#D
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: buflang
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: RADIO_BUTTON
+box: 10 60 320 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Use alternate language:|#U
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: altlang
+callback: 
+argument: 
+
+--------------------
+class: FL_END_GROUP
+type: 0
+box: 0 0 0 0
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: 0
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 40 90 240 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: 0
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: altlang_input
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 160 320 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Treat run-together words as legal|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: compounds
+callback: 
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 190 320 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Input Encoding switch to ispell|#I
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: inpenc
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: RETURN_BUTTON
+box: 10 360 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: OK
+shortcut: ^M
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: ok
+callback: SpellOptionsOKCB
+argument: 0
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 230 360 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Cancel|^[
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: 
+callback: SpellOptionsCancelCB
+argument: 0
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 220 320 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Use alternate personal dictionary:|#P
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: perdict
+callback: 
+argument: 
+
+--------------------
+class: FL_CHECKBUTTON
+type: PUSH_BUTTON
+box: 10 280 320 30
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Extra special chars allowed in words:|#E
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: esc_chars
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 40 250 240 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: 0
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: perdict_input
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 40 310 240 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: 0
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: esc_chars_input
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 20 10 90 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Dictionary
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 30 140 70 20
+boxtype: FL_FLAT_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_BOLD_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Options
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 120 360 100 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Apply|#A
+shortcut: 
+resize: FL_RESIZE_NONE
+gravity: FL_SouthEast FL_SouthEast
+name: 
+callback: SpellOptionsApplyCB
+argument: 0
+
+=============== FORM ===============
+Name: form_spell_check
+Width: 540
+Height: 280
+Number of Objects: 15
+
+--------------------
+class: FL_BOX
+type: UP_BOX
+box: 0 0 540 280
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: 0
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_TEXT
+type: NORMAL_TEXT
+box: 80 10 220 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: 0
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: text
+callback: 
+argument: 
+
+--------------------
+class: FL_INPUT
+type: NORMAL_INPUT
+box: 80 40 220 30
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_MCOL
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Replace
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: input
+callback: 
+argument: 
+
+--------------------
+class: FL_BROWSER
+type: SELECT_BROWSER
+box: 80 70 220 150
+boxtype: FL_DOWN_BOX
+colors: FL_COL1 FL_YELLOW
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Near\nMisses
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: browser
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 310 210 220 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Spellchecker Options...|#O
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: options
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 310 10 220 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Start spellchecking|#S
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: start
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 310 50 220 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Insert in personal dictionary|#I
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: insert
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 310 110 220 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Ignore word|#g
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: ignore
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 310 80 220 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Accept word in this session|#A
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: accept
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 310 180 220 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Stop spellchecking|#T
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: stop
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 310 240 220 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Close Spellchecker|#C^[
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: done
+callback: 
+argument: 
+
+--------------------
+class: FL_BOX
+type: NO_BOX
+box: 10 250 50 20
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 0 %
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BOX
+type: NO_BOX
+box: 250 250 50 20
+boxtype: FL_NO_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_RIGHT|FL_ALIGN_INSIDE
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: 100 %
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: 
+callback: 
+argument: 
+
+--------------------
+class: FL_BUTTON
+type: NORMAL_BUTTON
+box: 310 140 220 30
+boxtype: FL_UP_BOX
+colors: FL_COL1 FL_COL1
+alignment: FL_ALIGN_CENTER
+style: FL_NORMAL_STYLE
+size: FL_NORMAL_SIZE
+lcol: FL_BLACK
+label: Replace word|#R
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: replace
+callback: 
+argument: 
+
+--------------------
+class: FL_SLIDER
+type: HOR_FILL_SLIDER
+box: 10 230 290 20
+boxtype: FL_DOWN_BOX
+colors: FL_BLUE FL_COL1
+alignment: FL_ALIGN_LEFT
+style: FL_NORMAL_STYLE
+size: 0
+lcol: FL_BLACK
+label: 
+shortcut: 
+resize: FL_RESIZE_ALL
+gravity: FL_NoGravity FL_NoGravity
+name: slider
+callback: 
+argument: 
+
+==============================
+create_the_forms
diff --git a/images/README b/images/README
new file mode 100644 (file)
index 0000000..8911a34
--- /dev/null
@@ -0,0 +1,17 @@
+
+All icons to be used should follow this, so that the icons
+look alike.
+
+- size 20x20 pixels
+
+- five color:
+       #000000000000
+       #BFBFBFBFBFBF
+       #FFFFFFFFFFFF
+       navy
+       #B2B2ABABACAC
+
+- two color:
+       #BFBFBFBFBFBF
+       black
+
diff --git a/images/arrows.xbm b/images/arrows.xbm
new file mode 100644 (file)
index 0000000..e2661a0
--- /dev/null
@@ -0,0 +1,399 @@
+#define arrow_width 185
+#define arrow_height 143
+static char arrow_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+ 0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x21,
+ 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x08,0x00,0x1c,0xfe,0x00,0x20,0x00,
+ 0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x60,0x00,0x00,
+ 0x00,0x00,0x04,0x00,0x20,0xfe,0x00,0x20,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+ 0x00,0x00,0x21,0x00,0x00,0x00,0xf0,0xff,0x1f,0x00,0x00,0x04,0x00,0x20,0xfe,
+ 0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,
+ 0x18,0x00,0x00,0x00,0x00,0x03,0x00,0x20,0xfe,0x00,0x20,0x00,0x00,0x00,0xf8,
+ 0xff,0xff,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x80,0xff,
+ 0xff,0x1f,0xfe,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x21,
+ 0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xfe,0x00,0x20,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x18,0x00,0x00,
+ 0x00,0x00,0x02,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+ 0x00,0x10,0x21,0x01,0x00,0x00,0xe0,0xff,0x1f,0x00,0x00,0x04,0x00,0x00,0xfe,
+ 0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x60,0xa1,0x00,0x00,0x00,
+ 0x40,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x61,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,
+ 0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x26,0x02,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0xa8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x11,0x01,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0xc0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xe0,0x30,0x00,
+ 0x00,0xc0,0x03,0x00,0x04,0xfe,0x00,0x00,0x20,0x00,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x00,0x00,0x03,0x00,0x00,0x90,0xd0,0x00,0x00,0x20,0x00,0x00,0x08,0xfe,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xfc,0xff,0x07,0x00,0x00,
+ 0x88,0x90,0x00,0x00,0x20,0x00,0x00,0x08,0xfe,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x80,0x10,0x00,0x00,0x60,0x00,
+ 0x00,0x30,0xfe,0xf0,0xff,0xff,0x01,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
+ 0x30,0x00,0x00,0x80,0x10,0x00,0x00,0x80,0xff,0xff,0x7f,0xfe,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x80,0x10,0x00,
+ 0x00,0x00,0x00,0x00,0x30,0xfe,0x00,0x00,0x40,0x00,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x00,0x00,0x0c,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x10,0xfe,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xfc,0xff,0x07,0x00,0x00,
+ 0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x08,0xfe,0x00,0x00,0x10,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00,
+ 0x00,0x04,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x80,0x10,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x10,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0xf8,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x24,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x22,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x02,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xfe,0x00,0x20,0x00,
+ 0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x0c,0xfe,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x04,0x00,
+ 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0xff,0xff,0x1f,0xfe,
+ 0x00,0x20,0x00,0x00,0x00,0xc0,0x00,0x0c,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0xc0,
+ 0xff,0x1f,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x06,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,
+ 0x00,0x00,0x18,0x00,0x60,0x00,0x00,0xff,0xff,0x3f,0x00,0x80,0xff,0xff,0x1f,
+ 0x00,0x80,0xff,0xff,0x1f,0xfe,0x00,0x20,0x00,0x00,0x00,0x1c,0x00,0xe0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xfe,
+ 0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0xc0,
+ 0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x04,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0xfe,0x00,0x20,0x00,
+ 0x00,0x00,0x00,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,0x01,0x02,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x26,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0xa8,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x87,0x03,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x84,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x01,0x10,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x01,0xfe,0x80,0x00,0x20,0x00,0x00,0x00,
+ 0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
+ 0x00,0x02,0xfe,0x80,0x00,0x20,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x02,0xfe,0x60,0x00,0xc0,
+ 0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x40,0x00,0x00,0x0c,0xfe,0xf0,0xff,0xff,0x01,0x00,0x00,0x84,0x00,0x00,
+ 0x00,0xff,0xff,0x3f,0x00,0x80,0xff,0xff,0x1f,0x00,0xc0,0xff,0xff,0x1f,0xfe,
+ 0x60,0x00,0xc0,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x08,0x00,0x40,0x00,0x00,0x0c,0xfe,0x40,0x00,0x40,0x00,0x00,0x00,
+ 0x84,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x40,0x00,
+ 0x00,0x04,0xfe,0x80,0x00,0x20,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x40,0x00,0x00,0x02,0xfe,0x80,0x01,0x10,
+ 0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x00,0x40,0x00,0x00,0x01,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x40,0x84,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x85,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe};
+#define darrow_width 73
+#define darrow_height 73
+static char darrow_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xfe,
+ 0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0xfe,0x00,0x0c,0x00,0x00,0x00,
+ 0x00,0x00,0x30,0x00,0xfe,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0xfe,
+ 0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0xfe,0x00,0x44,0x00,0x00,0x00,
+ 0x00,0x00,0x22,0x00,0xfe,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x41,0x00,0xfe,
+ 0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x00,0x00,0xfe,0x00,0x00,0x02,0x00,0x00,
+ 0x00,0x40,0x00,0x00,0xfe,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x00,0xfe,
+ 0x00,0x00,0x08,0x00,0x00,0x00,0x10,0x00,0x00,0xfe,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x08,0x00,0x00,0xfe,0x00,0x00,0x20,0x00,0x00,0x00,0x04,0x00,0x00,0xfe,
+ 0x00,0x00,0x40,0x00,0x00,0x00,0x02,0x00,0x00,0xfe,0x00,0x00,0x80,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x00,0x80,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x03,0x00,0x40,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x06,0x00,
+ 0x60,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x0c,0x00,0x30,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x10,0x00,
+ 0x08,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x08,0x00,0x10,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x04,0x00,0x20,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x02,0x00,
+ 0x40,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x01,0x00,0x80,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0xfe,0x00,0x00,0x40,0x00,0x00,
+ 0x00,0x02,0x00,0x00,0xfe,0x00,0x00,0x20,0x00,0x00,0x00,0x04,0x00,0x00,0xfe,
+ 0x00,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0xfe,0x00,0x00,0x08,0x00,0x00,
+ 0x00,0x10,0x00,0x00,0xfe,0x00,0x00,0x04,0x00,0x00,0x00,0x20,0x00,0x00,0xfe,
+ 0x00,0x00,0x02,0x00,0x00,0x00,0x40,0x00,0x00,0xfe,0x00,0x00,0x01,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0xfe,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xfe,
+ 0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x62,0x00,0xfe,0x00,0x24,0x00,0x00,0x00,
+ 0x00,0x00,0x24,0x00,0xfe,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0xfe,
+ 0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0xfe,0x00,0x3c,0x00,0x00,0x00,
+ 0x00,0x00,0x3c,0x00,0xfe,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe};
+#define larrow_width 103
+#define larrow_height 126
+static char larrow_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x80,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x40,0x00,0x80,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x00,0x80,0x00,0xe0,0xff,0xff,0xff,0x01,0x00,0xe0,0xff,0xff,0xff,
+ 0x01,0x80,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x80,
+ 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x80,0x00,0x18,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x80,0x00,0xe0,0xff,0xff,
+ 0xff,0x01,0x00,0xe0,0xff,0xff,0xff,0x01,0x80,0x00,0x40,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x40,0x00,0x80,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x20,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x40,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x00,0x10,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,0x00,0x08,0x80,
+ 0x00,0xf8,0xff,0xff,0xff,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x80,0x00,0x06,
+ 0x00,0x00,0x00,0x03,0x00,0x08,0x00,0x00,0x00,0x20,0x80,0x80,0x01,0x00,0x00,
+ 0x00,0x0c,0x00,0xfc,0xff,0xff,0xff,0x7f,0x80,0x00,0x06,0x00,0x00,0x00,0x03,
+ 0x00,0x08,0x00,0x00,0x00,0x20,0x80,0x00,0xf8,0xff,0xff,0xff,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x10,0x80,0x00,0x10,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,
+ 0x00,0x08,0x80,0x00,0x20,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x00,0x40,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x00,0x08,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x80,0x00,0x04,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x80,0x00,0xfe,0xff,0xff,0xff,0x00,
+ 0x00,0xe0,0xff,0xff,0xff,0x1f,0x80,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x08,0x80,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x04,0x80,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,
+ 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0xff,0xff,0xff,0xff,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80};
+
+
diff --git a/images/banner.xpm b/images/banner.xpm
new file mode 100644 (file)
index 0000000..ec82c13
--- /dev/null
@@ -0,0 +1,313 @@
+/* XPM */
+static char *banner[] = {
+/* width height num_colors chars_per_pixel */
+"   424   289       16            1",
+/* colors */
+". c #052e4c",
+"# c #224e69",
+"a c #46738f",
+"b c #5b88a9",
+"c c #000000",
+"d c #5994cb",
+"e c #58524e",
+"f c #2a3c47",
+"g c #db4805",
+"h c #bb582c",
+"i c #94acbf",
+"j c #d5bc76",
+"k c #d1bd81",
+"l c #778670",
+"m c #e1d29b",
+"n c #ffffff",
+/* pixels */
+"........................................................................................................................................................................................................................................................................................................................................................................................................................................",
+"....................................###aaa#......###abb#...............................................................................................................................................................................................................................................................................................#....##.#.#.#.#.#.#.#.#.#.#.#.#..#..#...#..#.....................................",
+"....................................#.##bba.....##.#abba............................................................................................................................................................................................########a##.....c..................................................................................#...#..#.#.#.#.#.#..#....#.....#.#...#.......#..#..#..#..#...#...................",
+"........c.......c.......c.......c..#..##bbb#....#..##bba#c..c.....c.....c.....c.....c.....c.....c.....c.....c.....c.....c....c.....c.....c....c.....c.....c.....c.....c.....c.....c.c....c.....c.....c.....c.....c.....c.....c.....c.....c.......####.####aaababaa##......c.....c.....c.....c.....c.....c.....c.....c.....c.....c.....c.....c.....c....#....##.#.##.#.#.#.#.##.#.#.#.#....#..#.#..#......................#..............",
+"......c...c...c...c...c...c...c.....#.##bbba#...#..#abbb#..............................................................................................................................c.....................................................####..#.#####a#aabbbbbbaa##...............................................................................#...#..#.#..#.....#....#...#...#.#...#...#....#..#..#..#...#.....................",
+"....c.......c...c...c...c...c....c.#..##bbbb.c..#..##bbb..c...c...c...c..c..c..c..c..c..c...c..c..c..c..c..c..c..c..c..c...##aa.c.c..c......##a##.c..c..c..c..c..c..c..c..c...#.###aa###...c..c..c..c..c..c..c..c..c..c..c..c..c..c..c.c...###...##.####a###aa#aaabbbbaaa##..c.c..c.c...c....c.c.c..c.c...c....c.c.c..c.c...c....c.c.c..c.c...c....c...#..#.##.#.##.##.##.#.##..#.#.#.#...#...#....#..................#.....#...........",
+"..c...c.c.c.......c.......c...c....#..#aabbb#...#..#abbb#...c...c...c......c.....c.....c...c..............................###aba..........####bba..........................###.###aaabbaa#...............................................##...############a##a#a#a#aabbbbbaa##...c...................................................................c.#....#.#.#...#.#..#..#.#.........#..#.....#...#.#........#.......................",
+".......##########################.##.###bbbb###.#.###bbba###################################..c..c..c..c..c.c.....c..c...#..#abb#....c.c..#..#abb#..c..c..c..c..c.c......###.#####a#aaaabbaa..c.c..c..c..c..c..c..c..c..c..c..c..c....###...#.#########a###a####a##a#aaaabbbbba##....c...c..c.....c..c.....c..c.....c..c.....c..c.....c.c....c..c..c...#....#.#.#.#.#..#.#.#....##.#.#.#..#..#.#..#......#.#.#..........................",
+".....###aabbbbbbbbbbbbbbbbbbbbbaa##.###abbbbbaa##.##bbbbbbbbabababababababababaabaaaaabaababb#...........................#..#abb#.........#..#abba......................#..###aaaaa####aaabba#.......................................#..##########a#a####a###a####a#a#aaa#aaabbba##....c......c........c........c........c........c....................#...#.#.#..#.#.#.#.#.#.#...#.#....#..#...#...#.#...........#.....................",
+"....#..#abbbbbbbbbbbbbbbbbbbbbbbaa####aabbbbbaa#####aabbbbbbbbbbbbbbabbabbabbabbabbbbbabbabbbb#.c..c....c....c.c..c..c...#.##abba..c........##abba....c..c..c.c....c..##.###aabbbaa###.###aabba.c....c..c.c...c....c...c..c.c...c..##.#######.##a####a#a###a####a##a#aaaaa##a#abbbb##.c....c.....c..c.....c..c.....c..c.....c..c.....c...c.c..c..c..c..#....#.#.#.#.#.#...#..#.#.#.#..#.#.#...#...#.....#......#......#.................",
+"...#...##bbbbbbbbbbbbbabbbbbbbbbba#a#aaababbbaa#a#abababbabababbababbbabababababababababababbda#.........................#..#abb#.........#..#abbb...................##.##bbbbbbbaa##....###abb#.........................c.......##..###aba##.####a######a###a######abbba#######aabbb#.......c........c........c........c........c.....c...............#...#.#.#.#.#.#.###.##.#.#.#.##.#....#....#..#..#..#.#....#.........#............",
+"....#..##abbbbbbbbbbaa##abbbbbbbaaa##a#abbbbbba##a#aaabbbabbbbabbbbbabbabbbababababaaabaabbbbbb.c....c..c........c...c...#..#abb#..c..c...#.##abba.c..c....c........#..#aabbbbb###.#.####..##abba.c..c.....c....c.c..c.....#######..##abbbb#...#####aa#a###a###a##aaaabbba#...####aabbb#...c........c........c........c........c.............c..c..c...#..#..##.#.#.#.########..#.######.#.#..#.#.#..#..####..#...#.#.#..#...#.#........",
+"...#...##abbbbbbbbba#####abbbbbbaa#####babbbba######bbbbbbbababbababbabbbabbabbabababbabababbba....c......c..............#..#abba.........#..#bbba.......c.....c...#.##aabbba#....c.....##...##bb#......c....c..........###.#.##.###aabbbb###...#########a###a###a#abbbb####....####abbbb##..c.c........c..c.....c..c.....c..c........c..............c.#...#.#.#.#..#.###baa#.#..###aaa##...##.##.#...#######..#..#####...#.#.#.#.......",
+"....###.#abbbbbbbbba##.##abbbbbbb##..##aabbbbb##..###abbbbbbbbbbbabbabbabbabbbabbbbbababbbbbba...c...c..c....c..c....c...#.##abb#.c..c....#..#bbba....c.....c.....#####bbbb#.c............##.##abb#...c........c........#...######a#bbbbb####...###a#a#a###a####a#aabbba....###....###abbba#........c...............................c...c...c..c.c.c...#...#.#.#####.###aaba##...##abbb##..#..##a####.###bbb##...###a####..##a###..#....",
+"......####aaaaaaaa#######aaaaaaa####..##bbbba###..##bbbbbaaa#a#a#aa#aa#a#a#a#a#a#a##a#####aaa#.............c...........c.#..#abba.........#..#bbb#......c.....c...#..abbba#.......c........#..##aba.........c....c....##..#######aabbbb##....#...########a###a#a#abbbbb#......###...###abbbba#..c.c...c..c..c.c...c..c.c...c..c.c.............c........#....#########.#aabbba#..#.#bbbaa#....###aa##..##abbb##.#.##aab##..##aaba#....#..",
+"...c...............#...#########...#..##bbba....#..##abba...#......c....c...c.........#.#...c..c......c..c.....c..c.c....#..#bbb#.....c..#..##abb#..c.......c....#.##abb#.c.....c....c......#..##bb#...c......c......#...#aaaaa##abbbb##c....##...#####a#####a#aaabbbb#.c........##...###abbbba.................c........c........c..c....c.c.......c..#...#.###aaa##.##bbb#.##..##abb####....#abba##..##bba##....##bba##.##abba##......",
+"....c...c.c.c...c.c.c..c.cc.c......#..##bbb#....#..#bbbbac..c.........c...c....c......c..c.c...............c.............#..#abb#.c.....c.#..#bbb#......c........#.##bbb#...c.c........c.c...#..#abb#c...c......c..c.#..##bab####abbb##.......#....######aa#a#aabbbbba.......c....##..###a#bbbba#...c..c..c.......c........c...........c...............#...###aabbb##.##aba...#...#bba...##..##abb###..##bb####..##abb##...#bbb###..#.#.",
+"..............................c....#..##bbba....#..##bbb#.c.....c.............................c.c.c.c..c......c..c..c....#..#abb#.........#.##abb#cc..c....c....#.##bbb#.c.......c...........##.##bb#.......c.c.....#..##abbbb####ba#...c.cc...#.....######aaabbbbbb#...c..c........#.###a#a#abbba#.............c..............c..c......c..c......c...#...##aabbbb##..#abb....#.###bb#...##..##bba##..##bb#..##..##bbb##.###ba####.....",
+".....c........c........c..c.....c...#..#abb#....#..#abbb#.........c.c..c....c...c...c..c....c...............c............#..#abba...c.c...#..#bbb#.......c...c..#.##bb#............c..c.....c.#..#ab##.c..........c.#..##bbb#####a########......##...#.##aaabbbbbbb##c............##.##aa####a#bbbb#..c..c..c......c..c..c.............c......c..c...c.#..###abbbb###..##bb#...#..##bb#....#...#bb####..#bbb#c.#..##bb####.#bbb#..##....",
+"...c.....c....................c.....#..#abb.....##.#abba......................c...c...................c...c.....c..c..c..#..#bbb#...........##abb#..c..c........#.#bbb#c.....c.................#.##bb#c...c.c.......#..##bbb#.####a#b#aaabaa##.#.####..##aabbbbbb##.......c...c..##.###aab##.###abbba#.c.........c.........c.c..c..c.c......c..........#...#abbbb#..##.##bb#....#..#abb.....#.###bb#.##.##bb#..##..##bbb##..#bb#...##...",
+".......c...c.c..c.c..c..c..c....c....###ba#c.c...###abb#....c.....c..c..c..c........c....c......c...c...c...c............#.###bba.c.......#..#bbb#c............#..#ab##...c.....c...c..c..c....#.##bb#........c.....#..#abba####.###aa#aabbbbbb########aaabbbbb##...c..c......###..##bbbba##..###abbbb#......c......c..c.................c....c..c..c..#..##bbbb#....#..##bb....#..##bb#....#..#bbb#.##..#abb#..#..##bba###.#abb#c..#...",
+".............................c........####.........#a##.......c.c...............c...........c.c..................c..c....#..#bbb#....c....#.##abb#.........c...#.##bb#..c........###....c.......#.#bb#..c...........#..###bbb############a#babbbbaaaa#a#aaaa###......c......#.#.####bbbbb####..####abbba.c...................c.....c...c...............#.##bbbb#......#.##bb#...##.##abb.....#.##abb..#..##bba#.##.###bb###.##bb#.c..#..",
+"....c...c.........c.c..........c.........c...c..........c.c.........................c.c.c........c.c..c..c..c............#..#abb#.........#..#bbb#..c...c....c.#.##bb#c...c.c...###ba#c...c....##.#aba.........c....#..##aaa#a###aaa########a#babbbaaba#a##...c.c.c......##.##.##abbbbba#..##....###bbbb#..c..c.c...c..c.......c.c...c....c...c....c...#..#bbb##....c.#.##bba....#..#abb#....#..#bba#.##..##bb#..#..##bbb###.#bb##...##.",
+"......c...c...............c..........c..c..c...c..............c..c................c........c..................c.c..c..c..#.##abb#.c...c..#..##abb#c............#.##bb#.........#.##bb#......c....##aba.c..c..c....c.#...###aa#aaabbaa############aaabbbbaa#####.#..#.#####.####a#bbbbb#.c....##...###bbb#c.................c.c..........c..............#.##bbb#c.c.....#.#abb#.c..#.##bb#....#..#abb#...#.##bbb..##.##bbb##.###bb.c...#.",
+"...c........c..c..c...c........c.c...................c.............c.c.c..c..c..c.....c......c...c..c.c...c..............#..#abba...c.....#..#bbb#...c..c......#.##bb#..c....c.#..abbb..........#.#aba.........c....#...###aabbbbbbb##....#.#######aaaabbbbbbaa##a###.#.#.###aabbbbb#.........##...##abb#...c..c...c..c.c.........c..c.......c...c.c.c.#.#bba.........#..##bbb....#.##bb##c..#.##abb#..#..##bba...#..#abb###.##bb#......",
+".........c..............c..c.c.......c...c......c.............c..................................................c..c.c..#..#abb#.c.......#.##abb#.c.......c...#.##bb#c........#.##bba...c......#.#bba.c.c..c........#...###bbbbbbaa####.#.....#######a#aaaababaa#########aaabbbbba#............##..#abb#c...............c......c..........c............##ab#.....c...#.##bbbb.c..#.#abbb...##.##bbb#.c.#..#abb#c.#.##abb#.#.##bba......",
+".......c...c..c..c.................c..........c...c.....c..c.........c..c.c...c.....c....c.c..c..c.....c..c..c...........#..#bbb#.........#c.#bbb#....c..c...c.#.##bb#..c..c...#.##bb#.......c.#.##ab#........c......##..##bbbbba##...#.#####.....#######a#a#a###a##a#aaabbbbbbba#.........c.....#..##ba....c..c.c..c.............c.c..c.c...c.c.....c.###b#.........#..##bbb#...#..##bba..#...#babb#..##.##bbb..##.##bbba.##.#bbb.c....",
+"...c.c...............c.c......c........c....c.......c..........c...c............c.c..................c...................#..#abb#..c.....#..##abb#..c..........#.##ab#c.........###b##..c..c...#.##bba......c...c......#.##abbb##..c........###.#.....#########aaaaaababbbbbbba#..c...c..c........####ba.c..............c..c..c.c................c......####....c....#..#abbb...##.##bbb#c##.###bbba..##..#abba..#..#abbb#.#.##abb......",
+"........c...c..c..c.........c...c..c..........c.......c..c..c....c.....c.....c.......c..c....c..c.......c..c.c..c........#..#bbba....c..c.#..#bbb#....c....c...#..#bb#...........###...........#.##bb#............c.....######...c.............###.#......####aababbbbbbbbba##......c......c....c...##a#...c..c..c...........................c......................#..##bbb#...#..#bbbb#.#..#abbba#..#..#abbb####.##bbb#..#.##bba..c...",
+"..c.....................c.c..............c..c..................c......................c............c..c...........c.c.c..#..#abb#.........#.##abb#.c............#.##ba.c..c............c....c..#.##bb#.c..c....c...........#...c...........c......#####.#...###bbbbbbbbba##....c..c.....c.....c......#.............c.c..c..c..c..c.........c.......c..........c.c...#.##bbba#c.#..##abb#.#####bbba...##.##abba#.#.##abba#.##.#abbb......",
+"..........c.....c............c...c..c................c....c.......c..c..c.c.c....c......c..c.....c........c...c..........#..#abb#.....c..#...#bbb#...c..c...c...#.##bb#.....c.....c...........#.##bbb............c..c....c..c.........c.c............#.#######bbbbaa###.....c.............c................c.c..c..................c.c..c........c........c........#..##bbb#..##.##bbba###..#bbba#..#..##bbbb#.##.#abbb#..#.##abb#......",
+"........c..........c.c.c...............c..c..c................................c......c................c.....c....c....c..#..#abba.c.c.....#.##bbb#.c......c.....#.###bb.c.......c....c..c..c..#.##bb#.c..c...c........c......c......c...........c....c....#.#####.#......c...c..c..c.c......c..c..c......c.............c..c..c..c..........c........c.c......c...c##.##bbba...#..#abbb#.#..#bbbb....#..#abbb#.##.##bbb#..##.#abbb#.c....",
+"...c..c.....c..c.........c...c...c....c........c..c..c....c..c.......c..c........c........c..c.c....c.........c..........#..#abbb#....c...#..#bbb#..............#..##bb#..c..................##.#bbb#............c.......................c...c....c....c..............................................c.......c..c.c.c............c...c..c...c...c......c.........#..##bbb#..#..##bbb#..#.##bbb#...#..#abbb#..#.##bbb##.##.##bbb#.......",
+"...............................c........c..c.c..........c........c.c...........c.....c..................c.c.......c...c..#.###bbb.c.......#.##abb#c...........c..#..##bb#...c..c.....c..c.c.##.#abbb#.c.....c..c..............c..c..c....................c....c.c..c...c.......c.......c..c.....c...c....c.................c..c.....c..........c......c........c.#..##bbba...#..#abba.c##.##ab#.c..#.##abba#.##.##bba#..#.##abb#....c...",
+"...c..c..c..c...c...c.c..c..c....c..c..........c.c..c.....c...c..........c.c.......c...c.c..c..c..c..c.........c.........#..#bbbb...c.....#..#bbb#..c..c..c......##.##bbb#.......c.........#..#abbb#.....c.......c..c..c..c........c..c..c..c.....c........c.........c...c...............c............c....c.c.c......................c...c.........c.....c..c...#..##bbb#cc.#..##bb#...#..#bb#....#..#bba#..#..#bbb#..#..##bbb#........",
+"......................................................c.c...........c.c........c........................c....c......c....#..##bbb.c.......#.##abb#c..........c.c..#..##abb#..c.c.....c....#####abb#.......c..c...............c..................c....c...........c..........c....c..c..c....c..c..c.c...................c.c..c...c.c.........c..c................#..##bba.....#.##bb.c..#..##ba#c.##.##bb#.c##.##ab#...##.#bbb#..c..c...",
+"...c..c...c.....c..c....c.......c..c..c.......c..c.........c......c..............c...c.c.....c..c..c.c....c....c.........#..#bbbb.....c...#..#bbb#...c..c..c.......#..##bbba#....c.c.....#..##bbba......c........c..c..c..........c.....c....c.....c.......c.c.c.....c..........c.......................c....c..c...c..........c........c..c......c.....c..c.....#...#bbb#...##.##ba#...##.##bb#...#..#bb#...#..#bba..#...#bbb#.c.......",
+"..............c....................###..c.c.c........#a##....c..c...###a#..c..c......##................c....c.....c...c..#..##bbb.........#.##bbb#.c...........c....#..###bbbb###.....#######bbbb#....c........c............c...c...............c.......c.........c........c..c...c..c..c.....c..c.........c..........c.c....c.....c............c.....c..........#..###abb#...#..##ba#.c.#.###bb.c.#..#aba#c##.##aba.c##.##bb#..........",
+"...c.....c..c....##..c....c.c.c..####ba#...........####bb..........####bb#...c......##a##.c.c......##a#.......c..........#..#abbb#.......#...#bbb#...c.c..c..c......##...##aabbba#a####.###bbbbb#c.c...............c....c.........c.c..c..c.c......c..c...c.........c..c..................c..........c..c........c.c......c.....c....c.c..c..c.....c....c.....c...#...##bbb#c.##.##bb#...##.##bb#..##.##bb#..#..##bb#..##.#bb#.c........",
+".......c.......##aaa...c.........#.##bbba#c..c....##.#abba#.c..c...#.##bbb#.c......#.#aba#.......####aba..c.c....c..c....#..#abbb.c..c...#..##bbb#.c..................##..####a#bb#a#####abbbba#......c....c.c.c...........c...c.................c..........c...c.........c..c.....c..c......c..c..c......c..........................................c.....c.......#..###bba.c.##.##bb#...#.##abb...#..#aba..##.##aba..##.#abb#.....c...",
+"...c.....c....#.##bba....c...c..#..#abbbb##......#..##bbbbb.......#..#abbbb#...c..#..#abba#.c.c.#..##bbba................#..#abba........#...#bbb#.......c.............##...######aa#aaabbbbba.....c....c.........c..c..c....c.......c......c.........c..............c..c..................c.........c......c..c.....c....c.....c....c..c..c..c..............c.....##..##aab##..#.##bb#...#..##bb#..##.##bb#c.#..##bb#.##.##bb#.c.......",
+"......c......##.##bbba.........#..##aabbbba..c..#..###aabbbb#.c..#..###abbbb#....##.###bbba....##..#aabbb#...c....c...c..#.###bba...c..c.#..##abb#..c.........c.c.c......##..#.####abbbbbbb##...c...............c..................c...........c..........##.......c..c......c..c.c......c.......c..........................c.c...................c.c.....c..........#..##bbb#c..#.#abb....#.##bb#...#.##ab#...##.#aba..#.##aba.....c...",
+"...c....c...#..##abbbba#..c...#.###aa#aabbba...#..##aba#aabba#..##..#abbabbbb#..#...#aaabbb#...#..##aabbbb#..............#..#bbb#.........#..#bbb#....c..c..c.........c...####.#.##bbbbbba##......c.....c.c...c.......c..c....c........c..c......c....c.ce###a#.#..#....c..............c......c.......c.....c.c.c..c..c..........c.c..c..c..c..c......c..c.....c......#..##bb#...#.#aba..c.#..#bbb..c.#.#bbb#c.#..##bb#.##.##bb#.c......",
+"...........##..#aaabbbbb#....##.##abaa###bbba.##.##aaba###abba#.#..##aaa##abbb###.##a#aaabbb###..##a#aabbba#.c...c..c..c..###ab#.......c..#.##abb#.c.............c..c.........#####b#a####.....c....c.c..........c..........c...c.c..........c.....c....fghheee#########.....c.c...c.c..............c...c.c..............c.c...c....................c.............c...##.#abbb...###aba#c..#.##abb#..#####bb#...#.##bba..#.##bb#........",
+"...c....c.#..##aaaaa#bbbb#..#..##abb#####abbb###.#abbb##.##abb#a#.##bbb#####bbb#####aa##aabba#####aaa##aabba...c...........#####..c........###ba#c...c..c........................###........c....c..........c......c.c.c............c..c.c..............chgggggghhefe####a..#..#.......c.c..c....................c.c.c..c....c......c...c....c.c.c........c.c........c.#.##bba.##.##bba....#..#bbb#..#..#bbb#c..#..#abb#.#..#abb#.......",
+"......c....#.#aaba####abbb###.##abbbb#..###abba###abbba#..###baa###abbbb#.##aa#b###bbb####abaa###abb####abbb#.....c............c.....c......####...c...........c.c..c....c.....................c.......c.................c...c....c...............c.c...cfggggggggggghhhee####a#.##...........c.c.c.c.......c.....................c...............................c...##.#bbb#..#.#abb#...##.##bba#.##.##abb#...#.##bbb#.##.#abb#.c.c...",
+"...c....##..#aabba#####bbba####bbbba.##...#a#b#aabbbb#.##..###b##aabbba##...##baabbbba##.##aa##aabba##..##bbb............c.......c............c......c...c..c.........c....c............c..c.......c.....c.c.c....c........c.............c..c..c..........ggggggggggggggggghheee#########................c....c.c......c...c..c.....c...c..c.........c..c....c..c....#..#abbb#.#.##abb#.c.#..#bbba##..##bbbb#.##.##abba..#.##abbb.......",
+"........#..##abbba##..##aab#a#abbba#..##...#a#babbbba...#...###aaabbbb#.##..####abbbb###..###ababbbb##..##bbb#...c..c.c...c.c..........c.c..c....c......................c.....c..c..c........c.........c........c...c..c.........c.....c.........c..c.c.ccegggggggggggggggggggggghhee####.##..#....c...c...c....................c.c...c............c.....c...........#.##abb#.##.#abb#...##.#abbb#.##.##bbb#...#.##abb#..#.##bbb#.c.....",
+"...c....#.##bbbba.##...##aaaabbbbb#....#....#aabbbbb.....##..###bbbbbb#..##...#bbbbb##.#...##babbbb###...#abbb#c........c.....c...c....................c..c..c....c....................c...................................c..c....c........c.c...c......ccggggggggggggggggggggggggggggheee#######.##........c...c..c.c..c..............c.c.c........c.....c..c..c.##.##bbbb#.#.##abb#...#.##bbb#.#..#abbbb#.##.##bbba####.#bbbb#.......",
+".......#..#abbba....##..##abbbbbb#......##..##abbbb#......#...##abbbb#.....#..##bbba#...#...##abbb#..##..##abb#c...c..c...............c.....c.....c..c..........c...c...c...c..c..c..............c.c..c........c..c.....c........c.....c........c...c.c.c.chgggggggggggggggggggggggggggggggggheea####.##.#......c..............c.....c.........c..c................#..##bbb#.##.#abb#.c.#..##bba.##.##abbb#.##.##abba###.##aabb#....c...",
+"...c...#.##bbbb#....#....#aabbbba..c.....#...#bbbb#........#...#abbbac.c...##.#abba.....##..##bbbb#...##..#abb...c...........c..c..c.....................c..c..............c...........c.c.c...c....c...c..c..c...........c..........c.....c.c...c.c.c.c...cgggggggggggggggggggggggggggggggggggggghehe###a####..#......c..c......c.....c.....c......c......c.c....#..#abbba..#..#bbb#..##.##bbb#.#..#abbb#..#..#abbb#.#.###bbba.........",
+".......#.##bbb#...c..##..##bbbbb.c........####abb#....c.....####abba........####aa.......##.##bbb#......####bb.c.........c.c.............c.....c.....#####...c.c..c...c..........c.c.c.......c.........c.........c..c.c.c.......c.........c........c.c...c.cgggggggggggggggggggggggggggggggggggggggggggggeee######.#.........c.c...........c.....c.....c.c........#.##abba...#.##ab#..c#..#abb#..##.##bb#..##.##bbb####.##bbba.c..c.c...",
+"...c...###aba#..c......#.##bbbb......c.....###aa#..c....c....###ba#...c....c..###..........###bb#...c....##ba#......c........c.....c..............#####abba#...............####a##................######..c..c..............c.....c...c.....c.c.c.c...ccc.c.cgggggggggggggggggggggggggggggggggggggggggggggggghheee###.c..c........c.....c....c.....c...........c.#..##bbb#..##..abba.c.#..##bb#..#..#aba#c.#..#bbb####.##bbba#..........",
+"........####...........####aba...........c...#........c..................c......c.c..c.c....####..........##....c......c...............c...c..c..##.###aabbbb#......c....#####abbba#.c....c.....#####bbbb#.........c............c...c.....c..c..c.c.ccc.cc.c.gggggggggggggggggggggggggggggggggggggggggggggggggggggh##......c.c........c...c....c.c.....c..c......#..##bb#....#..#aba...##.##bb#c.##.##ab#.##.##bba#.#..##bbb#...........",
+".............c..c.c......#aa#.c.c..c..c....c.....c..c..............c.c.......c......c............c.................c..........c..c...c..........#..###a###abbb#........##.###aa#bbbb#.........##..###aabbba#..c.........c...c.c...............c..c.c..cccccccfggggggggggggggggggggggggggggggggggggggggggggggggggggge##.c..........c.c.......................c....#..##bba#.c.#..#aba#c..#..#aba#..#..#bb#.#...#bb#..#..#abb#....c.......",
+"......c.............c.....#....................c........c..c.....c.......c........c.......c....c........c..c..c..c....c.c.c.............c...c..##.#aabaa####bbb#.c..c#.#.##a#a####abb#..c.....#.###aaa###bbb#....c..c.c...c........c....c.c.....c.c.cc.cc.ccccggggggggggggggggggggggggggggggggggggggggggggggggggggge##.....c....c.........c........c.c.........c.#...#abb#...##.##aba....#.##bb#..##.##bb#.#.##aba..##.##bb#c.c.....c...",
+"...c...........c...........c..c...c..c...........c.................c........c........c...........c..c........................c......c.....c...#..##bbba##.###bb#...c.#..##abba#####bbb#...c.##..#abb#####abba#.c............c..c.....c......c.c..cccc.cccccccceggggggggggggggggggggggggggggggggggggggggggggggggggggg##.c.....c......c.......c.c.c......c.c........#..##abb#...#..#abb#c.##..##bb#..#.##ab####.#aaa#.##.##bba.....c......",
+".....c..c..c......c...c.....c..........c.c.....c........c....c...................c.....c..c...........c..c.....c..c........c......c...c.......#.##bbbb###..##abb#c...#.##abbbb##.###bbb.....#.##abbbba#.###bb#......c...c.................c...c.cc..cccccccccccggggggggggggggggggggggggggggggggggggggggggggggggggggh##.....c......c....c.c.........##.#......c....##..##aba.c.##.##aba...##.##abb..##.##bb####.#bb#.##..##bb##.c........",
+".............c..........c.c.....c..c................c..........c....c.c.c...c...............c....c..................c.c.........c.........c...#.##bbb..#.#..##bb#...#..#abbb####..##bbb#...#..##bbba###..#aabb...c....c..........c...c.....c.c.c.c.cccccccccccchgggggggggggggggggggggggggggggggggggggggggggggggghhggec.......c.c....c...........fhe########.#......##..#abba...#.###bb#.c.#..##bb#..#..#bba###.##bb..##.##bb##....c.....",
+".......c.c.c.....c..c...................c...c..c...........c.c....c...........c.c..c..c..c.....c....c.....c..c....c...........c.....c...c....#..#bbb#.c...#..abb#....#.#bbb#....#..##bb#c..#..#abba#...#..##ba#c...........c...c...c...c.c....c..cccccccccccccccggggggggggggggggggggggggggggggggggggggggggggggggghggh.....c..............c.....fhgggghhee#######.....#.##abb#c.##.##ab#....#.##abb#.##.##bb#.####bb#.##..##bb#......c...",
+"...c..........c............c..c...........c......c.c.c.c.................c.................c.........................c..c...c...c............#..#bba......#.##bb#...#.##bba......#.##bb#...#.##bbb#c....#.#abb#..c.....c.....c............c.c...c.c.ccccccccccccgggggggggggggggggggggggggggggggggggggggggggggggghhhggc..c...c........c.....c..#egggggggggggheee####.#...##aba...##.#abb#...#..#abb#..#.##bba.##.##bb#.##.##bb##c........",
+".....c......c....c....c............c..c.......c...............c...c........c.c..c...c..c.....c.c...c..c.c..c..c..c........c.......c..c..c....#.##ab#......#.##bb#...#.##bb#...c..##.#bb#...#.##bb#......#.##bb#......c.....c......c..c.........cc.cccccccccccccccggggggggggggggggggggggggggggggggggggggggggggggghhhgge..........c..c....c.....eggggggggggggggggggheef###.##ab##..#.##ab#....#.#abb#..#.##bba..#.##bb#..##.#abb#.c.......",
+"..........c.............c.......c.........c..............c..c........c.........c......................................c........c..........c..#.##bb#.c.....#.#bb#...#.##bb#........##bb##c.#.##bb#......#..#bba.c..c..........c.c.........c..c.c.cc.cccccccccccccgggggggggggggggggggggggggggggggggggggggggggggggghhggg....c...........c...c..#gggggggggggggggggggggggghhfeeaaaa##..##bb#.c##.##abb#..#.#abba..#.##bbb#.#..#abb#...c.....",
+"......c.c....c.....c..c.............c..c....c.c.....c..............c..............c......c.......c..c.c.....c..c.c..c.....c............c.....#.##bb#...c..#.##bb#...#.#abb.c...c.##.#bb#...#.#abb.c.....#.##bb#..c......c..........c..c.c..c....c.cccccccccccccccfggggggggggggggggggggggggggggggggggggggggggggggghhggg##........c.c.c...c....hggggggggggggggggggggggggggggghgeeef##.##ba..#..##aba#.##.#abb#.##.##bbb#.####abbb.....c...",
+"...............c........c.c..c.c..c......c......c.c....c..c....c.....c.c.c..####....c.........c.............................c.c............c.#..#bb#.......#.#bba...#.#aba...c.....##bba.c.#.##bb....c...#.#bb#....c......c....................c.cc.ccccccccccccccggggggggggggggggggggggggggggggggggggggggggggggghhhgge##.c.c.........c..c..egggggggggggggggggggggggggggggggggggghheeea####...#bb#.##..#bbb###..##bbba##..#abba.........",
+"....c.....c........c.................................c...................####aaa#c.....c..c.c.....c.....c..c.....c..c..c..c.........c..c.....#.##bb#....c.#.##bb#...#.##bb.......##.#ab#...#.#abb.c......#.#aba.c......c.....c...c..c.c...c.c.c.c.cccccccccccccccchggggggggggggggggggggggggggggggggggggggggggggggghhggh##.....c.c.c.c...c..eggggggggggggggggggggggggggggggggggggggggggghheef####b###..#aab#.##.##abba###.#abbb#..c..c...",
+"..c.....c.....c.........c...c......c.c...c.....c........c...c..c.c.....###aadda#a...............c.....c.........................c............#.##bb#..c...#.##bb#...#.#bba........#.#bba...#.##bb...c....#.#ab#..........c.....................c.c.ccccccccccccccccggggggggggggggggggggggggggggggggggggggggggggggghhggg##.............c.c.#ggggggggggggggggggggggggggggggggggggggggggggggggghhhee#f#...#aa###..#abbb###.##bbbb#.........",
+".....c......c...c...c.c.......c............c.c......................####aaddddd##....c..c..c.......c.....c..c.c.....c.....c........c....c.c..#.##bb#c.....#.##bb#...#.##bb..c....#.##bb#...#.#abb........#.#bba.c...c..c.....c..c..c.......c......ccccccccccccccccchgggggggggggggggggggggggggggggggggggggggggggggghhhgge##.......c.c.c....hggggggggggggggggggggggggggggggggggggggggggggggggggggggghheee#####.###bbba##.##abbb#...c..c...",
+".......c..................c.....c.c....c...........c....c..c......####bddddbbbb#.#...........c.......c......................c.c.............c#.##bb#........##bb#...#.#bba.....c..#.#bb#.c.#.##bb........#.#bb#..........c...........c..c......c.c.cccccccccccccccccggggggggggggggggggggggggggggggggggggggggggggggghhggh##..c.c.....c.c..egggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghhe..##bbb###.##bbbb##..........",
+".....c............c..c.........................c.c...c.........####abddddbdidbdd##...c....c....c...c....c......c.c.c..c.c........c..c.c..c...#.##bb#....c.#..#bb#...#.##bb...c...#.##ab#...#.#abb..c.....#.#aba.....c..c....c.c..c...........c..c.c.ccccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggggjhggg#.c....c.c.c.c..fggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggge.##abbb###.##abb#...c..c.....",
+".........c..c.c........c..c....c.....c......c......c.........####bddddddbiiidddd#.....................c......c..............c..............c.#.##bb#......#.##bb#...#.#bba........#.#bba.c##.##bb.....c.#..#bb#..........c...........c.c.c.c...c...ccccccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggghhhggf.........c.c...hggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggh...#bbb###.##bbbb.............",
+"...c..............c..c.......c...c.......c....c........c....###bddddddbiiddbdddda##....c.c.....c.........c.c........c.c...c....c...c..c..c...#.##bb#.c.....#.#bb#...####bb.c...c.#.##bb#...#.#abb.c......###aba.c.c..c.......c..c..c..........c....c.ccccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggggjhggh##.c...c...cc.hgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggge#..##bb#.##.##bba#......c..c...",
+".....c...c..c..............c.......c.c.....c.......c.....#.#addddddbdiibdbddddddd##........c.....c................c..............c.........c.#.##bb#...c..#..#bb#..#..#bba.......#.##bb#...#.##bb........#.#bb#..........c................c.....c.c.ccccccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggghhggh.#...c...c.c.fgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghc.#..#aba.##.##bb#..............",
+"..c....c.......c.....c..................c.......c.....#.##addddddbiibbbdddddddddda....c..c...........c........c.c.......c..c...c.....c.......#.##bb#.c....#.##bb#..#.###bb#.......#.#bb#...#.#abb........#.#aba.c.....c..........c..c...c.....c..c..ccccccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggghhhggf..c..c.c.c.cggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggh##.##.##bb###.##bb#.c.c..c...c...",
+"....c....c.............c.c..c.c...c..........c.....##.#addddddbdibbddddddddddddddd##.........c...c.....c..c........c..............c..........#.##bb#.......#.#bb#..#..#bba....c...#.#bb##c.#.##bb...c....#.#bb#.........c..................c.......c.c.ccccccccccccccceggggggggggggggggggggggggggggggggggggggggggggghhhggh.#...c.ccc.hgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggh#a#..##.#aba###.##bb#.............",
+".................c.c............c.......c........###aaddddddbidibddddddddddddddddda##c.............c.c.......c........c..c..c..........c..c....#abb#....c.##.#ab#...###bba..c.....#.#bb#...#.#abb.c......#.#aba..c..c.c...c.c.c...c...c..c...c......c.cccccccccccccccccggggggggggggggggggggggggggggggggggggggggggggggkhggh##.c...c..egggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggh.#ab#.##.##abb##.##abb.c....c......",
+"...c......c.c............c..........c.c...c.c.####addddddbdidbbddddddddddddddddddda##.....c...c................c.................c...........#..#bb#.c.....#.#bb#..#..#bb#.......#.##bb##c.#.##ba....c...#.#bb#................................c.c.c.c.cccccccccccccccchggggggggggggggggggggggggggggggggggggggggggggghhhgge#...ccc.fgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggh..##b#..##.##bb###.##bb#............",
+".....c..c.......c....c.........c............###abddddddbdibbbdddddddddddddddddddddd#a#c.c...c....c.........c.c......c...c....c.c......c......#.##bb#c...c..#.#ab#..#.##ab#.c......#.#bb#...#.#abb.......#.##aba.c..c...c..c.....c..c...c.c...c......c.ccccccccccccccccccggggggggggggggggggggggggggggggggggggggggggggghhhgge#...c.c.gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggh##..#bb#..#.###bb###.##bb#.c..c..c...",
+"...........c.......c...c....c....c..c....####addddddbdiibbddddddddddddddddddddddddda##................c..c......c.c...c..........c.c.......c.#.##bb#.......#.#ab#..#..#bb#...c....#.##ba...#.##bb...c....#.#ab#......c......c..............c...c..c..c.cccccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggghhggh##..c..hggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggh#..#.##ba#.#..#abb####.#aba...........",
+"...c..c..c...c.c.c........c............####bddddddbbibbddddddddddddddddddddddddddddd##....c..c....c.c...............c......c........c..c.c...####bb.........##ab#..####ab#.c.....##.#bb#...#.#aba#c......#.#aba...............c.....c...c.......c...c..ccccccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggkhggg##c.ccfggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggh##c.#.##bb#..#.##bba.##.##bb#.c....c...",
+"......................c......c..c...####addddddbdbibdddddddddddddddddddddddddddddddd#a#.c......c......c.c..c....c......c........c.............##bb#........###ab#....##bb#.....c..#.#aba.c.####ba........#.##b#.......c....c.................c.........ccccccccccccccccccggggggggggggggggggggggggggggggggggggggggggggghhgggf.cccfggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg#a#c..#.#bb##.#.##bb##.#..#abb..........",
+".....c.c.c.......c.........c......###aadddddddbibbddddddddddddddddddddddddddddddddddd##......c................c.............c..............c....#......c..c.####.....####........c####b#....##b##.....c..###bb#..c..c....c.....c..c..c.............c..c..ccccccccccccccccegggggggggggggggggggggggggggggggggggggggggggghhhggf...chggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghf#a#cc#.##bb#.##.#abba...#.##bb#..c..c...",
+"...........c...c...c.c..c.......###abdddddbdibbdddddddddddddddddddddddddddddddddddddd###.c......c.c......c..c.....c...c..c..........c....c........c.c.......c.....c...#.#....c.....####......##.....c.....####........c................c..c...c......c.c.cccccccccccccccccggggggggggggggggggggggggggggggggggggggggggggghhgge#..fggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggffa#..#..#abb###..#abb#...####bbb.........",
+"....c...c.................c...c.#addddddbbibbdddddddddddddddddddddddddddddddddddddddda##...c.........c.....................c..c.c.c....c........c.....c...c..........c..c..c.....c.....c.....c..c.........c.......c......c......c.c..c......c...c.c.....c.ccccccccccccccccegggggggggggggggggggggggggggggggggggggggggggghhggh#..ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggf.#a#....##aba.##.##bbb##..#.#abb#.c...c...",
+"......c........c.......c....c.#bdddddbdibdbddddddddddddddddddddddddddddddddddddddddddd##........c......c..c..c..c..c.c..c...........c.....c.......c.............c....................c............c.........c..........c...c.c.........c...........c..c.c.cccccccccccccccccgggggggggggggggggggggggggggggggggggggggggggghhgghccegggggggggggggggggggggggggggggggggggggggggggggggggggggggghggggfcf#a#c.#.##bb#.#..#bbb#.#.#..#abb#.........",
+"..c.c........c.....c.....c...#dddddddibbdddddddddddddddddddddddddddddddddddddddddddddd#a#...c.c.........c......................c...........c..c...............c........c..c..c..c..c.....c....c...........c......c...c..........c....c....c.c....c..c...c.ccccccccccccccccchgggggggggggggggggggggggggggggggggggggggggghhhgggccggggggggggggggggggggggggggggggggggggggggggggggggggggggghgggggfcfea#c....#bba.##.##abb#...#.##abb.c........",
+".......c.c.....c.....c.....c.#dddddiibddddddddddddddddddddddddddddddddddddddddddddddddd##........c.c............c..c..c..c.c.....c..c....c.............c.c.........c...................c..........c..c..c...c.c....c.....c.............c.......c.......c.c.cccccccccccccccccggggggggggggggggggggggggggggggggggggggggggghhhgh.eggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggfcc#a#.c...##bb#c##.#abba#.c##.#abb#...c.c.c..",
+"...........c.c.....c...c.c....adddbdbdddddddddddddddddddddddddddddddddddddddddddddddddd###.c...c......c.....c.c...............c.......c.....c..c...c.c.....c..c............c....c....c....c.c...c...............c.............c..c..c....c..c......c.c.....cccccccccccccccccggggggggggggggggggggggggggggggggggggggggggghkhggegggggggggggggggggggggggggggggggggggggggggggggggggggggghgggggfccfea#cc#..#aba..#..#abb#...#..#abb#..........",
+"...c............c.......c...c.#ddddbbdddddddddddddddddddddddddddddddddddddddddddddddddda##...c...c........c......c..c..c..c.....c.c.....c........c......c.......c.c..c.............c................c.c..c..c..........c..c...................c..c......c.c.cccccccccccccccccggggggggggggggggggggggggggggggggggggggggggghkhhggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggfccf#a##c....#bb#..#.##bba#.c.#.##bb##..c.......",
+"........c.c.......c.c.c...c.c..ddddbbddddddddddddddddddddddddddddddddddddddddddddddddddd#a.c.......c....c......c..............c......c.........c......c..................c..c....c....c......c..c...............c....c......c..c..c.c....c............c.....cccccccccccccccccgggggggghghggggggggggggggggggggggggggggggghhhkhhggggggggggggggggggggggggggggggggggggggggggggggggggggggggggecccf###ccc#.##ba.c.#.##bb#....#.#abb#.c.....c...",
+"...c........c...c....c.c.cc.ccc#dddddddddddddddddddddddddddddddddddddddddddddddddddddddd###...c......c.....c.....c...c..c..........c...c.c.c......c.......c....c......c..................c........c...c....c.c....c....c..c...................c..c..c...c.c.ccccccccccccccccccgggggggggggghgggggggggggggggggggggggggggggghhhhggggggggggggggggggggggggggggggggggggggggggggggggggghgggggecccff##.ccc.##aa#...###ab#..c..#.#bb#......c.....",
+"......c............c..c.c..cc.c.ddddbbddddddddddddddddddddddddddddddddddddddddddddddddddd##......c......c....c...............c.........##....c..c.....c......c...c......c..c..c..............c......c................c........c..c....c..c..c.........c.....c.ccccccccccccccccggggggggghggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghgggggeccccf##cccc...###.c...##b##c....###aa#............",
+"...c.......c..c..c...c.c.cc.ccc.addddbddddddddddddddddddddddddddddddddddddddddddddddddddd#a....c.....c....c.......c..c..c..c...c..c...#.aaaa####.........c.........c.c..................c...............c........c......c......................c..c.....c.c..cccccccccccccccccegggggggghghgghghgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggecccccfffc.c.c...........##.......#####c.c..c....c..",
+".......c...........c.c.c.cccc.cc.ddddbddddddddddddddddddddddddddddddddddddddddddddddddddda##.c..................c.....................#llbbaaa###a####.....c.c............c..c..c..c..c.........c..c.........c.c..............c....c.c.c.c...c.........c....c..ccccccccccccccccggggggghggghgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghggggghccccccccccc.c..c.c..c............c..#........c......",
+"...c..........c.c.c.c..cc.cccccc.adddbbddddddddddddddddddddddddddddddddddddddddddddddddddd##....c.c..c....c.c........c..c..c..c..c....#kmmjklllb######a######.....c.....................c..c.........c...c.......c.c....c..c.....c.........c...c..c...c....c.c.ccccccccccccccccgggggggggggggghgghgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggecccccccccccc...c.......c.....c.c....c.....c.....c....",
+"........c...c........cc.ccccccccc#dddddddddddddddddddddddddddddddddddddddddddddddddddddddd##.......c....c.....c.c..................c...lmmmmjjmkkkklbla#a#a########......c...c.c..c.c.c.........c..c...c..............c........c.............................c.cccccccccccccccccggggggggggghhgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghgggggecccccccccc.c.cc....c..c...c.c......c....c....c........",
+"...c..c.......c.c.c.c..cccccccccc.ddddabddddddddddddddddddddddddddddddddddddddddddddddddddd##.........c...........c.c..c.....c.c.....c..mjjmjmmkkkkmmkkklklaaa####a######........c.......c..c.c...........c....c........c..c.....c.c.c.c.c..c...c...c...c..c.c.c.cccccccccccccccggggggggghghghgghgghgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghcccccccccccc..c.c.c........................c......c....",
+"..........c.c...c..c..ccccccccccccaddddbddddddddddddddddddddddddddddddddddddddddddddddddddd##.c..c..c......c...c...................c....jmjmmmmkkkkkkkmmmkkmkklkll#aa#a#########.......c..c.........c.......c.....c.c.c......c........................c..c....c.cccccccccccccccccgggggggghghgghgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghggggghcccccccccccc.c.c..........c..c........c.........c.......",
+"...c..c.......c...c.ccc.cccccccccccddddbddddddddddddddddddddddddddddddddddddddddddddddddddda.#........c.c........c...c..c.c.c...c.c......mjmjmmmkkkkkkkkkkkkkmmmmmmjjlllaaa#####a####.......c.c..........c....c...........c..............c......c.c..........c.c.ccccccccccccccccgggggggghghghghggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghgggghcccccccccccc.c.c..c.c...........c..c.....c.c.......c.....",
+".........c..c....c..c.cccccccccccccbdddbbddddddddddddddddddddddddddddddddddddddddddddddddddd##..c..c.........c.c...c...........c...c..c..jmjmjmkkkjjkkkkkkkkkkkmkmmmmmmmkjkkllla#a##a#a####.#...c.c..c.c.........c....c.........c...c.........c........c.c.c..c..ccccccccccccccccfgggggghghghghghgghgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghgggghcccccccccccccc.c..c.....c..c...c........c.........c.......",
+"...c..........c.c.c.ccccccccccccccc.ddddbddddddddddddddddddddddddddddddddddddddddddddddddddd#............c...............c...c...c..c.c..lmjmmjkkjjjjjkkkkkkkkkkkkkmmmmkkmmmmmmkkklll#a#a#a##a####.......c...c..........c...c.........c....c....c..c...........cc.ccccccccccccccccgggggggghghghghggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghggggghcccccccccccc.....c...c..c.........c..c.c......c..c....c....",
+".......c.c..........c.ccccccccccccccddddbbddddddddddddddddddddddddddddddddddddddddddddddddddd##...c....c..........c........c..c.c..c....c.jmjjmkkjjjjjjjjjkjkkkkkkkkkkkkkkkmmmmmmmmmkkjklllaa###a##........c.......c.c..........c..c.....c...c........c....c..c..c.cccccccccccccccegggggghghghgghghgghggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghggggggccccccccccccccc.c...c............c.........c................",
+"...c..........c.c.c.c.cccccccccccccc#ddddbddddddddddddddddddddddddddddddddddddddddddddddddddd#a#....c.....c..c......c..c.c...c...c..c.c.c.jjmjmjjjjmjjjjjjjjjkjkkkkkkkkkkkkmkmmmmmmmmmmmmjkjkklllaa#c...c......c.......c..c..c.......c.........c..c.............c.cccccccccccccccccgggggggghghghgghggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghggggggccccccccccccc.c....c...c....c...c....c........c.........c....",
+".....c..c..c...c..c.c.cccccccccccccc.ddddbddddddddddddddddddddddddddddddddddddddddddddddddddda##..c.....c......c..c........c...cc..ccc.ccc.jmjmjjjjjjjmjjjjjjjjjkkkkkkkkkkkkmkkmmmmmmmmmmmmmmjjmml##..............c..c.........c.c.c.....c...c..........c....c....c.cccccccccccccccgggggggghghghghgghggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghggggh.cccccccccccc...c.c..c.....................c........c.c.......",
+".............c....c.cccccccccccccccccadddbbddddddddddddddddddddddddddddddddddddddddddddddddddd###....c....c.........c.c..c..c.c.ccc.c.c.c..jmjmjjmjjjjjjmjjjjjjjjjjkkkkkkkkkkkkkmkmmmmmmmmmmkkjmmj#a...c.....c...........c..c.......c......c....c..c..c...c.c..cc.c.ccccccccccccccccgggggggghghghghggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghggggghccccccccccccc...c.......c..c..c..................c.......c.....",
+"........c..c....c..c..ccccccccccccccc#ddddbddddddddddddddddddddddddddddddddddddddddddddddddddda##..c...c....c..c..c........c...c..cc.c.cccclmjjmjjjjjmjjjjmjjjjjjjjjjjkkkkkkkkkkkkkkkkmmmmmmkmjjmja#.c...c.c.....c..c.................c.c........................c.c.cccccccccccccccggggggghghghghgghghggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghgggggccccccccccccc.c.c..c.c...............c...c..c........c......c...",
+"...c..c..........c..cc.cccccccccccccccadddbbddddddddddddddddddddddddddddddddddddddddddddddddddd##........c.............c.c...c.c.cccccc.ccccjmjmjjjjjjjjjjjjjjjjjkjjjjjkjjjjkkkkkkkkkkkkmkkkkkjmjml##.........c.......c...c.......##a###......c.c.c..c...c..........cccccccccccccccccggggggghghgghghggghggggggggggggggggggggggggggggggggggggggggggggggggggggggggghgggggfcccccccccccc.c.c.......c..c.....c..c..........c..........c......",
+"...........c...c...c..ccccccccccccccccaddddbddddddddddddddddddddddddddddddddddddddddddddddddddda##....c.........c..........c.c.c..c.c.ccccccjjmjjmjjjjjmjjjjjmjjjjjjjkjjjkjkjjjkjkkkkkkkjkkkmjjjmmla#.......c....c..c...c....c..#aaaaa##a######...............c........ccccccccccccccgggggggghghhghgghgggggggggggggggggggggggggggggggggggggggggggggggggggggggggghgggggccccccccccccc.c.c...............c......c.................c....c...",
+"...c..c......c...c...c.ccccccccccccccccddddbbdddddddddddddddddddddddddddddddddddddddddddddddddda##..c......c........c.c..c..c.cccccccccccccc.jmjmjjjjjjjjjjjjjjjjjjjjjjkjjjjkjjjjkkjkkkkjkkkkkjmjmj###c...c.....................#mmjklla#a####a#####......c.c.........f#fcccccccccccccggggggghghghgghggghggggggggggggggggggggggggggggggggggggggggggggggggggggghhgggggcccccccccccccc.....c..c...c........c......c.......c.c.c............",
+"..........c....c....c.cccccccccccccccccadddbdddddddddddddddddddddddddddddddddddddddddddddddddddd#a.......c....c..c..........c..c..ccccc.cccccjmjmjjjjjjjjjjjjjjjjjkjjkjjjjkkjjkkjkjjkkjkkkkkjjjjjmjaa............c.....c...c...#jmmmmjmjkkkllaa#a#a##a#####....c..c....c#e#efeffccccccggggggghghghghghggggggggggggggggggggggggggggggggggggggggggggggggggggggghggggggccccccccccccc.c.c..c.....c......c.c...c......c.c.c....#...c...c.c...",
+"...c..c..........c...c.cccccccccccccccc.ddddbbdddddddddddddddddddddddddddddddddddddddddddddddddd###........c.......c...c...c.cc.ccccccccccccc.jjmjmjjjjjjjjjjjjjjjjjkjjjjjjjkjkjkkjkjjkjkkjkkjjmjmjl##..c..c.c...........c.....amjjjjmmnmmmmmjjklllla#a####a####....c.c.cccff#eeeecccchggggggghghghgghgghgggggggggggggggggggggggggggggggggggggggggggggggggggghgggggfcccccccccccc.c.c.c...c.....c..c.....c...c...........##b##....###....",
+".........c..c..c..c.c..cccccccccccccccccddddbdddddddddddddddddddddddddddddddddddddddddddddddddddd##..c..c.......c.....c....c...cccccccccccccccjmjmjjjjjjjjjjjjjjmjjjjkjjkjkjjkjjkjjkkkkkjkjkkjjjmjml##..........c.c..c.c......#mjmmjmmnmnnmnmmmmmmmmkjmlkla#a#a#######f.ccccccccffefcccggggggghhghghhgghggggggggggggggggggggggggggggggggggggggggggggggggggghhgggggccccccccccccc.c......c...c....#.##.####.....c.c......###bb.c.###aa....",
+"...c....c.....c......cc.cccccccccccccccc#ddddbbdddddddddddddddddddddddddddddddddddddddddddddddddd#a#......c..c....c......c..c.c..cccccccccccccljjjmjjjjjjjjjjmjjjjjjjjjkjjkjkjkkjkkkjjkjkkkkkkjjjmjj#a...c...c......c.....c..#lmmjjjmmnnmnmnmnmnmnnmmjmmmmmmjklllba#######cfccccccccfcceggggggggghghghgghgggggggggggggggggggggggggggggggggggggggggggggggggghgggggfccccccccccccc.c...c....c...######.###bbaaa##.......##.##b######aba#c..",
+"............c......c.c..cccccccccccccccc.ddddbddddddddddddddddddddddddddddddddddddddddddddddddddda##.c.c........c....c.....c.c.ccccccccccccccc.jmjmjjmjjjjjjjjjjjjmjjkkjjkkjjkjjkkjkjkkkkjkjkkjjjjmmb#.c...c...c..c.....c...#emjmjmjkmmmmmmnmmnmnmnmmjjjmjmmmmmmmmjkkllef#.fccccccccccccggghhhhggghghgghggggggggggggggggggggggggggggggggggggggggggggggggghhgggggfccccccccccccc..c.c........###.....#.###abbbbbb#b####.#.##bbb###abba....",
+"...c..c..c.....c.c....cc.cccccccccccccccc#dddbbddddddddddddddddddddddddddddddddddddddddddddddddddd###....c...c.........c.c....cc.ccccccccccccccljjjjjjjjjjjjjjjjjjjjjjkjkjjkkjkjkjkkkjkkjkkkkkjjmjmjl##.............c....c..#kmmjjjjjkkmmmmkmmmmmmmnmmmmjjjjjjmjmjmmmmmmmjjlleefccccccccggghkkhhggghghgghghghgggggggggggggggggggggggggggggggggggggggggggghgggggecccccccccccc.c.c....c....##....#..#...###a#aaaabba###..##abba#aaabb#....",
+".............c......c...ccccccccccccccccc#ddddbddddddddddddddddddddddddddddddddddddddddddddddddddda##.c........c.....c.....c.c...cccccccccccccc.mmjmmjjjjjmjjjjjjjjjjkjjkjkjjkkjkkkjkkjkkkkkkjmjjjjml##.....c....c......c...lmmjjjjmkkkkkkkkkmkmmmmmnmnmmmmmjmjjjjjjjjmjmmmmmmmjjleeeccccghghhlhhghggggghgggggggggggggggggggggggggggggggggggggggggggggghhgggggeccccccccccccc.c....c.....##......#....#.###################bbbbbbbb#.....",
+"...c.c..c.......c..c..c.c.ccccccccccccccccadddbbddddddddddddddddddddddddddddddddddddddddddddddddddd##...c..c.....c..c...c..c.c.cccccccccccccccccjjjmjjmjjjjjjjjjkjjkjkjjkkkkkjjkkkjkkkkkkkkkkkjjjmjmja#.........c..c...c...#mjjmjmjjjkkkkkkkkkkkkkkkjkkmmmmmmmmmmmmmjjjjjjjmjmmmmjmjjjjhlhgggghhhgghgggggghgggggggggggggggggggggggggggggggggggggggggggghgggggecccccccccccc.c.c.c...c.c.#...#.##.....#....############babbbbbbbbbb#......",
+"...........c..c.....c..c.cccccccccccccccccaddddbddddddddddddddddddddddddddddddddddddddddddddddddddda##........c...............c..ccccccccccccccc.mjjmjjjjjjjjjjjjkkjkjkjkjjkjkkjkjkkkkkkkkkkkkkjjjjmm###c..c..c.........c..jjmmjjjjkkkkkkkkkkkkkkkkkkkkkkmmmmmmmmmmmmmmmmmmjjjjjjjjmjmmmmmmhghhhhhghghggggggghggggggggggggggggggggggggggggggggggggggghhggggghcccccccccccc.c.c....c....#........#.#.#...#.......###a#bbbbbbbbbbb##.c.....",
+"......c...........c.....c.cccccccccccccccccddddbbdddddddddddddddddddddddddddddddddddddddddddddddddda##...c......c..c....c.c.c..cc.cccccccccccccccjmjjjmjjjjjjjmjjjjjkjkkkjkkkkjkkkkkkkkkkkkkkkkkjmjmjla#........c.....c...lmmjjjjjmjkkkkkkkkkkkkkkkkkkkkkkjjkkkmkmmjmmmmmmmmmmmmjmjjjjjmjmjggghhhgghghggggghggggggggggggggggggggggggggggggggggggggggghgggggecccccccccccc.c...c......##..#.##.#........#......#.###abbbbbbbb####......c..",
+"........c..c..c.....c...c.cccccccccccccccccadddbdddddddddddddddddddddddddddddddddddddddddddddddddddd#a.c....c.c................c.ccccccccccccccccjmjmjjjmjjjjjjjkjkjkkjjkjkjkkkkkkjkkkkkkkkkkkkjjjjjml##..c..c........cc.#jmjmjmjmkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkjjkjkkjjjjmmmmmmmmjjmjmjjggghhhghhghgghgghggggggggggggggggggggggggggggggggggggggggghhgggghccccccccccccc.c.c...c....#....#..#.#..#..#......#...##abbbb##.#..#......c....",
+"...c.c..........c.....c..c.cccccccccccccccc.ddddbbdddddddddddddddddddddddddddddddddddddddddddddddddda##...c........c...c...c.c.c.cccccccccccccccccjmjmjjjjjjjjjjjkjkkjkkkkkkjkkjkkkkkkkkkkkkkkkkjmjmmj###c.......c..ccc..lmmjjjjjmjkkkkkkkkkkkkkkkkkkkkkkkkkkkjkjkkjkjjmjkjjjjjjmmmmjjmjjgggghhhgghghghgghghghggggggggggggggggggggggggggggggggggggghhggggecccccccccccc.c.c..c.....##...#..#...........#.#.#.####bbbbba#.........c.......",
+".........c..c.c.....c...c.c.ccccccccccccccccddddbdddddddddddddddddddddddddddddddddddddddddddddddddddd##..............c..........c.ccccccccccccccccjmjjmjmjjmjjmjjjkjjkkjjkjkkkkkkkkkkkkkkkkkkkkmjjjjmm#a.....c.......c..lmmjjmjmkkkmkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkkjjjjjjjjjjmjjmjmjmggggghhggggghghghghgggggggggggggggggggggggggggggggggggggghhhgggghccccccccccccc.c..c......##..#.#.#..#.#.#.#.#.......###abbbb#.c.............c...",
+"...c..c..........c....c.c.cccccccccccccccccc.ddddbddddddddddddddddddddddddddddddddddddddddddddddddddd##....c....c.c.......c.c...c.cccccccccccccccc.jmjmjjjjjjjjjjkjkkkjkkkkkkkkkkkkkkkkkkkkkkkkkkjmjjml##...........cc.#jmjmjjjmjmkkkmkkkkkkkkkkkkkkkkkkkkkkkkjkkkkkjjjjkkkjjjjkkjmjmjjggggghhhggggggghghgghghghggggggggggggggggggggggggggggggggghggggghccccccccccccc.c.c..c...###.###..#.#...#..........####abbbbba#....c...c..c.......",
+"..........c....c.....c...c..cccccccccccccccc.ddddbbdddddddddddddddddddddddddddddddddddddddddddddddddda##.c....c......c.........c.c.ccccccccccccccccjmjjmjkkjjjjjkjkjjkkkkkkkkkkkkkkkkkkkkkkkkkkkmjjjmmla#.c...c....ccc.lmjmjjjmkkkkkkkkmkkkkkkkkkkkkkkkkkkkkkkkjkkjkkjkkjjjjjkkjjmjmjjjgggghhhhghgggghghghghgggggggggggggggggggggggggggggggggggghhgggggccccccccccccc.c......######aa###.....#..#.#.#.#.#..###bbbbb#.....................",
+"...c....c........c.........c.cccccccccccccccc#dddbdbdddddddddddddddddddddddddddddddddddddddddddddddddd##....c..........c.c..c.c.c.ccccccccccccfcccc.jmjjjmjkjkkjkkkjkkkjkkkkkkkkkkkkkkkkkkkkkkkkjmjjjmj##.........cc..ejmjmjjjmkkmkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjkjkjkkkkkjmjmjjgggghhhgghgghggghghghgggggggggggggggggggggggggggggggggggghhhggghccccccccccccc....#######aaabbaa##.#....#...#.......##bbbbbb##......c...c..c..c....",
+"..............c......c..c.c.ccccccccccccccccc#ddddbddddddddddddddddddddddddddddddddddddddddddddddddddd#........c....c............c..ccccccccccccccc.jjmmjjkkkjjkjkjkkjkkkkkkkkkkkkkkkkkkkkkkkkkmkjjjmjm#a.c.c.....cc..jmjmjjjmkkmkmkmkkkkkkkkkkkkkkkkkkkkkkkkkkkjkkjkjkkjkkkkkkjjmjjjgggghhhhghggggggghghghggggghgggggggggggggggggggggggggggggghhggggccccccccccccc.c.##..####aabbba#####.#.#....#...##.#.##abbb##....c.c...c............",
+"...c.c...c.c....c........c.c.cccccccccccccccccadddbbddddddddddddddddddddddddddddddddddddddddddddddddddd#a........c....c..c.c.c.c..c.cccccccccccfccccjjjmjjmjkkjkjkkkjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjmjmml##.......cc..lmmjjjmmmkmkkkkmkmkmkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjjkjkjkkkmmjmjggggghhhgghggghgggghghghggghggggggggggggggggggggggggggggggghhgggcccccccccccc.c..#...###bbbbb##......###.#.....#...#.###bbb##...c.........c.c..c.....",
+".............c......c.......c.cccccccccccccccc#ddddbddddddddddddddddddddddddddddddddddddddddddddddddddd###..c.c.....c............c.ccccccccccccccccc.jmjmjjkkjjjjkjkkkkkkkkkkkkkkkkkkkkkkkkkkmkmkmjjjjmj##.c....cc..fjjmjmjkkmkkmkmkmkkkkmkmkmkkkkkkkkkkkkkkkkkkkkjkjkjkkkkkkjmjjmjgggghhhhghhggggggghhghghghggggggggggggggggggggggggggggggggghhhggccccc.ccccccc.c.....#.aabbb##........c...#####......#####aba..c......c...........c...",
+"...c..c.c......c......c..c.c.ccccccccccccccccccddddbbddddddddddddddddddddddddddddddddddddddddddddddddddd##......c..........c..c.c....ccccccccccffccccjjmjmjkkkkkkjkjkjkkkkkkkkkkkkkkkkkkkkkkkkmkkmjjmjmj###c....cc..lmmjjjjmmkmkkmmkmkmkmjmjkkkkkkkkkkkkkkkkkkkkkkkkkjkkkjkkkmjmjjggggghhhhhghghgggggghghghghghghghggggggggggggggggggggggggggggjhhggccc..cccccc.c..#...##abbb#...c.............####..#######abb#.....c......c...........",
+"...........c........c..c..c.c..ccccccccccccccccadddbdddddddddddddddddddddddddddddddddddddddddddddddddddd###c.c.....c.....c..........ccccccccccccccccc.mjjmjmkkkjkkkjkkkkkkkkkkkkkkkkkkkkkkkmkmkkkkmjjmjma#.....cc.clmmjjmjmmkmkmmkkkmkkkmkkkmkmkkkkkkkkkkkkkkkkkkkkkkjkkkkkjmjmjjjgggghhhhghghhggghggghhghghghggggggggggggggggggggggggggggggggghkgggcccc..ccc.c....#..##abbba......................#.##bb####aba.c........c...c...c.....",
+".....c..c....................cccccccccccccccccc.ddddbbdddddddddddddddddddddddddddddddddddddddddddddddddda##..........c.....c...c.c.c..ccccccccccfcccccjmjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkmmkkkkkmkmkjmjmjl##c...c..fkmjmjjjmmkmmmkmmkmkmkkkmkkkkmkkmkkkkkkkkkkkkkkkkkkkkkkkkjmjmjjgggghhhhghhhghggghgggghghghghgggggghgggggggggggggggggggggggggghkhgghccc..c.c.c......##abbbb#....c..c.........c..c.#.##bb#####bb#.......................",
+".............c...c.c..c......c..ccccccccccccccccddddbdddddddddddddddddddddddddddddddddddddddddddddddddddd#a..c...........c........c..c.ccccccccccfccccjjmjmmkkkkjjjkkkkkkkkkkkkkkkkkkkkmjkkmkmmkkkmjjjjml##.c.ccc.lmjmjjjmmkmmkmmkmmkmkmkmkkmmkkmkkkkkkkkkkkkkkkkkkkkkkkkmjjmjjjgggghhhhhhhgggggghggghgghghghgggghggggggggggggggggggggggggggggghkhgggccc...cc.c.c.####abbbb#...c.......c..c.c.......###baa#..##bb#....c....c.....c..c...",
+"...c...c.......c........c...c.cccccccccccccccccc.ddddbbdddddddddddddddddddddddddddddddddddddddddddddddddd###...c..c..c.c......c.c..c.ccccccccccccccccccjmjmjjmkkkkkkkkkkkkkkkkkkmjkkkmkkmkmkmjmmmkmkmjmjj##....c.#jmjmjmmmmmkmmkmkmmkmkmmmkkmkmkmkmkkmkkmkkkkkkkkkkkkkkkkkmmjmjgggghhjhghgghgggghggggghggghghghggggghggggggggggggggggggggggggggghkhggfccc.....c...###abbbba........c...............####b#####.#bb#......................",
+".....c....c..c......c.c.........cccccccccccccccccddddbdddddddddddddddddddddddddddddddddddddddddddddddddddd##................c.....c..c..cccccccccffccccjmjjmkkkkjkjkkkkkkkkkkkkkjmkkkmkkkmkkkmkkkmkmjjjmma#fcccccjmjmjjjmmkmmmkmmkmkmkmmkkmkmkkmkkkmkkkkkkkkkkkkkkkkkkkkjjmjjjgggghhhhghhggghgghggghgggghhghghghgghggggggggggggggggggggggggggggghkhgggccc...c....###bbbba#.....c.....c...c.........#.#bd#.c####ab#..c..c.c...c.c....c...",
+"...c.............c......c.c.c.cc.cccccccccccccccc#dddbibdddddddddddddddddddddddddddddddddddddddddddddddddd#a...c..c..c........c....c.c.cccccccccccfcccc.jmjmjjmkkkkkkkkkkkkkkkkkkkkmkkkmkkmmkkmmmkmkjmjmjl##c.c.#jmjjjmmmkmmkmmkmmmkmmmkmkmkmkmkmkmkkkmkkkkkkkkkkkkkkmkkmmjmjggggghjhhhghggggggggggggggggghghghghgggghggggggggggggggggggggggggggghkgggfcc.....c.###aba##...c.c...c............c....###bb##...###b##.....................",
+".......c.c..c.........c.....c....cccccccccccccccc#ddddbddddddddddddddddddddddddddddddddddddddddddddddddddda##...........c..c..........cc.ccccccccccfccccjmjjmkkkkkkkkkkkkkkkkkkkkkmkmkmkmkmkmkmkmkmmjjjjml##ccc.jmmjmjkmmmmmmmmmmkmkmkmkmkmmkmkkkmkkmkkkmkkkkkkkkkkkkkmjmjjjjgggghhhhghhhgggghghgggghgggghghghghgghhggggggggggggggggggggggggggggghkhgggc.c.....###aba##.............c..c..c.c.....#.##bb#c...##bb#....c..c..c..c..c.c...",
+"...c..........c...c.....c.c....cc.ccccccccccccccccadddbbddddddddddddddddddddddddddddddddddddddddddddddddddd##...c..c.........c..c.c...c.c.ccccccccefccccjmjmjjmkkkkkkkkkkkkkkkkkmkmkmmkmkmkmkmmmkmmkmjmjmj##.c.emjjmjjmmmmmmmmmmmmmmmkmmkmmkmkmmkkmmkmkkkkmkkkkkkkkkmkjmjmjjgggghjhhghhhghgggghghggghghggggghghghggggggggggggggggggggggggggggggggghkgggcc.c.c.####ba#...c.c..c................c.c#.##bb#....#.#b##...c..................",
+"......c..c..c...c............c.c.ccccccccccccccccc#ddddbddddddddddddddddddddddddddddddddddddddddddddddddddd#a#...........c.c.........c..ccccccccffeecccc.jmjmjmkkkkkkkjkkkkkkkkkkkkkkkmkmkmkmmmkmmmkmjjmjm##c..jmjmjjmmmmmmmmmmmkmmmmmkmmkmmmkmmmkkmkkkmkmjkkkkkkkkkjmjmjjjgggghhhhghhgggghhggggghhggghhggghghghghgggghgggggggggggggggggggggggggghhhhggh......#.aba#..c...........c.....c........###aba#..c.###ab..c.......c.....c..c...",
+"..................c..c.c....c...c.cccccccccccccccccddddbiddddddddddddddddddddddddddddddddddddddddddddddddddd##...c....c........c.c.c..c.c.ccccffeeeccccccjjmjmjmkkkkkkkkkkkkkkmkmkmkmkmkmmkmkmkmmkmmmjjmjmlf..lmmjmjjmmmmmmmmmmmmmkmmmmkmmkmkmkkmkmkkmkmjkkmkkkkkmmkkmjmjjgggghjhhhhhhhhghghgggggghggghhghghghghghgggggggggggggggggggggggggggggggghkhgggcc.c.###ab#.c...c..c..c..c...........c...#.#bb#.....#.#b#.......................",
+"....c..c..c..c..c...............c.cccccccccccccccccadddbbddddddddddddddddddddddddddddddddddddddddddddddddddd###c...c.................c.c.cc..ffefcccccccc#jjmjkmkkkkkkkkkkkkkkkkkkkkmmkmkmmmmkmmmmmkmjjjjml.f.jjjmjjmmmmmmmmmmmmmmmmkmmmmmkmmkmmmmkmmkmkkkkkkkkkmkkmjmjjmgggghhhhhghhhhghhhhhgggghhghgggggghhghghgghgggghgggggggggggggggggggggggggghkggge....###b#.................c..c..c.c....###aba#c....##ab#...c.c.c...c.c..c..c...",
+"..................c.....c...c..c.c.cccccccccccccccccddddbbdddddddddddddddddddddddddddddddddddddddddddddddddda##......c..c...c....c..c......#.#fcccccccccc#mmjjjmmkkkkkkkkkkkkmkmkmkmkkmmkmkmmmmmkmmmmmjmmjjf.lmmjjjmmmmmmmmmmmmmmmmmmmmkmmmmmmkmkmkmkkkkmkkmkkkmkkkjmjmjggggghjhhhhhghhhhhhhghhggghggggghggghghghghgghggggggggggggggggggggggggggggghhkgggc...##ab#..c...c.....c.................#.#bb#c..c..###b#c......................",
+".....c.....c..c...............c...c.ccccccccccccccccbdddbdddddddddddddddddddddddddddddddddddddddddddddddddddd##.c..c...........c............cccccccccc#addkjjmmkmkkkkkkkkkkkkkkkmkmmkmmkmmmmkmmmmmmmmmjjjjmf.jjjmjjmmmmmmnmmmmmmmmmmmmmmmmmmmkmmmkmmkmkmkkkkkkmmmkjmmjjjggggjhhhhhghhhhhhhhhhhhhggggghgggghggghghghghggghgggggggggggggggggggggggggggkhggge...###b.c...c...........c.....c......###bb#.......##ab#..c....c..c....c...c...",
+"...................c..c..c......c.c.cccccccccccccccc.ddddibdddddddddddddddddddddddddddddddddddddddddddddddddd#a#.....c.c..c......c..c......cccccccc#abdddddmmjjjmmkkkkkkkkkkmkmkkkkkmkkmkmmkmmmkmmmmmmkjmjmjlmmjjjmmmnmmmmmmnmmmmmmmmmkmmmkmmmmmkmkkmkkkmkkmkmmkkkmmjmjgggghhhhhhhhhhghhhhhhhhhghgghhghgghggggghghgghghggggggggggggggggggggggggggggghkhgggc..##b#.........c.c..........c...c.c.###ba#.c.c..#.#b##............c..........",
+"..c.c.c.c.c..c...c..........c..c.c.ccccccccccccccccccddddbbddddddddddddddddddddddddddddddddddddddddddddddddddd##..c.........c.c..........cccc.c.##adddddddbmjmmkkmmkkkkkkkkkkkkmkmkmkmmmmkmmmkmmmmmmmmmjjmjmjjjmjmmmmmmmnmmmmmmmmmmmmmmmmmmmmkmkmmmmkmmmmkmkkmmkjmjjjjgggghhjhhhhhghgghhhhghhghhhggghhggghhghghghghhghggghggggggggggggggggggggggggggghkgggf..##b#.....c.......c..c..c..........##bb#.......###b#.....c..c..c........c...",
+"...............c...c..c.c.c...c...c.ccccccccccccccccc#dddbibdddddddddddddddddddddddddddddddddddddddddddddddddd###.......c.......c...c.c.c...###addddddddbddbmjmjkmkkkkkkkmkmkkkkmkmmkmkmmmmmmmmmmmmmmmmmjjjjjjjjjmmnmmnmmmmmmmmmmmmmmmmmmmmmmmmmkmmkmkmkkkkmmkkkmmjmjgggghjhhhhhhhhgggghhhgghhhhggggggggghghhghhghgghghgggggggggggggggggggggggggggggghhhggg..##a#.......c..............####a#####ba..######.#ab#..............c...c.....",
+".............c..............c...c...c.ccccccccccccccc#ddddbdddddddddddddddddddddddddddddddddddddddddddddddddddaa#.c...c....c..c............##bdddddddbdidddijmjmkmmmkkkkkkkkkmkmkmmkmmkmmkmmmmmmmmmmmmmmmjjjmjmmmmmmmmmmmnmnmmnmmnmmmmmmmmmmkmmmkmkmkmkmkmmmkmjmjmjjgggghhjhhhhhhhhghhhhhgghghggggggghggghgggggghghhgghghghghgggggggggggggggggggggggghhkggg#####...c..c...c.c....c.c..#.##a#####bb#.####bb###ab#.........c..........c...",
+"......c...c.....c..c..c.......c...c.ccccccccccccccccccadddbibdddddddddddddddddddddddddddddddddddddddddddddddddd##.......c........c.c....##adddddddbbiiiiibddimjmjkmmkkkkkkkmkkkkkmkmmmkmmmmmmmmmmmmmmmmmmmmmmmnmnmnmnmmnmmmmmmmmmmmmmmmmmmmmmmkmmmmkkmkkkmkmmkmmjjjggggghjhhhhhhhhhghhggghhhhhgghhggggggghggggggghghghgghggggggggggggggggggggggggggggghkhggh...c......................#.####..##bb###..###b#bbb##..c..........c..c......",
+"....c.....................c........c..cccccccccccccccc#ddddbddddddddddddddddddddddddddddddddddddddddddddddddddd#.....c...............###bddddddbbbiiiiiiibddijmjmkmmmkkmkkkkmkmkmkkmkkmmmmkmmmmmmmmmnmmmnmnmnmnmnmmmmnmmmmmmnmnmmmnmmnmmmmmmmmmmmkmmmkmmmmmmkjmjjjjggghhjhhhhhhhhhggghhgghhhhgghhghhhhggggggghggghghghghgggggggggggggggggggggggggggggghhhggg......c.....c...c...c.....###a###.#bba..#..#####bbb........c.c..c...........",
+"..c....c.c..c...c..c...c......c.c...ccc.cccccccccccccccbdddbiddddddddddddddddddddddddddddddddddddddddddddddddddd##.....c.....c...####adddddddbdiiiibbbbbiibddkmjmjkmmkkkkkmkkmkmkkmkmmmkmmmmmmmmmnmmmmnmmmmnmnmmmnmnmmmnmnmmmmmmnmmmmmmmmmmmmmmkmmmkmmkmmmkkkmmjmjgggghjhhhhhhhhhhhghhhghgggggggggghghhgghgggggggghghghghghghgggggggggggggggggggggggggghkhggec................c.......######.##ba#..######aab##....c.c.........c........",
+"...........................c......c.c..ccccccccccccccccadddbbbdddddddddddddddddddddddddddddddddddddddddddddddddd##.......c.c...###addddddddbbiiiidbbdbbbbibbdijmjmkmmmmkkkkkkkmmkmmmkmmmkmmmmmmmmmmmmmmmnmmmmmmmnmmmnmnmmmmnmmnmmmmmmmmnmmmmmmmmkmmmmkmkmmmjmmjjjgggghkhhhhhhhhhhhhhhhggggghggggghgghhghgggggghghhghghgghgggggggggggggggggggggggggggggghkhggg##......c..c........c...........####..............c.c........c..c......c...",
+".......c..c..c..c..c...c.....c..c...c.ccccccccccccccccccddddibdddddddddddddddddddddddddddddddddddddddddddddddddd##..c.......###aadddddddbbiiibbbbbbbbbibbiidddjmjmjmmmjkmkmkmkkkmmkmkmmmmmmmmmmmmmmnmmmmmmnmmnmnmmnmmmnmnmmmmnkmmnmnmmmmmmmmmmmmmmmkmmmmmkkmjjmjgggghjhhkhhhhhhhhhggghghggghghgggggggggggggggggggghghghhghgggggggggggggggggggggggggggggghhhgge##c.........c...........c.............c...............c..c.......c..c.....",
+"...c.c...............c...............c.cccccccccccccccccddddbdddddddddddddddddddddddddddddddddddddddddddddddddddd##...c...###abdddddddbbidibdbbbbbbbbbbbbdibddijmjmkmmmkkkkkmkkmkmkmmkmmmmmmmmmmmnmmmnmmnmmnmmmmnmmnmnmmmnmnmmmnmmmmmnmmmnmmmmmmmkmmkmmmmkjmmjjgggghjhkhhhhhhhhhhhhghgghhghggghhghgggghgghggghggggghghghgghhghgggggggggggggggggggggggggghkhggg.....c..c........c..c.c....c....c..c...........c....c........c............",
+"........c..c...c..c.....c..c..c...c...c.cccccccccccccccc.ddddibdddddddddddddddddddddddddddddddddddddddddddddddddd#.....###aadddddddbbdiibbbbbbbbbbbbibbbbbidbddmjmjjmmmkkmkmkmmkmkmmkmmkmmmmmmnmmmmnmmmnmmmmnmnmmnmmnmmnmmnmmnmmmnmmmmmmmmmmmmmmmmmmmmmmkmmjjjggggghjhhhhhhhhhhhhhhhhhgghhghghhghghggggggggghgghgggghghghgggggggggggggggggggggggggggggggghkgggf.c..........c...................................................c...c.c..",
+"......c...............c.............c...cccccccccccccccccddddbbddddddddddddddddddddddddddddddddddddddddddddddddddd#######bdddddddbbbiibbibbbbbdbbbbbbbbibbiibddkmjmmkmmmkkkmkmkmkmmmmmmmmmmmmmmmmmmmknmmmnmnmmmnmmnmnmnmmnmmnmmnmmmmnmmnmmmmmmmmmmmmmmmkmjmjjjggghhkhhhhhhhhhhhhhhhhhhggghhggghggggghggggggggghhhghghghggggghghgggggggggggggggggggggggggghhhggh...c..c...c....c......c.....c.....c......c..c....c..c.....c..c...........",
+"..c.....c.....c..c..c....c..c..c..c..ccc.cccccccccccccccc#ddddibdddddddddddddddddddddddddddddddddddddddddddddddddd###aadddddddbbbiidbbbbbbbbbbbbbbbbbbbbbbiibbddmjmjjmmmmkmkkkmmkmkmkmmmmmmmmmmnmnmmmmmnmmmnmnmmnmnmmnmnmmnmmnmmmnmnkmmmmnmmmmmmmmmmmmkkmmjmggggghkhkhhlhhhhhhhhhhhhhhhghhghghhggggggghgghhhghghgghghghghggggggghgggggggggggggggggggggggghhkgggf##.....c...c.......c...c..c...c....c.c...............c........c...c.....",
+"....c.......c..........c................ccccccccccccccccc.dddbibdddddddddddddddddddddddddddddddddddddddddddddddddda#adddddddbbbdibbbbbbbbdbbbbbbbbbdbbbdbbbiibddjmjmmmmmkmkkmkmkkmmmmkmmmmmmmmmmmmmnmnmmnmnmmmnmnmmnmnmnmnmmnmmnmnmmmmnmmmmnmmmmmmmmmmjmjjjjgggghkkhhhhhhhlhhhhhhhhhhhhhhggggghgggggghggghghhgggghgggghghggggghggggggggggggggggggggggggggghhhgge#.c..c.......c...c..........c..........c..c..c..c..c............c...c...",
+"..............c.c..c.....c.....c.....c.c.cccccccccccccfcccaddddibddddddddddddddddddddddddddddddddddddddddddddddddddddddddbbbidibbbbbbbbbbbbbbbbbbbibbbbibbbiibddimjmjkmmmkmkmkmmmkmmmmmmmmmmnmmmmmmmmmnmmmnmnmnmnmnmnmnmnmnmmnmmmmnmnmmmmmmmmmmmmmmnkjmmjmjgggghkhhkhhkhhjhhhhhhhhhhhhhhhghgghhgggghhghggggghhhgggggghghghhggggggggggggggggggggggggggggggghhjgggf.......c.............c..c........c..................c.c................",
+"..c....c.c.c................c....c..c.....cccccccccccccccc#dddbidddddddddddddddddddddddddddddddddddddddddddddddddddddbbbbdibbbbbbbbbabbbbbbbbbbdbbbbbbbbbdbbiibdbmjjmmmmmkkmmkkmmmmkmmmmmmmmmmmnmmnmnmmnmnmmmnmmnmnmnmnmmnmnmnmnmnmmknmmnmmmmmmmmnmkjmjmjjgggghhkkhhhhhhhhhhhhhhhhhhhghhhhggghhgggggggghhghjhggghggggghghgggggggghgggggggggggggggggggggggghhhggge...........c..c..c..........c..c...........c....c.......c.c....c...c...",
+"....c........c...c.......c....c......c.cc.cccccccccccccccccbdddbibddddddddddddddddddddddddddddddddddddddddddddddddddbbbdibbbbbbbbbbbbbbbbbbdbbbbbbbbibbbibbidibddimjmjmmmmmkmmkmkmmmmmmmmmmmmmmmmnmmmmnmmnmnnmnmnmnmnmnmnmnmnmmnmmmnmmmmmmnmmmmnmmmkmmjmjgggghjkhhhkhhkhhhhhhhhhhhhhhhhhhgggghhgggghggghgghhgggghggggggghhgghgggggggggggggggggggggggggggggghhkgggc......c...........c.....c.......c..................c.......c....c.....",
+"...........c...c...c.c.c...c......c.c...c..ccccccccccccfcccadddbdddddddddddddddddddddddddddddddddddddddddddddddddddadbbbbbbbbbbbbbbbbbbbbbbbbbbbbdbbbdbbbbbbiiddbijmjmmmmmmkmkmmmmkmmmmmmmmnmmnmmmmmnmmmnmmnmmnmnmnmnmnmnmnmnmnmnmnmmmnmnmmmnmmmmmjmjmjmgggggjhkhkhhlhhhkhhkhhhhhhhhgghhhhghhhgghhhhhhhhhjhhgggccegggggghgghghgghgggggggggggggggggggggggggghhhgggf....c......c..c.c.....................c...c..c..c........c............",
+"...c..c......................c..c....c.c.cccccccccccccccccccddddibdddddddddddddddddddddddddddddddddddddddddddddadaddabdbbadbbbababbbabbbabbbbbbbbbbibbibbibbbiibddkmjmjmnmkkmmmkkmmmkmmmmmmmmmmmnmmnmmnmmnmnmnmnmnnmnnmnmnmnmnmmnmmnmmmmmmmmmmnmmkmmjjmggggghkkhhhkhhhhhhhhhhhhhhhhhhghhhhhghghgghhhhhhghhhggggccggggggghggggghhggghgggggggggggggggggggggggghhhgggc......c...........c..c........c...c..............c.........c.........",
+"........c.....c....c.....c.........c......c.ccccccccccccccccadddbibdddddddddddddddddddddddddddddddddddddddddddadadadbdbbdbbbbbbbbbabbbabbbbbdbbbbbbbbbaibbbibiibddijjjmkmmmmkmkmmmmmmmmmmmmmmmnmknmmmnmnmnmnmnmnmnmnmnmnnmnmnmmnmmnmmnmnmnmmnmmmkjmjmjjgggghkkhhihhhkhihhkhhhlhhhhhhhhhhhhhgghhhhhhhhghhlhhgggfcchggggghggggghgghggggggggggggggggggggggggggghhjgggf....c....c..c......c......c.c...c...c..c...c........c.c..c.....c.c...",
+"...c..c..............c.......c..c....c...c.ccccccccccccccccc.ddddibddddddddddddddddddddddddddddddddddddddddddadddbdadadadadabbabbbbbbbdbbbbbbbbibbbbbbdbbbibbiiibddkmmjjmnmmmkmmmkmmmmmmmnmmmnkmnkmnmmmmnmnmnmnnmnnmnnmnmnmnmnnmnmmnmmmmmmmmmnmmkmmjjjgggghkkhkhhhkhhhhhhhhhhhhhhhhhhhhhghhghghhhhhhhhhhkhggggcccfgggggghghghghggghgggggggggggggggggggggggggghhhgghc.....c..........c......c................c......c..........c.c.......",
+"..........c..c..c.c....c..c.............c...cccccccccccccccccddddbiddddddddddddddddddddddddddddddddddddddddddddaddadbdadadbdbadbdbdbdabdadbbbbbbbibbbibbibbbbbiibddimjmjmmmmkmkmmmmmmmmmmmmnmmmmmnmmnmnmnmnmnmnmnmnnmnnmnmnnmnmmnmnmmnmnmmnmnmkjmjmjjgggghjkkhhkhkhhkhhhkhhhjhhhhhhhhhgghhggghhhhhhghhhhhggggccccfgggggghghghghghgggggggggggggggggggggggggggghhhgggc.c.....c..c..c..............c...c....c....c..c.....c................",
+"...c..c.....................c..c....c.c....cc.cccccccccccfccc#ddddibdddddddddddddddddddddddddddddddddddddddddadadaddadbbdbabdbabbbabbbbbbbbbbbdbbbbbdbbibbibibiiiddbmjmjjmnmmmmmkmmmmmmmmmmmmmnmmmnmmnmmnmmnmnnmnnmnnmnnmnmmnmnmnmmnmmmmmnknmkkmmmjjgggggjkhhkhhhhihhhkhhhlhhhhhhhhhhhhghhhghhggghhgghlhhggghccccfggggggghghghghghgghggggggggggggggggggggggggghkhgghc..............c....c.c.c...................c........c....c.c.c.c...",
+"..........c..c.c.......c..c.......c.......c..cccccccccccccccc.ddddibdddddddddddddddddddddddddddddddddddddddadbdaddadadbdadbdabddabbdabbbbbbbbbbbbbbbibbbbbbbbbdiibddkmjmmmmmmmkmmmmmmmmmnmmmmmmmnmmmnmmnmnnmnnmnmnnmnnmnnmnnnmnmnmnmmnmnmmnmmkmmjjmgggghhkkhkhkhihhhihhhkhhhhhhlhhhhhhhhhhhhggghghghhhjgggggccccccgggggghghghgghgghgggggggggggggggggggggggggggghhggg....c........c.............c..c...c......##......c.........##.......",
+".....c...........c...c..............c..c..c.ccccccccccccccfcccadddbibdddddddddddddddddddddddddddddddddddddddbaddaddadbdabbbdbdabbdbabbbbbbbdbbbbbibbbbibibibibibiibddmjmjjmnmkmmkmmmmmmmmmnmnmmnknmnmmnmnmnmnmnnnmnnmnnnmnmnmnmnmnmnmmmnmnmmkkmmjmgggggjkkhihhihhkhhhhkhhhhkhhhhhhhhhhhhhhhhhghhhhhhhigggggcccccccggggggghghghhghghghgggggggggggggggggghggggggghkhggec......c.c......c..c....#.............###ab##.......c.c.###aa#.....",
+".........c..c......c......c.....c.c.....c.c..ccccccccccccccccc.ddddibddddddddddddddddddddddddddddddddddddddaddbbbdadadadbdadbabdabbbdbbbbbbbbbbbbbdbbbbbbbbbbibiiibddjmjmmmmmmmmmmmmmmmmmmmmmnmmmmmmmnmnmmnmnmnmnnmnnnmnnmnnmnmnmnmmnmnmmnmkjmmjjjgggghkkhkhkhhkhhkhkhhhhkhhhhjhhhhhhhhhhhhhhhhhhhhhkhgggghcccccccegggggghghghghgghggggghgggggggggggghhhhhgggggghhgggc...........c.........###aa#....c.c..##.#abba#..c......##.#abba.c..",
+"...c..c................c....c..............cc..ccccccccccccfcccadddbidddddddddddddddddddddddddddddddddddddaddadadaddaddadabbdbdadadbbbbbbdbbbibbbbbibbibbibibbibiidddimjmjknmmmmmmmmmmnmmmmmmmmnmnmnmnmnmnmnmnnmnmnnmnnmnnmnmnmnmmnmmnmnmmkkmmjmjgggghmkhkhkhhihhkhhhihhhhhkhhhhhhhhhhhhhhhhhghhhhhihgggggcccccccccggggggggggghghghggghhhggggggggggghhhhgggggggghjhggec.....###a...c..c...#..#bbb#.......#...##abba#.......#...##bbba...",
+".............c...c.c..........c.c..c....c.c...cccccccccccccfcccadddbibdddddddddddddddddddddddddddddddddddddaddadddadbdadbdadbabbbbbabbbbbbbbbbbibbbbibbbbdbbibbdiiibdbjmjmkmnmmmmmmmmmkmmnmmmnmmmmmmnmmmnmnmnmnmnnmnnnmnnmnmnmnmnmnmnmmnmmjmmjjjgggghkkmhkhihkhhihhkhhhhihhhhhhhhlhhhhhhhhhghhhhhhkhgggggccccffccccgggggggggghghgggghhhhhhgggggggghhhhggggggggggghhggg......###bb#.......#..###bbba.c...##...###abba#.c...#....###abba..",
+"...c..c..............c..c............c......c.ccccccccccccccccccddddiibddddddddddddddddddddddddddddddddddadddadadadbdadbadbbdadbbadbbbbdbbbbbbbbbbbbbbbibibbbibibiidddkmjmjkmnmkmmmmmmmmmmmmnkmnmnmnmmnnmnmnmnmnmnnmnmnmnnmnmnmnmnmmnmnmmkmmjmjgggggjkkhkhhhhihhhhihhkhhhhhhkhhhhhhhhhhhhhhgghhhhlhgggggccccceccccchgggggggghgghggghhhhgggggggggggghhhggghceggggggkhggfc..##.##bbb#.c.c.#..#.##abbb##..#...######abba....#..#.#.##abbb#.",
+"........c.c.c..c..c..........c...c.c....c....c..ccccccccccccfcccadddbiddddddddddddddddddddddddddddddddddddddadddaddadadbdadadadabdbbdabbbbbbbbbbbibbbbibbbibibbbiiiibddjmjmmmmmmmmmmmmmmmknmmmmmmnmmmnmmnmnmnmnnnmnnmnnnmnmnmnmnmmnmnmnmkjmjmjgggggjkkkhihkihhkhihhhhhhkhhihhhkhhhhhhhhhhhhghhhhhkhggggfccccefccccccggggggghghghghhhhhgggggggggggghhhgggeccf#egggghkhgh..#...##abbb#....##...###abbb#.##..########abb#..#.#..#######bbb.",
+"...c................c....c.c.........c...c.c..c.cccccccccccccccc.ddddibbdddddddddddddddddddddddddddddddddadadadaddaddbadadbdabbdbababbdbbbbbbdbbbbbdbbbbbbbbbdibbiiidddkmjmjmnmmmmmmmmmmmmmmnmmmmmmnmmnmmnmnmnmmnmnmnmnmnmnmnmnmnmmnmnkkmmmjmggggghmkhhkhhihhkhhhkhihhhhhhhhhhhhhhhhhhhhhhghhhhlkhgggghccccffcccccccggggggghghghhghhgggghcfhgggggghggggecccc##egggghhggf#....###abb##c.#....#.###abbb##..##bba##.##bbb###...########abb.",
+".......c......c...c..........................c.cccccccccccccfccccddddbiddddddddddddddddddddddddddddddddddddddbdddaddabdadbdadbdabbdbdabbbbbbbbdbbbbbibbbibibibibibdibddimjmmkmnmkmmmmmmnmmmmmmnmnmnmmnmmnmnmnmnnmnnmnnnmnmnnmnmnmmnmnmkmjmjjjggghhmmhihihkhhkhihkhhhhihhkhhhhhhhhhhhhhhhhgghhhhkhgggghccccfecccccccceggggghghghghhhhggggccccchgggggggggccc.ff#aeggghhgge...######bbb#..#...###.####aaa#.###bbba#.##aaba##..###bb#..##ab.",
+"...c........c........c..c...c...c....c..c.c.c.c.cccccccccccccfcccfddddibdddddddddddddddddddddddddddddddddadaddadadadbdaddaadbabbdabbbbbbbbbbbbbbbbbbbbbdbbbbbbbbibiiibddjmjjjmnmmmmmmmmmmmmmmmmmmmmmnmmnmmnmnmnmnmnmnmnmnmnmnmmnmnnnmkkjmmjjgggghmmkhkhhihhihhhhhihhhhhhhhkhhhhhhhhhhhhhhhghhlkhgggggccccceccccccccccggggggghggghkhggggccccccchgggggghcccfef.f#aeggghggg..########bbb###..######.#########bbba##..###a###.##abbb##..##a.",
+".......c..c........c......c...c....c...........c.cccccccccccccccc.ddddiibdddddddddddddddddddddddddddddddddddadadbddadaddaddadbdabbdabbbbbbbbbbbbbibbbbbibbibbibibbiiibddijmmmknmmmmkmmmmmmmmnmmmmmnmmmnmmnmnmnmnmnmnnmnmnmnmmnmnmnmmkjmmmjjgggghjnhkhihihhkhhkhihhhhkhhkhhhhhhhhhhhhhhhhhhhhhkhhggggcccccefccccccccccgggggghggghhhggggccccecccchgggggcccfa#f#f#faegggggf.##abaa###aaba#..##aaa##..#######bbbb###...#####..##abba##..##a.",
+"...c.c......c.c..c....c..............c.c....c.c..c.cccccccccccfccc#dddbiddddddddddddddddddddddddddddddddddaddddadaddadbadbdadabbdabbdbbadbbbbbbbbbbbibbbbbbbibbbbibiiidddjmjjjmnmmmmmmmmmmmmmmnmnmmmnmmnmnmmnmnmnmnmnmnmnmnmnmnmnnmmkmjmjjgggggjmhihkhkhkhhihhhhhkhhhhhhhhhhhkhhhhhhhhhhhhhhijgggggeccccffccccccccccchggggggggghkggggeccflefffccfgggfccfeff#f####ahggge.##abbb##.###b###.##bbaa.#..#..##abbba...##...######abbb#.##...#.",
+".........c..........c......c..c...c............c.cccccccccccccfccc#ddddiidddddddddddddddddddddddddddddddddddadbbddadbdbddaabbdbbbbdbbabbbbbbdbbbbbbbbbibbbibbbbibbidiibddkmjmmmmmmmkmmmmmmmmmmmmmmnmmmnmmmnmnmnmnmnmnmnmnmnmnmnmnmmkjmjmjgggghhmkmhkhihhihkhhihihkhhihhkhhihhhhhhhhhhhhhhhhkjhggggeccccffcccccccccccccggggggghhkgggggcceefcceeefcfgeccfaff#efccff##ege.###bbbba#..########abbba#.....###abbb#c...#..#....##bbba...##..#.",
+"....c..c...c...c................c...c...c.c.c...c.cccccccccccccfcccadddbibdddddddddddddddddddddddddddddddadddaddaddadadaddddabadabadbdbbbbbbbbbbbbdbbbbbbdbbibdbibbibidbdbmjmjjnmmmmmmmmmmnmmmmmmmmmnmmnmnmmnmmnmnmnmnmnmnmnmnmnmmkmmmjjgggggjmmhkhihhkhhhihhhhhhhhhhhhhhhhhhhhhlhhhhhhhhhlkhgggghccccfffcccccccccccccgggggghhhhggggcccefcefccceffccceeff#hge.c.########abbbb#.##...##.##bbbb####..####bbbb#.....#.....###bbbb#....##.#.",
+"..c..........c......c...c..c..c.......c......c...c.ccccccccccccfccc#ddddibdddddddddddddddddddddddddddddddddaddadbdaddadbdabadbdabdbababbbbbbbbbdbbbbbbbbbibbbbibbbibbiibddjmjmjmnmkmmkmmmmmmmmmnmmnmmmnmmmnmmnmnmnmnmnmnmnmmnmnmmkmjmjjjgggghmmhihkhkhkhihhkhkhihhihkhhkhhhhhhhhhhhhhhhhhhmhgggggccccfffcccccccccccccceggggghhkggggccclfceggcccccffeeff.fegggeccc.#####aabbb#...#.....###bbba#..#....#abbbb...c...##...##bbbba.c.....##.",
+".....c....c....c......c...........c.....c.....c.c.ccccccccccccccfcccddddiibddddddddddddddddddddddddddddddddddaddaddaddadaddadadbdabdbdbadabbbbbbbbbbdbibbbbibbbbibbbbbbbddimjmjmmmmmmmmmmmmmmmmmmnmmnmmmnmmnmmmmnmnmnmnmmmnmmnmmmkmmjmjgggghmmkkhihkhihhkhkhhhhhhkhhhhhhhhhhhhhhhhhhhhhhhmhhggggfccccf.ccccccccccccccccggggghkhggghccefcfggggeccccce#fff#hggggh.ccc####abbha.....#...###bbbb#.c..##..#bbbb#.....c..#...##bbbb.........#.",
+"........c........c..c.......c...............c..c.c..ccccccccccccfcccadddbidddddddddddddddddddddddddddddddddaddaddaddaddaddadbbdaadbadabbbbbbbbbbbbbbbbbbibbbbbibbbdbdddbddijjmmknmmmkmmmmmmmmmmnmmmmmmmnmmnmmnmnmmmmnmmnmnmmnnmkjmmjjjgggghhkkhkhkhihhkhihhihihkhhhhhkhhkhhhkhhhhhhhhhhhikhggggfcccc#f.ccccccccccccccccggggghkhgggccfef.hggggghccccfcfffegggggge.cc.##abdhgf.....##...#bbbba.......###bb##..c.......##.#abba#....c......",
+".....c......c...................c.......c.........cccccccccccccccfcc.ddddiiddddddddddddddddddddddddddddddddddddaddadbdadadbbadaddabdbbbdadbbbbbbbbbbbbbbbbbibbbbbddddddddddkmjjjmmmmmkmmmmmmmmmmmmmnmmnmmnmmnmmnmnnmmnmmnmnmnkkmmmjjjggggghhhhhhhhhkhihhhhkhhhhhhkhhhhhhhhhhhhhhhhhhhhhmkhgggghccccff.cccccccccccccccccegggghhhggeccffceggggggggcccccf#eggggggggh.c..aabhggec.....#.#.##bba........######.c..........####b##c.c.........",
+"..c.....c.......c..c..c.c..c.....c....c.....c.c..c...cccccccccccfccccdddddibddddddddddddddddddddddddddddddaddadddbddadaddadbdadabdababbbbbabbbbbbdbbbbbbbbbbbdbddddddddddd#jmmmjnmkmmmkmmmmmmmmknmmknmmmmknmmnmmnmmmnmnmmnmnmjmjmjmjggggggghgghhhhhhhhhhihhkhkhihhhhhihhhhhhhhhhhhhhhhkkhgggghccccf#ccc.ccccccccccccccccgggghkgggcccfffggggggggggccc.feggggghgggge..##bhgggh#c..c..####bb##...c................c.......##.........c.c...",
+"...........c.................c.....c............c.cc.ccccccccccccfccc.dddbidddddddddddddddddddddddddddddddddadadadaddadbbdadadbbbbdbbbadbdbbbbbbbbbbbibbdbbbddddddddddda#ccjmjjjmmmmmmmmmmmmmmmmmmmmmmnmnmmmmmnmmnmnmmmnmmnmkjmmjjjggggggggggggggghghghhhhhhhhhhhihhhhhhihhhhhhhhhhhhkkhgggggccccc#.c.ccccccccccccccccccgggghkhggccccegggggghhggggecehggggggghhggghfeehggghhl.....c...#.#...c.......c.......c....c..c...c.c.............",
+".......c.c....c..c..c.c...c...........c..c.c..c.....cccccccccccccfccc.ddddiibddddddddddddddddddddddddddddddddddddaddaddadaddabdadababbdbababbbbbbbbbbbbbbbddddddddddda.ccccjmjmmmmmkkmmmmmmmmmnmmmmnmmmmmmnmnmmmmmmmmnmmmnmkjjmjmjlhehggggggggggggggggggggghhhhhhhhhkhhhhhhhhhhhhhhhjihgggggfcccc#ffcccc.ccccccccccccccchgggghhgggcfegggggggghhgggggggggggggghhggggggggggghhh.c.........c........c......c.............c.......c.........",
+"...c..c.....................c.c....c.............c.c.cccccccccccccfccc#ddddiddddddddddddddddddddddddddddddddaddadddadaddadadbdadbdbbdabbdbbdbbbbbbbbbbdbddddddddddb#.ccccccmjmjjmmmmmkmmkmmmmmmmmmmmmmnmmmmmmmnmnmnmnmmnmmmkmmjjmlccccccfheggggggggggggggggggghghghhhhhhhhhhhhhhhhhhmkhggggecccc#fcc.c.cc.cccccccccccccccgggghhhggggggggggggghhhghgggggggggggghhhghgggggghgggf................c....c.........c...c......c...c...........",
+"............c..c..c.....c.c......c....c.....c..c...c..ccccccccccccfccc#ddddiidddddddddddddddddddddddddddddddddddaddadddaddbdbbdabadbbbdabadabbbbdbbdbddddddddddda.cccccccchmjjmmmmmkmkmmmmmmmmmmnmmnmmmmnmmmnmmmmmmmmnmmnmmjmjmmjcccccccccccccfehhgggggggggggggggggggghghhhhhhhhhhhkkhggggeccccf#c.c.c..cccccccccccccccccgggghhhhgggggggggggggghhhgggggggggggggghgggggggghhggh.c........................c..c..............c.....c.c.c...",
+"...c.c..c......................c....c....c....c..c..cccccccccccccccecccadddbibdddddddddddddddddddddddddddddddaddddadbadadadadadbdbadadadbbbbbbbbbbdddddddddddb#.cccccccfccemjmjmmmmmmmkmmkmmmmmmkmmmmmmmmmnmmmnmnmnmmmmnmmkmmjjjfccccccccccccccccccfehegggggggggggggggggggghghhhhhhkhgggghcccc.f.cc.c.c..cccccccccccccccchggggghhhggggggggggggggggggggggggggggggggggggggghhhggf..c..c..c...c...c...c.c........c...c..........c..........",
+"...........c..c..c.c.c...c........c.........c..........ccccccccccccfccc#ddddiddddddddddddddddddddddddddddddddddadaddddaddadbdadadadabbbbabbbbbbbdddddddddddafccccccccfeccclmjmjmmmkkkmmkmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnmmmmjmjmjccccccfecccccccccccccccccfffhhhggggggggggggggggggghhhhggggccccf#.c..c.c.c.c.cccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggggghgggh..........c.............c..c..........c.c...........c....",
+"...c..c..c.................c..c.....c.c..c.....c..c.ccc.ccccccccccccfcccddddiiddddddddddddddddddddddddddddddaddddddaddadaddaddadbdbdadadbdabddddddddddddba..cccccccccefcccjjmjjmmmkmmmkmmmmmmmmmmmmmmmnmmmmmnmmnmmnmmmmnmkjmjmeccccceleeefffccccccccccccccccccffhhhgggggggggggggggghggggfccccff.cc.c.c.c.c.cccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggggghhgggc...c.c.....c.c..c.............c...c......c.......c......",
+"..............c..c...c...c.......c.....c.....c.....c...cccccccccccccfcccadddiibdddddddddddddddddddddddddddddddaddaddaddaddadadbdabaadbbabbddddddddddddafcccccccccccceeccccjjjmmmmkmkmkmmkmkmmmmmmmmmmmmmmnmmmmmmmmmmnmmmmmjmjjcccccebeaeeeeeeeeffcccccccccccccccccccffehhggggggggggggggecccc##c...c.....c.cccccccccccccccchggggggggggggggggggggggggggggggggggggggggggggggghhhggec.................c......c..c...c.......................",
+"...c...c...........c.......c..c....c.....c.......c....cc.cccccccccccfccccddddiidddddddddddddddddddddddddddddddddaddaddadbaddaadaddbdabdbdddddddddddb#f.ccccccccccccffeccccjmjjjmmkkmkmmmmmmmmmmmmmmmmmmmmmmmmmnmmnmmmmnmmkmjmjfcccceeee#e#eeefeeeeefffccccccccccccccccccccfehghggggggghccccffc.c.c.c.c.c.c..cccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggggghhgggc..c.......c......................c.....c..c.c.c..c.....",
+".........c..c..c.......c........c..........c...c..c...c.cccccccccccccfcccbdddiibdddddddddddddddddddddddddddddddddddddadddddaddadbbabdbddddddddddda#ccccccccccccccfcfeccccemjmmkmmkmmkmmkkmkmkmmmmmmmmmmmmmmmmmmmmmmmnmmmmjjmjjccccfee##e#e#f#effffefefefeffcccccccccccccccccccccefhgghccccf#.cc..c........c.cccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggggghhggge........c.........c..c.....c.......c.c.............c...",
+"....................c......c............c...........c..cccccccccccccceccc.ddddiidddddddddddddddddddddddddddddadadadaddadaadbdadadbddddddddddddbafccccccccccccccfcfcfffccchmjjjmmkkmkmmkmmmmmkmmmmmmmmmmmmmmmmmmmmmmmmmmmmkmjmlccccfe#ee#efe#fefefffffeffffefeffcccccccccccccccccccccccccc.ff..c...c.c..c.c.ccccccccccccccccggggggggggggggggggggggggggggggggggggggggggggggggghhgggc..c..c......................c.........c..c..c.c.......",
+"..c.c.c.c..c..c...c...c..c..........c.c.......c...c.c....cccccccccccccfcc.ddddiibddddddddddddddddddddddddddddddddddddddaddadadbdbddddddddddda#cccccccccccccccfccfccfecccclmjmmkmmkmkkkkmmkmkmmkmmmmmmmmmmmmnmmmmnmmmmmnmmjmjmjcccce#e#ff#f#fe#f#efefffffffffcfffefffcfccccccccccccccccc.f#..cc.c.c...c..c....cccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggggghhgggf#.......c.....c...c...c.c.c.........c.............c...",
+"................c..........c...c.........c...........c.c.ccccccccccccceccc#dddbiddddddddddddddddddddddddddddddaddadadaddaddadbdddddddddddd##.ccccccccccccccccfccfcfffccccjjmjjmkkmkkmmkmkmmmkmmmmkmmmmmmmmmkmmmmmmmmmmmmkmmjjeccccfe#f#fffef#fffffffffffffcfffcfcffffffffccccccccccccf.fff.c...c...c.....cc.ccccccccccccccccggggggggggggggggggggggggggggggggggggggggggggggggghhggh##..c.....c...................c.........c..c..........",
+"........c..c..c.......c.c..........c...c....c..c...c..c...ccccccccccccfccc.ddddiidddddddddddddddddddddddddddddddddddaddaddadddddddddddda#fccccccccccccccccfcfccfcfcffccccjjjmjmmkmkkmkmkmmkmmkmkmmmmmmmmmmmmmmmmmmmnmmmmjjmjmecccf##f#ff#f#ffffffffffffffffffffffcfcfccfcfcfccccccccf.ff.c..c.c..c...c.......ccccccccccccccchgggggggggggggggggggggggggggggggggggggggggggggggghhgggf......c....c..c....c.c..c.......c.c...........c..c...",
+"...c.c...........c...........c..c....c....c......c...c.c.ccccccccccccccecccaddddibddddddddddddddddddddddddddddddaddaddadddddddddddddd##.ccccccccccccccccfcccccfcccfffccccjmjjjmkkkmkkmmkkmkmmmmmmkmmkmmmmmmmmmmmmmmmmmmmkmjmjf.cccfffffffffff#f#ffffffffffcffccfcfcfcfcfcfccfcfcccfccfc..cc.c.c.c..c.....c.c.ccccccccccccccccggggggggggggggggggggggggggggggggggggggggggggggggghhggh..c.......................c..c......c................",
+"...........c...c....c...c.........c.........c..c........c..ccccccccccccfccc#ddddiiddddddddddddddddddddddddddddddddadaddddddddddddda#cccccccccccccccccccccccccfcfcfcfccccejjmmkmmkmkmkkkmkmkmkmkkmmkmmmkmmmmmmmmmmmmmmmmmjmjmjfcccff#ff#ff#f.fffffffffffcfcffcfecfcfcfcfcccfcfcccfcccccccc.c.c..........c..c.c.cccccccccccccccggggggggggggggggggggggggggggggggggggggggggggggggghhgggf.....c....c..c..c................c...c.....c..c.....",
+".............c...c....c....c..c.....................c...c.ccccccccccccccecccbdddiibddddddddddddddddddddddddddddddddddddddddddddd##.cccccccccccccccccccfccfccfcccfcfffcccemjmjjmkkkkmkmkkmmkkkmmmkmmkmkmmmmkmmmmmmmmmmmmmjmjmj..cc.f..f.f.f.#f.f.f.ff.fcffffcfccffcfcfccfcfcccfccccccc.c..c...c.c...c..c..c.c.c.ccccccccccccccgggggggggggggggggggggggggggggggggggggggggggggggggghhggef#......c...........c...c..c...c.......c............",
+"......c.c.c.........c....c.....c..c...c..c..c..c..c.......c.ccccccccccccfcccaddddiddddddddddddddddddddddddddddddddddddddddddda#cccccccccccccccccccccccccccfcccccccfccccchmjmjmkmkmkkkkmkkkmmmkkkmmkmmmmmkmmmmmmmmmmmmmmmjjjjl#cccf#f.f.f.f.f.f.f.f.f.fffcfcffcfcfcfcfcfcfccfcccccfcc.ccc.c.c.c..............c.ccccccccccccccccchggggggggggggggggggggggggggggggggggggggggggggggghhggg##....c.....c..c..c.............................c...",
+"...c...........c...........c........................c.c.c.c.ccccccccccccffcccddddiidddddddddddddddddddddddddddddddddddddddd##.cccccccccccccccccccccccccccccccfcfcfcfcccclmjjjmmkkkkkmmkkmkkkmmmmkkmmkmkmkmmkmmkmmmmmmmmkmmmjl#ccc.f..f.f.f.ff.f.f.f.f.cffcfccfcfcfcfcfccccccfccfcccccc..c.c....c.c.c.c...c...c.cccccccccccccccccccceeggggggggggggggggggggggggggggggggggggggggggghggge...c....c...........c..c.....c.......c..c.c........",
+".......c..c.......c....c.........c..c...c..c....c.c......c.c.ccccccccccccfcccbddddibdddddddddddddddddddddddddddddddddddda#.ccccccccccccccccccccccccccfccfccfccccccffccccjmjmjkmkkkkkkkmkkkmkkkkmkmmkmkmmmkmmmkmmmmmmmmmjjjjm##.c..f.......f...f...f..ff.cfcffcfcfccfcccfcffccccccccc.c.c....c.c...............ccccccccccccccccccccccccccffeggggggggggggggggggggggggggggggggggggghhggg............c..c..c................c........c..c...",
+"...c.c......c..c....................................c.c.....ccccccccccccceccc.ddddiidddddddddddddddddddddddddddddddddd##.ccccccccccccccccccccccccccccccccccccfcccfcfccccjmjjjmkkmkkkkkkkmkmkmkmkkmkkmmmkmkmkmmmmmkmmmmmkmmjj##cc...........cf...f.......f.c.cfcfcccfccfcccccfccccccf.c.c.c.c....c.......c..cc...ccccccccccccccccccccccccccccccfheggggggggggggggggggggggggggggggghhhggfc....................c....c..c..c...c.c...........",
+".........c.........c..c..c...c..c..c.c...c.c..c..c........c..ccccccccccccffcccddddiiddddddddddddddddddddddddddddddda#.cccccccccccccccccccccccccccccccccc.c..cccfccfccccejmjmjmmkkkkmkkkkmkkkkkkkmkmkkmkmmmkmmkmkmmkmmkmjjjmm##c..f...f..fc....c..f.cf..c.c.ffccccfccfccccccccfcccfcc.c.c............c.c..c....ccccccccccccccccccccccccccccccccccccccefhgggggggggggggggggggggggggghhggh.........c.....c.c.........................c..c...",
+"....c......c...c........c...........................c.c..c.ccccccccccccccceccc#dddbibdddddddddddddddddddddddddddd##.ccccccccccccccccccccccccccccccccfcfcc.c....c..fccccemjmjjkkkkkkkkmkkkkmkkmkmkmkmkkkmkmmkmmmkmmmmmmkkmmjj##cc....c...........c...c.f.....c.fccfccccfcfccfcccfcc.cc.c..c..c...c............c..ccccccccccccccccccccccccccccccccccccccccccheggggggggggggggggggggghhhggc..c.c..............c..c..c...c....c..............",
+"..c..........c......c......c..c..c......c...c..c........c......cccccccccccfccc.ddddiidddddddddddddddddddddddddd#.cccccccccccccccccccccccccccccccccfc.c.c.c.c.cc.ccfcccchmjjmjmkkkkkkkkkkkkkkmkkkkkkmkmkmkmkmkmmkmkmmkmmjjjml##c..................c......c.c..c.fccccfcccccccccccc.c....c..c...c........c..c...c..cccccccccccccccccccccccccccccccccccccccccccccccehhggggggggggggggghhggh.........c.c.c.c.c............c......c...c...c...",
+".....c..........c............c........c...c.........c..c..c.c.c.##cccccccccecccaddddibdddddddddddddddddddddd#..cccccccccccccccccccccccccccccccccccc.c.c...c....c.fccccclmjmjjkkkkkkkkkkkkmkkkkkmkmkkmkkkmkmkmkmmmmmkmkkjmjml#.........................c.f..c....c...cfcfcfcc.c..c.c.c.c...........c.c....c...c.cc.ccccccccccccccccccccccccccccccccccccccccccccccccccceheggggggggggghhggc.c..c.c...........c..c.c.......c..c.............",
+".......c.c.c.......c..c....c...c..c.c.........c.c.c........c..####ccccccccceccc#ddddiddddddddddddddddddddd#..ccccccccccccccccccccccccccccccccccccc.c.c.c...c..c.cc.ccccjmjmjjmkkkkkkkkkkkkkkkkkkkkkmkkmkmkmkkmkkmkmkmmkjmmjl#..c.............................c...f.c.c..c.fc.c.c.c.c.....c..c.c............c...c.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccehhgggggghgge#.....#.#######aa#........c.........c..c....c...",
+"...c............c.......c..............c..c..........c..c...#.##aa#cccccccccecccbdddiiddddddddddddddddda#ccccccccccccccccccccccccccccccccccccc.c..c.....c.c.c.c..f.ccccjjmjjmkkkkkkkkkkkkkkkkmkkkmkkkmkkkkkmkkmkkmmkmkkmjjjl#.c.....c.cc..cc.c.c...c.c...c.......c....c.c.c.c.c.......c....c.....c......c....c..cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccffhhhgggg##..##.#.#.###aabbb##..c......c.................",
+".....c.....c..c......c.....c.....c...c......c......c.......#.##aaaccccccccccfccc#dddbibdddddddddddddd#.ccccccccccccccccccccccccccccccccccccc.c...c...c.c......c.ccccccfmjjmjjkkkkkkkkkkkkkkkkkkkkkkkkkkmkmkkmmmkmkmmkmjjmmj##....c.c..............c....c....c..c....c.c..c....c..c..c....c.....c......c...c.......cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc.c.c.cce##.##.....#...###bbbba#..c..c......c..c.c.c.c...",
+".................c.c...c...........c...c..c......c......###.###aa#ccccccccccffcccddddibddddddddddda#cccccccccccccccccccccccccccccccccccccc.c.c..c..c.....c.c.c.c.f.cccfjmjjjmkkkkkkkkkkkkkkkkkkkkkkkmkkkkkmkkmkkmkmkmkkmjmj##c.........c..c...c.c...c........c.....c......c..c..c..c.............c..c.........c.c.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc.....###...#######.####babbba#.......................",
+"........c..c...c.....c......c..c.c...........c.c.....###.#.##aaba#cccccccccccecccadddbbddddddddda.cccccccccccccccccccccccccccccccccccccc..c....c.......c....c..fccccccljmjmjkkkkkkkkkkkkkkkkkkkkmkkkkkkkkkkmkkmkkkmkmmjjjml##cc..c..........c........c..c.cc..c..c....c..c..c..c.......c.c...............c..c....c..cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc.c.c.#.....#.#a#####.#####abbba#.c....c.c..c..........",
+"...c.........c...c.......c..........c.............###.#.####abbb#.cccccccccccfccc.dddbdddddddd#cccccccccccccccccccccccccccccccccccccc.c.c..c....c...c...c..c.cc.cfcccchmjmjjkkkkkkkkkkkkkkkkkkkkkkmkkkmkkmkkkkkkmkkkkkjmmjl##c..c...c...........c......c........c..c....c........c..c.......c.....c..c.....c....c.c.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc.c..#...###a#baba##...#####bbbb#..c.........c........",
+"......c.c..c...................c.........c.c....##.#.###a#ababba#ccccccccccccfecccddddddddda.ccccccccccccccccccccccccccccccccccccccc.c.c..c...c...c...c..c.c...c.cccccjmmjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmkmkmmkmjjmjml#.c....c.........c......c......c...c..c.............c.......c..c.....c.............c..c.cc.cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc.c.c..#...##a#abbbbba##.....###abba#...c.c.......c..c...",
+"...c...........c......c..c.c........c..c.....###.#.####aaabbbbb#cc.ccccccccccceccc#dddddd#ccccccccccccccccccccccccccccccccccccc.c.c...c.....c.......c.......ccc.cfccccjjjmjmjkkkkkkkkkkkkkkkkkkkkkkkkkmkkkkkkkkkkkmkkkmjmjl#.........c..c.....c..c...c................c.c.c......c.c........c.....c........c.c....c..cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc..#...###bbbbbbb#####.....###bbb#....................",
+".........c........c.c...........c.c........###..####aabaabbbbba.c.ccccccccccccffcc.ddda.ccccccccccccccccccccccccccccccccccccccc.c.c.......c...c.c.c.......c....c.ccccfjmjmjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmkkkkkmkkkkjmjmj##.c.....c........c.............c......c...........c...........c....c.c......c.c......c.....c.cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc.c.....##abbbbb#.#....###...###bbb#c....c.c..c..c.c...",
+"...c.........c..c.....c.c..c..c.....c....##...###aabbabbbbbbbl.c.c.cccccccccccceccc##.ccccccccccccccccccccccccccccccccccccccc..c.c..c.c.....c.........c..c.c.c.cfccccfjmjjjmjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjmjj##...c.c....c..c...........c......c......c..c...c....c...c.......c.......c........c.c....c..c.c.cccccccccccccccccccccccccccccccccccccccccccccccccccccccc..#...#aabbbb#..........##....#abbb...................",
+".......c.c...........................c.#.#..###aababbbbbbbbba#..c.cccccccccccccfeccccccccccccccccccccccccccccccccccccccccc.c.c..........c.c...c..c..c..c....ccc.cccccljmjmjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmkkkmkkkmkkjmjmj##.c.....................c...........c........c....c.........c.c.......c....c...c......c..c.c.c.cccccccccccccccccccccccccccccccccccccccccccccccccccccccc.#...##abbb##.c..........##...##bbb#c.c..c..c..c..c...",
+"...c.c...........c.......c..c..c.c.....#..###aaabbbbbababbbb#....c.ccccccccccccccffcccccccccccccccccccccccccccccccccccc.c.c......c..c...................c.c...cc.ccccljmjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmkkkkjmjml##c..c.............c.c.c.........c.......c......c....c..c..c......c...........c................c...ccccccccccccccccccccccccccccccccccccccccccccccccccccc.....##abbb#....c..###a#..##..##abb#..................",
+"...........c.c.c....c................##..###aabbbabbbabbbbba#c...c..cccccccccccccccccccccccccccccccccccccccccccccccccc.c.c..c..c..c...c....c........c......c.ccfcccccjjmjmjkkjkjkjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjjmjml#.c...c...c....c.c.......c.....c......c......c.........................c...c.....c....c.c..c....c.c..c.cc.cccccccccccccccccccccccccccccccccccccccccccccc#...##abbb#......##.##bb#..#...##bba.c..c..c.c.c..c...",
+"......c.c........c....c..c..c.c.....#..###aabbbbbbbbabbbbbl....c..ccccccccccccccccccccccccccccccccccccccccccccccccc.c.c.......c.....c...c.............c.c...c.cc.ccccjmjjjjjkkjjkkkjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkmjmjl#.c.........c......c.......c.c....c.....c............c...c..c......c.....c...c......c.....c..c....c.c...c.c.c.ccccccccccccccccccccccccccccccccccccccccc.#...##abba..c.c.#...##bbb..##..#abba..................",
+"....................................#..##aabbbbbbbabblbbba.c.c...c...ccccccccccccccccccccccccccccccccccccccccccc.c...c......c...c.c..........c.c.c..c.....cc.c.cccccfjjjmjmkkjjkjkjkjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkjjjmj##....c.c..c..................................c.....c...........c.c...c.c.......c..c.....c.......c........c.c.c...c.ccc.cc.ccccccccccccccccccccccc.##.c...c..##bbb#c....##..##abba.c.#..##bba......c.....c.....",
+"...c..c..........c.c..c..c.........#..##aabbbabbabbbbbbbl#......c.c.c.cccccccccccccccccccccccccccccccccccccccc..c......c..c.........c..c.............c.c.c.c.cc.ccccfjmjjjjjjjkjkkjkkkjkjkkkkkkkkkkkkkkkkkkkkkkkkkkkmmjmj##.c...........c...........c...c.c..c....c.c....c.c.....c..c..c......................c.....c.c..c..c..c.....c..c.c...#.#.#.####.##.##.#..##.#.#####aa#.c#...##abbb...c..#...##bbba...#..##bbb..................",
+".........c..c..c...............c..#..#a#bbbbbbbbbbababbbaaa#a######.##.##.cccccccccccccccccccccccccccccccccc.c.c.c.c.c..c.....c.............c..c...c......c.c.ccccccejmjmjjkjjjkjjkjjkjkkkjkkkkkkkkkkkkkkkkkkkkkkkkjjjjmj##................c...c..c...c.........c.....c........c...........c.........c......c..........c.....c..c..c..c......#...#.##.#.##.#.#.#.##.......###ba...#...#abb#.c...#...###bbb#...#..#bbba..c..c..c..c..c...",
+"...c.c............c...c.c...c....#..##aabbbabblbbbblbbbbbbbbabbbbbaa####a#.cccccccccccccccccccccccccccccc...c.............c.c......c.....c.......c...c.c...c.cc.cccclmjmjjjjkjjkjkjkjkjkjkkkkkkkkkkkkkkkkkkkkkkkkkkkjmjml##c......c..c...........c.......c..c...........c........c.c..c..c...c....c....c.c.....c...c.......c.............c..#...#.#..#..#..#...#....##.#.###baa#.#...##abba.....#....#babb#...#.###bba.......c..........",
+".......c..c..c..c...c.........c.##.###abbbbbbbbbbbbbbbabbbbbbbbbbaaa##aaab#cccccccccccccccccccccccccccc.c.c...c..c....c.c......c.c...........c.c........c..c.cccccccjjjmjjkjjkjjjjjkjkjkjkkjkjkkkkkkkkkkkkkkkkkkkkkjjmjml#..c.c.c......c.c..c..c....c............c...c.......c.c...............c....c........c.......c.......c..c..c.c.c..c.#....#.#.#.#.#.#.##.#.##...####aabb#.#...##abb#.....#...##abb#...#..##bbb#...c.....c....c...",
+".......................c..c.....#..##bbabblbbbababbabbabbabbbababababaabal#ccccccccccccccccccccccccc.c....c.....c.........c..c......c..c..c......c.c.c...c.cc.ccccccjmjjjjjjkjjkjkjjkjjjkjjkjkkkjkkkkkkkkkkkkkkkkkkjjmjml#........c......................c..............c.c..........c....c...........c....c...c..c......c..................#.....#.#.#.#.#.#..#.#.#######aaaba#.#....#abba.c...#..###abba####.##abbb#..................",
+"......c..c..c..c.c...c.........#..###abbbbbbbbbbbbbbabbbabbabbbabababblaa#.cccccccccccccccccccccc.c..c..c...c......c.c............c.......................c..cccccccjmjmjmjjjkjjjkkjjjjjjkkjkjkjkkkkkkkkkkkkkkkkkkkjmjmja#.c..c.c...........c..c.....c.c.......c...c............c..c.........c..c.c.c...............c..c.......c..c.....c...#...#.#.#.##.#.#..#.#..#.###aabbbb#.c#...##abb#.....#....##abba##..##bbbb##..c.......c..c...",
+"...c...............c...c..c.c.#..###bbbbbbbbablbblbbblbbbabbababbabbbbb#..ccccccccccccccccccccc.c.c.c.....c...c..c.........c........c.c.c.......c..c.c.c.c.ccc.ccccfjjmjjjjjjjjjjjjjkkjkkjjkjkkjkjkjkkkkkkkkkkkkkkkjmjmja#.c........c............c.c.......c..c............c.........c..c.c............c....c..c.........c................c.#.#.....#.#.#.#.#.#.#.####aaabbbb##..#...###bbb.....#...####a#a#..##bbbb#......c............",
+"........c..c.c................#..##abbbbblbbbbbbbbbbbbabbblbababbbbbbl#..c.cccccccccccccccccc.c.c.....c.....c.........c..c......c.c...........c.........c.c..ccccccejmjjjjjjjjkjjjjjjjjkjjjkjkjjkjkkkkkkkkkkkkkkkkjjjmjj##....c........c..c..c......................c.c........c..c..........c.......c....c............c...c..c..c.c..c.c....#.##....#.#.#.#.#.#.#.###abbbaa#....#....#abbb#.c..#.....#########abbba.c..........c.c.c...",
+"...c...........c..c..c..c....#..##abbabbbbbbabbbbbbabbbabbbbblbbbbbba#....c.ccccccccccccc.c....c........c.....c.c.c........c.c........c..c.c.....c....c..ccccc.ccccemjmjjjjjjjjjkjkjjkjjjkjjjkjkjkjkjjkkkkkkkkkkkkkjmjmj#.c..........c................c..c...c..c.......c...c.......c..c........c.c.....c...c.c..c..c...........................##....#.#.##.#.#..#.#abbba#.c.c.c.#..###bbb#.....#..#.####.###abbbb#....c...c.c.........",
+"........c.c..c...............#.###babbbbbbabbbbbbabbabbbbababbbbbbba#.c.c.c.c.cccccccccc.cc.c.c...c......c..c.......c.c..c..........c..........c.......c.c..cccccccjmjmjjmjjjjjjjjjkjjjjjjkjjjjkjkjkjkkjjkkkkkkkkkjjjmjl##c....c...c......c..c...c................c..c.........c..c......c............c..................c..c..c....c.c......c....##...#.##.#.#.#.###abba#.c......#...###bba.c.c.##.......####bbbb#...c.................",
+"...c............c..c........#..##bbabbblbbbbblbabblbbablbbbbbbbbbb..c....c.c.c.c..c..c..c..c.......c.c........................c.c.....c....c.....c.c.c...ccc.ccccccjjjmjjjjjjjjjjjjjjjjkjjjkjkjkjjjjkjkjkjjkjkkkkkjmjjml#...c.c......c.c.......c...c..c....c..c........c..c..c..............c.c..c.c......c......c..............................c..#..#.#..#.#.#..#.#bbb#...c.....#...##abbb#......#....#.##bbbbba..c...c.....c.c.c.c...",
+"......c.c.....c.........c..#..##aaabbbbbbabb#bbbabbbbbbbbabbbbbba#....c.c....c...c.c.c...........c......c....c...........c........c.c....c...c........c.c..ccccccccjjmjjjjjjjjjjjjjjjjjjjkjjjjjkjjkjkjkjjkkjkkjkkjjjjmma#.c......c......c..c.........................c..........c.........c...........c.....c.......c.c..c.c..c..c..c..c..c...c.....#...###.#.#.#.####bbb##.......#....###bbb.c...#.#....##abbbba#c.........c...........",
+"...c............c....c....#..##abbbblbbbbba.a#aabbabaabbbbblbbb......c...c.c..c.c..c..c.c...c..c.....c.........c...........c..c....................c...c.cc.cccccccjmjjjjjjjjjjjjjjjkjjjkjjkjjjjjkjkjjjjkjkjkjjkkjjmmjja#.c..c..................c.....c..c...c..c........c..c.......c..c....c..c.........c....c.c..c..............................##..##..##.#..#.####babbb...c..c.#....##bbb#......###.###bbbb#.........c.........c....",
+".....c...c.c..c........c.##.###babbbbbabaa#####albbabbbbbbbbb##...c....c..c......c..c.....c..c.....c...c..c..c....c..c...c........c..c......c....c...c.c.c.cccccccejmjmjmjjjjjjjjjjjjjjjjjjjjjjjkjjjjjkjkjkjkkjkjjjjjmj##..........c..........c..c.....c...........c..........c...c..............c.....c................c.....c..c..c..c..c..c....#.....##.#..##.#.####abbba.c.....##...###abb#.c.....#####a###............c..c.........",
+"..................#.###.#...#abbbbbbbbbbba##.##abbbbbblbbba##..c............c.c................................c....c......c.c.c........c.....c....c....c.cc.cccccemjjjjjjmjjjmjjjjjjjjjjjjjkjkjjjjkjkjkjjkjkjkkjjjmjmj##c..c........c..c...c......c.....c.c..c..c...c...c...........c..c....c.....c.c...c.c..c..c...c....c......................#...###..#.##..#.#.####abbb##.c....#...###bbbb##c..c...........c...c.c.........c.c.....",
+".......c.c......####aaa##.##aabbbbbbbaaaa#######bbblbb#b##..c............c......c...c..c..c.c..c.c..c....c.c.c....c.....c.............c...c.c....c...c.c..ccccccccljmjmjmmmmmjjkjkjjjjjjjjjjjjjjjkjjjjjjjjkjjkjkjjjjmjl##cc.....c..c............c......................c.....c..c..c.............c.................c....c......c...c..c...c.....#...#.#.###.#.##.##.#.##a#bbb#......#....####bbb##.c..........c...............c.........",
+"...c..........##..#aabaa###aabbbbb.##......#.##########.......c.....c...c....c...........c......................c....c....###..................c...c...c.cc.ccccccjjmjjjmmmmmmmmmmmkkkkkjkjjjjjjkjjkjjkjjjkjkjjjkkmjmjl##...c.........c..c..c.......c....c.......c..c....c...........c..c.c........c.....c..c..c.....c.....c.c..............c..##..#.#.#.#.#.#..#.#.#.####bbba..c..c.#....###aabbb###.c..........c..c..c.c.........c....",
+"............###.###abbbbaaaabbbb##....c...........c...c...c.....c.c..c............c....c.......c....c...c..........c...c.##aba...c..c..c..c..c......c.c.c.ccccccccjjjmjmmjmjmmmmmmmmmmmmmkkkkkkjkjjkjkjjkjjjjkjjjjjjmja#.c...c...c..c..........c.......c..............c.......c..c............c..c.....c.................c......c...c...c.........#..#.##.#.#.#.#.#..#..###bbb#.......#....####abbbbb##...c...................c.........",
+"...c....#####..##aabbbbbbbbbbbb#..c....c.........c..c...c...c..........c..c..c.c....c......c.....c....c.....c............###ba...................c.....c.cc.c.fcccjmmjmjjmmmjmmmjmkmmmmmmmmmmmkkkkkkkjkjjkjjjjjkjjmjmjl#.......c.........c.......c..c......c..c...c.....c..c.........c..c..c.............c...c..c....c.....c......c.........c..#...###.#.#.##.##..#.#.#####bbba.c.....##.....####bbbbbb#a##....c.c.c....c.......c.c.c...",
+"......###..####aaabbbbbbbbbabbb#c..........c.......................c..............c....c.......................c.........##aba.c..c.c..c....c.....c...c.cccccccccfjjjmjjmjjjjmjmmmmmjmkkkkmkkmmmmmkmkkkkkkkjkjkjjjjjmj##..c..c......c.................c.........c............c..c..c.............c....c............c............c......c..c...#..#.#.#.#.##..#..##.#.#...###bbb#.....c.##.....#######abbbbbab#####....c...c..c..........",
+"...c.#...##a#bbabbbbbbbbbbbbbbba....c........c..c..c....c...............c.c.c..c....c....c..c.c.c...###..c........c.....###ba#................c....c.c.c..ccccffccccfeeljjjmmjmjjjmjmmmmmmmmjkkkkmmkmmkmkkmkkkkjjjmjmj##c..c....c.....c.c..c..c..c..c...c...c.....c..c..c..............c..c........c....c....c........c..c..c.......c.........#...###.#.##.##.##..#.#.#.####bbb#.........##.....#####a#b#bbabbbbb##a##.........c.....c..",
+".....#..##aabbbbbbbbbbbbbbbbbbbb.c....c..c.c..................c.c..c..c...........c....c...........##aa#...c.c.c.....c.###ab#..c..c...c..c..c....c......cccc.cffccccccccccceeejjjjmjmjjjjmjmmmmmmmkmkkkkkmkkmkmmmjjjml##.c..........c.....................c...c............c....c..c........c..c.c....c...........c.c..........c.......c..c...#.#..#.#.##.##.#..##.#.#.#.###abb#.c....c.#..#..#....#########a#b#bbbbbba#.c..c......c....",
+".....#...#bbbbbbbbbbbbbbbblbbbbb#...c........c.c..c..c.c.c..................c.c......c...c.........###b#.........c.....###ba...................c...c.cc.cc.ccccfefcccccccccccccccfeljjjjmjmjjmjmjmmmmmmmmjmkkkkmmmmjml#...........c....c....c..c..................c....c...............c..c.............c.......c..c.....c....................#...#.##.#.#..#.#.#.#..#.#.###bbbb.......c..#.##.......#########a##aa#bbbb#.......c.......",
+"..c..#..###bbbbbbbbbbbbbbbbblbbb#.c.....c............................c..............................##ba.c..........c.###bb#.....c..c..c.c..c....c...c...cccccc.feeeeeefcccccccccccccccfeeljjjjmjmjjmjmjmmmmmmmmjjjmjl#.c....c........................c...c..c..c..........c..c....c...........c.c.c......c.c........c.....c........c.c.c.....#...#.#.#.#.##.##.#.#.#.#...##abbb.c.c.c.......##.#..#.....#.########a#bbbb#c.c.......c...",
+".....#...##babbbbbblalblbbbbbbbb#....................c....c.c..........c..c.....c....c.c..c..c..c..#.#ba...c....c.....###b##c.................c....c..cccc.cccccccfffeeeleeeffcccccccccccccccceeljjjjjmjmjjmjmjmmjmjm##....c...c..c...c...c...c..c..c..............c.c...c................c...........c...........c....c.c......c.............#..##.#.###.#.##.#.#..#.#.#.##abba#........c.....#.#......#.......####abbbb#..............",
+"...c..#..###lbbbblba#####abbbbbba.......c..c....................c..c.c......c......c...............####b#c....c......###ab#.....c..c.c....c......c....c..ccccccccccccccccffeeleleeefcccccccccccccccffelljjjjmjmjjmjmja#c.c..............................c.c......c...........c.c..c..c......c..c...c....c...c.......c.......c........c....c...#....#.##..#.#..#.#.#.#..#.###bbb#.................##.#.#...#.#.#..##a#bbbb#....c...c.c...",
+"......##...#abbbbb#######bbbbbbba.c..c.......c.c.c.......c...c...........c.....c.........c..c.c....#.#ab#...c....c....##b#...c................c......c.c.cccccccccccccccccccccfffeeeeeeeffccccccccccccccccfeljjjjjjmj##.c..c.c..c...c...c.c...c..c....c......c.c.....c..c...............c........c....c.........c.c.......c....c...c...c......#...##.#.##.##.#.#.##.#.#.#.##bbba......c..c.........##.#.........###bbbbbb#...c..........",
+".......#.#.##bbbbba##..###blbbbbb#.........c.........c.c.......c..c..........c...c..c............c.#.##b#.c..........##ab#......c.####......####.c..c.c.ccccccccccccccccccccccccccccfffeeeeeeeefcccccccccccccccfeellla#c....................c.......c......c.................c.c.c..c.......c......c....c..c..c......c...........c.........c..#...#.#.##.##.#.#.#.#..#.#.###bbb#.c..c..........c.....#.########.###bbbbb#..c.....c..c...",
+".........###abaa####.#..#bbbbbbbb#.c..............c......c............c...c...........c.c.c.........#.#ba#.......c..###ba.....c...##aaa###a#aabba..c....c.cccccccccccccccccccccccccccccccfffffeeeeefffccccccccccccccf....c.c..c.....c..c......c.c..c...c......c..c......c................c......c.........................c...c.......c..c....#....###.#.#.##.#.#.##.#.#.##bbbb#......c....c..c.....c....#..######aa####.......c........",
+"...c.c....####...c...#..##bbblbbb#......c....c................c..c..c...c....c....c.c...............####b#c...c.....##ab#........#.##abbba#aabbb#...c..##.cccccccccccccccccccccccccccccccccccccccffeeeeeefffcccccccc.cc...........c........c................c......c......c..c...c...c.....c............c...c..c......c.....c...c...c..........#...#.#.#.##.#.#.#..#.#..###abbb#c........c........c.....c..........#.#....c.........c...",
+"...............c.....#.###bbbbbbba..c.....c....c...........c..............c....c........c..c.c.c....#.#ab#......c..#.#ba#..c.....#.#abbbaabbbbbb#.....#######cccccccccccccccccccccccccccccccccccccccccfffeefeeea###f.....c...c...............c...c....c..c.......c....c........c................c.....c...........c.c...c.c.............c..c...#..#.#.##.#.#.#.#.##.#.####bbbb##.....c.....c....c...c................c.c....c...........",
+".....c.....c.c......#..##bbbbbbbbb#....c...........c..c........c.c.....c....c....c....c..........c....##aa..c.c....###ba.c.......#.#abbbbbbbaba#...c....#aaba#cccccccccccccccccfccccccccccccccccccccccccff#ff###l##f........#.....c....c..c..####.c.........c.....c.......c......c....c....c.c....c.c.....c..c..c...................c........c.##....#.#.#.#.##.#.#.#.####abbb#c...c.....................................c....c..c..c...",
+".......c.c.....c...##.###bbbbbbbbbb.c.........c..c......c.c.c......c.c.............c....c.c..........#.#ba#.....c.###ab#...c.c..#.#aabbaa##.#........#..##a#ab#cccccccccccccccffefccccccccccccccccccccccffff.cffea##..c....##a#.c....c......###ba#..c...c.....c.c......c......c..........c.....c........c...........c.........c...c....c..c.....#...#.##.##.#..##.#.####abbbb##........c...c..c....c..c.c..c.c....c..c..................",
+".....c............#...##blbbbbbbbbb#..c....c........c.c.......c.c.c..................c.......c.c.....####b#.c......##ba#c.......#.#aba#......c.....c.#..###a#bacccccccccccccffef#efccccccccccccccccccccff#fffcc.##a#..c.c.###aa#...c.....c..##abba.........c.......c.....c...........c...........c........c.c..c..c...c....c....c....c...........#......##.###.#..#.####bbbbb#c...c............................................c..c.c...",
+"...c...c..c....c..#..##bbbbbblbbbbbba#..c.....c.c..........####.#....c...c........c..................#..aba......####b#.........#.#bb#.c.......c.c...#..#a##aa##ccccccccccc#fe#e#efcccccccfffccccccccccefffccf.ff#aa#.....#.#aba.....c.....###abb#...c..c....c...c............c...........c...c.......c.c...............c....c...................#.#..#.#.#..##.######bbbbbb#.......c...c.....c.c......c..c...c..c........c..c..........",
+"............c....##.##bbbbbbbbbbbbbbbb##....c......#.#######abaaaba##..c....c.c............c....c.c...#.#ab#......##ab#.........###aa..c.c.c.c.....c.#.##a##aa##cccccccc.c##e#f##fccccccccfffcccccccccf#ffccc....f#a#..c.##.##bbb.c........#.ab##..............c....c....c.c....c.c..............c.c..........c....c...........c......c...c.c.c...##.......#.#.####a#bbbbbb#......c...c.................................c........c......",
+"...c....c........#..##bbbbbbbbbblbbbbbbb##############.#####aabbbbbbb##...c...........c...............#.##ba...c.###bb#.c..c....#.#ba#.........c.....#.##aa#aba.ccccccccc###a..cccccccccccfefccccccccffefcccccccf.##b#c.....##bbb##..c....###aa#.c.c...c..c............c.....c..........c...c............c..c.........c..c.c.c......c...........c...#....#.#.####aaabbbbba#..c.c..........c..c..c..c..c........c..c..c.....c..c.........",
+"............c....#c###abbbbbbbbbbbbbbbbbbbbba##.###.####a#aaabbbabbbbba#.c.....c.c.c....c..c.......c...#.#ab#....###b#..........#.#abbbab######.....#..##aaaaba.ccccccc..##accccccccccccc###fccccccccff#ccccccc..###b#.c.##.##abbb#........##b#..............c..c..c...........c....c..c............c.........c..c.c............c.c..................###....#.##aabbbbbb##.c.........c.......................c...........c........c.c...",
+"...c..c..c.......#..#bbbbbbbbbbbbblbbbbbbbbbba#a###a#aa#ababababbbbbbbbb##.c.........c.......c.......c.#.##ba.c.###ab#...c...c..#.##bbbbbbbabba...c.#..##abbba#c..ccccc.####.cccccccccc.#####ccccccccfe#cccccccc.#.#b#.c.#.##b##bba#..c...###b#...c..c...c..............c...c................c.c........c..c..........c.......c.....c...c.c.....c......###...#.aabbbbb##........c......c...c.....c.c..c..c.....c.c..c......c............",
+"..............c..#..##abbbbbbbbbbbbbbblbbbbbbbaaabaababbbbabbbbabaabbbbbba...c....c.......c.......c....##.#ab#..###ab#c.........#.##bbbbbaa#abb#c...#..#aabbb#...c...c....aa.c.cccccccc#.##acccccccff###ccccccc.c###b#..#.###b####ba......###ba.c..............................c.c....c..c.......c...c.......c..c........c.c.....c............c..........######aaab####...c.......c..c...c.................c.c..........c.....c..c..c...",
+".....c...........#..##blbbbblbbbbbbbbbbbbbbabbbbbabbbbbbbbbbabbabababbbbbb##........c...c...c.c.c........###ba..#.aba....c......#.#abbbbba##bba#....#..##bbba.c.c.c.c.c.#.#a#.c.c.cccc...#aa#cccccc.f#a#cccc.cc...##b#.c.#.#bb####ab#..c..##ab#.....c....c..c....c....c...c................c..c.........c..c......c............c......c..c..c.................##.#....c.....c..c.............c..c....c...............c..................",
+"........c..c.....#..###bbbbbbbbbblbbbbbbbbbbbabbbbbbbbababbabbabblbbaabbbbba.c.......................c...#.##b#####ba.c.........#.##bbbb#####a#........#aabaa#.....c....#.#a#..c.c...c..##aa.ccccccff#a#ccc.ccc.###bb#...###b######bb#...#.#ab#........c......c...c..c............c.c..c........c..c..c..............c.c..c.c.......c............c..c............c.....c..c.......c.....c.................c.............c....c.c....c...",
+"...c.............#...##babbbbbbbbbbbblbblbbbabbabbbababbbaabababaababbabbbbb#..c....c...c......c..c......##.#b#a#abb#...c..c.c..#.#ab#.....##......##.##aaaaaaaa##....c.#.#ab#...c.c.c.###a#.ccccc...#a#..cc..c.#.#ba.c..##ab#.##.##bb#..###aa#c....c....c......c..........c.c................c..c.............c.......c..c.....c............c....c......c....c.............c.............c...c........c.......c.c.c.......c............",
+".....c...c...c.c..#..###albblbbbbbbbbbbbbbabblbbbbabbblbabbblbaa#a#aaababbbbb#........c.............c.....#.###a#aba............#.##b#.c...c.c...c..#.#aaa#a#aaabaa#..c.#.##b#..c.c.c.#.##b#..c..c.f.#aa#.c.c...##ab#....###b#...#.##ab#.###b#....c...c.....c.......c..c.......c...c..c..c............c.c.c......c.c........c.....c...................c.c...c.....c.c..c..c.......c..c..c...c........c......c............c.......c..c...",
+"..................##...##bbbbbbbbbbbbbbbbbbbbbbbbabbabbbbabbba#####bablabbbbbb#.c.c.......c.c.c...........##.###abba....c.......#.##bb#........c....#.#bba#######abba##.##.#ab#c.......###b#.c.c.c.#..#aa.c.c.####bb#c...###b#...#..##ba###ab#..........c.......c........c..c....................c...........c...........c....c.c......c.c.c..c...c............................c................c..c..........c......c......c...........",
+".......c...c.......#...#a#abbbbbbbblbbbbbbbbbbbblbbbbbbabbbbbaa#.###a#abbabbbba......##a#.............c....#...#abb#..c.....c....#.##bb#..###......###aaaa##.#.####abba#.#.#ab#...c.c.#.#aa#c.c......##aaa...#.##aba....#.#bb#....######a##aba...c..c.........c...c..c........c..c..c..c..c.c......c..c...c....c...c.......c.......c.................c........c..c....c..............c.....c............c..c....c......c.........c..c...",
+"...c..............c.#....#aalbbbbbbbbbbblbbbbbbbbbablbbbbbbbba##...##babababbbb##c..###ba#....c.............#.##abb#....c........#..##bba#aab#.c.c..##a#...####.###aaab###.##bb.......###aa#...c..c#...#aaa#####bbb#....####b#.....#..###aabb#..........c..c....c...........c..................c........c....c.........c.c.......c....c.....c..c.........c.................c...c.............c..c.c..c............c.........c..c........",
+".....c.c...c..c.c....##..##abbbblbbbbbbbbbbblbababbbbbbbbbb###.##..###ababblbbbba..#.##bb#.c.....c..c....c..##.#abb..c....c...c...##.###bbbbba.....#.#ab.......#####a#######abb#.c......#aa..c..c.c.##.###ab###bbb#.c.c..##bb#c.c...##.###abb#c....c..c.............c..c........c..c......cc.......c......c....c..c..c......c...........c..............c.......c..c..c.c.c.......c..c..c.c.c...............c...........c..c.........c...",
+"......................#...##bbbbbbbbblbbbbabbbbbabbbbbbbl##..c..#...##aabababbbbba####abb#...c................##ab#...............#.#.###abbb#......##aa#..c..c.......##.#.#bbb#...c..###b#..........#...###bbbbb##.....###b#........#..##bba....c........c.....c.........c.....................c......c.........................c...c...c.c..c..c..c....c..c..............c.................................c...c.c.c.......c..........",
+"....c....c.c.c.c..c....##.##abbbbbblbaaababbbblbbbbbbbb#...c.....##.###ababbbabbbba###bbb#.c....c..c..c.c..c.###a##....c....c....c.#.###a#bb##......##aa.c.............#..#abba.c.....###b#....c.c....#####aabbb#.......##a##....c....####bb#......c..c.....c.c...c..c..c...c...c...c..c....c.....c............c...c..c......c.....c...c...............c........................c..c.............c......c.c................c.....c..c...",
+"..c...c....#...........#...#blbblbbbaa#aabbbabbbabbbb##........c..#..##bbababababaaabbbbb.....c.................#....c................#.####....c...####....c..c.......#.##bbb#......c.####.c......c....####aa##.......................##aa#.c.c................c.............c..........c.............c.....c...........c.c...c.c............c...c.........c..c.........c..c..c........c...c..c...c.c..........c......c.....c..........",
+".........###aa###.###..##.##abbbbbbbb#a#blbbbab#aaba###....c.......#.##aabababbabbabbbbb#...........c..c..c.c......c.....c...c.c..c..c............c................c.c.###aa##...c.......#....c......c.c...##.......c.......c.......c...##............c..c.c..c.........c..c....c....c.......c....c.c....c.c.....c..c..c.................c.........................c...c..........c...c.......................c...c......c.c...c.c..c...",
+"........#.##bbbbbbbaa####.##babbbbbbba#aabbbaa#a###aabb#a#.#.######.##abbabablbbbbbbbbb##..c....c...............c.....c................c..c....c....c.c.....c............#.........c............c...........c.........c.......c.......c....c..c..c...........................c.........c........c.....c........c...........c.........c.....c.c...c..c...c.c..c...............c..c........c.c..c....c.....c..........c...................",
+".....c.#..##abbbaabbbbb####aabbbbbba##a####a#########abbbbb########.###aablbbbbbbbabb##..c...........c..c.....c............c.....c...c.......c.........c..c....................c.....c.....c.............c......c..c......c.......c.....c..............c.c....c...c..c...c.....c..c.........c...........c........c.c..c..c...c....c....c.......c................c.c..c.c............c............c.....c...c..c..c...........c......c...",
+"...c...#..#abaa#a##bab#baaaaaabbbbba....#......#..###bbbb#a###ab#####bbbbbababbb#.#........c..c..c..........c....c....c........................c............c.c.c..c.c.c.....c..................c..c.........c....c...........c.c..................c............c......c............c..c..c......c...c.......c.c...............c....c......c.....c...c..c..c..............c...c..........c.........c.c.................c.c.c............",
+".......#.###bbb####aabbbbabaaaalbbb#.c.......c.##.##bab#b####b#bb#b#babababbbbbb#.c...c.............c.....c....c...c....c..c..c..c...c......c....c..c.....c................c.....c...c...c..c.c.....c..c...c....c.......c...c........c..c.............c...c...c....c.....c..c..c........................c.c..........c....c...........c...........................c.....c...c.....c..c.c.......c........c.....c..c...c...........c..c...",
+"...c...#.##bbb######bbbbbba##aabbbb#...c...c...#.##abaaa#####abbbbbbbabababaabbba..........c...c.....................c.............c...c..c......................c......c....c.....c...c........c..................c.c.............c......c.c..c.c......c........c...c............c....c..c....c...c............c..c.........c..c.c.c.....c.....c...c..c.c..c..c..........................c..c...c......................c.....c.........",
+".......###abaaa#####abbblbba##aabb#.c....c......###abbaa#.####bbabbababblbabbbbb#..c...c.c............c.c..c......c......c..c..c................c....c...c.c...c...c............c.....................c..c.c..............c..c........................c.....c............c....c............c..c............c.........c..c.c............c.....c....c...............c..c..c..c.......................c...c..c..c.....c......c....c..c.c...",
+"........####.....#############a##.....c.........#############ba#aaaaa#a#a#aaaaa#.....c......c..c.c...........c..c......................c..c..........................c..c..............c.......c..c..........c.c...............c..c..c...c...c..c...c....c.......c..c.....c..c.........c............c.c........c..c..........c.......c.........c......c......c...............c..c.c...c...c.....c.......................................",
+"............c.....c...c........c...c.....c...........c.c..............#.#...c...c.........c........c..c.......................c...c.........c.c...c.c..c.c...c..c...........c...c....c.....c.c..........c...........c.c.c..c...............c.................c.c..................c......c...c..c.......c...c.......c..c........c.c.....cc..............c......c....c..c...c..................c......c...c..c..c..c.c..c.c..c.c..c......",
+"...c..c.c.c...c..c.c....c.c................c.............c....................c.........................c.....c....c.c..c.......c...c..c............................c...c.c........c....c......c..c.........c.....c............c.c.c..............c..c...........c...c.....c..c.....c.............c..c.........c..c......c............c.....c....c..c.....c.c......c...........c..c.c..c.c........c.....................................",
+"......................c.........c..c..............c..c..........c...c..c............c...c.c.....c...c.......c....c.......c..c................c..c.c...c....c.c....c...c.......c..c.......c............c...c...c.............c.........c.c.c.....c........c..c............c.......c.....c..cc..c........c..c..c..............c.c..c.c......c...................c..c........c................c..c......c.....c....c......c..c.c....c..c...",
+"...c..c.....c..............c.........c....c..c.........c..c.......c...c.....c..c.c....c.....c.c.........c.....c.......c..........c..c...........................c..................c.......c...c..c.............c......c......c.............c......c...c..........c..c.....c.......c.................c..........c.........c...........c.....c..c..c..c...c..............c...c...c....c...........c.....c................................",
+"................c.....c......c....c.....c.......c....c....................c........................c.c....c......c......c..c...c..........c.c..c...c..c..c....c.........c...c..c.....c..c...........c...c..c.......c.c..........c.........c...c..c...c.......c..c.....................c..c...c..c........c..c.......c..c....c..c....................................c.c.......c..........c.....c.............c..c..c.c......c..c..c.c...",
+"...................................................................................................................................................................................................................................................................................................c..........c...c..............c.....c................................................................................................"
+};
+
diff --git a/images/banner_bw.xbm b/images/banner_bw.xbm
new file mode 100644 (file)
index 0000000..267543e
--- /dev/null
@@ -0,0 +1,1025 @@
+#define banner_bw_width 424
+#define banner_bw_height 289
+static char banner_bw_bits[] = {
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xbf,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0xaf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,
+ 0x5e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x5b,0xfd,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xf5,0x5f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x6f,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xf7,0xf7,0xbd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xf5,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xbf,0xff,0xff,
+ 0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xed,0xde,0xab,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xdf,0xff,0xfb,0xbb,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xfa,0x57,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xb7,0xff,0xbf,0xfe,0xff,0xff,0xff,0xb5,0xfe,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xbf,0x7b,0x5d,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0x7d,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0xf5,0xbf,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xff,0xfb,0xfe,
+ 0xff,0xff,0xb7,0x5f,0xf5,0xff,0xff,0xff,0xff,0x7f,0x7f,0x7f,0xf7,0xf7,0x95,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xf7,0xff,0xff,0xff,
+ 0xdd,0xff,0xff,0xff,0xff,0x02,0x00,0x80,0xfe,0xaa,0xae,0x12,0x11,0x91,0x94,
+ 0xe4,0xff,0xff,0xff,0x7f,0xff,0xbf,0xfe,0xff,0xff,0xff,0xfa,0xeb,0xff,0xff,
+ 0xff,0xff,0xff,0xfb,0xeb,0xdd,0x5f,0xbb,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xbf,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xef,0xfb,0xff,
+ 0x7f,0x75,0xd5,0xbb,0x6a,0xdd,0x6e,0xd5,0xd6,0xff,0xff,0xff,0xbf,0xfe,0x7f,
+ 0xfd,0xff,0x7f,0x9f,0x7a,0xaf,0xff,0xff,0xff,0xff,0xff,0xef,0xfe,0xf7,0xf6,
+ 0x6e,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xf7,0xfe,
+ 0xfb,0xff,0xbf,0xff,0xff,0xff,0x2a,0x22,0x81,0xbe,0xaa,0x57,0xab,0x65,0x55,
+ 0x57,0xab,0xff,0xff,0xff,0x5d,0xff,0x7f,0xfd,0xff,0xff,0xa3,0xfe,0xbd,0xff,
+ 0xff,0xff,0xff,0x7b,0xfd,0x7b,0xbf,0x1f,0xff,0xea,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf7,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xd5,
+ 0xda,0x7d,0xdb,0xd5,0x6d,0x55,0xb5,0xaa,0xba,0xaa,0xff,0xff,0xff,0xbf,0xff,
+ 0xbb,0xfe,0xff,0xff,0xba,0xf7,0xb7,0xfe,0xff,0xff,0xbf,0xbf,0xfa,0xdf,0x77,
+ 0x6b,0xfd,0x97,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xdf,0xef,0xf6,0xdf,
+ 0xf7,0xff,0xfb,0xff,0xdf,0xff,0xff,0xab,0xfa,0x47,0xfd,0xea,0x5f,0x6d,0xad,
+ 0xb6,0x55,0xd5,0xff,0xff,0xff,0xbf,0xfe,0x7f,0xfd,0xff,0xdf,0xeb,0xff,0xff,
+ 0xfe,0xff,0xff,0xfb,0x5f,0xfd,0xee,0xdd,0x5d,0xff,0x6f,0xfa,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0xbf,0xfb,0x6f,0x7f,0xbf,0xef,0xf7,0xff,0xfe,0xdf,
+ 0x57,0xf5,0xb5,0x7e,0x57,0xbf,0xaa,0xb6,0xd5,0x6a,0xeb,0xff,0xff,0xff,0x5f,
+ 0xff,0xbf,0xfe,0xff,0x7b,0xfc,0xff,0xdf,0xfa,0xff,0xff,0x6f,0xab,0xee,0x77,
+ 0xff,0xab,0xef,0xbf,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xea,
+ 0xad,0xff,0xfa,0xf5,0x6f,0xdf,0xff,0x7f,0xdb,0x7e,0xdb,0xfb,0xf4,0x4f,0xdd,
+ 0x6b,0x7f,0xff,0xf7,0xff,0xff,0xff,0x7d,0xff,0xbf,0xfe,0xff,0x5f,0xff,0xff,
+ 0xff,0xfd,0xff,0x7f,0xff,0xd5,0xff,0xff,0xdd,0xad,0xbf,0x7f,0xd5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xf5,0x57,0xff,0xff,0x75,0xdf,0x7f,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xfb,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,
+ 0x5f,0xff,0xff,0xfe,0xff,0x7f,0xff,0xff,0xff,0xf5,0xff,0xff,0xab,0xd7,0xff,
+ 0x6f,0xf7,0xd6,0xff,0xff,0x55,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0x7f,0xbd,
+ 0xdd,0xef,0xfd,0x74,0xfb,0xaf,0x97,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0x57,
+ 0xff,0xff,0xff,0xff,0xff,0xf7,0xbf,0xff,0x5f,0xff,0xbb,0xfe,0xff,0x5f,0xff,
+ 0xff,0xff,0xb7,0xdf,0xff,0xfb,0xeb,0xbf,0xff,0xad,0xea,0xff,0xff,0xaf,0xf7,
+ 0x7d,0xef,0xfd,0xfe,0xbf,0x7f,0xdf,0xfa,0xfd,0xef,0xbf,0xfe,0xed,0xd7,0xaf,
+ 0xfd,0xff,0xff,0xff,0xff,0xb7,0xf5,0x5f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xbf,0xfe,0xfd,0xae,0xff,0xff,0xbf,0xfb,0x7f,0xef,0x4b,0xfb,
+ 0xff,0xff,0x7f,0xf5,0xff,0xff,0xb5,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,
+ 0xfa,0xfa,0xdb,0xfb,0xfa,0xbb,0xaf,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,
+ 0x5f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xfe,0xff,0xfe,0xff,0xdb,
+ 0xff,0xff,0xff,0xf7,0xff,0xff,0xf5,0x7d,0xff,0xde,0x8b,0xfa,0xff,0x77,0x7f,
+ 0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xfd,0xfb,0xdf,0xff,0xed,0xf5,0xdf,
+ 0xae,0xf7,0xff,0xff,0xff,0xff,0xff,0xfd,0xbe,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0xff,0xbf,0xfe,0xff,0xef,0xff,0xff,0xff,0xed,0xff,0xff,0xfb,
+ 0xaf,0xf5,0xff,0xed,0xfe,0xff,0xdf,0xfd,0xea,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xbf,0xde,0xfb,0xaf,0xff,0xfb,0xfb,0x7e,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xfe,0xaf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xbf,0xfe,0xbf,0xfe,0xff,
+ 0xef,0xff,0xff,0xff,0xe7,0xff,0x7f,0xf5,0xfb,0xaa,0x7b,0x95,0xff,0xff,0x3e,
+ 0xfd,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,0xff,0xf6,0xdf,0xef,0xbc,0xef,
+ 0x9f,0x5f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xf7,0xff,
+ 0xff,0xff,0xff,0x5d,0xff,0xfb,0xfa,0xff,0xe7,0xff,0xf7,0xff,0xf7,0xff,0xff,
+ 0xab,0xdf,0xaf,0xd6,0xfb,0xff,0xef,0xd7,0xee,0x57,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xb5,0xff,0xf7,0x7e,0xff,0xf7,0xd7,0xbf,0x7e,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x3f,0xff,
+ 0x7f,0xef,0xff,0xd6,0xff,0xdf,0xff,0xff,0xfd,0xf5,0xbd,0xda,0xfe,0xff,0xff,
+ 0x55,0xff,0x5f,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xff,0xeb,0x5f,0xff,0xf9,
+ 0xdf,0x7d,0x7b,0xff,0xff,0xff,0x7b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xff,0xff,0xff,0x5f,0xff,0xff,0xfe,0xff,0xed,0xff,0xef,0xff,0xd7,0xff,
+ 0xff,0xaf,0xba,0xf7,0x57,0xfd,0xdf,0x7d,0xd7,0xbf,0x5f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xd7,0xff,0xef,0x7b,0xff,0xf7,0xae,0xbf,0xbe,0xfe,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfe,0xbf,
+ 0xfe,0xff,0xef,0xff,0xd7,0xff,0xef,0xff,0xef,0x57,0xf5,0xff,0x6e,0xa5,0xfd,
+ 0x5f,0xf9,0xff,0x7e,0xff,0xff,0xff,0xfe,0xff,0xff,0xfb,0xbf,0xd7,0x5f,0xdf,
+ 0xf5,0xdb,0xfb,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xbb,0xfe,0xff,0xe7,0xfb,0xef,0xff,0xd6,
+ 0xff,0xff,0xbf,0xf6,0xff,0xbf,0xaf,0x76,0x57,0xfd,0xff,0x5f,0xff,0xff,0xfb,
+ 0xf7,0xbe,0xff,0xf7,0xff,0xea,0xbf,0xfe,0xf5,0xaf,0xbf,0x76,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xdf,0xff,0xfb,0xff,0xff,0x9d,0xf7,
+ 0xbf,0xfe,0xff,0xf7,0x7f,0xeb,0xff,0xef,0xff,0xff,0x4b,0xff,0xfd,0xff,0xfa,
+ 0xbf,0x55,0xff,0xff,0xbd,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xeb,0x7f,
+ 0xff,0xf6,0xdf,0xbf,0x7e,0xfd,0xff,0xff,0xff,0xfb,0xbf,0xff,0xff,0xfb,0xff,
+ 0xff,0xff,0xff,0xef,0xff,0xff,0x7f,0xff,0xff,0xde,0x7f,0xdf,0xff,0xf7,0xfd,
+ 0xef,0xff,0xff,0xb7,0xff,0xdf,0xfe,0x7f,0xd5,0xd4,0xff,0xff,0x77,0xf7,0xf7,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xed,0x5f,0xfb,0xf9,0xaf,0xbf,0xfe,0xfd,0xff,
+ 0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xfb,0x9f,
+ 0xfe,0xbf,0xfe,0xff,0xe7,0xff,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xdf,0x2a,0xfb,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf5,
+ 0xae,0x3f,0xbd,0xd7,0x5d,0x77,0xfe,0xef,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xbb,0xfe,0xff,0xef,0xff,0xff,
+ 0x7f,0xef,0xff,0xbf,0xff,0xff,0xff,0xef,0x7f,0xd5,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xfa,0xbb,0xff,0xfe,0xeb,0xaf,0xbf,0xfd,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xfd,0xff,
+ 0xbd,0xff,0xff,0xfe,0xff,0xdf,0xff,0xff,0xff,0xeb,0xef,0xff,0xff,0xff,0xff,
+ 0x7f,0xbb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,
+ 0xfb,0xcf,0x1e,0xff,0xea,0xb7,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xf7,0xfb,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xfe,0xbf,0xfe,0xff,0xbe,0xff,
+ 0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfc,0xeb,0x6f,0xff,0xbb,0xd7,0x9f,
+ 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xbf,0xfe,0xbf,0xfe,0xff,0x9f,0xff,0xff,0xdf,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xfd,0xeb,0xaf,0xf7,0xfa,0xeb,0x7d,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xdf,0xef,0xff,0xff,0xfe,0xff,0xff,0xff,0xbf,0xfe,0xef,0xfe,0xff,0xff,
+ 0xfe,0xff,0x7f,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xde,0x77,0xdf,0x7f,0xfd,0xf7,
+ 0x97,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,
+ 0xff,0xff,0xdf,0xfe,0xbf,0xfe,0xff,0xbb,0xfe,0xff,0xff,0xfa,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,
+ 0xfe,0x7d,0xff,0xf5,0xef,0x7f,0xfd,0xf5,0xdf,0xff,0xff,0xff,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xbf,0xbe,0xff,
+ 0xff,0xfa,0xff,0xfb,0xfd,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xbf,0xfe,0xfb,0xbf,0xfb,0xde,
+ 0xfb,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xf7,0xff,0x9d,0xfe,0xbf,0xfe,0xff,0xff,0xea,0xff,0x5f,0xfe,0xbf,0xff,
+ 0xfd,0xf7,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xbf,0xbf,0xff,0xbf,0xff,
+ 0xff,0xff,0xbf,0xfe,0xf7,0xb6,0x7f,0xff,0xba,0xd7,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xff,0xbf,0xfe,0xbf,0xfe,0xdf,0xff,0xff,0xff,0xff,0xbf,0xde,0xfb,0xfe,
+ 0xff,0xef,0xd7,0x7e,0x5f,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xbd,0xf7,0x7f,0x7f,
+ 0xfd,0xfb,0xef,0xff,0xbf,0xff,0x7b,0xff,0xbd,0xff,0x77,0xff,0xf7,0xfe,0xff,
+ 0xfe,0xdf,0xff,0xfe,0xdf,0xfe,0xbf,0xfe,0xff,0xff,0x5f,0xeb,0x57,0xdf,0xff,
+ 0xff,0xff,0xff,0xfe,0xff,0xef,0xff,0xf7,0xdf,0xff,0xff,0xff,0xff,0xf7,0xff,
+ 0xff,0xff,0xff,0xfb,0xfa,0xef,0xbf,0xf7,0xfd,0x77,0xef,0xff,0xff,0xff,0xf7,
+ 0xfd,0x5f,0xfd,0x7f,0xfd,0x7f,0xfd,0x7f,0xff,0x5d,0xff,0xff,0xbf,0xfe,0xbf,
+ 0xfe,0xff,0xff,0xbb,0xfd,0xd5,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xfb,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xf5,0xdb,0xbb,
+ 0xfe,0xfa,0xf6,0xd7,0xff,0xff,0xff,0xf6,0xff,0xaf,0xee,0xbf,0xfa,0x7f,0xf5,
+ 0xbb,0xfa,0x5f,0xff,0xff,0x5f,0xff,0xbf,0xfe,0xff,0xff,0xff,0xb7,0xea,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xef,0xf7,0xdf,0xff,0xfe,0xfb,0xef,0xdf,0xff,0xff,0xff,
+ 0xd7,0xff,0x5f,0xfd,0xee,0xea,0xdf,0xf5,0x7f,0xfd,0xbf,0xfe,0xff,0xbf,0xfe,
+ 0xfd,0xfe,0xff,0xff,0x7f,0x97,0xfa,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd6,0xaf,
+ 0x7f,0xdf,0xfb,0xeb,0xae,0xff,0xff,0xef,0xd5,0xff,0xb6,0xf5,0xbf,0xf5,0x7d,
+ 0xd5,0xbf,0xf5,0x57,0xfd,0xff,0x7d,0xff,0xbf,0xfe,0xfe,0xff,0xfb,0xdf,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xb5,0xf7,0xff,0xff,0x7b,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xdf,0x7f,0xfd,0xea,0xdf,0xbf,0xff,0xff,
+ 0xff,0x56,0xdf,0xeb,0xf5,0xd7,0xd7,0x5f,0xd7,0x6e,0xb5,0x7f,0xf5,0xff,0xaf,
+ 0xff,0xbf,0xfe,0xfb,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xdb,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,
+ 0xbb,0xf7,0xfd,0xf7,0xaf,0xbf,0xff,0xff,0x7f,0xbb,0xfe,0xf7,0x6b,0xd7,0x5f,
+ 0xaf,0xaf,0xef,0xf6,0xeb,0xfa,0xff,0xff,0xff,0xb7,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xad,0xec,0xed,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6d,0xcf,0x7f,0xfd,0xf5,0xdf,0xad,0xfe,
+ 0xff,0xbf,0xbd,0xfa,0xea,0xd7,0x55,0xdb,0x57,0x7f,0xd7,0xd7,0xf5,0xf5,0xff,
+ 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0x77,0x57,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xbf,
+ 0xf7,0xef,0xbf,0xde,0xf7,0xae,0x7f,0xff,0xff,0xdd,0x7e,0xed,0xba,0x5f,0xeb,
+ 0xbf,0xd5,0xbf,0xe9,0xef,0xfa,0xeb,0xfd,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xab,0xb9,0xaa,0xfb,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,0xd7,0x7f,0xfd,0xf4,0xd7,0xbf,
+ 0xfe,0xff,0x7f,0xf5,0x3b,0xfd,0xbf,0xf5,0xff,0xda,0xfd,0xb6,0x3f,0xd5,0xeb,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xaf,0x56,0x6b,0x6d,0xbf,0xff,0xff,0xfd,0xff,0xff,0xff,0xfd,0xfb,
+ 0xff,0xf5,0xed,0xbb,0xfe,0xfa,0xdf,0x5f,0xff,0xff,0x0f,0xff,0x5d,0xfd,0xff,
+ 0xfa,0xff,0xd5,0x7f,0xf5,0xdf,0xfa,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xda,0xb5,0xb5,0xf5,
+ 0xed,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xbf,0xf5,0xeb,0x5f,0x7f,0xbb,0xe3,
+ 0xad,0xff,0xf7,0xf7,0xff,0xd7,0xfe,0x5e,0xfa,0xfb,0xea,0xf7,0xfa,0xbe,0xfe,
+ 0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0xf7,0xff,0x6f,0x6b,0xae,0x56,0xdb,0xbe,0xfd,0xef,0xbf,0xff,0xff,0xff,
+ 0xff,0xff,0xda,0xf7,0xbf,0x5b,0xfd,0xbd,0xaf,0xff,0x7f,0x97,0xef,0x57,0xff,
+ 0xbf,0xfd,0xff,0xf5,0xff,0xfd,0x7f,0xbd,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xad,0x6b,0xb5,
+ 0x55,0xeb,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0x7b,0xfd,0xf9,0xae,0xbf,0xfe,
+ 0xf2,0xd7,0xff,0xff,0xd7,0xbf,0x57,0xff,0xfb,0xfe,0xbf,0xfb,0xdf,0xfe,0xbd,
+ 0xfe,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,
+ 0xfd,0xff,0xff,0xff,0xaf,0x55,0xb5,0xdb,0xb6,0xb5,0xba,0x7f,0xff,0xff,0xfd,
+ 0xff,0xff,0xbf,0xfe,0xfb,0xd7,0x7f,0xff,0xfd,0xeb,0xff,0xff,0xfb,0xff,0xd7,
+ 0xff,0x6f,0xff,0xff,0xfd,0xff,0xff,0xbf,0xff,0xeb,0xff,0xff,0xff,0xff,0x6e,
+ 0xfa,0xbf,0x7f,0xfd,0xff,0x6f,0xff,0xff,0xff,0xf7,0xff,0xff,0xdf,0xda,0x5a,
+ 0xad,0xda,0x5a,0xad,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf5,0xdf,0xbf,
+ 0x77,0xdd,0xf5,0xff,0xff,0xff,0xff,0xee,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf7,0xff,0xfd,0xff,0xff,0xeb,0xff,0x6d,0xf5,0xff,0xbb,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xbf,0xae,0xd6,0x6a,0xab,0xd6,0xd6,0xf6,0xff,0xff,
+ 0xff,0xff,0xff,0x3f,0xdf,0xfb,0xef,0x6d,0xff,0xfe,0xf5,0xff,0xff,0xff,0xff,
+ 0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xfb,0xf7,0xff,
+ 0xbf,0xd6,0xff,0xdf,0xf6,0x7f,0xdf,0x7a,0xff,0xff,0xff,0xff,0xff,0xff,0x75,
+ 0x5b,0xad,0x6d,0x6b,0xbb,0xfa,0xff,0xfe,0xff,0xff,0xff,0x6d,0xff,0xf7,0xae,
+ 0x7f,0xbf,0xfe,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xd6,0x5f,0xff,0xf7,0xd7,0xff,0xef,
+ 0xf5,0xff,0xff,0xff,0xff,0xff,0xbf,0xaa,0xea,0x56,0xb5,0x5d,0x55,0xed,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0xfe,0xeb,0xbf,0xff,0x7e,0xfd,0xfb,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x57,0xb7,0xff,0xae,0xd7,0xef,0xb3,0xeb,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xdb,0x56,0x75,0xab,0x6a,0xeb,0xf6,0xff,0xff,0xff,0xff,0xfb,0xff,0xbd,0xf7,
+ 0x7f,0x7f,0xfb,0xee,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0x5f,0xff,0xd3,0xaf,0xff,
+ 0xec,0xef,0xff,0xf7,0xff,0xff,0xff,0xff,0x6d,0xb5,0xad,0x5d,0xab,0x5d,0xfb,
+ 0xff,0xff,0xff,0xb7,0xff,0xff,0xfa,0xdf,0xbd,0xee,0xfd,0xfd,0xdb,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xbf,0xeb,0x7f,0xef,0x7a,0xbf,0xff,0xf5,0xd7,0xfb,0xff,0xff,0xfd,0xff,
+ 0xff,0xaa,0xdb,0xb6,0xaa,0xb5,0xaa,0xea,0xff,0xff,0xff,0xfd,0xef,0xff,0x7b,
+ 0xd7,0xff,0x7e,0xed,0xdb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfa,0x5f,0xff,0xfa,0xaf,
+ 0x7f,0x7d,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0x5b,0x55,0x55,0xdb,0xae,0xb5,
+ 0xed,0xff,0xff,0xff,0xaa,0xbe,0xdf,0xf5,0xef,0x77,0xfd,0xbb,0xfd,0xef,0xff,
+ 0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf5,0x7f,0xff,0xfd,0xbf,0x77,0xfd,0xdf,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xec,0xda,0xb6,0x6d,0xd5,0x5a,0xf5,0xff,0xf7,0xff,0xad,0xf5,0xfd,
+ 0xf7,0xbe,0xff,0xfd,0xfb,0x77,0xb7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0x7f,0xff,0xfd,
+ 0xbb,0xff,0xfe,0xd7,0xff,0xff,0xfd,0xff,0xff,0xff,0x57,0x6d,0xdb,0xaa,0x6d,
+ 0x6d,0x6b,0xff,0xbf,0xbf,0xd6,0xaa,0xf6,0xef,0xaf,0x7f,0xdd,0xf5,0xf3,0xd7,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xfb,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfd,0x5f,0x6f,0xfd,0x9f,0x7f,0xff,0xaf,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xab,0xab,0xaa,0xb6,0xb6,0xab,0xda,0xff,0xff,0xff,0x6a,0x5d,
+ 0x2b,0xb5,0xbf,0xdf,0xfd,0xfa,0xee,0xdf,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,
+ 0xff,0x7f,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0x7b,0xff,
+ 0xfe,0xdf,0xbf,0xfe,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xb5,0x6d,0xd5,
+ 0xaa,0xda,0xed,0xff,0xff,0x5f,0x5b,0x6b,0xdd,0xee,0xbf,0x7f,0xfe,0xfb,0xeb,
+ 0xab,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xfa,0x7f,0x7f,0xfd,0x5f,0xf7,0xfe,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x57,0x5b,0xb5,0x5b,0x5b,0x6d,0xd5,0xfe,0xff,0x5f,0xad,
+ 0xb5,0xaa,0x35,0xe9,0x7d,0xf7,0xec,0x6b,0xd7,0xff,0xff,0xff,0xff,0xff,0xfd,
+ 0xff,0xff,0xff,0xff,0x7d,0xff,0xff,0xff,0xff,0xff,0xfe,0xfb,0xdf,0xfb,0x3f,
+ 0xff,0xfe,0xbf,0x7f,0xff,0xaf,0xdf,0xff,0xff,0xff,0xff,0xff,0xab,0xd5,0x56,
+ 0x6d,0xad,0xab,0xb6,0xf7,0xff,0xef,0xd6,0xd6,0xdb,0xd6,0xb6,0xfe,0xbe,0xfd,
+ 0xf7,0xdf,0xff,0xff,0xff,0xff,0xff,0xef,0xfb,0xff,0xff,0xff,0xcb,0xfe,0xdf,
+ 0x7f,0xff,0xff,0xf7,0xbf,0xff,0xfb,0xbf,0x7f,0xfd,0xbb,0xbf,0xfe,0xde,0xff,
+ 0xfb,0xff,0xfd,0xff,0xff,0x77,0x6d,0xb5,0xaa,0x75,0xb5,0xd5,0xff,0xff,0x37,
+ 0xbb,0x5a,0xad,0x5a,0xab,0xaa,0xff,0xfe,0xd4,0xd3,0xff,0xff,0xdf,0xfb,0xff,
+ 0xff,0xff,0xff,0xfe,0xff,0xab,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xf9,
+ 0xbb,0xfe,0xfd,0xaf,0xff,0xfe,0xaf,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xb6,
+ 0xdb,0xb6,0xaa,0xda,0x5a,0xff,0xff,0xd7,0x55,0xab,0x6a,0xab,0xb5,0x55,0xf5,
+ 0xb7,0xfb,0xeb,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0x37,0xa8,0xff,
+ 0xff,0xfe,0xff,0xfe,0xff,0xff,0xff,0xfd,0x7f,0xff,0xfe,0xbf,0xbf,0xfe,0xef,
+ 0xff,0xff,0xfb,0xff,0xff,0xff,0xbf,0x55,0x6d,0xab,0x6d,0x57,0x6d,0xff,0xff,
+ 0x5b,0xad,0xdd,0xb6,0xda,0xda,0xba,0x55,0xfd,0xfc,0xf4,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x5d,0x57,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,
+ 0xf5,0x7f,0xbf,0xfd,0xbf,0xf7,0xfe,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,
+ 0x6a,0x55,0xdd,0xb6,0xda,0xa6,0xff,0xff,0xab,0xd6,0x6a,0xab,0x6d,0x57,0x57,
+ 0xad,0xbd,0xf6,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xbf,0x45,0x41,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0x5f,0xff,0xfe,0x5f,0x7f,0xff,
+ 0xcf,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x5d,0xdb,0x6a,0x55,0x6b,0x5b,0xff,
+ 0xff,0xb5,0x75,0xab,0xda,0x56,0xb5,0xea,0xb6,0xbe,0x5e,0xfd,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0x5a,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xfb,0x7f,0x6f,0xfd,0xdd,0xbf,0xfe,0xbd,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xd6,0x6a,0xab,0xb6,0xad,0xca,0xfa,0x7f,0xda,0x56,0xb5,0x6d,0xb5,0xda,
+ 0xad,0x5a,0x7f,0x7f,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x15,
+ 0x55,0xed,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0x7b,0x7f,0xfd,0xbf,0xff,
+ 0xfe,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x6b,0xad,0x6d,0x5b,0xb5,0x6d,
+ 0xff,0xff,0xad,0x5a,0xdb,0x56,0x5b,0x57,0xb6,0xd5,0x7f,0xff,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x96,0xd2,0x4a,0xfe,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xfa,0x5f,0xff,0xfd,0xaf,0xbf,0xfe,0xdf,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0xb5,0xb6,0xb6,0xea,0x56,0xb5,0xfe,0x7f,0x6b,0xab,0xad,0x6a,0xad,
+ 0xb5,0xd5,0x6e,0xf7,0xfa,0xfe,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0x6f,0xa9,
+ 0x54,0x54,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0x7f,0xff,0xfe,0xbf,
+ 0xf7,0xfe,0xdf,0xff,0xf7,0xff,0xff,0xff,0xff,0x7f,0xdb,0x55,0xd5,0x56,0xdb,
+ 0xd6,0xf6,0x5f,0xad,0x75,0xd5,0xb6,0xd5,0xda,0x5a,0xd5,0xff,0xbe,0xfd,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x5d,0x55,0x55,0x53,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xfa,0x7f,0x7f,0xfd,0xbf,0x7f,0xff,0xaf,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x55,0x6d,0x5b,0xb5,0x6a,0x55,0xfd,0xbf,0xb5,0xae,0x6d,0x5b,
+ 0x6d,0x6b,0xad,0x75,0xbe,0xfb,0xfa,0xff,0xff,0xff,0x7f,0xff,0xff,0xfe,0x57,
+ 0x25,0xa5,0x2a,0xfd,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xfb,0x5f,0xf7,0xfe,
+ 0x9d,0xdf,0xfe,0xdf,0xfb,0xff,0x7f,0xff,0xff,0xff,0x7f,0xad,0xb6,0xad,0xad,
+ 0xad,0xad,0xfe,0xaf,0x56,0xb5,0x56,0xd5,0x56,0x55,0xd7,0xfa,0xfe,0xf9,0xdb,
+ 0xff,0xff,0xff,0xff,0xfd,0xfb,0x6f,0x49,0xa9,0x94,0x54,0xd9,0xff,0xff,0xff,
+ 0xfb,0xbf,0xef,0xdf,0xfb,0x7f,0xbf,0xfe,0xdf,0xbf,0xfe,0xdb,0xff,0xff,0xfd,
+ 0xff,0xff,0xff,0xff,0xf6,0xaa,0xea,0xd6,0xb6,0xb6,0xf5,0x6f,0x6b,0xab,0xb5,
+ 0x6d,0xbb,0xdd,0x6a,0xfd,0xfa,0xd7,0xf7,0xff,0xbf,0xff,0xff,0xf7,0xff,0x3f,
+ 0x35,0xaa,0xaa,0x4a,0xf5,0xff,0xfe,0xf7,0xff,0xff,0xbf,0xff,0xf9,0x7f,0xff,
+ 0xfe,0x7f,0xff,0xfe,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xdb,0xb6,
+ 0xba,0xaa,0xd5,0xfa,0xb7,0xba,0x6d,0xad,0x56,0xd5,0x6a,0xb5,0xfe,0xdd,0x7b,
+ 0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xa7,0xca,0xaa,0xaa,0x2a,0xf5,0xfe,0xf7,
+ 0xff,0xff,0xff,0xff,0xff,0xfd,0xbf,0xff,0xfe,0x9f,0x7f,0xff,0xdf,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x5b,0x6d,0x5b,0xab,0x6d,0x2d,0xef,0xd7,0x56,0xb5,
+ 0xd6,0xda,0x56,0xad,0xdb,0xfe,0xfb,0xeb,0xed,0xff,0xff,0xf7,0xff,0xff,0xdf,
+ 0x54,0x29,0x95,0x4a,0xa9,0xd4,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xfd,0x77,
+ 0xdf,0xfe,0x7f,0xdf,0xfe,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd5,0xaa,
+ 0xaa,0xd5,0xb6,0xb6,0xfa,0x59,0xdb,0x56,0x6b,0x6b,0xdb,0x56,0x6d,0xfb,0xfb,
+ 0xf6,0xd7,0xff,0xff,0xbf,0xff,0xff,0x7f,0x4a,0xa5,0x52,0xa9,0xaa,0xea,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,0xbf,0xef,0xdb,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xb7,0x6d,0x5d,0x55,0xab,0xfd,0xae,0x6a,
+ 0xb5,0x5d,0xad,0x6a,0xdb,0xaa,0xff,0xfa,0xf5,0xdf,0xff,0xff,0xff,0xff,0xff,
+ 0x8b,0xaa,0xaa,0x4a,0x55,0xaa,0xea,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xb7,
+ 0xaa,0x56,0xab,0xed,0xda,0xfa,0xd5,0xad,0xdb,0xaa,0xb5,0xad,0x6a,0xed,0xee,
+ 0xed,0xf7,0xaf,0xff,0xff,0xff,0xff,0xff,0xb5,0x52,0x55,0x55,0x4a,0x49,0x69,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0xdb,0xda,0xda,0x56,0xad,0xf6,0x6a,
+ 0x56,0xad,0xd6,0xd6,0xb6,0xad,0xf6,0xff,0xfa,0xf5,0xd7,0xff,0xff,0xff,0xff,
+ 0x7f,0x4a,0x95,0x94,0x54,0xa9,0x2a,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
+ 0x6f,0x6d,0x6b,0x6b,0xb5,0xd6,0x7a,0xb7,0x6b,0xd5,0xba,0x5a,0xd5,0xd6,0xf5,
+ 0xfe,0xfe,0x7a,0xdf,0xff,0xff,0xff,0xff,0xbf,0xaa,0xaa,0xaa,0x52,0x55,0x55,
+ 0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xb7,0xaa,0x5a,0x55,0x5b,0x6b,0xb5,
+ 0x5a,0xb5,0x6d,0x55,0xab,0xad,0x5a,0xbd,0x7f,0xfd,0xfb,0xd7,0xff,0xff,0xff,
+ 0xff,0xbf,0xa2,0x54,0xa5,0x4a,0x95,0xaa,0xa4,0xff,0xdf,0xdf,0xfb,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0xdb,0xd6,0x6e,0xed,0x5d,0x7b,0xab,0xad,0x56,0xb7,0xb5,0xb6,0xb5,
+ 0xfe,0x7f,0xb7,0xfc,0xeb,0xff,0xff,0xff,0xff,0x7f,0x95,0x92,0x94,0xaa,0xaa,
+ 0xa4,0xaa,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x7f,0x6d,0x6b,0xb5,0x55,0xaa,
+ 0xac,0xb5,0xd6,0xda,0x5a,0xdd,0xda,0x56,0xbf,0x7f,0xff,0xfd,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0x5a,0x55,0x55,0x55,0x52,0x95,0xaa,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf7,0xff,0xf7,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x9f,0x55,0xb5,0x56,0xad,0xdb,0xb5,0xda,0x6a,0x6b,0xeb,0x66,0x55,
+ 0xdb,0xdf,0x7f,0x7f,0xbe,0xf3,0xff,0xff,0xff,0xff,0x7f,0x54,0x55,0x55,0xaa,
+ 0x2a,0x55,0x52,0xfd,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6a,0x5b,0xdb,0x76,
+ 0x6d,0xd2,0x56,0xbb,0x5a,0x55,0xbb,0x6d,0x6d,0xff,0xbb,0xff,0xfe,0xfb,0xff,
+ 0xff,0xff,0xff,0xff,0xa5,0xa4,0x52,0x49,0xa9,0xaa,0x2a,0xff,0xff,0xff,0xff,
+ 0xf7,0xef,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xbf,0xb6,0xd5,0x6a,0xab,0xaa,0x5b,0x6b,0xcd,0xd6,0xb6,0xaa,
+ 0xaa,0xd5,0xff,0xdf,0x6f,0xff,0xfa,0xff,0xff,0xbf,0xff,0xff,0x55,0x55,0xaa,
+ 0x2a,0x55,0xa9,0xaa,0xfa,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
+ 0xef,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xab,0x6e,0xad,
+ 0x5a,0x5b,0xad,0xb5,0x75,0x5b,0xab,0x6d,0xb7,0xf6,0xef,0xff,0xbf,0xff,0xfd,
+ 0xff,0xef,0xff,0xff,0xff,0xaa,0xaa,0x4a,0x55,0x25,0x55,0xa5,0xde,0xff,0xff,
+ 0xff,0xff,0xff,0x6b,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,
+ 0xfb,0xff,0xff,0xff,0xff,0x5d,0xb5,0x6b,0xab,0xad,0xd5,0xda,0xaa,0x6a,0x6d,
+ 0xb5,0x5a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x25,0x49,
+ 0x55,0xaa,0xaa,0x92,0x54,0xfd,0xff,0xff,0xff,0xff,0x7f,0xd9,0xd5,0xbf,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xaa,0x55,
+ 0xb5,0x75,0xd5,0x76,0xad,0xae,0xad,0xb5,0x56,0xab,0xfb,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x55,0x52,0x49,0xa9,0xaa,0x52,0xfd,0xbf,
+ 0xff,0xff,0xff,0x7f,0x50,0x7f,0xfb,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,
+ 0xf7,0xff,0xff,0xff,0xff,0xff,0x77,0xad,0xad,0x5a,0xbb,0xaa,0xb6,0xb5,0xb6,
+ 0xae,0xb5,0x6d,0xfd,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xab,
+ 0xaa,0xaa,0x2a,0x55,0xaa,0x2a,0xfd,0xff,0xff,0xff,0xff,0xff,0x00,0xd0,0xfe,
+ 0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,
+ 0xb6,0xb6,0xad,0xd5,0xb6,0xd5,0xd6,0x5a,0xd5,0x5a,0xb5,0xfe,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0x57,0x49,0x95,0xaa,0x4a,0x95,0xaa,0xea,
+ 0xff,0xff,0xff,0xff,0xff,0x02,0x00,0xd1,0xee,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xda,0x55,0xd5,0xd6,0x5a,0xdb,0xaa,0x5a,
+ 0xab,0x6b,0xad,0xad,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xab,0xaa,0x52,0x55,0xa9,0x52,0x95,0xfa,0xff,0xff,0xff,0xdf,0xff,0x88,0x04,
+ 0x00,0x75,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xad,0xda,0xad,0x6a,0x6d,0x55,0x6f,0x6b,0x75,0xb5,0xd6,0x6a,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0x57,0x55,0x2a,0x49,0x55,0x55,0x52,
+ 0xf9,0xff,0xfd,0xff,0xff,0xff,0x01,0x20,0x08,0x80,0xda,0xfa,0xff,0xff,0x7f,
+ 0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0x6b,0x6d,0x76,0x5b,0xab,0x6d,0xb5,
+ 0xb5,0xad,0x5d,0xbb,0xb6,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x4f,0xa5,0xaa,0xaa,0x4a,0x4a,0x55,0xd5,0xff,0xf7,0xff,0xff,0xff,0x21,
+ 0x84,0x42,0x00,0x50,0xaf,0xdd,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xb7,0xab,0x95,0xad,0xb5,0xb6,0xaa,0xda,0xb6,0xaa,0x55,0xeb,0xff,0xff,
+ 0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0x55,0xa5,0xaa,0x54,0xa9,
+ 0x2a,0x75,0xff,0xdf,0xdf,0xff,0xff,0x03,0x01,0x00,0x12,0x00,0xe8,0xf7,0xfe,
+ 0xff,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x5b,0x6d,0x6d,0xd5,0x5a,0x55,
+ 0xdb,0x56,0xd5,0xd6,0xb6,0xf5,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0x95,0x94,0x94,0xaa,0xaa,0xa4,0xea,0xff,0x7f,0xff,0xff,0xff,
+ 0x03,0x24,0x48,0x00,0x01,0x00,0xda,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x6f,0xb5,0xb6,0x6d,0xed,0xb6,0x6d,0x6b,0x5b,0xbb,0x5a,0xfd,0xff,
+ 0xff,0xff,0xfb,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xbf,0xaa,0xaa,0xaa,0x52,
+ 0x95,0xaa,0xb4,0xff,0xff,0xff,0xff,0xff,0x27,0x00,0x02,0x49,0x04,0x00,0x40,
+ 0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xab,0xd5,0xb6,0x56,
+ 0x5b,0x55,0xad,0x6d,0x55,0x6b,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x5f,0xa5,0xaa,0x52,0x95,0x54,0x55,0xe5,0xff,0xff,0xff,0xff,
+ 0xff,0x07,0x91,0x10,0x00,0x20,0x01,0x00,0xfc,0xff,0xff,0xff,0xdf,0xff,0xff,
+ 0xff,0xff,0xff,0x57,0xd5,0x5a,0xd5,0xb5,0xea,0xb6,0xb5,0xaa,0x6d,0xad,0xfd,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x2a,0x55,0x4a,
+ 0xaa,0x52,0x29,0xd5,0xfe,0xff,0xff,0xff,0xff,0x07,0x04,0x40,0x12,0x01,0x04,
+ 0x00,0xd4,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x5d,0xab,0xad,
+ 0xd6,0x56,0xdb,0xd6,0xb6,0xb6,0x6a,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,
+ 0xbf,0xff,0xff,0xff,0x7f,0x55,0x49,0x55,0xa5,0x2a,0xa5,0xaa,0xff,0xff,0xff,
+ 0xff,0xff,0x4f,0x40,0x04,0x00,0x48,0x20,0x48,0xfc,0xff,0xff,0xff,0xff,0xff,
+ 0xfe,0xff,0xff,0xff,0xdf,0x6a,0xb5,0xb6,0x5a,0x5b,0x55,0xab,0x5a,0x55,0xb7,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0x7f,0x55,0x55,
+ 0x55,0x55,0x55,0x55,0xa5,0xff,0xff,0xff,0xff,0xff,0x0f,0x08,0x21,0x24,0x01,
+ 0x04,0x01,0xf8,0xff,0xff,0xff,0x6f,0xff,0xff,0xff,0xff,0xff,0xbf,0x56,0xdb,
+ 0x5a,0x6b,0xad,0x6d,0x75,0xeb,0xb6,0xd5,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xbf,0x94,0x2a,0xa9,0x54,0x4a,0x55,0xaa,0xfe,0xff,
+ 0xff,0xfe,0xff,0x1f,0x01,0x04,0x01,0x90,0x20,0x84,0xf4,0xff,0xff,0xff,0xf5,
+ 0xed,0xff,0xff,0xff,0xff,0xbf,0xb5,0x55,0xd5,0xad,0x75,0xb5,0xae,0x55,0xdb,
+ 0xda,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,
+ 0x54,0x95,0x4a,0x55,0x4a,0xa9,0xff,0xff,0xff,0xff,0xff,0x1f,0x24,0x10,0x90,
+ 0x04,0x02,0x20,0xd8,0xff,0xff,0xff,0x01,0xbf,0xf7,0xff,0xff,0xff,0xff,0xda,
+ 0xb6,0x5b,0xb5,0xaa,0xab,0xb5,0xba,0xaa,0xf6,0xff,0xff,0xfd,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf7,0xff,0xff,0x7f,0x55,0xa5,0x52,0xaa,0x52,0x55,0x55,0xfd,
+ 0xff,0xff,0xff,0xff,0x1f,0x80,0x40,0x02,0x20,0x48,0x02,0xf8,0xff,0xff,0xff,
+ 0x20,0xd0,0xda,0xfe,0xff,0xff,0x7f,0xad,0x5a,0x6d,0x5b,0x5b,0xdd,0x56,0x57,
+ 0xdb,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x2a,0x95,0xaa,0x52,0x4a,0xa9,0x4a,0xff,0xff,0xff,0xff,0xff,0xbf,0x10,0x04,
+ 0x48,0x82,0x00,0x10,0xf1,0xff,0xff,0xff,0x00,0x00,0xb5,0xf7,0xff,0xbf,0xbf,
+ 0xb6,0xd6,0xaa,0xd5,0xd5,0xaa,0xda,0xaa,0x6d,0xfd,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xa9,0x54,0xaa,0xaa,0x2a,0x55,0x2a,
+ 0xfd,0xff,0xff,0xff,0xff,0x3f,0x80,0x40,0x00,0x08,0x92,0x04,0xd8,0xfb,0xff,
+ 0x7f,0x08,0x00,0x00,0x5a,0xff,0xff,0xfd,0x55,0x6b,0x5b,0x6d,0x6e,0x6b,0x6b,
+ 0xdd,0xaa,0xfe,0xff,0xff,0xff,0xdb,0xfe,0x7f,0xf3,0xf7,0xff,0xff,0xff,0xff,
+ 0xff,0x55,0x55,0x49,0x95,0xaa,0x4a,0xa9,0xf6,0xff,0xfe,0xff,0xff,0x7f,0x09,
+ 0x08,0x84,0x20,0x00,0x40,0xf0,0xbf,0xff,0x5f,0x00,0x00,0x00,0x40,0x69,0xff,
+ 0xff,0xda,0x5a,0xed,0xb6,0x55,0xb5,0x55,0x6b,0x6d,0xff,0xff,0xff,0x6f,0x7f,
+ 0xd5,0xff,0x7f,0xfb,0xff,0xff,0xff,0xff,0xff,0xab,0x52,0x55,0x52,0xa9,0x54,
+ 0xa5,0xfe,0xff,0xff,0xff,0xff,0x7f,0x40,0x22,0x11,0x02,0x21,0x12,0xe1,0xff,
+ 0xfe,0x3f,0x02,0x00,0x40,0x00,0xa0,0xfd,0xff,0x6d,0xab,0x55,0xd5,0xda,0xae,
+ 0xba,0xad,0xb5,0xff,0xff,0xff,0xff,0xff,0xab,0xec,0xe5,0xf5,0xff,0xff,0xff,
+ 0xff,0xff,0xa7,0x4a,0x55,0x55,0xa5,0xaa,0xaa,0xfa,0xff,0xff,0xff,0xff,0xff,
+ 0x04,0x00,0x00,0x08,0x84,0x00,0xe0,0xff,0xff,0x1f,0x50,0x08,0x00,0x02,0x02,
+ 0xe0,0xff,0x86,0xda,0x5a,0x5b,0x6d,0xd5,0x56,0xb5,0xaa,0xff,0xff,0xff,0xff,
+ 0xff,0xf7,0xfe,0xb7,0xfa,0xff,0xff,0xff,0xff,0xff,0xab,0xaa,0xaa,0x2a,0x95,
+ 0x92,0x2a,0xed,0xff,0xf7,0xff,0xff,0xff,0x20,0x11,0x91,0x40,0x00,0x22,0xb2,
+ 0xff,0xf7,0x1f,0x02,0x41,0x04,0x10,0x08,0x00,0xfc,0x7b,0x6b,0xad,0xd5,0x56,
+ 0x6b,0xdb,0xd6,0xdd,0xff,0xff,0xff,0xfd,0xff,0xde,0xbb,0x55,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xab,0xaa,0x24,0x55,0x55,0x55,0xaa,0xfa,0xff,0x7f,0xff,0xff,
+ 0xff,0x00,0x00,0x04,0x10,0x24,0x08,0xe0,0xff,0xff,0x4f,0x08,0x08,0x10,0x40,
+ 0x20,0x05,0x80,0x4a,0xad,0x76,0x6d,0xb5,0xb5,0x6a,0xab,0xea,0xff,0xff,0xff,
+ 0xbf,0xef,0xff,0x5f,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x94,0xaa,0xa4,
+ 0xaa,0x54,0xa5,0xf4,0xff,0xff,0xff,0xff,0xff,0x09,0x49,0x40,0x02,0x01,0x80,
+ 0xe0,0xff,0xff,0x07,0x80,0x20,0x81,0x00,0x00,0x90,0x00,0xf0,0x6a,0xab,0xb6,
+ 0xd6,0xae,0xad,0xba,0xf6,0xff,0xff,0xff,0xff,0xff,0xff,0xae,0xaa,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x47,0x53,0x55,0x95,0xa4,0x52,0x95,0xda,0xfe,0xff,0xff,
+ 0xff,0xff,0x21,0x00,0x11,0x48,0x48,0x22,0x80,0xff,0xff,0x03,0x22,0x02,0x08,
+ 0x04,0x00,0x00,0x04,0x28,0xb7,0xb5,0x55,0x5b,0xd5,0xd6,0x56,0xfb,0xff,0xff,
+ 0xdf,0xff,0xff,0xff,0x57,0xfd,0xff,0xff,0xfb,0xff,0xff,0xff,0xbf,0x54,0x4a,
+ 0x55,0x95,0xaa,0x54,0xf5,0xff,0xff,0xff,0xff,0xff,0x03,0x12,0x04,0x01,0x00,
+ 0x00,0xe5,0xff,0xff,0x43,0x00,0x10,0x41,0x90,0x44,0x00,0x40,0xdc,0xaa,0xd6,
+ 0xb6,0xd5,0xb6,0x6a,0xab,0xfd,0xff,0xff,0xff,0xfd,0xfd,0x7f,0xeb,0xff,0xff,
+ 0xff,0xef,0xff,0xff,0xff,0x4f,0x55,0xa9,0x54,0x55,0x95,0xaa,0xea,0xff,0xff,
+ 0xff,0xff,0xff,0x43,0x40,0x20,0x90,0x44,0x12,0x40,0xff,0xff,0x03,0x11,0x41,
+ 0x08,0x01,0x00,0x22,0x10,0x56,0xdb,0xaa,0x5a,0x6d,0x5b,0x5b,0xdd,0xfe,0xff,
+ 0xff,0xfb,0xff,0xff,0xee,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xa5,
+ 0xaa,0xaa,0x54,0xaa,0x52,0xe9,0xff,0xff,0xff,0xff,0xff,0x03,0x02,0x01,0x02,
+ 0x10,0x40,0xc0,0xff,0xff,0x10,0x04,0x04,0x20,0x88,0x24,0x80,0x00,0x6b,0xad,
+ 0x76,0xeb,0xb6,0xaa,0xad,0x6a,0xff,0xff,0xff,0xff,0xef,0xef,0xff,0xfa,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x55,0x95,0x92,0x52,0xa5,0x4a,0xaa,0xff,
+ 0xff,0xff,0xff,0xff,0x0f,0x10,0x90,0x20,0x01,0x09,0x82,0xff,0xff,0x00,0x40,
+ 0x20,0x82,0x20,0x00,0x09,0x02,0xad,0xd5,0x9a,0x55,0xab,0x6d,0x75,0xab,0xff,
+ 0xff,0x7f,0xdf,0xbf,0xff,0x3f,0xf5,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0x5f,
+ 0x95,0x52,0xaa,0x4a,0x55,0xaa,0xea,0xff,0xff,0xff,0xff,0xff,0x27,0x41,0x04,
+ 0x04,0x24,0x20,0x88,0xfe,0xff,0x88,0x08,0x82,0x08,0x02,0x49,0x20,0xa0,0x55,
+ 0x6d,0x6b,0x5d,0xb5,0x56,0xab,0xb5,0xff,0xff,0xff,0xf5,0xff,0xff,0x57,0xfd,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0x55,0x55,0x55,0x52,0x55,0xd5,
+ 0xff,0xff,0xff,0xff,0xff,0x0f,0x04,0x41,0x40,0x00,0x81,0x80,0xff,0x7f,0x02,
+ 0x20,0x08,0x00,0x08,0x00,0x84,0x84,0xb6,0xb5,0x5a,0x6b,0xdb,0xba,0x5d,0xed,
+ 0xff,0xff,0x6d,0xeb,0xfe,0xff,0xaf,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x3f,0x55,0xaa,0xaa,0xaa,0x4a,0xa9,0x52,0xff,0xff,0xff,0xff,0xff,0x0f,0x10,
+ 0x08,0x09,0x11,0x08,0xa2,0xfe,0x3f,0x48,0x80,0x20,0x91,0x40,0x24,0x01,0xe0,
+ 0xda,0xaa,0xad,0xad,0x55,0x55,0xd5,0xf6,0xff,0xff,0x5f,0xfd,0xff,0x7e,0xd7,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,0x95,0x24,0xa5,0xaa,0x4a,
+ 0xca,0xf6,0xff,0xff,0xff,0xff,0x2f,0x81,0x00,0x00,0x80,0x00,0x80,0xff,0x1f,
+ 0x00,0x05,0x02,0x04,0x08,0x01,0x20,0x50,0x55,0xb7,0x6a,0xb5,0xb6,0xdb,0xb6,
+ 0xfa,0xff,0xff,0x6f,0xff,0xff,0xfb,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0x29,0xa9,0xaa,0x2a,0x55,0xaa,0xaa,0xff,0xbf,0xff,0xff,0xff,0x1f,
+ 0x04,0x92,0x48,0x12,0x48,0x08,0xfe,0x3f,0x00,0x00,0x00,0x20,0x21,0x10,0x09,
+ 0xb9,0xad,0xda,0xb6,0xd6,0x5a,0xad,0x5a,0xfd,0xff,0x7f,0xd3,0xff,0xff,0xff,
+ 0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0x55,0x95,0x54,0x49,
+ 0x55,0x55,0x7f,0xff,0xff,0xff,0xff,0x1f,0x20,0x00,0x02,0x40,0x02,0x01,0xfb,
+ 0x8f,0x04,0x20,0x28,0x01,0x00,0x42,0x00,0xcc,0x76,0x55,0xd5,0x5a,0xab,0x75,
+ 0x6b,0xf6,0xff,0xff,0xed,0xff,0xff,0xbf,0xad,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x55,0x25,0xa9,0xaa,0xaa,0x92,0x52,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0x80,0x24,0x48,0x04,0x00,0x00,0xff,0x0f,0x40,0x84,0x00,0x90,0x44,0x00,
+ 0x22,0xb4,0xaa,0x6d,0x5b,0x6b,0xdd,0xaa,0xad,0xfa,0xff,0xf7,0xf5,0xff,0xfb,
+ 0xff,0x7e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0x54,0xa5,0x92,
+ 0x2a,0x55,0x4a,0xfd,0xff,0xff,0xff,0xff,0x3f,0x08,0x80,0x00,0x41,0x24,0x24,
+ 0xfe,0x07,0x02,0x00,0x02,0x02,0x00,0x12,0x80,0x54,0xab,0xb6,0x6d,0xad,0x65,
+ 0x5b,0xd5,0xf4,0xff,0x7f,0xf5,0xff,0xff,0xdf,0x5e,0xff,0xfd,0xff,0xff,0xef,
+ 0xff,0xff,0xff,0xff,0x54,0x55,0x55,0x55,0xa9,0xaa,0xaa,0xfa,0xff,0xff,0xff,
+ 0xff,0x3f,0x42,0x08,0x10,0x10,0x80,0x00,0xfb,0x47,0x10,0x10,0x48,0x88,0x24,
+ 0x80,0x04,0x6f,0xdd,0xaa,0xaa,0xd5,0x5a,0xd5,0x76,0xee,0xff,0xbf,0xfa,0xff,
+ 0xff,0x7f,0x7b,0xfd,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xab,0x2a,0x95,
+ 0x54,0xa5,0x52,0x55,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x21,0x02,0x02,0x02,
+ 0x08,0xfe,0x03,0x40,0x02,0x00,0x00,0x00,0x11,0x10,0x95,0x6a,0xb5,0xb5,0x6e,
+ 0xd7,0x6e,0xab,0xf5,0xff,0x77,0xfd,0xff,0xff,0x7f,0xff,0xfe,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x53,0xa5,0xaa,0x92,0x2a,0x95,0x92,0xfc,0xff,0xff,
+ 0xff,0xff,0xff,0x10,0x80,0x48,0x40,0x10,0x20,0xfc,0x21,0x00,0x40,0x20,0x42,
+ 0x24,0x44,0xc0,0xda,0x55,0xd7,0x5a,0x55,0x6d,0x55,0xb5,0xd8,0xff,0x4f,0xff,
+ 0xfb,0xff,0x77,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0xaa,
+ 0x54,0x55,0xaa,0x54,0x55,0xf5,0xff,0xff,0xff,0xff,0xff,0x00,0x09,0x00,0x08,
+ 0x00,0x01,0xf6,0x01,0x02,0x00,0x02,0x10,0x01,0x00,0xa1,0xa5,0xda,0x5a,0xed,
+ 0xb6,0xb5,0x6d,0x5b,0xeb,0xff,0xff,0xff,0xff,0xff,0x5f,0xdf,0xfb,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x53,0xa9,0x4a,0x55,0xa9,0xaa,0x54,0xfd,0xff,
+ 0xff,0xff,0xff,0xff,0x24,0x20,0x22,0x21,0x02,0x40,0xfc,0x20,0x00,0x08,0x80,
+ 0x00,0x48,0x02,0xc4,0xda,0x6e,0xd5,0x56,0xd5,0xaa,0xb6,0xd5,0xb2,0x7f,0xd3,
+ 0xff,0xff,0xff,0x7f,0x7f,0xfe,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xaf,
+ 0x4a,0xa9,0x54,0x95,0x92,0x92,0xea,0xef,0xff,0xff,0xff,0xff,0x00,0x02,0x08,
+ 0x00,0x20,0x08,0xfc,0x04,0x88,0x20,0x08,0x02,0x00,0x20,0x70,0xad,0xaa,0x6e,
+ 0x55,0x5b,0xdd,0xaa,0x6e,0xd5,0xff,0xfb,0xff,0xff,0xf7,0xbf,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x2a,0xa5,0x4a,0x55,0x55,0x55,0xfa,
+ 0xbf,0xff,0xff,0xff,0xff,0x01,0x88,0x40,0x84,0x80,0x20,0x7c,0x10,0x00,0x80,
+ 0x00,0x20,0x21,0x09,0xa8,0x6a,0x6b,0xb3,0xb6,0xd5,0x66,0x6d,0x55,0x6b,0xff,
+ 0xfd,0xff,0xff,0xff,0xab,0xef,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xaf,0x54,0x95,0xaa,0xaa,0x54,0x55,0xd5,0xff,0xff,0xff,0xff,0xfd,0x93,0x20,
+ 0x02,0x00,0x04,0x00,0x78,0x40,0x00,0x00,0x40,0x08,0x04,0x00,0x55,0xb5,0xb5,
+ 0x5d,0x5b,0x6d,0xbb,0xb6,0xb6,0xa5,0xdf,0xfd,0xff,0xff,0xff,0xdf,0x7f,0xff,
+ 0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xaf,0x52,0x55,0xa5,0xa4,0xaa,0x54,
+ 0xf5,0xff,0xff,0xff,0xff,0xff,0x03,0x02,0x10,0x11,0x00,0x00,0x39,0x01,0x01,
+ 0x02,0x04,0x00,0x40,0x10,0xba,0x56,0xad,0xaa,0xd5,0xb6,0xaa,0x55,0x5b,0x6d,
+ 0xff,0xfe,0xff,0xff,0xff,0xee,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xaf,0x4a,0x55,0x2a,0x95,0x92,0x92,0xb2,0xff,0xff,0xff,0xff,0xff,0x03,
+ 0x08,0x01,0x00,0x21,0x44,0x18,0x04,0x20,0x00,0x00,0x81,0x04,0x02,0x2d,0xab,
+ 0xb5,0xd5,0xb6,0xaa,0x6d,0xed,0xea,0x96,0xfe,0xfe,0xff,0xf7,0xff,0xe7,0x7f,
+ 0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x55,0x52,0x55,0x55,0x55,
+ 0x55,0xea,0xff,0xff,0xff,0xff,0xff,0x2a,0x40,0x48,0x04,0x00,0x00,0x18,0x00,
+ 0x00,0x40,0x00,0x10,0x10,0x20,0xa5,0xb5,0xaa,0xb6,0x5a,0x5b,0xb5,0x56,0xad,
+ 0x6a,0xbf,0xff,0xf7,0xff,0xff,0xfb,0x6f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0xa9,0x4a,0xa9,0x52,0xaa,0xaa,0xaa,0xff,0xff,0xff,0xff,0x5f,
+ 0x82,0x00,0x01,0x40,0x88,0x00,0x92,0x00,0x00,0x04,0x24,0x40,0x80,0x80,0xdb,
+ 0xda,0xd6,0x5a,0xab,0xed,0xd6,0xb5,0xb6,0x95,0xfd,0xfe,0xff,0xff,0xff,0xf7,
+ 0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xaa,0xaa,0x4a,0x55,
+ 0x25,0x55,0xd5,0xff,0xff,0xff,0xff,0x4b,0x05,0x12,0x44,0x04,0x00,0x80,0x00,
+ 0x02,0x08,0x00,0x00,0x02,0x02,0x44,0xa5,0x56,0xbb,0xd6,0xda,0x2a,0xab,0xda,
+ 0xd5,0x2e,0x7d,0xff,0xff,0xff,0xff,0xfa,0xbf,0xf7,0xff,0xff,0xff,0xff,0xfd,
+ 0xff,0xff,0xff,0xbf,0x4a,0x2a,0x55,0xaa,0xaa,0xa4,0xd4,0xff,0xff,0xff,0xff,
+ 0xaa,0x0a,0x00,0x10,0x10,0x00,0x08,0x10,0x80,0x40,0x10,0x00,0x08,0x20,0xa0,
+ 0xda,0x6a,0x55,0x5b,0x6b,0xd5,0xb5,0xad,0xaa,0xb2,0xfb,0xff,0xff,0xff,0xd6,
+ 0xfd,0xde,0xdf,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0x7f,0x55,0xa9,0x52,
+ 0x95,0x54,0x95,0xaa,0xfe,0xfd,0xff,0x1f,0x2a,0x05,0x90,0x40,0x40,0x02,0x00,
+ 0x02,0x08,0x00,0x40,0x10,0x00,0x81,0x70,0x53,0xad,0xd6,0x6a,0xad,0xb6,0xda,
+ 0xb6,0xbd,0x5d,0x6d,0xff,0xff,0xff,0xfb,0xdd,0xba,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0x54,0xa5,0x4a,0xa9,0x52,0x55,0xa5,0xff,0xff,0xff,
+ 0xc5,0x0a,0x2a,0x01,0x02,0x01,0x20,0x01,0x00,0x00,0x00,0x00,0x40,0x10,0x04,
+ 0x54,0xd9,0xd6,0x5a,0xad,0x6a,0xdb,0x56,0xd5,0xd6,0x56,0xfa,0xf7,0xff,0xff,
+ 0x7f,0xfd,0xaf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x52,0x55,
+ 0x2a,0x55,0x95,0xaa,0xaa,0xff,0xff,0xdf,0xb5,0x52,0x0a,0x20,0x00,0x04,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x10,0xa8,0x56,0x6b,0x6b,0x6b,0xb7,0x55,
+ 0x6b,0xab,0xaa,0x6a,0xf7,0xff,0xff,0xbf,0xfd,0xfe,0xaf,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x8a,0xaa,0xaa,0x24,0x55,0x92,0x54,0xfd,0xff,
+ 0x3d,0x4a,0xa8,0x14,0x82,0x10,0x80,0x00,0x20,0x40,0x00,0x84,0x00,0x00,0x41,
+ 0x00,0x5a,0xb5,0x5a,0xad,0xb5,0xaa,0x6a,0xad,0x6d,0x6b,0xad,0xfa,0xff,0xff,
+ 0xff,0x77,0xef,0xf5,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0x6a,
+ 0x49,0xa9,0xaa,0xaa,0xaa,0x4a,0xff,0xff,0xa7,0x29,0x56,0x55,0x00,0x04,0x00,
+ 0x04,0x00,0x04,0x20,0x00,0x02,0x00,0x00,0x40,0xaa,0x5a,0xad,0xb5,0xd6,0xb5,
+ 0xad,0xb5,0xb6,0xb5,0x56,0xea,0xbf,0xbf,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0x2a,0xa5,0xaa,0x52,0x55,0x55,0xff,
+ 0x6f,0x55,0xc5,0x2a,0x11,0x04,0x40,0x11,0x20,0x02,0x00,0x00,0x00,0x00,0x08,
+ 0x08,0x04,0x9b,0xaa,0xd5,0xd6,0xaa,0xda,0xb6,0xd6,0xaa,0x5a,0xbb,0xd5,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x25,0x55,0x55,0x55,0x2a,0x29,0xa9,0xfa,0xbf,0x52,0xb2,0xaa,0x55,0x40,0x02,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x00,0xa5,0xda,0xb6,0x5a,0x5d,
+ 0x57,0xd5,0xaa,0xb6,0xad,0xd5,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0x95,0xaa,0x2a,0x49,0x55,0x55,0x95,
+ 0x7e,0x4b,0x2a,0xad,0xaa,0x2a,0x01,0x10,0x82,0x00,0x20,0x00,0x01,0x00,0x40,
+ 0x80,0x00,0xd1,0x4e,0xad,0x5a,0x6b,0xeb,0x6a,0x5b,0xdd,0xda,0xd6,0x5a,0xd3,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,
+ 0xff,0xab,0x52,0xa9,0x2a,0xa5,0x4a,0x55,0xed,0xab,0x8a,0x54,0x55,0x51,0x08,
+ 0x01,0x00,0x00,0x80,0x00,0x80,0x08,0x00,0x00,0x10,0x40,0x73,0x6b,0x6b,0xad,
+ 0x55,0xb5,0x6a,0x6b,0xab,0xba,0xd6,0xba,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0x2a,0xa5,0xaa,0x54,0xa9,
+ 0x52,0x5d,0x54,0xe9,0x55,0x55,0xa5,0x00,0x20,0x10,0x44,0x00,0x04,0x00,0x00,
+ 0x00,0x00,0x40,0xb0,0x49,0x55,0xad,0xb5,0xb6,0xae,0xad,0x55,0xb5,0x55,0x6b,
+ 0xd5,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x97,0x54,0x55,0xa9,0x2a,0x55,0x2a,0xbd,0xaa,0x2a,0x55,0x55,0xa5,
+ 0x00,0x04,0x01,0x00,0x01,0x10,0x00,0x40,0x00,0x01,0x00,0x52,0x69,0x6b,0xb5,
+ 0xd6,0xda,0xd5,0xb6,0x6e,0xdb,0xda,0x5a,0xab,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0xa5,0x2a,0xa5,0x52,
+ 0xa5,0xaa,0x84,0x8a,0xaa,0xaa,0x52,0xa5,0x24,0x00,0x00,0x00,0x00,0x00,0x02,
+ 0x00,0x00,0x00,0x01,0xa8,0x94,0xac,0xd5,0x5a,0xab,0x5a,0x55,0xb5,0xad,0xae,
+ 0xd6,0x6a,0xff,0x7f,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xbf,0xff,
+ 0xff,0xff,0xff,0x2b,0x95,0x54,0x95,0x4a,0x95,0x52,0x75,0x69,0x55,0x55,0xad,
+ 0x4a,0x01,0x42,0x88,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x48,0xd8,0xb4,0xb5,
+ 0x56,0x6b,0xb5,0x66,0xdb,0xaa,0x6a,0x73,0x6b,0xab,0xff,0xfe,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xaf,0xaa,0x4a,0x55,
+ 0xaa,0x54,0x4a,0x95,0xaa,0x6a,0xb5,0xaa,0x24,0x01,0x08,0x00,0x02,0x04,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x2e,0xa6,0xd6,0x5a,0xad,0xd6,0x5a,0x6d,0xb7,0xad,
+ 0xad,0xb5,0x95,0xfe,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x4f,0xa9,0xaa,0x54,0xa9,0xaa,0xaa,0x6a,0x55,0xad,0xd5,
+ 0xaa,0x96,0x12,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x20,0x00,0x00,0x55,0xa9,
+ 0x52,0xeb,0x6a,0x5b,0xe9,0x57,0xd5,0x56,0xb5,0x5a,0xdd,0xfe,0xff,0xf7,0xbf,
+ 0xef,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xa4,0xa4,
+ 0x52,0x55,0xaa,0xaa,0xaa,0xaa,0x55,0x55,0x25,0x95,0x42,0x00,0x10,0x20,0x10,
+ 0x00,0x00,0x01,0x00,0x02,0x90,0x96,0x5a,0x5d,0xad,0xb6,0xd5,0xae,0xb5,0xad,
+ 0xba,0xad,0x6d,0x6b,0xfd,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x5f,0x55,0x55,0x4d,0xa5,0x52,0xa5,0xaa,0xb6,0xaa,
+ 0xaa,0x5a,0x95,0x02,0x20,0x00,0x00,0x40,0x00,0x00,0x40,0x00,0x20,0x42,0x4b,
+ 0x25,0x65,0xb5,0x5a,0xad,0xea,0x5b,0x75,0xd5,0xd6,0xaa,0x95,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0x5f,0x29,
+ 0x95,0x32,0x95,0x4a,0xaa,0xaa,0x5a,0x55,0x55,0xaa,0x52,0x8a,0x80,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xa5,0xda,0xb5,0x55,0xab,0xb5,0xea,0xd7,
+ 0x96,0xad,0x6a,0xb7,0xb6,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xaa,0x52,0xaa,0x54,0x55,0x55,0x55,0xa5,
+ 0x6a,0xab,0x95,0x2a,0x05,0x02,0x02,0x42,0x00,0x08,0x00,0x00,0x00,0x80,0xa0,
+ 0x22,0x65,0x4a,0xad,0xb5,0xd6,0xf6,0x6b,0xeb,0x6a,0x5b,0xd5,0xaa,0xfd,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x52,0x55,0xa5,0x52,0xaa,0xaa,0xb6,0x6a,0xad,0xaa,0x6a,0x2a,0x0a,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xd4,0x99,0x99,0xb5,0xb5,0xd6,0xaa,0xea,
+ 0xb7,0x5a,0xb7,0xd5,0x5a,0x5d,0xf6,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x95,0x54,0x55,0x55,0x25,0xa9,0x55,
+ 0x55,0xb3,0xaa,0xaa,0xaa,0x24,0x08,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x01,
+ 0x68,0x49,0xa6,0xac,0xd6,0xaa,0xb6,0xfd,0xaf,0xad,0xaa,0x6e,0xad,0xab,0xf5,
+ 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xfe,0x7f,0xbf,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xa5,0x2a,0xa9,0xaa,0xaa,0x6a,0xaa,0x55,0x4d,0x55,0x95,0xa2,0x14,0x20,
+ 0x11,0x00,0x01,0x00,0x00,0x01,0x00,0x24,0x34,0xa4,0xa9,0xd6,0xaa,0x76,0x95,
+ 0xfa,0xb7,0x6a,0x6d,0xb5,0x76,0x75,0xf6,0xff,0xff,0xff,0xff,0x77,0xfd,0xdf,
+ 0xfd,0xff,0xff,0xfe,0xf7,0xff,0xff,0xff,0xff,0xb2,0x52,0x25,0x95,0x54,0x95,
+ 0x55,0x6d,0xb5,0xaa,0xaa,0x5a,0x8a,0x00,0x00,0x04,0x10,0x00,0x00,0x00,0x00,
+ 0x00,0x59,0x52,0x4a,0x29,0xdb,0x9a,0xcb,0xfe,0xd7,0xb6,0xb5,0xd5,0x55,0xad,
+ 0xea,0xfb,0xff,0xb7,0xfe,0xbf,0xfe,0xff,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x8a,0x4a,0x55,0xa9,0x2a,0xad,0x56,0xa5,0x52,0x55,0x25,0x95,0x28,
+ 0x00,0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x2c,0x29,0xb5,0xb5,0x55,0x6b,
+ 0x75,0xfd,0x5f,0xab,0xaa,0xae,0xaa,0xb6,0xd9,0x5f,0xff,0x7f,0xfb,0xff,0xf5,
+ 0xff,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6a,0x2a,0x55,0x55,0xa5,
+ 0xd2,0x54,0x55,0x5d,0x55,0xaa,0x49,0x2a,0x01,0x40,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x24,0x17,0xd5,0xa4,0x54,0x6d,0xad,0xaa,0xff,0x6f,0xb5,0x5d,0xb5,0xdd,
+ 0x55,0xed,0xff,0xf6,0x7f,0xfd,0xfe,0xfa,0xff,0xd7,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x89,0xaa,0x92,0x4a,0xaa,0xaa,0x6a,0x6b,0xa5,0xaa,0x55,0x54,
+ 0x11,0x84,0x04,0x20,0x00,0x00,0x00,0x00,0x01,0x80,0x8a,0x54,0x5b,0x6b,0xb5,
+ 0x6a,0x55,0xff,0xaf,0xdb,0xaa,0xd5,0xaa,0x6e,0xd3,0x7f,0xfd,0xdf,0xea,0xdf,
+ 0xeb,0xef,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xa9,0xaa,0x54,
+ 0x55,0x55,0xab,0xaa,0x6a,0xab,0x5a,0xab,0x54,0x00,0x00,0x82,0x00,0x00,0x00,
+ 0x04,0x00,0x80,0x85,0x92,0x54,0x2a,0xab,0xad,0xed,0xef,0x5f,0x55,0xd7,0x5a,
+ 0x6b,0xbf,0xb5,0xff,0xfa,0xfe,0xfb,0xfb,0xeb,0x7e,0xaf,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x4b,0x55,0xaa,0xaa,0x92,0xaa,0x54,0x55,0x2d,0x55,0xa5,
+ 0x2a,0x51,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0xe1,0x66,0x55,0xa5,0xab,
+ 0xad,0x56,0xb4,0xff,0xbf,0xad,0x6a,0xaf,0xb5,0xff,0xd6,0xbe,0xfb,0xff,0xe5,
+ 0xaf,0xd7,0xff,0xdf,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xa9,0x4a,0x95,
+ 0x52,0xaa,0xaa,0xb6,0xaa,0xd2,0xaa,0xaa,0xa8,0x54,0x12,0x10,0x00,0x40,0x08,
+ 0x00,0x00,0x20,0x48,0x11,0xa9,0x5a,0x5a,0xd5,0x6a,0xd7,0xff,0xdf,0xb6,0xb5,
+ 0xdf,0xda,0xbf,0xaa,0xf7,0xea,0x77,0xbf,0xd7,0xaf,0x3f,0xbf,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x97,0xaa,0x52,0x4a,0xa9,0x5a,0xcb,0x6e,0x5b,0x55,
+ 0x55,0xab,0xa2,0x80,0x40,0x00,0x00,0x00,0x02,0x00,0x00,0x70,0xd1,0x56,0xad,
+ 0xe9,0x5a,0x1b,0xf9,0xff,0xbf,0x5a,0xd9,0x7f,0xed,0xff,0xdb,0xff,0xb7,0xff,
+ 0xf7,0xd5,0xff,0xae,0xfd,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0x2b,0x55,
+ 0xaa,0xaa,0x4a,0xd5,0x34,0xa9,0x55,0x55,0x55,0x52,0x8a,0x00,0x00,0x02,0x00,
+ 0x00,0x00,0x00,0x80,0xa8,0x44,0x52,0x65,0x56,0x6d,0xd5,0xf6,0xff,0x5f,0xeb,
+ 0xee,0xff,0xf6,0xf5,0xae,0xaf,0xeb,0xd7,0xdf,0x6b,0xff,0xbb,0xdf,0xfb,0xff,
+ 0xef,0xff,0xff,0xff,0xff,0xff,0x57,0xa4,0xaa,0xaa,0x2a,0xa5,0xd6,0x56,0xaa,
+ 0xaa,0x4a,0xab,0x51,0x09,0x00,0x08,0x00,0x00,0x00,0x00,0x10,0x54,0xaa,0x54,
+ 0xa9,0x55,0xab,0x4d,0xfd,0xff,0x7f,0x55,0xea,0xfd,0xf5,0xdf,0xeb,0xd3,0xef,
+ 0xaf,0x7f,0xf5,0xdd,0xaf,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,
+ 0x95,0x52,0x52,0xaa,0x54,0x55,0x55,0xab,0x55,0xb5,0x52,0x4a,0x01,0x04,0x20,
+ 0x08,0x00,0x20,0x08,0x00,0x5a,0x94,0x52,0x55,0x5a,0x55,0xc5,0xfe,0xff,0xbf,
+ 0x5b,0xf5,0xff,0x7b,0xff,0xef,0xae,0xbf,0xd5,0xff,0xfb,0xff,0xd7,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x54,0xaa,0x4a,0x55,0x2b,0x55,0x55,
+ 0xad,0x5a,0x55,0x4d,0x95,0x42,0x00,0x80,0x20,0x04,0x00,0x00,0x00,0x17,0xa5,
+ 0x5a,0xad,0xd5,0xda,0x72,0xfd,0xff,0x7f,0x6d,0x7b,0xfb,0xff,0xf7,0xfd,0xe9,
+ 0xff,0x6b,0x7f,0xfa,0xff,0xd6,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x5f,0x55,0x95,0x2a,0xa5,0xda,0xaa,0xaa,0xb5,0x6a,0x55,0xb1,0x52,0x09,0x20,
+ 0x00,0x00,0x10,0x00,0x00,0x48,0x9a,0x28,0x95,0x4a,0x56,0x6d,0xab,0xff,0xff,
+ 0xff,0x2a,0xfd,0xf7,0xef,0xeb,0xdf,0xf6,0xfe,0xf5,0xff,0xfa,0xff,0xe9,0xff,
+ 0xff,0xff,0x7f,0xff,0xfe,0xff,0xff,0xff,0x8f,0xa8,0x52,0xaa,0x94,0x24,0x55,
+ 0x6d,0xca,0xaa,0xaa,0x96,0xaa,0x02,0x00,0x00,0x00,0x40,0x00,0x00,0x81,0x05,
+ 0xd5,0x6a,0x75,0x6b,0xab,0x54,0xff,0xff,0xff,0x96,0xdb,0xeb,0xff,0xad,0xff,
+ 0xfa,0xbf,0xf5,0x3b,0xfd,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x7f,0x55,0x55,0xa9,0xaa,0xda,0xb6,0x95,0xab,0xaa,0xaa,0x54,0x55,0x25,
+ 0x82,0x00,0x00,0x00,0x01,0x00,0x80,0x4e,0x24,0x52,0x95,0xac,0xad,0xd8,0xdf,
+ 0xff,0x7f,0xdb,0xfe,0xb5,0xff,0xd5,0x7f,0xfd,0xff,0xfa,0xbf,0xff,0xff,0xfa,
+ 0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x91,0x54,0x55,0x55,0xa5,
+ 0x94,0x6a,0x54,0x55,0x55,0x55,0x95,0x02,0x00,0x02,0x00,0x00,0x08,0x42,0xe8,
+ 0xb2,0xd3,0x52,0xd5,0xaa,0x6a,0xae,0xff,0xff,0xff,0xaa,0xfe,0xae,0xbf,0xb6,
+ 0xbe,0xfa,0xfb,0xfd,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xdf,0xaa,0xaa,0x4a,0x29,0x55,0xd5,0xaa,0x5b,0xad,0xaa,0xaa,0x52,
+ 0x45,0x08,0x20,0x22,0x00,0x00,0x00,0x50,0x5b,0x55,0x55,0x9a,0xd6,0x2a,0xf5,
+ 0xff,0xff,0xff,0x55,0x7f,0xd5,0x7e,0xdb,0xbe,0xf6,0x6f,0xfe,0xff,0xff,0xfb,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xaa,0x4a,0x2a,0x55,
+ 0x55,0x6b,0xb5,0x6a,0x55,0x55,0x55,0xaa,0x07,0x00,0x00,0x00,0x00,0x00,0x10,
+ 0xa9,0xd5,0xae,0xaa,0xe9,0x5a,0x97,0xea,0xff,0xff,0xff,0x96,0xbe,0x6b,0xdd,
+ 0xaa,0x6a,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x3f,0x91,0x54,0xa9,0xa4,0xaa,0x94,0x56,0x95,0xd5,0xaa,0xaa,
+ 0xea,0x17,0x10,0x00,0x80,0x00,0x00,0x00,0xb8,0x6e,0x75,0xd7,0xae,0xaa,0x8a,
+ 0xfd,0xff,0xff,0xff,0x6b,0xdf,0x5c,0xab,0xb6,0xb5,0xf5,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,0x52,0x55,
+ 0x95,0xb4,0x6a,0xa9,0x6a,0x55,0x55,0x95,0xfa,0x87,0x40,0x04,0x00,0x02,0x40,
+ 0x40,0xfe,0x55,0xab,0xba,0x52,0x6d,0xcd,0xfa,0xff,0xff,0xff,0xb5,0x55,0xab,
+ 0xb5,0xd5,0x5a,0xed,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,
+ 0xf7,0xff,0xff,0xff,0x7f,0xa4,0xaa,0xaa,0xaa,0x4a,0x9b,0xaa,0xaa,0xaa,0xaa,
+ 0x52,0xff,0x07,0x00,0x80,0x00,0x00,0x00,0x08,0xfe,0xff,0x6d,0xab,0xad,0xb5,
+ 0xa5,0xfe,0xfe,0xff,0xff,0x5f,0xb5,0xb5,0x5a,0xad,0xd6,0xd6,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0x4a,
+ 0x92,0xaa,0xaa,0xe4,0xaa,0x56,0xad,0x2a,0xd5,0xff,0x17,0x00,0x00,0x04,0x20,
+ 0x02,0x00,0xff,0xff,0xbf,0xd5,0xda,0xaa,0xb2,0xfd,0xff,0xff,0xff,0xa9,0xda,
+ 0xda,0xed,0x76,0x6b,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xef,0xff,0xff,0xff,0xff,0xff,0x24,0x55,0x55,0x52,0xa9,0x56,0xab,0xaa,0xb5,
+ 0xaa,0xfa,0xff,0x83,0x88,0x08,0x00,0x00,0x08,0x90,0xff,0xff,0xff,0x5f,0x6d,
+ 0xdd,0x56,0xff,0xff,0xff,0xff,0xd7,0x56,0xad,0x56,0xab,0x5a,0xab,0xff,0xff,
+ 0xff,0xff,0xff,0xbf,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4a,
+ 0xa9,0xaa,0x2a,0x55,0xa9,0xda,0x5a,0x4a,0xa5,0xfe,0xff,0x07,0x00,0x00,0x10,
+ 0x00,0x00,0xc2,0xdf,0xff,0xff,0xff,0x56,0x67,0xb5,0xff,0xff,0xff,0xff,0x6f,
+ 0xdb,0xb6,0x5a,0xd5,0xd6,0xda,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4b,0x55,0x55,0xa5,0xaa,0x56,0x55,0xad,
+ 0xab,0xd4,0xff,0xdf,0x13,0x22,0x40,0x40,0x04,0x20,0xc0,0x6f,0xfb,0xff,0xff,
+ 0xff,0xb9,0xdb,0xff,0xff,0xff,0xff,0xb7,0x6a,0x55,0xab,0x6d,0x6b,0xad,0xff,
+ 0xef,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x15,0x95,0x24,0x95,0x54,0x59,0xb5,0xb2,0x54,0xf5,0xff,0xff,0x03,0x00,0x02,
+ 0x00,0x00,0x00,0xc8,0xff,0xaf,0xfe,0xff,0xff,0x4f,0xad,0xff,0xff,0xff,0xff,
+ 0xaf,0xad,0xb6,0xdd,0xb6,0xb5,0x6b,0xff,0xff,0xff,0xfb,0xbf,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xa4,0xaa,0xaa,0x4a,0xa5,0x4a,
+ 0x4d,0xa5,0xfe,0xff,0xff,0x43,0x00,0x00,0x00,0x20,0x00,0xc0,0xaf,0xfd,0xef,
+ 0xff,0xff,0xff,0xeb,0xf7,0xff,0xff,0xff,0xd7,0x6a,0xdb,0xaa,0xaa,0x5a,0x55,
+ 0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,
+ 0xff,0x27,0x55,0x55,0xa9,0xb2,0x5a,0xb5,0xaa,0x94,0xff,0xff,0xff,0x0b,0x49,
+ 0x10,0x01,0x80,0x00,0xe2,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x6f,0xb7,0x55,0xed,0xb6,0xad,0xdd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x93,0x2a,0x29,0xa5,0x4a,0xa5,
+ 0xad,0x52,0xf5,0xff,0xff,0xf7,0x01,0x00,0x02,0x04,0x01,0x02,0xc0,0xef,0x6e,
+ 0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xaa,0xda,0x56,0xdb,0xd6,
+ 0x6a,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x57,0x55,0x55,0x55,0xaa,0x5a,0xaa,0x2a,0xfd,0xff,0xff,0xff,0x01,
+ 0x04,0x00,0x10,0x00,0x20,0xe0,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xaf,0xb5,0x6d,0xb5,0xaa,0x6a,0xad,0xee,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0x2f,0x48,0xa5,0xaa,0xaa,
+ 0xaa,0xaa,0xaa,0xff,0xff,0xff,0xff,0x25,0x20,0x20,0x00,0x04,0x00,0xe2,0xf7,
+ 0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xda,0x56,0xdb,0xd6,
+ 0xb6,0xb6,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xaf,0xaa,0x94,0x54,0x55,0x55,0x95,0xe4,0xff,0xff,0xff,0xff,
+ 0x01,0x81,0x04,0x00,0x00,0x00,0xe0,0xdf,0x7f,0x77,0xff,0xfd,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x5f,0x57,0xb5,0x55,0x6b,0xab,0x55,0xfd,0xff,0xff,0xff,0xff,
+ 0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xaf,0x54,0x55,0x25,
+ 0x49,0xb5,0x52,0xfd,0xff,0xff,0xff,0xff,0x03,0x04,0x00,0x41,0x10,0x04,0xe1,
+ 0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x6a,0x5b,0x6d,
+ 0x5d,0xdd,0x6a,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xaf,0xa4,0xaa,0xaa,0xaa,0x4a,0x55,0xff,0xff,0xff,0xff,
+ 0xff,0x21,0x10,0x10,0x08,0x40,0x10,0xe4,0xff,0xf7,0xff,0xfb,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xdf,0xb6,0xd5,0xb6,0xaa,0x65,0xb7,0xdd,0xff,0xff,0xff,
+ 0xfd,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x55,0x52,
+ 0xa9,0x2a,0xa9,0xea,0xff,0xff,0xff,0xff,0xff,0x04,0x00,0x41,0x00,0x01,0x00,
+ 0xe0,0xfb,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x5b,0x6d,
+ 0xab,0xdb,0xba,0x5a,0x75,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x3f,0xa9,0x2a,0x95,0x54,0x25,0xf9,0xff,0xff,0xff,
+ 0xff,0xff,0x81,0x42,0x00,0x01,0x00,0x80,0xf0,0xff,0xff,0xee,0xdf,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xb6,0x5a,0x6d,0x57,0xd5,0xfa,0xfd,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x92,
+ 0xaa,0xaa,0x4a,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0x10,0x08,0x08,0x20,0x00,
+ 0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xab,0xed,0xaa,0xaa,0x6d,0xed,0xf7,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xfe,0xef,0xff,0xff,0xff,0xbf,0x52,0x49,0xa5,0x2a,0xd5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x00,0x00,0x01,0x84,0x24,0x82,0xf0,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xab,0xd6,0xda,0xb6,0xf6,0xff,
+ 0xef,0xfd,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,
+ 0xa4,0xaa,0x54,0xa9,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x04,0x22,0x44,0x00,
+ 0x00,0x00,0xd2,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0x6b,0x6d,0x55,0xeb,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xef,
+ 0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0x7f,0x55,0xaa,0x2a,0xa5,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x90,0x00,0x00,0x11,0x80,0x08,0xf0,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0x57,0xdb,0xda,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0x45,0x25,0xa5,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x12,0x11,
+ 0x40,0x04,0x20,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xb5,0x6d,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xaa,0xaa,0x54,0xf5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x7f,0x22,0x40,0x40,0x00,0x10,0x80,0xf8,0xff,0xfd,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0x55,
+ 0xad,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xfe,0xff,0x49,0xa9,0x2a,0xfd,0xff,0xff,0xff,0xff,0xff,0xef,0x7f,0x80,0x08,
+ 0x04,0x84,0x40,0x02,0xf0,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xb5,0xff,0x7f,0xfd,0xbf,0xff,0xff,
+ 0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0x25,0x55,0xa5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x08,0x80,0x10,0x11,0x02,0x20,0xf4,0xff,0xff,
+ 0x7f,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xd7,0xde,0xdd,0xea,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xbf,0xff,
+ 0x7f,0xff,0xff,0x95,0x2a,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x20,
+ 0x12,0x00,0x00,0x00,0x80,0xf8,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xab,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xfe,0xff,0x55,0xa5,0xfc,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x82,0x80,0x44,0x44,0x48,0x02,0xe8,0xff,
+ 0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xfb,0xff,0xaf,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x5f,0xff,0xff,0xab,0x54,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x00,0x08,0x10,0x00,0x01,0x08,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xda,0x5d,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xef,0x5f,0xff,0xff,0x57,0xd5,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x24,0x42,0x02,0x11,0x10,0x40,0xf8,
+ 0xff,0xff,0xff,0xff,0xdf,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbf,0xf6,0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,
+ 0xff,0xfd,0xaa,0xff,0xff,0xa7,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,
+ 0x3f,0x00,0x08,0x40,0x00,0x02,0x01,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xef,0xea,0x7f,
+ 0xfd,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0x77,0xab,0xff,0xbf,0x97,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x90,0x20,0x12,0x49,0x40,0x10,
+ 0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xaf,0xba,0xff,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xaf,0xd5,0xff,0xff,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x3f,0x01,0x82,0x00,0x00,0x11,0x04,0xf4,0xfe,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0xff,
+ 0xfd,0xf5,0xff,0xff,0xfb,0xff,0xf7,0xff,0xff,0x7d,0x5b,0xd5,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x24,0x08,0x24,0x12,0x84,
+ 0x40,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xaa,0xff,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,
+ 0xdf,0xff,0xff,0x55,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0x80,0x20,0x00,0x40,0x00,0x08,0xfc,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb,
+ 0xff,0xf7,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0xaa,0xf5,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x01,0x00,0x91,0x04,
+ 0x48,0x20,0xfc,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xde,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xbf,0xbf,0xb6,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xbf,0xff,0x1f,0x28,0x12,0x00,0x10,0x01,0x02,0xfe,0xbf,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,
+ 0xf4,0xff,0xfd,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xa5,0xaa,0xfa,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x80,0x80,0x24,
+ 0x41,0x44,0x08,0xfa,0xff,0x7f,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xfa,0xeb,0xff,0xff,0xbf,
+ 0xff,0xff,0xff,0xff,0xaf,0xaa,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x5f,0x02,0x12,0x00,0x04,0x00,0x41,0xfe,0xff,0xff,0xef,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xbf,0xfa,0xbb,0xbd,0xd7,0xdf,0xff,0xff,0xfd,0xff,0xff,0x77,0x69,0xab,0xfe,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0x1f,0x20,0x40,
+ 0x12,0x10,0x12,0x00,0xfe,0xff,0xff,0x7f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xfa,0x7f,0xfd,0x6f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x2a,0x5d,0xeb,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xdf,0xff,0xff,0x9f,0x08,0x04,0x40,0x81,0x40,0x12,0xfa,0xff,0xff,
+ 0xff,0xfd,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xb7,0x7f,0xfd,0x7f,0xfd,0xeb,0xff,0xff,0xff,0xef,0xff,0xff,0x7f,0x5b,0xa5,
+ 0x9a,0xea,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0x82,
+ 0x90,0x04,0x08,0x04,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xdf,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xdf,0xff,0xfd,0xbf,0xfd,0xd7,0xff,
+ 0xff,0xff,0xbf,0xff,0xff,0xbd,0xaa,0xda,0xaa,0xba,0xfd,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x20,0x00,0x10,0x40,0x10,0x09,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xb7,
+ 0xf7,0xad,0x7d,0xfd,0xfe,0xde,0xeb,0xff,0xff,0xff,0xff,0xde,0xff,0xd7,0x6a,
+ 0x55,0x6b,0xab,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x4f,
+ 0x84,0x84,0x80,0x04,0x01,0x40,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xbf,0xd7,0xff,0xfa,0xb7,0xfe,0xf5,
+ 0xff,0xff,0xff,0xff,0xff,0xf7,0xbf,0xaa,0x55,0xad,0x5a,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x10,0x20,0x08,0x10,0x90,0x04,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xbe,
+ 0xff,0xfe,0xda,0x7f,0xfd,0xff,0xfa,0xeb,0xff,0xff,0xff,0xff,0xff,0xbf,0xaf,
+ 0xaa,0x5a,0x55,0xab,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,
+ 0x0f,0x41,0x04,0x42,0x42,0x04,0x00,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xdf,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xeb,0xff,0xfa,0xdf,0xfb,
+ 0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0x57,0x55,0xd5,0xda,0xea,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0x1f,0x04,0x41,0x08,0x00,0x41,0x12,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xf7,0x7f,0xf5,0xfd,0xfb,0x7f,0x6f,0xfb,0xdf,0xff,0xff,0xff,0xff,0xff,
+ 0xae,0x5a,0x55,0x55,0xf5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x4f,0x10,0x10,0x40,0x12,0x08,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xde,0xaf,0xfe,0xbf,0xfa,0xff,
+ 0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0x6b,0xad,0xb6,0xaa,0xfa,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0x40,0x84,0x04,0x40,0x80,
+ 0x08,0xff,0xff,0xff,0xff,0xbf,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xf7,0xff,0x5f,0xff,0xff,0xf5,0xff,0x7f,0xfd,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xab,0xd2,0xaa,0x56,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,
+ 0xff,0xff,0x07,0x02,0x01,0x40,0x04,0x12,0x80,0xff,0xfb,0xff,0xff,0xff,0xfe,
+ 0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0x7f,0x7f,0xff,0xfb,0xf5,
+ 0xff,0xae,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0x5b,0xab,0x5a,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x97,0x10,0x50,0x12,0x21,
+ 0x00,0x89,0xf6,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xbb,0xfe,0xff,0xeb,0xfb,0x57,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xbb,0x5a,0x7d,0x75,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,
+ 0xff,0xff,0xff,0x07,0x02,0x02,0x00,0x04,0x49,0x80,0xff,0xff,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xfb,0x6f,0xf9,0xff,
+ 0xef,0xef,0xaf,0xdf,0xff,0xff,0xff,0xff,0xff,0x7f,0xd5,0xee,0x9a,0xea,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xfb,0xff,0xff,0x07,0x48,0x08,0x49,
+ 0x20,0x00,0x84,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,
+ 0xff,0xff,0xff,0xfb,0xff,0xff,0xf6,0xef,0xd6,0xbf,0xf7,0xff,0xff,0xff,0xff,
+ 0xff,0xdb,0xbf,0x55,0x7d,0x65,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x47,0x00,0x40,0x00,0x81,0x24,0x81,0xff,0xff,0xff,0xef,
+ 0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xdf,0xff,0xf5,
+ 0xff,0xaf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0xaf,0x6a,0xff,0xda,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0x0b,0x20,0x09,
+ 0x08,0x08,0x00,0x48,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xfd,0xff,0xff,0xef,0xfe,0xbd,0xeb,0xff,0x5d,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xbf,0xb7,0x57,0xfd,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,
+ 0xef,0xff,0xff,0xfe,0xff,0x23,0x01,0x40,0x82,0x40,0x88,0x80,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xde,0xff,0xff,0xff,0xff,
+ 0xd7,0xff,0x7f,0xfd,0xff,0xff,0xef,0xff,0xff,0xff,0x9f,0x5a,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0xff,0xff,0x03,0x00,
+ 0x00,0x20,0x0a,0x02,0xc2,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xfb,0xd6,0xff,0xef,0xea,0xff,0xff,0xff,
+ 0xff,0xff,0xf6,0x65,0xd5,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xef,0xff,0xff,0xff,0xff,0x07,0x10,0x04,0x00,0x40,0x20,0x88,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0x7f,0x7f,0xbf,
+ 0xef,0xaf,0xff,0xff,0xab,0xfe,0xff,0xff,0xff,0xff,0xdf,0xaa,0xaa,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xdd,0xff,0xff,0xff,0xff,0x43,
+ 0x42,0x10,0x09,0x00,0x89,0xc0,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xbf,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xfe,0xf7,0xfd,0xff,0xbf,0xff,0x7f,0x5f,0xa9,0xfd,
+ 0xff,0xff,0xdf,0x5f,0xad,0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x80,0x08,0x00,0x42,0xff,
+ 0xff,0xdf,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xab,0xff,0xff,0xfd,0xad,0xd6,0xff,0xff,0xff,0x6b,0x55,0x55,0xff,
+ 0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xaf,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0x3f,0x41,0x00,0x20,0x04,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0xaf,0xff,0xfe,0xb7,0xff,
+ 0x55,0xff,0xff,0xff,0xab,0xaa,0x56,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0x7f,
+ 0xbf,0x7f,0xff,0xf3,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x24,0x00,0x20,0xc8,
+ 0xfb,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,
+ 0x6f,0xef,0xfb,0x5f,0xff,0xfb,0xff,0xb7,0x5f,0xff,0xff,0xff,0xaf,0xaa,0x5a,
+ 0xff,0xff,0xff,0xfb,0xfb,0xff,0xff,0xff,0x7f,0xff,0xff,0xfd,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0x07,0x82,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0x5f,0xff,0xff,0xff,
+ 0xff,0x76,0xbd,0xff,0xdf,0xb7,0x5a,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xfe,0xbf,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xdf,0xfe,0xff,0xff,0x09,0x04,
+ 0xe1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xfd,0xfb,0xff,0xaf,0xff,0xff,0xff,0xfe,0x9f,0xfe,0xff,0xff,0x5d,0xf5,
+ 0xab,0xfe,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xfe,0xbf,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0x5f,0xff,0xff,0xff,0x20,0xc0,0xbf,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xad,0xff,0xff,
+ 0xff,0xfb,0xd7,0xfe,0xff,0xff,0xaf,0xfe,0x55,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x5f,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,
+ 0x1f,0xe2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xbf,0xf7,
+ 0xff,0xff,0xff,0x7f,0xbf,0x5f,0xff,0xff,0xf7,0xff,0xb7,0xfe,0xff,0xff,0xbf,
+ 0xfa,0x6b,0xfd,0xff,0xff,0xff,0xff,0x7d,0xff,0xff,0x7f,0xff,0x7f,0xff,0xd7,
+ 0x6f,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xdb,0xff,0xfb,0xff,0xff,0xff,
+ 0xff,0xfd,0xff,0xff,0xff,0xef,0xff,0xdf,0xff,0xff,0xfb,0xed,0xff,0xaf,0xff,
+ 0xff,0xff,0xdf,0x56,0xff,0xff,0xff,0xdf,0xdf,0xab,0xbe,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfe,0xff,0xfe,0x7f,0xbb,0xfe,0xff,0xff,0xff,0xff,0x7b,
+ 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xef,0xff,0xff,0xff,0xdf,0xff,0xbf,0xff,
+ 0xff,0xff,0xff,0xef,0xff,0xfb,0xad,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,
+ 0xf7,0xff,0x57,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x6f,0xff,
+ 0xaf,0x56,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xff,0xff,0xff,0x7f,0xdf,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xfd,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xfe,0xbf,0xff,0x5f,0x55,0x7f,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xef,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xbd,0xef,0xbf,0x7d,0xef,0xd3,0xff,0xef,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0x55,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xf7,0x7f,
+ 0xff,0xaf,0xda,0xff,0xe5,0xff,0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xff,
+ 0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xf7,0x7f,
+ 0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xb7,0xab,0xfa,0xff,0xfb,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xdc,0xb7,0xff,0xb6,0xff,0xff,0xdf,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xf5,0xdf,0xff,0x7f,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe5,0xfb,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xac,0xfa,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,
+ 0xdf,0xff,0xdf,0xff,0xff,0xdd,0xff,0xff,0xfe,0xff,0xff,0xfb,0xff,0xb7,0xff,
+ 0xbf,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0xef,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0x7f,0x55,0xd5,0xfb,
+ 0xff,0xb7,0xfb,0xff,0xdf,0xfb,0xff,0xfd,0xdf,0xff,0xe7,0xff,0xff,0xef,0xff,
+ 0xdf,0xff,0xff,0x7f,0xff,0xf7,0xbf,0xff,0xef,0xfe,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xbd,0xf6,0xff,0xff,0xef,0xff,0xff,
+ 0xef,0xff,0xef,0xff,0x7f,0xab,0xd5,0xff,0xdf,0x5e,0xed,0xff,0xff,0xef,0xff,
+ 0xfb,0xdb,0xff,0xff,0xff,0xdf,0xdd,0xff,0x7f,0xff,0xff,0xff,0xff,0xfb,0xbf,
+ 0xfe,0xbf,0xff,0xff,0xff,0xff,0xef,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,
+ 0xf7,0xb7,0xfa,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xbd,0xaa,0x2a,
+ 0xbf,0xfb,0x6f,0xb5,0xff,0xff,0xff,0xff,0xf6,0xdf,0xff,0xeb,0xff,0xff,0xb7,
+ 0xff,0xef,0xff,0xff,0xff,0xff,0xcf,0xbf,0xfe,0xbb,0xff,0xff,0xfb,0xff,0xff,
+ 0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0x5b,0xfd,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0x77,0x55,0xad,0xe2,0xef,0xb6,0xd5,0xf7,0xff,0x7f,
+ 0xff,0xf7,0xef,0xff,0x2f,0xdd,0xff,0xda,0xff,0xfd,0xff,0xfb,0xff,0xff,0xff,
+ 0x7d,0xfd,0xdf,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xa5,0xff,0xbf,0xff,0xff,0xff,0xef,0xff,0xff,0x7f,0xff,0x9f,0x5a,
+ 0x55,0x6d,0xbf,0x55,0x55,0xfe,0xff,0xff,0xfd,0xef,0xed,0xfe,0xdf,0xaa,0xff,
+ 0xeb,0xff,0xff,0xff,0xff,0xbf,0xff,0xef,0xdf,0xf5,0xdf,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xda,0xff,0xff,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xaa,0xaa,0xaa,0xa9,0xaa,0x56,0xff,0xff,
+ 0xff,0x7f,0xef,0xef,0xfb,0xae,0xba,0xff,0xea,0xff,0xf7,0xff,0xf7,0xff,0xff,
+ 0xed,0xdf,0xfb,0xdf,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xfb,0xff,0xff,
+ 0xff,0xff,0x7d,0xfb,0xff,0xff,0xef,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0x7f,
+ 0x55,0xb5,0xaa,0x56,0xd5,0xaa,0xfc,0xff,0xff,0xff,0xdd,0xf7,0xff,0xaf,0xce,
+ 0xef,0xf5,0xff,0xff,0xff,0xfb,0xbf,0xff,0xef,0xd7,0xf7,0xdb,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xbf,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6f,0x55,0x55,0xb5,0x6a,0x5b,0x75,0xf3,
+ 0xff,0xff,0xff,0xf7,0xf6,0xff,0x5b,0xff,0xff,0xeb,0xff,0xf7,0xff,0xff,0xff,
+ 0xff,0xf7,0xef,0xee,0xdf,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0x7f,0xab,0xaa,0xaa,0xaa,0xd6,0x4e,0xf5,0xff,0xff,0xff,0xdf,0xf5,0xff,0xef,
+ 0xff,0xff,0x5d,0xff,0xee,0x7f,0xfb,0xbf,0xff,0xef,0xfd,0xdb,0xef,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xf7,0xff,0xff,0xff,0xff,0xdf,0xff,
+ 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xd5,0xaa,0x56,0x55,0x55,0xb7,
+ 0xd5,0xff,0xff,0xff,0x7f,0xfb,0xff,0xff,0xff,0xbf,0xf6,0xfa,0xef,0xff,0xfb,
+ 0x7f,0xff,0xf6,0xef,0xbf,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0x5b,0xab,0xaa,0xb6,0xea,0x5d,0xd5,0xff,0xff,0xff,0xff,0xfb,0xff,
+ 0xce,0xff,0xff,0xde,0xeb,0xdf,0xff,0xfb,0xf7,0xfe,0xf7,0xef,0x6f,0xed,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x56,0x55,0xd5,0xaa,0xb5,
+ 0xef,0xaa,0x7f,0xff,0xff,0xf7,0xfa,0xff,0xbf,0xef,0xbf,0xfd,0xaf,0xdf,0xff,
+ 0xff,0xdf,0xfd,0xfb,0xeb,0xff,0xd7,0xff,0xef,0xef,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xab,0xaa,0x55,0xad,0xea,0x5f,0xd7,0xee,0xfe,0xff,0xff,0xfb,
+ 0xff,0xbf,0xea,0xef,0xff,0xb6,0xbd,0xff,0xfa,0x7f,0xdb,0xf8,0xef,0xff,0xed,
+ 0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xfb,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xf7,0x5f,0xb5,0xaa,0xaa,
+ 0xfa,0x7f,0x59,0xbf,0xfe,0xff,0xdf,0xfa,0xff,0xfb,0xd5,0x7f,0xff,0xef,0xaf,
+ 0xff,0xfd,0xff,0x77,0xff,0xef,0xdf,0xf7,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,
+ 0xff,0xbf,0xff,0xff,0xfb,0xff,0xef,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xaf,0xaa,0xb6,0x55,0xff,0xff,0x56,0xfd,0xfe,0xff,0xff,
+ 0xfd,0xff,0xff,0xeb,0xbf,0xff,0xff,0xaf,0xff,0xfd,0xff,0xaf,0xfe,0xf6,0xff,
+ 0xeb,0xff,0xff,0xff,0xef,0xff,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x5f,0xd5,0xaa,
+ 0xaa,0xff,0x6d,0xab,0xba,0xfe,0xff,0xff,0xfe,0xff,0xdf,0xf6,0x7f,0xff,0x7f,
+ 0xdf,0xbf,0xff,0xff,0x5f,0xff,0xfb,0x7f,0xf7,0xfe,0xff,0xff,0xff,0xfd,0xbf,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xfe,
+ 0xff,0xff,0xff,0xff,0x7f,0xaf,0xea,0x55,0xf5,0xff,0x7f,0xb5,0xad,0xfe,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xd5,0xff,0xfb,0xff,0xed,0xff,0xff,
+ 0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xdf,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xad,0xfb,0xbf,0xb5,
+ 0xaa,0xf7,0xff,0xff,0x56,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xbf,0xff,
+ 0xff,0xef,0xff,0xff,0x5f,0xd5,0xab,0xd6,0xf5,0x9d,0xbd,0x7f,0xab,0xaa,0xdf,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xaf,0x56,0x5f,
+ 0xb9,0xdf,0x77,0xf5,0xdb,0x5a,0xed,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xdf,0xff,0xff,0xff,0xdb,0xdf,0xaa,0xfa,0xff,0x9f,0x5e,0x5f,0xad,0xff,
+ 0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,
+ 0xef,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xaf,0x56,
+ 0x7b,0xfb,0x7f,0xef,0xde,0xaa,0x55,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0x7f,0xff,0xbf,0xff,0xff,0xff,0xff,
+ 0xff,0xfd,0xff,0xff,0xff,0x7f,0xd7,0xaf,0x5c,0xfd,0xff,0xaf,0x7b,0xb5,0xb6,
+ 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0x7f,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,
+ 0xfd,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbb,
+ 0x5f,0xb5,0xfd,0xff,0x5b,0x3f,0x5b,0x55,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xef,0xff,0xff,0xff,0xfd,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xdf,0xed,
+ 0xee,0xff,0xff,0xdf,0xff,0xfd,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xef,
+ 0xdf,0xff,0xff,0xf7,0xff,0xff,0xfb,0xff,0xef,0xbf,0xff,0xff,0xfb,0xff,0xff,
+ 0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xef,
+ 0xfd,0xbf,0xff,0xfe,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xf7,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xbe,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xfe,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xfb,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xef,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0x7f,0xff,0xff,0xdf,0xff,0xff,0xff,
+ 0xff,0xff};
diff --git a/images/bold_bw.xpm b/images/bold_bw.xpm
new file mode 100644 (file)
index 0000000..467bd7d
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * bold_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+" ...           .... ",
+" ...          ..... ",
+" ...          ...   ",
+" ...          ...   ",
+" ...          ...   ",
+" ... ...    ....... ",
+" ........   ....... ",
+" ....  ...    ...   ",
+" ...    ..    ...   ",
+" ...    ...   ...   ",
+" ...     ..   ...   ",
+" ...     ..   ...   ",
+" ...     ..   ...   ",
+" ...    ...   ...   ",
+" ...    ..    ...   ",
+" ....  ...    ...   ",
+" ........     ...   ",
+" ... ...      ...   ",
+"                    "};
+
+
+
diff --git a/images/bop.xbm b/images/bop.xbm
new file mode 100644 (file)
index 0000000..06a4762
--- /dev/null
@@ -0,0 +1,265 @@
+#define bop_width 118
+#define bop_height 259
+static char bop_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x40,0x00,0x00,0x80,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x40,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0xc0,
+ 0x00,0x40,0x00,0x00,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x02,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x42,0x04,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0xa0,0x00,0x00,0x00,0x41,0x08,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x10,0x01,0x00,0x80,0x40,0x10,0xc0,
+ 0x80,0xff,0x1f,0x00,0x10,0x80,0x00,0x00,0x08,0x02,0x00,0x80,0x40,0x10,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x04,0x04,0x00,0x80,0xff,0x1f,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x08,0x02,0x00,0x80,0x40,0x10,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x08,0x02,0x00,0x80,0x40,0x10,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x10,0x01,0x00,0x80,0x41,0x18,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0xa0,0x00,0x00,0x00,0x41,0x08,0xc0,
+ 0x80,0xff,0x1f,0x00,0x10,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x42,0x04,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x02,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x88,0x00,0x00,0x00,0xf8,0x01,0xc0,
+ 0x80,0xff,0x1f,0x00,0x10,0x80,0x00,0x00,0x88,0x00,0x00,0x00,0x04,0x02,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x04,0x01,0x00,0x00,0x02,0x04,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x04,0x01,0x00,0x00,0x01,0x08,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x02,0x02,0x00,0x80,0x00,0x10,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x02,0x02,0x00,0x80,0x00,0x10,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x01,0x04,0x00,0x80,0xff,0x1f,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x01,0x04,0x00,0x80,0x00,0x10,0xc0,
+ 0x80,0xff,0x1f,0x00,0x10,0x80,0x00,0x80,0x00,0x08,0x00,0x80,0x00,0x10,0xc0,
+ 0x00,0x40,0x00,0x00,0x20,0x40,0x00,0x80,0x00,0x08,0x00,0x80,0x01,0x18,0xc0,
+ 0x00,0x40,0x00,0x00,0x60,0x60,0x00,0x40,0x00,0x10,0x00,0x00,0x01,0x08,0xc0,
+ 0x00,0x40,0x00,0x00,0x80,0x1f,0x00,0xc0,0xff,0x1f,0x00,0x00,0x02,0x04,0xc0,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x03,0xc0,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0xc0,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x82,0x00,0xc0,0xff,0x1f,0x00,0x00,0x0c,0x03,0xc0,
+ 0x00,0x02,0x02,0x00,0x10,0x82,0x00,0x40,0x00,0x10,0x00,0x00,0x02,0x04,0xc0,
+ 0x00,0x04,0x01,0x00,0x10,0x82,0x00,0x80,0x00,0x08,0x00,0x00,0x05,0x0a,0xc0,
+ 0x00,0x88,0x00,0x00,0x10,0x82,0x00,0x80,0x00,0x08,0x00,0x80,0x09,0x19,0xc0,
+ 0x00,0x50,0x00,0x00,0xd0,0xbf,0x00,0x00,0x01,0x04,0x00,0x80,0x90,0x10,0xc0,
+ 0x00,0x20,0x00,0x00,0x10,0x82,0x00,0x00,0x01,0x04,0x00,0x80,0x60,0x10,0xc0,
+ 0x00,0x50,0x00,0x00,0x10,0x82,0x00,0x00,0x02,0x02,0x00,0x80,0x60,0x10,0xc0,
+ 0x00,0x88,0x00,0x00,0x10,0x82,0x00,0x00,0x02,0x02,0x00,0x80,0x90,0x10,0xc0,
+ 0x00,0x88,0x00,0x00,0x20,0x40,0x00,0x00,0x04,0x01,0x00,0x80,0x09,0x19,0xc0,
+ 0x00,0x04,0x01,0x00,0x60,0x60,0x00,0x00,0x04,0x01,0x00,0x00,0x05,0x0a,0xc0,
+ 0x00,0x02,0x02,0x00,0x80,0x1f,0x00,0x00,0x88,0x00,0x00,0x00,0x02,0x04,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x0c,0x03,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0xf8,0x01,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0xf0,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0xc0,
+ 0x00,0x60,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x03,0xc0,
+ 0x00,0x60,0x00,0x00,0x10,0x80,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x04,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x1a,0x00,0x00,0x00,0x01,0x0a,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x62,0x00,0x00,0x80,0x01,0x19,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x82,0x01,0x00,0x80,0x80,0x10,0xc0,
+ 0x80,0xff,0x1f,0x00,0x10,0x80,0x00,0x00,0x02,0x02,0x00,0x80,0x40,0x10,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x02,0x03,0x00,0x80,0x20,0x10,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xc2,0x00,0x00,0x80,0x10,0x10,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x22,0x00,0x00,0x80,0x09,0x18,0xc0,
+ 0x00,0x60,0x00,0x00,0x10,0x80,0x00,0x00,0x1a,0x00,0x00,0x00,0x05,0x08,0xc0,
+ 0x00,0x60,0x00,0x00,0x10,0x80,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x04,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x03,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x03,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x03,0x00,0x00,0x02,0x04,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xc0,0x02,0x00,0x00,0x01,0x08,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x20,0x02,0x00,0x80,0x01,0x18,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x18,0x02,0x00,0x80,0x60,0x10,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x04,0x02,0x00,0x80,0x60,0x10,0xc0,
+ 0x00,0x40,0x00,0x00,0x10,0x80,0x00,0x00,0x0c,0x02,0x00,0x80,0x60,0x10,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x10,0x02,0x00,0x80,0x00,0x10,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x60,0x02,0x00,0x80,0x01,0x18,0xc0,
+ 0x00,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x80,0x02,0x00,0x00,0x01,0x08,0xc0,
+ 0x00,0x00,0x00,0x00,0xf0,0xff,0x00,0x00,0x00,0x03,0x00,0x00,0x02,0x04,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x03,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x3f,0x00,0x00,0x0c,0x0e,0xc0,
+ 0x00,0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x04,0x04,0x00,0x00,0x03,0x18,0xc0,
+ 0x00,0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x04,0x04,0x00,0x80,0x01,0x30,0xc0,
+ 0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x04,0x04,0x00,0x80,0x00,0x20,0xc0,
+ 0x00,0x20,0x00,0x00,0x40,0x40,0x00,0x00,0x04,0x04,0x00,0x40,0x00,0x40,0xc0,
+ 0x00,0x20,0x00,0x00,0x40,0x20,0x00,0x00,0x04,0x04,0x00,0x40,0x00,0x40,0xc0,
+ 0x00,0x20,0x00,0x00,0x80,0x20,0x00,0x00,0x04,0x04,0x00,0x20,0x00,0x80,0xc0,
+ 0x00,0x22,0x02,0x00,0x80,0x20,0x00,0x00,0x04,0x04,0x00,0x20,0x00,0x80,0xc0,
+ 0x00,0xfc,0x01,0x00,0x00,0x11,0x00,0x00,0x04,0x04,0x00,0x20,0x00,0x80,0xc0,
+ 0x00,0x70,0x00,0x00,0x00,0x11,0x00,0x00,0x04,0x04,0x00,0x20,0x00,0x80,0xc0,
+ 0x00,0x50,0x00,0x00,0x00,0x09,0x00,0x00,0x04,0x04,0x00,0x20,0x00,0x80,0xc0,
+ 0x00,0x50,0x00,0x00,0x00,0x0a,0x00,0x00,0x04,0x04,0x00,0x20,0x00,0x80,0xc0,
+ 0x00,0x88,0x00,0x00,0x00,0x06,0x00,0x00,0x04,0x04,0x00,0x40,0x00,0x40,0xc0,
+ 0x00,0x84,0x00,0x00,0x00,0x04,0x00,0x00,0xff,0x3f,0x00,0x40,0x00,0x40,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x20,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x30,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x18,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x06,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x01,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x08,0x00,0x00,0x00,0x0a,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x10,0x00,0x00,0x00,0x0a,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x40,0x00,0x00,0x00,0xf0,0x00,0xc0,
+ 0x00,0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x40,0x00,0x00,0x00,0x08,0x01,0xc0,
+ 0x00,0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x02,0xc0,
+ 0x00,0x20,0x00,0x00,0x80,0x20,0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x02,0xc0,
+ 0x00,0x20,0x00,0x00,0x80,0x20,0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x02,0xc0,
+ 0x00,0x20,0x00,0x00,0x40,0x40,0x00,0x00,0x40,0x00,0x00,0x00,0x04,0x02,0xc0,
+ 0x00,0x40,0x00,0x00,0x40,0x40,0x00,0x00,0x40,0x00,0x00,0x00,0x08,0x01,0xc0,
+ 0x00,0x40,0x00,0x00,0x20,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0xf0,0x00,0xc0,
+ 0x00,0x40,0x00,0x00,0x20,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0xf8,0x00,0x00,0x00,0x08,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0xf8,0x00,0x00,0x00,0x08,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0xfc,0x01,0x00,0x00,0x04,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0xfc,0x01,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0xfc,0x01,0x00,0x00,0x02,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0xfc,0x01,0x00,0x00,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0xf8,0x00,0x00,0x00,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x70,0x00,0x00,0x00,0x01,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
+ };
+
+
diff --git a/images/brel.xbm b/images/brel.xbm
new file mode 100644 (file)
index 0000000..ea4d261
--- /dev/null
@@ -0,0 +1,316 @@
+#define brel_width 123
+#define brel_height 291
+static char brel_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x0c,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
+ 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x18,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0xc0,0xff,0x07,0x00,0x20,0x00,0x00,0x00,0x00,0x06,0x00,
+ 0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x01,
+ 0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0xa0,0xff,0x0f,0x00,0x00,
+ 0x03,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+ 0x00,0x0c,0x00,0x00,0x00,0x80,0x01,0x00,0xc0,0xff,0x07,0x00,0x20,0x00,0x00,
+ 0x00,0x00,0x30,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,
+ 0xff,0x0f,0x00,0x00,0x00,0x03,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x20,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0xc0,0xff,0x07,
+ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,0xff,0x0f,
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
+ 0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+ 0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+ 0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x00,0x01,0x00,0x00,0x04,0x00,0x00,0x80,0x03,0x04,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x38,0x00,0x00,0x40,0x04,0x04,0x00,0x00,
+ 0x08,0x00,0x00,0x80,0x1f,0x00,0x00,0x00,0xc0,0x0f,0x00,0x60,0x08,0x06,0x00,
+ 0x00,0x08,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x38,0x00,0x00,0x20,0x30,0x02,
+ 0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x04,0x00,0x00,0x20,0xc0,
+ 0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xf0,0xff,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+ 0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+ 0x00,0x00,0x04,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x04,0x00,0x00,0x80,0x03,0x04,0x00,0x00,
+ 0x08,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x38,0x00,0x00,0x40,0x04,0x04,0x00,
+ 0x00,0x08,0x00,0x00,0x80,0x1f,0x00,0x00,0x00,0xc0,0x0f,0x00,0x60,0x08,0x06,
+ 0x00,0x00,0x08,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x38,0x00,0x00,0x20,0x30,
+ 0x02,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x04,0x00,0x00,0x20,
+ 0xc0,0x01,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x01,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+ 0x01,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x80,
+ 0xff,0x07,0x00,0x00,0xff,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x22,0x00,0x00,0x00,0x40,0x10,0x00,0x20,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x22,0x00,0x00,0x00,0x30,0x0c,0x00,0xc0,0x30,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x22,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,0xc3,0x00,0x00,0xc0,0x00,
+ 0x06,0x00,0x00,0x22,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x0c,0x03,0x00,0x00,
+ 0x83,0x01,0x00,0x00,0x22,0x00,0x00,0x80,0x20,0x00,0x00,0x00,0x10,0x04,0x00,
+ 0x00,0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x60,0x18,0x00,0x00,0x00,0x60,0x18,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x18,0x06,0x00,0x00,0x00,0x80,
+ 0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x30,0x0c,0x00,0x00,0x00,
+ 0xc0,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x40,0x30,0x00,0x00,
+ 0x00,0x30,0x08,0x00,0x00,0x7c,0x00,0x00,0x00,0x22,0x00,0x00,0x80,0x41,0x00,
+ 0x00,0x00,0x08,0x06,0x00,0x00,0x83,0x01,0x00,0x00,0x22,0x00,0x00,0x00,0x86,
+ 0x01,0x00,0x00,0x86,0x01,0x00,0x80,0x00,0x02,0x00,0x00,0x22,0x00,0x00,0x00,
+ 0x18,0x06,0x00,0x80,0x61,0x00,0x00,0x40,0x00,0x04,0x00,0x00,0x22,0x00,0x00,
+ 0x00,0x60,0x18,0x00,0x60,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x03,0x00,0x80,0xff,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,
+ 0x00,0x80,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x06,0x00,0x40,0x0c,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x04,0x00,0x20,0x10,0x02,0x00,0x04,0x00,0x04,0x00,0x40,0x00,0x00,0x00,
+ 0x00,0x00,0x08,0x00,0x20,0xe0,0x01,0x00,0x04,0x00,0x02,0x00,0x40,0x00,0x00,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x01,0x00,0x40,0x00,
+ 0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x03,0x04,0x00,0x60,0xc0,0x00,0x00,0x40,
+ 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x40,0x0c,0x04,0x00,0x80,0x3f,0x00,0x00,
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x20,0x10,0x02,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x06,0x00,0x20,0xe0,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfc,0x03,0x00,0x80,0xff,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x03,0x00,0x80,0xff,0x00,0x00,
+ 0x80,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,
+ 0x00,0x40,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x06,0x00,0x60,0x08,0x06,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x04,0x00,0x20,0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+ 0x00,0x00,0x08,0x00,0x20,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x40,0x00,
+ 0x00,0x00,0x00,0x00,0x08,0x00,0x80,0xff,0x0f,0x00,0xe0,0xc0,0x00,0x00,0x40,
+ 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x00,
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x02,
+ 0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x04,0x00,
+ 0x04,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x03,0x00,0x80,0xff,0x0f,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xfc,0x03,0x00,0x80,0xff,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x80,0xff,0x0f,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xc0,0xff,0x07,0x00,0xc0,
+ 0xff,0x07,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x00,0x40,0x00,0x00,0x00,
+ 0x00,0x00,0x04,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x00,0x40,0x00,0x00,
+ 0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x40,0x00,
+ 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x40,
+ 0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,
+ 0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x80,0xff,0x0f,0x00,0xc0,0xff,0x07,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
+ 0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x08,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x80,0xff,0x0f,
+ 0x00,0xc0,0xff,0x07,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x04,0x00,0x00,0xc0,0xff,0x07,0x00,0xc0,0xff,0x07,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xc0,0xff,0x07,0x00,0xc0,
+ 0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,
+ 0x00,0xf8,0x01,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x01,
+ 0x00,0x00,0x06,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,
+ 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x07,0x07,0x00,0x00,
+ 0x21,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x40,0x8c,0x00,0x00,
+ 0x80,0x20,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x20,0x58,0x00,
+ 0x00,0x80,0x10,0x00,0x00,0x80,0xff,0x01,0x00,0x00,0xff,0x03,0x00,0x20,0x30,
+ 0x00,0x00,0x80,0xff,0x01,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x20,
+ 0x20,0x00,0x00,0x80,0x10,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x02,0x00,
+ 0x20,0x70,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,
+ 0x00,0x60,0xd0,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+ 0x01,0x00,0x40,0x88,0x01,0x00,0x00,0x09,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x80,0x07,0x07,0x00,0x00,0x06,0x00,0x00,0x00,0xf8,0x01,0x00,
+ 0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x30,0x00,0x0c,
+ 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xd0,0x00,
+ 0x0b,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,0x01,0x00,0x00,0xff,0x07,0x00,0x10,
+ 0x83,0x08,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,0x00,
+ 0x10,0x6c,0x08,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x04,
+ 0x00,0x10,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,
+ 0x04,0x00,0x10,0x38,0x08,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,
+ 0x00,0x04,0x00,0x10,0x46,0x08,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,
+ 0x00,0x00,0x04,0x00,0x10,0x81,0x09,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,
+ 0x00,0x00,0x00,0x04,0x00,0xd0,0x00,0x0a,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
+ 0x00,0x00,0x00,0x00,0x04,0x00,0x30,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00};
+
+
diff --git a/images/build.xpm b/images/build.xpm
new file mode 100644 (file)
index 0000000..caf50d2
--- /dev/null
@@ -0,0 +1,29 @@
+/* XPM */
+static char *build_xpm[] = {
+"20 20 4 1",
+".     c black",
+"      c #BFBFBFBFBFBF",
+"+     c white",
+"O     c red",
+"     ...            ",
+"   ...O...          ",
+"   .OO.OO.          ",
+"  ..O...O..         ",
+"  .OO..OOO.         ",
+"  ..OO.OO..         ",
+"   .OOOOO....       ",
+"   ...O....+.  .    ",
+"     ...+.+++..+.   ",
+"     .++++++++++..  ",
+"      .+++...+++.   ",
+"      .++.+. .++.   ",
+"    ..++.+.   .++.. ",
+"    .+++..    .+++. ",
+"    ...+.+.   .+... ",
+"      .++.+. .++.   ",
+"      .+++...+++.   ",
+"     .+++++++++++.  ",
+"      .+..+++..+.   ",
+"       .  .+.  .    ",
+"          ...       "};
+
diff --git a/images/close.xpm b/images/close.xpm
new file mode 100644 (file)
index 0000000..df60955
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * close_xpm[] = {
+"20 20 5 1",
+"      c #BFBFBFBFBFBF",
+".     c #7B7B00000000",
+"X     c #000000000000",
+"o     c #9A9A94949494",
+"O     c #E5E5E0E0E1E1",
+"               .... ",
+"               ..   ",
+"               . .. ",
+" XXXXX         .   .",
+"XXooooX            .",
+"XooooooXXXXXXXX    .",
+"XoooooooooooooX   . ",
+"XoooooooooooooX     ",
+"XoooooooooooooX     ",
+"XooooXXXXXXXXXXXXXXX",
+"XooooXOOOOOOOOOOOOOX",
+"XoooXOOOOOOOOOOOOOX ",
+"XoooXOOOOOOOOOOOOOX ",
+"XooXOOOOOOOOOOOOOX  ",
+"XooXOOOOOOOOOOOOOX  ",
+"XoXOOOOOOOOOOOOOX   ",
+"XoXOOOOOOOOOOOOOX   ",
+"XXOOOOOOOOOOOOOX    ",
+"XXOOOOOOOOOOOOOX    ",
+"XXXXXXXXXXXXXXX     "};
+
+
diff --git a/images/close_bw.xpm b/images/close_bw.xpm
new file mode 100644 (file)
index 0000000..e1a7b69
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * close_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"20 20 2 1",
+/* colors */
+"      c #BFBFBFBFBFBF",
+".     c black",
+/* pixels */
+"               .... ",
+"               ..   ",
+"               . .. ",
+" .....         .   .",
+" .....             .",
+"...............    .",
+"...............   . ",
+"...............  .  ",
+"...............     ",
+"....................",
+"...... . . . . .. ..",
+"..... . .. . . . .. ",
+"..... . . . . . . . ",
+".... . . . . . . .  ",
+"..... . . . . . ..  ",
+".... . . . . . ..   ",
+"... . . . . . . .   ",
+"... . . . . . ..    ",
+".. . . . . . . .    ",
+"...............     "};
+
+
diff --git a/images/copy.xpm b/images/copy.xpm
new file mode 100644 (file)
index 0000000..2e2a16b
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * copy_xpm[] = {
+"20 20 5 1",
+"      c #000000000000",
+".     c #BFBFBFBFBFBF",
+"X     c #FFFFFFFFFFFF",
+"o     c navy",
+"O     c #B2B2ABABACAC",
+"         ...........",
+" XXXXXXX  ......o...",
+" XXXXXXX O .....o...",
+" X     X    ..ooooo.",
+" XXXXXXXXXX ....o...",
+" X       XX ....o...",
+" XXXXXXXXXX ........",
+" X    XX         ...",
+" XXXXXXX XXXXXXX  ..",
+" X    XX XXXXXXX O .",
+" XXXXXXX X     X    ",
+" XXXXXXX XXXXXXXXXX ",
+" XXXXXXX X        X ",
+"         XXXXXXXXXX ",
+"........ X        X ",
+"........ XXXXXXXXXX ",
+"........ X        X ",
+"........ XXXXXXXXXX ",
+"........ XXXXXXXXXX ",
+"........            "};
+
+
diff --git a/images/copy_bw.xpm b/images/copy_bw.xpm
new file mode 100644 (file)
index 0000000..48778e6
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * copy_xpm[] = {
+"20 20 5 1",
+"      c black",
+".     c #BFBFBFBFBFBF",
+"X     c #BFBFBFBFBFBF",
+"o     c black",
+"O     c #BFBFBFBFBFBF",
+"         ...........",
+" XXXXXXX  ......o...",
+" XXXXXXX O .....o...",
+" X     X    ..ooooo.",
+" XXXXXXXXXX ....o...",
+" X       XX ....o...",
+" XXXXXXXXXX ........",
+" X    XX         ...",
+" XXXXXXX XXXXXXX  ..",
+" X    XX XXXXXXX O .",
+" XXXXXXX X     X    ",
+" XXXXXXX XXXXXXXXXX ",
+" XXXXXXX X        X ",
+"         XXXXXXXXXX ",
+"........ X        X ",
+"........ XXXXXXXXXX ",
+"........ X        X ",
+"........ XXXXXXXXXX ",
+"........ XXXXXXXXXX ",
+"........            "};
+
+
diff --git a/images/cut.xpm b/images/cut.xpm
new file mode 100644 (file)
index 0000000..4848412
--- /dev/null
@@ -0,0 +1,29 @@
+/* XPM */
+static char * cut_xpm[] = {
+"20 20 3 1",
+"     c #BFBFBFBFBFBF",
+".    c #000000000000",
+"X    c #7B7B00000000",
+"                    ",
+"                    ",
+"                    ",
+"                ..  ",
+"               ..   ",
+"  XXX         ..    ",
+" XXXXX       ..     ",
+" X   XX     ..      ",
+" X   XX    ..       ",
+" XXXXXX............ ",
+"  XXX    .........  ",
+"        ..          ",
+"    XXXX.           ",
+"   XXXXX            ",
+"  XX  XX            ",
+"  XX  XX            ",
+"  XX  XX            ",
+"   XXXX             ",
+"                    ",
+"                    "};
+
+
+
diff --git a/images/cut_bw.xpm b/images/cut_bw.xpm
new file mode 100644 (file)
index 0000000..82d189a
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * cut_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"                    ",
+"                    ",
+"                ..  ",
+"               ..   ",
+"  ...         ..    ",
+" .....       ..     ",
+" .   ..     ..      ",
+" .   ..    ..       ",
+" .................. ",
+"  ...    .........  ",
+"        ..          ",
+"    .....           ",
+"   .....            ",
+"  ..  ..            ",
+"  ..  ..            ",
+"  ..  ..            ",
+"   ....             ",
+"                    ",
+"                    "};
+
+
+
diff --git a/images/deco.xbm b/images/deco.xbm
new file mode 100644 (file)
index 0000000..1e3c705
--- /dev/null
@@ -0,0 +1,141 @@
+#define deco_width 137
+#define deco_height 90
+static unsigned char deco_bits[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x80, 0x01, 0x00,
+  0x00, 0xc0, 0x06, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x83, 0x07, 0x00, 0x00,
+  0xc0, 0x03, 0x0e, 0x70, 0x00, 0x00, 0xf0, 0x7f, 0xfc, 0x1f, 0x00, 0x00,
+  0x00, 0x3c, 0x00, 0x78, 0x00, 0x00, 0x30, 0x00, 0xf0, 0x0f, 0x00, 0x00,
+  0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x60, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0xaa, 0x02, 0x00, 0x00,
+  0x00, 0xa0, 0xaa, 0x00, 0x00, 0x00, 0x04, 0xa8, 0x2a, 0x40, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xaa, 0x02, 0x00, 0x00,
+  0x00, 0xa0, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x80, 0xff, 0xff, 0xff, 0x03, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x00, 0x00,
+  0x80, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xaa, 0x02, 0x00, 0x00,
+  0x00, 0xa0, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xaa, 0x02, 0x00, 0x00,
+  0x00, 0xa0, 0xaa, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xaa, 0x02, 0x00, 0x00,
+  0x00, 0xa0, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00,
+  0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0xaa, 0x02, 0x04, 0x00,
+  0x00, 0xa0, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x06, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc7, 0xff, 0x01, 0x00,
+  0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  };
+
+
diff --git a/images/deco.xpm b/images/deco.xpm
new file mode 100644 (file)
index 0000000..3023284
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * deco[] = {
+"20 20 3 1",
+"      c #BEFBBEFBBEFB",
+".     c #000000000000",
+"X     c #51445144FBEE",
+"                    ",
+"                    ",
+"              ...   ",
+"     ..........     ",
+"    ..........      ",
+"   ..               ",
+"   .  XXXXXXXX      ",
+"      XXXXXXXX      ",
+"      XX    XX      ",
+"      XX    XX      ",
+"      XX    XX      ",
+"      XX    XX      ",
+"      XX    XX      ",
+"      XX    XX      ",
+"      XX    XX      ",
+"      XXXXXXXX      ",
+"      XXXXXXXX      ",
+"                    ",
+"                    ",
+"                    "};
+
+
diff --git a/images/delim.xbm b/images/delim.xbm
new file mode 100644 (file)
index 0000000..2f81b46
--- /dev/null
@@ -0,0 +1,244 @@
+#define delim_width 164
+#define delim_height 136
+static unsigned char delim_bits[] = {
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x3f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x1c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00,
+  0x00, 0x05, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x05, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x20, 0x00, 0x00,
+  0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0xc0, 0x18, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0xb0, 0x28, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x90, 0x48, 0x00,
+  0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x20, 0x00, 0x00,
+  0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x80, 0x08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00,
+  0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x20, 0x00, 0x00,
+  0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x80, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x80, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x04, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x80, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xc0, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x1c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
+  0x00, 0x05, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x80, 0x0d, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xc0, 0x18, 0x00, 0x40, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0xa0, 0x28, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x90, 0x48, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x40, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x80, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x40, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x80, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x90, 0x48, 0x00, 0x40, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0xa0, 0x28, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0xc0, 0x18, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x80, 0x08, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x05, 0x00, 0xc0, 0x01, 0x00,
+  0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x3f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00,
+  0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20,
+  0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x08,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x80, 0x00, 0x00,
+  0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00,
+  0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x80, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10,
+  0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x20,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x80, 0x00, 0x00,
+  0x00, 0x10, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00,
+  0x00, 0x00, 0x08, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x80, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04,
+  0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x30, 0x00, 0x00,
+  0x00, 0xc0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x80, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x20, 0x00,
+  0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x80, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x90, 0x48, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x80,
+  0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xb0, 0x68, 0x00, 0x80, 0x00, 0x00,
+  0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0xc0, 0x18, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00,
+  0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x80, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x05, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x80, 0x00, 0x00,
+  0x00, 0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+  0x1c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00,
+  0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00,
+  0x00, 0x02, 0x00, 0x80, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x80, 0x00,
+  0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00,
+  0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00,
+  0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+  0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00,
+  0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x40, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
+  0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x10, 0x00,
+  0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+  0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00,
+  0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x01, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10,
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+  0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00,
+  0x00, 0x00, 0x02, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+  0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  };
+
+
diff --git a/images/delim.xpm b/images/delim.xpm
new file mode 100644 (file)
index 0000000..73fdf6b
--- /dev/null
@@ -0,0 +1,32 @@
+/* XPM */
+static char *delim[] = {
+/* width height num_colors chars_per_pixel */
+"    20    20        3            1",
+/* colors */
+". c #bebebe",
+"# c #000000",
+"a c #5151fb",
+/* pixels */
+"....................",
+"....................",
+"....................",
+"..###..........###..",
+"..###..aaaaaa..###..",
+"..##...aaaaaa...##..",
+"..##...aa..aa...##..",
+"..##...aa..aa...##..",
+"..##...aa..aa...##..",
+"..##...aa..aa...##..",
+"..##...aa..aa...##..",
+"..##...aa..aa...##..",
+"..##...aa..aa...##..",
+"..##...aa..aa...##..",
+"..##...aaaaaa...##..",
+"..###..aaaaaa..###..",
+"..###..........###..",
+"....................",
+"....................",
+"...................."
+};
+
+
diff --git a/images/delim0.xpm b/images/delim0.xpm
new file mode 100644 (file)
index 0000000..0b6d875
--- /dev/null
@@ -0,0 +1,42 @@
+/* XPM */
+static char *delim0[] = {
+/* width height num_colors chars_per_pixel */
+"    31    31        2            1",
+/* colors */
+"# c #a2a2a2",
+"a c #0000ff",
+/* pixels */
+"###############################",
+"###############################",
+"###############################",
+"###############################",
+"#######a#######################",
+"######a#############aa#########",
+"#####a###############a#########",
+"#####a################a########",
+"####a##################a#######",
+"####a##################a#######",
+"####a##################a#######",
+"###a####################a######",
+"###a####################a######",
+"###a####################a######",
+"###a####################a######",
+"###a####################a######",
+"###a####################a######",
+"###a####################a######",
+"###a####################a######",
+"###a####################a######",
+"####a##################a#######",
+"####a##################a#######",
+"####a##################a#######",
+"#####a################a########",
+"#####a###############a#########",
+"######a##############a#########",
+"#######a############a##########",
+"###############################",
+"###############################",
+"###############################",
+"###############################"
+};
+
+
diff --git a/images/depth.xpm b/images/depth.xpm
new file mode 100644 (file)
index 0000000..bdaab37
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * depth_xpm[] = {
+"20 20 5 1",
+"      c gray60",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #7B7B00000000",
+"O     c #BFBFBFBFBFBF",
+"                    ",
+".XXXXXXXXXXXXXXXXXX.",
+".XX..............XX.",
+".XXXXXXXXXXXXXXXXXX.",
+".XX..............XX.",
+".XXXXXXXXXXXXXXXXXX.",
+".XXXXXXooooooXXXXXX.",
+".XX.XXXXXXXXXXXX.XX.",
+"OX..XXXooooooXXX..XO",
+"O.....XXXXXXXX.....O",
+"OX..XXXooooooXXX..XO",
+".XX.XXXXXXXXXXXX.XX.",
+".XXXXXXooooooXXXXXX.",
+".XXXXXXXXXXXXXXXXXX.",
+".XXXXXXXXXXXXXXXXXX.",
+".XX..............XX.",
+".XXXXXXXXXXXXXXXXXX.",
+".XX..............XX.",
+".XXXXXXXXXXXXXXXXXX.",
+"                    "};
+
+
diff --git a/images/depth_bw.xpm b/images/depth_bw.xpm
new file mode 100644 (file)
index 0000000..08cc4cf
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * depth_xpm[] = {
+"20 20 3 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"X     c black",
+"                    ",
+"  ................  ",
+"                    ",
+"  ................  ",
+"                    ",
+"                    ",
+"                    ",
+"  X    ......    X  ",
+" XX              XX ",
+"XXXXX  ......  XXXXX",
+" XX              XX ",
+"  X    ......    X  ",
+"                    ",
+"       ......       ",
+"                    ",
+"                    ",
+"  ................  ",
+"                    ",
+"  ................  ",
+"                    "};
+
+
diff --git a/images/dots.xbm b/images/dots.xbm
new file mode 100644 (file)
index 0000000..38a2e63
--- /dev/null
@@ -0,0 +1,19 @@
+#define dots_width 72
+#define dots_height 18
+static char dots_bits[] = {
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0xc0, 0xcc, 0x00, 0x30, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0,
+   0xcc, 0x00, 0x30, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x30, 0x33, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x0c, 0x30, 0x33, 0x00,
+   0x00, 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+   0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+
diff --git a/images/down.xpm b/images/down.xpm
new file mode 100644 (file)
index 0000000..c6c90b7
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char *down_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"    11    11        4            1",
+/* colors */
+". c #656565",
+"# c #959595",
+"a c #b0b0b0",
+"b c #e0e0e0",
+/* pixels */
+"bbbbbbbbbbb",
+"bbbbbbbbb..",
+"#bbaaaaa..#",
+"#bbaaaaa..#",
+"##bbaaa..##",
+"##bbaaa..##",
+"###bba..###",
+"###bba..###",
+"####b..####",
+"####b..####",
+"#####.#####"
+};
+
+
diff --git a/images/emph.xpm b/images/emph.xpm
new file mode 100644 (file)
index 0000000..03e15ff
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * emph_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"         ..         ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"         ..         ",
+"                    ",
+"                    ",
+"         ..         ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"         ..         ",
+"                    ",
+"                    "};
+
+
diff --git a/images/emph_bw.xpm b/images/emph_bw.xpm
new file mode 100644 (file)
index 0000000..03e15ff
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * emph_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"         ..         ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"         ..         ",
+"                    ",
+"                    ",
+"         ..         ",
+"        ....        ",
+"        ....        ",
+"        ....        ",
+"         ..         ",
+"                    ",
+"                    "};
+
+
diff --git a/images/equation.xpm b/images/equation.xpm
new file mode 100644 (file)
index 0000000..39d9991
--- /dev/null
@@ -0,0 +1,32 @@
+/* XPM */
+static char *equation[] = {
+/* width height num_colors chars_per_pixel */
+"    20    20        3            1",
+/* colors */
+". c #bebebe",
+"# c #000000",
+"a c #5151fb",
+/* pixels */
+"....................",
+"....................",
+"....................",
+"...##############...",
+"....................",
+"...##############...",
+"....................",
+"....................",
+".......aaaaaa.......",
+".......a....a.......",
+".......a....a.......",
+".......aaaaaa.......",
+"....................",
+"....................",
+"...##############...",
+"....................",
+"...##############...",
+"....................",
+"....................",
+"...................."
+};
+
+
diff --git a/images/fig.xpm b/images/fig.xpm
new file mode 100644 (file)
index 0000000..9f8a0fb
--- /dev/null
@@ -0,0 +1,29 @@
+/* XPM */
+static char * fig_xpm[] = {
+"20 20 4 1",
+"      c #000000000000",
+".     c #FFFFFFFFFFFF",
+"X     c #7B7B00000000",
+"o     c gray70",
+"                    ",
+" .................. ",
+" ..              .. ",
+" .................. ",
+" ..              .. ",
+" .................. ",
+" ....XXXXXXXXXX.... ",
+" ....X........X.... ",
+" ....X....  ..X.... ",
+" ....X... .. .X.... ",
+" ....X.. oooo X.... ",
+" ....X. ooooooX.... ",
+" ....X oooooooX.... ",
+" ....XXXXXXXXXX.... ",
+" .................. ",
+" ..              .. ",
+" .................. ",
+" ..              .. ",
+" .................. ",
+"                    "};
+
+
diff --git a/images/fig_bw.xpm b/images/fig_bw.xpm
new file mode 100644 (file)
index 0000000..45f7449
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * fig_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"20 20 2 1",
+/* colors */
+"      c black",
+".     c #BFBFBFBFBFBF",
+/* pixels */
+"                    ",
+" .................. ",
+" ..              .. ",
+" .................. ",
+" ..              .. ",
+" .................. ",
+" ....          .... ",
+" .... ........ .... ",
+" .... ....  .. .... ",
+" .... ... .. . .... ",
+" .... ..       .... ",
+" .... .        .... ",
+" ....          .... ",
+" ....          .... ",
+" .................. ",
+" ..              .. ",
+" .................. ",
+" ..              .. ",
+" .................. ",
+"                    "};
+
+
diff --git a/images/foot.xpm b/images/foot.xpm
new file mode 100644 (file)
index 0000000..f27888b
--- /dev/null
@@ -0,0 +1,29 @@
+/* XPM */
+static char * foot_xpm[] = {
+"20 20 4 1",
+"      c gray60",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #7B7B00000000",
+"                    ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXX............... ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXX............... ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXX............... ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXX............... ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXXXXXXXXXXX.XX ",
+".XXXooooooooXXX..XX ",
+".XXXXXXXXXXXXX..... ",
+".XXXooooooooXXX..XX ",
+".XXXXXXXXXXXXXXX.XX ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXXXXXXXXXXXXXX ",
+"................... "};
+
+
diff --git a/images/foot_bw.xpm b/images/foot_bw.xpm
new file mode 100644 (file)
index 0000000..4881b5c
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * foot_xpm[] = {
+"20 20 2 1",
+"      c black",
+".     c #BFBFBFBFBFBF",
+"                    ",
+" .................. ",
+" ...              . ",
+" .................. ",
+" ...              . ",
+" .................. ",
+" ...              . ",
+" .................. ",
+" ...              . ",
+" .................. ",
+" .................. ",
+" .................. ",
+" .............. ... ",
+" ...        ..  ... ",
+" ............     . ",
+" ...        ..  ... ",
+" .............. ... ",
+" .................. ",
+" .................. ",
+"                    "};
+
+
diff --git a/images/frac.xpm b/images/frac.xpm
new file mode 100644 (file)
index 0000000..30696d5
--- /dev/null
@@ -0,0 +1,32 @@
+/* XPM */
+static char *frac[] = {
+/* width height num_colors chars_per_pixel */
+"    20    20        3            1",
+/* colors */
+". c #bebebe",
+"# c #5151fb",
+"a c #000000",
+/* pixels */
+"....................",
+"....................",
+".......######.......",
+".......#....#.......",
+".......#....#.......",
+".......#....#.......",
+".......#....#.......",
+".......######.......",
+"....................",
+"....aaaaaaaaaaaa....",
+"....aaaaaaaaaaaa....",
+"....................",
+".......######.......",
+".......#....#.......",
+".......#....#.......",
+".......#....#.......",
+".......#....#.......",
+".......######.......",
+"....................",
+"...................."
+};
+
+
diff --git a/images/free.xpm b/images/free.xpm
new file mode 100644 (file)
index 0000000..1a81e96
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * free_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"                    ",
+"                    ",
+"......            . ",
+".                 . ",
+".     ...  . ..  ...",
+".    .   . ..  .  . ",
+".... .   . .   .  . ",
+".    .   . .   .  . ",
+".    .   . .   .  . ",
+".    .   . .   .  . ",
+".     ...  .   .  ..",
+"                    ",
+"                    ",
+"          .         ",
+"          .         ",
+"        .....       ",
+"         ...        ",
+"          .         ",
+"                    "};
+
+
diff --git a/images/free_bw.xpm b/images/free_bw.xpm
new file mode 100644 (file)
index 0000000..0e2a58e
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * free_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"20 20 2 1",
+/* colors */
+"      c #BFBFBFBFBFBF",
+".     c black",
+/*333333333*/
+"                    ",
+"                    ",
+"                    ",
+"......            . ",
+".                 . ",
+".     ...  . ..  ...",
+".    .   . ..  .  . ",
+".... .   . .   .  . ",
+".    .   . .   .  . ",
+".    .   . .   .  . ",
+".    .   . .   .  . ",
+".     ...  .   .  ..",
+"                    ",
+"          .         ",
+"          .         ",
+"        .....       ",
+"         ...        ",
+"          .         ",
+"                    ",
+"                    "};
+
+
diff --git a/images/greek.xbm b/images/greek.xbm
new file mode 100644 (file)
index 0000000..2f18f9c
--- /dev/null
@@ -0,0 +1,322 @@
+#define Greek_width 182
+#define Greek_height 60
+static char Greek_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xc0,0xff,0x03,0x00,0x00,
+ 0x1c,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x04,0x00,0x00,0xf8,0xff,0x01,0x00,
+ 0xff,0x7f,0xc0,0x00,0x03,0x06,0x00,0x00,0x1c,0x00,0x00,0x80,0xc0,0x00,0x00,
+ 0x00,0x0e,0x00,0x00,0xf8,0xff,0x01,0x00,0x0c,0x18,0xc0,0x00,0x03,0x04,0x00,
+ 0x00,0x3a,0x00,0x00,0x60,0x00,0x01,0x00,0x00,0x0e,0x00,0x00,0x08,0x00,0x01,
+ 0x00,0x0c,0x18,0xc0,0x00,0x03,0x04,0x00,0x00,0x32,0x00,0x00,0x20,0x00,0x03,
+ 0x00,0x00,0x0d,0x00,0x00,0x08,0x00,0x01,0x00,0x0c,0x18,0xc0,0x00,0x03,0x04,
+ 0x00,0x00,0x71,0x00,0x00,0x30,0x00,0x02,0x00,0x00,0x19,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x0c,0x18,0xc0,0x00,0x03,0x00,0x00,0x00,0x61,0x00,0x00,0x30,0x00,
+ 0x06,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x18,0xc0,0x00,0x03,
+ 0x00,0x00,0x80,0xe0,0x00,0x00,0x78,0x80,0x06,0x00,0x80,0x18,0x00,0x00,0x20,
+ 0x40,0x00,0x00,0x0c,0x18,0xc0,0x00,0x03,0x00,0x00,0x80,0xc0,0x00,0x00,0x98,
+ 0xff,0x06,0x00,0x80,0x30,0x00,0x00,0xe0,0x7f,0x00,0x00,0x0c,0x18,0xc0,0x00,
+ 0x03,0x00,0x00,0x40,0xc0,0x01,0x00,0x98,0xff,0x06,0x00,0x80,0x30,0x00,0x00,
+ 0xe0,0x7f,0x00,0x00,0x0c,0x18,0xc0,0x00,0x03,0x00,0x00,0x40,0x80,0x01,0x00,
+ 0x78,0x80,0x06,0x00,0x40,0x30,0x00,0x00,0x20,0x40,0x00,0x00,0x0c,0x18,0xc0,
+ 0x00,0x03,0x00,0x00,0x20,0x80,0x01,0x00,0x30,0x00,0x06,0x00,0x40,0x60,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x0c,0x18,0xc0,0x00,0x03,0x00,0x00,0x20,0x00,0x03,
+ 0x00,0x30,0x00,0x03,0x00,0x40,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x18,
+ 0xc0,0x00,0x03,0x00,0x00,0x10,0x00,0x03,0x00,0x70,0x00,0x03,0x00,0x20,0x60,
+ 0x00,0x00,0x08,0x00,0x01,0x00,0x0c,0x18,0xc0,0x00,0x03,0x00,0x00,0x10,0x00,
+ 0x06,0x00,0x60,0x80,0x01,0x00,0x20,0xc0,0x00,0x00,0x08,0x00,0x01,0x00,0x0c,
+ 0x18,0xc0,0x00,0x03,0x00,0x00,0xf0,0xff,0x07,0x00,0xc0,0xe1,0x00,0x00,0x20,
+ 0xc0,0x00,0x00,0xf8,0xff,0x01,0x00,0x0c,0x18,0xc0,0xc0,0x1f,0x00,0x00,0xf8,
+ 0xff,0x0f,0x00,0x00,0x3f,0x00,0x00,0xf8,0xf0,0x03,0x00,0xf8,0xff,0x01,0x00,
+ 0x3f,0x7e,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xc0,0xff,0x07,
+ 0x00,0xe0,0xc0,0x01,0x00,0x80,0xff,0x00,0x00,0x80,0x7f,0x00,0x00,0xc0,0x1f,
+ 0x00,0x00,0x00,0x00,0xc0,0x80,0x01,0x0e,0x00,0xf0,0xe1,0x03,0x00,0x00,0x0c,
+ 0x00,0x00,0x00,0x0c,0x00,0x00,0x60,0x30,0x00,0x00,0x00,0x00,0xc0,0x80,0x03,
+ 0x08,0x00,0x18,0x33,0x02,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x38,
+ 0x60,0x00,0x00,0x00,0x00,0xc0,0x00,0x03,0x08,0x00,0x08,0x12,0x04,0x00,0x00,
+ 0x3f,0x00,0x00,0x38,0x0c,0x07,0x00,0x18,0xc0,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x06,0x08,0x00,0x00,0x1e,0x00,0x00,0xc0,0xcc,0x01,0x00,0x30,0x0c,0x03,0x00,
+ 0x1c,0xc0,0x01,0x00,0x00,0x00,0xc0,0x00,0x0e,0x00,0x00,0x00,0x0c,0x00,0x00,
+ 0x60,0x0c,0x03,0x00,0x60,0x8c,0x01,0x00,0x1c,0xc0,0x01,0x00,0x00,0x00,0xc0,
+ 0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x30,0x0c,0x06,0x00,0x60,0x8c,0x01,
+ 0x00,0x1c,0xc0,0x01,0x00,0x00,0x00,0xc0,0x00,0x18,0x00,0x00,0x00,0x0c,0x00,
+ 0x00,0x30,0x0c,0x06,0x00,0x60,0x8c,0x01,0x00,0x18,0xc0,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x18,0x00,0x00,0x00,0x0c,0x00,0x00,0x30,0x0c,0x06,0x00,0x60,0x8c,
+ 0x01,0x00,0x18,0xc0,0x00,0x00,0x00,0x00,0xc0,0x00,0x08,0x00,0x00,0x00,0x0c,
+ 0x00,0x00,0x30,0x0c,0x06,0x00,0x60,0x8c,0x01,0x00,0x10,0x60,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x04,0x00,0x00,0x00,0x0c,0x00,0x00,0x60,0x0c,0x03,0x00,0xc0,
+ 0xcc,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0xc0,0x00,0x04,0x08,0x00,0x00,
+ 0x0c,0x00,0x00,0xc0,0x8c,0x01,0x00,0x80,0x6d,0x00,0x00,0x20,0x20,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x02,0x08,0x00,0x00,0x0c,0x00,0x00,0x00,0x7f,0x00,0x00,
+ 0x00,0x3f,0x00,0x00,0x44,0x10,0x01,0x00,0x00,0x00,0xc0,0x00,0x01,0x08,0x00,
+ 0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x00,0x44,0x10,0x01,
+ 0x00,0x00,0x00,0xc0,0x80,0x00,0x0e,0x00,0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,
+ 0x00,0x00,0x0c,0x00,0x00,0x7c,0xf0,0x00,0x00,0x00,0x00,0xc0,0xc0,0xff,0x07,
+ 0x00,0x80,0x7f,0x00,0x00,0x80,0xff,0x00,0x00,0x80,0x7f,0x00,0x00,0x78,0xf0,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0
+ };
+#define greek_width 199
+#define greek_height 132
+static char greek_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xf8,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x80,
+ 0x00,0x00,0x00,0x00,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x80,0x00,0x78,0x00,0x00,0x40,
+ 0x60,0x00,0x00,0x38,0x04,0x00,0x00,0x18,0x00,0x00,0x00,0x1c,0x00,0x00,0xc0,
+ 0x03,0x00,0x00,0x03,0x80,0x00,0x8c,0x00,0x00,0x40,0x3e,0x00,0x00,0x3e,0x04,
+ 0x00,0x00,0x36,0x00,0x00,0x00,0x02,0x00,0x00,0x30,0x04,0x00,0x00,0x01,0x80,
+ 0x00,0x06,0x09,0x00,0x20,0x40,0x00,0x00,0x62,0x02,0x00,0x00,0x61,0x00,0x00,
+ 0x00,0x03,0x00,0x00,0x08,0x00,0x00,0x80,0x00,0x80,0x00,0x03,0x09,0x00,0x20,
+ 0x40,0x00,0x00,0x41,0x02,0x00,0x80,0x41,0x00,0x00,0x00,0x01,0x00,0x00,0x08,
+ 0x00,0x00,0x80,0x00,0x80,0x00,0x01,0x05,0x00,0x20,0x40,0x00,0x00,0x41,0x01,
+ 0x00,0xc0,0x40,0x00,0x00,0x80,0x01,0x00,0x00,0xf0,0x00,0x00,0xc0,0x00,0x80,
+ 0x80,0x01,0x03,0x00,0x20,0x40,0x00,0x00,0x80,0x01,0x00,0xc0,0x40,0x00,0x00,
+ 0x80,0x0f,0x00,0x00,0x68,0x00,0x00,0x40,0x00,0x80,0x80,0x01,0x03,0x00,0x10,
+ 0x60,0x00,0x00,0x80,0x01,0x00,0xc0,0x20,0x00,0x00,0x80,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0x40,0x00,0x80,0x80,0x01,0x01,0x00,0x10,0x20,0x00,0x00,0x80,0x00,
+ 0x00,0x40,0x20,0x00,0x00,0x80,0x00,0x00,0x00,0x02,0x00,0x00,0x40,0x00,0x80,
+ 0x80,0x81,0x01,0x00,0x10,0x10,0x00,0x00,0x80,0x00,0x00,0xc0,0x10,0x00,0x00,
+ 0x80,0x00,0x00,0x00,0x02,0x02,0x00,0xc0,0x00,0x80,0x00,0x61,0x09,0x00,0x30,
+ 0x08,0x00,0x00,0x80,0x00,0x00,0x80,0x18,0x00,0x00,0x00,0x11,0x00,0x00,0x06,
+ 0x01,0x00,0x80,0x01,0x80,0x00,0x1e,0x06,0x00,0x48,0x04,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x0f,0x00,0x00,0x00,0x0e,0x00,0x00,0xfc,0x00,0x00,0x00,0x0f,0x80,
+ 0x00,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x80,0x00,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x20,0x80,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x40,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,
+ 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x80,0x00,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x1c,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x60,0x02,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x11,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x10,0x02,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x80,0x10,0x00,0x00,0x10,0x06,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0xc0,
+ 0x10,0x00,0x00,0x10,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0xc6,0x01,0x00,0x40,0x18,0x00,0x00,0x27,0x02,
+ 0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x02,0x80,
+ 0x00,0x29,0x02,0x00,0x40,0x18,0x00,0x00,0x45,0x02,0x00,0x00,0x08,0x00,0x00,
+ 0x00,0x61,0x00,0x00,0x80,0x01,0x00,0x00,0x82,0x80,0x00,0x19,0x02,0x00,0xe0,
+ 0x1f,0x00,0x80,0x84,0x03,0x00,0x00,0x08,0x00,0x00,0x00,0x59,0x00,0x00,0x00,
+ 0x01,0x00,0x00,0xc2,0x80,0x00,0x09,0x02,0x00,0x60,0x08,0x00,0x80,0x04,0x07,
+ 0x00,0x00,0x0c,0x00,0x00,0x80,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x43,0x80,
+ 0x00,0x0c,0x02,0x00,0x60,0x08,0x00,0x00,0x04,0x03,0x00,0x00,0x04,0x00,0x00,
+ 0x80,0x03,0x00,0x00,0x80,0x03,0x00,0x00,0x43,0x80,0x00,0x0c,0x02,0x00,0x20,
+ 0x0c,0x00,0x00,0x86,0x01,0x00,0x00,0x04,0x00,0x00,0x80,0x1e,0x00,0x00,0x40,
+ 0x02,0x00,0x00,0x41,0x80,0x00,0x04,0x01,0x00,0x20,0x04,0x00,0x00,0x82,0x01,
+ 0x00,0x00,0x04,0x00,0x00,0x80,0x10,0x00,0x00,0x20,0x02,0x00,0x00,0x61,0x80,
+ 0x00,0x04,0x01,0x00,0x20,0x04,0x00,0x00,0x82,0x00,0x00,0x00,0x26,0x00,0x00,
+ 0x80,0x90,0x00,0x00,0x30,0x06,0x00,0x00,0x61,0x81,0x00,0x06,0x01,0x00,0x20,
+ 0x02,0x00,0x00,0xc2,0x00,0x00,0x00,0x22,0x00,0x00,0xc0,0x90,0x00,0x00,0x18,
+ 0x04,0x00,0x80,0x21,0x81,0x00,0x06,0x01,0x00,0x40,0x01,0x00,0x00,0x42,0x00,
+ 0x00,0x00,0x12,0x00,0x00,0x40,0x50,0x00,0x00,0x08,0x04,0x00,0x80,0xb1,0x80,
+ 0x00,0x82,0x01,0x00,0xc0,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x0c,0x00,0x00,
+ 0x40,0x70,0x00,0x00,0x04,0x0c,0x00,0x80,0xce,0x80,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x80,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x80,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x08,0x02,0x00,0x80,0x00,0x00,0x00,0xfe,0x07,0x00,0xf0,0xff,0x07,0x00,
+ 0x00,0x3c,0x00,0x00,0xf0,0x0f,0x00,0x00,0xf8,0x80,0x00,0x07,0x03,0x00,0x80,
+ 0x00,0x00,0x00,0xff,0x07,0x00,0xf8,0xff,0x07,0x00,0x00,0x26,0x00,0x00,0xf8,
+ 0x0f,0x00,0x00,0x86,0x80,0x00,0x04,0x03,0x00,0x80,0x00,0x00,0x80,0x49,0x00,
+ 0x00,0x28,0x00,0x02,0x00,0x00,0x63,0x00,0x00,0x8c,0x01,0x00,0x00,0x01,0x80,
+ 0x00,0x04,0x01,0x00,0x00,0x1f,0x00,0x80,0x48,0x00,0x00,0x24,0x00,0x02,0x00,
+ 0x00,0x41,0x00,0x00,0x82,0x01,0x00,0x00,0x01,0x80,0x00,0x86,0x01,0x00,0xc0,
+ 0x00,0x00,0x00,0x48,0x00,0x00,0x10,0x04,0x02,0x00,0x80,0x61,0x00,0x00,0x02,
+ 0x01,0x00,0x80,0x00,0x80,0x00,0x86,0x00,0x00,0x40,0x00,0x00,0x00,0x44,0x00,
+ 0x00,0x10,0x04,0x01,0x00,0x80,0x61,0x00,0x00,0x83,0x01,0x00,0x80,0x00,0x80,
+ 0x00,0x42,0x00,0x00,0x20,0x00,0x00,0x00,0x44,0x00,0x00,0x10,0x04,0x01,0x00,
+ 0x80,0x60,0x00,0x00,0x81,0x01,0x00,0x80,0x00,0x80,0x00,0x22,0x00,0x00,0x20,
+ 0x00,0x00,0x00,0x44,0x00,0x00,0x10,0x06,0x01,0x00,0x80,0x20,0x00,0x00,0x81,
+ 0x00,0x00,0x80,0x03,0x80,0x00,0x12,0x00,0x00,0x20,0x00,0x00,0x00,0x42,0x00,
+ 0x00,0x10,0xcd,0x00,0x00,0xc0,0x30,0x00,0x00,0xc1,0x00,0x00,0x00,0x0f,0x80,
+ 0x00,0x0b,0x00,0x00,0x60,0x00,0x00,0x00,0xc2,0x00,0x00,0xf0,0x79,0x00,0x00,
+ 0xc0,0x19,0x00,0x00,0x41,0x00,0x00,0x00,0x1c,0x80,0x00,0x07,0x00,0x00,0xc0,
+ 0x01,0x00,0x00,0xc3,0x00,0x00,0x70,0x38,0x00,0x00,0x40,0x06,0x00,0x00,0x3e,
+ 0x00,0x00,0x00,0x30,0x80,0x00,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x0c,0x80,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x80,0x00,0xf8,0x07,0x00,0x60,
+ 0x20,0x00,0x00,0x40,0x00,0x00,0x40,0xe0,0x00,0x00,0xe0,0x00,0x00,0x00,0x86,
+ 0x08,0x00,0x00,0x00,0x83,0x00,0xfc,0x07,0x00,0xd0,0x70,0x00,0x00,0xf0,0x01,
+ 0x00,0xc0,0xf0,0x01,0x00,0x90,0x81,0x00,0x00,0x85,0x18,0x00,0xc0,0x00,0x83,
+ 0x00,0x24,0x00,0x00,0xc8,0x60,0x00,0x00,0x4c,0x02,0x00,0x40,0x18,0x01,0x00,
+ 0x80,0x41,0x00,0x80,0x4c,0x18,0x00,0x40,0x00,0x82,0x00,0x22,0x00,0x00,0x48,
+ 0x20,0x00,0x00,0x22,0x04,0x00,0x20,0x08,0x01,0x00,0x00,0x23,0x00,0x80,0x44,
+ 0x08,0x00,0x20,0x00,0x82,0x00,0x20,0x00,0x00,0x40,0x20,0x00,0x00,0x22,0x04,
+ 0x00,0x20,0x04,0x01,0x00,0x00,0x13,0x00,0x00,0x44,0x08,0x00,0x20,0x08,0x82,
+ 0x00,0x20,0x00,0x00,0x60,0x20,0x00,0x00,0x23,0x06,0x00,0x20,0x04,0x01,0x00,
+ 0x00,0x0b,0x00,0x00,0x46,0x08,0x00,0x20,0x08,0x81,0x00,0x20,0x00,0x00,0x20,
+ 0x20,0x00,0x00,0x21,0x06,0x00,0x20,0x82,0x00,0x00,0x00,0x0a,0x00,0x00,0x22,
+ 0x08,0x00,0x20,0x04,0x81,0x00,0x30,0x00,0x00,0x20,0x10,0x00,0x00,0x11,0x02,
+ 0x00,0x20,0x82,0x00,0x00,0x00,0x06,0x00,0x00,0x22,0x04,0x00,0x20,0x84,0x80,
+ 0x00,0x10,0x00,0x00,0x20,0x08,0x00,0x00,0x11,0x03,0x00,0x40,0x42,0x00,0x00,
+ 0x00,0x06,0x00,0x00,0x22,0x02,0x00,0x20,0xce,0x80,0x00,0x10,0x00,0x00,0x20,
+ 0x08,0x00,0x00,0x92,0x01,0x00,0xc0,0x22,0x00,0x00,0x00,0x05,0x00,0x00,0x22,
+ 0x01,0x00,0xe0,0x7b,0x80,0x00,0x10,0x00,0x00,0xc0,0x07,0x00,0x00,0xd6,0x00,
+ 0x00,0x80,0x1f,0x00,0x00,0x00,0x05,0x00,0x00,0x9c,0x00,0x00,0xc0,0x39,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,
+ 0x80,0x0c,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x40,0x0c,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x01,0x00,0x00,0x20,0x08,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,
+ 0x20,0x58,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x80,0x01,0x00,0x00,0x10,0x70,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80
+ };
+
+
diff --git a/images/layout_code.xpm b/images/layout_code.xpm
new file mode 100644 (file)
index 0000000..d5be2fc
--- /dev/null
@@ -0,0 +1,31 @@
+/* XPM */
+static char * layout_code_xpm[] = {
+"20 20 4 1",
+"      c gray50",
+".     c black",
+"X     c white",
+"+      c #7B7B00000000",
+".XXXXXXXXXXXXXXXXXX ",
+".X..........XXXXXXX ",
+".XXXXXXXXXXXXXXXXXX ",
+".X..........XXXXXXX ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXX..........XXXX ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXXX.........XX ",
+".XXXXXXXXXXXXXXXXXX ",
+".X............XXXXX ",
+".XXXXXXXXXXX++++XXX ",
+".X.......X++++++++X ",
+".XXXXXXXXX+++XX+++X ",
+".XXXX...X+++XXXXXXX ",
+".XXXXXXXX+++XXXXXXX ",
+".XXXX...XX+++XX+++X ",
+".XXXXXXXXX++++++++X ",
+".X.......XXX++++XXX ",
+".XXXXXXXXXXXXXXXXXX ",
+"................... "};
+
+
+
+
diff --git a/images/layout_latex.xpm b/images/layout_latex.xpm
new file mode 100644 (file)
index 0000000..b541b8a
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * layout_latex_xpm[] = {
+"20 20 4 1",
+"      c gray60",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #7B7B00000000",
+"                    ",
+"XXXXXXXXXXXXXXXXXXXX",
+"XXXX...............X",
+"XXXXXXXXXXXXXXXXXXXX",
+"XXXX...............X",
+"XXXXXXXXXXXXXXXXXXXX",
+"XXXX...............X",
+"XXXXXXXXXXXXXXXXXXXX",
+"XXXX...............X",
+"XXXXXXXXXXXXXXXXXXXX",
+"X.XXXXXX.....XX.XXX.",
+"X.XXXXXXXX.XXXXX.X.X",
+"X.XXXXXXXX.XXXXX.X.X",
+"X.XXXX..XX.X...XX.XX",
+"X.XXX.XX.X.X.XXX.X.X",
+"X.XXX.XX.X.X.XXX.X.X",
+"X...X.XX.X.X..X.XXX.",
+"XXXXX....XXX.XXXXXXX",
+"XXXXX.XX.XXX.XXXXXXX",
+"XXXXX.XX.XXX...XXXXX",
+"................... "};
+
+
diff --git a/images/layout_scrap.xpm b/images/layout_scrap.xpm
new file mode 100644 (file)
index 0000000..13f98e7
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char *layout_scrap_xpm[] = {
+" 20 20 3 1",
+". c gray30",
+"  c #BFBFBFBFBFBF",
+"c c black",
+"c                  c",
+" c           .c.c.. ",
+" ..ccc.c.  c.    c  ",
+" c c     c     .c.  ",
+" c  c.      c. c c  ",
+" c  . cc  c.  c  c  ",
+"  .  c  .c   c   .  ",
+"  c  c      c.   c  ",
+"  .  .c   .  c    c ",
+" c   .  .c    c    c",
+"c..c.c.c.c.c.c..c.c.",
+" c   .  .c    c    c",
+"  .  .c   .  c    c ",
+"  c  c      c.   c  ",
+"  .  c  .c   c   .  ",
+" c  . cc  c.  c  c  ",
+" c  c.      .c.c c  ",
+" ..ccc.c. c.     c  ",
+" c          c.c.c.. ",
+"c                  c",
+};
diff --git a/images/layout_sec.xpm b/images/layout_sec.xpm
new file mode 100644 (file)
index 0000000..2c2568e
--- /dev/null
@@ -0,0 +1,29 @@
+/* XPM */
+static char * layout_sec_xpm[] = {
+"20 20 4 1",
+"      c gray60",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #7B7B00000000",
+"                    ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXX............... ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXX............... ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXX............... ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXX............... ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXX..XXXXXXX..XXXX ",
+".XX.X.XXXXXX.X.XXXX ",
+".XXXX.XXXXXXXX.XXXX ",
+".XXXX.XXXXXXXX.XXXX ",
+".XXXX.XXXXXXXX.XXXX ",
+".XXXX.XXXXXXXX.XXXX ",
+".XX.....X..X.....XX ",
+".XXXXXXXXXXXXXXXXXX ",
+"................... "};
+
+
diff --git a/images/layout_std.xpm b/images/layout_std.xpm
new file mode 100644 (file)
index 0000000..a689d7d
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * layout_std_xpm[] = {
+"20 20 3 1",
+"      c gray50",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                    ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXX............ ",
+".XXXXXXXXXXXXXXXXXX ",
+".X................. ",
+".XXXXXXXXXXXXXXXXXX ",
+".X................. ",
+".XXXXXXXXXXXXXXXXXX ",
+".X................. ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXX............ ",
+".XXXXXXXXXXXXXXXXXX ",
+".X................. ",
+".XXXXXXXXXXXXXXXXXX ",
+".X................. ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXXXXXXXXXXXXXX ",
+".XXXXXXXXXXXXXXXXXX ",
+"................... "};
+
+
diff --git a/images/lyx.xpm b/images/lyx.xpm
new file mode 100644 (file)
index 0000000..7ebf4d4
--- /dev/null
@@ -0,0 +1,62 @@
+/* XPM */
+static char *lyx_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"    48    48        7            1",
+/* colors */
+". c #000000",
+"# c #005e00",
+"a c #2696cd",
+"b s mask c none",
+"c c #be3f00",
+"d c #ffc647",
+"e c #ffffff",
+/* pixels */
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbb....bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbb.......bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbb........bbbbbbbbbbbbbbbabbbbbbbbccccc",
+"bbbbbbbbbb.........bbbbbbbbbbbbbbaabbbbbbbbccccb",
+"bbbbbbbbbb........bbbbbbbbbbbbbbbaabbbddbdbccccb",
+"bbbbbbbbb.......bbbbbbbbbbbbbbbbbbaabbdddddcccbb",
+"bbbbbbbbb.......bbbbbbbbbbbbbbbbbbaabadddddcccbb",
+"bbbbbbbbb.......bbbbbbbbbbbbbbbbbbaaaaddddccccbb",
+"bbbbbbbbb.......bbbbbbbbbbbbbbbbbbbaaabddbbbbccb",
+"bbbbbbbb........bbbbbbbbbbbbbbbbbbbbbbdddbbbbbbb",
+"bbbbbbbb........bbbbbbbbeeeeebbbbbbbbbddbbbbbbbb",
+"bbbbbbbb......bbbbbbbbeeedddddebbbbbbbbbbbbbbbbb",
+"bbbbbbbb....bbbbaaaaaaeeddd.ddeebbbbbbbbbbbbbbbb",
+"bbbbbbbb...bbbbeeeeaaaeddde...debbbbbbbbbbbbbbbb",
+"bbbbbbbb..bbbeeddddeeeed.ee...ddbbbbbbbbbbbbbbbb",
+"bbbbbbbb.bbaeeddddddeeed.......dbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbeeddde..ddeed......ddbbbbbbbbbbbbcccc",
+"bbbbbbbbbaaedd.ee...ddedd.....debbbbbbccccccccbb",
+"bbbbbbbbbaaedd..e...ddedd.....debbbcccccccccccbb",
+"bbbbbbbbaaaedd......ddeeddddddebccccccccccccbbbb",
+"bbbbbbbbaaaeed......ddaeeeeccccccccccccccc.....b",
+"bbbbbbbbaaaeedd.....deaaecccccccccccccccc.....bb",
+"bbbbbbbbaaaeeedd...ddeaccccccccccccccccc.....bbb",
+"bbbbbbbbaaaaaeeddddeeacccccccccccccccc.....bbbbb",
+"bbbbbbbbaaaaaaeeeeeaaaaa....ccccccccc....bbbbbbb",
+"bbbbbbbbaaaaaaaeeeaaaaaaaaa.....cccc....bbbbbbbb",
+"bbbbbb####aaaaaaaaaaaaaaaaaaaaa##.....bbbbbbbbbb",
+"bbbbb#####aaaaaaaaaaaaaaaaaaaaa#####.bbbbbbbbbbb",
+"bbbb#####aaaaaaaaaaaaaaaaaaaaaa#####bbbbbbbbbbbb",
+"bb######caaaaaaaaaaaaacccaaaaaab######bbbbbbbbbb",
+"##########aaaaaaaaaaaacccccccaab########bbbbbbbb",
+"#############aaaaaaaaaddcccccc##########bbbbbbbb",
+"c##ccccdd##########aacdd################bbbbbbbb",
+"ccccdccddccaa#################cbbbbbbbbbbbbbbbbb",
+"ccccdddddccbaaa############cccccbbbbbbbbbbbbbbbb",
+"cddccdddddccccaaa#######dddcccccbbbbbbbbbbbbbbbb",
+"ccddddddddccccbbaac####ddddcddccbbbbbbbbbbbbbbbb",
+"cccdddddddccccbbbcc###ddddddddccbbbbbbbbbbbbbbbb",
+"cccccddddddccccbcccccddddddccccbbbbbbbbbbbbbbbbb",
+"bcccccdddddccccbcccccddddccccccbbbbbbbbbbbbbbbbb",
+"bbbccccddddccccbccccddddccccccbbbbbbbbbbbbbbbbbb",
+"bbbbbbcccccccccbccccccccccbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbcccccccbbccccccccbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbccccccbbbcccccccbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
+};
diff --git a/images/make_ascii_bw.xpm b/images/make_ascii_bw.xpm
new file mode 100644 (file)
index 0000000..ce13a18
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * make_ascii_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c black",
+"                    ",
+" .................. ",
+" .                . ",
+" .  .   .  . . . .. ",
+" . . . .  .  . .  . ",
+" . . . .  .  . .  . ",
+" . ...  . .  . .  . ",
+" . . .  . .  . .  . ",
+" . . . .   . . .  . ",
+" .                . ",
+" .                . ",
+" .................. ",
+" .                . ",
+" .  ............  . ",
+" .  .       .  .  . ",
+" .  .       .  .  . ",
+" .  .       .  .  . ",
+"  . .       .  .  . ",
+"   ................ ",
+"                    "};
+
+
+
diff --git a/images/make_latex_bw.xpm b/images/make_latex_bw.xpm
new file mode 100644 (file)
index 0000000..737366c
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * make_latex_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c black",
+"                    ",
+" .................. ",
+" .                . ",
+" . .  ..... .   . . ",
+" . .    .    . . .. ",
+" . .  . . ... .   . ",
+" . . . .. .  . .  . ",
+" . ...... ...   . . ",
+" .   . .  .       . ",
+" .   . .  ...     . ",
+" .                . ",
+" .................. ",
+" .                . ",
+" .  ............  . ",
+" .  .       .  .  . ",
+" .  .       .  .  . ",
+" .  .       .  .  . ",
+"  . .       .  .  . ",
+"   ................ ",
+"                    "};
+
+
+
diff --git a/images/margin.xpm b/images/margin.xpm
new file mode 100644 (file)
index 0000000..c5af2f1
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * margin_xpm[] = {
+"20 20 5 1",
+"      c gray60",
+".     c #000000000000",
+"X     c #BFBFBFBFBFBF",
+"o     c #FFFFFFFFFFFF",
+"O     c #7B7B00000000",
+" .................XX",
+" oooooooooooooooo.XX",
+" oooooooooooooooo.XX",
+" oooooooooooooooo.XX",
+" .......ooOOOOOoo.XX",
+" oooooooooooooooo.XX",
+" .......ooOOOOOoo.XX",
+" oooooooooooooooo.XX",
+" .......ooOOOOOoo.XX",
+" oooooooooooooooo.XX",
+" .......ooooooooo.XX",
+" ooooooooooo.oooo.XX",
+" ..oooooooo...ooo.XX",
+" ooooooooo.....oo.XX",
+" .......oooo.oooo.XX",
+" ooooooooooo.oooo.XX",
+" .......ooooooooo.XX",
+" oooooooooooooooo.XX",
+" oooooooooooooooo.XX",
+"                  XX"};
+
+
diff --git a/images/margin_bw.xpm b/images/margin_bw.xpm
new file mode 100644 (file)
index 0000000..bc63ad6
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * margin_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"20 20 2 1",
+/* colors */
+"      c black",
+".     c #BFBFBFBFBFBF",
+/**/
+"                    ",
+".................   ",
+".................   ",
+".................   ",
+"        ..     ..   ",
+".................   ",
+"        ..     ..   ",
+".................   ",
+"        ..     ..   ",
+".................   ",
+"        .........   ",
+"............ ....   ",
+"   ........   ...   ",
+"..........     ..   ",
+"        .... ....   ",
+"............ ....   ",
+"        .........   ",
+".................   ",
+"        .........   ",
+".................   "};
+
+
diff --git a/images/math.xpm b/images/math.xpm
new file mode 100644 (file)
index 0000000..cfa9f0d
--- /dev/null
@@ -0,0 +1,29 @@
+/* XPM */
+static char * math_xpm[] = {
+"20 20 4 1",
+"      c #BFBFBFBFBFBF",
+".     c #242423238E8E",
+"X     c #000000000000",
+"o     c #FFFFFFFFFFFF",
+"              ..    ",
+"              ..    ",
+"              ..    ",
+"  ....        ....  ",
+" .. ..   .    .. .. ",
+" .. ..   .    .. .. ",
+" .. .. .....  .. .. ",
+" .. ..   .    .. .. ",
+"  ....   .    ....  ",
+"                    ",
+" XXXXXXXXXXXXXXXXXX ",
+"                    ",
+"        ...         ",
+"       ..           ",
+"       ..    X      ",
+"       ..   XoX     ",
+"       ..   XooX    ",
+"        ...  XooX   ",
+"              XooX  ",
+"               XooX "};
+
+
diff --git a/images/math_bw.xpm b/images/math_bw.xpm
new file mode 100644 (file)
index 0000000..e520016
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * math_xpm[] = {
+/**/
+"20 20 2 1",
+/*33333333333*/
+"      c #BFBFBFBFBFBF",
+".     c black",
+/**/
+"              ..    ",
+"              ..    ",
+"              ..    ",
+"  ....        ....  ",
+" .. ..   .    .. .. ",
+" .. ..   .    .. .. ",
+" .. .. .....  .. .. ",
+" .. ..   .    .. .. ",
+"  ....   .    ....  ",
+"                    ",
+" .................. ",
+"                    ",
+"        ...         ",
+"       ..           ",
+"       ..   ..      ",
+"       ..  .  .     ",
+"       ..   .  .    ",
+"        ...  .  .   ",
+"              .  .  ",
+"               .  . "};
+
+
diff --git a/images/matrix.xpm b/images/matrix.xpm
new file mode 100644 (file)
index 0000000..d64b69f
--- /dev/null
@@ -0,0 +1,31 @@
+/* XPM */
+static char *matrix[] = {
+/* width height num_colors chars_per_pixel */
+"    20    20        2            1",
+/* colors */
+". c #bebebe",
+"# c #0000ff",
+/* pixels */
+"....................",
+"....................",
+"....................",
+"...####.####.####...",
+"...#..#.#..#.#..#...",
+"...#..#.#..#.#..#...",
+"...####.####.####...",
+"....................",
+"...####.####.####...",
+"...#..#.#..#.#..#...",
+"...#..#.#..#.#..#...",
+"...####.####.####...",
+"....................",
+"...####.####.####...",
+"...#..#.#..#.#..#...",
+"...#..#.#..#.#..#...",
+"...####.####.####...",
+"....................",
+"....................",
+"...................."
+};
+
+
diff --git a/images/melt.xpm b/images/melt.xpm
new file mode 100644 (file)
index 0000000..b12cd5f
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * melt_xpm[] = {
+"20 20 5 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"X     c gray60",
+"o     c gray70",
+"O     c gray90",
+"                    ",
+" ...           ...  ",
+"..XX.        ..oo.  ",
+".XXXX.      .ooooo. ",
+".XXXXX.     .ooooo. ",
+".XXXXX.      .oooo. ",
+" .....   .   .ooo.  ",
+"         .    ...   ",
+"       .....        ",
+"        ...         ",
+"         .          ",
+"                    ",
+"        ....        ",
+"     ....OOO...     ",
+"   ..OOOOOOOOOO.    ",
+"   .OOOOOOOOOOOO.   ",
+"   .OOOOOOOOOOOO.   ",
+"   .OOOOOOOOOOOO.   ",
+"    ..OOOOO..OO..   ",
+"      .....  ...    "};
+
+
diff --git a/images/melt_bw.xpm b/images/melt_bw.xpm
new file mode 100644 (file)
index 0000000..a929502
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * melt_xpm[] = {
+/**/
+"20 20 2 1",
+/*33333333333*/
+"      c #BFBFBFBFBFBF",
+".     c black",
+/*333*/
+"                    ",
+" ...           ...  ",
+"..  .        ..  .  ",
+".    .      .     . ",
+".     .     .     . ",
+".     .      .    . ",
+" .....   .   .   .  ",
+"         .    ...   ",
+"       .....        ",
+"        ...         ",
+"         .          ",
+"                    ",
+"        ....        ",
+"     ....   ...     ",
+"   ..          .    ",
+"   .            .   ",
+"   .            .   ",
+"   .            .   ",
+"    ..     ..  ..   ",
+"      .....  ...    "};
+
+
diff --git a/images/misc.xbm b/images/misc.xbm
new file mode 100644 (file)
index 0000000..12652a0
--- /dev/null
@@ -0,0 +1,250 @@
+#define misc_width 150
+#define misc_height 193
+static char misc_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x06,0xc0,0xc0,0xff,0x1f,0x00,0x00,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x05,0xc0,0x80,0x01,0x08,0x00,0x00,0x42,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0xc0,0x80,0x01,0x08,0x00,0x00,
+ 0xc3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x80,0x04,0xc0,0x00,
+ 0x03,0x04,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,
+ 0xc0,0x02,0xc0,0x00,0x03,0x04,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x0c,0x00,0x00,0x40,0x02,0xc0,0x00,0x06,0x02,0x00,0x00,0x9e,0x00,0x00,
+ 0x78,0xc0,0x03,0x00,0x00,0x04,0x00,0x00,0x40,0x01,0xc0,0x00,0x06,0x02,0x00,
+ 0x00,0xe3,0x00,0x00,0xcc,0x31,0x06,0x00,0x00,0x06,0x00,0x00,0x60,0x01,0xc0,
+ 0x00,0x0c,0x01,0x00,0x80,0xc1,0x00,0x00,0x06,0x0b,0x0c,0x00,0x00,0x06,0x00,
+ 0x00,0xe0,0x00,0xc0,0x00,0x0c,0x01,0x00,0xc0,0x40,0x00,0x00,0x02,0x0e,0x08,
+ 0x00,0x00,0x02,0x00,0x00,0x60,0x00,0xc0,0x00,0x98,0x00,0x00,0xc0,0x60,0x00,
+ 0x00,0x02,0x0e,0x08,0x00,0x00,0x02,0x00,0x00,0x60,0x00,0xc0,0x00,0x98,0x00,
+ 0x00,0x40,0x60,0x00,0x00,0x02,0x0e,0x08,0x00,0x00,0x03,0x00,0x00,0x20,0x00,
+ 0xc0,0x00,0x70,0x00,0x00,0x40,0x30,0x00,0x00,0x06,0x1a,0x0c,0x00,0x00,0x01,
+ 0x00,0x00,0x38,0x00,0xc0,0x00,0x70,0x00,0x00,0x80,0x18,0x00,0x00,0x8c,0x71,
+ 0x06,0x00,0x00,0x01,0x00,0x00,0x20,0x03,0xc0,0x00,0x20,0x00,0x00,0x00,0x0f,
+ 0x00,0x00,0x78,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x98,0x01,0x00,0xc0,
+ 0xff,0x00,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x88,0x01,0x00,0x00,0x80,0x00,0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x00,0x20,0x20,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x84,0x02,0x00,0x00,0x80,0x00,0x00,
+ 0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x44,0x02,0x00,
+ 0x00,0x80,0x00,0x00,0xc0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x44,0x02,0x00,0x00,0x80,0x00,0x00,0x40,0x10,0x00,0x00,0x80,0x03,0x00,
+ 0x00,0xc0,0x01,0xc0,0x00,0x44,0x02,0x00,0xc0,0xff,0x00,0x00,0x40,0x10,0x00,
+ 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0xc0,0x00,0x24,0x02,0x00,0x00,0x80,0x00,
+ 0x00,0x80,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0xc0,0x00,0x24,0x02,
+ 0x00,0x00,0x80,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,
+ 0xc0,0x00,0x24,0x02,0x00,0x00,0x80,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x02,
+ 0x00,0x00,0x00,0x01,0xc0,0x00,0x14,0x02,0x00,0x00,0x80,0x00,0x00,0x00,0x05,
+ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0xc0,0x00,0x14,0x02,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0xc0,0x00,0x18,
+ 0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+ 0x01,0xc0,0x00,0x98,0x01,0x00,0xc0,0xff,0x00,0x00,0x00,0x02,0x00,0x00,0x80,
+ 0x07,0x00,0x00,0x00,0x01,0xc0,0x00,0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xc0,0x00,0x08,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x30,0x01,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xf0,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x87,0x03,0x00,0x80,0x0f,0x00,0x00,
+ 0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0xc0,0x80,0x69,0x06,0x00,
+ 0xc0,0x38,0x00,0x00,0x20,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0xc0,
+ 0x80,0x18,0x06,0x00,0x20,0x70,0x02,0x00,0x40,0x60,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xf0,0x07,0xc0,0x80,0x10,0x0c,0x00,0x20,0xc0,0x01,0x00,0x80,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0xc0,0x00,0x11,0x1c,0x00,0x20,0x00,0x00,
+ 0x00,0x80,0xa1,0x00,0x00,0x80,0x01,0x00,0x00,0x40,0x00,0xc0,0x00,0x12,0x0c,
+ 0x00,0xc0,0x80,0x01,0x00,0x80,0x23,0x00,0x00,0x40,0x78,0x00,0x00,0x40,0x07,
+ 0xc0,0x00,0xf2,0x03,0x00,0x00,0x43,0x02,0x00,0x40,0x26,0x00,0x00,0x40,0x44,
+ 0x00,0x00,0xc0,0x0c,0xc0,0x80,0x12,0x01,0x00,0x00,0x40,0x00,0x00,0x40,0x2c,
+ 0x00,0x00,0x20,0xc2,0x00,0x00,0x60,0x0c,0xc0,0x80,0x11,0x01,0x00,0x00,0x40,
+ 0x00,0x00,0x40,0x38,0x00,0x00,0x20,0xc1,0x00,0x00,0x20,0x04,0xc0,0x00,0x10,
+ 0x01,0x00,0x00,0x80,0x00,0x00,0x40,0x30,0x00,0x00,0xa0,0x40,0x00,0x00,0x20,
+ 0x04,0xc0,0x00,0x10,0x01,0x00,0xe0,0x01,0x01,0x00,0xc0,0x60,0x00,0x00,0x60,
+ 0x40,0x00,0x00,0x20,0x04,0xc0,0x80,0x10,0x01,0x00,0x80,0x03,0x01,0x00,0x80,
+ 0x40,0x00,0x00,0x60,0x40,0x00,0x00,0x30,0x16,0xc0,0x80,0x08,0x09,0x00,0x00,
+ 0x86,0x01,0x00,0x80,0x81,0x00,0x00,0xc0,0x22,0x00,0x00,0x10,0x0a,0xc0,0x00,
+ 0x09,0x1f,0x00,0x00,0xfc,0x00,0x00,0xe0,0x81,0x00,0x00,0xa0,0x12,0x00,0x00,
+ 0x10,0x0e,0xc0,0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x20,0x0d,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x01,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x60,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0xf0,0xff,0x03,0x00,0x00,0x04,0x00,
+ 0x00,0x80,0x08,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x01,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x04,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0xc0,0x00,0x80,0x00,
+ 0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x80,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x80,0x08,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x40,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0xc0,0x00,0x40,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x04,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0xc0,0x00,0x20,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x80,0x08,0x00,0x00,0xfc,
+ 0x3f,0xc0,0x00,0x20,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x80,
+ 0x08,0x00,0x00,0x00,0x20,0xc0,0x00,0x10,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+ 0x04,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x20,0xc0,0x00,0x10,0x00,0x00,0x00,
+ 0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x20,0xc0,0x00,
+ 0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x80,0x08,0x00,0x00,
+ 0x00,0x20,0xc0,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,
+ 0x80,0x08,0x00,0x00,0x00,0x20,0xc0,0x00,0xfc,0x03,0x00,0x00,0x08,0x00,0x00,
+ 0x00,0x04,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0xc0,0x00,0x04,0x00,0x00,
+ 0x00,0x08,0x00,0x00,0xf8,0xff,0x01,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x08,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x08,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xc0,0x00,0x08,0x00,
+ 0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x04,0x00,0x80,0x00,
+ 0xc0,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,
+ 0x02,0x00,0x40,0x01,0xc0,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x09,
+ 0x00,0x00,0x00,0x00,0x02,0x00,0x40,0x01,0xc0,0x00,0x08,0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x01,0x00,0x20,0x02,0xc0,0x00,0x08,
+ 0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x01,0x00,0x20,
+ 0x02,0xc0,0x00,0x08,0x00,0x00,0x00,0x3d,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,
+ 0x80,0x00,0x00,0x10,0x04,0xc0,0x00,0xe8,0x00,0x00,0x00,0x2f,0x00,0x00,0x80,
+ 0x0f,0x00,0x00,0x00,0x80,0x00,0x00,0x10,0x04,0xc0,0x00,0x98,0x01,0x00,0x00,
+ 0x21,0x00,0x00,0x80,0x09,0x00,0x00,0x00,0x40,0x00,0x00,0x08,0x08,0xc0,0x00,
+ 0x88,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x40,0x00,0x00,
+ 0x08,0x08,0xc0,0x00,0x88,0x01,0x00,0x00,0x21,0x00,0x00,0x00,0x09,0x00,0x00,
+ 0x20,0x20,0x00,0x00,0x04,0x10,0xc0,0x00,0x88,0x00,0x00,0x00,0x21,0x00,0x00,
+ 0x00,0x09,0x00,0x00,0x30,0x20,0x00,0x00,0x04,0x10,0xc0,0x00,0x88,0x00,0x00,
+ 0x00,0x21,0x00,0x00,0x00,0x09,0x00,0x00,0x68,0x10,0x00,0x00,0x02,0x20,0xc0,
+ 0x00,0x48,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x09,0x00,0x00,0x60,0x10,0x00,
+ 0x00,0x02,0x20,0xc0,0x00,0x28,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x19,0x00,
+ 0x00,0xc0,0x10,0x00,0x00,0x01,0x40,0xc0,0x00,0x18,0x00,0x00,0x00,0x3d,0x00,
+ 0x00,0x00,0x1f,0x00,0x00,0xc0,0x08,0x00,0x00,0xff,0x7f,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x2f,0x00,0x00,0x80,0x0b,0x00,0x00,0x80,0x08,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x80,0x09,0x00,0x00,0x80,0x05,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x09,
+ 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x20,
+ 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x40,0x00,0x00,0xc0,0xe1,0x00,0x00,0x00,0x0f,
+ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0xc0,0x00,0xa0,0x00,0x00,0x20,0x12,
+ 0x01,0x00,0x80,0x1f,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0xc0,0x00,0xa0,
+ 0x00,0x00,0x10,0x0c,0x02,0x00,0x80,0x1f,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x10,0x01,0x00,0x10,0x04,0x02,0x00,0x80,0x1f,0x00,0x00,0x80,
+ 0x0f,0x00,0x00,0x00,0x00,0xc0,0x00,0x10,0x01,0x00,0x10,0x00,0x02,0x00,0x80,
+ 0x1f,0x00,0x00,0xc0,0x1f,0x00,0x00,0x00,0x00,0xc0,0x00,0x08,0x02,0x00,0x10,
+ 0x00,0x02,0x00,0x80,0x1f,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x04,0x04,0x00,0x10,0x00,0x02,0x00,0x80,0x1f,0x00,0x00,0xf0,0x7f,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x02,0x08,0x00,0x20,0x00,0x01,0x00,0x60,0x6f,0x00,0x00,
+ 0xf0,0x7f,0x00,0x00,0x00,0x00,0xc0,0x00,0x01,0x10,0x00,0x20,0x00,0x01,0x00,
+ 0xf0,0xff,0x00,0x00,0xf8,0xff,0x00,0x00,0x00,0x00,0xc0,0x00,0x01,0x10,0x00,
+ 0x40,0x80,0x00,0x00,0xf8,0xff,0x01,0x00,0xf8,0xff,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x02,0x08,0x00,0x80,0x40,0x00,0x00,0xf8,0xff,0x01,0x00,0xf8,0xff,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x04,0x04,0x00,0x00,0x21,0x00,0x00,0xf8,0xff,0x01,
+ 0x00,0xf8,0xff,0x00,0x00,0x00,0x00,0xc0,0x00,0x08,0x02,0x00,0x00,0x12,0x00,
+ 0x00,0xf8,0xff,0x01,0x00,0xf8,0xff,0x00,0x00,0x00,0x00,0xc0,0x00,0x08,0x01,
+ 0x00,0x00,0x0c,0x00,0x00,0xf0,0xff,0x00,0x00,0xf0,0x7f,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x10,0x01,0x00,0x00,0x0c,0x00,0x00,0xe0,0x72,0x00,0x00,0xf0,0x7a,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0xa0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,
+ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0xc0,0x00,0xa0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0xc0,0x00,0x40,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0};
+
+
diff --git a/images/noun.xpm b/images/noun.xpm
new file mode 100644 (file)
index 0000000..693e56f
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * noun_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"         ..         ",
+"        ....        ",
+"        ....        ",
+"         ..         ",
+"       ......       ",
+"      ........      ",
+"      . .... .      ",
+"      . .... .      ",
+"      . .... .      ",
+"      . .... .      ",
+"      . .... .      ",
+"       ......       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"                    "};
+
+
diff --git a/images/noun_bw.xpm b/images/noun_bw.xpm
new file mode 100644 (file)
index 0000000..eb3207d
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * noun_xpm[] = {
+/**/
+"20 20 2 1",
+/*÷F¼\ 4÷FÃd÷FÄD÷FÆôges/delim.xbm*/
+"      c #BFBFBFBFBFBF",
+".     c black",
+/*333*/
+"                    ",
+"         ..         ",
+"        ....        ",
+"        ....        ",
+"         ..         ",
+"       ......       ",
+"      ........      ",
+"      . .... .      ",
+"      . .... .      ",
+"      . .... .      ",
+"      . .... .      ",
+"      . .... .      ",
+"       ......       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"                    "};
+
+
diff --git a/images/open.xpm b/images/open.xpm
new file mode 100644 (file)
index 0000000..71e599a
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * open_xpm[] = {
+"20 20 5 1",
+"      c #BFBFBFBFBFBF",
+".     c navy",
+"X     c #000000000000",
+"o     c #9A9A94949494",
+"O     c #E5E5E0E0E1E1",
+"                    ",
+"              ...   ",
+"             .   . .",
+" XXXXX           . .",
+"XXooooX           ..",
+"XooooooXXXXXXXX ....",
+"XoooooooooooooX     ",
+"XoooooooooooooX     ",
+"XoooooooooooooX     ",
+"XooooXXXXXXXXXXXXXXX",
+"XooooXOOOOOOOOOOOOOX",
+"XoooXOOOOOOOOOOOOOX ",
+"XoooXOOOOOOOOOOOOOX ",
+"XooXOOOOOOOOOOOOOX  ",
+"XooXOOOOOOOOOOOOOX  ",
+"XoXOOOOOOOOOOOOOX   ",
+"XoXOOOOOOOOOOOOOX   ",
+"XXOOOOOOOOOOOOOX    ",
+"XXOOOOOOOOOOOOOX    ",
+"XXXXXXXXXXXXXXX     "};
+
+
diff --git a/images/open_bw.xpm b/images/open_bw.xpm
new file mode 100644 (file)
index 0000000..075d78d
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * open_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"20 20 2 1",
+/* colors */
+"      c #BFBFBFBFBFBF",
+".     c black",
+/* pixels */
+"                    ",
+"              ...   ",
+"            ..   . .",
+"  .....          . .",
+"  .....           ..",
+"............... ....",
+"...............     ",
+"...............     ",
+"...............     ",
+"....................",
+"...... . . . . . . .",
+"......  . . . . . . ",
+"..... .. . . . . .. ",
+"....  . . . . . ..  ",
+".... . . . . . . .  ",
+"...  . . . . . ..   ",
+"... . . . . . . .   ",
+".. . . . . . . .    ",
+". . . . . . . ..    ",
+"...............     "};
+
+
diff --git a/images/paste.xpm b/images/paste.xpm
new file mode 100644 (file)
index 0000000..f2a8b01
--- /dev/null
@@ -0,0 +1,31 @@
+/* XPM */
+static char * paste_xpm[] = {
+"20 20 6 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"X     c #E5E5E0E0E1E1",
+"o     c navy",
+"O     c #9A9A94949494",
+"+     c #FFFFFFFFFFFF",
+"      ..            ",
+"     .XX.      ooo  ",
+".....X..X.....   o  ",
+".OO.XXXXXX.OO.   o  ",
+".O..........O. ooooo",
+".OOOOOOOOOOOO.  ooo ",
+".OOOOOOOOOOOO.   o  ",
+".OOOOOOOOOOOO.      ",
+".OOOOOOO.........   ",
+".OOOOOOO.+++++++..  ",
+".OOOOOOO.+++++++.O. ",
+".OOOOOOO.+.....+....",
+".OOOOOOO.++++++++++.",
+".OOOOOOO.+........+.",
+".OOOOOOO.++++++++++.",
+".OOOOOOO.+........+.",
+".........++++++++++.",
+"        .+........+.",
+"        .++++++++++.",
+"        ............"};
+
+
diff --git a/images/paste_bw.xpm b/images/paste_bw.xpm
new file mode 100644 (file)
index 0000000..d6c8e43
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * paste_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"20 20 2 1",
+/* colors */
+"      c #BFBFBFBFBFBF",
+".     c black",
+/* pixels */
+"      ..            ",
+"     .  .      ...  ",
+"..... .. .....   .  ",
+".  .      .  .   .  ",
+". .......... . .....",
+".            .  ... ",
+".            .   .  ",
+".            .      ",
+".       .........   ",
+".       .       ..  ",
+".       .       ... ",
+".       . ..... ....",
+".       .          .",
+".       . ........ .",
+".       .          .",
+".       . ........ .",
+".........          .",
+"        . ........ .",
+"        .          .",
+"        ............"};
+
+
diff --git a/images/print1.xpm b/images/print1.xpm
new file mode 100644 (file)
index 0000000..00fb398
--- /dev/null
@@ -0,0 +1,32 @@
+/* XPM */
+static char * print1_xpm[] = {
+"24 20 7 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"o     c #7B7B00000000",
+"O     c #B2B2ABABACAC",
+"+     c navy",
+"@     c #9A9A94949494",
+"                        ",
+"                        ",
+"                        ",
+"      ............      ",
+"      .XXXXXXXXXX.      ",
+"     .XXooooooooXX.     ",
+"     .XXXXXXXXXXXX.     ",
+"    .XXooooooooooXX.    ",
+"    .XXXXXXXXXXXXXX.    ",
+" ...................... ",
+" .OOOOOOOOOOOOOOOOOOOO. ",
+" .OOOOOOOOOOOOOOO++++O. ",
+" .OOOOOOOOOOOOOOOOOOOO. ",
+" .OOOOOOOOOOOOOOOOOOOO. ",
+" .OOOOOOOOOOOOOOOOOOOO. ",
+"  ..................... ",
+"  .@@@@@@@@@@@@@@@@@@.  ",
+"  .@@@@@@@@@@@@@@@@@@.  ",
+"   ..................   ",
+"                        "};
+
+
diff --git a/images/print1_bw.xpm b/images/print1_bw.xpm
new file mode 100644 (file)
index 0000000..fbad75f
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * print1_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"24 20 2 1",
+/* colors */
+"      c #BFBFBFBFBFBF",
+".     c black",
+/* pixels */
+"                        ",
+"                        ",
+"                        ",
+"      ............      ",
+"      .          .      ",
+"     .  ........  .     ",
+"     .            .     ",
+"    .  ..........  .    ",
+"    .              .    ",
+" ...................... ",
+" .                    . ",
+" .               .... . ",
+" .                    . ",
+" .                    . ",
+" .                    . ",
+"  ..................... ",
+"  .                  .  ",
+"  .                  .  ",
+"   ..................   ",
+"                        "};
+
+
diff --git a/images/quit.xpm b/images/quit.xpm
new file mode 100644 (file)
index 0000000..9b02c5f
--- /dev/null
@@ -0,0 +1,36 @@
+/* XPM */
+static char *quit_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"    20    20        7            1",
+/* colors */
+". c #b2c0dc",
+"# c #4d4d4d",
+"a c #000000",
+"b c #737373",
+"c c #ffffff",
+"d c #d9d9d9",
+"e c #ffff00",
+/* pixels */
+"....................",
+"....................",
+"....................",
+".........####.......",
+"........#....#......",
+".......#......#.....",
+".......#......#.....",
+".....aaaa......##...",
+"....aaabba.....##...",
+"...abccdaaaa.....#..",
+"..aacbbbaaaaa....#..",
+"..aacbbbaaaaa....#..",
+"..abdbbaaabba....e..",
+"..abaaaaaaeea....ee.",
+"..aaaaaaabdda.....e.",
+"..aaaaaa#bbba..ee...",
+"..aaaaaa#bbba..ee...",
+"...aa###b#aa........",
+"....aaaaaa..........",
+"...................."
+};
+
+
diff --git a/images/quit_bw.xpm b/images/quit_bw.xpm
new file mode 100644 (file)
index 0000000..a546cc4
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * quit_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"20 20 2 1",
+/* colors */
+"      c #BFBFBFBFBFBF",
+".     c black",
+/* pixels */
+"                    ",
+"                    ",
+"                    ",
+"         ....       ",
+"        .    .      ",
+"       .      .     ",
+"       .      .     ",
+"     ....      ..   ",
+"    ......      .   ",
+"   .........     .  ",
+"  ...........    .  ",
+"  ...........    .  ",
+"  ...........       ",
+"  ...........       ",
+"  ...........       ",
+"  ...........       ",
+"  ...........       ",
+"   .........        ",
+"    ......          ",
+"                    "};
+
+
diff --git a/images/run_latex_bw.xpm b/images/run_latex_bw.xpm
new file mode 100644 (file)
index 0000000..ab4a3d5
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * run_latex_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"  . .. .  . . ..    ",
+"  ..   .  . ..  .   ",
+"  .    .  . .   .   ",
+"  .     ..  .   .   ",
+"                    ",
+"                    ",
+" .      .....  .   .",
+" .        .     . . ",
+" .        .     . . ",
+" .    ..  . ...  .  ",
+" .   .  . . .   . . ",
+" .   .  . . .   . . ",
+" ... .  . . .. .   .",
+"     ....   .       ",
+"     .  .   .       ",
+"     .  .   ...     ",
+"                    ",
+"                    ",
+"                    "};
+
+
+
diff --git a/images/sans_bw.xpm b/images/sans_bw.xpm
new file mode 100644 (file)
index 0000000..11e6dbf
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * sans_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"               .... ",
+"              ..... ",
+"              ..    ",
+"              ..    ",
+"              ..    ",
+"    ....    ......  ",
+"   ......   ......  ",
+"  ..    ..    ..    ",
+"  ..          ..    ",
+"   ..         ..    ",
+"    ..        ..    ",
+"     ..       ..    ",
+"      ..      ..    ",
+"       ..     ..    ",
+"  ..   ..     ..    ",
+"  ..   ..     ..    ",
+"  .......     ..    ",
+"   .....      ..    ",
+"                    "};
+
+
+
diff --git a/images/save.xpm b/images/save.xpm
new file mode 100644 (file)
index 0000000..dc0004b
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * save_xpm[] = {
+"20 20 5 1",
+"      c #BFBFBFBFBFBF",
+".     c black",
+"X     c gray70",
+"o     c gray90",
+"O     c gray60",
+"                    ",
+" .................. ",
+" .XX.oooooooooo.XX. ",
+" .XX.oooooooooo.XX. ",
+" .XX.oooooooooo.X.. ",
+" .XX.oooooooooo.XX. ",
+" .XX.oooooooooo.XX. ",
+" .XX.oooooooooo.XX. ",
+" .XX.oooooooooo.XX. ",
+" .XX.oooooooooo.XX. ",
+" .XX............XX. ",
+" .XXXXXXXXXXXXXXXX. ",
+" .XXXXXXXXXXXXXXXX. ",
+" .XX............XX. ",
+" .XX.OOOOOOO.oo.XX. ",
+" .XX.OOOOOOO.oo.XX. ",
+" .XX.OOOOOOO.oo.XX. ",
+"  .X.OOOOOOO.oo.XX. ",
+"   ................ ",
+"                    "};
+
+
diff --git a/images/save_bw.xpm b/images/save_bw.xpm
new file mode 100644 (file)
index 0000000..e1e439f
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * save_xpm[] = {
+/*\80\10*/
+"20 20 2 1",
+/**/
+"      c #BFBFBFBFBFBF",
+".     c black",
+/**/
+"                    ",
+" .................. ",
+" .  .          .  . ",
+" .  .          .  . ",
+" .  .          . .. ",
+" .  .          .  . ",
+" .  .          .  . ",
+" .  .          .  . ",
+" .  .          .  . ",
+" .  .          .  . ",
+" .  ............  . ",
+" .                . ",
+" .                . ",
+" .  ............  . ",
+" .  .       .  .  . ",
+" .  .       .  .  . ",
+" .  .       .  .  . ",
+"  . .       .  .  . ",
+"   ................ ",
+"                    "};
+
+
diff --git a/images/smallcaps.xpm b/images/smallcaps.xpm
new file mode 100644 (file)
index 0000000..53219c4
--- /dev/null
@@ -0,0 +1,52 @@
+/* XPM */
+static char * smallcaps_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"    .               ",
+"    .               ",
+"   . .  ....   .... ",
+"   . .   .  . ..    ",
+"  .   .  .  . .     ",
+"  .....  ...  .     ",
+"  .   .  .  . .     ",
+" .     . .  . ..    ",
+"...   ......   .... ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    "};
+/* XPM */
+static char * smallcaps_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"    .               ",
+"    .               ",
+"   . .  ....   .... ",
+"   . .   .  . ..    ",
+"  .   .  .  . .     ",
+"  .....  ...  .     ",
+"  .   .  .  . .     ",
+" .     . .  . ..    ",
+"...   ......   .... ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    "};
+
+
diff --git a/images/smallcaps_bw.xpm b/images/smallcaps_bw.xpm
new file mode 100644 (file)
index 0000000..4534ce7
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * smallcaps_xpm[] = {
+/**/
+"20 20 2 1",
+/**/
+"      c #BFBFBFBFBFBF",
+".     c black",
+/**/
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"    .               ",
+"    .               ",
+"   . .  ....   .... ",
+"   . .   .  . ..    ",
+"  .   .  .  . .     ",
+"  .....  ...  .     ",
+"  .   .  .  . .     ",
+" .     . .  . ..    ",
+"...   ......   .... ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    "};
+
+
diff --git a/images/space.xpm b/images/space.xpm
new file mode 100644 (file)
index 0000000..de5c74b
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * space_xpm[] = {
+"20 20 2 1",
+"      c #BEFBBEFBBEFB",
+".     c #FBEE14514103",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"    ...      ...    ",
+"    ...      ...    ",
+"    ...      ...    ",
+"    ............    ",
+"    ............    ",
+"                    ",
+"                    ",
+"                    ",
+"                    "};
+
+
diff --git a/images/sqrt.xpm b/images/sqrt.xpm
new file mode 100644 (file)
index 0000000..1278646
--- /dev/null
@@ -0,0 +1,32 @@
+/* XPM */
+static char *sqrt[] = {
+/* width height num_colors chars_per_pixel */
+"    20    20        3            1",
+/* colors */
+". c #bebebe",
+"# c #000000",
+"a c #5151fb",
+/* pixels */
+"....................",
+"....................",
+"....................",
+"......###########...",
+"......###########...",
+"......##.......##...",
+"......##............",
+"......##..aaaaaa....",
+"......##..aaaaaa....",
+"..###.##..aa..aa....",
+"..###.##..aa..aa....",
+"....####..aa..aa....",
+".....###..aa..aa....",
+"......##..aa..aa....",
+"......##..aaaaaa....",
+"......##..aaaaaa....",
+"....................",
+"....................",
+"....................",
+"...................."
+};
+
+
diff --git a/images/tab.xpm b/images/tab.xpm
new file mode 100644 (file)
index 0000000..56e8c44
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * tab_xpm[] = {
+"20 20 3 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"X     c #FFFFFFFFFFFF",
+"                    ",
+"  ................  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  ................  ",
+"                    ",
+"  ................  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  ................  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  ................  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  .XXXX.XXXX.XXXX.  ",
+"  ................  "};
+
+
diff --git a/images/tab_bw.xpm b/images/tab_bw.xpm
new file mode 100644 (file)
index 0000000..3096b09
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * tab_xpm[] = {
+/*.e:*/
+"20 20 2 1",
+/**/
+"      c #BFBFBFBFBFBF",
+".     c black",
+/**/
+"                    ",
+"  ................  ",
+"  .    .    .    .  ",
+"  .    .    .    .  ",
+"  .    .    .    .  ",
+"  ................  ",
+"                    ",
+"  ................  ",
+"  .    .    .    .  ",
+"  .    .    .    .  ",
+"  .    .    .    .  ",
+"  ................  ",
+"  .    .    .    .  ",
+"  .    .    .    .  ",
+"  .    .    .    .  ",
+"  ................  ",
+"  .    .    .    .  ",
+"  .    .    .    .  ",
+"  .    .    .    .  ",
+"  ................  "};
+
+
diff --git a/images/tex.xpm b/images/tex.xpm
new file mode 100644 (file)
index 0000000..3656594
--- /dev/null
@@ -0,0 +1,27 @@
+/* XPM */
+static char * tex_xpm[] = {
+"20 20 2 1",
+"      c #BEFBBEFBBEFB",
+".     c #7B7B00000000",
+"                    ",
+"                    ",
+"                    ",
+"........   ..    .. ",
+"........    ..   .. ",
+"   ..       ..  ..  ",
+"   ..        .. ..  ",
+"   ..  ..... ....   ",
+"   ..  .....  ...   ",
+"   ..  ..     ...   ",
+"   ..  ..     ...   ",
+"   ..  ....  .. ..  ",
+"   ..  ....  .. ..  ",
+"   ..  ..   ..   .. ",
+"   ..  ..   ..   .. ",
+"       ..           ",
+"       .....        ",
+"       .....        ",
+"                    ",
+"                    "};
+
+
diff --git a/images/tex_bw.xpm b/images/tex_bw.xpm
new file mode 100644 (file)
index 0000000..692654b
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * tex_xpm[] = {
+/*.e:*/
+"20 20 2 1",
+/**/
+"      c #BFBFBFBFBFBF",
+".     c black",
+/*Add Extension...*/
+"                    ",
+"                    ",
+"                    ",
+"........   ..    .. ",
+"........    ..   .. ",
+"   ..       ..  ..  ",
+"   ..        .. ..  ",
+"   ..  ..... ....   ",
+"   ..  .....  ...   ",
+"   ..  ..     ...   ",
+"   ..  ..     ...   ",
+"   ..  ....  .. ..  ",
+"   ..  ....  .. ..  ",
+"   ..  ..   ..   .. ",
+"   ..  ..   ..   .. ",
+"       ..           ",
+"       .....        ",
+"       .....        ",
+"                    ",
+"                    "};
+
+
diff --git a/images/typeset_ps.xpm b/images/typeset_ps.xpm
new file mode 100644 (file)
index 0000000..eeb4fee
--- /dev/null
@@ -0,0 +1,26 @@
+/* XPM */
+static char * update_ps_xpm[] = {
+"20 20 3 1",
+" c #BFBFBFBFBFBF",
+".c navy",
+"Xc black",
+"        ...         ",
+"      ........      ",
+"    ..... .....     ",
+"   ...       ...    ",
+"  ...         ...   ",
+" ...           ...  ",
+" ..  XXX   XX   ..  ",
+" ..  X  X X  X  ..  ",
+"...  X  X X     ... ",
+"..   XXX   XX    .. ",
+"...  X       X  ... ",
+" ..  X    X  X  ..  ",
+" ..  X     XX   ..  ",
+" ...           ...  ",
+"  ...      .. ...   ",
+"   ...     .....    ",
+"    .      ....     ",
+"           .....    ",
+"           .....    ",
+"                    "};
diff --git a/images/typeset_ps_bw.xpm b/images/typeset_ps_bw.xpm
new file mode 100644 (file)
index 0000000..7462c52
--- /dev/null
@@ -0,0 +1,25 @@
+/* XPM */
+static char * update_ps_xpm[] = {
+"20 20 2 1",
+"       c #BFBFBFBFBFBF",
+".      c black",
+"        ...         ",
+"      ........      ",
+"    ..... .....     ",
+"   ...       ...    ",
+"  ...         ...   ",
+" ...           ...  ",
+" ..  ...   ..   ..  ",
+" ..  .  . .  .  ..  ",
+"...  .  . .     ... ",
+"..   ...   ..    .. ",
+"...  .       .  ... ",
+" ..  .    .  .  ..  ",
+" ..  .     ..   ..  ",
+" ...           ...  ",
+"  ...      .. ...   ",
+"   ...     .....    ",
+"    .      ....     ",
+"           .....    ",
+"           .....    ",
+"                    "};
diff --git a/images/unknown.xpm b/images/unknown.xpm
new file mode 100644 (file)
index 0000000..4f1b8aa
--- /dev/null
@@ -0,0 +1,32 @@
+/* XPM */
+static char *unknown_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"    20    20        2            1",
+/* colors */
+". c #000000000000",
+"# c #befbbefbbefb",
+/* pixels */
+"####################",
+"####################",
+"####################",
+"####################",
+"####################",
+"########.....#######",
+"#######..##..#######",
+"#######..##..#######",
+"##########..########",
+"########...#########",
+"########..##########",
+"####################",
+"########..##########",
+"########..##########",
+"####################",
+"####################",
+"####################",
+"####################",
+"####################",
+"####################"
+};
+
+
+
diff --git a/images/unknown_bw.xpm b/images/unknown_bw.xpm
new file mode 100644 (file)
index 0000000..d4df02a
--- /dev/null
@@ -0,0 +1,30 @@
+/* XPM */
+static char * unknown_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"20 20 2 1",
+/**/
+"      c #BFBFBFBFBFBF",
+".     c black",
+/**/
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"        .....       ",
+"       ..  ..       ",
+"       ..  ..       ",
+"          ..        ",
+"        ...         ",
+"        ..          ",
+"                    ",
+"        ..          ",
+"        ..          ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    ",
+"                    "};
+
+
diff --git a/images/up.xpm b/images/up.xpm
new file mode 100644 (file)
index 0000000..c98b198
--- /dev/null
@@ -0,0 +1,24 @@
+/* XPM */
+static char *up_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"    11    11        4            1",
+/* colors */
+". c #656565",
+"# c #959595",
+"a c #b0b0b0",
+"b c #e0e0e0",
+/* pixels */
+"#####b#####",
+"####bb.####",
+"####bb.####",
+"###bba..###",
+"###bba..###",
+"##bbaaa..##",
+"##bbaaa..##",
+"#bbaaaaa..#",
+"#bbaaaaa..#",
+"bb.........",
+"b.........."
+};
+
+
diff --git a/images/varsz.xbm b/images/varsz.xbm
new file mode 100644 (file)
index 0000000..7c22870
--- /dev/null
@@ -0,0 +1,185 @@
+#define varsz_width 110
+#define varsz_height 192
+static char varsz_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x1c,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x3e,0x00,0x00,0x00,0x00,0x3e,0xc0,0xc0,0xff,0xff,0x01,0x00,0x00,0x00,
+ 0x22,0x00,0x00,0x00,0x00,0x23,0xc0,0x80,0xff,0xff,0x03,0x00,0x00,0x00,0x33,
+ 0x00,0x00,0x00,0x00,0x33,0xc0,0x80,0x01,0xc0,0x03,0x00,0x00,0x00,0x03,0x00,
+ 0x00,0x00,0x00,0x03,0xc0,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,
+ 0x00,0x80,0x01,0xc0,0x00,0x02,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+ 0x80,0x01,0xc0,0x00,0x06,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x80,
+ 0x01,0xc0,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x01,
+ 0xc0,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xe0,0x03,0xc0,
+ 0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xb8,0x07,0xc0,0x00,
+ 0x70,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x8c,0x09,0xc0,0x00,0x60,
+ 0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x8c,0x09,0xc0,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0xcc,0x08,0xc0,0x00,0x40,0x00,0x00,
+ 0x00,0x00,0x80,0x01,0x00,0x00,0x00,0xdc,0x08,0xc0,0x00,0x20,0x00,0x00,0x00,
+ 0x00,0x80,0x01,0x00,0x00,0x00,0xf8,0x06,0xc0,0x00,0x10,0x00,0x00,0x00,0x00,
+ 0x80,0x01,0x00,0x00,0x00,0xe0,0x01,0xc0,0x00,0x08,0x00,0x00,0x00,0x00,0x80,
+ 0x01,0x00,0x00,0x00,0xc0,0x00,0xc0,0x00,0x04,0x00,0x04,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0xc0,0x00,0x02,0x00,0x04,0x00,0x00,0x80,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0xc0,0x00,0x01,0x00,0x03,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0xc0,0x80,0x00,0xc0,0x03,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x60,0x00,0xc0,0x80,0xff,0xff,0x03,0x00,0x00,0xcc,0x00,0x00,0x00,0x00,0x66,
+ 0x00,0xc0,0xc0,0xff,0xff,0x01,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x62,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x3e,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x1c,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x80,
+ 0xff,0xff,0x03,0x00,0x80,0x3f,0xf8,0x03,0x00,0x80,0x01,0x60,0xc0,0x80,0xff,
+ 0xff,0x03,0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0e,0xe0,
+ 0x00,0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,
+ 0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,
+ 0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,0x00,
+ 0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,0x00,0x0c,
+ 0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,0x00,0x0c,0x60,
+ 0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,0x00,0x0c,0x60,0x00,
+ 0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,0x00,0x0c,0x60,0x00,0x00,
+ 0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,0x00,0x0c,0x60,0x00,0x00,0x80,
+ 0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,
+ 0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,
+ 0xc0,0x00,0x0c,0x60,0x00,0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,
+ 0x00,0x0c,0x60,0x00,0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,
+ 0x0c,0x60,0x00,0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,
+ 0x60,0x00,0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,
+ 0x00,0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,
+ 0x00,0x00,0x0c,0x60,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,
+ 0x00,0x0e,0xe0,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0c,0x60,0x00,0x00,0x80,
+ 0xff,0xff,0x03,0x00,0x80,0xff,0x7f,0xc0,0x80,0x3f,0xf8,0x03,0x00,0x80,0xff,
+ 0xff,0x03,0x00,0x80,0xff,0x7f,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0xe0,0x07,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,
+ 0x00,0xf0,0x03,0xc0,0x00,0xfc,0x3f,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,
+ 0xfc,0x0f,0xc0,0x00,0x1e,0x78,0x00,0x00,0x00,0x1e,0x78,0x00,0x00,0x00,0xc7,
+ 0x38,0xc0,0x00,0x07,0xe0,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x80,0xc1,0x60,
+ 0xc0,0x80,0x07,0xe0,0x01,0x00,0x80,0x03,0xc0,0x01,0x00,0xc0,0xc0,0xc0,0xc0,
+ 0xc0,0x0f,0xf0,0x03,0x00,0xc0,0x01,0x80,0x03,0x00,0x40,0xc0,0x80,0xc0,0xc0,
+ 0x1c,0x38,0x03,0x00,0xc0,0x00,0x00,0x03,0x00,0x60,0xc0,0x80,0xc1,0xc0,0x38,
+ 0x1c,0x03,0x00,0xc0,0x00,0x00,0x03,0x00,0x20,0xc0,0x00,0xc1,0x60,0x70,0x0e,
+ 0x06,0x00,0x60,0x00,0x00,0x06,0x00,0x20,0xc0,0x00,0xc1,0x60,0xe0,0x07,0x06,
+ 0x00,0x60,0x00,0x00,0x06,0x00,0x30,0xc0,0x00,0xc3,0x60,0xc0,0x03,0x06,0x00,
+ 0x60,0x80,0x01,0x06,0x00,0xf0,0xff,0xff,0xc3,0x60,0xc0,0x03,0x06,0x00,0x60,
+ 0x80,0x01,0x06,0x00,0xf0,0xff,0xff,0xc3,0x60,0xe0,0x07,0x06,0x00,0x60,0x00,
+ 0x00,0x06,0x00,0x30,0xc0,0x00,0xc3,0x60,0x70,0x0e,0x06,0x00,0x60,0x00,0x00,
+ 0x06,0x00,0x20,0xc0,0x00,0xc1,0xc0,0x38,0x1c,0x03,0x00,0xc0,0x00,0x00,0x03,
+ 0x00,0x20,0xc0,0x00,0xc1,0xc0,0x1c,0x38,0x03,0x00,0xc0,0x00,0x00,0x03,0x00,
+ 0x60,0xc0,0x80,0xc1,0xc0,0x0f,0xf0,0x03,0x00,0xc0,0x01,0x80,0x03,0x00,0x40,
+ 0xc0,0x80,0xc0,0x80,0x07,0xe0,0x01,0x00,0x80,0x03,0xc0,0x01,0x00,0xc0,0xc0,
+ 0xc0,0xc0,0x00,0x07,0xe0,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x80,0xc1,0x60,
+ 0xc0,0x00,0x1e,0x78,0x00,0x00,0x00,0x1e,0x78,0x00,0x00,0x00,0xc7,0x38,0xc0,
+ 0x00,0xf8,0x3f,0x00,0x00,0x00,0xf8,0x3f,0x00,0x00,0x00,0xfc,0x0f,0xc0,0x00,
+ 0xe0,0x07,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0xf0,0x03,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0xe0,0x07,0x00,0x00,
+ 0x00,0x03,0xc0,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0xf8,0x1f,0x00,0x00,0x00,
+ 0x03,0xc0,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x3c,0x3c,0x00,0x00,0x00,0x03,
+ 0xc0,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x0e,0x70,0x00,0x00,0x00,0x03,0xc0,
+ 0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x06,0x60,0x00,0x00,0x00,0x03,0xc0,0x00,
+ 0x00,0x80,0x01,0x60,0xc0,0x00,0x07,0xe0,0x00,0x00,0x00,0x03,0xc0,0x00,0x00,
+ 0x80,0x01,0x60,0xc0,0x00,0x03,0xc0,0x00,0x00,0x00,0x03,0xc0,0x00,0x00,0x80,
+ 0xc1,0x60,0xc0,0x00,0x03,0xc0,0x00,0x00,0x00,0x03,0xc0,0x00,0x00,0x80,0xc1,
+ 0x60,0xc0,0x00,0x03,0xc0,0x00,0x00,0x00,0x03,0xc0,0x00,0x00,0x80,0xc1,0x60,
+ 0xc0,0x00,0x03,0xc0,0x00,0x00,0x00,0x03,0xc0,0x00,0x00,0x80,0xf9,0x67,0xc0,
+ 0x00,0x03,0xc0,0x00,0x00,0x00,0x03,0xc0,0x00,0x00,0x80,0xf9,0x67,0xc0,0x00,
+ 0x03,0xc0,0x00,0x00,0x00,0x03,0xc0,0x00,0x00,0x80,0xc1,0x60,0xc0,0x00,0x03,
+ 0xc0,0x00,0x00,0x00,0x03,0xc0,0x00,0x00,0x80,0xc1,0x60,0xc0,0x00,0x03,0xc0,
+ 0x00,0x00,0x00,0x03,0xc0,0x00,0x00,0x80,0xc1,0x60,0xc0,0x00,0x03,0xc0,0x00,
+ 0x00,0x00,0x03,0xc0,0x00,0x00,0x80,0xc1,0x60,0xc0,0x00,0x03,0xc0,0x00,0x00,
+ 0x00,0x03,0xc0,0x00,0x00,0x80,0x01,0x60,0xc0,0x00,0x03,0xc0,0x00,0x00,0x00,
+ 0x07,0xe0,0x00,0x00,0x80,0x03,0x70,0xc0,0x00,0x03,0xc0,0x00,0x00,0x00,0x06,
+ 0x60,0x00,0x00,0x00,0x03,0x30,0xc0,0x00,0x03,0xc0,0x00,0x00,0x00,0x0e,0x70,
+ 0x00,0x00,0x00,0x07,0x38,0xc0,0x00,0x03,0xc0,0x00,0x00,0x00,0x3c,0x3c,0x00,
+ 0x00,0x00,0x1e,0x1e,0xc0,0x00,0x03,0xc0,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,
+ 0x00,0xfc,0x0f,0xc0,0x00,0x03,0xc0,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,
+ 0xf0,0x03,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x01,0xc0,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x03,0xc0,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x02,0x40,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x06,
+ 0x60,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x06,0x60,
+ 0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x04,0x20,0x00,
+ 0x00,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x0c,0x30,0x00,0x00,
+ 0x00,0x60,0x06,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x0c,0x30,0x00,0x00,0x00,
+ 0x20,0x04,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x08,0x10,0x00,0x00,0x00,0x30,
+ 0x0c,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x18,0x18,0x00,0x00,0x00,0x30,0x0c,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x18,0x18,0x00,0x00,0x00,0x10,0x08,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x10,0x08,0x00,0x00,0x00,0x18,0x18,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x30,0x0c,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x30,0x0c,0x00,0x00,0x00,0x08,0x10,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x20,0x04,0x00,0x00,0x00,0x0c,0x30,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x00,0x60,0x06,0x00,0x00,0x00,0x0c,0x30,0x00,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x40,0x02,0x00,0x00,0x00,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x40,0x02,0x00,0x00,0x00,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0xc0,
+ 0x03,0x00,0x00,0x00,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x80,0x01,
+ 0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x80,0x01,0x00,
+ 0x00,0x00,0x03,0xc0,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x80,0x01,0x00,0x00,
+ 0x00,0x01,0xc0,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0};
+
+
diff --git a/images/view_dvi_bw.xpm b/images/view_dvi_bw.xpm
new file mode 100644 (file)
index 0000000..6d0805f
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * view_dvi_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"     .............. ",
+"     .            . ",
+"   ...            . ",
+" ... .            . ",
+" . . .            . ",
+" . . .    .     . . ",
+" . . .    .     . . ",
+" . . .    .       . ",
+" . . .  ... . . . . ",
+" . . . .  . . . . . ",
+" . . . .  . . . . . ",
+" . . .  ...  .  . . ",
+" . . .            . ",
+" . . .............. ",
+" . .            .   ",
+" . ..............   ",
+" .            .     ",
+" ..............     ",
+"                    "};
+
+
+
diff --git a/images/view_ps_bw.xpm b/images/view_ps_bw.xpm
new file mode 100644 (file)
index 0000000..5cdc5dc
--- /dev/null
@@ -0,0 +1,28 @@
+/* XPM */
+static char * view_ps_xpm[] = {
+"20 20 2 1",
+"      c #BFBFBFBFBFBF",
+".     c #000000000000",
+"                    ",
+"     .............. ",
+"     .            . ",
+"   ...            . ",
+" ... .            . ",
+" . . . ...    ..  . ",
+" . . . .  .  .    . ",
+" . . . .  .   .   . ",
+" . . . .  .    .  . ",
+" . . . ...   ..   . ",
+" . . . .          . ",
+" . . . .          . ",
+" . . . .          . ",
+" . . .            . ",
+" . . .............. ",
+" . .            .   ",
+" . ..............   ",
+" .            .     ",
+" ..............     ",
+"                    "};
+
+
+
diff --git a/intl/.cvsignore b/intl/.cvsignore
new file mode 100644 (file)
index 0000000..8822c44
--- /dev/null
@@ -0,0 +1,2 @@
+po2tbl.sed
+Makefile
diff --git a/intl/ChangeLog b/intl/ChangeLog
new file mode 100644 (file)
index 0000000..91db56f
--- /dev/null
@@ -0,0 +1,1014 @@
+1997-08-16 00:13  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install-data): Don't change directory to install.
+
+1997-08-01 14:30  Ulrich Drepper  <drepper@cygnus.com>
+
+       * cat-compat.c: Fix copyright.
+
+       * localealias.c: Don't define strchr unless !HAVE_STRCHR.
+
+       * loadmsgcat.c: Update copyright.  Fix typos.
+
+       * l10nflist.c: Don't define strchr unless !HAVE_STRCHR.
+       (_nl_make_l10nflist): Handle sponsor and revision correctly.
+
+       * gettext.c: Update copyright.
+       * gettext.h: Likewise.
+       * hash-string.h: Likewise.
+
+       * finddomain.c: Remoave dead code.  Define strchr only if
+       !HAVE_STRCHR.
+
+       * explodename.c: Include <sys/types.h>.
+
+       * explodename.c: Reformat copyright text.
+       (_nl_explode_name): Fix typo.
+
+       * dcgettext.c: Define and use __set_errno.
+       (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is
+       not defined.
+
+       * bindtextdom.c: Pretty printing.
+
+1997-05-01 02:25  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (guess_category_value): Don't depend on
+       HAVE_LC_MESSAGES.  We don't need the macro here.
+       Patch by Bruno Haible <haible@ilog.fr>.
+
+       * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL
+       macro.  Instead use HAVE_LOCALE_NULL and define it when using
+       glibc, as in dcgettext.c.
+       Patch by Bruno Haible <haible@ilog.fr>.
+
+       * Makefile.in (CPPFLAGS): New variable.  Reported by Franc,ois
+       Pinard.
+
+Mon Mar 10 06:51:17 1997  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in: Implement handling of libtool.
+
+       * gettextP.h: Change data structures for use of generic lowlevel
+       i18n file handling.
+
+Wed Dec  4 20:21:18 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Put parentheses around arguments of memcpy macro
+       definition.
+       * localealias.c: Likewise.
+       * l10nflist.c: Likewise.
+       * finddomain.c: Likewise.
+       * bindtextdom.c: Likewise.
+       Reported by Thomas Esken.
+
+Mon Nov 25 22:57:51 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Move definition of `memcpy` macro to right
+       position.
+
+Fri Nov 22 04:01:58 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using
+       bcopy if not already defined.  Reported by Thomas Esken.
+       * bindtextdom.c: Likewise.
+       * l10nflist.c: Likewise.
+       * localealias.c: Likewise.
+       * textdomain.c: Likewise.
+
+Tue Oct 29 11:10:27 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (libdir): Change to use exec_prefix instead of
+       prefix.  Reported by Knut-HåvardAksnes <etokna@eto.ericsson.se>.
+
+Sat Aug 31 03:07:09 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c (_nl_normalize_codeset): We convert to lower case,
+       so don't prepend uppercase `ISO' for only numeric arg.
+
+Fri Jul 19 00:15:46 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after
+       definition of _GNU_SOURCE.  Patch by Roland McGrath.
+
+       * Makefile.in (uninstall): Fix another bug with `for' loop and
+       empty arguments.  Patch by Jim Meyering.  Correct name os
+       uninstalled files: no intl- prefix anymore.
+
+       * Makefile.in (install-data): Again work around shells which
+       cannot handle mpty for list.  Reported by Jim Meyering.
+
+Sat Jul 13 18:11:35 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Split goal.  Now depend on install-exec
+        and install-data.
+       (install-exec, install-data): New goals.  Created from former
+       install goal.
+       Reported by Karl Berry.
+
+Sat Jun 22 04:58:14 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (MKINSTALLDIRS): New variable.  Path to
+        mkinstalldirs script.
+       (install): use MKINSTALLDIRS variable or if the script is not present
+       try to find it in the $top_scrdir).
+
+Wed Jun 19 02:56:56 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Linux libc *partly* includes the argz_* functions.
+       Grr.  Work around by renaming the static version and use macros
+       for renaming.
+
+Tue Jun 18 20:11:17 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Correct presence test macros of __argz_* functions.
+
+       * l10nflist.c: Include <argz.h> based on test of it instead when
+       __argz_* functions are available.
+       Reported by Andreas Schwab.
+
+Thu Jun 13 15:17:44 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * explodename.c, l10nflist.c: Define NULL for dumb systems.
+
+Tue Jun 11 17:05:13 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in, libgettext.h (dcgettext): Rename local variable
+       result to __result to prevent name clash.
+
+       * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to
+        get prototype for stpcpy and strcasecmp.
+
+       * intlh.inst.in, libgettext.h: Move declaration of
+       `_nl_msg_cat_cntr' outside __extension__ block to prevent warning
+       from gcc's -Wnested-extern option.
+
+Fri Jun  7 01:58:00 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Remove comment.
+
+Thu Jun  6 17:28:17 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Work around for another Buglix stupidity.
+       Always use an `else' close for `if's.  Reported by Nelson Beebe.
+
+       * Makefile.in (intlh.inst): Correct typo in phony rule.
+       Reported by Nelson Beebe.
+
+Thu Jun  6 01:49:52 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (read_alias_file): Rename variable alloca_list to
+       block_list as the macro calls assume.
+       Patch by Eric Backus.
+
+       * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using
+        malloc.
+       (read_alias_file): Rename varriabe alloca_list to block_list as the
+       macro calls assume.
+       Patch by Eric Backus.
+
+       * l10nflist.c: Correct conditional for <argz.h> inclusion.
+       Reported by Roland McGrath.
+
+       * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not
+        all-@USE_NLS@.
+
+       * Makefile.in (install): intlh.inst comes from local dir, not
+        $(srcdir).
+
+       * Makefile.in (intlh.inst): Special handling of this goal.  If
+       used in gettext, this is really a rul to construct this file.  If
+       used in any other package it is defined as a .PHONY rule with
+       empty body.
+
+       * finddomain.c: Extract locale file information handling into
+       l10nfile.c.  Rename local stpcpy__ function to stpcpy.
+
+       * dcgettext.c (stpcpy): Add local definition.
+
+       * l10nflist.c: Solve some portability problems.  Patches partly by
+       Thomas Esken.  Add local definition of stpcpy.
+
+Tue Jun  4 02:47:49 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in: Don't depend including <locale.h> on
+       HAVE_LOCALE_H.  Instead configure must rewrite this fiile
+       depending on the result of the configure run.
+
+       * Makefile.in (install): libintl.inst is now called intlh.inst.
+       Add rules for updating intlh.inst from intlh.inst.in.
+
+       * libintl.inst: Renamed to intlh.inst.in.
+
+       * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1
+        because gcc has __buitlin_alloca.
+       Reported by Roland McGrath.
+
+Mon Jun  3 00:32:16 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (installcheck): New goal to fulfill needs of
+        automake's distcheck.
+
+       * Makefile.in (install): Reorder commands so that VERSION is
+        found.
+
+       * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in
+        @datadir@/gettext.
+       (COMSRCS): Add l10nfile.c.
+       (OBJECTS): Add l10nfile.o.
+       (DISTFILES): Rename to DISTFILE.normal.  Remove $(DISTFILES.common).
+       (DISTFILE.gettext): Remove $(DISTFILES.common).
+       (all-gettext): Remove goal.
+       (install): If $(PACKAGE) = gettext install, otherwose do nothing.  No
+       package but gettext itself should install libintl.h + headers.
+       (dist): Extend goal to work for gettext, too.
+       (dist-gettext): Remove goal.
+
+       * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc.
+
+Sun Jun  2 17:33:06 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * loadmsgcat.c (_nl_load_domain): Parameter is now comes from
+        find_l10nfile.
+
+Sat Jun  1 02:23:03 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c (__argz_next): Add definition.
+
+       * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca
+       code.  Use new l10nfile handling.
+
+       * localealias.c [!HAVE_ALLOCA]: Add code for handling missing
+        alloca code.
+
+       * l10nflist.c: Initial revision.
+
+Tue Apr  2 18:51:18 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all-gettext): New goal.  Same as all-yes.
+
+Thu Mar 28 23:01:22 1996  Karl Eichwalder  <ke@ke.central.de>
+
+       * Makefile.in (gettextsrcdir): Define using @datadir@.
+
+Tue Mar 26 12:39:14 1996  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Include <ctype.h>.  Reported by Roland McGrath.
+
+Sat Mar 23 02:00:35 1996  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
+        with external declaration.
+
+Sat Mar  2 00:47:09 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all-no): Rename from all_no.
+
+Sat Feb 17 00:25:59 1996  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h [loaded_domain]: Array `successor' must now contain up
+        to 63 elements (because of codeset name normalization).
+
+       * finddomain.c: Implement codeset name normalization.
+
+Thu Feb 15 04:39:09 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all): Define to `all-@USE_NLS@'.
+       (all-yes, all_no): New goals.  `all-no' is noop, `all-yes'
+       is former all.
+
+Mon Jan 15 21:46:01 1996  Howard Gayle  <howard@hal.com>
+
+       * localealias.c (alias_compare): Increment string pointers in loop
+        of strcasecmp replacement.
+
+Fri Dec 29 21:16:34 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src): Who commented this goal out ? :-)
+
+Fri Dec 29 15:08:16 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (DCGETTEXT): Save `errno'.  Failing system calls
+       should not effect it because a missing catalog is no error.
+       Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>.
+
+Tue Dec 19 22:09:13 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (Makefile): Explicitly use $(SHELL) for running
+        shell scripts.
+
+Fri Dec 15 17:34:59 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * Makefile.in (install-src): Only install library and header when
+       we use the own implementation.  Don't do it when using the
+       system's gettext or catgets functions.
+
+       * dcgettext.c (find_msg): Must not swap domain->hash_size here.
+
+Sat Dec  9 16:24:37 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c, libintl.inst, libgettext.h, hash-string.h,
+       gettextP.h, finddomain.c, dcgettext.c, cat-compat.c:
+       Use PARAMS instead of __P.  Suggested by Roland McGrath.
+
+Tue Dec  5 11:39:14 1995  Larry Schwimmer  <rosebud@cyclone.stanford.edu>
+
+       * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if
+       !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty.
+
+Mon Dec  4 15:42:07 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src):
+       Install libintl.inst instead of libintl.h.install.
+
+Sat Dec  2 22:51:38 1995  Marcus Daniels  <marcus@sysc.pdx.edu>
+
+       * cat-compat.c (textdomain):
+       Reverse order in which files are tried you load.  First
+       try local file, when this failed absolute path.
+
+Wed Nov 29 02:03:53 1995  Nelson H. F. Beebe  <beebe@math.utah.edu>
+
+       * cat-compat.c (bindtextdomain): Add missing { }.
+
+Sun Nov 26 18:21:41 1995  Ulrich Drepper  <drepper@myware>
+
+       * libintl.inst: Add missing __P definition.  Reported by Nelson Beebe.
+
+       * Makefile.in:
+       Add dummy `all' and `dvi' goals.  Reported by Tom Tromey.
+
+Sat Nov 25 16:12:01 1995  Franc,ois Pinard  <pinard@iro.umontreal.ca>
+
+       * hash-string.h: Capitalize arguments of macros.
+
+Sat Nov 25 12:01:36 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Prevent files names longer than 13
+       characters.  libintl.h.glibc->libintl.glibc,
+       libintl.h.install->libintl.inst.  Reported by Joshua R. Poulson.
+
+Sat Nov 25 11:31:12 1995  Eric Backus  <ericb@lsid.hp.com>
+
+       * dcgettext.c: Fix bug in preprocessor conditionals.
+
+Sat Nov 25 02:35:27 1995  Nelson H. F. Beebe  <beebe@math.utah.edu>
+
+       * libgettext.h: Solaris cc does not understand
+        #if !SYMBOL1 && !SYMBOL2.  Sad but true.
+
+Thu Nov 23 16:22:14 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h (hash_string):
+       Fix for machine with >32 bit `unsigned long's.
+
+       * dcgettext.c (DCGETTEXT):
+       Fix horrible bug in loop for alternative translation.
+
+Thu Nov 23 01:45:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed:
+       Some further simplifications in message number generation.
+
+Mon Nov 20 21:08:43 1995  Ulrich Drepper  <drepper@myware>
+
+       * libintl.h.glibc: Use __const instead of const in prototypes.
+
+       * Makefile.in (install-src):
+       Install libintl.h.install instead of libintl.h.  This
+       is a stripped-down version.  Suggested by Peter Miller.
+
+       * libintl.h.install, libintl.h.glibc: Initial revision.
+
+       * localealias.c (_nl_expand_alias, read_alias_file):
+       Protect prototypes in type casts by __P.
+
+Tue Nov 14 16:43:58 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h: Correct prototype for hash_string.
+
+Sun Nov 12 12:42:30 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h (hash_string): Add prototype.
+
+       * gettextP.h: Fix copyright.
+       (SWAP): Add prototype.
+
+Wed Nov  8 22:56:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (read_alias_file): Forgot sizeof.
+       Avoid calling *printf function.  This introduces a big overhead.
+       Patch by Roland McGrath.
+
+Tue Nov  7 14:21:08 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy.
+
+       * finddomain.c (stpcpy):
+       Define substitution function local.  The macro was to flaky.
+
+       * cat-compat.c: Fix typo.
+
+       * xopen-msg.sed, linux-msg.sed:
+       While bringing message number to right place only accept digits.
+
+       * linux-msg.sed, xopen-msg.sed: Now that the counter does not have
+       leading 0s we don't need to remove them.  Reported by Marcus
+       Daniels.
+
+       * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in
+       dependency.  Reported by Marcus Daniels.
+
+       * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement.
+       Generally cleanup using #if instead of #ifndef.
+
+       * Makefile.in: Correct typos in comment.  By Franc,ois Pinard.
+
+Mon Nov  6 00:27:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src): Don't install libintl.h and libintl.a
+       if we use an available gettext implementation.
+
+Sun Nov  5 22:02:08 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS.  Reported
+       by Franc,ois Pinard.
+
+       * libgettext.h: Use #if instead of #ifdef/#ifndef.
+
+       * finddomain.c:
+       Comments describing what has to be done should start with FIXME.
+
+Sun Nov  5 19:38:01 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Split.  Use DISTFILES with normal meaning.
+       DISTFILES.common names the files common to both dist goals.
+       DISTFILES.gettext are the files only distributed in GNU gettext.
+
+Sun Nov  5 17:32:54 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (DCGETTEXT): Correct searching in derived locales.
+       This was necessary since a change in _nl_find_msg several weeks
+       ago.  I really don't know this is still not fixed.
+
+Sun Nov  5 12:43:12 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL.  This
+       might mark a special condition.
+
+       * finddomain.c (make_entry_rec): Don't make illegal entry as decided.
+
+       * Makefile.in (dist): Suppress error message when ln failed.
+       Get files from $(srcdir) explicitly.
+
+       * libgettext.h (gettext_const): Rename to gettext_noop.
+
+Fri Nov  3 07:36:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (make_entry_rec):
+       Protect against wrong locale names by testing mask.
+
+       * libgettext.h (gettext_const): Add macro definition.
+       Capitalize macro arguments.
+
+Thu Nov  2 23:15:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Test for pointer != NULL before accessing value.
+       Reported by Tom Tromey.
+
+       * gettext.c (NULL):
+       Define as (void*)0 instad of 0.  Reported by Franc,ois Pinard.
+
+Mon Oct 30 21:28:52 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
+
+Sat Oct 28 23:20:47 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h: Disable dcgettext optimization for Solaris 2.3.
+
+       * localealias.c (alias_compare):
+       Peter Miller reported that tolower in some systems is
+       even dumber than I thought.  Protect call by `isupper'.
+
+Fri Oct 27 22:22:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (libdir, includedir): New variables.
+       (install-src): Install libintl.a and libintl.h in correct dirs.
+
+Fri Oct 27 22:07:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c.
+
+       * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques.
+
+       * localealias.c:
+       Fix typo and superflous test.  Reported by Christian von Roques.
+
+Fri Oct  6 11:52:05 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Correct some remainder from the pre-CEN syntax.  Now
+       we don't have a constant number of successors anymore.
+
+Wed Sep 27 21:41:13 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Add libintl.h.glibc.
+
+       * Makefile.in (dist-libc): Add goal for packing sources for glibc.
+       (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc.
+
+       * loadmsgcat.c: Forget to continue #if line.
+
+       * localealias.c:
+       [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name
+       space clean.
+
+       * dcgettext.c, finddomain.c: Better comment to last change.
+
+       * loadmsgcat.c:
+       [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to
+       __fstat, __open, __close, __read, __mmap, and __munmap resp
+       to keep ANSI C name space clean.
+
+       * finddomain.c:
+       [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean.
+
+       * dcgettext.c:
+       [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to
+       keep ANSI C name space clean.
+
+       * libgettext.h:
+       Include sys/types.h for those old SysV systems out there.
+       Reported by Francesco Potorti`.
+
+       * loadmsgcat.c (use_mmap): Define if compiled for glibc.
+
+       * bindtextdom.c: Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * finddomain.c: Fix 2 times defiend -> defined.
+
+       * textdomain.c: Include libintl.h instead of libgettext.h when
+       compiling for glibc.  Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc.
+
+       * gettext.c:
+       Include libintl.h instead of libgettext.h when compiling for glibc.
+       Get NULL from stddef.h if we compile for glibc.
+
+       * finddomain.c: Include libintl.h instead of libgettext.h when
+       compiling for glibc.  Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * dcgettext.c: Include all those standard headers unconditionally
+       if _LIBC is defined.
+
+       * dgettext.c: If compiled in glibc include libintl.h instead of
+       libgettext.h.
+       (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc.
+
+       * dcgettext.c: If compiled in glibc include libintl.h instead of
+       libgettext.h.
+       (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc.
+
+       * bindtextdom.c:
+       If compiled in glibc include libintl.h instead of libgettext.h.
+
+Mon Sep 25 22:23:06 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0.
+       Reported by Marcus Daniels.
+
+       * cat-compat.c (bindtextdomain):
+       String used in putenv must not be recycled.
+       Reported by Marcus Daniels.
+
+       * libgettext.h (__USE_GNU_GETTEXT):
+       Additional symbol to signal that we use GNU gettext
+       library.
+
+       * cat-compat.c (bindtextdomain):
+       Fix bug with the strange stpcpy replacement.
+       Reported by Nelson Beebe.
+
+Sat Sep 23 08:23:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * cat-compat.c: Include <string.h> for stpcpy prototype.
+
+       * localealias.c (read_alias_file):
+       While expand strdup code temporary variable `cp' hided
+       higher level variable with same name.  Rename to `tp'.
+
+       * textdomain.c (textdomain):
+       Avoid warning by using temporary variable in strdup code.
+
+       * finddomain.c (_nl_find_domain): Remove unused variable `application'.
+
+Thu Sep 21 15:51:44 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (alias_compare):
+       Use strcasecmp() only if available.  Else use
+       implementation in place.
+
+       * intl-compat.c:
+       Wrapper functions now call *__ functions instead of __*.
+
+       * libgettext.h: Declare prototypes for *__ functions instead for __*.
+
+       * cat-compat.c, loadmsgcat.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+
+       * bindtextdom.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+       Rename to bindtextdomain__ if not used in GNU C Library.
+
+       * dgettext.c:
+       Rename function to dgettext__ if not used in GNU C Library.
+
+       * gettext.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+       Functions now called gettext__ if not used in GNU C Library.
+
+       * dcgettext.c, localealias.c, textdomain.c, finddomain.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+
+Sun Sep 17 23:14:49 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Correct some bugs in handling of CEN standard
+       locale definitions.
+
+Thu Sep  7 01:49:28 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Implement CEN syntax.
+
+       * gettextP.h (loaded_domain): Extend number of successors to 31.
+
+Sat Aug 19 19:25:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (aliaspath): Remove path to X11 locale dir.
+
+       * Makefile.in: Make install-src depend on install.  This helps
+       gettext to install the sources and other packages can use the
+       install goal.
+
+Sat Aug 19 15:19:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (uninstall): Remove stuff installed by install-src.
+
+Tue Aug 15 13:13:53 1995  Ulrich Drepper  <drepper@myware>
+
+       * VERSION.in: Initial revision.
+
+       * Makefile.in (DISTFILES):
+       Add VERSION file.  This is not necessary for gettext, but
+       for other packages using this library.
+
+Tue Aug 15 06:16:44 1995  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h (_nl_find_domain):
+       New prototype after changing search strategy.
+
+       * finddomain.c (_nl_find_domain):
+       We now try only to find a specified catalog.  Fall back to other
+       catalogs listed in the locale list is now done in __dcgettext.
+
+       * dcgettext.c (__dcgettext):
+       Now we provide message fall back even to different languages.
+       I.e. if a message is not available in one language all the other
+       in the locale list a tried.  Formerly fall back was only possible
+       within one language.  Implemented by moving one loop from
+       _nl_find_domain to here.
+
+Mon Aug 14 23:45:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (gettextsrcdir):
+       Directory where source of GNU gettext library are made
+       available.
+       (INSTALL, INSTALL_DATA): Programs used for installing sources.
+       (gettext-src): New.  Rule to install GNU gettext sources for use in
+       gettextize shell script.
+
+Sun Aug 13 14:40:48 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c (_nl_load_domain):
+       Use mmap for loading only when munmap function is
+       also available.
+
+       * Makefile.in (install): Depend on `all' goal.
+
+Wed Aug  9 11:04:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (read_alias_file):
+       Do not overwrite '\n' when terminating alias value string.
+
+       * localealias.c (read_alias_file):
+       Handle long lines.  Ignore the rest not fitting in
+       the buffer after the initial `fgets' call.
+
+Wed Aug  9 00:54:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h (_nl_load_domain):
+       Add prototype, replacing prototype for _nl_load_msg_cat.
+
+       * finddomain.c (_nl_find_domain):
+       Remove unneeded variable filename and filename_len.
+       (expand_alias): Remove prototype because functions does not
+       exist anymore.
+
+       * localealias.c (read_alias_file):
+       Change type of fname_len parameter to int.
+       (xmalloc): Add prototype.
+
+       * loadmsgcat.c: Better prototypes for xmalloc.
+
+Tue Aug  8 22:30:39 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Allow alias name to be constructed from the four components.
+
+       * Makefile.in (aliaspath): New variable.  Set to preliminary value.
+       (SOURCES): Add localealias.c.
+       (OBJECTS): Add localealias.o.
+
+       * gettextP.h: Add prototype for _nl_expand_alias.
+
+       * finddomain.c: Aliasing handled in intl/localealias.c.
+
+       * localealias.c: Aliasing for locale names.
+
+       * bindtextdom.c: Better prototypes for xmalloc and xstrdup.
+
+Mon Aug  7 23:47:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): gettext.perl is now found in misc/.
+
+       * cat-compat.c (bindtextdomain):
+       Correct implementation.  dirname parameter was not used.
+       Reported by Marcus Daniels.
+
+       * gettextP.h (loaded_domain):
+       New fields `successor' and `decided' for oo, lazy
+       message handling implementation.
+
+       * dcgettext.c:
+       Adopt for oo, lazy message handliing.
+       Now we can inherit translations from less specific locales.
+       (find_msg): New function.
+
+       * loadmsgcat.c, finddomain.c:
+       Complete rewrite.  Implement oo, lazy message handling :-).
+       We now have an additional environment variable `LANGUAGE' with
+       a higher priority than LC_ALL for the LC_MESSAGE locale.
+       Here we can set a colon separated list of specifications each
+       of the form `language[_territory[.codeset]][@modifier]'.
+
+Sat Aug  5 09:55:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (unistd.h):
+       Include to get _PC_PATH_MAX defined on system having it.
+
+Fri Aug  4 22:42:00 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (stpcpy): Include prototype.
+
+       * Makefile.in (dist): Remove `copying instead' message.
+
+Wed Aug  2 18:52:03 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (ID, TAGS): Do not use $^.
+
+Tue Aug  1 20:07:11 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (TAGS, ID): Use $^ as command argument.
+       (TAGS): Give etags -o option t write to current directory,
+       not $(srcdir).
+       (ID): Use $(srcdir) instead os $(top_srcdir)/src.
+       (distclean): Remove ID.
+
+Sun Jul 30 11:51:46 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (gnulocaledir):
+       New variable, always using share/ for data directory.
+       (DEFS): Add GNULOCALEDIR, used in finddomain.c.
+
+       * finddomain.c (_nl_default_dirname):
+       Set to GNULOCALEDIR, because it always has to point
+       to the directory where GNU gettext Library writes it to.
+
+       * intl-compat.c (textdomain, bindtextdomain):
+       Undefine macros before function definition.
+
+Sat Jul 22 01:10:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h (_LIBINTL_H):
+       Protect definition in case where this file is included as
+       libgettext.h on Solaris machines.  Add comment about this.
+
+Wed Jul 19 02:36:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * intl-compat.c (textdomain): Correct typo.
+
+Wed Jul 19 01:51:35 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (dcgettext): Function now called __dcgettext.
+
+       * dgettext.c (dgettext): Now called __dgettext and calls
+       __dcgettext.
+
+       * gettext.c (gettext):
+       Function now called __gettext and calls __dgettext.
+
+       * textdomain.c (textdomain): Function now called __textdomain.
+
+       * bindtextdom.c (bindtextdomain): Function now called
+       __bindtextdomain.
+
+       * intl-compat.c: Initial revision.
+
+       * Makefile.in (SOURCES): Add intl-compat.c.
+       (OBJECTS): We always compile the GNU gettext library functions.
+       OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o,
+       and intl-compat.o.
+       (GETTOBJS): Contains now only intl-compat.o.
+
+       * libgettext.h:
+       Re-include protection matches dualistic character of libgettext.h.
+       For all functions in GNU gettext library define __ counter part.
+
+       * finddomain.c (strchr): Define as index if not found in C library.
+       (_nl_find_domain): For relative paths paste / in between.
+
+Tue Jul 18 16:37:45 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h.
+
+       * xopen-msg.sed: Fix bug with `msgstr ""' lines.
+       A little bit better comments.
+
+Tue Jul 18 01:18:27 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in:
+       po-mode.el, makelinks, combine-sh are now found in ../misc.
+
+       * po-mode.el, makelinks, combine-sh, elisp-comp:
+       Moved to ../misc/.
+
+       * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__.
+
+Sun Jul 16 22:33:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (INSTALL, INSTALL_DATA): New variables.
+       (install-data, uninstall): Install/uninstall .elc file.
+
+       * po-mode.el (Installation comment):
+       Add .pox as possible extension of .po files.
+
+Sun Jul 16 13:23:27 1995  Ulrich Drepper  <drepper@myware>
+
+       * elisp-comp: Complete new version by Franc,ois: This does not
+       fail when not compiling in the source directory.
+
+Sun Jul 16 00:12:17 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (../po/cat-id-tbl.o):
+       Use $(MAKE) instead of make for recursive make.
+
+       * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh.
+       (install-exec): Add missing dummy goal.
+       (install-data, uninstall): @ in multi-line shell command at
+       beginning, not in front of echo.  Reported by Eric Backus.
+
+Sat Jul 15 00:21:28 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES):
+       Rename libgettext.perl to gettext.perl to fit in 14 chars
+       file systems.
+
+       * gettext.perl:
+       Rename to gettext.perl to fit in 14 chars file systems.
+
+Thu Jul 13 23:17:20 1995  Ulrich Drepper  <drepper@myware>
+
+       * cat-compat.c: If !STDC_HEADERS try to include malloc.h.
+
+Thu Jul 13 20:55:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in: Pretty printing.
+
+       * linux-msg.sed, xopen-msg.sed:
+       Correct bugs with handling substitute flags in branches.
+
+       * hash-string.h (hash_string):
+       Old K&R compilers don't under stand `unsigned char'.
+
+       * gettext.h (nls_uint32):
+       Some old K&R compilers (eg HP) don't understand `unsigned int'.
+
+       * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes.
+
+Thu Jul 13 01:34:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (ELCFILES): New variable.
+       (DISTFILES): Add elisp-comp.
+       Add implicit rule for .el -> .elc compilation.
+       (install-data): install $ELCFILES
+       (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp.
+
+       * elisp-comp: Initial revision
+
+Wed Jul 12 16:14:52 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in:
+       cat-id-tbl.c is now found in po/.  This enables us to use an identical
+       intl/ directory in all packages.
+
+       * dcgettext.c (dcgettext): hashing does not work for table size <= 2.
+
+       * textdomain.c: fix typo (#if def -> #if defined)
+
+Tue Jul 11 18:44:43 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (stamp-cat-id): use top_srcdir to address source files
+       (DISTFILES,distclean): move tupdate.perl to src/
+
+       * po-to-tbl.sed.in:
+       add additional jump to clear change flag to recognize multiline strings
+
+Tue Jul 11 01:32:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * textdomain.c: Protect inclusion of stdlib.h and string.h.
+
+       * loadmsgcat.c: Protect inclusion of stdlib.h.
+
+       * libgettext.h: Protect inclusion of locale.h.
+       Allow use in C++ programs.
+       Define NULL is not happened already.
+
+       * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of
+       po-to-tbl.sed.
+       (distclean): remove po-to-tbl.sed and tupdate.perl.
+
+       * tupdate.perl.in: Substitute Perl path even in exec line.
+       Don't include entries without translation from old .po file.
+
+Tue Jul  4 00:41:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * tupdate.perl.in: use "Updated: " in msgid "".
+
+       * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR).
+       Define getenv if !__STDC__.
+
+       * bindtextdom.c: Protect stdlib.h and string.h inclusion.
+       Define free if !__STDC__.
+
+       * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+       Define free if !__STDC__.
+
+       * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+
+Mon Jul  3 23:56:30 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR.
+       Remove unneeded $(srcdir) from Makefile.in dependency.
+
+       * makelinks: Add copyright and short description.
+
+       * po-mode.el: Last version for 0.7.
+
+       * tupdate.perl.in: Fix die message.
+
+       * dcgettext.c: Protect include of string.h.
+
+       * gettext.c: Protect include of stdlib.h and further tries to get NULL.
+
+       * finddomain.c: Some corrections in includes.
+
+       * Makefile.in (INCLUDES): Prune list correct path to Makefile.in.
+
+       * po-to-tbl.sed: Adopt for new .po file format.
+
+       * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format.
+
+Sun Jul  2 23:55:03 1995  Ulrich Drepper  <drepper@myware>
+
+       * tupdate.perl.in: Complete rewrite for new .po file format.
+
+Sun Jul  2 02:06:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * First official release.  This directory contains all the code
+       needed to internationalize own packages.  It provides functions
+       which allow to use the X/Open catgets function with an interface
+       like the Uniforum gettext function.  For system which does not
+       have neither of those a complete implementation is provided.
diff --git a/intl/Makefile.in b/intl/Makefile.in
new file mode 100644 (file)
index 0000000..b5e6052
--- /dev/null
@@ -0,0 +1,214 @@
+# Makefile for directory with message catalog handling in GNU NLS Utilities.
+# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+transform = @program_transform_name@
+libdir = $(exec_prefix)/lib
+includedir = $(prefix)/include
+datadir = $(prefix)/@DATADIRNAME@
+localedir = $(datadir)/locale
+gnulocaledir = $(prefix)/share/locale
+gettextsrcdir = @datadir@/gettext/intl
+aliaspath = $(localedir):.
+subdir = intl
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+
+l = @l@
+
+AR = ar
+CC = @CC@
+LIBTOOL = @LIBTOOL@
+RANLIB = @RANLIB@
+
+DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
+-DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@
+LDFLAGS = @LDFLAGS@
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+HEADERS = $(COMHDRS) libgettext.h loadinfo.h
+COMHDRS = gettext.h gettextP.h hash-string.h
+SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
+COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
+finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
+explodename.c
+OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
+finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
+explodename.$lo
+CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
+GETTOBJS = intl-compat.$lo
+DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
+xopen-msg.sed $(HEADERS) $(SOURCES)
+DISTFILES.normal = VERSION
+DISTFILES.gettext = libintl.glibc intlh.inst.in
+
+.SUFFIXES:
+.SUFFIXES: .c .o .lo
+.c.o:
+       $(COMPILE) $<
+.c.lo:
+       $(LIBTOOL) --mode=compile $(COMPILE) $<
+
+INCLUDES = -I../src -I. -I$(top_srcdir)/src -I$(top_srcdir)/intl 
+
+all: all-@USE_INCLUDED_LIBINTL@
+
+all-yes: libintl.$la intlh.inst
+all-no:
+
+libintl.a: $(OBJECTS)
+       rm -f $@
+       $(AR) cru $@ $(OBJECTS)
+       $(RANLIB) $@
+
+libintl.la: $(OBJECTS)
+       $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
+                  -version-info 1:0 -rpath $(libdir)
+
+../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
+       cd ../po && $(MAKE) cat-id-tbl.$lo
+
+check: all
+
+# This installation goal is only used in GNU gettext.  Packages which
+# only use the library should use install instead.
+
+# We must not install the libintl.h/libintl.a files if we are on a
+# system which has the gettext() function in its C library or in a
+# separate library or use the catgets interface.  A special case is
+# where configure found a previously installed GNU gettext library.
+# If you want to use the one which comes with this version of the
+# package, you have to use `configure --with-included-gettext'.
+install: install-exec install-data
+install-exec: all
+       if test "$(PACKAGE)" = "gettext" \
+          && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+         if test -r $(MKINSTALLDIRS); then \
+           $(MKINSTALLDIRS) $(libdir) $(includedir); \
+         else \
+           $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
+         fi; \
+         $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
+         $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
+       else \
+         : ; \
+       fi
+install-data: all
+       if test "$(PACKAGE)" = "gettext"; then \
+         if test -r $(MKINSTALLDIRS); then \
+           $(MKINSTALLDIRS) $(gettextsrcdir); \
+         else \
+           $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
+         fi; \
+         $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
+         dists="$(DISTFILES.common)"; \
+         for file in $$dists; do \
+           $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
+         done; \
+       else \
+         : ; \
+       fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+       dists="$(DISTFILES.common)"; \
+       for file in $$dists; do \
+         rm -f $(gettextsrcdir)/$$file; \
+       done
+
+info dvi:
+
+$(OBJECTS): ../src/config.h libgettext.h
+bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
+dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
+
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES)
+       here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
+
+id: ID
+
+ID: $(HEADERS) $(SOURCES)
+       here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
+
+
+mostlyclean:
+       rm -f *.a *.o *.lo core core.*
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile ID TAGS po2msg.sed po2tbl.sed libintl.h
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+
+# GNU gettext needs not contain the file `VERSION' but contains some
+# other files which should not be distributed in other packages.
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: Makefile $(DISTFILES)
+       if test "$(PACKAGE)" = gettext; then \
+         additional="$(DISTFILES.gettext)"; \
+       else \
+         additional="$(DISTFILES.normal)"; \
+       fi; \
+       for file in $(DISTFILES.common) $$additional; do \
+         ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+           || cp -p $(srcdir)/$$file $(distdir); \
+       done
+
+dist-libc:
+       tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
+
+Makefile: Makefile.in ../config.status
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+# The dependency for intlh.inst is different in gettext and all other
+# packages.  Because we cannot you GNU make features we have to solve
+# the problem while rewriting Makefile.in.
+@GT_YES@intlh.inst: intlh.inst.in ../config.status
+@GT_YES@       cd .. \
+@GT_YES@       && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
+@GT_YES@         $(SHELL) ./config.status
+@GT_NO@.PHONY: intlh.inst
+@GT_NO@intlh.inst:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/intl/VERSION b/intl/VERSION
new file mode 100644 (file)
index 0000000..cb64869
--- /dev/null
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.10.31
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
new file mode 100644 (file)
index 0000000..bc0f2c4
--- /dev/null
@@ -0,0 +1,175 @@
+/* Implementation of the bindtextdomain(3) function
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+#include "gettext.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+/* Contains the default location of the message catalogs.  */
+extern const char _nl_default_dirname[];
+
+/* List with bindings of specific domains.  */
+extern struct binding *_nl_domain_bindings;
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define BINDTEXTDOMAIN __bindtextdomain
+#else
+# define BINDTEXTDOMAIN bindtextdomain__
+#endif
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+char *
+BINDTEXTDOMAIN (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+  struct binding *binding;
+
+  /* Some sanity checks.  */
+  if (domainname == NULL || domainname[0] == '\0')
+    return NULL;
+
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+       /* We found it!  */
+       break;
+      if (compare < 0)
+       {
+         /* It is not in the list.  */
+         binding = NULL;
+         break;
+       }
+    }
+
+  if (dirname == NULL)
+    /* The current binding has be to returned.  */
+    return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
+
+  if (binding != NULL)
+    {
+      /* The domain is already bound.  Replace the old binding.  */
+      char *new_dirname;
+
+      if (strcmp (dirname, _nl_default_dirname) == 0)
+       new_dirname = (char *) _nl_default_dirname;
+      else
+       {
+         size_t len = strlen (dirname) + 1;
+         new_dirname = (char *) malloc (len);
+         if (new_dirname == NULL)
+           return NULL;
+
+         memcpy (new_dirname, dirname, len);
+       }
+
+      if (strcmp (binding->dirname, _nl_default_dirname) != 0)
+        free (binding->dirname);
+
+      binding->dirname = new_dirname;
+    }
+  else
+    {
+      /* We have to create a new binding.  */
+      size_t len;
+      struct binding *new_binding =
+       (struct binding *) malloc (sizeof (*new_binding));
+
+      if (new_binding == NULL)
+       return NULL;
+
+      len = strlen (domainname) + 1;
+      new_binding->domainname = (char *) malloc (len);
+      if (new_binding->domainname == NULL)
+         return NULL;
+      memcpy (new_binding->domainname, domainname, len);
+
+      if (strcmp (dirname, _nl_default_dirname) == 0)
+       new_binding->dirname = (char *) _nl_default_dirname;
+      else
+       {
+         len = strlen (dirname) + 1;
+         new_binding->dirname = (char *) malloc (len);
+         if (new_binding->dirname == NULL)
+           return NULL;
+         memcpy (new_binding->dirname, dirname, len);
+       }
+
+      /* Now enqueue it.  */
+      if (_nl_domain_bindings == NULL
+         || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
+       {
+         new_binding->next = _nl_domain_bindings;
+         _nl_domain_bindings = new_binding;
+       }
+      else
+       {
+         binding = _nl_domain_bindings;
+         while (binding->next != NULL
+                && strcmp (domainname, binding->next->domainname) > 0)
+           binding = binding->next;
+
+         new_binding->next = binding->next;
+         binding->next = new_binding;
+       }
+
+      binding = new_binding;
+    }
+
+  return binding->dirname;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__bindtextdomain, bindtextdomain);
+#endif
diff --git a/intl/cat-compat.c b/intl/cat-compat.c
new file mode 100644 (file)
index 0000000..867d901
--- /dev/null
@@ -0,0 +1,262 @@
+/* Compatibility code for gettext-using-catgets interface.
+   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else
+char *getenv ();
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# endif
+#endif
+
+#ifdef HAVE_NL_TYPES_H
+# include <nl_types.h>
+#endif
+
+#include "libgettext.h"
+
+/* @@ end of prolog @@ */
+
+/* XPG3 defines the result of `setlocale (category, NULL)' as:
+   ``Directs `setlocale()' to query `category' and return the current
+     setting of `local'.''
+   However it does not specify the exact format.  And even worse: POSIX
+   defines this not at all.  So we can use this feature only on selected
+   system (e.g. those using GNU C Library).  */
+#ifdef _LIBC
+# define HAVE_LOCALE_NULL
+#endif
+
+/* The catalog descriptor.  */
+static nl_catd catalog = (nl_catd) -1;
+
+/* Name of the default catalog.  */
+static const char default_catalog_name[] = "messages";
+
+/* Name of currently used catalog.  */
+static const char *catalog_name = default_catalog_name;
+
+/* Get ID for given string.  If not found return -1.  */
+static int msg_to_cat_id PARAMS ((const char *msg));
+
+/* Substitution for systems lacking this function in their C library.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+#endif
+
+
+/* Set currently used domain/catalog.  */
+char *
+textdomain (domainname)
+     const char *domainname;
+{
+  nl_catd new_catalog;
+  char *new_name;
+  size_t new_name_len;
+  char *lang;
+
+#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \
+    && defined HAVE_LOCALE_NULL
+  lang = setlocale (LC_MESSAGES, NULL);
+#else
+  lang = getenv ("LC_ALL");
+  if (lang == NULL || lang[0] == '\0')
+    {
+      lang = getenv ("LC_MESSAGES");
+      if (lang == NULL || lang[0] == '\0')
+       lang = getenv ("LANG");
+    }
+#endif
+  if (lang == NULL || lang[0] == '\0')
+    lang = "C";
+
+  /* See whether name of currently used domain is asked.  */
+  if (domainname == NULL)
+    return (char *) catalog_name;
+
+  if (domainname[0] == '\0')
+    domainname = default_catalog_name;
+
+  /* Compute length of added path element.  */
+  new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang)
+                + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1
+                + sizeof (".cat");
+
+  new_name = (char *) malloc (new_name_len);
+  if (new_name == NULL)
+    return NULL;
+
+  strcpy (new_name, PACKAGE);
+  new_catalog = catopen (new_name, 0);
+
+  if (new_catalog == (nl_catd) -1)
+    {
+      /* NLSPATH search didn't work, try absolute path */
+      sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang,
+              PACKAGE);
+      new_catalog = catopen (new_name, 0);
+
+      if (new_catalog == (nl_catd) -1)
+       {
+         free (new_name);
+         return (char *) catalog_name;
+       }
+    }
+
+  /* Close old catalog.  */
+  if (catalog != (nl_catd) -1)
+    catclose (catalog);
+  if (catalog_name != default_catalog_name)
+    free ((char *) catalog_name);
+
+  catalog = new_catalog;
+  catalog_name = new_name;
+
+  return (char *) catalog_name;
+}
+
+char *
+bindtextdomain (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+#if HAVE_SETENV || HAVE_PUTENV
+  char *old_val, *new_val, *cp;
+  size_t new_val_len;
+
+  /* This does not make much sense here but to be compatible do it.  */
+  if (domainname == NULL)
+    return NULL;
+
+  /* Compute length of added path element.  If we use setenv we don't need
+     the first byts for NLSPATH=, but why complicate the code for this
+     peanuts.  */
+  new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname)
+               + sizeof ("/%L/LC_MESSAGES/%N.cat");
+
+  old_val = getenv ("NLSPATH");
+  if (old_val == NULL || old_val[0] == '\0')
+    {
+      old_val = NULL;
+      new_val_len += 1 + sizeof (LOCALEDIR) - 1
+                    + sizeof ("/%L/LC_MESSAGES/%N.cat");
+    }
+  else
+    new_val_len += strlen (old_val);
+
+  new_val = (char *) malloc (new_val_len);
+  if (new_val == NULL)
+    return NULL;
+
+# if HAVE_SETENV
+  cp = new_val;
+# else
+  cp = stpcpy (new_val, "NLSPATH=");
+# endif
+
+  cp = stpcpy (cp, dirname);
+  cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:");
+
+  if (old_val == NULL)
+    {
+# if __STDC__
+      stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat");
+# else
+
+      cp = stpcpy (cp, LOCALEDIR);
+      stpcpy (cp, "/%L/LC_MESSAGES/%N.cat");
+# endif
+    }
+  else
+    stpcpy (cp, old_val);
+
+# if HAVE_SETENV
+  setenv ("NLSPATH", new_val, 1);
+  free (new_val);
+# else
+  putenv (new_val);
+  /* Do *not* free the environment entry we just entered.  It is used
+     from now on.   */
+# endif
+
+#endif
+
+  return (char *) domainname;
+}
+
+#undef gettext
+char *
+gettext (msg)
+     const char *msg;
+{
+  int msgid;
+
+  if (msg == NULL || catalog == (nl_catd) -1)
+    return (char *) msg;
+
+  /* Get the message from the catalog.  We always use set number 1.
+     The message ID is computed by the function `msg_to_cat_id'
+     which works on the table generated by `po-to-tbl'.  */
+  msgid = msg_to_cat_id (msg);
+  if (msgid == -1)
+    return (char *) msg;
+
+  return catgets (catalog, 1, msgid, (char *) msg);
+}
+
+/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries
+   for the one equal to msg.  If it is found return the ID.  In case when
+   the string is not found return -1.  */
+static int
+msg_to_cat_id (msg)
+     const char *msg;
+{
+  int cnt;
+
+  for (cnt = 0; cnt < _msg_tbl_length; ++cnt)
+    if (strcmp (msg, _msg_tbl[cnt]._msg) == 0)
+      return _msg_tbl[cnt]._msg_number;
+
+  return -1;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
diff --git a/intl/dcgettext.c b/intl/dcgettext.c
new file mode 100644 (file)
index 0000000..c9171de
--- /dev/null
@@ -0,0 +1,600 @@
+/* Implementation of the dcgettext(3) function
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+char *getenv ();
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE  1
+# endif
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+#include "hash-string.h"
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define getcwd __getcwd
+# define stpcpy __stpcpy
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+#  define getcwd(buf, max) getwd (buf)
+# else
+char *getcwd ();
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+#endif
+
+/* Amount to increase buffer size by in each try.  */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h.  */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+   PATH_MAX but might cause redefinition warnings when sys/param.h is
+   later included (as on MORE/BSD 4.3).  */
+#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been.  */
+#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
+# include <sys/param.h>
+#endif
+
+#if !defined(PATH_MAX) && defined(MAXPATHLEN)
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* XPG3 defines the result of `setlocale (category, NULL)' as:
+   ``Directs `setlocale()' to query `category' and return the current
+     setting of `local'.''
+   However it does not specify the exact format.  And even worse: POSIX
+   defines this not at all.  So we can use this feature only on selected
+   system (e.g. those using GNU C Library).  */
+#ifdef _LIBC
+# define HAVE_LOCALE_NULL
+#endif
+
+/* Name of the default domain used for gettext(3) prior any call to
+   textdomain(3).  The default value for this is "messages".  */
+const char _nl_default_default_domain[] = "messages";
+
+/* Value used as the default domain for gettext(3).  */
+const char *_nl_current_default_domain = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs.  */
+const char _nl_default_dirname[] = GNULOCALEDIR;
+
+/* List with bindings of specific domains created by bindtextdomain()
+   calls.  */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions.  */
+static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
+                              const char *msgid));
+static const char *category_to_name PARAMS ((int category));
+static const char *guess_category_value PARAMS ((int category,
+                                                const char *categoryname));
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done.  */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+  void *address;
+  struct block_list *next;
+};
+# define ADD_BLOCK(list, addr)                                               \
+  do {                                                                       \
+    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
+    /* If we cannot get a free block we cannot add the new element to        \
+       the list.  */                                                         \
+    if (newp != NULL) {                                                              \
+      newp->address = (addr);                                                \
+      newp->next = (list);                                                   \
+      (list) = newp;                                                         \
+    }                                                                        \
+  } while (0)
+# define FREE_BLOCKS(list)                                                   \
+  do {                                                                       \
+    while (list != NULL) {                                                   \
+      struct block_list *old = list;                                         \
+      list = list->next;                                                     \
+      free (old);                                                            \
+    }                                                                        \
+  } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+#endif /* have alloca */
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCGETTEXT __dcgettext
+#else
+# define DCGETTEXT dcgettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+char *
+DCGETTEXT (domainname, msgid, category)
+     const char *domainname;
+     const char *msgid;
+     int category;
+{
+#ifndef HAVE_ALLOCA
+  struct block_list *block_list = NULL;
+#endif
+  struct loaded_l10nfile *domain;
+  struct binding *binding;
+  const char *categoryname;
+  const char *categoryvalue;
+  char *dirname, *xdomainname;
+  char *single_locale;
+  char *retval;
+  int saved_errno = errno;
+
+  /* If no real MSGID is given return NULL.  */
+  if (msgid == NULL)
+    return NULL;
+
+  /* If DOMAINNAME is NULL, we are interested in the default domain.  If
+     CATEGORY is not LC_MESSAGES this might not make much sense but the
+     defintion left this undefined.  */
+  if (domainname == NULL)
+    domainname = _nl_current_default_domain;
+
+  /* First find matching binding.  */
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+       /* We found it!  */
+       break;
+      if (compare < 0)
+       {
+         /* It is not in the list.  */
+         binding = NULL;
+         break;
+       }
+    }
+
+  if (binding == NULL)
+    dirname = (char *) _nl_default_dirname;
+  else if (binding->dirname[0] == '/')
+    dirname = binding->dirname;
+  else
+    {
+      /* We have a relative path.  Make it absolute now.  */
+      size_t dirname_len = strlen (binding->dirname) + 1;
+      size_t path_max;
+      char *ret;
+
+      path_max = (unsigned) PATH_MAX;
+      path_max += 2;           /* The getcwd docs say to do this.  */
+
+      dirname = (char *) alloca (path_max + dirname_len);
+      ADD_BLOCK (block_list, dirname);
+
+      __set_errno (0);
+      while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE)
+       {
+         path_max += PATH_INCR;
+         dirname = (char *) alloca (path_max + dirname_len);
+         ADD_BLOCK (block_list, dirname);
+         __set_errno (0);
+       }
+
+      if (ret == NULL)
+       {
+         /* We cannot get the current working directory.  Don't signal an
+            error but simply return the default string.  */
+         FREE_BLOCKS (block_list);
+         __set_errno (saved_errno);
+         return (char *) msgid;
+       }
+
+      /* We don't want libintl.a to depend on any other library.  So
+        we avoid the non-standard function stpcpy.  In GNU C Library
+        this function is available, though.  Also allow the symbol
+        HAVE_STPCPY to be defined.  */
+      stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+    }
+
+  /* Now determine the symbolic name of CATEGORY and its value.  */
+  categoryname = category_to_name (category);
+  categoryvalue = guess_category_value (category, categoryname);
+
+  xdomainname = (char *) alloca (strlen (categoryname)
+                                + strlen (domainname) + 5);
+  ADD_BLOCK (block_list, xdomainname);
+  /* We don't want libintl.a to depend on any other library.  So we
+     avoid the non-standard function stpcpy.  In GNU C Library this
+     function is available, though.  Also allow the symbol HAVE_STPCPY
+     to be defined.  */
+  stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+                 domainname),
+         ".mo");
+
+  /* Creating working area.  */
+  single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+  ADD_BLOCK (block_list, single_locale);
+
+
+  /* Search for the given string.  This is a loop because we perhaps
+     got an ordered list of languages to consider for th translation.  */
+  while (1)
+    {
+      /* Make CATEGORYVALUE point to the next element of the list.  */
+      while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+       ++categoryvalue;
+      if (categoryvalue[0] == '\0')
+       {
+         /* The whole contents of CATEGORYVALUE has been searched but
+            no valid entry has been found.  We solve this situation
+            by implicitly appending a "C" entry, i.e. no translation
+            will take place.  */
+         single_locale[0] = 'C';
+         single_locale[1] = '\0';
+       }
+      else
+       {
+         char *cp = single_locale;
+         while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+           *cp++ = *categoryvalue++;
+         *cp = '\0';
+       }
+
+      /* If the current locale value is C (or POSIX) we don't load a
+        domain.  Return the MSGID.  */
+      if (strcmp (single_locale, "C") == 0
+         || strcmp (single_locale, "POSIX") == 0)
+       {
+         FREE_BLOCKS (block_list);
+         __set_errno (saved_errno);
+         return (char *) msgid;
+       }
+
+
+      /* Find structure describing the message catalog matching the
+        DOMAINNAME and CATEGORY.  */
+      domain = _nl_find_domain (dirname, single_locale, xdomainname);
+
+      if (domain != NULL)
+       {
+         retval = find_msg (domain, msgid);
+
+         if (retval == NULL)
+           {
+             int cnt;
+
+             for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+               {
+                 retval = find_msg (domain->successor[cnt], msgid);
+
+                 if (retval != NULL)
+                   break;
+               }
+           }
+
+         if (retval != NULL)
+           {
+             FREE_BLOCKS (block_list);
+             __set_errno (saved_errno);
+             return retval;
+           }
+       }
+    }
+  /* NOTREACHED */
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dcgettext, dcgettext);
+#endif
+
+
+static char *
+find_msg (domain_file, msgid)
+     struct loaded_l10nfile *domain_file;
+     const char *msgid;
+{
+  size_t top, act, bottom;
+  struct loaded_domain *domain;
+
+  if (domain_file->decided == 0)
+    _nl_load_domain (domain_file);
+
+  if (domain_file->data == NULL)
+    return NULL;
+
+  domain = (struct loaded_domain *) domain_file->data;
+
+  /* Locate the MSGID and its translation.  */
+  if (domain->hash_size > 2 && domain->hash_tab != NULL)
+    {
+      /* Use the hashing table.  */
+      nls_uint32 len = strlen (msgid);
+      nls_uint32 hash_val = hash_string (msgid);
+      nls_uint32 idx = hash_val % domain->hash_size;
+      nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+      nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
+
+      if (nstr == 0)
+       /* Hash table entry is empty.  */
+       return NULL;
+
+      if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
+         && strcmp (msgid,
+                    domain->data + W (domain->must_swap,
+                                      domain->orig_tab[nstr - 1].offset)) == 0)
+       return (char *) domain->data + W (domain->must_swap,
+                                         domain->trans_tab[nstr - 1].offset);
+
+      while (1)
+       {
+         if (idx >= domain->hash_size - incr)
+           idx -= domain->hash_size - incr;
+         else
+           idx += incr;
+
+         nstr = W (domain->must_swap, domain->hash_tab[idx]);
+         if (nstr == 0)
+           /* Hash table entry is empty.  */
+           return NULL;
+
+         if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
+             && strcmp (msgid,
+                        domain->data + W (domain->must_swap,
+                                          domain->orig_tab[nstr - 1].offset))
+                == 0)
+           return (char *) domain->data
+             + W (domain->must_swap, domain->trans_tab[nstr - 1].offset);
+       }
+      /* NOTREACHED */
+    }
+
+  /* Now we try the default method:  binary search in the sorted
+     array of messages.  */
+  bottom = 0;
+  top = domain->nstrings;
+  while (bottom < top)
+    {
+      int cmp_val;
+
+      act = (bottom + top) / 2;
+      cmp_val = strcmp (msgid, domain->data
+                              + W (domain->must_swap,
+                                   domain->orig_tab[act].offset));
+      if (cmp_val < 0)
+       top = act;
+      else if (cmp_val > 0)
+       bottom = act + 1;
+      else
+       break;
+    }
+
+  /* If an translation is found return this.  */
+  return bottom >= top ? NULL : (char *) domain->data
+                                + W (domain->must_swap,
+                                    domain->trans_tab[act].offset);
+}
+
+
+/* Return string representation of locale CATEGORY.  */
+static const char *
+category_to_name (category)
+     int category;
+{
+  const char *retval;
+
+  switch (category)
+  {
+#ifdef LC_COLLATE
+  case LC_COLLATE:
+    retval = "LC_COLLATE";
+    break;
+#endif
+#ifdef LC_CTYPE
+  case LC_CTYPE:
+    retval = "LC_CTYPE";
+    break;
+#endif
+#ifdef LC_MONETARY
+  case LC_MONETARY:
+    retval = "LC_MONETARY";
+    break;
+#endif
+#ifdef LC_NUMERIC
+  case LC_NUMERIC:
+    retval = "LC_NUMERIC";
+    break;
+#endif
+#ifdef LC_TIME
+  case LC_TIME:
+    retval = "LC_TIME";
+    break;
+#endif
+#ifdef LC_MESSAGES
+  case LC_MESSAGES:
+    retval = "LC_MESSAGES";
+    break;
+#endif
+#ifdef LC_RESPONSE
+  case LC_RESPONSE:
+    retval = "LC_RESPONSE";
+    break;
+#endif
+#ifdef LC_ALL
+  case LC_ALL:
+    /* This might not make sense but is perhaps better than any other
+       value.  */
+    retval = "LC_ALL";
+    break;
+#endif
+  default:
+    /* If you have a better idea for a default value let me know.  */
+    retval = "LC_XXX";
+  }
+
+  return retval;
+}
+
+/* Guess value of current locale from value of the environment variables.  */
+static const char *
+guess_category_value (category, categoryname)
+     int category;
+     const char *categoryname;
+{
+  const char *retval;
+
+  /* The highest priority value is the `LANGUAGE' environment
+     variable.  This is a GNU extension.  */
+  retval = getenv ("LANGUAGE");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* `LANGUAGE' is not set.  So we have to proceed with the POSIX
+     methods of looking to `LC_ALL', `LC_xxx', and `LANG'.  On some
+     systems this can be done by the `setlocale' function itself.  */
+#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+  return setlocale (category, NULL);
+#else
+  /* Setting of LC_ALL overwrites all other.  */
+  retval = getenv ("LC_ALL");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* Next comes the name of the desired category.  */
+  retval = getenv (categoryname);
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* Last possibility is the LANG environment variable.  */
+  retval = getenv ("LANG");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* We use C as the default domain.  POSIX says this is implementation
+     defined.  */
+  return "C";
+#endif
+}
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
new file mode 100644 (file)
index 0000000..2fde677
--- /dev/null
@@ -0,0 +1,59 @@
+/* dgettext.c -- implementation of the dgettext(3) function
+   Copyright (C) 1995 Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined HAVE_LOCALE_H || defined _LIBC
+# include <locale.h>
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DGETTEXT __dgettext
+# define DCGETTEXT __dcgettext
+#else
+# define DGETTEXT dgettext__
+# define DCGETTEXT dcgettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+   LC_MESSAGES locale.  */
+char *
+DGETTEXT (domainname, msgid)
+     const char *domainname;
+     const char *msgid;
+{
+  return DCGETTEXT (domainname, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dgettext, dgettext);
+#endif
diff --git a/intl/explodename.c b/intl/explodename.c
new file mode 100644 (file)
index 0000000..37c46e9
--- /dev/null
@@ -0,0 +1,181 @@
+/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found.  Sigh!  */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+int
+_nl_explode_name (name, language, modifier, territory, codeset,
+                 normalized_codeset, special, sponsor, revision)
+     char *name;
+     const char **language;
+     const char **modifier;
+     const char **territory;
+     const char **codeset;
+     const char **normalized_codeset;
+     const char **special;
+     const char **sponsor;
+     const char **revision;
+{
+  enum { undecided, xpg, cen } syntax;
+  char *cp;
+  int mask;
+
+  *modifier = NULL;
+  *territory = NULL;
+  *codeset = NULL;
+  *normalized_codeset = NULL;
+  *special = NULL;
+  *sponsor = NULL;
+  *revision = NULL;
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_' and `@' if
+     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+  mask = 0;
+  syntax = undecided;
+  *language = cp = name;
+  while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@'
+        && cp[0] != '+' && cp[0] != ',')
+    ++cp;
+
+  if (*language == cp)
+    /* This does not make sense: language has to be specified.  Use
+       this entry as it is without exploding.  Perhaps it is an alias.  */
+    cp = strchr (*language, '\0');
+  else if (cp[0] == '_')
+    {
+      /* Next is the territory.  */
+      cp[0] = '\0';
+      *territory = ++cp;
+
+      while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
+            && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
+       ++cp;
+
+      mask |= TERRITORY;
+
+      if (cp[0] == '.')
+       {
+         /* Next is the codeset.  */
+         syntax = xpg;
+         cp[0] = '\0';
+         *codeset = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != '@')
+           ++cp;
+
+         mask |= XPG_CODESET;
+
+         if (*codeset != cp && (*codeset)[0] != '\0')
+           {
+             *normalized_codeset = _nl_normalize_codeset (*codeset,
+                                                          cp - *codeset);
+             if (strcmp (*codeset, *normalized_codeset) == 0)
+               free ((char *) *normalized_codeset);
+             else
+               mask |= XPG_NORM_CODESET;
+           }
+       }
+    }
+
+  if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
+    {
+      /* Next is the modifier.  */
+      syntax = cp[0] == '@' ? xpg : cen;
+      cp[0] = '\0';
+      *modifier = ++cp;
+
+      while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
+            && cp[0] != ',' && cp[0] != '_')
+       ++cp;
+
+      mask |= XPG_MODIFIER | CEN_AUDIENCE;
+    }
+
+  if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
+    {
+      syntax = cen;
+
+      if (cp[0] == '+')
+       {
+         /* Next is special application (CEN syntax).  */
+         cp[0] = '\0';
+         *special = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
+           ++cp;
+
+         mask |= CEN_SPECIAL;
+       }
+
+      if (cp[0] == ',')
+       {
+         /* Next is sponsor (CEN syntax).  */
+         cp[0] = '\0';
+         *sponsor = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != '_')
+           ++cp;
+
+         mask |= CEN_SPONSOR;
+       }
+
+      if (cp[0] == '_')
+       {
+         /* Next is revision (CEN syntax).  */
+         cp[0] = '\0';
+         *revision = ++cp;
+
+         mask |= CEN_REVISION;
+       }
+    }
+
+  /* For CEN syntax values it might be important to have the
+     separator character in the file name, not for XPG syntax.  */
+  if (syntax == xpg)
+    {
+      if (*territory != NULL && (*territory)[0] == '\0')
+       mask &= ~TERRITORY;
+
+      if (*codeset != NULL && (*codeset)[0] == '\0')
+       mask &= ~XPG_CODESET;
+
+      if (*modifier != NULL && (*modifier)[0] == '\0')
+       mask &= ~XPG_MODIFIER;
+    }
+
+  return mask;
+}
diff --git a/intl/finddomain.c b/intl/finddomain.c
new file mode 100644 (file)
index 0000000..ec85d4d
--- /dev/null
@@ -0,0 +1,189 @@
+/* Handle list of needed message catalogs
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+/* List of already loaded domains.  */
+static struct loaded_l10nfile *_nl_loaded_domains;
+
+
+/* Return a data structure describing the message catalog described by
+   the DOMAINNAME and CATEGORY parameters with respect to the currently
+   established bindings.  */
+struct loaded_l10nfile *
+_nl_find_domain (dirname, locale, domainname)
+     const char *dirname;
+     char *locale;
+     const char *domainname;
+{
+  struct loaded_l10nfile *retval;
+  const char *language;
+  const char *modifier;
+  const char *territory;
+  const char *codeset;
+  const char *normalized_codeset;
+  const char *special;
+  const char *sponsor;
+  const char *revision;
+  const char *alias_value;
+  int mask;
+
+  /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+
+               language[_territory[.codeset]][@modifier]
+
+     and six parts for the CEN syntax:
+
+       language[_territory][+audience][+special][,[sponsor][_revision]]
+
+     Beside the first all of them are allowed to be missing.  If the
+     full specified locale is not found, the less specific one are
+     looked for.  The various part will be stripped of according to
+     the following order:
+               (1) revision
+               (2) sponsor
+               (3) special
+               (4) codeset
+               (5) normalized codeset
+               (6) territory
+               (7) audience/modifier
+   */
+
+  /* If we have already tested for this locale entry there has to
+     be one data set in the list of loaded domains.  */
+  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+                              strlen (dirname) + 1, 0, locale, NULL, NULL,
+                              NULL, NULL, NULL, NULL, NULL, domainname, 0);
+  if (retval != NULL)
+    {
+      /* We know something about this locale.  */
+      int cnt;
+
+      if (retval->decided == 0)
+       _nl_load_domain (retval);
+
+      if (retval->data != NULL)
+       return retval;
+
+      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+       {
+         if (retval->successor[cnt]->decided == 0)
+           _nl_load_domain (retval->successor[cnt]);
+
+         if (retval->successor[cnt]->data != NULL)
+           break;
+       }
+      return cnt >= 0 ? retval : NULL;
+      /* NOTREACHED */
+    }
+
+  /* See whether the locale value is an alias.  If yes its value
+     *overwrites* the alias name.  No test for the original value is
+     done.  */
+  alias_value = _nl_expand_alias (locale);
+  if (alias_value != NULL)
+    {
+      size_t len = strlen (alias_value) + 1;
+      locale = (char *) malloc (len);
+      if (locale == NULL)
+       return NULL;
+
+      memcpy (locale, alias_value, len);
+    }
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_' and `@' if
+     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+  mask = _nl_explode_name (locale, &language, &modifier, &territory,
+                          &codeset, &normalized_codeset, &special,
+                          &sponsor, &revision);
+
+  /* Create all possible locale entries which might be interested in
+     generalization.  */
+  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+                              strlen (dirname) + 1, mask, language, territory,
+                              codeset, normalized_codeset, modifier, special,
+                              sponsor, revision, domainname, 1);
+  if (retval == NULL)
+    /* This means we are out of core.  */
+    return NULL;
+
+  if (retval->decided == 0)
+    _nl_load_domain (retval);
+  if (retval->data == NULL)
+    {
+      int cnt;
+      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+       {
+         if (retval->successor[cnt]->decided == 0)
+           _nl_load_domain (retval->successor[cnt]);
+         if (retval->successor[cnt]->data != NULL)
+           break;
+       }
+    }
+
+  /* The room for an alias was dynamically allocated.  Free it now.  */
+  if (alias_value != NULL)
+    free (locale);
+
+  return retval;
+}
diff --git a/intl/gettext.c b/intl/gettext.c
new file mode 100644 (file)
index 0000000..1336d21
--- /dev/null
@@ -0,0 +1,70 @@
+/* Implementation of gettext(3) function
+   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# ifdef STDC_HEADERS
+#  include <stdlib.h>          /* Just for NULL.  */
+# else
+#  ifdef HAVE_STRING_H
+#   include <string.h>
+#  else
+#   define NULL ((void *) 0)
+#  endif
+# endif
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define GETTEXT __gettext
+# define DGETTEXT __dgettext
+#else
+# define GETTEXT gettext__
+# define DGETTEXT dgettext__
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+char *
+GETTEXT (msgid)
+     const char *msgid;
+{
+  return DGETTEXT (NULL, msgid);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__gettext, gettext);
+#endif
diff --git a/intl/gettext.h b/intl/gettext.h
new file mode 100644 (file)
index 0000000..6b4b9e3
--- /dev/null
@@ -0,0 +1,105 @@
+/* Internal header for GNU gettext internationalization functions
+   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _GETTEXT_H
+#define _GETTEXT_H 1
+
+#include <stdio.h>
+
+#if HAVE_LIMITS_H || _LIBC
+# include <limits.h>
+#endif
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format.  */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format.  */
+#define MO_REVISION_NUMBER 0
+
+/* The following contortions are an attempt to use the C preprocessor
+   to determine an unsigned integral type that is 32 bits wide.  An
+   alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+   doing that would require that the configure script compile and *run*
+   the resulting executable.  Locally running cross-compiled executables
+   is usually not possible.  */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+   This should be valid for all systems GNU cares about because
+   that doesn't include 16-bit systems, and only modern systems
+   (that certainly have <limits.h>) have 64+-bit integral types.  */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+#  if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+#  else
+  /* The following line is intended to throw an error.  Using #error is
+     not portable enough.  */
+  "Cannot determine unsigned 32-bit data type."
+#  endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format.  */
+struct mo_file_header
+{
+  /* The magic number.  */
+  nls_uint32 magic;
+  /* The revision number of the file format.  */
+  nls_uint32 revision;
+  /* The number of strings pairs.  */
+  nls_uint32 nstrings;
+  /* Offset of table with start offsets of original strings.  */
+  nls_uint32 orig_tab_offset;
+  /* Offset of table with start offsets of translation strings.  */
+  nls_uint32 trans_tab_offset;
+  /* Size of hashing table.  */
+  nls_uint32 hash_tab_size;
+  /* Offset of first hashing entry.  */
+  nls_uint32 hash_tab_offset;
+};
+
+struct string_desc
+{
+  /* Length of addressed string.  */
+  nls_uint32 length;
+  /* Offset of string in file.  */
+  nls_uint32 offset;
+};
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettext.h  */
diff --git a/intl/gettextP.h b/intl/gettextP.h
new file mode 100644 (file)
index 0000000..bb8d552
--- /dev/null
@@ -0,0 +1,73 @@
+/* Header describing internals of gettext library
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifndef _GETTEXTP_H
+#define _GETTEXTP_H
+
+#include "loadinfo.h"
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef W
+# define W(flag, data) ((flag) ? SWAP (data) : (data))
+#endif
+
+
+static nls_uint32 SWAP PARAMS ((nls_uint32 i));
+
+static inline nls_uint32
+SWAP (i)
+     nls_uint32 i;
+{
+  return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+
+
+struct loaded_domain
+{
+  const char *data;
+  int must_swap;
+  nls_uint32 nstrings;
+  struct string_desc *orig_tab;
+  struct string_desc *trans_tab;
+  nls_uint32 hash_size;
+  nls_uint32 *hash_tab;
+};
+
+struct binding
+{
+  struct binding *next;
+  char *domainname;
+  char *dirname;
+};
+
+struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
+                                                char *__locale,
+                                                const char *__domainname));
+void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain));
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettextP.h  */
diff --git a/intl/hash-string.h b/intl/hash-string.h
new file mode 100644 (file)
index 0000000..e66e841
--- /dev/null
@@ -0,0 +1,63 @@
+/* Implements a string hashing function.
+   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_VALUES_H
+# include <values.h>
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(Args) Args
+# else
+#  define PARAMS(Args) ()
+# endif
+#endif
+
+/* We assume to have `unsigned long int' value with at least 32 bits.  */
+#define HASHWORDBITS 32
+
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+   [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+   1986, 1987 Bell Telephone Laboratories, Inc.]  */
+static unsigned long hash_string PARAMS ((const char *__str_param));
+
+static inline unsigned long
+hash_string (str_param)
+     const char *str_param;
+{
+  unsigned long int hval, g;
+  const char *str = str_param;
+
+  /* Compute the hash value for the given string.  */
+  hval = 0;
+  while (*str != '\0')
+    {
+      hval <<= 4;
+      hval += (unsigned long) *str++;
+      g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
+      if (g != 0)
+       {
+         hval ^= g >> (HASHWORDBITS - 8);
+         hval ^= g;
+       }
+    }
+  return hval;
+}
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
new file mode 100644 (file)
index 0000000..503efa0
--- /dev/null
@@ -0,0 +1,76 @@
+/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+   Library.
+   Copyright (C) 1995 Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "libgettext.h"
+
+/* @@ end of prolog @@ */
+
+
+#undef gettext
+#undef dgettext
+#undef dcgettext
+#undef textdomain
+#undef bindtextdomain
+
+
+char *
+bindtextdomain (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+  return bindtextdomain__ (domainname, dirname);
+}
+
+
+char *
+dcgettext (domainname, msgid, category)
+     const char *domainname;
+     const char *msgid;
+     int category;
+{
+  return dcgettext__ (domainname, msgid, category);
+}
+
+
+char *
+dgettext (domainname, msgid)
+     const char *domainname;
+     const char *msgid;
+{
+  return dgettext__ (domainname, msgid);
+}
+
+
+char *
+gettext (msgid)
+     const char *msgid;
+{
+  return gettext__ (msgid);
+}
+
+
+char *
+textdomain (domainname)
+     const char *domainname;
+{
+  return textdomain__ (domainname);
+}
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
new file mode 100644 (file)
index 0000000..4e2bc13
--- /dev/null
@@ -0,0 +1,409 @@
+/* Handle list of needed message catalogs
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+
+#if defined HAVE_STRING_H || defined _LIBC
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE  1
+# endif
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined _LIBC || defined HAVE_ARGZ_H
+# include <argz.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found.  Sigh!  */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define stpcpy(dest, src) __stpcpy(dest, src)
+#else
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+#endif
+
+/* Define function which are usually not available.  */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
+/* Returns the number of strings in ARGZ.  */
+static size_t argz_count__ PARAMS ((const char *argz, size_t len));
+
+static size_t
+argz_count__ (argz, len)
+     const char *argz;
+     size_t len;
+{
+  size_t count = 0;
+  while (len > 0)
+    {
+      size_t part_len = strlen (argz);
+      argz += part_len + 1;
+      len -= part_len + 1;
+      count++;
+    }
+  return count;
+}
+# undef __argz_count
+# define __argz_count(argz, len) argz_count__ (argz, len)
+#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+   except the last into the character SEP.  */
+static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
+
+static void
+argz_stringify__ (argz, len, sep)
+     char *argz;
+     size_t len;
+     int sep;
+{
+  while (len > 0)
+    {
+      size_t part_len = strlen (argz);
+      argz += part_len;
+      len -= part_len + 1;
+      if (len > 0)
+       *argz++ = sep;
+    }
+}
+# undef __argz_stringify
+# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
+static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
+                                 const char *entry));
+
+static char *
+argz_next__ (argz, argz_len, entry)
+     char *argz;
+     size_t argz_len;
+     const char *entry;
+{
+  if (entry)
+    {
+      if (entry < argz + argz_len)
+        entry = strchr (entry, '\0') + 1;
+
+      return entry >= argz + argz_len ? NULL : (char *) entry;
+    }
+  else
+    if (argz_len > 0)
+      return argz;
+    else
+      return 0;
+}
+# undef __argz_next
+# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
+#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
+
+
+/* Return number of bits set in X.  */
+static int pop PARAMS ((int x));
+
+static inline int
+pop (x)
+     int x;
+{
+  /* We assume that no more than 16 bits are used.  */
+  x = ((x & ~0x5555) >> 1) + (x & 0x5555);
+  x = ((x & ~0x3333) >> 2) + (x & 0x3333);
+  x = ((x >> 4) + x) & 0x0f0f;
+  x = ((x >> 8) + x) & 0xff;
+
+  return x;
+}
+
+\f
+struct loaded_l10nfile *
+_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
+                   territory, codeset, normalized_codeset, modifier, special,
+                   sponsor, revision, filename, do_allocate)
+     struct loaded_l10nfile **l10nfile_list;
+     const char *dirlist;
+     size_t dirlist_len;
+     int mask;
+     const char *language;
+     const char *territory;
+     const char *codeset;
+     const char *normalized_codeset;
+     const char *modifier;
+     const char *special;
+     const char *sponsor;
+     const char *revision;
+     const char *filename;
+     int do_allocate;
+{
+  char *abs_filename;
+  struct loaded_l10nfile *last = NULL;
+  struct loaded_l10nfile *retval;
+  char *cp;
+  size_t entries;
+  int cnt;
+
+  /* Allocate room for the full file name.  */
+  abs_filename = (char *) malloc (dirlist_len
+                                 + strlen (language)
+                                 + ((mask & TERRITORY) != 0
+                                    ? strlen (territory) + 1 : 0)
+                                 + ((mask & XPG_CODESET) != 0
+                                    ? strlen (codeset) + 1 : 0)
+                                 + ((mask & XPG_NORM_CODESET) != 0
+                                    ? strlen (normalized_codeset) + 1 : 0)
+                                 + (((mask & XPG_MODIFIER) != 0
+                                     || (mask & CEN_AUDIENCE) != 0)
+                                    ? strlen (modifier) + 1 : 0)
+                                 + ((mask & CEN_SPECIAL) != 0
+                                    ? strlen (special) + 1 : 0)
+                                 + (((mask & CEN_SPONSOR) != 0
+                                     || (mask & CEN_REVISION) != 0)
+                                    ? (1 + ((mask & CEN_SPONSOR) != 0
+                                            ? strlen (sponsor) + 1 : 0)
+                                       + ((mask & CEN_REVISION) != 0
+                                          ? strlen (revision) + 1 : 0)) : 0)
+                                 + 1 + strlen (filename) + 1);
+
+  if (abs_filename == NULL)
+    return NULL;
+
+  retval = NULL;
+  last = NULL;
+
+  /* Construct file name.  */
+  memcpy (abs_filename, dirlist, dirlist_len);
+  __argz_stringify (abs_filename, dirlist_len, ':');
+  cp = abs_filename + (dirlist_len - 1);
+  *cp++ = '/';
+  cp = stpcpy (cp, language);
+
+  if ((mask & TERRITORY) != 0)
+    {
+      *cp++ = '_';
+      cp = stpcpy (cp, territory);
+    }
+  if ((mask & XPG_CODESET) != 0)
+    {
+      *cp++ = '.';
+      cp = stpcpy (cp, codeset);
+    }
+  if ((mask & XPG_NORM_CODESET) != 0)
+    {
+      *cp++ = '.';
+      cp = stpcpy (cp, normalized_codeset);
+    }
+  if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
+    {
+      /* This component can be part of both syntaces but has different
+        leading characters.  For CEN we use `+', else `@'.  */
+      *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
+      cp = stpcpy (cp, modifier);
+    }
+  if ((mask & CEN_SPECIAL) != 0)
+    {
+      *cp++ = '+';
+      cp = stpcpy (cp, special);
+    }
+  if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
+    {
+      *cp++ = ',';
+      if ((mask & CEN_SPONSOR) != 0)
+       cp = stpcpy (cp, sponsor);
+      if ((mask & CEN_REVISION) != 0)
+       {
+         *cp++ = '_';
+         cp = stpcpy (cp, revision);
+       }
+    }
+
+  *cp++ = '/';
+  stpcpy (cp, filename);
+
+  /* Look in list of already loaded domains whether it is already
+     available.  */
+  last = NULL;
+  for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
+    if (retval->filename != NULL)
+      {
+       int compare = strcmp (retval->filename, abs_filename);
+       if (compare == 0)
+         /* We found it!  */
+         break;
+       if (compare < 0)
+         {
+           /* It's not in the list.  */
+           retval = NULL;
+           break;
+         }
+
+       last = retval;
+      }
+
+  if (retval != NULL || do_allocate == 0)
+    {
+      free (abs_filename);
+      return retval;
+    }
+
+  retval = (struct loaded_l10nfile *)
+    malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
+                               * (1 << pop (mask))
+                               * sizeof (struct loaded_l10nfile *)));
+  if (retval == NULL)
+    return NULL;
+
+  retval->filename = abs_filename;
+  retval->decided = (__argz_count (dirlist, dirlist_len) != 1
+                    || ((mask & XPG_CODESET) != 0
+                        && (mask & XPG_NORM_CODESET) != 0));
+  retval->data = NULL;
+
+  if (last == NULL)
+    {
+      retval->next = *l10nfile_list;
+      *l10nfile_list = retval;
+    }
+  else
+    {
+      retval->next = last->next;
+      last->next = retval;
+    }
+
+  entries = 0;
+  /* If the DIRLIST is a real list the RETVAL entry corresponds not to
+     a real file.  So we have to use the DIRLIST separation mechanism
+     of the inner loop.  */
+  cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
+  for (; cnt >= 0; --cnt)
+    if ((cnt & ~mask) == 0
+       && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
+       && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
+      {
+       /* Iterate over all elements of the DIRLIST.  */
+       char *dir = NULL;
+
+       while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+              != NULL)
+         retval->successor[entries++]
+           = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
+                                 language, territory, codeset,
+                                 normalized_codeset, modifier, special,
+                                 sponsor, revision, filename, 1);
+      }
+  retval->successor[entries] = NULL;
+
+  return retval;
+}
+\f
+/* Normalize codeset name.  There is no standard for the codeset
+   names.  Normalization allows the user to use any of the common
+   names.  */
+const char *
+_nl_normalize_codeset (codeset, name_len)
+     const char *codeset;
+     size_t name_len;
+{
+  int len = 0;
+  int only_digit = 1;
+  char *retval;
+  char *wp;
+  size_t cnt;
+
+  for (cnt = 0; cnt < name_len; ++cnt)
+    if (isalnum (codeset[cnt]))
+      {
+       ++len;
+
+       if (isalpha (codeset[cnt]))
+         only_digit = 0;
+      }
+
+  retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
+
+  if (retval != NULL)
+    {
+      if (only_digit)
+       wp = stpcpy (retval, "iso");
+      else
+       wp = retval;
+
+      for (cnt = 0; cnt < name_len; ++cnt)
+       if (isalpha (codeset[cnt]))
+         *wp++ = tolower (codeset[cnt]);
+       else if (isdigit (codeset[cnt]))
+         *wp++ = codeset[cnt];
+
+      *wp = '\0';
+    }
+
+  return (const char *) retval;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
diff --git a/intl/libgettext.h b/intl/libgettext.h
new file mode 100644 (file)
index 0000000..d657c0f
--- /dev/null
@@ -0,0 +1,183 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+/* Because on some systems (e.g. Solaris) we sometimes have to include
+   the systems libintl.h as well as this file we have more complex
+   include protection above.  But the systems header might perhaps also
+   define _LIBINTL_H and therefore we have to protect the definition here.  */
+
+#if !defined (_LIBINTL_H) || !defined (_LIBGETTEXT_H)
+#if !defined (_LIBINTL_H)
+# define _LIBINTL_H    1
+#endif
+#define _LIBGETTEXT_H  1
+
+/* We define an additional symbol to signal that we use the GNU
+   implementation of gettext.  */
+#define __USE_GNU_GETTEXT 1
+
+#include <sys/types.h>
+
+#if HAVE_LOCALE_H
+# include <locale.h>
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* @@ end of prolog @@ */
+
+
+#ifndef PARAMS
+# if defined(__STDC__) || defined(__cplusplus)
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef NULL
+# if !defined __cplusplus || defined __GNUC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL (0)
+# endif
+#endif
+
+#if !HAVE_LC_MESSAGES
+/* This value determines the behaviour of the gettext() and dgettext()
+   function.  But some system does not have this defined.  Define it
+   to a default value.  */
+# define LC_MESSAGES (-1)
+#endif
+
+
+/* Declarations for gettext-using-catgets interface.  Derived from
+   Jim Meyering's libintl.h.  */
+struct _msg_ent
+{
+  const char *_msg;
+  int _msg_number;
+};
+
+
+#if HAVE_CATGETS
+/* These two variables are defined in the automatically by po-to-tbl.sed
+   generated file `cat-id-tbl.c'.  */
+extern const struct _msg_ent _msg_tbl[];
+extern int _msg_tbl_length;
+#endif
+
+
+/* For automatical extraction of messages sometimes no real
+   translation is needed.  Instead the string itself is the result.  */
+#define gettext_noop(Str) (Str)
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+extern char *gettext PARAMS ((const char *__msgid));
+extern char *gettext__ PARAMS ((const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   LC_MESSAGES locale.  */
+extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
+extern char *dgettext__ PARAMS ((const char *__domainname,
+                                const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
+                               int __category));
+extern char *dcgettext__ PARAMS ((const char *__domainname,
+                                 const char *__msgid, int __category));
+
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+extern char *textdomain PARAMS ((const char *__domainname));
+extern char *textdomain__ PARAMS ((const char *__domainname));
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+extern char *bindtextdomain PARAMS ((const char *__domainname,
+                                 const char *__dirname));
+extern char *bindtextdomain__ PARAMS ((const char *__domainname,
+                                   const char *__dirname));
+
+#if ENABLE_NLS
+
+/* Solaris 2.3 has the gettext function but dcgettext is missing.
+   So we omit this optimization for Solaris 2.3.  BTW, Solaris 2.4
+   has dcgettext.  */
+# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
+
+#  define gettext(Msgid)                                                     \
+     dgettext (NULL, Msgid)
+
+#  define dgettext(Domainname, Msgid)                                        \
+     dcgettext (Domainname, Msgid, LC_MESSAGES)
+
+#  if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7
+/* This global variable is defined in loadmsgcat.c.  We need a sign,
+   whether a new catalog was loaded, which can be associated with all
+   translations.  */
+extern int _nl_msg_cat_cntr;
+
+#   define dcgettext(Domainname, Msgid, Category)                            \
+  (__extension__                                                             \
+   ({                                                                        \
+     char *__result;                                                         \
+     if (__builtin_constant_p ((int)Msgid))                                          \
+       {                                                                     \
+        static char *__translation__;                                        \
+        static int __catalog_counter__;                                      \
+        if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr)    \
+          {                                                                  \
+            __translation__ =                                                \
+              dcgettext__ (Domainname, Msgid, Category);                     \
+            __catalog_counter__ = _nl_msg_cat_cntr;                          \
+          }                                                                  \
+        __result = __translation__;                                          \
+       }                                                                     \
+     else                                                                    \
+       __result = dcgettext__ (Domainname, Msgid, Category);                 \
+     __result;                                                               \
+    }))
+#  endif
+# endif
+
+#else
+
+# define gettext(Msgid) (Msgid)
+# define dgettext(Domainname, Msgid) (Msgid)
+# define dcgettext(Domainname, Msgid, Category) (Msgid)
+# define textdomain(Domainname) while (0) /* nothing */
+# define bindtextdomain(Domainname, Dirname) while (0) /* nothing */
+
+#endif
+
+/* @@ begin of epilog @@ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/intl/linux-msg.sed b/intl/linux-msg.sed
new file mode 100644 (file)
index 0000000..5918e72
--- /dev/null
@@ -0,0 +1,100 @@
+# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#
+# The first directive in the .msg should be the definition of the
+# message set number.  We use always set number 1.
+#
+1 {
+  i\
+$set 1 # Automatically created by po2msg.sed
+  h
+  s/.*/0/
+  x
+}
+#
+# Mitch's old catalog format does not allow comments.
+#
+# We copy the original message as a comment into the .msg file.
+#
+/^msgid/ {
+  s/msgid[     ]*"//
+#
+# This does not work now with the new format.
+# /"$/! {
+#   s/\\$//
+#   s/$/ ... (more lines following)"/
+# }
+  x
+# The following nice solution is by
+# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+  td
+# Increment a decimal number in pattern space.
+# First hide trailing `9' digits.
+  :d
+  s/9\(_*\)$/_\1/
+  td
+# Assure at least one digit is available.
+  s/^\(_*\)$/0\1/
+# Increment the last digit.
+  s/8\(_*\)$/9\1/
+  s/7\(_*\)$/8\1/
+  s/6\(_*\)$/7\1/
+  s/5\(_*\)$/6\1/
+  s/4\(_*\)$/5\1/
+  s/3\(_*\)$/4\1/
+  s/2\(_*\)$/3\1/
+  s/1\(_*\)$/2\1/
+  s/0\(_*\)$/1\1/
+# Convert the hidden `9' digits to `0's.
+  s/_/0/g
+  x
+  G
+  s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p
+}
+#
+# The .msg file contains, other then the .po file, only the translations
+# but each given a unique ID.  Starting from 1 and incrementing by 1 for
+# each message we assign them to the messages.
+# It is important that the .po file used to generate the cat-id-tbl.c file
+# (with po-to-tbl) is the same as the one used here.  (At least the order
+# of declarations must not be changed.)
+#
+/^msgstr/ {
+  s/msgstr[    ]*"\(.*\)"/# \1/
+# Clear substitution flag.
+  tb
+# Append the next line.
+  :b
+  N
+# Look whether second part is continuation line.
+  s/\(.*\n\)"\(.*\)"/\1\2/
+# Yes, then branch.
+  ta
+  P
+  D
+# Note that D includes a jump to the start!!
+# We found a continuation line.  But before printing insert '\'.
+  :a
+  s/\(.*\)\(\n.*\)/\1\\\2/
+  P
+# We cannot use D here.
+  s/.*\n\(.*\)/\1/
+  tb
+}
+d
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
new file mode 100644 (file)
index 0000000..c67c2eb
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+/* Encoding of locale name parts.  */
+#define CEN_REVISION           1
+#define CEN_SPONSOR            2
+#define CEN_SPECIAL            4
+#define XPG_NORM_CODESET       8
+#define XPG_CODESET            16
+#define TERRITORY              32
+#define CEN_AUDIENCE           64
+#define XPG_MODIFIER           128
+
+#define CEN_SPECIFIC   (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
+#define XPG_SPECIFIC   (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
+
+
+struct loaded_l10nfile
+{
+  const char *filename;
+  int decided;
+
+  const void *data;
+
+  struct loaded_l10nfile *next;
+  struct loaded_l10nfile *successor[1];
+};
+
+
+extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
+                                                 size_t name_len));
+
+extern struct loaded_l10nfile *
+_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
+                           const char *dirlist, size_t dirlist_len, int mask,
+                           const char *language, const char *territory,
+                           const char *codeset,
+                           const char *normalized_codeset,
+                           const char *modifier, const char *special,
+                           const char *sponsor, const char *revision,
+                           const char *filename, int do_allocate));
+
+
+extern const char *_nl_expand_alias PARAMS ((const char *name));
+
+extern int _nl_explode_name PARAMS ((char *name, const char **language,
+                                    const char **modifier,
+                                    const char **territory,
+                                    const char **codeset,
+                                    const char **normalized_codeset,
+                                    const char **special,
+                                    const char **sponsor,
+                                    const char **revision));
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
new file mode 100644 (file)
index 0000000..73e90a9
--- /dev/null
@@ -0,0 +1,199 @@
+/* Load needed message catalogs
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP) || defined _LIBC
+# include <sys/mman.h>
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ISO C functions.  This is required by the standard
+   because some ISO C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define fstat  __fstat
+# define open   __open
+# define close  __close
+# define read   __read
+# define mmap   __mmap
+# define munmap __munmap
+#endif
+
+/* We need a sign, whether a new catalog was loaded, which can be associated
+   with all translations.  This is important if the translations are
+   cached by one of GCC's features.  */
+int _nl_msg_cat_cntr = 0;
+
+
+/* Load the message catalogs specified by FILENAME.  If it is no valid
+   message catalog do nothing.  */
+void
+_nl_load_domain (domain_file)
+     struct loaded_l10nfile *domain_file;
+{
+  int fd;
+  struct stat st;
+  struct mo_file_header *data = (struct mo_file_header *) -1;
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || defined _LIBC
+  int use_mmap = 0;
+#endif
+  struct loaded_domain *domain;
+
+  domain_file->decided = 1;
+  domain_file->data = NULL;
+
+  /* If the record does not represent a valid locale the FILENAME
+     might be NULL.  This can happen when according to the given
+     specification the locale file name is different for XPG and CEN
+     syntax.  */
+  if (domain_file->filename == NULL)
+    return;
+
+  /* Try to open the addressed file.  */
+  fd = open (domain_file->filename, O_RDONLY);
+  if (fd == -1)
+    return;
+
+  /* We must know about the size of the file.  */
+  if (fstat (fd, &st) != 0
+      && st.st_size < (off_t) sizeof (struct mo_file_header))
+    {
+      /* Something went wrong.  */
+      close (fd);
+      return;
+    }
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || defined _LIBC
+  /* Now we are ready to load the file.  If mmap() is available we try
+     this first.  If not available or it failed we try to load it.  */
+  data = (struct mo_file_header *) mmap (NULL, st.st_size, PROT_READ,
+                                        MAP_PRIVATE, fd, 0);
+
+  if (data != (struct mo_file_header *) -1)
+    {
+      /* mmap() call was successful.  */
+      close (fd);
+      use_mmap = 1;
+    }
+#endif
+
+  /* If the data is not yet available (i.e. mmap'ed) we try to load
+     it manually.  */
+  if (data == (struct mo_file_header *) -1)
+    {
+      off_t to_read;
+      char *read_ptr;
+
+      data = (struct mo_file_header *) malloc (st.st_size);
+      if (data == NULL)
+       return;
+
+      to_read = st.st_size;
+      read_ptr = (char *) data;
+      do
+       {
+         long int nb = (long int) read (fd, read_ptr, to_read);
+         if (nb == -1)
+           {
+             close (fd);
+             return;
+           }
+
+         read_ptr += nb;
+         to_read -= nb;
+       }
+      while (to_read > 0);
+
+      close (fd);
+    }
+
+  /* Using the magic number we can test whether it really is a message
+     catalog file.  */
+  if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED)
+    {
+      /* The magic number is wrong: not a message catalog file.  */
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || defined _LIBC
+      if (use_mmap)
+       munmap ((caddr_t) data, st.st_size);
+      else
+#endif
+       free (data);
+      return;
+    }
+
+  domain_file->data
+    = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+  if (domain_file->data == NULL)
+    return;
+
+  domain = (struct loaded_domain *) domain_file->data;
+  domain->data = (char *) data;
+  domain->must_swap = data->magic != _MAGIC;
+
+  /* Fill in the information about the available tables.  */
+  switch (W (domain->must_swap, data->revision))
+    {
+    case 0:
+      domain->nstrings = W (domain->must_swap, data->nstrings);
+      domain->orig_tab = (struct string_desc *)
+       ((char *) data + W (domain->must_swap, data->orig_tab_offset));
+      domain->trans_tab = (struct string_desc *)
+       ((char *) data + W (domain->must_swap, data->trans_tab_offset));
+      domain->hash_size = W (domain->must_swap, data->hash_tab_size);
+      domain->hash_tab = (nls_uint32 *)
+       ((char *) data + W (domain->must_swap, data->hash_tab_offset));
+      break;
+    default:
+      /* This is an illegal revision.  */
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || defined _LIBC
+      if (use_mmap)
+       munmap ((caddr_t) data, st.st_size);
+      else
+#endif
+       free (data);
+      free (domain);
+      domain_file->data = NULL;
+      return;
+    }
+
+  /* Show that one domain is changed.  This might make some cached
+     translations invalid.  */
+  ++_nl_msg_cat_cntr;
+}
diff --git a/intl/localealias.c b/intl/localealias.c
new file mode 100644 (file)
index 0000000..00d9194
--- /dev/null
@@ -0,0 +1,378 @@
+/* Handle aliases for locale names
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+char *getenv ();
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE  1
+# endif
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define strcasecmp __strcasecmp
+#endif
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done.  */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+  void *address;
+  struct block_list *next;
+};
+# define ADD_BLOCK(list, addr)                                               \
+  do {                                                                       \
+    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
+    /* If we cannot get a free block we cannot add the new element to        \
+       the list.  */                                                         \
+    if (newp != NULL) {                                                              \
+      newp->address = (addr);                                                \
+      newp->next = (list);                                                   \
+      (list) = newp;                                                         \
+    }                                                                        \
+  } while (0)
+# define FREE_BLOCKS(list)                                                   \
+  do {                                                                       \
+    while (list != NULL) {                                                   \
+      struct block_list *old = list;                                         \
+      list = list->next;                                                     \
+      free (old);                                                            \
+    }                                                                        \
+  } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+#endif /* have alloca */
+
+
+struct alias_map
+{
+  const char *alias;
+  const char *value;
+};
+
+
+static struct alias_map *map;
+static size_t nmap = 0;
+static size_t maxmap = 0;
+
+
+/* Prototypes for local functions.  */
+static size_t read_alias_file PARAMS ((const char *fname, int fname_len));
+static void extend_alias_table PARAMS ((void));
+static int alias_compare PARAMS ((const struct alias_map *map1,
+                                 const struct alias_map *map2));
+
+
+const char *
+_nl_expand_alias (name)
+    const char *name;
+{
+  static const char *locale_alias_path = LOCALE_ALIAS_PATH;
+  struct alias_map *retval;
+  size_t added;
+
+  do
+    {
+      struct alias_map item;
+
+      item.alias = name;
+
+      if (nmap > 0)
+       retval = (struct alias_map *) bsearch (&item, map, nmap,
+                                              sizeof (struct alias_map),
+                                              (int (*) PARAMS ((const void *,
+                                                                const void *))
+                                               ) alias_compare);
+      else
+       retval = NULL;
+
+      /* We really found an alias.  Return the value.  */
+      if (retval != NULL)
+       return retval->value;
+
+      /* Perhaps we can find another alias file.  */
+      added = 0;
+      while (added == 0 && locale_alias_path[0] != '\0')
+       {
+         const char *start;
+
+         while (locale_alias_path[0] == ':')
+           ++locale_alias_path;
+         start = locale_alias_path;
+
+         while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
+           ++locale_alias_path;
+
+         if (start < locale_alias_path)
+           added = read_alias_file (start, locale_alias_path - start);
+       }
+    }
+  while (added != 0);
+
+  return NULL;
+}
+
+
+static size_t
+read_alias_file (fname, fname_len)
+     const char *fname;
+     int fname_len;
+{
+#ifndef HAVE_ALLOCA
+  struct block_list *block_list = NULL;
+#endif
+  FILE *fp;
+  char *full_fname;
+  size_t added;
+  static const char aliasfile[] = "/locale.alias";
+
+  full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+  ADD_BLOCK (block_list, full_fname);
+  memcpy (full_fname, fname, fname_len);
+  memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+
+  fp = fopen (full_fname, "r");
+  if (fp == NULL)
+    {
+      FREE_BLOCKS (block_list);
+      return 0;
+    }
+
+  added = 0;
+  while (!feof (fp))
+    {
+      /* It is a reasonable approach to use a fix buffer here because
+        a) we are only interested in the first two fields
+        b) these fields must be usable as file names and so must not
+           be that long
+       */
+      char buf[BUFSIZ];
+      char *alias;
+      char *value;
+      char *cp;
+
+      if (fgets (buf, BUFSIZ, fp) == NULL)
+       /* EOF reached.  */
+       break;
+
+      cp = buf;
+      /* Ignore leading white space.  */
+      while (isspace (cp[0]))
+       ++cp;
+
+      /* A leading '#' signals a comment line.  */
+      if (cp[0] != '\0' && cp[0] != '#')
+       {
+         alias = cp++;
+         while (cp[0] != '\0' && !isspace (cp[0]))
+           ++cp;
+         /* Terminate alias name.  */
+         if (cp[0] != '\0')
+           *cp++ = '\0';
+
+         /* Now look for the beginning of the value.  */
+         while (isspace (cp[0]))
+           ++cp;
+
+         if (cp[0] != '\0')
+           {
+             char *tp;
+             size_t len;
+
+             value = cp++;
+             while (cp[0] != '\0' && !isspace (cp[0]))
+               ++cp;
+             /* Terminate value.  */
+             if (cp[0] == '\n')
+               {
+                 /* This has to be done to make the following test
+                    for the end of line possible.  We are looking for
+                    the terminating '\n' which do not overwrite here.  */
+                 *cp++ = '\0';
+                 *cp = '\n';
+               }
+             else if (cp[0] != '\0')
+               *cp++ = '\0';
+
+             if (nmap >= maxmap)
+               extend_alias_table ();
+
+             /* We cannot depend on strdup available in the libc.  Sigh!  */
+             len = strlen (alias) + 1;
+             tp = (char *) malloc (len);
+             if (tp == NULL)
+               {
+                 FREE_BLOCKS (block_list);
+                 return added;
+               }
+             memcpy (tp, alias, len);
+             map[nmap].alias = tp;
+
+             len = strlen (value) + 1;
+             tp = (char *) malloc (len);
+             if (tp == NULL)
+               {
+                 FREE_BLOCKS (block_list);
+                 return added;
+               }
+             memcpy (tp, value, len);
+             map[nmap].value = tp;
+
+             ++nmap;
+             ++added;
+           }
+       }
+
+      /* Possibly not the whole line fits into the buffer.  Ignore
+        the rest of the line.  */
+      while (strchr (cp, '\n') == NULL)
+       {
+         cp = buf;
+         if (fgets (buf, BUFSIZ, fp) == NULL)
+           /* Make sure the inner loop will be left.  The outer loop
+              will exit at the `feof' test.  */
+           *cp = '\n';
+       }
+    }
+
+  /* Should we test for ferror()?  I think we have to silently ignore
+     errors.  --drepper  */
+  fclose (fp);
+
+  if (added > 0)
+    qsort (map, nmap, sizeof (struct alias_map),
+          (int (*) PARAMS ((const void *, const void *))) alias_compare);
+
+  FREE_BLOCKS (block_list);
+  return added;
+}
+
+
+static void
+extend_alias_table ()
+{
+  size_t new_size;
+  struct alias_map *new_map;
+
+  new_size = maxmap == 0 ? 100 : 2 * maxmap;
+  new_map = (struct alias_map *) malloc (new_size
+                                        * sizeof (struct alias_map));
+  if (new_map == NULL)
+    /* Simply don't extend: we don't have any more core.  */
+    return;
+
+  memcpy (new_map, map, nmap * sizeof (struct alias_map));
+
+  if (maxmap != 0)
+    free (map);
+
+  map = new_map;
+  maxmap = new_size;
+}
+
+
+static int
+alias_compare (map1, map2)
+     const struct alias_map *map1;
+     const struct alias_map *map2;
+{
+#if defined _LIBC || defined HAVE_STRCASECMP
+  return strcasecmp (map1->alias, map2->alias);
+#else
+  const unsigned char *p1 = (const unsigned char *) map1->alias;
+  const unsigned char *p2 = (const unsigned char *) map2->alias;
+  unsigned char c1, c2;
+
+  if (p1 == p2)
+    return 0;
+
+  do
+    {
+      /* I know this seems to be odd but the tolower() function in
+        some systems libc cannot handle nonalpha characters.  */
+      c1 = isupper (*p1) ? tolower (*p1) : *p1;
+      c2 = isupper (*p2) ? tolower (*p2) : *p2;
+      if (c1 == '\0')
+       break;
+      ++p1;
+      ++p2;
+    }
+  while (c1 == c2);
+
+  return c1 - c2;
+#endif
+}
diff --git a/intl/po2tbl.sed.in b/intl/po2tbl.sed.in
new file mode 100644 (file)
index 0000000..b3bcca4
--- /dev/null
@@ -0,0 +1,102 @@
+# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+1 {
+  i\
+/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot.  */\
+\
+#if HAVE_CONFIG_H\
+# include <config.h>\
+#endif\
+\
+#include "libgettext.h"\
+\
+const struct _msg_ent _msg_tbl[] = {
+  h
+  s/.*/0/
+  x
+}
+#
+# Write msgid entries in C array form.
+#
+/^msgid/ {
+  s/msgid[     ]*\(".*"\)/  {\1/
+  tb
+# Append the next line
+  :b
+  N
+# Look whether second part is continuation line.
+  s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
+# Yes, then branch.
+  ta
+# Because we assume that the input file correctly formed the line
+# just read cannot be again be a msgid line.  So it's safe to ignore
+# it.
+  s/\(.*\)\n.*/\1/
+  bc
+# We found a continuation line.  But before printing insert '\'.
+  :a
+  s/\(.*\)\(\n.*\)/\1\\\2/
+  P
+# We cannot use D here.
+  s/.*\n\(.*\)/\1/
+# Some buggy seds do not clear the `successful substitution since last ``t'''
+# flag on `N', so we do a `t' here to clear it.
+  tb
+# Not reached
+  :c
+  x
+# The following nice solution is by
+# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+  td
+# Increment a decimal number in pattern space.
+# First hide trailing `9' digits.
+  :d
+  s/9\(_*\)$/_\1/
+  td
+# Assure at least one digit is available.
+  s/^\(_*\)$/0\1/
+# Increment the last digit.
+  s/8\(_*\)$/9\1/
+  s/7\(_*\)$/8\1/
+  s/6\(_*\)$/7\1/
+  s/5\(_*\)$/6\1/
+  s/4\(_*\)$/5\1/
+  s/3\(_*\)$/4\1/
+  s/2\(_*\)$/3\1/
+  s/1\(_*\)$/2\1/
+  s/0\(_*\)$/1\1/
+# Convert the hidden `9' digits to `0's.
+  s/_/0/g
+  x
+  G
+  s/\(.*\)\n\([0-9]*\)/\1, \2},/
+  s/\(.*\)"$/\1/
+  p
+}
+#
+# Last line.
+#
+$ {
+  i\
+};\
+
+  g
+  s/0*\(.*\)/int _msg_tbl_length = \1;/p
+}
+d
diff --git a/intl/textdomain.c b/intl/textdomain.c
new file mode 100644 (file)
index 0000000..2f077a0
--- /dev/null
@@ -0,0 +1,101 @@
+/* Implementation of the textdomain(3) function
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Name of the default text domain.  */
+extern const char _nl_default_default_domain[];
+
+/* Default text domain in which entries for gettext(3) are to be found.  */
+extern const char *_nl_current_default_domain;
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define TEXTDOMAIN __textdomain
+#else
+# define TEXTDOMAIN textdomain__
+#endif
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+char *
+TEXTDOMAIN (domainname)
+     const char *domainname;
+{
+  char *old;
+
+  /* A NULL pointer requests the current setting.  */
+  if (domainname == NULL)
+    return (char *) _nl_current_default_domain;
+
+  old = (char *) _nl_current_default_domain;
+
+  /* If domain name is the null string set to default domain "messages".  */
+  if (domainname[0] == '\0'
+      || strcmp (domainname, _nl_default_default_domain) == 0)
+    _nl_current_default_domain = _nl_default_default_domain;
+  else
+    {
+      /* If the following malloc fails `_nl_current_default_domain'
+        will be NULL.  This value will be returned and so signals we
+        are out of core.  */
+      size_t len = strlen (domainname) + 1;
+      char *cp = (char *) malloc (len);
+      if (cp != NULL)
+       memcpy (cp, domainname, len);
+      _nl_current_default_domain = cp;
+    }
+
+  if (old != _nl_default_default_domain)
+    free (old);
+
+  return (char *) _nl_current_default_domain;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__textdomain, textdomain);
+#endif
diff --git a/intl/xopen-msg.sed b/intl/xopen-msg.sed
new file mode 100644 (file)
index 0000000..b19c0bb
--- /dev/null
@@ -0,0 +1,104 @@
+# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#
+# The first directive in the .msg should be the definition of the
+# message set number.  We use always set number 1.
+#
+1 {
+  i\
+$set 1 # Automatically created by po2msg.sed
+  h
+  s/.*/0/
+  x
+}
+#
+# We copy all comments into the .msg file.  Perhaps they can help.
+#
+/^#/ s/^#[     ]*/$ /p
+#
+# We copy the original message as a comment into the .msg file.
+#
+/^msgid/ {
+# Does not work now
+#  /"$/! {
+#    s/\\$//
+#    s/$/ ... (more lines following)"/
+#  }
+  s/^msgid[    ]*"\(.*\)"$/$ Original Message: \1/
+  p
+}
+#
+# The .msg file contains, other then the .po file, only the translations
+# but each given a unique ID.  Starting from 1 and incrementing by 1 for
+# each message we assign them to the messages.
+# It is important that the .po file used to generate the cat-id-tbl.c file
+# (with po-to-tbl) is the same as the one used here.  (At least the order
+# of declarations must not be changed.)
+#
+/^msgstr/ {
+  s/msgstr[    ]*"\(.*\)"/\1/
+  x
+# The following nice solution is by
+# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+  td
+# Increment a decimal number in pattern space.
+# First hide trailing `9' digits.
+  :d
+  s/9\(_*\)$/_\1/
+  td
+# Assure at least one digit is available.
+  s/^\(_*\)$/0\1/
+# Increment the last digit.
+  s/8\(_*\)$/9\1/
+  s/7\(_*\)$/8\1/
+  s/6\(_*\)$/7\1/
+  s/5\(_*\)$/6\1/
+  s/4\(_*\)$/5\1/
+  s/3\(_*\)$/4\1/
+  s/2\(_*\)$/3\1/
+  s/1\(_*\)$/2\1/
+  s/0\(_*\)$/1\1/
+# Convert the hidden `9' digits to `0's.
+  s/_/0/g
+  x
+# Bring the line in the format `<number> <message>'
+  G
+  s/^[^\n]*$/& /
+  s/\(.*\)\n\([0-9]*\)/\2 \1/
+# Clear flag from last substitution.
+  tb
+# Append the next line.
+  :b
+  N
+# Look whether second part is a continuation line.
+  s/\(.*\n\)"\(.*\)"/\1\2/
+# Yes, then branch.
+  ta
+  P
+  D
+# Note that `D' includes a jump to the start!!
+# We found a continuation line.  But before printing insert '\'.
+  :a
+  s/\(.*\)\(\n.*\)/\1\\\2/
+  P
+# We cannot use the sed command `D' here
+  s/.*\n\(.*\)/\1/
+  tb
+}
+d
diff --git a/lib/.cvsignore b/lib/.cvsignore
new file mode 100644 (file)
index 0000000..3345a33
--- /dev/null
@@ -0,0 +1,4 @@
+Makefile
+textclass.lst
+packages.lst
+lyxrc.defaults
diff --git a/lib/CREDITS b/lib/CREDITS
new file mode 100644 (file)
index 0000000..650aa68
--- /dev/null
@@ -0,0 +1,186 @@
+@bMaarten Afman
+@iE-mail: afman@student.tn.tudelft.nl
+   Dutch translation team member
+@bAlejandro Aguilar Sierra
+@iE-mail: asierra@servidor.unam.mx
+   fast parsing with lyxlex, pseudoactions,
+   mathpanel, Math Editor,
+   combox and more
+@bAsger Alstrup
+@iE-mail: alstrup@diku.dk
+   General hacking of user interface stuff
+   and those other bits and pieces.
+@bPascal Andre 
+@iE-mail: andre@via.ecp.fr
+   external style definition files,
+   linuxdoc sgml support and more
+   ftp-site ftp.lyx.org
+@bHeinrich Bauer
+@iE-mail: heinrich.bauer@t-mobil.de
+   Fixes for dvi output
+   original version of page selection for printing
+@bHans Bausewein
+@iE-mail: hans@comerwell.xs4all.nl
+   "case insensitive" and "complete word" search 
+@bGraham Biswell
+   small bugfixes that were very hard to find
+@bLars Gullik Bjønnes
+@iE-mail: larsbj@ifi.uio.no
+   improvements to user interface (menus and 
+   keyhandling) including configurable toolbar,
+   and a few other minor things. Also current
+   source maintainer.
+@bChristian Buescher 
+   user-definable keys, lyxserver and more
+@bFrancesc Burrull i Mestres
+@iE-mail: fburrull@mat.upc.es
+   Catalan translation.
+@bClaudio Coco
+@iE-mail: lacocio@iol.it
+   Italian translation
+@bMatthias Ettrich
+@iE-mail: ettrich@kde.org
+   started the project, implemented
+   the early versions, various improvements
+   including undo/redo, tables,
+   and much, much more.
+@bJohn Michael Floyd
+@iE-mail: jmf@pwd.nsw.gov.au
+   fix to spellchecker.C
+@bStefano Ghirlanda
+@istefano@zool.su.se
+   Improvements to lyxserver; LyX-Client perl package
+@bBernhard Iselborn
+@iE-mail: biselbor@rhrk.uni-kl.de
+   some minor bug-fixes, FAQ
+   linuxdoc sgml support
+@bMichal Jaegermann
+@imichal@ellpspace.math.ualberta.ca
+   Fix to a very hard-to-find egcs bug that crashed 
+     LyX on alpha architecture
+@bDavid L. Johnson
+@iE-mail: dlj0@lehigh.edu
+   public relations, feedback, documentation and 
+   support
+@bRobert van der Kamp
+   various small things and code simplifying
+   (see thousands of RVDKs in the code ;-) )
+@bAmir Karger
+@iE-mail: karger@post.harvard.edu
+   Tutorial
+   reLyX: the LaTeX to LyX translator
+@bCarmen Kauffmann
+   original name that is now two character shorter
+@bMartin Konold
+@iE-mail: zxmmz01@fiwi02.wiwi.uni-tuebingen.de
+   german ftp-mirror-site fiwi02.wiwi.uni-tuebingen.de
+@bPeter Kremer
+@iE-mail: kremer@bme-tel.ttt.bme.hu
+   Hungarian translation and
+   bind file for menu shortcuts.
+@bBernd Kümmerlen
+@iE-mail: bkuemmer@ix.urz.uni-heidelberg.de
+   Initial version of the koma-script textclasses
+@bJean-Marc Lasgouttes
+@iE-mail: Jean-Marc.Lasgouttes@inria.fr
+   configure and Makefile-stuff and more
+@bVictor Lavrenko
+@iE-mail: lyx@lavrenko.pp.ru
+   Russian translation
+@bJose' Matos
+@iE-mail: jamatos@novalis.fc.up.pt
+   linuxdoc sgml support
+@bTino Meinen
+@iE-mail: tino@direct.a2000.nl
+   Dutch translation coordinator
+@bDaniel Naber
+@iE-mail dnaber@mini.gt.owl.de
+   Improvements to find&replace popup
+@bDirk Niggemann
+@iE-mail: dabn100@cam.ac.uk
+   config. handling enhancements,
+   bugfixes, printer enhancements
+   path mingling
+@bCarl Ollivier-Gooch
+@iE-mail: cfog@mech.ubc.ca
+   Support for two-column figure (figure*) and table (table*)
+   environments.  Fixed minibuffer entry of floats.  
+@bJoacim Persson
+@iE-mail: sp2joap1@ida.his.se
+   po-file for Swedish, a tool for picking shortcuts,
+   bug reports and hacking at random
+@bAlkis Polyzotis
+   Keymap work.
+@bBernhard Psaier
+   Designer of the LyX-Banner
+@bThomas Pundt
+@iE-mail: pundtt@math.uni-muenster.de
+   initial configure script
+@bAllan Rae
+@iE-mail: rae@elec.uq.edu.au
+   bug reports/fixes, Itemize Bullet Selection,
+   xforms-0.81 + gcc-2.6.3 compatibility
+@bBernd Rellermeyer
+@iE-mail: 100.41728@germanynet.de
+   Support for Koma-Script family of classes
+@bMichael Ressler
+@iE-mail: mike.ressler@alum.mit.edu
+   various documentation contributions, AASTeX support
+@bHubert Schreier
+   spellchecker (ispell frontend)
+   beautiful document-manager based on the simple 
+   table of contents (temporary removed)
+@bIvan Schreter
+@iE-mail: schreter@kdk.sk
+   international support and kbmaps for slovak, czech, 
+   german, ... wysiwyg figure
+@bMiyata Shigeru
+@iE-mail: miyata@kusm.kyoto-u.ac.jp
+   OS/2 port
+@bAndre Spiegel
+@iE-mail: spiegel@inf.fu-berlin.de
+   vertical spaces
+@bPeter Sütterlin
+@iE-mail: pit@uni-sw.gwdg.de
+   aapaper support, bug reports
+@bKayvan Aghaiepour Sylvan
+@iE-mail: kayvan@sylvan.com      
+   noweb2lyx and reLyX integration of noweb files. 
+   Added Import->Noweb and key bindings to menus.
+@bMatthias Ulrichs
+@iE-mail: urlichs@smurf.noris.de
+   bug reports and small fixes
+@bH. Turgut Uyar
+@iE-mail: uyar@cs.itu.edu.tr
+   turkish kbmnaps
+@bMartin Vermeer
+@iE-mail: mv@fgi.fi
+   ejour2 document class
+@bJuergen Vigna
+@iE-mail: jug@sad.it
+   Fax- and Ascii-Export support
+   iletter and dinbrief support
+@bJohn P. Weiss
+@iE-mail: weissjp@colorado.edu
+   Bugreports and suggestions,
+   slides class support, editor of the
+   documentation project, 6/96-9/97.
+   Tutorial chapter 1
+@bEdmar Wienskoski Jr.
+@iE-mail: edmar-w-jr@technologist.com
+   Literate programming support
+   Various bug fixes
+@bStephan Witt
+@iE-mail: stephan.witt@beusen.de
+   Support for page selection for printing
+   Support for number of copies
+@bHenner Zeller
+@iE-mail: zeller@think.de
+   rotation of wysiwyg figures
+@bXiaokun Zhu
+@iE-mail: xiaokun@aero.gla.ac.uk
+   bug reports and small fixes
+   
+If your name doesn't appear here although you've done 
+something for LyX, or your entry is wrong or incomplete, 
+just drop some e-mail to lyx@lyx.org. Thanks.
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644 (file)
index 0000000..5ca1373
--- /dev/null
@@ -0,0 +1,34 @@
+AUTOMAKE_OPTIONS = foreign
+DISTCLEANFILES = *.orig *.rej *~ *.bak textclass.lst packages.lst \
+               lyxrc.defaults doc/LaTeXConfig.lyx
+MAINTAINERCLEANFILES = Makefile.in
+SUBDIRS    = reLyX
+
+LYXDATADIRS = bind clipart doc examples images kbd layouts templates tex
+EXTRA_DIST = CREDITS chkconfig.ltx configure.cmd lyxrc.example \
+       $(LYXDATADIRS)
+
+CLIPART = clipart/*.eps
+LAYOUT = layouts/*.layout layouts/*.inc 
+DOC = doc/*.lyx doc/LaTeXConfig.lyx.in
+KBD = kbd/*.kmap kbd/*.cdef
+TEMPL = templates/*.lyx
+BIND = bind/*.bind
+EXAMPLES = examples/*.lyx
+TEXSUPPORT = tex/*.cls
+IMAGES = images/README images/*.xpm images/*.xbm
+
+pkgdata_DATA = lyxrc.example CREDITS chkconfig.ltx lyxrc.defaults textclass.lst packages.lst
+
+LIBINSTFILES = $(LAYOUT) $(CLIPART) $(DOC) $(KBD) $(DOC) $(TEMPL) $(BIND) $(EXAMPLES) $(TEXSUPPORT) $(IMAGES)
+
+libinstalldirs:
+       for dir in $(LYXDATADIRS) ; do \
+         $(mkinstalldirs) $(pkgdatadir)/$$dir ; \
+       done
+
+install-data-local:  libinstalldirs
+       files=`cd ${srcdir} ; echo $(LIBINSTFILES)` ; \
+       for i in $${files} ; do \
+          $(INSTALL_DATA) ${srcdir}/$$i $(pkgdatadir)/$$i ; \
+       done 
diff --git a/lib/bind/broadway.bind b/lib/bind/broadway.bind
new file mode 100644 (file)
index 0000000..32cbb6b
--- /dev/null
@@ -0,0 +1,16 @@
+# Broadway Play 
+
+\bind "M-z s"                  "layout Speaker"
+\bind "M-z n"                  "layout Narrative"
+\bind "M-z a"                  "layout ACT"
+\bind "M-z S-at"               "layout ACT*"
+\bind "M-z S-S"                        "layout SCENE"
+\bind "M-z d"                  "layout Dialogue"
+\bind "M-z p"                  "layout Parenthetical"
+\bind "M-z S-R"                        "layout AT_RISE:"
+\bind "M-z S-C"                        "layout CURTAIN"
+\bind "M-z S-A"                        "layout Author"
+\bind "M-z S-T"                        "layout Title"
+\bind "M-z r"                  "layout Right_Address"
+
+
diff --git a/lib/bind/cua.bind b/lib/bind/cua.bind
new file mode 100644 (file)
index 0000000..438fc0c
--- /dev/null
@@ -0,0 +1,148 @@
+# This file is part of
+# ==================================================================
+#
+#                  LyX, the High Level Word Processor
+# 
+#         Copyright (C) 1995-1997 Asger Alstrup & The LyX Team
+#
+# ==================================================================
+
+#
+# This is the CUA (Common User Access) flavour bind file, based on 
+# bindings found in the Windows, Mac and Motif world.
+#
+#
+# DO NOT CHANGE THIS DEFAULT BINDING FILE! It will be replaced
+# with every new install of LyX and your changes will be lost. 
+# Instead, customize a copy of this file placed in 
+# ~/.lyx/bind/cua.bind
+#
+# Happy tuning!
+
+# Free bindings:
+
+#\bind "C-a"
+#\bind "C-h"
+#\bind "C-j"
+#\bind "C-y"
+
+## Documents menu
+#
+# These are now defined in cua or emacs bind files so their "standard"
+# bindings are available. (eg M-d "word-delete-forward" in emacs) ARRae
+
+\bind "M-d p"                  "buffer-previous"
+\bind "M-d space"              "menu-open Documents"
+
+###
+
+\bind "C-n"                    "buffer-new"
+\bind "C-S-N"                  "buffer-new-template"
+\bind "C-o"                    "buffer-open"
+\bind "C-r"                    "buffer-reload"
+\bind "C-w"                    "buffer-close"
+\bind "C-s"                    "buffer-write"
+\bind "C-S-S"                  "buffer-write-as"
+\bind "C-p"                    "buffer-print" 
+\bind "C-d"                    "buffer-view"           # 'd' for dvi
+\bind "C-t"                    "buffer-view-ps"
+\bind "C-S-D"                  "buffer-typeset"        # 'd' for dvi
+\bind "C-S-T"                  "buffer-typeset-ps"
+\bind "C-q"                    "lyx-quit"
+
+\bind "C-b"                    "font-bold"
+\bind "C-e"                    "font-emph"
+\bind "C-k"                    "font-noun"             # 'k' for capitals
+\bind "C-l"                    "tex-mode"              # 'l' for LaTeX
+\bind "C-u"                    "font-underline"
+\bind "C-S-P"                  "font-code"             # 'P' for program
+
+\bind "C-m"                    "math-mode"
+\bind "C-S-M"                  "math-display"
+
+\bind "C-f"                    "find-replace"
+\bind "C-g"                    "error-next"
+\bind "C-i"                    "open-stuff"            # 'i' for Inset
+
+\bind "C-c"                    "copy"
+\bind "C-x"                    "cut"
+\bind "C-v"                    "paste"
+
+\bind "C-S-C"                  "layout-copy"
+\bind "C-S-V"                  "layout-paste"
+
+\bind "C-z"                    "undo"
+\bind "C-S-Z"                  "redo"
+
+\bind "S-C-quotedbl"           "quote-insert"
+\bind "C-minus"                        "hyphenation-point-insert"
+\bind "M-S-Right"              "depth-increment"
+\bind "M-S-Left"               "depth-decrement"
+\bind "C-S-space"              "protected-space-insert"
+
+#bind "F1"                     "help"                  # Not yet implemented!
+#bind "C-F1"                   "help-context"          # Not yet implemented!
+\bind "F2"                     "buffer-write"
+\bind "F3"                     "buffer-open"
+\bind "C-F4"                   "buffer-close"
+\bind "F5"                     "screen-recenter"
+\bind "M-F4"                   "lyx-quit"
+\bind "F7"                     "spellchecker"
+
+\bind "M-x"                    "command-execute"
+
+#
+# Motion group
+#
+
+\bind "C-Right"                        "word-forward"
+\bind "C-Left"                 "word-backward"
+\bind "C-Up"                   "paragraph-up"
+\bind "C-Down"                 "paragraph-down"
+\bind "C-Home"                 "buffer-begin"
+\bind "C-End"                  "buffer-end"
+
+\bind "C-~S-greater"           "reference-goto"
+\bind "C-~S-less"              "reference-back"
+
+
+#
+# Motion + select group
+#
+
+\bind "S-Right"                        "forward-select"
+\bind "S-Left"                 "backward-select"
+\bind "S-Up"                   "up-select"
+\bind "S-Down"                 "down-select"
+\bind "S-C-Right"              "word-forward-select"
+\bind "S-C-Left"               "word-backward-select"
+\bind "S-C-Up"                 "paragraph-up-select"
+\bind "S-C-Down"               "paragraph-down-select"
+\bind "S-Home"                 "line-begin-select"
+\bind "S-End"                  "line-end-select"               
+\bind "S-Prior"                        "screen-up-select"
+\bind "S-Next"                 "screen-down-select"
+\bind "S-C-Home"               "buffer-begin-select"
+\bind "S-C-End"                        "buffer-end-select"
+\bind "C-Insert"               "copy"
+\bind "S-Insert"               "paste"
+\bind "S-Delete"               "cut"
+
+#
+# Edit group
+#
+
+\bind "C-Delete"               "word-delete-forward"
+\bind "C-BackSpace"            "word-delete-backward"
+\bind "M-Return"               "break-paragraph-keep-layout"
+\bind "C-Return"               "break-line"
+\bind "C-space"                        "protected-space-insert"
+\bind "C-period"               "end-of-sentence-period-insert"
+\bind "M-period"               "dots-insert"
+\bind "Escape"                 "cancel"
+\bind "F9"                     "meta-prefix"
+
+# Include menu and math bindings
+
+\bind_file menus.bind
+\bind_file math.bind
diff --git a/lib/bind/de_menus.bind b/lib/bind/de_menus.bind
new file mode 100644 (file)
index 0000000..cb494e8
--- /dev/null
@@ -0,0 +1,284 @@
+# This file is part of
+# ==================================================================
+#
+#                  LyX, the High Level Word Processor
+# 
+#                 Copyright (C) 1995-1997 The LyX Team
+#
+# ==================================================================
+
+# Key bindings for menus, both invisible and visible.
+# Adapted to the german internationalisation 98-1-31 pit@uni-sw.gwdg.de
+
+# Diese Datei ist die deutsche Version der systemweiten Datei
+# /usr/local/share/lyx/bind/menus.bind.  Sie ist für diejenigen
+# gedacht, die die Deutsche Internationalisierung verwenden und legt
+# Menuefunktionen konsistent zu den deutschen Namen der Menues
+# fest.
+#
+#   ACHTUNG!
+#
+# Die Belegung der Sequenz ALT-D für die Funktionen des Menues "Datei"
+# verträgt sich nicht mit einer Definition der Dateien (x)emacs.bind
+# Wer diese verwendet, muß entweder die Definitionen in dieser Datei
+# ändern, oder aber die entsprechende bind-datei ebenfalls in das
+# private Verzeichnis kopieren und dort die Definition veraendern.
+# Ich verwende z.B. in emacs.bind anstelle der normalen Definition
+# \bind "M-d" "word-delete-forward"  die leicht veränderte Variante
+# \bind "M-S-D" "word-delete-forward", wodurch die Funktion "Löschen
+# eines Wortes" auf die Tastenkombination ALT-SHIFT-D gelegt wird
+
+#
+# Zugriff auf die sichtbaren Menues
+#
+\bind "F10 d"                  "menu-open Datei"
+\bind "F10 b"                  "menu-open Bearbeiten"
+\bind "F10 l"                  "menu-open Layout"
+\bind "F10 e"                  "menu-open Einfügen"
+\bind "F10 m"                  "menu-open Mathematik"
+\bind "F10 o"                  "menu-open Optionen"
+\bind "F10 k"                  "menu-open Dokumente"
+\bind "F10 h"                  "menu-open Hilfe"
+
+#
+# Menue Datei
+#
+\bind "M-d n"                  "buffer-new"
+\bind "M-d v"                  "buffer-new-template"
+\bind "M-d o"                  "buffer-open"
+\bind "M-d c"                  "buffer-close"
+\bind "M-d s"                  "buffer-write"
+\bind "M-d u"                  "buffer-write-as"
+\bind "M-d w"                  "buffer-reload"
+\bind "M-d a"                  "buffer-view"
+\bind "M-d p"                  "buffer-view-ps"
+\bind "M-d i"                  "buffer-typeset"
+\bind "M-d k"                  "buffer-typeset-ps"
+\bind "M-d e"                   "build-program"
+\bind "M-d d"                  "buffer-print" 
+\bind "M-d f"                  "buffer-fax"
+\bind "M-d m l"                 "buffer-import latex"
+\bind "M-d m a"                 "buffer-import ascii"
+\bind "M-d m t"                 "buffer-import asciiparagraph"
+\bind "M-d m n"                 "buffer-import noweb"
+\bind "M-d e l"                        "buffer-export latex"
+\bind "M-d e d"                        "buffer-export dvi"
+\bind "M-d e p"                 "buffer-export postscript"
+\bind "M-d e l"                        "buffer-export linuxdoc"
+\bind "M-d e t"                        "buffer-export ascii"
+\bind "M-d e b"                        "buffer-export custom"
+\bind "M-d b"                  "lyx-quit"
+\bind "M-d space"              "menu-open Datei" 
+
+#
+# Menue Bearbeiten
+#
+\bind "M-b r"                  "undo"
+\bind "M-b w"                  "redo"
+\bind "M-b a"                  "cut"
+\bind "M-b k"                  "copy"
+\bind "M-b e"                  "paste"
+\bind "M-b s"                  "find-replace"
+\bind "M-b g"                  "error-next"
+\bind "M-b n"                  "note-next"
+\bind "M-b p"                  "spellchecker"
+\bind "M-b x"                  "buffer-chktex"
+\bind "M-b i"                  "toc-view"
+\bind "M-b l"                  "latex-view-log"
+
+\bind "M-b m"                  "mark-on"
+\bind "M-b S-M"                        "mark-off"
+\bind "M-b space"              "menu-open Bearbeiten" 
+\bind "M-b z"                  "line-delete-forward"
+
+#
+# Menue Layout
+#
+\bind "M-l z"                  "layout-character"
+\bind "M-l a"                  "layout-paragraph"
+\bind "M-l d"                  "layout-document"
+\bind "M-l s"                  "layout-paper"
+\bind "M-l t"                   "layout-table"
+\bind "M-l r"                  "layout-quotes" 
+\bind "M-l h"                  "font-emph" 
+\bind "M-l k"                  "font-noun" 
+\bind "M-l f"                  "font-bold" 
+\bind "M-l x"                  "tex-mode" 
+\bind "M-l u"                  "depth-next"
+\bind "M-l v"                  "layout-preamble" 
+\bind "M-l l"                  "layout-save-default"
+\bind "M-l space"              "menu-open Layout"  
+\bind "M-l i"                  "buffer-itemize-bullets-select"
+
+#
+# Menue Einfügen
+#
+\bind "M-e a"                  "figure-insert"
+\bind "M-e t"                  "table-insert"
+\bind "M-e d"                  "buffer-child-insert"
+\bind "M-e c z"                        "file-insert-ascii line"         
+\bind "M-e c a"                        "file-insert-ascii paragraph"
+\bind "M-e l"                  "file-insert"
+\bind "M-e f"                  "footnote-insert"
+\bind "M-e r"                  "marginpar-insert"
+
+
+\bind "M-e o a"                        "buffer-float-insert figure" 
+\bind "M-e o t"                        "buffer-float-insert table"
+\bind "M-e o b"                        "buffer-float-insert wide-fig"
+\bind "M-e o e"                        "buffer-float-insert wide-tab"
+\bind "M-e o g"                        "buffer-float-insert algorithm"
+
+\bind "M-e i i"                        "toc-insert"
+\bind "M-e i a"                        "lof-insert"
+\bind "M-e i t"                        "lot-insert"
+\bind "M-e i l"                        "index-print"
+\bind "M-e i b"                        "bibtex-insert"
+\bind "M-e i g"                        "loa-insert"
+
+\bind "M-e minus"              "hyphenation-point-insert"
+\bind "M-e p"                  "dots-insert"
+\bind "M-e e"                  "end-of-sentence-period-insert"
+\bind "M-e q"                  "quote-insert"
+\bind "M-e apostrophe"         "quote-insert"
+\bind "M-e S-quotedbl"         "quote-insert"
+\bind "M-e S-greater"          "menu-separator-insert"
+
+\bind "M-e s h"                        "hfill-insert"
+\bind "M-e s minus"            "hyphenation-point-insert"
+\bind "M-e s t"                        "hyphenation-point-insert"
+\bind "M-e s l"                        "protected-space-insert"
+\bind "M-e s z"                        "break-line"
+\bind "M-e s f"                        "dots-insert"
+\bind "M-e s p"                        "end-of-sentence-period-insert"
+\bind "M-e s a"                        "quote-insert"
+\bind "M-e s m"                        "menu-separator-insert"
+
+\bind "M-e n"                  "note-insert"
+\bind "M-e m"                  "label-insert"
+\bind "M-e q"                  "reference-insert"
+\bind "M-e z"                  "citation-insert"
+\bind "M-e x"                  "index-insert"
+\bind "M-e w"                  "index-insert-last"
+\bind "M-e u"                   "url-insert"
+\bind "M-e space"              "menu-open Einfügen"  
+
+#
+# Menue Mathematik
+#
+\bind "M-m space"              "menu-open Mathematik" 
+
+#
+# Menue Options
+#
+\bind "M-o space"              "menu-open Optionen"  
+
+#
+# Menue Dokumente
+#
+\bind "M-k space"              "menu-open Dokumente"
+
+
+#
+# Menue Hilfe
+#
+\bind "M-h space"              "menu-open Hilfe" 
+
+#
+# Menue Schrifgröße
+#
+\bind "M-s t"                  "font-size tiny"
+\bind "M-s S-S"                        "font-size smaller"
+\bind "M-s s"                  "font-size small"
+\bind "M-s n"                  "font-size normal"
+\bind "M-s l"                  "font-size large"
+\bind "M-s S-L"                        "font-size larger"
+\bind "M-s h"                  "font-size huge"
+\bind "M-s S-H"                        "font-size huger"
+
+\bind "M-s 1"                  "font-size tiny"
+\bind "M-s 2"                  "font-size smallest"
+\bind "M-s 3"                  "font-size smaller"
+\bind "M-s 4"                  "font-size small"
+\bind "M-s 5"                  "font-size normal"
+\bind "M-s 6"                  "font-size large"
+\bind "M-s 7"                  "font-size larger"
+\bind "M-s 8"                  "font-size largest"
+\bind "M-s 9"                  "font-size huge"
+\bind "M-s 0"                  "font-size huger"
+
+\bind "M-s plus"               "font-size increase"
+\bind "M-s minus"              "font-size decrease"
+
+#
+# Menue Absatztyp
+#
+\bind "M-a 1"                  "layout Chapter" 
+\bind "M-a 2"                  "layout Section" 
+\bind "M-a 3"                  "layout Subsection"  
+\bind "M-a 4"                  "layout Subsubsection"    
+\bind "M-a 5"                  "layout Paragraph"        
+\bind "M-a 6"                  "layout Subparagraph"
+\bind "M-a a"                  "layout Abstract"
+\bind "M-a S-A"                        "layout Author"
+\bind "M-a M-a"                        "layout Address"
+\bind "M-a C-a"                        "layout RightAddress"
+\bind "M-a b"                  "layout Itemize"        # bulleted list
+\bind "M-a S-B"                        "layout Bibliography"
+\bind "M-a c"                  "layout LyX-Code"
+\bind "M-a S-C"                        "layout Comment"
+\bind "M-a M-c"                        "layout Caption"
+\bind "M-a d"                  "layout Description"
+\bind "M-a S-D"                        "layout Date"
+\bind "M-a e"                  "layout Enumerate"      # numbered list
+\bind "M-a f"                  "layout ShortFoilhead"  # Foils!!
+\bind "M-a S-F"                        "layout Foilhead"       # Foils!!
+\bind "M-a i"                  "layout Itemize"        # bulleted list
+\bind "M-a l"                  "layout List"
+\bind "M-a S-L"                        "layout LaTeX"
+\bind "M-a n"                  "layout Enumerate"      # numbered list
+\bind "M-a q"                  "layout Quote"
+\bind "M-a S-Q"                        "layout Quotation"
+\bind "M-a r"                  "layout ShortRotatefoilhead"    # Foils!!
+\bind "M-a S-R"                        "layout Rotatefoilhead" # Foils!!
+\bind "M-a s"                  "layout Standard"
+\bind "M-a t"                  "layout Title"
+\bind "M-a x"                  "layout LaTeX"
+\bind "M-a space"              "drop-layouts-choice"
+\bind "M-a S-at"               "layout Section*"       # M-a S-2
+\bind "M-a S-dollar"           "layout Subsubsection*" # M-a S-4
+\bind "M-a S-numbersign"       "layout Subsection*"    # M-a S-3
+\bind "M-a v"                  "layout Verse"
+
+\bind "M-a Left"               "depth-decrement"
+\bind "M-a Right"              "depth-increment"
+
+
+#
+# Menue Zeichensatz
+# 
+\bind "M-z f"                  "font-bold"
+\bind "M-z k"                  "font-noun"
+\bind "M-z h"                  "font-emph"
+\bind "M-z i"                  "font-emph"
+\bind "M-z m"                  "math-mode"
+\bind "M-z c"                  "font-code"
+\bind "M-z r"                  "font-roman"
+\bind "M-z s"                  "font-sans"
+\bind "M-z t"                  "tex-mode"
+\bind "M-z u"                  "font-underline"
+
+\bind "M-z Down"               "word-lowcase"
+\bind "M-z Up"                 "word-upcase"
+\bind "M-z Right"              "word-capitalize"
+
+\bind "M-z space"              "font-default"                  
+
+#
+# Menue Tastatur
+#
+\bind "M-t 1"                  "keymap-primary"
+\bind "M-t 2"                  "keymap-secondary"
+\bind "M-t o"                  "keymap-off"
+\bind "M-t t"                  "keymap-toggle"
+\bind "M-t x"                  "keymap-off"
diff --git a/lib/bind/emacs.bind b/lib/bind/emacs.bind
new file mode 100644 (file)
index 0000000..6a0003a
--- /dev/null
@@ -0,0 +1,202 @@
+# This file is part of
+# ==================================================================
+#
+#                   LyX, the High Level Word Processor
+# 
+#                  Copyright (C) 1995-1997 The LyX Team
+#
+#               THIS FILE DEFINES THE EMACS LYX BINDINGS
+#
+# ==================================================================
+
+#
+# This is the EMACS flavour bind file, based on the bindings found 
+# in the Emacs editor.
+#
+#
+# DO NOT CHANGE THIS DEFAULT BINDING FILE! It will be replaced
+# with every new install of LyX and your changes will be lost. 
+# Instead, customize a copy of this file placed in 
+# ~/.lyx/bind/emacs.bind
+#
+# Happy tuning!
+
+\bind "C-~S-at"                        "mark-on"
+\bind "C-a"                    "line-begin"
+\bind "C-b"                    "char-backward"
+#bind "C-c"                    "------" // used as users prefix
+\bind "C-d"                    "delete-forward"
+\bind "C-e"                    "line-end"
+\bind "C-f"                    "char-forward"
+\bind "C-g"                    "cancel"
+
+# help in emacs
+\bind "C-h"                    "hyphenation-point-insert" 
+\bind "C-i"                    "hfill-insert"
+#bind "C-j"                    "------"
+\bind "C-k"                    "line-delete-forward"
+\bind "C-l"                    "screen-recenter"
+\bind "C-m"                    "mark-toggle"
+\bind "C-n"                    "down"
+\bind "C-o"                    "open-stuff"
+\bind "C-p"                    "up"
+
+# this is "quoted-insert" a total different meaning from "quote-insert"
+\bind "C-q"                    "quote-insert"
+#bind "C-r"                    "------"
+\bind "C-s"                    "find-replace"
+\bind "M-~S-percent"           "find-replace"
+
+# should be "chars-transpose" (swaps two chars)
+#bind "C-t"                    "------"
+
+# universal argument in emacs
+\bind "C-u"                    "font-underline"
+
+# better name would be "scroll-up" as in emacs
+\bind "C-v"                    "screen-down"
+
+\bind "C-w"                    "cut"
+#bind "C-x"                    "------"
+\bind "C-y"                    "paste"
+\bind "C-S-Y"                  "layout-paste"
+
+#should be "lyx-iconify"
+#bind "C-z"                    "------"
+
+\bind "C-~S-slash"             "undo"
+\bind "C-~S-underscore"        "undo"
+
+\bind "S-C-quotedbl"           "quote-insert"
+
+\bind "C-x a"                  "buffer-auto-save"
+\bind "C-x b"                  "buffer-previous"
+\bind "C-x c"                  "lyx-quit"
+\bind "C-x d"                  "buffer-new"
+\bind "C-x g"                  "buffer-view-ps"
+\bind "C-x k"                  "buffer-close"
+\bind "C-x p"                  "buffer-view"
+\bind "C-x r"                  "buffer-typeset"
+# Should have been "buffer-write-some"
+# \bind "C-x s"                  "buffer-write"
+\bind "C-x t"                  "buffer-typeset"
+\bind "C-x u"                  "undo"
+\bind "C-x v h"                "vc-history"
+\bind "C-x v v"                "vc-check-in"
+\bind "C-x v u"                "vc-revert"
+\bind "C-x v c"                "vc-undo-last"
+\bind "C-x v i"                "vc-register"
+#\bind "C-x w"                  "buffer-write-as"
+\bind "C-x bracketleft"        "screen-up"
+\bind "C-x bracketright"       "screen-down"
+\bind "C-x C-a"                "buffer-auto-save"
+\bind "C-x C-b"                "menu-open Documents"
+\bind "C-x C-c"                "lyx-quit"
+\bind "C-x C-d"                "buffer-new"
+\bind "C-x C-f"                "buffer-open"
+\bind "C-x C-g"                "buffer-view-ps"
+\bind "C-x C-p"                "buffer-view"
+\bind "C-x C-q"                "buffer-toggle-read-only"
+#\bind "C-x C-r"                "buffer-typeset"
+\bind "C-x C-s"                "buffer-write"
+\bind "C-x C-t"                "buffer-typeset"
+
+
+# this is "upcase-region" in emacs
+#\bind "C-x C-u"                "undo"
+\bind "C-x C-w"                "buffer-write-as"
+
+#bind "C-1"                    "------"
+#bind "C-2"                    "------"
+#bind "C-3"                    "------"
+#bind "C-4"                    "------"
+#bind "C-5"                    "------"
+#bind "C-6"                    "------"
+#bind "C-7"                    "------"
+#bind "C-8"                    "------"
+#bind "C-9"                    "------"
+#bind "C-0"                    "------"
+
+#bind "F1"                     "help"                          # Not yet implemented!
+#bind "C-F1"                   "help-context"                  # Not yet implemented!
+#\bind "F2"                     "buffer-write"
+#\bind "F3"                     "buffer-open"
+#bind "F4"                     "------"
+#bind "F5"                     "------"
+#bind "F6"                     "------"
+#bind "F7"                     "------"
+#bind "F8"                     "------"
+#bind "F9"                     "------"
+#bind "F10"                    "------"
+
+\bind "M-x"                    "command-execute"
+
+
+#
+# Motion group
+#
+
+\bind "C-Right"                "word-forward"
+\bind "C-Left"                 "word-backward"
+\bind "C-Up"                   "paragraph-up"
+\bind "C-Down"                 "paragraph-down"
+\bind "Home"                   "buffer-begin"
+\bind "End"                    "buffer-end"
+
+\bind "C-~S-greater"           "reference-goto"
+\bind "C-~S-less"              "reference-back"
+
+
+# The below are xemacs bindings
+#\bind "Home"                   "line-begin"
+#\bind "End"                    "line-end"
+#\bind "C-Home"                 "buffer-begin"
+#\bind "C-End"                  "buffer-end"
+
+
+#
+# Motion + select group
+#
+
+\bind "S-Right"                "forward-select"
+\bind "S-Left"                 "backward-select"
+\bind "S-C-F"                  "forward-select"
+\bind "S-C-B"                  "backward-select"
+\bind "S-Up"                   "up-select"
+\bind "S-Down"                 "down-select"
+\bind "S-C-Right"              "word-forward-select"
+\bind "S-C-Left"               "word-backward-select"
+\bind "S-C-A"                  "line-begin-select"
+\bind "S-C-E"                  "line-end-select"
+\bind "S-C-Up"                 "paragraph-up-select"
+\bind "S-C-Down"               "paragraph-down-select"
+\bind "S-Home"                 "buffer-begin-select"
+\bind "S-End"                  "buffer-end-select"               
+\bind "S-Prior"                "screen-up-select"
+\bind "S-Next"                 "screen-down-select"
+\bind "S-C-Home"               "buffer-begin-select"
+\bind "S-C-End"                "buffer-end-select"
+
+
+#
+# Edit group
+#
+
+\bind "C-Delete"               "word-delete-forward"
+\bind "M-d"                    "word-delete-forward"
+\bind "C-BackSpace"            "word-delete-backward"
+\bind "M-Return"               "break-paragraph-keep-layout"
+\bind "C-Return"               "break-line"
+\bind "C-space"                        "protected-space-insert"
+\bind "C-period"               "end-of-sentence-period-insert"
+\bind "M-period"               "dots-insert"
+\bind "M-w"                    "copy"
+\bind "M-S-W"                  "layout-copy"
+\bind "Escape"                 "meta-prefix"
+
+
+
+# Include menu and math bindings
+
+\bind_file menus.bind
+\bind_file math.bind
diff --git a/lib/bind/fr_menus.bind b/lib/bind/fr_menus.bind
new file mode 100644 (file)
index 0000000..44d73ca
--- /dev/null
@@ -0,0 +1,337 @@
+# This file is part of
+# ==================================================================
+#
+#                  LyX, the High Level Word Processor
+# 
+#                 Copyright (C) 1995-1997 The LyX Team
+#
+# ==================================================================
+
+# Key bindings for menus, both invisible and visible.
+
+#
+# Visible Menu access menu
+#
+
+\bind "F10 f"                  "menu-open File"
+\bind "F10 e"                  "menu-open Edit"
+\bind "F10 r"                  "menu-open Layout"
+\bind "F10 i"                  "menu-open Insert"
+\bind "F10 m"                  "menu-open Math"
+\bind "F10 o"                  "menu-open Options"
+\bind "F10 d"                  "menu-open Documents"
+\bind "F10 a"                  "menu-open Help"
+
+
+#
+# File menu
+#
+
+\bind "M-f n"                  "buffer-new"            #Nouveau
+\bind "M-f m"                  "buffer-new-template"   #... Modèle
+\bind "M-f o"                  "buffer-open"           #Ouvrir
+\bind "M-f f"                  "buffer-close"          #Fermer
+\bind "M-f e"                  "buffer-write"          #Enregistrer
+\bind "M-f s"                  "buffer-write-as"       #Enregistrer Sous
+\bind "M-f r"                  "buffer-reload"         #Recharger
+\bind "M-f S-D"                        "buffer-view"           #Visualiser DVI
+\bind "M-f S-P"                        "buffer-view-ps"        #Visualiser Postscript
+\bind "M-f d"                  "buffer-typeset"        #Mise à jour dvi
+\bind "M-f p"                  "buffer-typeset-ps"     #Mise à jour Postscript
+\bind "M-f c"                  "build-program"         #Compiler programme
+\bind "M-f i"                  "buffer-print"          #Imprimer
+\bind "M-f v"                  "buffer-fax"            #Fax
+\bind "M-f t l"                        "buffer-import latex"
+\bind "M-f t a"                        "buffer-import ascii"
+\bind "M-f t p"                        "buffer-import asciiparagraph"
+\bind "M-f x l"                        "buffer-export latex"
+\bind "M-f x c"                        "buffer-export linuxdoc"
+\bind "M-f x d"                        "buffer-export dvi"
+\bind "M-f x p"                        "buffer-export postscript"
+\bind "M-f x a"                        "buffer-export ascii"
+\bind "M-f x s"                        "buffer-export custom"
+\bind "M-f q"                  "lyx-quit"
+\bind "M-f space"              "menu-open Fichier" 
+#bind "M-f d"                  "file-last"             # Not yet implemented.
+
+
+#
+# Edit menu
+#
+\bind "M-e a"                  "undo"                  # A nnuler
+\bind "M-e r"                   "redo"                 # R efaire
+\bind "M-e u"                  "cut"                   # Co u per
+\bind "M-e p"                   "copy"                         # Co p ier
+\bind "M-e l"                   "paste"                        # Co l ler
+\bind "M-e r"                  "find-replace"          # R echercher & ...
+\bind "M-e e"                  "error-next"            # Atteindre E rreur
+\bind "M-e n"                  "note-next"             # Atteindre N ote
+#
+# manque menu flottant & inserts 
+#bind "M-e t"                  "table"                 # Not yet implemented!
+\bind "M-e k"                  "line-delete-forward"   # 
+\bind "M-e m"                  "mark-on"
+\bind "M-e S-M"                        "mark-off"
+\bind "M-e o"                  "spellchecker"          # Correction O rthographique
+\bind "M-e x"                  "buffer-chktex"         # ... Syntaxe Te X
+\bind "M-e a"                  "toc-view"              # T a ble des Matières
+#
+# menu Controle de version
+\bind "M-e v i"                        "vc-register"           # VC I nitialiser
+\bind "M-e v f"                        "vc-check-in"           # VC F iger ...
+\bind "M-e v n"                        "vc-check-out"          # VC N ouvelle ...
+\bind "M-e v r"                        "vc-revert"             # VC R charger ...
+\bind "M-e v a"                        "vc-undo-last"          # VC A nnuler
+\bind "M-e v h"                        "vc-history"            # VC H istorique
+\bind "M-e j"                  "latex-view-log"        # J ournal LaTeX
+\bind "M-e S-L"                        "primary-selection-paste line"
+\bind "M-e g"                  "primary-selection-paste paragraph"
+\bind "M-e space"              "menu-open Éditer" 
+
+#
+# Layout menu
+#
+
+\bind "M-r c"                  "layout-character"      # C aractère
+\bind "M-r p"                  "layout-paragraph"      # P aragraphe
+\bind "M-r d"                  "layout-document"       # D ocument
+\bind "M-r a"                  "layout-paper"          # pApier
+\bind "M-r t"                  "layout-table"          # Tableau
+\bind "M-r S-G"                        "layout-quotes"         # gUillemets
+\bind "M-r e"                  "font-emph"             # Evidence
+\bind "M-r m"                  "font-noun"             # Majuscule
+\bind "M-r g"                  "font-bold"             # Gras
+\bind "M-r t"                  "tex-mode"              # TeX
+\bind "M-r f"                  "depth-next"            # proFondeur
+\bind "M-r l"                  "layout-preamble"       # préambule Latex
+\bind "M-r S-D"                        "layout-save-default"   # ... Défaut
+\bind "M-r space"              "menu-open Format"  
+# sait pas ce que ca fait ici ?
+#\bind "M-r i"                 "buffer-itemize-bullets-select"
+
+
+#
+# Insert menu
+#
+
+\bind "M-i f"                  "figure-insert"                 #inserer Figure
+\bind "M-i t"                  "table-insert"                  #inserer Tableau
+\bind "M-i b"                  "footnote-insert"               #note de bas de Page 
+\bind "M-i m"                  "marginpar-insert"              #note en Marge
+
+#\bind "M-i q"                 "quote-insert"
+\bind "M-i apostrophe"         "quote-insert"
+\bind "M-i S-quotedbl"         "quote-insert"
+
+# menu Flottants
+\bind "M-i o f"                        "buffer-float-insert figure" 
+\bind "M-i o t"                        "buffer-float-insert table"
+\bind "M-i o S-F"              "buffer-float-insert wide-fig"
+\bind "M-i o S-T"              "buffer-float-insert wide-tab"
+\bind "M-i o a"                        "buffer-float-insert algorithm"
+
+# menu Caractère Spécial
+\bind "M-i s h"                        "hfill-insert"                  #Horizontal
+\bind "M-i s c"                        "hyphenation-point-insert"      #Point de Césure
+\bind "M-i s b"                        "protected-space-insert"        #Blanc
+\bind "M-i s l"                        "break-line"                    #Passage a la ligne
+\bind "M-i s p"                        "end-of-sentence-period-insert" #point final
+\bind "M-i s s"                        "dots-insert"                   #Suspension
+\bind "M-i s g"                        "quote-insert"                  #Guillemets
+\bind "M-i s m"                        "menu-separator-insert"         #Séparateur de menu
+\bind "M-i minus"              "hyphenation-point-insert"      #Point de Césure
+
+# menu Listes&Tables
+\bind "M-i l m"                        "toc-insert"                    #
+\bind "M-i l f"                        "lof-insert"
+\bind "M-i l t"                        "lot-insert"
+\bind "M-i l a"                        "loa-insert"                    #
+\bind "M-i l i"                        "index-print"
+\bind "M-i l b"                        "bibtex-insert"
+
+
+\bind "M-i n"                  "note-insert"
+\bind "M-i eacute"             "label-insert"
+\bind "M-i r"                  "reference-insert"
+\bind "M-i c"                  "citation-insert"
+\bind "M-i x"                  "index-insert"
+\bind "M-i d"                  "index-insert-last"
+
+\bind "M-i space"              "menu-open Insérer"  
+
+
+
+#
+# Math menu
+#
+
+\bind "M-m space"              "menu-open Maths" 
+
+#
+# Options menu
+#
+
+#bind "M-o p"                  "screen-font-options"   # Not yet implemented!
+#bind "M-o o"                  "spellcheck-options"    # Not yet implemented!
+#bind "M-o c"                  "keyboard-options"      # Not yet implemented!
+#bind "M-o l"                  "latex-options"         # Not yet implemented!
+\bind "M-o space"              "menu-open Options"  
+
+
+#
+# Documents menu
+#
+# These are now defined in cua or emacs bind files so their "standard"
+# bindings are available. (eg M-d "word-delete-forward" in emacs) ARRae
+#\bind "M-d p"                 "buffer-previous"
+#\bind "M-d space"             "menu-open Documents"
+
+
+#
+# Help menu
+#
+
+#bind "M-a i"                  "help-introduction"     # Not yet implemented!
+#bind "M-a a"                  "help-tutorial"         # Not yet implemented!
+#bind "M-a u"                  "help-user-guide"       # Not yet implemented!
+#bind "M-a o"                  "help-reference-guide"  # Not yet implemented!
+#bind "M-a f"                  "help-how-do-i-"        # Not yet implemented!
+#bind "M-a p"                  "help-customization"    # Not yet implemented!
+#bind "M-a s"                  "help-special-tools"    # Not yet implemented!
+#bind "M-a b"                  "help-known-bugs"       # Not yet implemented!
+#bind "M-a l"                  "help-latex-config"     # Not yet implemented!
+#bind "M-a c"                  "help-copyright"        # Not yet implemented!
+#bind "M-a r"                  "help-credits"          # Not yet implemented!
+#bind "M-a v"                  "help-version"          # Not yet implemented!
+\bind "M-a space"              "menu-open Help" 
+
+
+# a partir de la je n' ai plus traduit...
+
+
+
+
+#
+# Font size menu
+#
+
+\bind "M-s t"                  "font-size tiny"
+\bind "M-s S-S"                        "font-size smaller"
+\bind "M-s s"                  "font-size small"
+\bind "M-s n"                  "font-size normal"
+\bind "M-s l"                  "font-size large"
+\bind "M-s S-L"                        "font-size larger"
+\bind "M-s h"                  "font-size huge"
+\bind "M-s S-H"                        "font-size huger"
+
+\bind "M-s 1"                  "font-size tiny"
+\bind "M-s 2"                  "font-size smallest"
+\bind "M-s 3"                  "font-size smaller"
+\bind "M-s 4"                  "font-size small"
+\bind "M-s 5"                  "font-size normal"
+\bind "M-s 6"                  "font-size large"
+\bind "M-s 7"                  "font-size larger"
+\bind "M-s 8"                  "font-size largest"
+\bind "M-s 9"                  "font-size huge"
+\bind "M-s 0"                  "font-size huger"
+
+\bind "M-s plus"               "font-size increase"
+\bind "M-s minus"              "font-size decrease"
+
+
+#
+# Alignment menu
+#
+
+#bind "M-a l"                  "para-align left"       # Not yet implemented!
+#bind "M-a r"                  "para-align right"      # Not yet implemented!
+#bind "M-a c"                  "para-align center"     # Not yet implemented!
+#bind "M-a b"                  "para-align block"      # Not yet implemented!
+#bind "M-a f"                  "para-align block"      # Not yet implemented!
+#bind "M-a d"                  "para-align default"    # Not yet implemented!
+
+
+#
+# Paragraph style menu
+#
+
+\bind "M-p 1"                  "layout Chapter" 
+\bind "M-p 2"                  "layout Section" 
+\bind "M-p 3"                  "layout Subsection"  
+\bind "M-p 4"                  "layout Subsubsection"    
+\bind "M-p 5"                  "layout Paragraph"        
+\bind "M-p 6"                  "layout Subparagraph"
+\bind "M-p F1"                 "layout Chapter" 
+\bind "M-p F2"                 "layout Section" 
+\bind "M-p F3"                 "layout Subsection"  
+\bind "M-p F4"                 "layout Subsubsection"    
+\bind "M-p F5"                 "layout Paragraph"        
+\bind "M-p F6"                 "layout Subparagraph"
+\bind "M-p a"                  "layout Abstract"
+\bind "M-p S-A"                        "layout Author"
+\bind "M-p M-a"                        "layout Address"
+\bind "M-p C-a"                        "layout RightAddress"
+\bind "M-p b"                  "layout Itemize"        # bulleted list
+\bind "M-p S-B"                        "layout Bibliography"
+\bind "M-p c"                  "layout LyX-Code"
+\bind "M-p S-C"                        "layout Comment"
+\bind "M-p M-c"                        "layout Caption"
+\bind "M-p d"                  "layout Description"
+\bind "M-p S-D"                        "layout Date"
+\bind "M-p e"                  "layout Enumerate"      # numbered list
+\bind "M-p f"                  "layout ShortFoilhead"  # Foils!!
+\bind "M-p S-F"                        "layout Foilhead"       # Foils!!
+\bind "M-p i"                  "layout Itemize"        # bulleted list
+\bind "M-p l"                  "layout List"
+\bind "M-p S-L"                        "layout LaTeX"
+\bind "M-p n"                  "layout Enumerate"      # numbered list
+\bind "M-p q"                  "layout Quote"
+\bind "M-p S-Q"                        "layout Quotation"
+\bind "M-p r"                  "layout ShortRotatefoilhead"    # Foils!!
+\bind "M-p S-R"                        "layout Rotatefoilhead" # Foils!!
+\bind "M-p s"                  "layout Standard"
+\bind "M-p t"                  "layout Title"
+\bind "M-p x"                  "layout LaTeX"
+\bind "M-p space"              "drop-layouts-choice"
+\bind "M-p S-at"               "layout Section*"       # M-p S-2
+\bind "M-p S-dollar"           "layout Subsubsection*" # M-p S-4
+\bind "M-p S-numbersign"       "layout Subsection*"    # M-p S-3
+\bind "M-p S-F2"               "layout Section*"       # M-p S-2
+\bind "M-p S-F4"               "layout Subsubsection*" # M-p S-4
+\bind "M-p S-F3"               "layout Subsection*"    # M-p S-3
+\bind "M-p v"                  "layout Verse"
+
+\bind "M-p Left"               "depth-decrement"
+\bind "M-p Right"              "depth-increment"
+
+
+#
+# Character style menu
+# 
+
+\bind "M-c b"                  "font-bold"
+\bind "M-c c"                  "font-noun"
+\bind "M-c e"                  "font-emph"
+\bind "M-c m"                  "math-mode"
+\bind "M-c p"                  "font-code"
+\bind "M-c r"                  "font-roman"
+\bind "M-c s"                  "font-sans"
+\bind "M-c t"                  "tex-mode"
+\bind "M-c u"                  "font-underline"
+
+\bind "M-c Down"               "word-lowcase"
+\bind "M-c Up"                 "word-upcase"
+\bind "M-c Right"              "word-capitalize"
+
+\bind "M-c space"              "font-default"                  
+
+
+#
+# Keyboard menu
+#
+
+\bind "M-k 1"                  "keymap-primary"
+\bind "M-k 2"                  "keymap-secondary"
+\bind "M-k o"                  "keymap-off"
+\bind "M-k t"                  "keymap-toggle"
+\bind "M-k x"                  "keymap-off"
diff --git a/lib/bind/hollywood.bind b/lib/bind/hollywood.bind
new file mode 100644 (file)
index 0000000..1cc437e
--- /dev/null
@@ -0,0 +1,15 @@
+# Hollywood script 
+
+\bind "M-z s"                  "layout Speaker"
+\bind "M-z n"                  "layout Narrative"
+\bind "M-z e"                  "layout EXT."
+\bind "M-z i"                  "layout INT."
+\bind "M-z d"                  "layout Dialogue"
+\bind "M-z p"                  "layout Parenthetical"
+\bind "M-z S-I"                        "layout FADE_IN"
+\bind "M-z S-O"                        "layout FADE_OUT"
+\bind "M-z t"                  "layout Transition"
+\bind "M-z S-A"                        "layout Author"
+\bind "M-z S-T"                        "layout Title"
+\bind "M-z r"                  "layout Right_Address"
+
diff --git a/lib/bind/hu_menus.bind b/lib/bind/hu_menus.bind
new file mode 100644 (file)
index 0000000..707bf27
--- /dev/null
@@ -0,0 +1,294 @@
+# This file is part of
+# ==================================================================
+#
+#                  LyX, the High Level Word Processor
+# 
+#                 Copyright (C) 1995-1997 The LyX Team
+#
+# ==================================================================
+
+# Key bindings for menus, both invisible and visible.
+
+#
+# Visible Menu access menu
+#
+
+\bind "F10 f"                  "menu-open Fájl"
+\bind "F10 z"                  "menu-open Szerkesztés"
+\bind "F10 n"                  "menu-open Nézet"
+\bind "F10 b"                  "menu-open Beszúrás"
+\bind "F10 k"                  "menu-open Képlet"
+\bind "F10 e"                  "menu-open Beállítások"
+\bind "F10 d"                  "menu-open Dokumentumok"
+\bind "F10 s"                  "menu-open Súgó"
+
+
+#
+# File menu
+#
+
+\bind "M-f space"              "menu-open Fájl" 
+\bind "M-f j"                  "buffer-new"
+\bind "M-f a"                  "buffer-new-template"
+\bind "M-f n"                  "buffer-open"
+\bind "M-f z"                  "buffer-close"
+\bind "M-f m"                  "buffer-write"
+\bind "M-f t"                  "buffer-write-as"
+\bind "M-f i"                  "buffer-reload"
+\bind "M-f d"                  "buffer-view"
+\bind "M-f p"                  "buffer-view-ps"
+\bind "M-f v"                  "buffer-typeset"
+\bind "M-f o"                  "buffer-typeset-ps"
+\bind "M-f y"                  "buffer-print" 
+\bind "M-f f"                  "buffer-fax"
+\bind "M-f l"                  "buffer-export latex"
+\bind "M-f u"                  "buffer-export linuxdoc"
+\bind "M-f c"                  "buffer-export ascii"
+\bind "M-f s"                  "buffer-export custom"
+\bind "M-f k"                  "lyx-quit"
+\bind "M-f x"                  "lyx-quit"
+#bind "M-f l"                  "file-last"             # Not yet implemented.
+
+
+#
+# Edit menu
+#
+
+\bind "M-z space"              "menu-open Szerkesztés" 
+\bind "M-z v"                  "undo"
+\bind "M-z i"                  "redo"
+\bind "M-z k"                  "cut"
+\bind "M-z m"                  "copy"
+\bind "M-z b"                  "paste"
+\bind "M-z e"                  "find-replace"
+\bind "M-z h"                  "error-next"
+\bind "M-z g"                  "note-next"
+#bind "M-z b"                  "table"                 # Not yet implemented!
+\bind "M-z n"                  "spellchecker"
+\bind "M-z t"                  "buffer-chktex"
+\bind "M-z a"                  "toc-view"
+\bind "M-z l"                  "latex-view-log"
+\bind "M-z s"                  "line-delete-forward"
+\bind "M-z m"                  "mark-on"
+\bind "M-z S-M"                        "mark-off"
+
+
+#
+# Layout menu
+#
+
+\bind "M-o space"              "menu-open Formátum"  
+\bind "M-o b"                  "layout-character"
+\bind "M-o e"                  "layout-paragraph"
+\bind "M-o d"                  "layout-document"
+\bind "M-o o"                  "layout-paper"
+\bind "M-o q"                  "layout-quotes" 
+\bind "M-o l"                  "font-emph" 
+\bind "M-o k"                  "font-noun" 
+\bind "M-o f"                  "font-bold" 
+\bind "M-o x"                  "tex-mode" 
+\bind "M-o v"                  "depth-next"
+\bind "M-o a"                  "layout-preamble" 
+\bind "M-o s"                  "buffer-itemize-bullets-select"
+
+
+#
+# Insert menu
+#
+
+\bind "M-b space"              "menu-open Beszúrás"  
+\bind "M-b b"                  "figure-insert"
+\bind "M-b t"                  "table-insert"
+\bind "M-b f"                  "buffer-child-insert"
+\bind "M-b l"                  "footnote-insert"
+\bind "M-b s"                  "marginpar-insert"
+
+\bind "M-b j a"                        "toc-insert"
+\bind "M-b j b"                        "lof-insert"
+\bind "M-b j t"                        "lot-insert"
+\bind "M-b a"                  "loa-insert"
+\bind "M-b j l"                        "loa-insert"
+\bind "M-b j r"                        "index-print"
+\bind "M-b j i"                        "bibtex-insert"
+
+\bind "M-b p h"                        "hfill-insert"
+\bind "M-b minus"              "hyphenation-point-insert"
+\bind "M-b p minus"            "hyphenation-point-insert"
+\bind "M-b p e"                        "hyphenation-point-insert"
+\bind "M-b p v"                        "protected-space-insert"
+\bind "M-b p space"            "protected-space-insert"
+\bind "M-b p s"                        "break-line"
+\bind "M-b p z"                        "dots-insert"
+\bind "M-b p e"                        "end-of-sentence-period-insert"
+\bind "M-b q"                  "quote-insert"
+\bind "M-b apostrophe"         "quote-insert"
+\bind "M-b S-quotedbl"         "quote-insert"
+\bind "M-b p q"                        "quote-insert"
+
+\bind "M-b m"                  "note-insert"
+\bind "M-b c"                  "label-insert"
+\bind "M-b k"                  "reference-insert"
+\bind "M-b i"                  "citation-insert"
+
+
+
+#
+# Math menu
+#
+
+\bind "M-k space"              "menu-open Képlet" 
+
+#
+# Options menu
+#
+
+#bind "M-e f"                  "screen-font-options"   # Not yet implemented!
+#bind "M-e s"                  "spellcheck-options"    # Not yet implemented!
+#bind "M-e k"                  "keyboard-options"      # Not yet implemented!
+#bind "M-e l"                  "latex-options"         # Not yet implemented!
+\bind "M-e space"              "menu-open Egyebek"  
+
+
+#
+# Documents menu
+#
+# These are now defined in cua or emacs bind files so their "standard"
+# bindings are available. (eg M-d "word-delete-forward" in emacs) ARRae
+\bind "M-d p"                  "buffer-previous"
+\bind "M-d space"              "menu-open Dokumentumok"
+
+
+#
+# Help menu
+#
+
+#bind "M-h i"                  "help-introduction"     # Not yet implemented!
+#bind "M-h t"                  "help-tutorial"         # Not yet implemented!
+#bind "M-h u"                  "help-user-guide"       # Not yet implemented!
+#bind "M-h r"                  "help-reference-guide"  # Not yet implemented!
+#bind "M-h h"                  "help-how-do-i-"        # Not yet implemented!
+#bind "M-h c"                  "help-customization"    # Not yet implemented!
+#bind "M-h s"                  "help-special-tools"    # Not yet implemented!
+#bind "M-h k"                  "help-known-bugs"       # Not yet implemented!
+#bind "M-h a"                  "help-latex-config"     # Not yet implemented!
+#bind "M-h o"                  "help-copyright"        # Not yet implemented!
+#bind "M-h e"                  "help-credits"          # Not yet implemented!
+#bind "M-h v"                  "help-version"          # Not yet implemented!
+\bind "M-s space"              "menu-open Súgó" 
+
+
+#
+# Font size menu
+#
+
+\bind "M-s t"                  "font-size tiny"
+\bind "M-s S-S"                        "font-size smaller"
+\bind "M-s s"                  "font-size small"
+\bind "M-s n"                  "font-size normal"
+\bind "M-s l"                  "font-size large"
+\bind "M-s S-L"                        "font-size larger"
+\bind "M-s h"                  "font-size huge"
+\bind "M-s S-H"                        "font-size huger"
+
+\bind "M-s 1"                  "font-size tiny"
+\bind "M-s 2"                  "font-size smallest"
+\bind "M-s 3"                  "font-size smaller"
+\bind "M-s 4"                  "font-size small"
+\bind "M-s 5"                  "font-size normal"
+\bind "M-s 6"                  "font-size large"
+\bind "M-s 7"                  "font-size larger"
+\bind "M-s 8"                  "font-size largest"
+\bind "M-s 9"                  "font-size huge"
+\bind "M-s 0"                  "font-size huger"
+
+\bind "M-s plus"               "font-size increase"
+\bind "M-s minus"              "font-size decrease"
+
+
+#
+# Alignment menu
+#
+
+#bind "M-a l"                  "para-align left"       # Not yet implemented!
+#bind "M-a r"                  "para-align right"      # Not yet implemented!
+#bind "M-a c"                  "para-align center"     # Not yet implemented!
+#bind "M-a b"                  "para-align block"      # Not yet implemented!
+#bind "M-a f"                  "para-align block"      # Not yet implemented!
+#bind "M-a d"                  "para-align default"    # Not yet implemented!
+
+
+#
+# Paragraph style menu
+#
+
+\bind "M-p 1"                  "layout Chapter" 
+\bind "M-p 2"                  "layout Section" 
+\bind "M-p 3"                  "layout Subsection"  
+\bind "M-p 4"                  "layout Subsubsection"    
+\bind "M-p 5"                  "layout Paragraph"        
+\bind "M-p 6"                  "layout Subparagraph"
+\bind "M-p a"                  "layout Abstract"
+\bind "M-p S-A"                        "layout Author"
+\bind "M-p M-a"                        "layout Address"
+\bind "M-p C-a"                        "layout RightAddress"
+\bind "M-p b"                  "layout Itemize"        # bulleted list
+\bind "M-p S-B"                        "layout Bibliography"
+\bind "M-p c"                  "layout LyX-Code"
+\bind "M-p S-C"                        "layout Comment"
+\bind "M-p M-c"                        "layout Caption"
+\bind "M-p d"                  "layout Description"
+\bind "M-p S-D"                        "layout Date"
+\bind "M-p e"                  "layout Enumerate"      # numbered list
+\bind "M-p f"                  "layout ShortFoilhead"  # Foils!!
+\bind "M-p S-F"                        "layout Foilhead"       # Foils!!
+\bind "M-p i"                  "layout Itemize"        # bulleted list
+\bind "M-p l"                  "layout List"
+\bind "M-p S-L"                        "layout LaTeX"
+\bind "M-p n"                  "layout Enumerate"      # numbered list
+\bind "M-p q"                  "layout Quote"
+\bind "M-p S-Q"                        "layout Quotation"
+\bind "M-p r"                  "layout ShortRotatefoilhead"    # Foils!!
+\bind "M-p S-R"                        "layout Rotatefoilhead" # Foils!!
+\bind "M-p s"                  "layout Standard"
+\bind "M-p t"                  "layout Title"
+\bind "M-p x"                  "layout LaTeX"
+\bind "M-p space"              "drop-layouts-choice"
+\bind "M-p S-at"               "layout Section*"       # M-p S-2
+\bind "M-p S-dollar"           "layout Subsubsection*" # M-p S-4
+\bind "M-p S-numbersign"       "layout Subsection*"    # M-p S-3
+\bind "M-p v"                  "layout Verse"
+
+\bind "M-p Left"               "depth-decrement"
+\bind "M-p Right"              "depth-increment"
+
+
+#
+# Character style menu
+# 
+
+\bind "M-c b"                  "font-bold"
+\bind "M-c c"                  "font-noun"
+\bind "M-c e"                  "font-emph"
+\bind "M-c m"                  "math-mode"
+\bind "M-c p"                  "font-code"
+\bind "M-c r"                  "font-roman"
+\bind "M-c s"                  "font-sans"
+\bind "M-c t"                  "tex-mode"
+\bind "M-c u"                  "font-underline"
+
+\bind "M-c Down"               "word-lowcase"
+\bind "M-c Up"                 "word-upcase"
+\bind "M-c Right"              "word-capitalize"
+
+\bind "M-c space"              "font-default"                  
+
+
+#
+# Keyboard menu
+#
+
+\bind "M-k 1"                  "keymap-primary"
+\bind "M-k 2"                  "keymap-secondary"
+\bind "M-k o"                  "keymap-off"
+\bind "M-k t"                  "keymap-toggle"
+\bind "M-k x"                  "keymap-off"
diff --git a/lib/bind/math.bind b/lib/bind/math.bind
new file mode 100644 (file)
index 0000000..44f8c88
--- /dev/null
@@ -0,0 +1,75 @@
+# This file is part of
+# ==================================================================
+#
+#                   LyX, the Document Processor
+#
+#               Copyright (C) 1997 LyX Team
+#
+#                      Version 0.1, May 28 1997
+#
+# ==================================================================
+
+# This file provides math mode keys.  Most were suggested by John Weiss 
+# and modified by Alejandro Aguilar Sierra to be used with different 
+# keyboard layouts.
+#
+# This file is automatically included from the main bind file.
+#
+# DO NOT CHANGE THIS BINDING FILE! It will be replaced
+# with every new install of LyX and your changes will be lost.
+# Instead, copy it to ~/.lyx/bind/math.bind and modify that copy.
+
+# Note that the order of these is important.  If you put the bindings
+# that need "period" and "parenleft" first, they flood the minibuffer
+# and make the keybinding hints impossible to read.  That's why they're
+# at the end.
+
+# These are defined for the math menu:
+
+\bind "M-m f"                  "math-insert frac"
+\bind "M-m s"                  "math-insert sqrt"
+\bind "M-m e"                  "math-insert ^"
+\bind "M-m x"                  "math-insert _"
+\bind "M-m u"                  "math-insert sum"
+\bind "M-m i"                  "math-insert int"
+\bind "M-m m"                  "math-mode"
+\bind "M-m d"                  "math-display"
+
+\bind "M-m g"                  "math-greek"
+\bind "M-m S-G"                        "math-greek-toggle" 
+\bind "M-m o"                  "math-insert oint"
+\bind "M-m p"                  "math-insert partial"
+\bind "M-m r"                  "math-insert root"
+\bind "M-m l"                  "math-limits"
+
+\bind "M-m n"                  "math-number"
+\bind "M-m S-N"                        "math-nonumber"
+\bind "M-m 8"                  "math-insert infty"
+\bind "M-m v"                  "accent-vector"
+
+# The accent-circumflex is 'h' for 'hat', which is what most math
+# folks call it verbally.
+
+\bind "M-m b"                  "math-insert overline"
+\bind "M-m h"                  "accent-circumflex"
+\bind "M-m ~S-period"          "accent-dot"
+\bind "M-m ~S-asciitilde"      "accent-tilde"
+\bind "M-m ~S-apostrophe"      "math-insert prime"
+\bind "M-m ~S-quotedbl"        "accent-umlaut"
+
+
+# These do pairs of: () {} [] <> ||
+
+\bind "M-m ~S-parenleft"       "math-delim ( )"
+\bind "M-m ~S-bracketleft"     "math-delim [ ]"
+\bind "M-m ~S-braceleft"       "math-delim { }"
+\bind "M-m ~S-less"            "math-delim langle rangle"  
+\bind "M-m ~S-greater"         "math-delim rangle langle"
+\bind "M-m ~S-bar"             "math-delim | |"
+
+
+# Note: it's easy to insert binary relations like \pm, \mp, \neq, \geq, 
+# and \leq just by typing them. However it's easier to remember these:
+
+\bind "M-m ~S-plus"            "math-insert pm" 
+\bind "M-m ~S-equal"           "math-insert neq"
diff --git a/lib/bind/menus.bind b/lib/bind/menus.bind
new file mode 100644 (file)
index 0000000..710ffb4
--- /dev/null
@@ -0,0 +1,311 @@
+# This file is part of
+# ==================================================================
+#
+#                  LyX, the High Level Word Processor
+# 
+#                 Copyright (C) 1995-1997 The LyX Team
+#
+# ==================================================================
+
+# Key bindings for menus, both invisible and visible.
+
+#
+# Visible Menu access menu
+#
+
+\bind "F10 f"                  "menu-open File"
+\bind "F10 e"                  "menu-open Edit"
+\bind "F10 l"                  "menu-open Layout"
+\bind "F10 i"                  "menu-open Insert"
+\bind "F10 m"                  "menu-open Math"
+\bind "F10 o"                  "menu-open Options"
+\bind "F10 d"                  "menu-open Documents"
+\bind "F10 h"                  "menu-open Help"
+
+
+#
+# File menu
+#
+
+\bind "M-f n"                  "buffer-new"
+\bind "M-f t"                  "buffer-new-template"
+\bind "M-f o"                  "buffer-open"
+\bind "M-f c"                  "buffer-close"
+\bind "M-f s"                  "buffer-write"
+\bind "M-f a"                  "buffer-write-as"
+\bind "M-f r"                  "buffer-reload"
+\bind "M-f d"                  "buffer-view"
+\bind "M-f w"                  "buffer-view-ps"
+\bind "M-f v"                  "buffer-typeset"
+\bind "M-f u"                  "buffer-typeset-ps"
+\bind "M-f p"                  "buffer-print" 
+\bind "M-f f"                  "buffer-fax"
+\bind "M-f i l"                 "buffer-import latex"
+\bind "M-f i a"                 "buffer-import ascii"
+\bind "M-f i p"                 "buffer-import asciiparagraph"
+\bind "M-f i n"                 "buffer-import noweb"
+\bind "M-f e l"                 "buffer-export latex"
+\bind "M-f e p"                 "buffer-export postscript"
+\bind "M-f e d"                 "buffer-export linuxdoc"
+\bind "M-f e t"                 "buffer-export ascii"
+\bind "M-f e m"                 "buffer-export custom"
+\bind "M-f x"                  "lyx-quit"
+\bind "M-f space"              "menu-open File" 
+#bind "M-f l"                  "file-last"             # Not yet implemented.
+
+#
+# Edit menu
+#
+
+#bind "M-e b"                  "table"                 # Not yet implemented!
+\bind "M-e c"                  "cut"
+\bind "M-e e"                  "error-next"
+\bind "M-e f"                  "find-replace"
+\bind "M-e k"                  "line-delete-forward"
+\bind "M-e m"                  "mark-on"
+\bind "M-e S-M"                        "mark-off"
+\bind "M-e n"                  "note-next"
+\bind "M-e o"                  "copy"
+\bind "M-e p"                  "paste"
+\bind "M-e r"                  "redo"
+\bind "M-e s"                  "spellchecker"
+\bind "M-e h"                  "buffer-chktex"
+\bind "M-e t"                  "toc-view"
+\bind "M-e u"                  "undo"
+\bind "M-e w"                  "latex-view-log"
+\bind "M-e space"              "menu-open Edit" 
+
+#
+# Layout menu
+#
+
+\bind "M-l c"                  "layout-character"
+\bind "M-l p"                  "layout-paragraph"
+\bind "M-l d"                  "layout-document"
+\bind "M-l a"                  "layout-paper"
+\bind "M-l e"                  "layout-table"
+\bind "M-l q"                  "layout-quotes" 
+\bind "M-l m"                  "font-emph" 
+\bind "M-l n"                  "font-noun" 
+\bind "M-l b"                  "font-bold" 
+\bind "M-l t"                  "tex-mode" 
+\bind "M-l v"                  "depth-next"
+\bind "M-l l"                  "layout-preamble"
+\bind "M-l s"                  "layout-save-default"
+\bind "M-l space"              "menu-open Layout"  
+\bind "M-l i"                  "buffer-itemize-bullets-select"
+
+
+#
+# Insert menu
+#
+
+\bind "M-i g"                  "figure-insert"
+\bind "M-i b"                  "table-insert"
+\bind "M-i c"                  "buffer-child-insert"
+\bind "M-i a l"                        "file-insert-ascii line"         
+\bind "M-i a p"                        "file-insert-ascii paragraph"
+\bind "M-i x"                  "file-insert"
+\bind "M-i f"                  "footnote-insert"
+\bind "M-i m"                  "marginpar-insert"
+
+# PREVIOUS PATCH
+\bind "M-i o g"                        "buffer-float-insert figure" 
+\bind "M-i o t"                        "buffer-float-insert table"
+\bind "M-i o w"                        "buffer-float-insert wide-fig"
+\bind "M-i o d"                        "buffer-float-insert wide-tab"
+\bind "M-i o a"                        "buffer-float-insert algorithm"
+
+\bind "M-i t c"                        "toc-insert"
+\bind "M-i t f"                        "lof-insert"
+\bind "M-i t t"                        "lot-insert"
+\bind "M-i t i"                        "index-print"
+\bind "M-i t b"                        "bibtex-insert"
+\bind "M-i t a"                        "loa-insert"
+
+\bind "M-i minus"              "hyphenation-point-insert"
+\bind "M-i p"                  "dots-insert"
+\bind "M-i e"                  "end-of-sentence-period-insert"
+\bind "M-i q"                  "quote-insert"
+\bind "M-i apostrophe"         "quote-insert"
+\bind "M-i S-quotedbl"         "quote-insert"
+\bind "M-i s h"                        "hfill-insert"
+# NOT IN MENU. (HIDDEN TO LEARNER)
+\bind "M-i s minus"            "hyphenation-point-insert"
+\bind "M-i s b"                        "protected-space-insert"
+\bind "M-i s l"                        "break-line"
+\bind "M-i s i"                        "dots-insert"
+\bind "M-i s e"                        "end-of-sentence-period-insert"
+\bind "M-i s q"                        "quote-insert"
+\bind "M-i s m"                        "menu-separator-insert"
+\bind "M-i n"                  "note-insert"
+\bind "M-i l"                  "label-insert"
+\bind "M-i r"                  "reference-insert"
+\bind "M-i i"                  "citation-insert"
+\bind "M-i d"                  "index-insert"
+\bind "M-i w"                  "index-insert-last"
+\bind "M-i u"                  "url-insert"
+\bind "M-i space"              "menu-open Insert"  
+
+
+
+#
+# Math menu
+#
+
+\bind "M-m space"              "menu-open Math" 
+
+#
+# Options menu
+#
+
+#bind "M-o f"                  "screen-font-options"   # Not yet implemented!
+#bind "M-o s"                  "spellcheck-options"    # Not yet implemented!
+#bind "M-o k"                  "keyboard-options"      # Not yet implemented!
+#bind "M-o l"                  "latex-options"         # Not yet implemented!
+\bind "M-o space"              "menu-open Options"  
+
+
+#
+# Documents menu
+#
+# These are now defined in cua or emacs bind files so their "standard"
+# bindings are available. (eg M-d "word-delete-forward" in emacs) ARRae
+#\bind "M-d p"                 "buffer-previous"
+#\bind "M-d space"             "menu-open Documents"
+
+
+#
+# Help menu
+#
+
+#bind "M-h i"                  "help-introduction"     # Not yet implemented!
+#bind "M-h t"                  "help-tutorial"         # Not yet implemented!
+#bind "M-h u"                  "help-user-guide"       # Not yet implemented!
+#bind "M-h r"                  "help-reference-guide"  # Not yet implemented!
+#bind "M-h h"                  "help-how-do-i-"        # Not yet implemented!
+#bind "M-h c"                  "help-customization"    # Not yet implemented!
+#bind "M-h s"                  "help-special-tools"    # Not yet implemented!
+#bind "M-h k"                  "help-known-bugs"       # Not yet implemented!
+#bind "M-h a"                  "help-latex-config"     # Not yet implemented!
+#bind "M-h o"                  "help-copyright"        # Not yet implemented!
+#bind "M-h e"                  "help-credits"          # Not yet implemented!
+#bind "M-h v"                  "help-version"          # Not yet implemented!
+\bind "M-h space"              "menu-open Help" 
+
+
+#
+# Font size menu
+#
+
+\bind "M-s t"                  "font-size tiny"
+\bind "M-s S-S"                        "font-size smaller"
+\bind "M-s s"                  "font-size small"
+\bind "M-s n"                  "font-size normal"
+\bind "M-s l"                  "font-size large"
+\bind "M-s S-L"                        "font-size larger"
+\bind "M-s h"                  "font-size huge"
+\bind "M-s S-H"                        "font-size huger"
+
+\bind "M-s 1"                  "font-size tiny"
+\bind "M-s 2"                  "font-size smallest"
+\bind "M-s 3"                  "font-size smaller"
+\bind "M-s 4"                  "font-size small"
+\bind "M-s 5"                  "font-size normal"
+\bind "M-s 6"                  "font-size large"
+\bind "M-s 7"                  "font-size larger"
+\bind "M-s 8"                  "font-size largest"
+\bind "M-s 9"                  "font-size huge"
+\bind "M-s 0"                  "font-size huger"
+
+\bind "M-s plus"               "font-size increase"
+\bind "M-s minus"              "font-size decrease"
+
+
+#
+# Alignment menu
+#
+
+#bind "M-a l"                  "para-align left"       # Not yet implemented!
+#bind "M-a r"                  "para-align right"      # Not yet implemented!
+#bind "M-a c"                  "para-align center"     # Not yet implemented!
+#bind "M-a b"                  "para-align block"      # Not yet implemented!
+#bind "M-a f"                  "para-align block"      # Not yet implemented!
+#bind "M-a d"                  "para-align default"    # Not yet implemented!
+
+
+#
+# Paragraph style menu
+#
+
+\bind "M-p 1"                  "layout Chapter" 
+\bind "M-p 2"                  "layout Section" 
+\bind "M-p 3"                  "layout Subsection"  
+\bind "M-p 4"                  "layout Subsubsection"    
+\bind "M-p 5"                  "layout Paragraph"        
+\bind "M-p 6"                  "layout Subparagraph"
+\bind "M-p a"                  "layout Abstract"
+\bind "M-p S-A"                        "layout Author"
+\bind "M-p M-a"                        "layout Address"
+\bind "M-p C-a"                        "layout RightAddress"
+\bind "M-p b"                  "layout Itemize"        # bulleted list
+\bind "M-p S-B"                        "layout Bibliography"
+\bind "M-p c"                  "layout LyX-Code"
+\bind "M-p S-C"                        "layout Comment"
+\bind "M-p M-c"                        "layout Caption"
+\bind "M-p d"                  "layout Description"
+\bind "M-p S-D"                        "layout Date"
+\bind "M-p e"                  "layout Enumerate"      # numbered list
+\bind "M-p f"                  "layout ShortFoilhead"  # Foils!!
+\bind "M-p S-F"                        "layout Foilhead"       # Foils!!
+\bind "M-p i"                  "layout Itemize"        # bulleted list
+\bind "M-p l"                  "layout List"
+\bind "M-p S-L"                        "layout LaTeX"
+\bind "M-p n"                  "layout Enumerate"      # numbered list
+\bind "M-p q"                  "layout Quote"
+\bind "M-p S-Q"                        "layout Quotation"
+\bind "M-p r"                  "layout ShortRotatefoilhead"    # Foils!!
+\bind "M-p S-R"                        "layout Rotatefoilhead" # Foils!!
+\bind "M-p s"                  "layout Standard"
+\bind "M-p t"                  "layout Title"
+\bind "M-p x"                  "layout LaTeX"
+\bind "M-p space"              "drop-layouts-choice"
+\bind "M-p S-at"               "layout Section*"       # M-p S-2
+\bind "M-p S-dollar"           "layout Subsubsection*" # M-p S-4
+\bind "M-p S-numbersign"       "layout Subsection*"    # M-p S-3
+\bind "M-p v"                  "layout Verse"
+
+\bind "M-p Left"               "depth-decrement"
+\bind "M-p Right"              "depth-increment"
+
+
+#
+# Character style menu
+# 
+
+\bind "M-c b"                  "font-bold"
+\bind "M-c c"                  "font-noun"
+\bind "M-c e"                  "font-emph"
+\bind "M-c m"                  "math-mode"
+\bind "M-c p"                  "font-code"
+\bind "M-c r"                  "font-roman"
+\bind "M-c s"                  "font-sans"
+\bind "M-c t"                  "tex-mode"
+\bind "M-c u"                  "font-underline"
+
+\bind "M-c Down"               "word-lowcase"
+\bind "M-c Up"                 "word-upcase"
+\bind "M-c Right"              "word-capitalize"
+
+\bind "M-c space"              "font-default"                  
+
+
+#
+# Keyboard menu
+#
+
+\bind "M-k 1"                  "keymap-primary"
+\bind "M-k 2"                  "keymap-secondary"
+\bind "M-k o"                  "keymap-off"
+\bind "M-k t"                  "keymap-toggle"
+\bind "M-k x"                  "keymap-off"
diff --git a/lib/bind/pt_menus.bind b/lib/bind/pt_menus.bind
new file mode 100644 (file)
index 0000000..ca76954
--- /dev/null
@@ -0,0 +1,311 @@
+# This file is part of
+# ==================================================================
+#
+#                  LyX, the High Level Word Processor
+# 
+#                 Copyright (C) 1995-1997 The LyX Team
+#
+# ==================================================================
+
+# Key bindings for menus, both invisible and visible.
+
+# Note que trocamos a tecla f10 para Control para abrir os menus
+# Pedro Kröger <kroger@e-net.com.br>
+# 03/22/1999
+# 0.3 version [não-revisada]
+
+# Abre os menus
+#
+
+\bind "C-a"                    "menu-open Arquivo"
+\bind "C-e"                    "menu-open Editar"
+\bind "C-f"                    "menu-open Formatação"
+\bind "C-i"                    "menu-open Inserir"
+\bind "C-m"                    "menu-open Matemático"
+\bind "C-o"                    "menu-open Opções"
+\bind "C-d"                    "menu-open Documentos"
+\bind "C-u"                    "menu-open Ajuda"
+
+
+#
+# Arquivo
+#
+
+\bind "M-a n"                  "buffer-new"
+\bind "M-a m"                  "buffer-new-template"
+\bind "M-a a"                  "buffer-open"
+\bind "M-a f"                  "buffer-close"
+\bind "M-a l"                  "buffer-write"
+\bind "M-a c"                  "buffer-write-as"
+\bind "M-a r"                  "buffer-reload"
+\bind "M-a d"                  "buffer-view"
+\bind "M-a o"                  "buffer-view-ps"
+\bind "M-a v"                  "buffer-typeset"
+\bind "M-a z"                  "buffer-typeset-ps"
+\bind "M-a p"                  "buffer-print" 
+\bind "M-a x"                  "buffer-fax"
+\bind "M-a i l"                 "buffer-import latex"
+\bind "M-a i a"                 "buffer-import ascii"
+\bind "M-a i p"                 "buffer-import asciiparagraph"
+\bind "M-a e l"                 "buffer-export latex"
+\bind "M-a e p"                 "buffer-export postscript"
+\bind "M-a e d"                 "buffer-export linuxdoc"
+\bind "M-a e t"                 "buffer-export ascii"
+\bind "M-a e m"                 "buffer-export custom"
+\bind "M-a s"                  "lyx-quit"
+\bind "M-a space"              "menu-open Arquivo" 
+#bind "M-a l"                  "file-last"             # Not yet implemented.
+
+#
+#  Editar
+#
+
+#bind "M-e t"                  "table"                 # Not yet implemented!
+\bind "M-e c"                  "cut"
+\bind "M-e e"                  "error-next"
+\bind "M-e s"                  "find-replace"
+\bind "M-e k"                  "line-delete-forward"
+\bind "M-e m"                  "mark-on"
+\bind "M-e S-M"                        "mark-off"
+\bind "M-e n"                  "note-next"
+\bind "M-e o"                  "copy"
+\bind "M-e p"                  "paste"
+\bind "M-e r"                  "redo"
+\bind "M-e g"                  "spellchecker"
+\bind "M-e t"                  "buffer-chktex"
+\bind "M-e i"                  "toc-view"
+\bind "M-e u"                  "undo"
+\bind "M-e x"                  "latex-view-log"
+\bind "M-e space"              "menu-open Edit" 
+
+#
+# Formatação
+#
+
+\bind "M-f c"                  "layout-character"
+\bind "M-f r"                  "layout-paragraph"
+\bind "M-f d"                  "layout-document"
+\bind "M-f p"                  "layout-paper"
+\bind "M-f t"                  "layout-table"
+\bind "M-f i"                  "layout-quotes" 
+\bind "M-f e"                  "font-emph" 
+\bind "M-f s"                  "font-noun" 
+\bind "M-f n"                  "font-bold" 
+\bind "M-f t"                  "tex-mode" 
+\bind "M-f v"                  "depth-next"
+\bind "M-f l"                  "layout-preamble"
+\bind "M-f a"                  "layout-save-default"
+\bind "M-f space"              "menu-open Layout"  
+\bind "M-f i"                  "buffer-itemize-bullets-select"
+
+
+#
+# Inserir
+#
+
+\bind "M-i g"                  "figure-insert"
+\bind "M-i b"                  "table-insert"
+\bind "M-i a"                  "buffer-child-insert"
+\bind "M-i i l"                        "file-insert-ascii line"         
+\bind "M-i i p"                        "file-insert-ascii paragraph"
+\bind "M-i x"                  "file-insert"
+\bind "M-i r"                  "footnote-insert"
+\bind "M-i m"                  "marginpar-insert"
+
+# PREVIOUS PATCH
+\bind "M-i f f"                        "buffer-float-insert figure" 
+\bind "M-i f t"                        "buffer-float-insert table"
+\bind "M-i f l"                        "buffer-float-insert wide-fig"
+\bind "M-i f b"                        "buffer-float-insert wide-tab"
+\bind "M-i f a"                        "buffer-float-insert algorithm"
+
+\bind "M-i t d"                        "toc-insert"
+\bind "M-i t f"                        "lof-insert"
+\bind "M-i t t"                        "lot-insert"
+\bind "M-i t i"                        "index-print"
+\bind "M-i t b"                        "bibtex-insert"
+\bind "M-i t a"                        "loa-insert"
+
+\bind "M-i minus"              "hyphenation-point-insert"
+\bind "M-i p"                  "dots-insert"
+#\bind "M-i e"                 "end-of-sentence-period-insert"
+\bind "M-i q"                  "quote-insert"
+\bind "M-i apostrophe"         "quote-insert"
+\bind "M-i S-quotedbl"         "quote-insert"
+\bind "M-i s h"                        "hfill-insert"
+# NOT IN MENU. (HIDDEN TO LEARNER)
+\bind "M-i s minus"            "hyphenation-point-insert"
+\bind "M-i s e"                        "protected-space-insert"
+\bind "M-i s l"                        "break-line"
+\bind "M-i s r"                        "dots-insert"
+\bind "M-i s f"                        "end-of-sentence-period-insert"
+\bind "M-i s a"                        "quote-insert"
+\bind "M-i n"                  "note-insert"
+\bind "M-i e"                  "label-insert"
+\bind "M-i c"                  "reference-insert"
+\bind "M-i t"                  "citation-insert"
+\bind "M-i d"                  "index-insert"
+\bind "M-i p"                  "index-insert-last"
+\bind "M-i space"              "menu-open Inserir"  
+
+
+#
+# Metemático
+#
+
+\bind "M-m space"              "menu-open Matemático" 
+
+#
+# Opções
+#
+
+#bind "M-o f"                  "screen-font-options"   # Not yet implemented!
+#bind "M-o o"                  "spellcheck-options"    # Not yet implemented!
+#bind "M-o t"                  "keyboard-options"      # Not yet implemented!
+#bind "M-o l"                  "latex-options"         # Not yet implemented!
+\bind "M-o space"              "menu-open Opções"  
+
+
+#
+# Documentos
+#
+# These are now defined in cua or emacs bind files so their "standard"
+# bindings are available. (eg M-d "word-delete-forward" in emacs) ARRae
+\bind "M-d a"                  "buffer-previous"
+\bind "M-d space"              "menu-open Documentos"
+
+
+#
+# Ajuda
+#
+
+#bind "M-h i"                  "help-introduction"     # Not yet implemented!
+#bind "M-h t"                  "help-tutorial"         # Not yet implemented!
+#bind "M-h u"                  "help-user-guide"       # Not yet implemented!
+#bind "M-h r"                  "help-reference-guide"  # Not yet implemented!
+#bind "M-h h"                  "help-how-do-i-"        # Not yet implemented!
+#bind "M-h c"                  "help-customization"    # Not yet implemented!
+#bind "M-h s"                  "help-special-tools"    # Not yet implemented!
+#bind "M-h k"                  "help-known-bugs"       # Not yet implemented!
+#bind "M-h a"                  "help-latex-config"     # Not yet implemented!
+#bind "M-h o"                  "help-copyright"        # Not yet implemented!
+#bind "M-h e"                  "help-credits"          # Not yet implemented!
+#bind "M-h v"                  "help-version"          # Not yet implemented!
+\bind "M-u space"              "menu-open Ajuda" 
+
+#
+# Tamanho de Fonte
+#
+
+\bind "M-s t"                  "font-size tiny"
+\bind "M-s S-S"                        "font-size smaller"
+\bind "M-s s"                  "font-size small"
+\bind "M-s n"                  "font-size normal"
+\bind "M-s l"                  "font-size large"
+\bind "M-s S-L"                        "font-size larger"
+\bind "M-s h"                  "font-size huge"
+\bind "M-s S-H"                        "font-size huger"
+
+\bind "M-s 1"                  "font-size tiny"
+\bind "M-s 2"                  "font-size smallest"
+\bind "M-s 3"                  "font-size smaller"
+\bind "M-s 4"                  "font-size small"
+\bind "M-s 5"                  "font-size normal"
+\bind "M-s 6"                  "font-size large"
+\bind "M-s 7"                  "font-size larger"
+\bind "M-s 8"                  "font-size largest"
+\bind "M-s 9"                  "font-size huge"
+\bind "M-s 0"                  "font-size huger"
+
+\bind "M-s plus"               "font-size increase"
+\bind "M-s minus"              "font-size decrease"
+
+
+#
+# Alinhamento
+#
+
+#bind "M-l l"                  "para-align left"       # Not yet implemented!
+#bind "M-l r"                  "para-align right"      # Not yet implemented!
+#bind "M-l c"                  "para-align center"     # Not yet implemented!
+#bind "M-l b"                  "para-align block"      # Not yet implemented!
+#bind "M-l f"                  "para-align block"      # Not yet implemented!
+#bind "M-l d"                  "para-align default"    # Not yet implemented!
+
+
+#
+# Parágrafo
+#
+
+\bind "M-p 1"                  "layout Chapter" 
+\bind "M-p 2"                  "layout Section" 
+\bind "M-p 3"                  "layout Subsection"  
+\bind "M-p 4"                  "layout Subsubsection"    
+\bind "M-p 5"                  "layout Paragraph"        
+\bind "M-p 6"                  "layout Subparagraph"
+\bind "M-p r"                  "layout Abstract"       # resumo
+\bind "M-p S-A"                        "layout Author"
+\bind "M-p e"                  "layout Address"        # endereço
+\bind "M-p S-E"                        "layout RightAddress"   # endereço à direita
+\bind "M-p m"                  "layout Itemize"        # lista com Marcadores
+\bind "M-p S-B"                        "layout Bibliography"   # Bibliografia
+\bind "M-p y"                  "layout LyX-Code"
+\bind "M-p S-C"                        "layout Comment"        # cometário
+\bind "M-p S-L"                        "layout Caption"        # Legenda
+\bind "M-p d"                  "layout Description"    # descrição
+\bind "M-p S-D"                        "layout Date"           # Data
+\bind "M-p n"                  "layout Enumerate"      # lista Numerada
+\bind "M-p f"                  "layout ShortFoilhead"  # Foils!!
+\bind "M-p S-F"                        "layout Foilhead"       # Foils!!
+\bind "M-p i"                  "layout Itemize"        # bulleted list
+\bind "M-p l"                  "layout List"
+# \bind "M-p S-X"                      "layout LaTeX"
+\bind "M-p n"                  "layout Enumerate"      # numbered list
+\bind "M-p S-C"                        "layout Quote"          # Citação
+\bind "M-p c"                  "layout Quotation"
+
+\bind "M-p r"                  "layout ShortRotatefoilhead"    # Foils!!
+\bind "M-p S-R"                        "layout Rotatefoilhead" # Foils!!
+
+\bind "M-p p"                  "layout Standard"       # Padrão
+\bind "M-p t"                  "layout Title"
+\bind "M-p x"                  "layout LaTeX"
+\bind "M-p space"              "drop-layouts-choice"
+\bind "M-p S-at"               "layout Section*"       # M-p S-2
+\bind "M-p S-numbersign"       "layout Subsection*"    # M-p S-3
+\bind "M-p S-dollar"           "layout Subsubsection*" # M-p S-4
+\bind "M-p v"                  "layout Verse"
+\bind "M-p Left"               "depth-decrement"
+\bind "M-p Right"              "depth-increment"
+
+
+#
+# Estilo do Caractere
+# 
+
+\bind "M-c n"                  "font-bold"     # Negrito
+\bind "M-c S-S"                        "font-noun"     # substantivo
+\bind "M-c e"                  "font-emph"     # 
+\bind "M-c m"                  "math-mode"     # modo matemático
+\bind "M-c p"                  "font-code"
+\bind "M-c r"                  "font-roman"
+\bind "M-c s"                  "font-sans"
+\bind "M-c t"                  "tex-mode"
+\bind "M-c s"                  "font-underline" # Sublinhado
+
+\bind "M-c Down"               "word-lowcase"
+\bind "M-c Up"                 "word-upcase"
+\bind "M-c Right"              "word-capitalize"
+
+\bind "M-c space"              "font-default"                  
+
+
+#
+# Teclado
+#
+
+\bind "M-t 1"                  "keymap-primary"
+\bind "M-t 2"                  "keymap-secondary"
+\bind "M-t 0"                  "keymap-off"
+\bind "M-t a"                  "keymap-toggle"
+\bind "M-t x"                  "keymap-off"
diff --git a/lib/bind/sciword.bind b/lib/bind/sciword.bind
new file mode 100644 (file)
index 0000000..8447379
--- /dev/null
@@ -0,0 +1,479 @@
+# This file is part of LyX
+
+# LyX keyboard definitions similar to those of Scientific Word.
+# Prepared by Serge Winitzki. Version 1.0
+
+# Tip: to find how LyX calls a pressed key, look at the status bar after
+# entering a non-existent key combination. E.g. want to find how "Ctrl-&" is
+# referenced, so press Ctrl-S Ctrl-&: the status bar shows "C-s S-C-ampersand."
+
+#\bind "C-a"                    "------"
+#\bind "C-b"                    "font-bold"
+
+# Copy, paste, etc.: more familiar keys
+\bind "C-c"    "copy"
+
+# Display equation toggle: type it in a displayed equation to convert it
+# back to an inline equation
+# Sciword mnemonic.
+\bind "C-d"    "math-display"
+
+#\bind "C-e"   "------"
+# Greek for only one character. "math-greek-toggle" is the persistent Greek
+# toggle which nobody really needs when typing math.
+# Sciword mnemonic.
+\bind "C-f"    "math-insert frac"
+\bind "C-g"    "math-greek"
+
+# Do I need this?
+#\bind "C-h"   "hyphenation-point-insert"
+
+# Sciword mnemonic.
+\bind "C-i"    "math-insert int"
+
+#\bind "C-j"   "------"
+
+\bind "C-k"    "line-delete-forward"
+\bind "C-l"    "screen-recenter"
+
+# Toggle: in text mode, switch to math, and vice versa. Also C-t.
+\bind "C-m"    "math-mode"
+#\bind "C-n"   "------"
+\bind "C-o"    "open-stuff"
+\bind "C-p"    "font-code"
+# Insert a quote character. Do I need this?
+\bind "C-q"    "quote-insert"
+
+# Sciword mnemonic.
+\bind "C-r"    "math-insert sqrt"
+
+# This combination is now a gateway to math symbols (C-s ...)
+#\bind "C-s"   "font-smallcaps"
+\bind "C-t"    "math-mode"
+\bind "C-u"    "font-underline"
+\bind "C-v"    "paste"
+\bind "C-w"    "buffer-close"
+\bind "C-x"    "cut"
+\bind "C-z"    "undo"
+\bind "S-C-z"  "redo"
+
+
+# This combination makes an umlaut accept now.
+#\bind "S-C-quotedbl"           "quote-insert"
+
+# Bracket delimiters. Sciword mnemonic is to press Control-<bracket key>
+
+\bind "C-9"    "math-delim ( )"
+\bind "S-C-parenleft"  "math-delim ( )"
+\bind "C-0"    "math-delim ( )"
+\bind "S-C-parenright" "math-delim ( )"
+
+\bind "C-S-bracketleft"                "math-delim [ ]"
+\bind "C-S-bracketright"       "math-delim [ ]"
+\bind "C-S-less"               "math-delim langle rangle"
+\bind "C-S-greater"            "math-delim langle rangle"
+
+# The bar bracket: on some keyboards, e.g. British, the bar character is
+# misplaced to an Alt-something
+\bind "C-S-bar"                "math-delim | |"
+\bind "C-S-brokenbar"  "math-delim | |"
+\bind "C-M-bar"                "math-delim | |"
+
+\bind "S-C-braceleft"          "math-delim { }"
+\bind "S-C-braceright"         "math-delim { }"
+
+# Accents. Sciword mnemonic. Mostly need to press Ctrl-<accent key>
+# e.g. Ctrl-. for overdot, Ctrl-' for acute accent, Ctrl-~ for tilda etc.
+# Some of them seem to work only in math mode?
+
+# S-C-period?
+\bind "C-period"       "accent-dot"
+\bind "C-quoteleft"    "accent-grave"
+\bind "S-C-asciitilde" "accent-tilde"
+\bind "S-C-quotedbl"   "accent-umlaut"
+\bind "C-apostrophe"   "accent-acute"
+\bind "S-C-asciicircum" "accent-circumflex"
+\bind "C-equal"        "accent-vector"
+# Why is it not "accent-bar"?
+\bind "C-minus"        "math-insert bar"
+# What is "accent-underbar"?
+#\bind "S-C-underscore"        "accent-underbar"
+
+# Numbering equations. Should perhaps simplify math-number and math-nonumber into one command. This and also math-macro stuff should be available in the menus!
+# Sciword mnemonic, kind of (was just "TAB").
+
+\bind "C-Tab"  "math-number"
+\bind "C-S-Tab"        "math-nonumber"
+
+# Function keys.
+
+#\bind "F1"    "help"  # Not yet implemented!
+#\bind "C-F1"                   "help-context"                  # Not yet implemented!
+\bind "F2"                     "buffer-write"
+\bind "F3"                     "find-replace"
+
+\bind "C-F4"                   "buffer-close"
+\bind "M-F4"                   "lyx-quit"
+# F4 to F8 are used to switch fonts. Sciword mnemonic.
+\bind "F4"                     "font-default"
+\bind "F5"                     "font-bold"
+\bind "F6"                     "font-emph"
+\bind "F7"                     "font-code"
+\bind "F8"                     "font-noun"
+# F9 bound below as meta-prefix (e.g. if the keyboard doesn't have ALT).
+#\bind "F9"                     "------"
+#\bind "F10"                    "------"
+
+#
+# Math menu (unmodified)
+#
+
+\bind "M-m f"                  "math-insert frac"
+\bind "M-m i"                  "math-insert int"
+\bind "M-m o"                  "math-insert oint"
+\bind "M-m p"                  "math-insert partial"
+\bind "M-m s"                  "math-insert sqrt"
+\bind "M-m S-S"                "math-insert sum"
+\bind "M-m l"                  "math-limits"
+\bind "M-m n"                  "math-number"
+\bind "M-m v"                  "accent-vector"
+\bind "M-m space"              "menu-open Math"
+
+# Sciword mnemonics for math editing:
+
+\bind "M-apostrophe"   "math-insert prime"
+\bind "C-Up"           "math-insert ^"
+\bind "C-Down"         "math-insert _"
+\bind "C-s d"          "math-insert partial"
+\bind "C-s e"          "math-insert sum"
+\bind "C-s p"          "math-insert prod"
+\bind "C-s i"          "math-insert infty"
+
+# My own embellishments for symbols I use often.
+
+#I'd like to combine math-insert ^ and math-insert prime, but don't know how.
+
+\bind "C-s apostrophe" "math-insert prime"
+\bind "C-s S-plus"     "math-insert dagger"
+\bind "C-s equal"      "math-insert equiv"
+\bind "M-equal"                "math-insert approx"
+\bind "M-minus"                "math-insert sim"
+\bind "M-less"         "math-insert leq"
+\bind "M-greater"      "math-insert geq"
+\bind "C-s S-less"     "math-insert ll"
+\bind "C-s S-greater"  "math-insert gg"
+
+       ############################
+######### Almost no changes below. #########
+       ############################
+
+#
+# Motion group
+#
+
+\bind "Right"                  "char-forward"
+\bind "Left"                   "char-backward"
+\bind "Up"                     "up"
+\bind "Down"                   "down"
+\bind "C-Right"                "word-forward"
+\bind "C-Left"                 "word-backward"
+# These are now used to insert superscripts and subscripts.
+#\bind "C-Up"                   "paragraph-up"
+#\bind "C-Down"                 "paragraph-down"
+\bind "Home"                   "line-begin"
+\bind "End"                    "line-end"
+\bind "Prior"                  "screen-up"
+\bind "Next"                   "screen-down"
+\bind "C-Home"                 "buffer-begin"
+\bind "C-End"                  "buffer-end"
+\bind "Tab"                    "tab-forward"
+
+#
+# Motion + select group
+#
+
+\bind "S-Right"                "forward-select"
+\bind "S-Left"                 "backward-select"
+\bind "S-Up"                   "up-select"
+\bind "S-Down"                 "down-select"
+\bind "S-C-Right"              "word-forward-select"
+\bind "S-C-Left"               "word-backward-select"
+\bind "S-C-Up"                 "paragraph-up-select"
+\bind "S-C-Down"               "paragraph-down-select"
+\bind "S-Home"                 "line-begin-select"
+\bind "S-End"                  "line-end-select"
+\bind "S-Prior"                "screen-up-select"
+\bind "S-Next"                 "screen-down-select"
+\bind "S-C-Home"               "buffer-begin-select"
+\bind "S-C-End"                "buffer-end-select"
+\bind "C-Insert"               "copy"
+\bind "S-Insert"               "paste"
+\bind "S-Delete"               "cut"
+
+#
+# Edit group
+#
+
+\bind "Delete"                 "delete-forward"
+\bind "BackSpace"              "delete-backward"
+\bind "C-Delete"               "word-delete-forward"
+\bind "C-BackSpace"            "word-delete-backward"
+\bind "Return"                 "break-paragraph"
+\bind "M-Return"               "break-paragraph-keep-layout"
+\bind "C-Return"               "break-line"
+\bind "C-space"                "protected-space-insert"
+\bind "Escape"                 "cancel"
+\bind "F9"                     "meta-prefix"
+
+#
+# Visible Menu access menu
+#
+
+\bind "F10 d"                  "menu-open Documents"
+\bind "F10 e"                  "menu-open Edit"
+\bind "F10 f"                  "menu-open File"
+\bind "F10 h"                  "menu-open Help"
+\bind "F10 i"                  "menu-open Insert"
+\bind "F10 l"                  "menu-open Layout"
+\bind "F10 m"                  "menu-open Math"
+\bind "F10 o"                  "menu-open Options"
+
+
+
+#
+# File menu
+#
+
+\bind "M-f a"                  "buffer-write-as"
+\bind "M-f c"                  "buffer-close"
+\bind "M-f n"                  "buffer-new"
+#\bind "M-f l"                  "file-last"                      # Not yet implemented.
+\bind "M-f o"                  "buffer-open"
+\bind "M-f p"                  "buffer-print"
+\bind "M-f q"                  "lyx-quit"
+\bind "M-f r"                  "buffer-typeset"
+        # Obsolete
+\bind "M-f s"                  "buffer-write"
+\bind "M-f t"                  "buffer-typeset"
+
+\bind "M-f x"                  "buffer-view"
+\bind "M-f g"                  "buffer-view-ps"
+\bind "M-f space"              "menu-open File"
+
+
+#
+# Edit menu
+#
+
+#\bind "M-e b"                  "table"                         # Not yet implemented!
+\bind "M-e c"                  "cut"
+\bind "M-e e"                  "error-next"
+\bind "M-e f"                  "find-replace"
+\bind "M-e k"                  "line-delete-forward"
+\bind "M-e m"                  "mark-on"
+\bind "M-e S-M"                "mark-off"
+\bind "M-e n"                  "note-next"
+\bind "M-e o"                  "copy"
+\bind "M-e p"                  "paste"
+\bind "M-e r"                  "redo"
+\bind "M-e s"                  "spellchecker"
+#\bind "M-e t"                  "toc-update"
+\bind "M-e u"                  "undo"
+\bind "M-e space"              "menu-open Edit"
+
+
+#
+# Layout menu
+#
+
+\bind "M-l c"                  "layout-character"
+\bind "M-l p"                  "layout-paragraph"
+\bind "M-l d"                  "layout-document"
+\bind "M-l q"                  "layout-quotes"
+\bind "M-l l"                  "layout-preamble"
+\bind "M-l e"                  "font-emph"
+#\bind "M-l n"                  "font-smallcaps"
+\bind "M-l b"                  "font-bold"
+\bind "M-l t"                  "tex-mode"
+\bind "M-l v"                  "depth-next"
+\bind "M-l space"              "menu-open Layout"
+
+
+
+#
+# Insert menu
+#
+
+\bind "M-i f"                  "footnote-insert"
+\bind "M-i h"                  "hfill-insert"
+\bind "M-i m"                  "marginpar-insert"
+\bind "M-i n"                  "note-insert"
+\bind "M-i l"                  "label-insert"
+\bind "M-i r"                  "reference-insert"
+\bind "M-i minus"              "hyphenation-point-insert"
+\bind "M-i apostrophe"         "quote-insert"
+\bind "M-i S-quotedbl"         "quote-insert"
+\bind "M-i space"              "menu-open Insert"
+
+
+
+#
+# Options menu
+#
+
+#\bind "M-o f"                  "screen-font-options"           # Not yet implemented!
+#\bind "M-o s"                  "spellcheck-options"            # Not yet implemented!
+#\bind "M-o k"                  "keyboard-options"              # Not yet implemented!
+#\bind "M-o l"                  "latex-options"                 # Not yet implemented!
+\bind "M-o space"              "menu-open Options"
+
+
+
+#
+# Documents menu
+#
+
+\bind "M-d p"                  "buffer-previous"
+\bind "M-d space"              "menu-open Documents"
+
+
+
+#
+# Help menu
+#
+
+#\bind "M-h d"                  "help-documentation"            # Not yet implemented!
+#\bind "M-h o"                  "help-copyright"                # Not yet implemented!
+#\bind "M-h w"                  "help-warranty"                 # Not yet implemented!
+#\bind "M-h c"                  "help-credits"                  # Not yet implemented!
+#\bind "M-h v"                  "help-version"                  # Not yet implemented!
+\bind "M-h space"              "menu-open Help"
+
+
+
+#
+# Font size menu
+#
+
+\bind "M-s S-A"                "font-size largest"             # \LARGE
+\bind "M-s g"                  "font-size giant"               # \Huge
+\bind "M-s h"                  "font-size huge"                # \huge
+\bind "M-s S-H"                "font-size giant"               # \Huge
+\bind "M-s l"                  "font-size large"               # \large
+\bind "M-s S-L"                "font-size larger"              # \Large
+\bind "M-s n"                  "font-size normal"              # \normalsize
+\bind "M-s s"                  "font-size small"               # \small
+\bind "M-s t"                  "font-size tiny"                # \tiny
+
+\bind "M-s 1"                  "font-size tiny"
+\bind "M-s 2"                  "font-size small"
+\bind "M-s 3"                  "font-size normal"
+\bind "M-s 4"                  "font-size large"
+\bind "M-s 5"                  "font-size larger"
+\bind "M-s 6"                  "font-size largest"
+\bind "M-s 7"                  "font-size huge"
+\bind "M-s 8"                  "font-size giant"
+
+
+
+#
+# Alignment menu
+#
+
+#\bind "M-a l"                  "para-align left"               # Not yet implemented!
+#\bind "M-a r"                  "para-align right"              # Not yet implemented!
+#\bind "M-a c"                  "para-align center"             # Not yet implemented!
+#\bind "M-a b"                  "para-align block"              # Not yet implemented!
+#\bind "M-a f"                  "para-align block"              # Not yet implemented!
+#\bind "M-a d"                  "para-align default"            # Not yet implemented!
+
+
+
+#
+# Paragraph style menu
+#
+
+\bind "M-p c"                  "drop-layouts-choice"
+\bind "M-p 1"                  "layout Chapter"
+\bind "M-p 2"                  "layout Section"
+\bind "M-p 3"                  "layout Subsection"
+\bind "M-p 4"                  "layout Subsubsection"
+\bind "M-p 5"                  "layout Paragraph"
+\bind "M-p 6"                  "layout Subparagraph"
+\bind "M-p b"                  "layout Itemize"                        # bulleted list
+\bind "M-p d"                  "layout Description"
+\bind "M-p e"                  "layout Enumerate"                      # numbered list
+\bind "M-p i"                  "layout Itemize"                        # bulleted list
+\bind "M-p l"                  "layout List"
+\bind "M-p n"                  "layout Enumerate"                      # numbered list
+\bind "M-p p"                  "layout Lyx-Code"
+\bind "M-p q"                  "layout Quote"
+\bind "M-p S-Q"                "layout Quotation"
+\bind "M-p s"                  "layout Standard"
+\bind "M-p t"                  "layout Title"
+\bind "M-p S-at"               "layout Section*"                       # M-p S-2
+\bind "M-p S-dollar"           "layout Subsubsection*"                 # M-p S-4
+\bind "M-p S-numbersign"       "layout Subsection*"                    # M-p S-3
+
+\bind "M-p Left"               "depth-decrement"
+\bind "M-p Right"              "depth-increment"
+
+
+
+#
+# Character style menu
+#
+
+\bind "M-c b"                  "font-bold"
+#\bind "M-c c"                  "font-smallcaps"
+\bind "M-c e"                  "font-emph"
+\bind "M-c i"                  "font-emph"                                             # italics
+\bind "M-c m"                  "math-mode"
+\bind "M-c p"                  "font-code"
+\bind "M-c r"                  "font-roman"
+\bind "M-c s"                  "font-sans"
+\bind "M-c t"                  "tex-mode"
+\bind "M-c u"                  "font-underline"
+
+\bind "M-c Down"               "word-lowcase"
+\bind "M-c Up"                 "word-upcase"
+\bind "M-c Right"              "word-capitalize"
+
+\bind "M-c space"              "font-default"
+
+
+
+#
+# Keyboard menu
+#
+
+\bind "M-k 1"                  "keymap-primary"
+\bind "M-k 2"                  "keymap-secondary"
+\bind "M-k o"                  "keymap-off"
+\bind "M-k t"                  "keymap-toggle"
+\bind "M-k x"                  "keymap-off"
+
+
+
+#
+# Misc menu
+#
+
+\bind "M-x c"                  "screen-recenter"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/bind/sv_menus.bind b/lib/bind/sv_menus.bind
new file mode 100644 (file)
index 0000000..ecfd94f
--- /dev/null
@@ -0,0 +1,305 @@
+# This file is part of
+# ==================================================================
+#
+#                  LyX, the High Level Word Processor
+# 
+#                 Copyright (C) 1995-1998 The LyX Team
+#
+# ==================================================================
+
+# Key bindings for menus, both invisible and visible.
+
+#
+# Visible Menu access menu
+#################################
+# Menu key bindings for Swedish locale.
+# 
+# Denna är avsedd för användning tillsammans med svensk lokalisering av LyX.
+# Placeras i LYXDIR/bind, eller ~/.lyx/bind under namnet sv_menus.bind och
+# laddas automatiskt av LyX i stället för menus.bind då LANG=sv
+# Dessa bindningar kan krocka med andra bindningar; betrakta detta som ett
+# prov. Observera att namnen på menyerna måste stämma med de översatta
+# (File/Fil, Edit/Redigera osv.), för "menu-open"
+# Wed Dec  9 17:15:45 GMT+0100 1998, Joacim Persson <sp2joap1@ida.his.se>
+# 
+#
+
+\bind "F10 f"                  "menu-open Fil"
+\bind "F10 r"                  "menu-open Redigera"
+\bind "F10 s"                  "menu-open Stil"
+\bind "F10 l"                  "menu-open Lägg in"
+\bind "F10 m"                  "menu-open Matematik"
+\bind "F10 i"                  "menu-open Inställningar"
+\bind "F10 d"                  "menu-open Dokument"
+\bind "F10 h"                  "menu-open Hjälp"
+
+#
+# Fil
+#
+
+\bind "M-f n"                  "buffer-new"
+\bind "M-f m"                  "buffer-new-template"
+\bind "M-f p"                  "buffer-open"
+\bind "M-f g"                  "buffer-close"
+\bind "M-f s"                  "buffer-write"
+\bind "M-f o"                  "buffer-write-as"
+\bind "M-f t"                  "buffer-reload"
+\bind "M-f v"                  "buffer-view"
+\bind "M-f i"                  "buffer-view-ps"
+\bind "M-f u"                  "buffer-typeset"
+\bind "M-f d"                  "buffer-typeset-ps"
+\bind "M-f k"                  "buffer-print" 
+\bind "M-f f"                  "buffer-fax"
+\bind "M-f l"                  "buffer-export latex"
+\bind "M-f x"                  "buffer-export linuxdoc"
+\bind "M-f S-T"                "buffer-export ascii"
+\bind "M-f S-A"                "buffer-export custom"
+\bind "M-f a"                  "lyx-quit"
+\bind "M-f space"              "menu-open Fil" 
+#bind "M-f l"                  "file-last"             # Not yet implemented.
+
+
+#
+# Edit menu
+#
+
+\bind "M-r a"                  "table"
+\bind "M-r k"                  "cut"
+\bind "M-r f"                  "error-next"
+\bind "M-r s"                  "find-replace"
+\bind "M-r k"                  "line-delete-forward"
+\bind "M-r m"                  "mark-on"
+\bind "M-r S-M"                "mark-off"
+\bind "M-r t"                  "note-next"
+\bind "M-r o"                  "copy"
+\bind "M-r i"                  "paste"
+\bind "M-r g"                  "redo"
+\bind "M-r r"                  "spellchecker"
+\bind "M-r e"                  "buffer-chktex"
+\bind "M-r h"                  "toc-view"
+\bind "M-r n"                  "undo"
+\bind "M-r x"                  "latex-view-log"
+\bind "M-r space"              "menu-open Redigera" 
+
+
+#
+# Layout menu
+#
+
+\bind "M-s c"                  "layout-character"
+\bind "M-s p"                  "layout-paragraph"
+\bind "M-s d"                  "layout-document"
+\bind "M-s a"                  "layout-paper"
+\bind "M-s q"                  "layout-quotes" 
+\bind "M-s l"                  "layout-preamble" 
+\bind "M-s e"                  "font-emph" 
+\bind "M-s n"                  "font-noun" 
+\bind "M-s b"                  "font-bold" 
+\bind "M-s t"                  "tex-mode" 
+\bind "M-s v"                  "depth-next"
+\bind "M-s space"              "menu-open Stil"  
+\bind "M-s i"                  "buffer-itemize-bullets-select"
+
+
+#
+# Insert menu
+#
+
+\bind "M-i g"                  "figure-insert"
+\bind "M-i b"                  "table-insert"
+\bind "M-i c"                  "buffer-child-insert"
+\bind "M-i f"                  "footnote-insert"
+\bind "M-i m"                  "marginpar-insert"
+
+\bind "M-i minus"              "hyphenation-point-insert"
+\bind "M-i p"                  "dots-insert"
+\bind "M-i e"                  "end-of-sentence-period-insert"
+\bind "M-i q"                  "quote-insert"
+\bind "M-i apostrophe"         "quote-insert"
+\bind "M-i S-quotedbl"         "quote-insert"
+\bind "M-i s h"                        "hfill-insert"
+\bind "M-i s minus"            "hyphenation-point-insert"
+\bind "M-i s b"                        "protected-space-insert"
+\bind "M-i s l"                        "break-line"
+\bind "M-i s p"                        "dots-insert"
+\bind "M-i s e"                        "end-of-sentence-period-insert"
+\bind "M-i s q"                        "quote-insert"
+
+\bind "M-i a"                  "loa-insert"
+\bind "M-i t c"                        "toc-insert"
+\bind "M-i t f"                        "lof-insert"
+\bind "M-i t t"                        "lot-insert"
+\bind "M-i t i"                        "index-print"
+\bind "M-i t b"                        "bibtex-insert"
+\bind "M-i t a"                        "loa-insert"
+
+\bind "M-i n"                  "note-insert"
+\bind "M-i l"                  "label-insert"
+\bind "M-i r"                  "reference-insert"
+\bind "M-i i"                  "citation-insert"
+\bind "M-i d"                  "index-insert"
+
+\bind "M-l space"              "menu-open Lägg in"  
+
+
+
+#
+# Math menu
+#
+
+\bind "M-m space"              "menu-open Matematik" 
+
+#
+# Options menu
+#
+
+#bind "M-o s"                  "screen-font-options"   # Not yet implemented!
+#bind "M-o r"                  "spellcheck-options"    # Not yet implemented!
+#bind "M-o t"                  "keyboard-options"      # Not yet implemented!
+#bind "M-o l"                  "latex-options"         # Not yet implemented!
+\bind "M-i space"              "menu-open Inställningar"  
+
+
+#
+# Documents menu
+#
+# These are now defined in cua or emacs bind files so their "standard"
+# bindings are available. (eg M-d "word-delete-forward" in emacs) ARRae
+#\bind "M-d p"                 "buffer-previous"
+#\bind "M-d space"             "menu-open Dokument"
+
+
+#
+# Help menu
+#
+
+#bind "M-h i"                  "help-introduction"     # Not yet implemented!
+#bind "M-h t"                  "help-tutorial"         # Not yet implemented!
+#bind "M-h u"                  "help-user-guide"       # Not yet implemented!
+#bind "M-h r"                  "help-reference-guide"  # Not yet implemented!
+#bind "M-h h"                  "help-how-do-i-"        # Not yet implemented!
+#bind "M-h c"                  "help-customization"    # Not yet implemented!
+#bind "M-h s"                  "help-special-tools"    # Not yet implemented!
+#bind "M-h k"                  "help-known-bugs"       # Not yet implemented!
+#bind "M-h a"                  "help-latex-config"     # Not yet implemented!
+#bind "M-h o"                  "help-copyright"        # Not yet implemented!
+#bind "M-h e"                  "help-credits"          # Not yet implemented!
+#bind "M-h v"                  "help-version"          # Not yet implemented!
+\bind "M-h space"              "menu-open Hjälp" 
+
+
+#
+# Font size menu
+#
+
+\bind "M-s t"                  "font-size pytteliten"
+\bind "M-s S-S"                        "font-size mindre"
+\bind "M-s s"                  "font-size liten"
+\bind "M-s n"                  "font-size normal"
+\bind "M-s l"                  "font-size stor"
+\bind "M-s S-L"                        "font-size större"
+\bind "M-s h"                  "font-size störst"
+\bind "M-s S-H"                        "font-size störstare"
+
+\bind "M-s 1"                  "font-size pytteliten"
+\bind "M-s 2"                  "font-size minst"
+\bind "M-s 3"                  "font-size mindre"
+\bind "M-s 4"                  "font-size liten"
+\bind "M-s 5"                  "font-size normal"
+\bind "M-s 6"                  "font-size stor"
+\bind "M-s 7"                  "font-size större"
+\bind "M-s 8"                  "font-size störst"
+\bind "M-s 9"                  "font-size störstare"
+\bind "M-s 0"                  "font-size störstast"
+
+\bind "M-s plus"               "font-size öka"
+\bind "M-s minus"              "font-size minska"
+
+
+#
+# Alignment menu
+#
+
+#bind "M-a l"                  "para-align left"       # Not yet implemented!
+#bind "M-a r"                  "para-align right"      # Not yet implemented!
+#bind "M-a c"                  "para-align center"     # Not yet implemented!
+#bind "M-a b"                  "para-align block"      # Not yet implemented!
+#bind "M-a f"                  "para-align block"      # Not yet implemented!
+#bind "M-a d"                  "para-align default"    # Not yet implemented!
+
+
+#
+# Paragraph style menu
+#
+
+\bind "M-p 1"                  "layout Chapter" 
+\bind "M-p 2"                  "layout Section" 
+\bind "M-p 3"                  "layout Subsection"  
+\bind "M-p 4"                  "layout Subsubsection"    
+\bind "M-p 5"                  "layout Paragraph"        
+\bind "M-p 6"                  "layout Subparagraph"
+\bind "M-p a"                  "layout Abstract"
+\bind "M-p S-A"                        "layout Author"
+\bind "M-p M-a"                        "layout Address"
+\bind "M-p C-a"                        "layout RightAddress"
+\bind "M-p b"                  "layout Itemize"        # bulleted list
+\bind "M-p S-B"                        "layout Bibliography"
+\bind "M-p c"                  "layout LyX-Code"
+\bind "M-p S-C"                        "layout Comment"
+\bind "M-p M-c"                        "layout Caption"
+\bind "M-p d"                  "layout Description"
+\bind "M-p S-D"                        "layout Date"
+\bind "M-p e"                  "layout Enumerate"      # numbered list
+\bind "M-p f"                  "layout ShortFoilhead"  # Foils!!
+\bind "M-p S-F"                        "layout Foilhead"       # Foils!!
+\bind "M-p i"                  "layout Itemize"        # bulleted list
+\bind "M-p l"                  "layout List"
+\bind "M-p S-L"                        "layout LaTeX"
+\bind "M-p n"                  "layout Enumerate"      # numbered list
+\bind "M-p q"                  "layout Quote"
+\bind "M-p S-Q"                        "layout Quotation"
+\bind "M-p r"                  "layout ShortRotatefoilhead"    # Foils!!
+\bind "M-p S-R"                        "layout Rotatefoilhead" # Foils!!
+\bind "M-p s"                  "layout Standard"
+\bind "M-p t"                  "layout Title"
+\bind "M-p x"                  "layout LaTeX"
+\bind "M-p space"              "drop-layouts-choice"
+\bind "M-p S-at"               "layout Section*"       # M-p S-2
+\bind "M-p S-dollar"           "layout Subsubsection*" # M-p S-4
+\bind "M-p S-numbersign"       "layout Subsection*"    # M-p S-3
+\bind "M-p v"                  "layout Verse"
+
+\bind "M-p Left"               "depth-decrement"
+\bind "M-p Right"              "depth-increment"
+
+
+#
+# Character style menu
+# 
+
+\bind "M-c b"                  "font-bold"
+\bind "M-c c"                  "font-noun"
+\bind "M-c e"                  "font-emph"
+\bind "M-c m"                  "math-mode"
+\bind "M-c p"                  "font-code"
+\bind "M-c r"                  "font-roman"
+\bind "M-c s"                  "font-sans"
+\bind "M-c t"                  "tex-mode"
+\bind "M-c u"                  "font-underline"
+
+\bind "M-c Down"               "word-lowcase"
+\bind "M-c Up"                 "word-upcase"
+\bind "M-c Right"              "word-capitalize"
+
+\bind "M-c space"              "font-default"                  
+
+
+#
+# Keyboard menu
+#
+
+\bind "M-k 1"                  "keymap-primary"
+\bind "M-k 2"                  "keymap-secondary"
+\bind "M-k o"                  "keymap-off"
+\bind "M-k t"                  "keymap-toggle"
+\bind "M-k x"                  "keymap-off"
diff --git a/lib/bind/xemacs.bind b/lib/bind/xemacs.bind
new file mode 100644 (file)
index 0000000..c8b48c1
--- /dev/null
@@ -0,0 +1,299 @@
+# This file is part of
+# ==================================================================
+#
+#                   LyX, the High Level Word Processor
+# 
+#                  Copyright (C) 1995-1997 The LyX Team
+#
+#               THIS FILE DEFINES THE XEMACS LYX BINDINGS
+#
+# ==================================================================
+
+#
+# This is the XEMACS flavour bind file, based on the bindings found 
+# in the XEmacs editor. It has many bindings identical to the
+# Emacs binding file although there are a few significant changes.
+#
+#
+# DO NOT CHANGE THIS DEFAULT BINDING FILE! It will be replaced
+# with every new install of LyX and your changes will be lost. 
+# Instead, customize a copy of this file placed in 
+# ~/.lyx/bind/xemacs.bind
+#
+# Happy tuning!
+
+\bind "C-~S-at"                        "mark-on"
+\bind "C-a"                    "line-begin"
+\bind "C-b"                    "char-backward"
+#bind "C-c"                    "------" # see end of file
+\bind "C-d"                    "delete-forward"
+\bind "C-e"                    "line-end"
+\bind "C-f"                    "char-forward"
+\bind "C-g"                    "cancel"
+
+# help in emacs
+\bind "C-h"                    "hyphenation-point-insert" 
+\bind "C-i"                    "hfill-insert"
+#bind "C-j"                    "------"
+\bind "C-k"                    "line-delete-forward"
+\bind "C-l"                    "screen-recenter"
+\bind "C-m"                    "mark-toggle"
+\bind "C-n"                    "down"
+\bind "C-o"                    "open-stuff"
+\bind "C-p"                    "up"
+
+# this is "quoted-insert" a total different meaning from "quote-insert"
+\bind "C-q"                    "quote-insert"
+#bind "C-r"                    "------"
+\bind "C-s"                    "find-replace"
+\bind "M-~S-percent"           "find-replace"
+
+# should be "chars-transpose" (swaps two chars)
+#bind "C-t"                    "------"
+
+# universal argument in emacs
+\bind "C-u"                    "font-underline"
+
+# better name would be "scroll-up" as in emacs
+\bind "C-v"                    "screen-down"
+\bind "M-v"                    "screen-up"
+
+\bind "C-w"                    "cut"
+#bind "C-x"                    "------"
+\bind "C-y"                    "paste"
+\bind "C-S-Y"                  "layout-paste"
+
+#should be "lyx-iconify"
+#bind "C-z"                    "------"   # see end of file
+
+\bind "C-~S-slash"             "undo"
+\bind "C-~S-underscore"        "undo"
+
+\bind "S-C-quotedbl"           "quote-insert"
+
+\bind "C-x a"                  "buffer-auto-save"
+\bind "C-x b"                  "buffer-previous"
+\bind "C-x c"                  "lyx-quit"
+\bind "C-x d"                  "buffer-new"
+\bind "C-x g"                  "buffer-view-ps"
+\bind "C-x k"                  "buffer-close"
+\bind "C-x p"                  "buffer-view"
+\bind "C-x r"                  "buffer-typeset"
+# Should have been "buffer-write-some"
+# \bind "C-x s"                  "buffer-write"
+\bind "C-x t"                  "buffer-typeset"
+\bind "C-x u"                  "undo"
+\bind "C-x v h"                "vc-history"
+\bind "C-x v v"                "vc-check-in"
+\bind "C-x v u"                "vc-revert"
+\bind "C-x v c"                "vc-undo-last"
+\bind "C-x v i"                "vc-register"
+#\bind "C-x w"                  "buffer-write-as"
+\bind "C-x bracketleft"        "screen-up"
+\bind "C-x bracketright"       "screen-down"
+\bind "C-x quoteleft"          "error-next"
+\bind "C-x C-a"                "buffer-auto-save"
+\bind "C-x C-b"                "menu-open Documents"   # list all buffers
+\bind "C-x C-c"                "lyx-quit"
+\bind "C-x C-d"                "buffer-new"
+\bind "C-x C-f"                "buffer-open"
+\bind "C-x C-g"                "buffer-view-ps"
+\bind "C-x C-l"                        "word-lowcase"          # downcase-region!
+\bind "C-x C-p"                "buffer-view"
+\bind "C-x C-q"                "buffer-toggle-read-only"
+#\bind "C-x C-r"                "buffer-typeset"
+\bind "C-x C-s"                "buffer-write"
+\bind "C-x C-t"                "buffer-typeset"
+\bind "C-x C-u"                        "word-upcase"           # upcase-region!
+\bind "C-x C-w"                "buffer-write-as"
+
+#bind "C-1"                    "------"
+#bind "C-2"                    "------"
+#bind "C-3"                    "------"
+#bind "C-4"                    "------"
+#bind "C-5"                    "------"
+#bind "C-6"                    "------"
+#bind "C-7"                    "------"
+#bind "C-8"                    "------"
+#bind "C-9"                    "------"
+#bind "C-0"                    "------"
+
+#bind "F1"                     "help"                          # Not yet implemented!
+#bind "C-F1"                   "help-context"                  # Not yet implemented!
+#\bind "F2"                     "buffer-write"
+#\bind "F3"                     "buffer-open"
+#bind "F4"                     "------"
+#bind "F5"                     "------"
+#bind "F6"                     "------"
+#bind "F7"                     "------"
+#bind "F8"                     "------"
+#bind "F9"                     "------"
+#bind "F10"                    "------"
+
+\bind "M-x"                    "command-execute"
+
+
+#
+# Motion group
+#
+
+\bind "C-Right"                "word-forward"
+\bind "C-Left"                 "word-backward"
+\bind "C-Up"                   "paragraph-up"
+\bind "C-Down"                 "paragraph-down"
+\bind "M-bracketleft"          "paragraph-up"
+\bind "M-bracketright"         "paragraph-down"
+\bind "Home"                   "line-begin"
+\bind "End"                    "line-end"
+\bind "C-Home"                 "buffer-begin"
+\bind "C-End"                  "buffer-end"
+\bind "M-~S-less"              "buffer-begin"
+\bind "M-~S-greater"           "buffer-end"
+
+\bind "Prior"                  "screen-up"
+\bind "Next"                   "screen-down"
+
+# A bit like autoindent in c-mode
+\bind "Tab"                     "depth-next"
+
+\bind "C-~S-greater"           "reference-goto"
+\bind "C-~S-less"              "reference-back"
+
+#
+# Motion + select group
+#
+
+\bind "S-Right"                "forward-select"
+\bind "S-Left"                 "backward-select"
+\bind "S-C-F"                  "forward-select"
+\bind "S-C-B"                  "backward-select"
+\bind "S-Up"                   "up-select"
+\bind "S-Down"                 "down-select"
+\bind "S-C-Right"              "word-forward-select"
+\bind "S-C-Left"               "word-backward-select"
+\bind "S-C-Up"                 "paragraph-up-select"
+\bind "S-C-Down"               "paragraph-down-select"
+\bind "S-Home"                 "line-begin-select"
+\bind "S-End"                  "line-end-select"
+\bind "S-C-A"                  "line-begin-select"
+\bind "S-C-E"                  "line-end-select"
+\bind "S-Prior"                "screen-up-select"
+\bind "S-Next"                 "screen-down-select"
+\bind "S-C-Home"               "buffer-begin-select"
+\bind "S-C-End"                "buffer-end-select"
+
+
+#
+# Edit group
+#
+
+\bind "M-Delete"               "word-delete-backward"
+\bind "C-Delete"               "word-delete-forward"
+\bind "M-d"                     "word-delete-forward"
+\bind "C-BackSpace"            "word-delete-backward"
+\bind "M-Return"               "break-paragraph-keep-layout"
+\bind "C-Return"               "break-line"
+\bind "C-space"                        "protected-space-insert"
+\bind "C-period"               "end-of-sentence-period-insert"
+\bind "M-period"               "dots-insert"
+\bind "M-w"                    "copy"
+\bind "M-S-W"                  "layout-copy"
+\bind "Escape"                 "meta-prefix"
+
+## Trying to incorporate the best of AucTeX and HM--HTML modes
+##
+# "C-z" is used in HM--HTML-mode for paragraph styles so try to support
+#  similar here especially for LinuxDoc (although LinuxDoc isn't only for
+#  making HTML).
+##
+\bind "C-c C-l"                 "latex-view-log"        # show warning log
+\bind "C-c C-o"                 "error-next"
+\bind "C-c C-v"                 "buffer-chktex"         # validate
+
+\bind "C-z space"              "drop-layouts-choice"
+\bind "C-z 1"                  "layout Title" 
+\bind "C-z 2"                  "layout Section" 
+\bind "C-z 3"                  "layout Subsection"  
+\bind "C-z 4"                  "layout Subsubsection"    
+\bind "C-z 5"                  "layout Paragraph"        
+\bind "C-z 6"                  "layout Subparagraph"
+\bind "C-z a"                  "layout Author"         # address!!
+\bind "C-z S-A"                        "layout Abstract"
+\bind "C-z c"                  "layout LyX-Code"
+\bind "C-z b"                  "font-bold"
+\bind "C-z d"                  "layout Description"
+\bind "C-z S-D"                        "layout Date"
+\bind "C-z e"                  "font-emph"
+\bind "C-z i"                  "layout Itemize"        # smart-insert-item!!
+\bind "C-z o"                  "font-emph"             # italic!
+\bind "C-z q"                  "layout Quote"
+\bind "C-z s"                  "font-bold"             # strong!
+\bind "C-c t"                  "font-sans"             # typewriter!
+\bind "C-c v"                  "font-roman"            # variable!
+\bind "C-z S-V"                        "layout Verbatim"
+
+\bind "C-z l d"                        "layout Description"
+\bind "C-z l t"                        "layout Description"
+\bind "C-z l o"                        "layout Enumerate"      # numbered list
+\bind "C-z l l"                        "layout Itemize"        # bulleted list
+\bind "C-z l u"                        "layout Itemize"        # bulleted list
+#
+## End HM--HTML Mode
+##
+## Start AucTeX
+#
+#\bind "C-u C-c C-f"           "layout-character"
+\bind "C-c C-f C-b"            "font-bold"
+\bind "C-c C-f C-c"            "font-noun"
+\bind "C-c C-f C-e"            "font-emph"
+\bind "C-c C-f C-i"            "font-emph" #italic
+\bind "C-c C-f C-s"            "font-emph" #slanted
+
+\bind "C-c C-f C-f"            "font-sans"
+\bind "C-c C-f C-r"            "font-roman"
+\bind "C-c C-f C-t"            "font-code"  #typewriter
+
+\bind "C-c asciitilde"         "math-mode"
+
+\bind "C-c quoteleft"          "error-next"
+
+\bind "C-c C-s 0"              "layout Standard"
+\bind "C-c C-s 1"              "layout Chapter"
+\bind "C-c C-s 2"              "layout Section"
+\bind "C-c C-s 3"              "layout Subsection"
+\bind "C-c C-s 4"              "layout Subsubsection"
+\bind "C-c C-s 5"              "layout Paragraph"
+\bind "C-c C-s 6"              "layout Subparagraph"
+\bind "C-c C-e a"              "layout Abstract"
+\bind "C-c C-e d"              "layout Description"
+\bind "C-c C-e e"              "layout Enumerate"
+\bind "C-c C-e i"              "layout Itemize"
+\bind "C-c C-e l"              "layout List"
+\bind "C-c C-e m"              "math-display"  # should this be math-mode?
+\bind "C-c C-e q"              "layout Quote"
+\bind "C-c C-e S-q"            "layout Quotation"
+\bind "C-c C-e v"              "layout Quote"
+
+\bind "C-c C-e f"              "figure-insert"  ## should be figure-float
+\bind "C-c C-e t"              "table-insert"   ## should be table-float
+
+\bind "C-c percent"            "layout Comment"
+
+\bind "C-c Return"             "break-paragraph-keep-layout"
+#
+## End AucTeX
+#
+## Start TeX mode, some overlap with AucTeX mode
+#
+\bind "C-c C-b"                        "buffer-typeset"
+\bind "C-c C-p"                        "buffer-print"
+\bind "C-c C-r"                        "buffer-typeset"        # tex region
+#
+## End TeX mode
+#
+
+################################
+# Include menu and math bindings
+
+\bind_file menus.bind
+\bind_file math.bind
diff --git a/lib/chkconfig.ltx b/lib/chkconfig.ltx
new file mode 100644 (file)
index 0000000..a01beec
--- /dev/null
@@ -0,0 +1,266 @@
+% This is chkconfig.ltx, a script which tries to autodetect and
+%    document your LaTeX configuration. 
+% Author: Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr)
+% with minimal changes by Asger Alstrup (alstrup@diku.dk).
+%
+% This script should only be run from the configure script to update
+% the files textclass.lst and doc/LaTeXConfig.lyx
+%
+% This script is in fact a complete rewrite of the original chkconfig
+% script. Expect bugs.
+
+%%% If you want to add new packages/documentclasses to be recognized,
+%%% read the explanation that follow and jump to the section 'Actual
+%%% inspection code' below. You do not need to understand the ugly
+%%% LaTeX code below to help improving chklatex.ltx :-)
+%%%
+%%% If you want to add the new package <name>, all you need most of
+%%% the times is a two-steps work: 
+%%% 1- Add the command \TestPackage{<name>}. The syntax is:
+%%%    \TestPackage[<file>]{<name>}, which  tests whether <name>.sty
+%%%    (or <file>, if this optional parameter is provided) exists. 
+%%% 2- Add a description for <name> in doc/LaTeXConfig.lyx.in,
+%%%    containing in particular a line like
+%%%         Found   @chk_<name>@
+%%%    This line will be replaced at configure time by the proper text.
+%%%
+%%% For document classes, things are even simpler, since you do not
+%%% need to edit this file. Just put your layout file in some place
+%%% where LyX can find it and add if you wish a description in
+%%% LaTeXConfig.lyx.in, as described above.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%% Initialization part (skip) %%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% we do not want to stop on errors
+\nonstopmode\makeatletter
+% Have we been called from the configure script?
+\ifx\srcdir\undefined
+ \message{%
+**** WARNING: For proper results, you should not run this script directly.^^J%
+**** Please use the `configure' script.^^J}
+ \newcommand\srcdir{.}
+\else
+  \def\input@path{{\srcdir/}}
+\fi
+
+%%% Some useful macros.
+%   Several commands are defined to test for packages:
+%    \AddLayout{<layout>} adds an entry for <layout> in textclass.lst
+%    \AddVariable{<name>}{<value>} creates a new variable chk_<name>,
+%      and gives it the value <value>.
+%    \TestDocClass[<file>]{<name>} tests whether <name>.cls (or <file>,
+%      if it is provided) exists and creates a new entry with
+%      \AddLayout if this is the case. Note that you will probably not
+%      need to use this directly, since the configure script generates
+%      the needed macro calls automatically.
+%    \TestPackage[<file>]{<name>} tests whether <name>.sty (or <file>,
+%      if it is provided) exists. 
+%   Both commands call \AddVariable to give value 'yes' or 'no' to
+%   the variable chk_<name>.  
+%%%
+\newcommand{\prefix}{+} % the character used by grep to filter 'good' output
+\newcommand{\AddLayout}[3][=]{
+  \ifx=#1
+    \immediate\write\layouts{"#2"   "#2"   "#3"}
+  \else
+    \immediate\write\layouts{"#2"   "#1"   "#3"}
+  \fi}
+\newcommand{\AddVariable}[2]{
+  \immediate\write\sed{s!@chk_#1@!#2!g}
+  \immediate\write\vars{chk_#1='#2'}}
+\newcommand{\AddPackage}[1]{
+  \immediate\write\packages{#1}}
+% Tests whether an item is present
+% Syntax: \TestItem{<file>}{<name>}{<type>}{<ext>}{<iftrue>}{<iffalse>}
+\newif\ifexists
+\newcommand{\TestItem}[6]{
+  \ifx=#1
+    \def\files{#2}
+    \message{^^J\prefix checking for #3 #2 [#2.#4]...}
+  \else
+    \def\files{#1}
+    \message{^^J\prefix checking for #3 #2 [#1]...}
+  \fi
+  \let\firstelement\relax
+  \existstrue
+  \@for\file:=\files\do{
+    \ifx\firstelement\relax
+       \edef\firstelement{\file}
+    \fi
+    \IfFileExists{\file}
+      {}
+      {\IfFileExists{\file.#4}{}{\existsfalse}}
+  }
+  \ifexists
+    \message{yes^^J}
+    \AddVariable{#2}{yes}
+    #5
+  \else
+    \message{no^^J}
+    \AddVariable{#2}{no}
+    #6
+  \fi}
+\newcommand{\TestPackage}[2][=]{
+  \TestItem{#1}{#2}{package}{sty}{\AddPackage{#2}}{}}
+\newcommand{\TestDocClass}[1]{
+   \def\layoutname{#1}  % remember the name of the layout file
+   \@ifundefined{layout@#1}
+     {\bgroup
+        \catcode`\#=9  % consider # as a space
+        \input{layouts/#1.layout}  % read the layout file
+      \egroup
+      \global\@namedef{layout@#1}{}} 
+     {} % we have already tried this one.
+}
+\newcommand{\DeclareLaTeXClass}[2][=]{
+  \TestItem{#1}{\layoutname}{document class}{cls}
+           {\AddLayout[\firstelement]{\layoutname}{#2}}{}
+  \expandafter\endinput
+}
+\newcommand{\DeclareLinuxDocClass}[2][=]{
+  \message{^^J\prefix checking for linuxdoc class \layoutname... }
+  \@ifundefined{haslinuxdoc}
+    {\message{no^^J}}
+    {\message{yes^^J}
+     \AddLayout[#1]{\layoutname}{#2}}
+  \expandafter\endinput
+}
+% Only for compatibility. Will be removed later.
+\let\DeclareSGMLClass=\DeclareDocBookClass
+
+\newcommand{\DeclareDocBookClass}[2][=]{
+  \message{^^J\prefix checking for docbook\space\space class \layoutname... }
+  \@ifundefined{hasdocbook}
+    {\message{no^^J}}
+    {\message{yes^^J}
+     \AddLayout[#1]{\layoutname}{#2}}
+  \expandafter\endinput
+}
+
+% Stolen from article.cls
+\newcommand{\today}{\ifcase\month\or
+  January\or February\or March\or April\or May\or June\or
+  July\or August\or September\or October\or November\or December\fi
+  \space\number\day, \number\year}
+
+% Initializes the files
+\typeout{\prefix Inspecting your LaTeX configuration.}
+\newwrite{\layouts} \immediate\openout \layouts = textclass.lst
+\newwrite{\sed} \immediate\openout \sed  = chkconfig.sed
+\newwrite{\vars} \immediate\openout \vars = chkconfig.vars
+\newwrite{\packages} \immediate\openout \packages = packages.lst
+
+\immediate\write\layouts{%
+# This file declares layouts and their associated definition files.^^J%
+# It has been automatically generated by configure^^J%
+# Use "Options/Reconfigure" if you need to update it after a^^J%
+# configuration change. Run ./configure manually to update the^^J%
+# system wide version of this file.}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% ACTUAL CONFIGURATION INSPECTION CODE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% Add any new package or document class here.
+
+%%% First, we want the day on which the test has been run.
+\AddVariable{date}{\today}
+
+%%% Then, the version of LaTeX we are using
+\message{^^J\prefix checking for LaTeX version... \fmtversion}
+\AddVariable{fmtversion}{\fmtversion}
+
+%%% Check for ec fonts. Most of this code has been shamelessely stolen
+%%% from the file ltxcheck.tex in the LaTeX distribution. In particular,
+%%% don't ask me how the macro \ecrm works...
+\def\ecrm{%
+  \begingroup
+    \escapechar-1
+    \xdef\reserved@a{%
+      \noexpand\in@
+        {\expandafter\string\csname ecrm\endcsname}%
+        {\expandafter\expandafter\expandafter
+           \string\csname T1/cmr/m/n\endcsname}}%
+  \endgroup
+  \reserved@a}
+
+\message{^^J\prefix checking for default encoding (this may take a long time)^^J}
+\font\test=ecrm1000\relax
+\ifx\test\nullfont
+  \message{^^J\prefix\prefix checking for ec fonts... no^^J}
+  \AddVariable{ec}{no}
+  \AddVariable{fontenc}{default}
+\else
+  \message{^^J\prefix\space\space checking for ec fonts... yes^^J}
+  \message{^^J\prefix\space\space checking for ec support in LaTeX format...}
+  \ecrm
+  \ifin@
+    \message{yes^^J}
+    \AddVariable{ec}{yes}
+    \AddVariable{fontenc}{T1}
+    \message{^^J \prefix\space\space default encoding will be set to T1^^J}
+  \else
+    \message{no^^J}
+    \AddVariable{ec}{no}
+    \AddVariable{fontenc}{default}
+  \fi
+\fi
+
+
+%%% Document classes
+% The list of layout files has been put in this file here by the
+% configure script.
+\input{chklayouts}
+
+
+%%% Packages
+\TestPackage{a4}
+\TestPackage{a4wide}
+\TestPackage{babel}
+\TestPackage{color} % this one should be there if graphics.sty is there.
+\TestPackage{fancyhdr}
+\TestPackage{floatflt}
+\TestPackage{setspace}
+\TestPackage{subfigure}
+\TestPackage{geometry}
+\TestPackage{linuxdoc-sgml}
+\TestPackage{longtable}
+\TestPackage{algorithm}
+\TestPackage{rotating}
+\TestPackage{latex8}
+\TestPackage{url}
+
+% The test for the graphics package is slightly more involved...
+\newcommand\groption{dvips}
+\TestItem={graphics}{package}{sty}
+%  Let's do some clever things to guess the default driver for the
+%  graphics package. The maintainer of the site might have declared it
+%  in the file 'graphics.cfg'. Let's hope there are no strange commands
+%  in there...
+  {\renewcommand\ExecuteOptions[1]{\renewcommand\groption{default}}
+   \InputIfFileExists{graphics.cfg}{}{}
+   \AddPackage{graphics}}
+  {\renewcommand{\groption}{none}}
+\message{^^J\prefix checking for graphics driver... \groption^^J}
+\AddVariable{graphicsdriver}{\groption}
+
+% psnfss is in fact the name of a set of style files, among which
+% times.sty. If times.sty is here, we will assume that everything is
+% fine. 
+\TestPackage[times.sty]{psnfss}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%% END ACTUAL CONFIGURATION INSPECTION CODE %%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% End of the LaTeX job
+\immediate\closeout\layouts
+\immediate\closeout\sed
+\immediate\closeout\vars
+\immediate\closeout\packages
+\typeout{\prefix Inspection done.}
+\typeout{\prefix Read the file doc/LaTeXConfig.lyx for more information.}
+% Get the real \end command, that has been hidden by LaTeX
+\@@end
diff --git a/lib/clipart/platypus.eps b/lib/clipart/platypus.eps
new file mode 100644 (file)
index 0000000..e1b8ed8
--- /dev/null
@@ -0,0 +1,533 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: 
+%%Creator: PixelMagician
+%%CreationDate: Tue Apr 13 14:21:14 1993
+%%For: kris
+%%DocumentFonts: (atend)
+%%Pages: 0 0
+%%BoundingBox: 0 0 435 321
+%%NXNextStepVersion: 3.0
+%%EndComments
+
+%%BeginProcSet: /usr/lib/NextStep/printPackage.ps 3.0
+%!
+% NeXT Printing Package
+% Version: 3.0
+% Copyright: 1988, NeXT, Inc.
+
+/__NXdef{1 index where{pop pop pop}{def}ifelse}bind def
+/__NXbdef{1 index where{pop pop pop}{bind def}ifelse}bind def
+/UserObjects 10 array __NXdef
+/defineuserobject{
+       exch dup 1 add dup UserObjects length gt{
+               array dup 0 UserObjects putinterval
+               /UserObjects exch def
+       }{pop}ifelse UserObjects exch 3 -1 roll put
+}__NXbdef
+/undefineuserobject{UserObjects exch null put}__NXbdef
+/execuserobject{UserObjects exch get exec}__NXbdef
+/__NXRectPath{4 2 roll moveto 1 index 0 rlineto
+0 exch rlineto neg 0 rlineto closepath}__NXbdef
+/__NXProcessRectArgs{
+       1 index type /arraytype eq{
+               exch 0 4 2 index length 1 sub{
+                       dup 3 add 1 exch{1 index exch get exch}for
+                       5 1 roll 5 index exec
+               }for pop pop
+       }{exec}ifelse
+}__NXbdef
+/rectfill{gsave newpath {__NXRectPath fill} __NXProcessRectArgs grestore}__NXbdef
+/rectclip{newpath {__NXRectPath} __NXProcessRectArgs clip newpath}__NXbdef
+/rectstroke{
+       gsave newpath dup type /arraytype eq{dup length 6 eq}{false}ifelse{
+               {gsave __NXRectPath null concat stroke grestore}
+               dup length array cvx copy dup 2 4 -1 roll put __NXProcessRectArgs
+       }{{__NXRectPath stroke} __NXProcessRectArgs}ifelse grestore
+}__NXbdef
+/_NXLevel2 systemdict /languagelevel known {languagelevel 2 ge}{false}ifelse __NXdef
+/xyshow{
+       0 1 3 index length 1 sub{
+               currentpoint 4 index 3 index 1 getinterval show
+               3 index 3 index 2 mul 1 add get add exch
+               3 index 3 index 2 mul get add exch moveto pop
+       }for pop pop
+}__NXbdef
+/xshow{
+       0 1 3 index length 1 sub{
+               currentpoint 4 index 3 index 1 getinterval show
+               exch 3 index 3 index get add exch moveto pop
+       }for pop pop
+}__NXbdef
+/yshow{
+       0 1 3 index length 1 sub{
+               currentpoint 4 index 3 index 1 getinterval show
+               3 index 3 index get add moveto pop
+       }for pop pop
+}__NXbdef
+/arct{arcto pop pop pop pop}__NXbdef
+/setbbox{pop pop pop pop}__NXbdef
+/ucache{}__NXbdef
+/ucachestatus{mark 0 0 0 0 0}__NXbdef
+/setucacheparams{cleartomark}__NXbdef
+/uappend{systemdict begin cvx exec end}__NXbdef
+/ueofill{gsave newpath uappend eofill grestore}__NXbdef
+/ufill{gsave newpath uappend fill grestore}__NXbdef
+/ustroke{
+       gsave newpath dup length 6 eq
+       {exch uappend concat}{uappend}ifelse
+       stroke grestore
+}__NXbdef
+/__NXustrokepathMatrix dup where {pop pop}{matrix def}ifelse
+/ustrokepath{
+       newpath dup length 6 eq{
+               exch uappend __NXustrokepathMatrix currentmatrix exch concat
+               strokepath setmatrix
+       }{uappend strokepath}ifelse
+} __NXbdef
+/upath{
+       [exch {/ucache cvx}if pathbbox /setbbox cvx
+        {/moveto cvx}{/lineto cvx}{/curveto cvx}{/closepath cvx}pathforall]cvx
+} __NXbdef
+/setstrokeadjust{pop}__NXbdef
+/currentstrokeadjust{false}__NXbdef
+/selectfont{exch findfont exch
+dup type /arraytype eq {makefont}{scalefont}ifelse setfont}__NXbdef
+/_NXCombineArrays{
+       counttomark dup 2 add index dup length 3 -1 roll {
+               2 index length sub dup 4 1 roll 1 index exch 4 -1 roll putinterval exch
+       }repeat pop pop pop
+}__NXbdef
+/flushgraphics{}def
+/setwindowtype{pop pop}def
+/currentwindowtype{pop 0}def
+/setalpha{pop}def
+/currentalpha{1.0}def
+/hidecursor{}def
+/obscurecursor{}def
+/revealcursor{}def
+/setcursor{4 {pop}repeat}bind def
+/showcursor{}def
+/NextStepEncoding where not{
+/NextStepEncoding StandardEncoding 256 array copy def
+0 [129/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/Ccedilla/Egrave
+/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/Ugrave/Uacute
+/Ucircumflex/Udieresis/Yacute/Thorn/mu/multiply/divide/copyright
+176/registered 181/brokenbar 190/logicalnot 192/onesuperior 201/twosuperior
+204/threesuperior 209/plusminus/onequarter/onehalf/threequarters/agrave
+/aacute/acircumflex/atilde/adieresis/aring/ccedilla/egrave/eacute
+/ecircumflex/edieresis/igrave 226/iacute 228/icircumflex/idieresis/eth
+/ntilde 236/ograve/oacute/ocircumflex/otilde/odieresis 242/ugrave/uacute
+/ucircumflex 246/udieresis/yacute 252/thorn/ydieresis]
+{dup type /nametype eq
+ {NextStepEncoding 2 index 2 index put pop 1 add}{exch pop}ifelse
+}forall pop
+/NextStepEncoding NextStepEncoding readonly def
+/_NXfstr 128 string dup 0 (_NX) putinterval def
+/_NXfindfont /findfont load def
+/findfont{
+ % Because we can never let NextStepEncoding get into
+ % SharedFontDirectory, we cannot reencode a font to NextStepEncoding
+ % if we are in shared mode.  So if currentshared is true,
+ % we call the normal findfont and return that
+ /currentshared where {pop currentshared} {false} ifelse
+ {_NXfindfont}
+ {dup _NXfstr 3 125 getinterval cvs length 3 add _NXfstr 0 3 -1 roll
+  getinterval cvn exch FontDirectory 2 index known 
+  {pop FontDirectory exch get}
+  {_NXfindfont dup /Encoding get StandardEncoding eq
+   {   dup length dict exch
+       {1 index /FID ne {2 index 3 1 roll put}{pop pop}ifelse}forall
+        dup /Encoding NextStepEncoding put definefont
+       }{exch pop} ifelse
+   }ifelse
+ }ifelse
+}bind def
+}{pop}ifelse
+/_NXImageString {/__NXImageString where{pop}{/__NXImageString 4000 string __NXdef}ifelse __NXImageString}__NXbdef
+/_NXDoImageOp{
+       3 dict begin /parr 5 array def 1 index{dup}{1}ifelse /chans exch def
+       chans 2 add 2 roll parr 0 chans getinterval astore pop
+       5 index 4 index mul 2 index{1 sub 8 idiv 1 add mul}{mul 1 sub 8 idiv 1 add}ifelse
+       4 index mul /totbytes exch def pop exch pop
+       gsave matrix invertmatrix concat 0.5 setgray 0 0 4 2 roll rectfill grestore
+       {0 1 chans 1 sub{parr exch get exec length totbytes exch sub /totbytes exch def}for totbytes 0 le{exit}if}loop end
+}__NXbdef
+/alphaimage{1 add _NXDoImageOp}def
+_NXLevel2{ 
+       /NXCalibratedRGBColorSpace where{pop}{
+               /NXCalibratedRGBColorSpace
+               {mark /NXCalibratedRGB /ColorSpace findresource exch pop}stopped
+               {cleartomark /NXCalibratedRGB[/CIEBasedABC 2 dict dup begin 
+               /MatrixLMN[.4124 .2126 .0193 .3576 .7152 .1192 .1805 .0722 .9505]def
+               /WhitePoint[.9505 1 1.089] def end] /ColorSpace defineresource}if def}ifelse
+       /nxsetrgbcolor{NXCalibratedRGBColorSpace setcolorspace setcolor}__NXbdef
+       /nxsetgray{dup dup nxsetrgbcolor}__NXbdef
+       /_NXCalibratedImage{exch{array astore dup length true}{false}ifelse
+               8 -1 roll{NXCalibratedRGBColorSpace setcolorspace}if
+               8 dict dup 9 1 roll begin /ImageType 1 def /MultipleDataSources exch def
+               currentcolorspace 0 get /Indexed eq{pop /Decode[0 2 6 index exp 1 sub]def}
+               {2 mul dup array /Decode exch def 1 sub 0 1 3 -1 roll{Decode exch dup 2 mod put}for}ifelse
+               /DataSource exch def /ImageMatrix exch def 
+               /BitsPerComponent exch def /Height exch def /Width exch def end image}__NXbdef
+} {
+       /setcmykcolor{
+               1.0 exch sub dup dup 6 -1 roll sub dup 0 lt{pop 0}if 5 1 roll
+               4 -1 roll sub dup 0 lt{pop 0}if 3 1 roll exch sub dup 0 lt{pop 0}if setrgbcolor}__NXbdef
+       /currentcmykcolor{currentrgbcolor 3{1.0 exch sub 3 1 roll}repeat 0}__NXbdef
+       /colorimage{_NXDoImageOp}__NXbdef
+       /nxsetrgbcolor{setrgbcolor}__NXbdef /nxsetgray{setgray}__NXbdef
+       /setpattern{pop .5 setgray}__NXbdef
+       /_NXCalibratedImage{dup 1 eq {pop pop image}{colorimage}ifelse pop}__NXbdef
+} ifelse
+/_NXSetCMYKOrRGB where{pop}{
+       mark{systemdict /currentwindow get exec}stopped
+       {{pop pop pop setcmykcolor}}{{nxsetrgbcolor pop pop pop pop}}ifelse /_NXSetCMYKOrRGB exch def cleartomark
+}ifelse
+%%EndProcSet
+
+_NXLevel2{/_NXsethsb where{pop}{/_NXsethsb /sethsbcolor load def}ifelse /sethsbcolor{_NXsethsb currentrgbcolor nxsetrgbcolor}def /setrgbcolor{nxsetrgbcolor}bind def /setgray{nxsetgray}bind def
+}if
+gsave
+ /__NXbasematrix matrix currentmatrix def
+grestore
+%%EndProlog
+%%BeginSetup
+%%EndSetup
+0 0 435 321 rectclip
+0 0 435 321 rectclip
+1 nxsetgray
+0 0 435 321 rectfill
+0.000000 0.000000 transform
+gsave __NXbasematrix setmatrix itransform translate
+1 nxsetgray
+-5000 -5000 10000 10000 rectfill
+435
+321
+2
+[1 0 0 -1 0 321]
+
+/_NXImageStr0 _NXImageString 0 327 getinterval def {currentfile _NXImageStr0 readhexstring pop} bind image
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefbfffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5bbbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd25b7ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe400aabfffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4621897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9912c17fff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffede546919fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6948a14dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb6861505dfff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeda5625426fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6a40495137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9d92a9c5167fff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe141ca6aa452fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7159ad440a2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d5a69a5515afff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18aaa6426206fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe122996844243fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe115a99498163fff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92895fa199129fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff99599a7926620cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2446dae265918afff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6296a9e46c8067fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc464f4a56984153fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff68a6d9bd2a41286fff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff209653c75699589fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb61a95689a70cc58fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6536b5a48d259a20fff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8567f574a5d2a612fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd948a669977d55543fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc4bafb5ca7b6f9587bff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0f79eea9dd4e9146bffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91ff9df39aca56a85fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb47feeafb779b6d655fff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff955fdfbeeeb765eb20fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe56bebfae5ab4d6b96fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5977edefba6e6b5bc2fff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa89abefadd67776de83fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff616dfb779dab1ddaf07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd46bbfb9ebbdf5cc660bfff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb44f7dded77dfba5b49bfffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61abebadabbe97e3ac67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed2b7ab3e7fbb9a97a567fff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe93bb9fb7bfbaafadb51bfffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95beebff7baed3e75b40ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff65ffebe6f7dda7cbe680ffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe87ff5defbeea559a6701ffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd87ff9e5ebba7ab78da01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa15fd577defd227dbe402ffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff559ec6aeaceca9ab79403ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4d7726deb9a89ef69c893ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a771febf239c7bd98083ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff079debf7eeb768bfa74143ffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0daa57bbecee74ffe64207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff829766faebadf66df5d150fffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd176ed6df7bbfb5e9e6a501fffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd95b6efabdedafaf7d79442fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe976aa7ff9fffada7a9ab0487fffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe557aa9bbeb7bfe9e7dd29108bfffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe40be7aaaefeeeaf6d7a9f4500ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8682a6deff7feee999dbabd6401ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82e169f7ff5dda7e6eb99daa1002ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed2f6a9bdfbda775f9aa6659725103ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd64aa69be7eead9dae8b5a6735bc10bffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0faa68677e776bbaeaad96eaaeb441fffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe846b66899ae5ddbdfba6f957d8c69503fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906ba99627f9b7be2dddaf65f56198107fffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09b98665afd7affc7af76fa5dab898087fffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd67ada6a47baafafb1ebdea7fad6f72110ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09eea9e869ebff9adb7e796bb75aab9445ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff526fa9a5ad77e551b2db9b69deb6acfd980ffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94d9aa166907e9942eb8e7ddb9ddbf6f7712ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5764aa69e55eb667f9d3dfaab32fbe7a9983ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa8699a6aeb96a6997bc75f6ae98fff6c9c990fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda1625d9bbd2f5978ab7afdceff6aee76ed702fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe4515aa975e99bfbe2d8abf73beeeb79f779a07fffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8009a66287566fbe1ba3e6eebf9e9ea7ddb4c0ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810679d86685ab9e4a65e86bd5e3736cf77da42ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6425db717d287ee46967a1ab67d9d8bae9bae27ffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5941a6680a6a1dd85694dd26feb3a556ed9dec9fffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed9046859a25aa6b4266577e9fb5deb6976577e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff965119196599ada91a94b9fd7de76deb1fe9e775ffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffefffffffffffffffffffffffffffffffffe0464b4558a5567f41957f7e6b66ca3bdbef35ecaffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6ff9bff9feffffffffffffffffffffffffffff8249744092c546aac65bfadeefaafcf36fbdb3e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffaebf9afd5ba55a5bf96ffffffffffffffffffffffffa096285420564151e962b6a6a7eaae79dbde6df603ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafe801a92946d0555544aaebfbb9fffffffffffffffc06549584615d54060796dbde6f6c68976b7dab6a5bffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfabfea96eaf956daebae8680100046a5a6bffffffffffe005062a66419509482d6abbb9eeaaa29d35f5aaa88fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffff9f4aeeb7feeff5a6fa3e5a42a5fa69e5501a95bffffffff800014a16849515a519692d79a6aa99670dbb6ae7a3fffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a1bdf51ffffe06fe6bffe6a9affe6f9101901405abbfffd8400b144016689611a560a2d29aaa67dd66eeaa561bfffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8011bff66fabf41be614a97f5bffafa461945a51ae4015abfbad5284549225645958957ae4b96a5ebafd56e70451ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffde279a7d7fa9bb96f81a5a6906ff92a50be46ea406e90b8007bffffe4245808590695a2bae829865f56ae6a7996c91ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe587a86fa2e64691ae569ae995f5e16e92a5aeabfeff9285aef9555fffed45466951482498e5696857659a6b9e6a6642ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9467d96a9aea5a45002ffaa016fbd97e96e6be91bfd96a6be5050055b6fff6641a00851804569a552594aaa9ea9b6b241ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffe557bd9a6595aaa5500bf5a955af9b96fd6af95bba695a55bd56aa6fbe93ffff64a0026460806a6e9196126966e9a6cd103ffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe499bf9b5eaaab8be01ba4547bf95a7e7fff6fe46ffeabaaaffa54ae00566bfefffd411a20a0797949a14897a8af25a5e40bffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee5071a9b6e6ee7ab917bd5067e68bfabf6ffa56a4bfe6f01ff9595abaa9b57957ffff41b58a42d1e0a659751eaab99e96505fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffff54429afa6baea6eb6ebbe86e5eaeffbfe7fa9196dbaea91bfa969aa79e56555affaafd6ab9b66a09a76c51946845ea2d18813fffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024156df5bfea3aaaffa6dbf5e5affe7f9fa7e9a6e6f696fbfa6a9afdbffab5995055fffffe99f5a689928602a059d5b929853fffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd86a3faeb96ba6a9aaed69bfe6906afe6f6966e687aae7afe7fa96f96e5fbefe6feaffffffeedbaeb9a648b6c09946112aca258bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffd82a42aefa6ba5b6affbf6ff9a966ffd5f6f7dfe6ffae7e5eb9a9a6ffe9d1aa9a97ae99ba45bffdfadbb9278b46664801136d721ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff415a25ebff7fd76ef9bfaffbe5955a99b6d7fafbfae97d6febfff6fffee1e91bf9569be81a57fffebaf999ea4284950054a25886ffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd59649b7ffbffa9fb9bbefebe0a1454bf6abf6fe7ffbfebeaabfaebfeafe9aaa6aee54ae818056efeffea975c4609554142982417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffd2e95eaeeffebeaffabaffff95a7c50b46d6faaafffefeffbebdbda7af9faa9555b95955aa5405b9bfffffb8a2ee6681640a641047ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3a157aaaf5fbe6f6affe9b6df959fd38ad6e69bdb7afefffe6fef9bff469ffaaf96ab4691aaaa9698a5bbffb5f698755601855a11bffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd87996f9abda9e5ba56aff7edb6befe12f8be69b9b6afaafaeae5b5fd5f66e16a516a546fe995955505be4bfffb9b41955807086848fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff4eefab567ea67ab5da7ffffd6979a966f4747fb9bf4fa5754afafd1fbfa986f94405a642a96850456fe41bfabe8a9279c201d659455fffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2fff6ae5fae6979919befe9642db429bda515b9af4b9b9af52ea46f47eff95fdaab9e525146abfae905aba5bf96a59e604064a45001fffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0fbdd8855afae6d509bb7eb40652f59bdb9425abe5aaf5ffd5564b96ffa955ac6ae95afe9b9b4455115aa42fe6ffa6b4414552558812fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff86f6b52c9b98b6d616be6f7ae655be5be15fa91a99a9a5a597efd687e9beffffa069ab9aaaa6afeaa95465be47ba6df910a160696a44bfffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2fc6ed92a9b75e6967e5f7ae6e97e1fe06ff6b995a65949b66f4516ffff95e516aeb9a9a45a4556bfbe405a9a51aeb95119694999506ffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffff97b6f572ea99491e9e7cb7ad659a65e7e6ffbbea55f5f9b96d65bafef56fffabdaea59557ffeabff9696ba4065aa49bae824250625c44ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff67fdfe5feaa2b75b9b6f3c3de5b25d57e5be7fffe4667875ad6ff956bbff9aa6a5bd192ba556aabfb96be84ab5a912bffe051090992406ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9aab5af6badf9f7eb9b9f6d669f58be55e97ebbe6966faef5ffeaafe6e855bb9af97a09664561a5fbabbeba6ef807fdebd05852219410bffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffff9da797edaffff9fdbd5e79f5fa96ab91ad6bd5ed6e7e3f5ebffaebe9640bf9146aa55aabf955a82f96be565695417fe56b848559961405fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffd2bbfffbe7fee9bdbe5a6afcb99abfeaaabafe57e2bf4f46a9dbae96beaea6aa91a945be56e5b9ed5bfeaffeaa82bea060be3265259110bfffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafefffceadff67f6e23ebe1b8be6f6af9fabe690055575bd2ffdb65bf9bffeadbff5aaa4579650fffd5aff9a9592941281ef8944964001ffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffe7dadef72bafdff9a6af9e6fabebe6ee5bd6eaf0685ae4fabff9bf6fe5b9690bafe1bfeafe569afe966ff9af86be41a8502aff562154007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffdfabb598fef76d99979fe1f9bd2e2d7dbd65bd86d5bb9a6fe7ffffffab6a9bf96ea6aafffabeabf596b92e96f1a6ebf600a2ffd5495002bffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb6f577762797dab679c7f5bcaf7f0699bfa9b94aa7e95e6feaf5bead6fffeffef9afae55fffffebfffe5a44be6f4a7564060bffd928400bfffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffe39d8ebe9cf5f6cd5da2faf7c679d019bdbbbdbd6b95fe7f5be6ff996aaafbe5effe60fb5995bbffd6ffa9aa5ebe4a4af9b049bffc96505ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffd22d76eb3d8e7b7db68b969d76db029b95b97a590bebe2bfabfea6e5e05eb96fe55aaefffefffa5bffd006569a96b9ae158417ff8e69606ffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9cab1954e5ede9f2d97d6dafda2e2d6d57d654151f9565e47ff96f6f9a961be6bffff95affbabbff95fef4169ad6fea59ea44bff616944bffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffff632fc44d21baba60f77fcfa3c28a29be7af79beb6bed79fc2ffebff6e7eaed5bfe6b956f9a56aaffbffafffaff57da917e5d2567e915403fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffd3a6e257495f696eb99dff95d18be5bb666f9ae46fda3ebf6ea9bafed6fabeae12affebd45abfffffe5afebfd02f9a5b595e6d619e66408ffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5b86da6cf77d69d9dab779bfcabe2fad24bae55abda99eb6a6df6a5bfa6baffff9b96bda9a997ffffffbfea45ab955affe759e817aa8023fffffffffffffffffffdffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffff90fe32e72dfe6db77fa9de5ffff7eefe7dbafbfe5bbd5aa29af8bd6a51ffdfbfbad6fffeb96ea5ba96966effab9e541f5ebeabd41fba4083ffffffffffffffffbff6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffff059c57ddf3eab9e7b9cbffba5a5effbabfdbe5a6baebefebfe5a7fbf7ffaf796ffafd5bb9abfbffffffffeafffe9bae9afffbee46fe9520fffffffffffffffa63fe3ffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09241db9f7af938da67b76ed98fea6babbf99a7fa46fef9fd7b9be6f6fe7e6a5beff97f69aa566a6f96fabfe59e2ee476595a6f46ab9c02fffffffffffffe4855fc3ffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffff859bbfaf7dcbd9fea7a9efea87f464b962f4a97e509bdaffffe6fffd6f9b9be7ffffff96fd6afd5a5faaafbea5ba8555e04bae7eab7d6407ffffffffffffd05005f0bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff16cfee1ce2937ade9beabeab2fa9d7855a4bfff416b9aff54b97ff996f6ff9ff6fffab95eaa9a9bbaebfffe92feaaaee96f9b9a85679801ffffffffffffe80100510fffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff65afde966c39fb7793faae67df7fe7956e5b97e1a96bba6646e6a6e92e7fe4b96ffffef979557ff9555b95abfa5691ebaafffe59059ef003fffffffffffb4141001d2fffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffaa3b6b6df4fbcaab9fffbdaca5ff682659fa5aefbb990ba57f9a1bd7faa9bb9857fbfd7fa5af96a95bafff1a65a46eafabed6a51026a800bfffffffffff402817b60bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffce9e85df3e75567fe56fd919b1ff99575ee65fff56669b95aa5bfeafe5e9fa6faffa66ad41e86afe91a57bf69aa6fa8696aa51aa40847806ffffffffffe801289fc06ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2e6b87fefdee597fa5b76e23e2fd965d6ea69e465afaf969a6fe5bf56ffa5afae91aff7ffeaaeeaaadaaffa0596ad5a469452aa84001d90bffffffffff801098fd81fbfffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff829ff1ffbbe9eb4f796ddff9faeee45fafefaf5be5f9f5ef91beaf5afe99bfd6bfffffffeafaeaffaffebe6bfffe695966996f9f94001582ffffffffffd048279db47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff267afff8fea3ef6df2666bffaf6bea9bfeafaff91e2baa69abeb52ff96abfafae7f96515afe6fe56be56fa7e979546d2929b9bea0100a10ffffffffffe45c679dbe1ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd66d8b9f6799bfd75bc8f3ff99a97f57fd9f9b959ff954bffd69a7eb9bffff914afab9456bffffffffefa5ffbfffebea4bef96e695401942ffffffffff40782a67f87ffffafffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffe98fa2b6dddbe7bef175bcbee9a55fc2e9556fabfff56fffb8682bfe6bf959546fe695ffba9046bfe55bfffffb9af516ebe6ab91a4400550ffffffffffc2210729fe0fffff0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffc1ae5feb972f8fe7c1fbffebf6e2e95fdfe7fafdf96ffe558bfbf9fe5be94bffd1a969aaa9afffe5aaafe6aa96fe6bf96d5a586fa6841182fffffffffd42102d1bf84ffff91fff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe05fabaef9a7e175f17efafdfa64bdbf9df7e6fafabe559bfffff5ffe4bf9bfe4a56fe4505e55005a56aaffe6a95000db96966ba59d504a1ffffffffff484508a3fd08bfff02fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffc56e9dbbf5df9596fcb6cb93d7c7e7f99b78afeafdf97eaaf9a6ff956e5ba95a5a9f956bfe901affea800059901bc6bf59592e4699244187fffffffff801067d9ff4183ffc03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffff1ab63eeae67e776fe2df7a5f2fef6e99ab4baf7ebe6f85f914bff5bffad6e97ffaf5696f402e540545a5be955bf9a5bf9ad641b94659152ffffffffff01124bdbf94331f900bfff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd56efb6a6ddaae5efeffe9698bdbfe47f9d66bfbbc797fe5bffafbaae1abeaffff906fe952a5550005abbb99402946f96f87d6f857900206fffffffff8010967afd013900022ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff559ead6caba5b9feae9a42a6be26d57f9db85baffbd6fabfb96fa1bf57fffe4459011401556a6fa55af5aaaa406ff5afe5bfee5af804404bffffffffe0094179ff0000000187ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffd657db2a6aeaf977bb07e5ddd764b66f9fef6e7af596f8bd6ff96ff96fe95bbfe904297fa401ba46fa6a56bfa6fe56e46ffe81afe4589406fffffffff41241dfbf80001afe01fffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec7b7aadf3ad9a9e6da787be7d8595feffe2f69a65bf9f9afbf9b97ae91ffffe9556eaa146aa5695055bfa52d56ff95fab95bfa44351944bffffffffd00503dbfd1002d5f947fffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff1ffcaf18f943e39bfde7ff2fae739db9687f5a757f6a7ffbf46abe5affa55bff86ab9ae956a9a41bea56aeeefe9abafaf5bf9546900a67fffffffff021463ffe4062a9ffc2efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffe785196a94fea7b9fbee7aebe6a52feaf9ae6ffbbe69bdab6effffe41be56afa5dafa255adba54066b59aaae46b16e91a46fb96a5a800ae7fffffffff90859d27f402026fff2ffbffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7a2697b6a1f6beaf9ffff76a6f6af6dff597dffffe7abfeeffe6af5a95bfff5bffe6bfffe900a5abfa15106ffffefeaa6fffda45400191bfefbfffffe146553afd00062aff4ffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffff5fadfdaad6d2f8bd7fffae5abedbadffae7d97ffe5d2f92fed6bfe9abffa916ffe56955e96bfff505406affabe9affffeaff940011696a7e6aafffff660550fff4005dbff51ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffd6ea7eb969abfa7e3ee7956e6ebaff696a69fa4792f4647e5fef99969b9a56b95affeae95d445556fff92ffaaa9affa646b9a94194016919029bdfffc6800025fd00197ff5b3ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9e7aeabd5b7e5696e77f44feb6dae69bff96a5197e5787fff9b5a81af9aa5bfa55955fe1aaea5595aaaaa955916bbfbffaea9865406a5400146dbfa685000100f80697ff8bd3ffff3fffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffba9a65669f682f9994a2cbdb5fd790229befe6e42f1a6a7ffe6ee5e57fa00541401ffef95af956fffbffa959055bfe56e5ba0551955a25059010182865e96105600b4087ff97dcbfff47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9a
+aa526db7fa9bd65af4b8e69696807e9afffee9296fe557faffffbf9b8005500abfea5affeffa696e6aaafffd942a5a90b9596a400000a810640400685a42c608027d97ffc2998bffc0bfff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14a5616f5bff96e16fe6a57f91a6ac2bd9eabaaab9bfa6bfffa6f9afa965fef4556a96ae55aaff59afffe5511be55aa805bfe6a50000001546a404009916405f940017feffd2d16cbe001ffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff4100105955ff9b96affaae6ef6fea66befe9a97ba96efff86fea955bfaf6be4141bfeae545af656bf6455551400bf0059ab95bfe4690009400556814a401a000a980215abfe19073850003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd08111
+4192e9b8697aabdbeadaaef92ff9ae646a655a9a5b555bbffebea55500aabb944401afeffffe806abfbe5aa680017906f7f955bba45029af6a8005016802fe4080aafe0906a000401fffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef5451029450505579bd6f97dbe569a92fb869b5eab86e7feaa94155ba6fff9aff9aa9afffa954665bf6bffe955459500257f95be29befa541fea947e7eaea00a5551b91905aff0a0190120007fffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffa51429a5a10810aaaa5591a6e5695b8297ea5e6faaf5a6a16bfeffffffbf9abfffe6fffeaaffffa56ffaadaa6bfe9556afbb9bfff9af5d41afafd6f9bfaf8647a1a5ad07405bf4600005b7e46ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00a52aa064
+1a5696a9aea6afe6beaf81a5aaa7eff91a919beefba57fe95fea6fa97f955a5ad4465aabe56ffffe55abfeb91a9aabf9b96fc006fa42fbfe5bf95affa01e018007f850008a73e81fffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01952a4299145f9055ba5aa95696f96a5456e7feba6f92a555656affebfeffffffff45956afea95f9415bfeaa5456a006ba8bf5bb9ab9a55aba55a5bff9a5babef801a68a446bd09018df7fd0bfffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffea12a199609100a96296f551daafef816be943915da95f91bfe2abd43fa546bfaaaaa7fefabafaa95bfffffeaaa940069a9b91bfeb94aa546efa4ae5ab96a86f9a9145195e6d6aff4002debbfe43fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90ba0a26461964
+a559a5fb6947e555ab95a1be55f91bfe06a5ba55995bafffbdaebfaa5aababfffefebbe40165451aae9005bffe7da7e4afe6a6fe6f954006d6f95a928166e659fd41a2cfffe08bffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffe016e6b65534968192801bfae866aafe5af86bae5fe5aa94ae997af955019557ff95655babedaafeb9566bffbaaaaaa95a001657aad66b955bf805a50096e595bfe6ae6904aaaa6af69cf6fffe875fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffff40a25a580a825904241ab57c57fea6b55eea56f6f91b91be86a905afa54a01b956afffe66fffbfffe6a656afaaabffa95166f6ae67969560b96aea5afff5a86ff5a6e290055b96baa5ccf7ff947b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0d446881a919a092
+c29656a97e6fa546f95aabb919aa2a95bf6e556abfffaa9afa5a69ae95d06d095156ff96ffbaf141a16fd6a6aab9a6ea5aae6ba5e5ea43fe6ead6950002e6e7b97edbfe404962fffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffd07602460740a91a1a2904569297f96effa29191aefae6e4a9bfaaff556917eaaefffffaf9aaba46f81bffbe664555fffffe9553f81fea6f9699affd696bd5beffffabe54525bdd2f11faefd4071cd3ff83fffffffffffffffffffffffffffffffffffffff
+fffffffffffffffe52b94aa9b4a6a0a6f9800404101faafea56aa9497d7fba81915e96a5aa66a96ffb7ae407faa6aafd6aafaab95aea9ea95a5ab96ba9a6e851ada5591aaffe5f5bf9b5b5a6a40bfe16922affe004b0acb940bffffffffffffffffffffffffffffffffffffffffffffffffffffff4a986da97c666456e5a
+28a00006eb9fdab95456bbe6fbd6ab9a9af9a55abaabfffd1a6ae569b5affeffffffe95154456baabfea6feb5e646529a505969fe4bfffae6e5bff641ff5a5a60bfe012890280003ffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffc7a62e674e569e59a06296024496a5affbd59525692eafda5b8eae6bfeaaaaebff9affe841bfe96bbfebebfebffffffa99fbafebfd5bea5b4415405a96bf9ba6ffabfaabe541ae7a5bd15fe6a2005004001fffffffffffffffffffffffffffffffffffffffff
+fffffffffffffe2a5c99ad2a9ba56a26058054194004557bffbfa40be6e565955abff5affeef4aa5bffe5ebffe97bdbf6bffea5aafabaea800696f96be69015a511a42a6e5e6be5ffabd6fa06525e6696abf00000014f901bffffffffffffffffffffffffffffffffffffffffffffffffffffff4597756e1652f9a61e465
+06469000406abff95a46abfa556bfe455bffa596abeaafe5af6ff95afebfffffd4559a991a6afbfe55bf6f9b540069590161aae90a5bfe6e96ae4140bf6399ffe4000014e591bfffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffd154a86fe5a0f8bf5a965105501494046aabf6beaa55051a95a9bfebbebee6ba65ba5ae6ff8fffd7e91bfefffeaeabfe9555eebb965a1956a965446a6ea56aa5a95fff56da6a06ee996ebe500004e5f82bffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff495694ab6aeb8af9eaaa498500a564056a952ea555a5babea5956fe579efff56feaa99bda9bfabea6fffffb556a556ffbffaa56c46aeaaa6a15560151bbb9691bffd26aafea42ae405aa6af8448dff91bffffffffffffffffffffffffffffffffffffffffffffffffffffffffd252745aaff9d26a65ab97d
+50495906a469556abba7fa900065556fffeaa5bffeaabea6abe940bfeaa9ffffffffeafd5055566687b57c1aa51aaaa542a565a9af95bfbf9ba5001ae6a8569bd2deeff41bffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffff45b6d1a9af9f18a69a7a2e1685001a81018006a96bb9581aa555ebaaabda5fffbfffbf9afe96afe6f85a56fba4156aabeeea955afffaafeaa9555046afeb9011abaa6d6d6a5006b9a901856a6fffa01ffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffe195a5b99b87592da69a0f4796840a594040145aeb9796ffab9ab66a406bfeaaa7feff999aabff9a6aeffffaabeaeffbeaabaaa6bfea994069a6aaaa6be5a56fee91fa6afd6900259a568455be8a906fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc21569161e7451d6a558b868
+6a501955405590045ba955a5a5a81fd566baffbaeada56fe95a9507aa95abe55599566aaa9555aaa7ffe6a44569505aa965a56ae96bde8956ea000a965fa446a16a01bffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffe05946014b6965a6b60a7d656a6868691aa456a956aaa566ae9bfaebbbee9566fffe45946beabbe95affaf96aaa9155a6a6af9a55bfabfaa90695554015516faafe906fa6e5010a6ba41a1506e402ffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffd0bd180426d1aeab8da3e559529afa41a41a645a95aff9955545aaff505517bfffeaeeefea6fff595556d452aeff956ab95ea5bfeaff9aabbbfa94069941056bfa5afb91550501afa1a4154ea40bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff56985540590926ae661641916
+99ab9b85b968555400665555feaaaabafff15bfafea9bfeae66fe5abfffffa05455bfaa6965655456fffffaaaaaaaaa966affffeafa696f95901506554106a801bffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffd5a26600595496aba286e6a45545aae46aa50016000009aaa555aaaa6eab95557fe9abb96a6af996a96e55bf9afe5aaa5a400054691ba57bbfaa945551591b91e9b5be6e6a901185a995694001afffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffff41899a45a6a6586c97ae65a9b8019985a1aa4646801507a901aa555aebfaaefffeaaaaabaaaa5bfaaebaa96e696950145a6a95aaaa1bfffaaea55aabaaefd2b90bfeaaeaa40a01e4010400001baffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0996796a6a66a5e596eb865b86
+555a91aa4006e91551a5aaaeaaaaa965a956bfea900babffe5ab6aeaa1aefba905aae95100001101abe5ae501e9401555aab92b96a95aa41910fffe540416affffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffff80699d258a9afe7955d5ebaaab9401abfe56aa5a0680156959015556aad056baa55505aaa6daba5affaaaaa6afffba95945594005a92556f57946baa96ff5ae9fe95fa50020006fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffff00656485226a79aa1fd97e59198176a541a968010646a6aa6aaaaaab9107b915ba6eafb955ba51aa57aeaaeae55815aaaaaa8006a460bffff699569ae547d5aa95aa5be500406ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc41159d225a5055a2bb9a95a0015
+651aabb441a56955400054001a96a99500bfa6beabb55bea8546aa951655941baa9016a90164000505656fee55995aaaffbfafebfe9401402fffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffff404066569ae00266a59a50696a506a6e51a646a8955016aa41a555a9515abaa565456befebf964065416baeaa699446be96ba951aa9e97feffea505401955ba5fffe950050007bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffc00009a64a751a66a19586a06c02a8026aa49115454055941aaaa999ba95aaa795a9515eaa96f956a9aaa9999abe9a9506eaa96ea52946bfad57f942baeebf97ea6994511000bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1b8001156699aaaa9a66ae596a51a
+fbfe9abfee96eafa666aae9559a6ba6a96ae951affffeae46a06ff99e97e69a5aaea5559aa91aaa45afa5fe8540444156bffff946000042fffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffff87ff90419558a66e9a6959aefa1affff4afffffffd16a6aa950669aaaaaaa8195abffaabe5596b85a686aea6f9aaa95e5bfaa9695aa515551fe94792aeffa56a6659a9000006ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffd6effd081555a56aa5a9646965abaa505ab9055f5695546d11005a90500111aa50a149af95ff6a51552aa5406a55695ad56aaaa6aa4690046a6ffe7ff91100166bfe401000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5aab0005a554aa6aa0196abe4196a
+556aaafe9555401146500001400066941a86a5b659aa6e956aa94696feabaae5af996ab9105010106aabe6fff96aaffaaaaea6054000bfffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffdb1019f910a56a9a869464a56492aaa555556a966d55554a905500640055001a9064015069416aa63e45e5549a414141bbfe50000015a815690bbf9751b945aa546ba554000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ff6bc01a9f00924695295a6a65005a916ab555bfaa956faaa641aa1001aa100000000a9014069a9a4642f46945aa56ffab955fb55a50104105919215bff96a97bbff44400050bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5ae0062e001e6611595a501a0556a56b
+eaaa95aebe55555aa80115a805505190195004691a94165afeab90b95aaa55aa6f555aa9f94000002af42d56bffa7a990a94400007ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffff025f808ba0089662416915699affeaaa5406aea95ba55401402aa469050a96a42d0169068005006915abeeebaaff6aa9452fd40004400000a1a59016fffff9affbe500001bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+c4027e02eb801255405929406a56aa52feeaa946bff002aaaeaa6aab909ae526ae46a550000005069b97afa7d95aabef9bff4000040010001a40001a4aff95f8006900001afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2e406f016b405a5585460047965a554591
+01a9aabd45a659966e555aaaabaaa665b90691aa56ba9a55faaabfbe5005afe506aaaa91280101005401801aabffff500000056fffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffff8fff01f40a78015d996544061aaa556a5510092aafaaaa999555a96b6aa9556e406aa9d6a916540500abd56fd6bff84690af911400000004505a0010401ae5594000006efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6
+fff403c49f8216812000001696ab556bbbeaba40aa50055956ebaa91aafea501a956a005bbafffa01016ffeeb95f9016c07ff950015ea506a555500544016a5400002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff66fffd06c07b94046100010140001aea6551
+615abd5b6555655aa41aabe05801a95bf55abf915551aea952e96b96a916a655be56ba95aa540566800914000000000005bfffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffd5ffffe07e06b88012900210006ba555501456a95abbe961a95566aae1abff4644016fd0026ae9565441a546b91be0bfe6ff95efa6afe56aef9106590010100005555bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff477
+ffff06f16b81299006ffeea8015baaaabaa401464696aa411545579abe69556aa9a56fff9ffa5afe400145ae9aa95aa5e5ae7fd41155500001051000000016afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbffffff82f55b4018006f92ff9e6a954056a4
+5a6faff91ae9551406bfefffee86a59fd156d5555514655ea505056efdba4bfc42d59a5000000005004025000bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff1bffffffc7f05b054590ec00280aa55aba55400155453f995500005a459bfffd05ae9bff85aa1a4fe2a915010467a5bf96fefa4006aba9954029000541000055bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffffffffffffffffcbfff
+ffffc2f42b28654bd064006aa6ea169aaaa5aaa94ae55669a56beffea9916fe81aef96bbf6be1bffbe906a51abf47fd902ae5040000000116a410014002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe27bfffffff0f70b54162d004005aa95aa6a5554
+51016ae4016a5aa5bfe9bfffffea9afefff91541699515505a506e7e5fe5b90546beaebaaa905540500001007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff43fffffffff4bf0b184a6000002e4065150555155aba546ff9455555d6f98556ffffa506e7d1afaffe517ffe556d03f5b8bfa01a6a955aa9a4000556a454100bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2fffff
+fffff8bf0b195542b940a81d55140641451000116a966aa901aaae9bfef9e56febbfe46ffb8af556e5aa95a06e96f96e925af9550001159940540001afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1dfeffffffffc7f0a1902afea91a425159a000500
+156f5bf859a005502bffbbfbffb946aafaab9104050056e01a565aa81abfe96f951699901900000000002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff47fffffbfffffc3f4a000095145a9150001405155aaaaaa8afa45051655079afff66eafa45aaafeffff99569bee905146bfd6fffe9a9554400055565581006fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3dfbffff
+fffffe2f8a2041affea569569640086a555bba9f959540111aaa646affeea5555469bfd15555a7ff902b680651fbfeaa56915805ae540000000019ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe07fffff6fbfffff2fd6185aaaaaaba595a154056aaa
+aaae56a5a95a5955556fe1656fa46eabaaaab91affaaa56aa5a9a4147a6fe40546af91aaa50405400006ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffff45ebfffdfaffffff4fee15954555aa9656aa451154050a9aba56fa40142555bffbe947a81556405b4640656ffbe97d91550a96f9ab551b5a6e950684000000affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0ff7ffebef
+bfffff8bfb2a1541000001565404045abbaababa9a900040254ffa9a9ffa6ffa5aebbfffff9545abfd6f592964ba9b9a4543a998000000000502ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0feffff9baeffffffcb6f44055506956a9aa505950641
+6aaa55552a954015ae95f4166ad6a804011957e6d57e06b9b95941694ea4656a51946a54405540007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffff0beebffdffb7e7ffffe3ffc40166aaaa65961400011aaaabeeaa66aeaa541aaa9ffafeaffffeabaaafffe606ff6abfa5e45901595a95abd6401900051404015ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff879dfffddffef
+fffffffa9bc1569a9651400000aeba01e4654511055ba5400005be6be56a5bf907a9569affa40bebe8f9be40a07bf952a416a4015460150006bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd17fffff7f9fe9fffffffe02c25495696a9500440056a5bf
+e9955afe5795a550067ffd9beabea6fe9056effebffa5abfd6069519064bab5d5444006aa8001abfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffe07eefffb9ef7beffffffff01e1401669500150656aabfebfea46ed02559e9555aaabff9a99affad5569695af45bf40b9bf5462504bfe685ff96abaa54002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe07defffddfbbddf
+ffffffff40910001aa565aa95001415aaa6feaebba9ffeafe6069fa5bfeabf55be9e9a56fed41ffea6fdbf4159255beaaa5569504001abffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff49bfefff7ffefbffffffffffc0d10005555541aa55aaa5aeaa
+659541aafffff95540abfeafea5afffbdaabffbdb905ebe0a641f91596bdbd57e90000006aefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffff83fdfbfffffffffefffffffffe1e0004150001155e441006aaa9ffa55411956a6a4a94baae6bffffebfff6a69eb86ff42ee5fa91ad106a91aa5056aa05097ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc26dfbffffff5effbf
+ffdbffffffe0000055556a55a556aaa555aa6aaa79795be559a56ffe7f96aafba9a6ffebee991af819bafde0295596910500000005affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0bfeffffbfffbefefffffffffffff801180011556aaa5565297f
+abeaab995a1502a556e995f97f56fa6ffff97d2e5b643ea6bf5af905a46d200015000005ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffff07fedfdffffffffbffffabffffffff6000005aa555405956a995019efaaeefffe55169aaffafffbffebfff95baf9bffeb9796ebf91580581f50000000405affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06ffdfdfffffffffffff
+b7fffbfffffa400401055105a56aaa9550065aa95a56eefa1482b997fefaeafff96ef9f86f5bdff96ef9ae801902e700000002fefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42efeffefefffffcfffffafffffffffffd0010406a95a911a456516
+aba55925004011aaebafffe7fe5be6afef6fdbd6fef97f87f6559445847fe40002ebbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff86dfbffafef7ffffffffffafbfffddfffff000056440010145a55aa9aa96ffbfefaaa96a0155516e4affabea56f9fefee6ffd6daad7d7a45901b40050baffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd2cfffffffffffff9ffff7e
+fffdf7fefffff8000010015a66a5004aa01545115a5aa995664006655911ae9166947afff69bbdbcbe86960ba82905b9aaefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0a7eddf3f3fffffffffffebdfafffddfffffe00151400005aa5005400
+5abaaa9566405510154006905040590540566aff59bdbf9bf42af41547e09bbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff87ebf76ffbfbffffbffffffbbe7eeb6fefffff8040016a400159016965a552aaa5a545a5551a014001d0640001412d677ff9af9ffa5681a955b0a6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2adebeffffffffffbfffdf7e
+effb7f7fbbfffff45500194415995000106ae9a91aa5aa4054000000000002451400566aeebf6ef8bbe07826a01859fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff195afef7fffffffebfffdf7fedbeeefebfefffffe000010116955505555
+05556554550490654000000400001050400061efdae69bbdae4b45011025ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffc2daabf7fffffffffffffeeffebf7ffaffdfffffffe81000155401544154555aaa9244444164000001aff902900000000d2af9eeb9ffd6a9640005067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2fdbfdbdfffffffffffffcffff
+77ff9efffffeff6faf40114001991a91a95695afba9400000500001bfffffffe94500002026e2adffdbe6a2e0144a6cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcafbf6ffffffffffbffffefffbbb7f66efbeff7b9681ea0184000051596a7
+b955555006a51501641affffffffffffffea004187e2e4bbffe6559420197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffff67efbcebffffffffffffeffbbfb7beadfbdbbeeeb80fd680150000115555545aaa99a9400150000bfffffffffffffffffe80046a56c2ebebd28190603ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbfff7fefffffffcfffffdfafefa
+fb3f7fbbdefae90bfd0600000005000156994004016900010007ffffffffffffffffffffa00559975a9fdbf9978489ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57edfeeefffffffffffeabdfdfff7eabf7ffbfb8002fe90180000000000044
+0100150104005006bffffffffffffffffffffff8084299a5a9a86f991846ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffe1fffdddfffffffefffffeff7ff9fedebefb6fe4006fe950090000000168001500015400000059fffffffffffffffffffffffff4220761a1e8a5ae94201bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbfdffffffffffeffffdfffffff7b
+efe2fbbef8056ae5506a90000000055a56400000000055016fffffffffffffffffffffffffc0042965d160a65a4142bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5bffffdfffffffffffffffefb3bfceefddfffd0040054000000000000104050
+054000000005bbffffffffffffffffffffffffffe000010429051e65a00afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+ffffe3ff7ffffffffffffffbffffffffeb796b7fff800000000006a5000000000000000000000003fffffffffffffffffffffffffffff8040005498051941907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffd3fffffffffffffffffffffffef6fb
+fffbdff80014000005afffea4140000000000000005aaffffffffffffffffffffffffffffffc020000410028050582fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffff4bf3fb43fffffffffdffffff6fffbf9bfefde00000000affffffffffeba80000
+000505fffffffffffffffffffffffffffffffffffe21210018100a500092fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+ffff17dff302fffffffffbffffffffbfbbcdffff44400001ffffffffffffffffe95aa6bfffffffffffffffffffffffffffffffffffffff226890514101a4002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffe2bfff702fffffffffffffff7fbffdf
+7edffd1400006fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21da65f8040496940ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffc1ffff603ffffffffffffffffffefffefbee050000affffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffff11baaabfffe5451902fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffc5ffff703ffffffff7fffffbf7fffeef7ff811000bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd805ffffffffabff915fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffcaffff207ffffffdbffffeffffef7df
+fffe005007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed85ffd2ffefdffff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffcaffff3af402fffefffffffffffdcdf7ef400002fffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffda86abfeaff1d7fdf03fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffc2ffff6fc000ffdfffffdffffbfaffbfb800001bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeac97ea4f7393ff141fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffc6ffffffd003fdfffffdffffffffffe
+fd00000bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9e3d6bdc8b7271ff040fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffc9fffffffea9ffffffeffefffedffbff000002fffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffe7e3d6f49577638bf8a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffc4ffffffd58affffffffdffffdfff7f400000bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f83cbfd0a776ac3f8201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffd2fffffffffffffffffebdffffffff4
+040002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8be0bcbe50f3aa8d0fe150bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffe23fffffffffffffffdfdffffffff8050000fffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffd7a61f8bf40f3c98b0bf4893fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+ffff16ffffffffffffffffffdffffffd0100007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff979003f8fe40f2cecb93f8050fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffff8ffffffffffffffffffdfbffffd010
+0002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57d840bf8fe01f1d447e2fd1243ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffc5ffffffffffffefffffeffff955044007ffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffff47a0402fe1be52f0fee3f4bf0511ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+ffffd27ffffffffff7fdffffffff915040002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5a80108be41bc83f4fd53fc3f50982fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffff0dfffffbffffffffbdbfbf9110000
+00bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff464000b5ff82f942fcff72fe1fd02e0bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffd27ffe583bffffffffeff4240000007ffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff879801fd7fd43f103fcbd557f8be89f82ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+ffffff5effff5d9affffffdfe5004000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e407ff5fe653f847fc7fa8afc6f54be47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffe29ffffff7fffffdfd1900000000
+bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8b82bffd7f5913f18b5c3e559fe4fc03ff07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffffc7afffffffffffe514000000002ffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffff2507ebf6fa6417d48ffc3fe2b7fc3e00bfd0bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+ffffffff4297ffffffff9100000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc440efad7f6508be10efd3e5a77fe0f682ffc2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffe40002fffe54000000000000bf
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2043cbf9fd002cf660f493fee3dff83c04bbf4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffe400000000000000000000bffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffe401af6e7f800b8fd41ffe2fd05eeff168119fd3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+ffffffffffffb90500000000000000bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1fff2ecfc442f0fe41ebe2fb24fbbfc1f4076f4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff410000000000000bffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffcf6e901ff1f612e5b0ffe0bbfff47e07efc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffb0340000000000bfffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff2ffffafe7e807fc2fc03fff4bdd53dfffe0fc1ffe2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffffffffffffff801900000016ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe3ffdfebcf402dfc3f802a9f83fea2f7effc2f0fff4bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffff800540016fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcbfffafe2f41b7f8bf807e8fc3f500f55bff0fcbfbc2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffffffffff900016fffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffff0ffffffc7952f760fd80be47d2ff80bcfdffd7d3fbf4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffffffffffffffffbffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2fffaff9f54a8b71ff80ffdbf0ff513e7e7ff4b9fcf8bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc2fbae7f2f40cdfa2ff00fe96b47a785f5a9ffe0dbfb97ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffff83fcebfcae525ffe3fd41f64afc26f84fdfebffd23fbe3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83fe77f8ca0baefd3f602f7cffe0fe993dffabff43fff2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80b7bdb0c02adbfdae903fa463f4ff583f396bffe6fef2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffc4bafff240f7e7bc8e203ebe7f7cbf156fdffbfffff1f5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09effd701df77bc9e10bdaa6f3e6f911eeffaffffe6f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08b7fc807cf7bf93d00fde9152fefc24dff9fffffcef4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffff8017f500bcdabf67c02fcef3f8fe7d14effff9bff6ff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd015f2077acdff4b843f8f4000ff3f00f7fe5aafffff8bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff413d01f73fdff0f50bf81a2fcff9f80f3ff9affffff4bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffd00abff9bfcff0f00ffcea7febfcb84f7fdbfffffff1bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff802fffaffdff4e02fecff6fe3fe3d0f25bfff3fffe4bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe007fffe57ff8c4befcff9ff3ff2e3f3fffd2ffbff0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffff802ffefffff441fed014483affcf2f7fb5bff4bf94ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe053bf96bff003ffffffabffffd75ff5a7ff1bfe46ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80237fffff07ffffffffffffff28ffff7f87ffe13ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffe052ad2fff0ffffeffffffffff81ffffa42fff803ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9115fe5bf7fffe52a565bfffffffbd60bfffe14fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4502fffffffeffdffffea5bffffbffeffff800fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffd0001abffffeffefffffffffffebfffffe4403ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee0025000066affafffffffffffdffff990500ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd00190890016bdbfffffffff90a950118007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffa0100049152105be540050011119690001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe40000000108001aafbbc41300400106ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94000010050215565180151400156fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffaabfee5000450200065156afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe40000006bfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff955aaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc
+grestore
+%%Trailer
diff --git a/lib/configure b/lib/configure
new file mode 100755 (executable)
index 0000000..985661d
--- /dev/null
@@ -0,0 +1,684 @@
+#! /bin/sh
+# This script is a hand-made configure script. It contains a lot of
+# code stolen from GNU autoconf. I removed all the code that was not
+# useful for configuring a LyX installation.
+
+
+
+
+
+####some configuration variables
+lyx_check_config=yes
+lyx_keep_temps=no
+srcdir=
+
+#### Parse the command line
+for ac_option do
+  case "$ac_option" in
+    -help | --help | -h)
+      cat << EOF
+Usage: configure [options] 
+Options: 
+  --help                   show this help lines
+  --keep-temps             keep temporary files (for debug. purposes)
+  --without-latex-config   do not run LaTeX to determine configuration
+EOF
+      exit 0;;
+    --without-latex-config)
+      lyx_check_config=no ;;
+    --keep-temps)
+      lyx_keep_temps=yes ;;
+  esac 
+done
+
+
+#### Checking for some echo oddities
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+#### I do not really know why this is useful, but we might as well keep it.
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+
+#### Guess the directory in which configure is located.
+ac_prog=$0
+srcdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` 
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+test "x$srcdir" = "x$ac_prog" && srcdir=.
+if test ! -r ${srcdir}/chkconfig.ltx ; then
+  echo "configure: error: cannot find chkconfig.ltx script"
+  exit 1
+fi
+
+
+#### Create the build directories if necessary
+for dir in bind doc kbd layouts templates reLyX ; do
+  test ! -d $dir && mkdir $dir
+done
+
+
+#### Searching some useful programs
+# Search LaTeX2e
+echo $ac_n "checking for a LaTeX2e program""... $ac_c"
+echo "$ac_t"""
+LATEX=
+for ac_prog in latex latex2e
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      LATEX="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$LATEX"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+## Check whether this is really LaTeX2e
+rm -f chklatex.ltx
+cat >chklatex.ltx <<EOF
+\\nonstopmode\\makeatletter
+\\ifx\\undefined\\documentclass\\else
+  \\message{ThisIsLaTeX2e}
+\\fi
+\\@@end
+EOF
+if eval ${LATEX} chklatex.ltx </dev/null 2>/dev/null \
+                       | grep 'ThisIsLaTeX2e' >/dev/null; then
+  :
+else
+  LATEX=
+  ac_result="not useable"
+fi
+rm -f chklatex.ltx chklatex.log
+  echo "$ac_t""$ac_result"
+  test -n "$LATEX" && break
+fi
+done
+
+if test -z "$LATEX" ; then
+  LATEX=none
+    lyx_check_config=no
+fi
+
+
+# Search for an installed reLyX or a ready-to-install one
+save_PATH=${PATH}
+PATH=${PATH}:./reLyX/
+echo $ac_n "checking for reLyX LaTeX-to-LyX translator""... $ac_c"
+echo "$ac_t"""
+RELYX=
+for ac_prog in reLyX
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      RELYX="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$RELYX"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$RELYX" && break
+fi
+done
+
+if test -z "$RELYX" ; then
+  RELYX=none
+fi
+
+PATH=${save_PATH}
+
+# Search something to process a literate document
+echo $ac_n "checking for a Literate programming processor""... $ac_c"
+echo "$ac_t"""
+LITERATE=
+for ac_prog in "noweave -delay -index"
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      LITERATE="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$LITERATE"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$LITERATE" && break
+fi
+done
+
+if test -z "$LITERATE" ; then
+  LITERATE=none
+fi
+
+if test "$LITERATE" = "none"; then LITERATE_EXT="none"; else LITERATE_EXT=".nw"; fi
+
+# Search for a Postscript interpreter
+echo $ac_n "checking for a Postscript interpreter""... $ac_c"
+echo "$ac_t"""
+GS=
+for ac_prog in gs
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      GS="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$GS"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$GS" && break
+fi
+done
+
+if test -z "$GS" ; then
+  GS=none
+fi
+
+
+# Search something to preview postscript
+echo $ac_n "checking for a Postscript previewer""... $ac_c"
+echo "$ac_t"""
+GHOSTVIEW=
+for ac_prog in gv ghostview
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      GHOSTVIEW="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$GHOSTVIEW"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$GHOSTVIEW" && break
+fi
+done
+
+if test -z "$GHOSTVIEW" ; then
+  GHOSTVIEW=none
+fi
+
+
+# Search a *roff program (used to translate tables in ASCII export)
+echo $ac_n "checking for a *roff formatter""... $ac_c"
+echo "$ac_t"""
+ROFF=
+for ac_prog in groff nroff
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      ROFF="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$ROFF"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$ROFF" && break
+fi
+done
+
+if test -z "$ROFF" ; then
+  ROFF=none
+fi
+
+ascii_roff_command=$ROFF
+test $ROFF = "groff" && ascii_roff_command="groff -t -Tlatin1 \$\$FName"
+test $ROFF = "nroff" && ascii_roff_command="tbl \$\$FName | nroff"
+
+# Search the ChkTeX program
+echo $ac_n "checking for ChkTeX""... $ac_c"
+echo "$ac_t"""
+CHKTEX=
+for ac_prog in chktex
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      CHKTEX="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$CHKTEX"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$CHKTEX" && break
+fi
+done
+
+if test -z "$CHKTEX" ; then
+  CHKTEX=none
+fi
+
+chktex_command=$CHKTEX
+test $CHKTEX = "chktex" && chktex_command="$CHKTEX -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38"
+
+# Search for a spellchecker
+echo $ac_n "checking for a spell-checker""... $ac_c"
+echo "$ac_t"""
+SPELL=
+for ac_prog in ispell
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      SPELL="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$SPELL"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$SPELL" && break
+fi
+done
+
+if test -z "$SPELL" ; then
+  SPELL=none
+fi
+
+
+# Search a Fax handling program
+echo $ac_n "checking for a fax driver""... $ac_c"
+echo "$ac_t"""
+FAX=
+for ac_prog in sendfax faxsend fax
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      FAX="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$FAX"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$FAX" && break
+fi
+done
+
+if test -z "$FAX" ; then
+  FAX=none
+fi
+
+if test $FAX = sendfax ; then
+  fax_command="sendfax -n -h '\$\$Host' -c '\$\$Comment' -x '\$\$Enterprise' -d '\$\$Name'@'\$\$Phone' '\$\$FName'"
+elif test $FAX = faxsend ; then
+  fax_command="faxsend '\$\$Phone' '\$\$FName'"
+elif test $FAX = fax ; then
+  fax_command="fax send '\$\$Phone' '\$\$FName'"
+else
+  fax_command="none"
+fi
+
+# Search for LinuxDoc support
+echo $ac_n "checking for SGML-tools 1.x (LinuxDoc)""... $ac_c"
+echo "$ac_t"""
+LINUXDOC=
+for ac_prog in sgml2lyx
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      LINUXDOC="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$LINUXDOC"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$LINUXDOC" && break
+fi
+done
+
+if test -z "$LINUXDOC" ; then
+  LINUXDOC=none
+fi
+
+chk_linuxdoc=no
+if test $LINUXDOC != none; then
+  chk_linuxdoc=yes
+  linuxdoc_cmd="\\def\\haslinuxdoc{yes}"
+fi
+
+# Search for DocBook support
+echo $ac_n "checking for SGML-tools 2.x (DocBook)""... $ac_c"
+echo "$ac_t"""
+DOCBOOK=
+for ac_prog in sgmltools
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      DOCBOOK="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$DOCBOOK"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$DOCBOOK" && break
+fi
+done
+
+if test -z "$DOCBOOK" ; then
+  DOCBOOK=none
+fi
+
+chk_docbook=no
+if test $DOCBOOK != none; then
+  chk_docbook=yes
+  docbook_cmd="\\def\\hasdocbook{yes}"
+fi
+
+
+# Search for a spool command
+echo $ac_n "checking for a spool command""... $ac_c"
+echo "$ac_t"""
+LPR=
+for ac_prog in lp lpr
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog ; ac_word=$2
+if test -n "$ac_word"; then
+  echo $ac_n "+checking for \"$ac_word\"""... $ac_c"
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -x $ac_dir/$ac_word; then
+      LPR="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+
+  if test -n "$LPR"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+  echo "$ac_t""$ac_result"
+  test -n "$LPR" && break
+fi
+done
+
+if test -z "$LPR" ; then
+  LPR=none
+fi
+
+case $LPR in
+  lp) print_spool_command=lp
+      print_spool_printerprefix="-d ";;
+ lpr) print_spool_command=lpr
+      print_spool_printerprefix="-P";;
+   *) :;; # leave to empty values
+esac
+
+#### Explore the LaTeX configuration
+echo $ac_n "checking LaTeX configuration""... $ac_c"
+# First, remove the files that we want to re-create
+rm -f textclass.lst packages.lst chkconfig.sed
+if test ${lyx_check_config} = no ; then
+  echo "$ac_t""default values"
+else
+  echo "$ac_t""auto"
+  rm -f wrap_chkconfig.ltx chkconfig.vars chkconfig.classes chklayouts.tex
+  cat >wrap_chkconfig.ltx <<EOF
+\\newcommand\\srcdir{${srcdir}}
+${linuxdoc_cmd}
+${docbook_cmd}
+\\input{${srcdir}/chkconfig.ltx}
+EOF
+  ## Construct the list of classes to test for.
+  # build the list of available layout files and convert it to commands 
+  # for chkconfig.ltx 
+  for file in ./layouts/*.layout ${srcdir}/layouts/*.layout ; do 
+    case $file in
+      */\*.layout) ;;
+      *) echo $file ;;
+    esac
+  done | sed -e 's%^.*layouts/\(.*\)\.layout$%\\TestDocClass{\1}%'\
+             > chklayouts.tex
+  eval ${LATEX} wrap_chkconfig.ltx 2>/dev/null | grep '^\+'
+  eval `cat chkconfig.vars | sed 's/-/_/g'`
+fi
+
+# Do we have all the files we need? Useful if latex did not run
+echo creating textclass.lst 
+# if textclass.lst does not exist (because LaTeX did not run), 
+# then provide a standard version.
+if test ! -f textclass.lst ; then
+  cat >textclass.lst <<EOF
+# This file declares layouts and their associated definition files
+# (include dir. relative to the place where this file is).
+# It contains only default values, since chkconfig.ltx could not be run 
+# for some reason. Run ./configure if you need to update it after a
+# configuration change.  
+article        article article
+report report  report
+book   book    book
+linuxdoc       linuxdoc        linuxdoc
+letter letter  letter
+EOF
+fi
+
+# if chkconfig.sed does not exist (because LaTeX did not run), 
+# then provide a standard version.
+if test ! -f chkconfig.sed ; then
+  cat >chkconfig.sed <<EOF
+s/@.*@/???/g
+EOF
+fi
+
+echo creating packages.lst
+# if packages.lst does not exist (because LaTeX did not run), 
+# then provide a standard version.
+if test ! -f packages.lst ; then
+  cat >packages.lst <<EOF
+# This file should contain the list of LaTeX packages that have been
+# recognized by LyX. Unfortunately, since configure could not find
+# your LaTeX2e program, the tests have not been run. Run ./configure
+# if you need to update it after a configuration change.
+
+EOF
+fi
+
+echo creating doc/LaTeXConfig.lyx
+echo "s/@chk_linuxdoc@/$chk_linuxdoc/g" >> chkconfig.sed
+echo "s/@chk_docbook@/$chk_docbook/g" >> chkconfig.sed
+sed -f chkconfig.sed ${srcdir}/doc/LaTeXConfig.lyx.in >doc/LaTeXConfig.lyx
+
+echo creating lyxrc.defaults
+rm -f lyxrc.defaults
+cat >lyxrc.defaults <<EOF
+# This file has been automatically generated by LyX' lib/configure
+# script. It contains default settings that have been determined by
+# examining your system. PLEASE DO NOT MODIFY ANYTHING HERE! If you
+# want to customize LyX, make a copy of the file LYXDIR/lyxrc as
+# ~/.lyx/lyxrc and edit this file instead. Any setting in lyxrc will
+# override the values given here.
+\\latex_command "$LATEX"
+\\relyx_command "$RELYX"
+\\literate_command "$LITERATE"
+\\literate_extension "$LITERATE_EXT"
+\\ps_command "$GS"
+\\view_ps_command "$GHOSTVIEW -swap"
+\\view_pspic_command "$GHOSTVIEW"
+\\ascii_roff_command "$ascii_roff_command"
+\\chktex_command "$chktex_command"
+\\spell_command "$SPELL"
+\\fax_command "$fax_command"
+\\print_spool_command "$print_spool_command"
+\\print_spool_printerprefix "$print_spool_printerprefix"
+\\font_encoding "$chk_fontenc"
+EOF
+
+# Remove superfluous files if we are not writing in the main lib
+# directory 
+for file in lyxrc.defaults textclass.lst packages.lst \
+            doc/LaTeXConfig.lyx ; do
+  # we rename the file first, so that we avoid comparing a file with itself
+  mv $file $file.new
+  if test -r $srcdir/$file && diff $file.new $srcdir/$file >/dev/null 2>/dev/null ; 
+  then 
+    echo "removing $file, which is identical to the system global version"
+    rm -f $file.new
+  else
+    mv $file.new $file
+  fi
+done
+
+
+# Final clean-up
+if test $lyx_keep_temps = no ; then
+rm -f chkconfig.sed chkconfig.vars wrap_chkconfig.* chklayouts.tex \
+      missfont.log
+fi
diff --git a/lib/configure.cmd b/lib/configure.cmd
new file mode 100755 (executable)
index 0000000..4814427
--- /dev/null
@@ -0,0 +1,243 @@
+/* OS/2 REXX : The lib/configure.cmd; Don't delete this comment. */
+call RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs'
+call SysLoadFuncs
+env='OS2ENVIRONMENT'
+EMTEXDIR=value('EMTEXDIR',,env)
+X11ROOT=value('X11ROOT',,env)
+latex_script='chkconfig.ltx'
+lyxrc_defaults='lyxrc.defaults'
+lyx_check_config='yes'
+rc_fontenc='default'
+
+parse arg option '=' srcdir
+select
+   when option='-h'|option='-help'|option='--help' then do
+  say 'Usage: configure [options]'
+  say 'Options:'
+  say '  --help                   show this help lines'
+  say '  --without-latex-config   do not run LaTeX to determine configuration'
+  exit
+  end
+   when option='--without-latex-config' then
+  lyx_check_config='no'
+   when option='--srcdir' then
+  srcdir=translate(srcdir,'\','/')
+   otherwise
+  nop
+end  /* select */
+if srcdir='' then do
+   parse source 'OS/2 COMMAND ' script
+say 'script =' script
+   srcdir=filespec('drive',script)strip(filespec('path',script),'T','\')
+end
+
+rc=SysFileTree(srcdir'\'latex_script,found,'F')
+if found.0 = 0 then do
+   say "configure: error: cannot find "srcdir'\'latex_script" script"
+   exit 1
+end
+curdir=directory()
+if \(curdir=srcdir) then do
+  call SysFileTree 'layouts', 'found', 'D'
+  if found.0 = 0 then do
+    call SysMkDir 'bind'
+    call SysMkDir 'doc'
+    call SysMkDir 'kbd'
+    call SysMkDir 'layouts'
+    call SysMkDir 'templates'
+  end
+  'cmd /c copy /v' srcdir'\layouts\*.layout layouts'
+  if \(rc=0) then
+    say 'Error! copying layout files.'
+end
+curdir=translate(curdir,'/','\')
+srcdir=translate(srcdir,'/','\')
+call SysFileTree EMTEXDIR'\bin\latex.cmd', 'found', 'F'
+if found.0 = 0 then LATEX='latex2e'
+else LATEX='latex'
+if \(''=SysSearchPath('PATH','GS.EXE')) then
+  GS='gs'
+else
+if \(''=SysSearchPath('PATH','GSOS2.EXE')) then
+  GS='gsos2'
+else
+  GS='none'
+if \(''=SysSearchPath('PATH','GV.EXE')) then
+  GHOSTVIEW='gv'
+else
+if \(''=SysSearchPath('PATH','GHOSTVIEW.EXE')) then
+  GHOSTVIEW='ghostview'
+else
+  GHOSTVIEW='none'
+if (''=SysSearchPath('PATH','SGML2LYX.CMD')) then
+  SGMLTOOLS='none'
+else
+  SGMLTOOLS='sgml2lyx'
+if (''=SysSearchPath('PATH','CHKTEX.EXE')) then
+  CHKTEX='none'
+else
+  CHKTEX='chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38'
+if \(''=SysSearchPath('PATH','ISPELL.EXE')) then
+  SPELL='ispell'
+else
+  SPELL='none'
+if (''=SysSearchPath('PATH','NOWEAVE.EXE')) then do
+  LITERATE='none'
+  LITERATE_EXT='none'
+end
+else do
+  LITERATE='noweave -delay -index'
+  LITERATE_EXT='.nw'
+end
+call SysFileTree 'reLyX\reLyX.cmd', 'found', 'F'
+if found.0 = 0 then
+  if (''=SysSearchPath('PATH','reLyX.cmd')) then
+    RELYX='none'
+  else
+    RELYX='reLyX.cmd'
+else
+  RELYX='reLyX.cmd'
+call SysFileDelete 'chklatex.ltx'
+rc=lineout('chklatex.ltx','\nonstopmode\makeatletter')
+rc=lineout('chklatex.ltx','\ifx\undefined\documentclass\else')
+rc=lineout('chklatex.ltx','  \message{ThisIsLaTeX2e}')
+rc=lineout('chklatex.ltx','\fi')
+rc=lineout('chklatex.ltx','\@@end')
+rc=lineout('chklatex.ltx')
+'cmd /c 'LATEX' chklatex.ltx>nul'
+call SysFileSearch 'NotLaTeX2e', 'chklatex.log', chklatex
+if chklatex.0 > 0 then LATEX=''
+
+rc=SysFileDelete('textclass.lst')
+rc=SysFileDelete('packages.lst')
+rc=SysFileDelete('chkconfig.sed')
+if \(lyx_check_config='no') then
+do
+  rc=SysFileTree(srcdir'\layouts\*.layout',found,'FO')
+  rc=SysFileDelete('chklayouts.tex')
+  rc=SysFileDelete('chkconfig.vars')
+  if found.0>0 then
+    do num=1 to found.0
+      parse value filespec('name',found.num) with DocClass '.layout'
+      parse value DocClass with mainClass '_' subClass
+      if ''=subClass then
+        rc=lineout('chklayouts.tex','\TestDocClass{'DocClass'}')
+      else     /* Not used, or must be empty? */
+        rc=lineout('chklayouts.tex','\TestDocClass['mainClass'.cls]{'DocClass'}')
+    end
+  rc=lineout('chklayouts.tex')
+  sgmltools_cmd=''
+  chk_sgmltools='no'
+  if SGMLTOOLS='sgml2lyx' then
+   do
+    chk_sgmltools='yes'
+    sgmltools_cmd='\def\hassgmltools{}'
+   end
+  rc=SysFileDelete('wrap_chkconfig.ltx')
+  rc=lineout('wrap_chkconfig.ltx','\newcommand\srcdir{'srcdir'}')
+  rc=lineout('wrap_chkconfig.ltx',sgmltools_cmd)
+  rc=lineout('wrap_chkconfig.ltx','\input{'srcdir'/chkconfig.ltx}')
+  rc=lineout('wrap_chkconfig.ltx')
+  'cmd /c 'LATEX' wrap_chkconfig.ltx'
+  size=stream('chkconfig.sed','c','query size')
+  rc=stream('chkconfig.sed','c','open')
+  if rxfuncquery(SysAddRexxMacro) then
+    rc=stream('chkconfig.sed','c','seek +'size)
+  else
+    rc=stream('chkconfig.sed','c','seek + 'size' write')
+  rc=lineout('chkconfig.sed','s/@chk_sgmltools@/'chk_sgmltools'/g')
+  rc=lineout('chkconfig.sed')
+  call SysFileSearch 'chk_fontenc=', 'chkconfig.vars', fontenc
+  if fontenc.0 > 0 then parse var fontenc.1 chk"='"rc_fontenc"'"
+end
+
+call SysFileTree 'textclass.lst', 'file', 'FO'
+if file.0=0 then
+do
+   rc=lineout('textclass.lst','# This file declares layouts and their associated definition files')
+   rc=lineout('textclass.lst','# (include dir. relative to the place where this file is).')
+   rc=lineout('textclass.lst','# It contains only default values, since chkconfig.ltx could not be run')
+   rc=lineout('textclass.lst','# for some reason. Run ./configure if you need to update it after a')
+   rc=lineout('textclass.lst','# configuration change.')
+   rc=lineout('textclass.lst','article article article')
+   rc=lineout('textclass.lst','report  report  report')
+   rc=lineout('textclass.lst','book    book    book')
+   rc=lineout('textclass.lst','linuxdoc        linuxdoc        linuxdoc')
+   rc=lineout('textclass.lst','letter  letter  letter')
+   rc=lineout('textclass.lst')
+   rc=lineout('chkconfig.sed','s/@.*@/???/g')
+   rc=lineout('chkconfig.sed')
+   rc_graphics='none'
+end
+
+call SysFileTree 'chkconfig.sed', 'file', 'FO'
+if file.0=0 then
+do
+   rc=lineout('chkconfig.sed','s/@.*@/???/g')
+   rc=lineout('chkconfig.sed')
+end
+
+call SysFileTree 'packages.lst', 'file', 'FO'
+if file.0=0 then
+do
+   rc=lineout('packages.lst','# This file should contain the list of LaTeX packages that have been')
+   rc=lineout('packages.lst','# recognized by LyX. Unfortunately, since configure could not find')
+   rc=lineout('packages.lst','# your LaTeX2e program, the tests have not been run. Run configure')
+   rc=lineout('packages.lst','# if you need to update it after a configuration change.')
+   rc=lineout('packages.lst')
+end
+
+say 'creating doc/LaTeXConfig.lyx'
+'sed -f chkconfig.sed 'srcdir'/doc/LaTeXConfig.lyx.in >doc\LaTeXConfig.lyx'
+call SysFileDelete 'chkconfig.sed'
+call SysFileDelete 'chkconfig.vars'
+call SysFileDelete 'wrap_chkconfig.ltx'
+call SysFileDelete 'wrap_chkconfig.log'
+call SysFileDelete 'chklatex.ltx'
+call SysFileDelete 'chklatex.log'
+call SysFileDelete 'chklayouts.tex'
+call SysFileDelete 'missfont.log'
+
+say 'creating 'lyxrc_defaults
+rc=SysFileDelete(lyxrc_defaults)
+if rxfuncquery(SysAddRexxMacro) then
+  rc=stream(lyxrc_defaults,'c','seek =0')
+rc=SysFileDelete(X11ROOT'\XFree86\bin\fsend2.cmd')
+rc=lineout(lyxrc_defaults,'\latex_command "'LATEX'"')
+rc=lineout(lyxrc_defaults,'\relyx_command "'RELYX'"')
+rc=lineout(lyxrc_defaults,'\literate_command "'LITERATE'"')
+rc=lineout(lyxrc_defaults,'\literate_extension "'LITERATE_EXT'"')
+rc=lineout(lyxrc_defaults,'\ps_command "'GS'"')
+rc=lineout(lyxrc_defaults,'\view_ps_command "'GHOSTVIEW' -swap"')
+rc=lineout(lyxrc_defaults,'\view_pspic_command "'GHOSTVIEW'"')
+rc=lineout(lyxrc_defaults,'\ascii_roff_command "groff -t -ms -Tlatin1"')
+rc=lineout(lyxrc_defaults,'\chktex_command "'CHKTEX'"')
+rc=lineout(lyxrc_defaults,'\spell_command "'SPELL'"')
+if \(''=SysSearchPath('PATH','fsend.exe')) then
+do
+  rc=lineout(X11ROOT'\XFree86\bin\fsend2.cmd','/*A wrapper for fsend.exe*/')
+  rc=lineout(X11ROOT'\XFree86\bin\fsend2.cmd','parse arg "-p" phone "-i" fname "-d" name "-m" comment')
+  rc=lineout(X11ROOT'\XFree86\bin\fsend2.cmd','"gs -sDEVICE=tiffg3 -sOutputFile=temp_tiff.TIF -dNOPAUSE "fname" -c quit"')
+  rc=lineout(X11ROOT'\XFree86\bin\fsend2.cmd','"fsend -p"phone" -itemp_tiff.TIF -d"name" -m"comment')
+  rc=lineout(X11ROOT'\XFree86\bin\fsend2.cmd','"rm -f temp_tiff.TIF"')
+  rc=lineout(X11ROOT'\XFree86\bin\fsend2.cmd')
+  rc=lineout(lyxrc_defaults,'\fax_command "fsend2 -p'"'$$Phone' -i'$$FName' -d'$$Name' -m'$$Comment'"'"')
+end
+if \(''=SysSearchPath('PATH','lp.exe')) then
+do
+  rc=lineout(lyxrc_defaults,'\print_spool_command "lp"')
+  rc=lineout(lyxrc_defaults,'\print_spool_printerprefix "-d"')
+end
+else
+if \(''=SysSearchPath('PATH','lpr.exe')) then
+do
+  rc=lineout(lyxrc_defaults,'\print_spool_command "lpr"')
+  rc=lineout(lyxrc_defaults,'\print_spool_printerprefix "-P"')
+end
+else
+do
+  rc=lineout(lyxrc_defaults,'\print_spool_command ""')
+  rc=lineout(lyxrc_defaults,'\print_spool_printerprefix ""')
+end
+rc=lineout(lyxrc_defaults,'\font_encoding "'rc_fontenc'"')
+rc=lineout(lyxrc_defaults)
diff --git a/lib/doc/.cvsignore b/lib/doc/.cvsignore
new file mode 100644 (file)
index 0000000..681bb62
--- /dev/null
@@ -0,0 +1 @@
+LaTeXConfig.lyx
diff --git a/lib/doc/BUGS.lyx b/lib/doc/BUGS.lyx
new file mode 100644 (file)
index 0000000..b761962
--- /dev/null
@@ -0,0 +1,520 @@
+#This file was created by <lasgoutt> Thu Jul  1 15:12:26 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Known BUGS in LyX
+\layout Date
+
+Last updated 1999-07-01
+\layout Standard
+
+This file contains a compilation of bug reports that have been sent to the
+ mailing list 
+\family sans 
+lyx-devel@lists.lyx.org
+\family default 
+.
+ We try to keep it up to date as far as possible, but of course it's better
+ to spend time fixing bugs instead of archiving them.
+ Since we cannot reproduce all of these bugs, please send us any details
+ and updates and, of course, fixes.
+\layout Section
+
+How do I submit a bug report?
+\layout Standard
+
+All bug reports should always include information about which versions of
+ LyX the bug appears in (you will be surprised to know how many forget that
+ information).
+ Try to get the latest version of LyX and see if the problem still exist
+ before complaining.
+ New releases will typically contain bug fixes :-) 
+\layout Standard
+
+Remember: the less time the developers have to spend to understand and fix
+ a problem, the faster the problem is likely to be fixed.
+\layout Standard
+
+Other than that, the good bug report is characterized by including 
+\emph on 
+all
+\emph default 
+ relevant information and only that.
+ It's always relevant what the problem is, and how the problem is triggered.
+ If it's a compilation problem, include 
+\family typewriter 
+\size small 
+config.log
+\family default 
+\size default 
+ and information about your system (
+\family typewriter 
+\size small 
+uname -a
+\family default 
+\size default 
+), which compiler you use, versions of libraries and so on.
+\layout Standard
+
+If you found a bug that causes LyX to crash, please take the time to produce
+ a backtrace with a non-stripped lyx executable.
+ The one built in the source directory is per default not stripped, while
+ the installed binary is stripped.
+ So, run LyX from gdb by typing 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\family typewriter 
+\size small 
+gdb /users/bozo/lyx-1.0.x/src/lyx
+\family default 
+\size default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+ and then 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\family typewriter 
+\size small 
+run
+\family default 
+\size default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ Make LyX crash and you'll return to gdb.
+ Use 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\family typewriter 
+\size small 
+bt
+\family default 
+\size default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+ to produce a backtrace and include the output in the bug report
+\begin_float footnote 
+\layout Standard
+
+if you want to be thorough, use the 
+\latex no_latex 
+
+\begin_inset Quotes eld
+\end_inset 
+
+info locals
+\begin_inset Quotes erd
+\end_inset 
+
+ and 
+\begin_inset Quotes eld
+\end_inset 
+
+up
+\begin_inset Quotes erd
+\end_inset 
+
+ commands to print out the values of local variables at a few stack levels.
+\end_float 
+.
+ If possible, then a description of a way to reproduce the bug is more important
+ than a backtrace, because then we have the possibility to roll our own
+ backtrace.
+ If the bug is not easily reproducible, a backtrace is essential, because
+ then that might be all we've got.
+\layout Standard
+
+Bug reports should be mailed to the developer's list at
+\family sans 
+ lyx-devel@lists.lyx.org
+\family default 
+.
+ However to avoid that we get cluttered with the same bug reports from many
+ people, we recommend that you either check the archive of the developer's
+ mailing list at 
+\family typewriter 
+http://www.mail-archive.com/lyx-devel@lists.lyx.org/
+\family default 
+ or subscribe to the list first.
+ If you want to be a real sport, you provide a patch along with the bug
+ report.
+\layout Section
+
+Bugs
+\layout Enumerate
+
+The LyX keyboard mappings, including dead-keys, do not work in pop-up dialogs.
+ You can try cut & paste from a text editor.
+\layout Enumerate
+
+It is not possible to enter 
+\family typewriter 
+
+\backslash 
+dj{}
+\family default 
+ or 
+\family typewriter 
+
+\backslash 
+DJ{}
+\family default 
+ as LaTeX accent insets; this means that these characters are not available
+ to people who want to use latin1 as encoding.
+\layout Enumerate
+
+On a very small (
+\begin_inset Formula \( 640\times 480 \)
+\end_inset 
+
+?) screen, math panel pops up the subpanels off screen.
+ It should check it's position, and put the panels somewhere visible.
+\layout Enumerate
+
+
+\family sans 
+Options\SpecialChar \menuseparator
+Keyboard
+\family default 
+ has no 
+\family sans 
+Apply
+\family default 
+ and 
+\family sans 
+Cancel
+\family default 
+ buttons.
+ [
+\emph on 
+Note from Asger: Well, I think the entire form should be redesigned, such
+ that it isn't dynamic.
+ Also, it should not be possible to select a non-existing keyboard mapping.
+ In other words, the drop-down list should show exactly those that are available.
+ Similarly, the charset definition should be a droplist too.
+\emph default 
+] 
+\layout Enumerate
+
+The vertical scroll bar of the preamble window is broken.
+ If you resize the window, strange things can happen, including a fatal
+ crash! This is a bug in XForms.
+ [
+\emph on 
+Note from Jean-Marc: things are a bit better now, but not perfect.
+
+\emph default 
+ ]
+\layout Enumerate
+
+Navigation by table of contents (ToC) is limited by Section Number Depth,
+ rather than ToC Depth.
+ If you have Section Number Depth of 1, but ToC of 2, clicking on any of
+ the numbered sections takes you to the right point in the document.
+ But clicking on a (unnumbered) Subsection takes you to the beginning of
+ the Section, rather than to the subsection.
+\layout Enumerate
+
+If you have a footnote (or margin note) in a section heading, the text after
+ this not will not appear in the ToC popup.
+\layout Enumerate
+
+When several insets are placed consecutively (this can happen with error
+ insets), clicking on an inset can result in opening the wrong one.
+ A workaround is to use 
+\family sans 
+C-o
+\family default 
+, with the cursor placed just before the desired inset.
+\layout Enumerate
+
+The 
+\family sans 
+Citation Reference
+\family default 
+ command doesn't escape 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\family typewriter 
+_
+\family default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+ characters in the remarks field when generating TeX documents.
+ You have to type 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\family typewriter 
+
+\backslash 
+_
+\family default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+ by hand in these remarks if you want to use an underscore.
+ Similar for other special characters.
+\layout Enumerate
+
+If a figure is larger than one page down press would have taken you, the
+ page down fails and you are left where you started.
+ [
+\emph on 
+Comment: behavior in this situation is improved but still imperfect.
+ LyX now does the pageup or pagedown, but jumps from the top to the bottom
+ of the figure, potentially skipping part of the middle.]
+\layout Enumerate
+
+If you delete marked text, the text is not deleted, but 
+\begin_inset Quotes eld
+\end_inset 
+
+cut
+\begin_inset Quotes erd
+\end_inset 
+
+, which deletes the current text in the clipboard.
+\layout Enumerate
+
+Sometimes, when you delete large sections of text, the screen will appear
+ empty, and you have to use the scrollbar to make the cursor visible again.
+\layout Enumerate
+
+You can not export a selection from LyX to another X11 program.
+ Not even between two instances of LyX.
+ You can only paste into LyX using the middle mouse button.
+\layout Enumerate
+
+If you have edited and then undo all changes, then the 
+\begin_inset Quotes eld
+\end_inset 
+
+Changed
+\begin_inset Quotes erd
+\end_inset 
+
+ status is not reset.
+\layout Enumerate
+
+If you have a margin note in itemize text and the first paragraph of the
+ margin note is also itemize text it is possible to 
+\begin_inset Quotes eld
+\end_inset 
+
+depth-increment
+\begin_inset Quotes erd
+\end_inset 
+
+ and make the first itemize paragraph in the margin note deeper on-screen
+ even though LaTeX doesn't permit this (and ignores this).
+\layout Enumerate
+
+A table which is larger than the screen manages to go outside the red lines
+ drawn by a table float.
+ Same goes for figures.
+ A similar thing can happen with large mathematical equations.
+ Resize your LyX window.
+\layout Enumerate
+
+It is not possible to include footnotes in tables.
+\layout Enumerate
+
+The numbering policy of LyX does not exactly match what LaTeX does for sections:
+ for example, LyX resets subsection 
+\emph on 
+and
+\emph default 
+ subsubsection counters at a new section, while LaTeX does not reset the
+ subsubsection counter.
+ As a workaround, you can add 
+\family typewriter 
+
+\backslash 
+setcounter{subsubsection}{0}
+\family default 
+, marked as TeX, just after the section heading.
+\layout Enumerate
+
+LyX is not able to render correctly 
+\family sans 
+Paragraph
+\family default 
+ and 
+\family sans 
+SubParagraph
+\family default 
+ headings which, in standard LaTeX classes, are just placed at the start
+ of the following paragraph.
+ This can be confusing.
+\layout Enumerate
+
+LyX sometimes gets caught by TeX fonts ligatures: for example, in the sentence
+\begin_inset Quotes eld
+\end_inset 
+
+He said 'Hello!'
+\begin_inset Quotes erd
+\end_inset 
+
+, the single and double closing quotes come out inverted (just try to preview
+ this paragraph).
+ The only sollution is to write it as 
+\begin_inset Quotes eld
+\end_inset 
+
+He said 'Hello!'
+\latex latex 
+
+\backslash 
+textcompwordmark
+\latex default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+, which is admittedly not very nice.
+\layout Enumerate
+
+When going into math text mode (which results in 
+\family typewriter 
+
+\backslash 
+mathrm{}
+\family default 
+ in the LaTeX output) it is impossible to enter punctuation, as this is
+ always put back into math mode.
+\layout Enumerate
+
+If a LaTeX command is partially bold, it doesn't generate correct LaTeX
+ commands.
+ LaTeX commands written using the LaTeX layout or the LaTeX font state should
+ always use the standard font (this means no font changing commands should
+ be allowed).
+ Don't use font changing commands when you are in LaTeX mode.
+\layout Enumerate
+
+If you change font in a special word (like in 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\bar under 
+L
+\bar default 
+aTeX
+\begin_inset Quotes erd
+\end_inset 
+
+), the whole word will have the font of the first character in dvi output.
+ This can be solved by using for example 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\bar under 
+L
+\bar default 
+\latex latex 
+{}
+\latex default 
+aTeX
+\begin_inset Quotes erd
+\end_inset 
+
+, thus disabling the automatic translation to the macro 
+\family typewriter 
+
+\backslash 
+LaTeX
+\family default 
+.
+\layout Enumerate
+
+In a LyX-Code environment, you can't have an empty line.
+ You'll have to type a single space to make it work.
+\layout Enumerate
+
+In LyX-Code and in paragraphs written completely using the typewriter font,
+ all spaces are protected so that LaTeX isn't able to perform correct formatting
+ of the text.
+ You'll have to insert linebreaks manually.
+\layout Enumerate
+
+It is possible to use the subfigure style to get two small figures (side-by-side
+), each with a caption and label, and then a common caption and label for
+ the entire figure.
+ LyX currently seems to support this in the pop-up menu for an eps figure.
+ However, I am unable to successfully add labels to each of the subfigures.
+ If I insert a label next to each subfigure, the labels appear fine and
+ can be cross-referenced in the usual manner.
+ However, the actual output (dvi or ps) does not distinguish between the
+ two labels and any cross-reference gets the same number.
+ You have to use plain old raw LaTeX mode and do this by hand.
+\layout Enumerate
+
+If you close a document while some included images are still in the rendering
+ phase, all images in newly opened documents will stay in the rendering
+ phase, making it impossible to preview or print the document.
+ You can't fix this by killing gs-processes, because there aren't any.
+ You'll have to restart LyX to work with figures again.
+\layout Enumerate
+
+If you preview an empty document, no dvi-file will be created, and xdvi
+ will not start.
+ We should present a kind warning to the user rather than be silent.
+\layout Enumerate
+
+Document that includes others: if LaTeX reports an error during the execution
+ of LaTeX on a sub-document as a chain reaction of executing LaTeX on a
+ higher level document, LyX places the error window on the correct position
+ of the higher level doc, not of the lower one.
+ There might be some spurious document corruption effects related to this.
+ Be careful with raw LaTeX in sub-documents.
+\the_end
diff --git a/lib/doc/LaTeXConfig.lyx.in b/lib/doc/LaTeXConfig.lyx.in
new file mode 100644 (file)
index 0000000..04e9d1d
--- /dev/null
@@ -0,0 +1,1284 @@
+#This file was created by <mike> Wed Jun  9 15:30:54 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language default
+\inputencoding default
+\fontscheme default
+\graphics dvips
+\paperfontsize 0
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 2
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Title
+
+Inventory of your LaTeX configuration
+\layout Author
+
+Automatically generated by LyX (do not edit).
+\layout Date
+
+@chk_date@
+\layout Standard
+
+This file describes the different LaTeX add-ons that LyX can handle.
+ Below you'll find six sections:
+\layout Enumerate
+
+Some basic details about your LaTeX installation.
+ In particular, you should make sure that your version of LaTeX is recent
+ enough.
+\layout Enumerate
+
+Some common fonts that LyX knows about.
+ This is rather sparse at the moment.
+\layout Enumerate
+
+The document classes that should be standard on any LaTeX implementation.
+ This section is only here for completeness.
+\layout Enumerate
+
+Some optional document classes that LyX knows about.
+ If one of these is marked as missing (the 
+\begin_inset Quotes eld
+\end_inset 
+
+Found
+\begin_inset Quotes erd
+\end_inset 
+
+ item is no) and you need its functionality, you can grab it at your nearest
+ CTAN ftp site
+\begin_float footnote 
+\layout Standard
+
+The participating hosts in the Comprehensive TeX Archive Network are:
+\layout LyX-Code
+
+ftp://ftp.dante.de/tex-archive
+\layout LyX-Code
+
+ftp://ctan.tug.org/tex-archive
+\layout LyX-Code
+
+ftp://ftp.tex.ac.uk/tex-archive
+\layout Standard
+
+There are also a zillion mirror sites which are listed at the three primary
+ sites.
+\end_float 
+ at the location indicated in the 
+\begin_inset Quotes eld
+\end_inset 
+
+CTAN
+\begin_inset Quotes erd
+\end_inset 
+
+ item.
+ Note that only detected document classes can be selected as document layouts
+ in LyX.
+\layout Enumerate
+
+Some packages that LyX uses when you try to change the margins of your document.
+ The detection of these items does not yet affect the options available
+ inside LyX.
+\layout Enumerate
+
+Some common LaTeX packages that you might need with LyX, and you might also
+ want to add to your LaTeX installation.
+ The detection of these items does not yet affect the options available
+ inside LyX.
+\layout Standard
+
+Note that most of these packages will be available if you use a modern TeX
+ distribution such as teTeX.
+ If you decide to install one of the missing items, you should tell LyX
+ about it.
+ After the installation, please use the menu entry 
+\family sans 
+\bar under 
+O
+\bar default 
+ptions->
+\bar under 
+R
+\bar default 
+econfigure
+\begin_float footnote 
+\layout Standard
+
+or, if you want to change the system-wide settings, issue the command 
+\family typewriter 
+./configure
+\family default 
+ from the LyX system directory (by default 
+\family typewriter 
+/usr/local/lib/lyx/
+\family default 
+)
+\end_float 
+ and reload this file to see if the new package was recognized.
+ If the 
+\begin_inset Quotes eld
+\end_inset 
+
+Found
+\begin_inset Quotes erd
+\end_inset 
+
+ items read 
+\begin_inset Quotes eld
+\end_inset 
+
+???
+\begin_inset Quotes erd
+\end_inset 
+
+, it means that LyX could not do the inventory of your LaTeX configuration
+ for some reason.
+ If you are using teTeX, it might be that the new package you installed
+ is not found.
+ This is because you forgot to run the command 
+\family typewriter 
+texhash
+\family default 
+, which tells teTeX to update its own configuration.
+\layout Section
+
+LaTeX version currently in use
+\layout Standard
+
+The LaTeX version that LyX will use is: 
+\family typewriter 
+@chk_fmtversion@
+\family default 
+.
+ Note that, for best results, you should be using at least LaTeX release
+\family typewriter 
+1995/12/01
+\begin_float footnote 
+\layout Standard
+
+In case it is not clear to you, this number is the date at which the version
+ has been released.
+\end_float 
+.
+ In fact, earlier versions may work for many things, but will certainly
+ fail in some cases.
+ We feel that it is better to stick to a minimal version than try to work
+ around all the quirks of older ones.
+\layout Section
+
+Fonts
+\layout Subsection
+
+EC fonts
+\layout Description
+
+Found: @chk_ec@
+\layout Description
+
+CTAN: 
+\family typewriter 
+fonts/ec
+\layout Description
+
+Notes: LaTeX does not require the use of 
+\family sans 
+ec
+\family default 
+ fonts, however they are strongly recommended.
+ The 
+\family sans 
+ec
+\family default 
+ fonts are available in a more natural range of sizes and allow better hyphenati
+on and kerning than the old fonts such as 
+\family sans 
+cmr10
+\family default 
+.
+ If you already have the so-called 
+\family sans 
+dc
+\family default 
+ fonts installed, please upgrade to the 
+\family sans 
+ec
+\family default 
+ fonts, which replace them.
+ They are used automatically if LyX determines that you have them installed.
+\layout Subsection
+
+psnfss
+\layout Description
+
+Found: @chk_psnfss@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/packages/psnfss/
+\layout Description
+
+Notes: The package 
+\family sans 
+psnfss
+\family default 
+ allows you to change the fonts used by LyX to one of the 35 classical fonts
+ available on PostScript® printers.
+ Currently, the support for 
+\family sans 
+psnfss
+\family default 
+ is limited in LyX: you can only chose a few combinations of PostScript®
+ fonts in 
+\family sans 
+\size normal 
+Layout->Document
+\family default 
+\size default 
+.
+\layout Section
+
+Standard LaTeX document classes
+\layout Standard
+
+The document classes presented in this section are the basic document classes
+ provided by LaTeX.
+ In particular, they are all present on your system as long as LaTeX2e is
+ installed.
+ When the text indicates that a particular class has not been found, this
+ means the layout file supporting this particular class has not been found.
+\layout Subsection
+
+article
+\layout Description
+
+Found: @chk_article@
+\layout Description
+
+CTAN: N/A
+\layout Description
+
+Notes: The standard document class 
+\family sans 
+article
+\family default 
+ is used to type articles or short texts.
+ It is the basic LaTeX document class.
+\layout Subsection
+
+report
+\layout Description
+
+Found: @chk_report@
+\layout Description
+
+CTAN: N/A
+\layout Description
+
+Notes: The standard document class 
+\family sans 
+report
+\family default 
+ is similar to 
+\family sans 
+article
+\family default 
+ but is slightly more structured (support for different parts).
+\layout Subsection
+
+book
+\layout Description
+
+Found: @chk_book@
+\layout Description
+
+CTAN: N/A
+\layout Description
+
+Notes: The standard document class 
+\family sans 
+book
+\family default 
+ is, as its name suggests, intended to produce books.
+ It supports in particular sectioning by chapters.
+\layout Subsection
+
+letter
+\layout Description
+
+Found: @chk_letter@
+\layout Description
+
+CTAN: N/A
+\layout Description
+
+Notes: The standard document class 
+\family sans 
+letter
+\family default 
+ is the basic class for writing letters, mostly in English.
+\layout Subsection
+
+slides
+\layout Description
+
+Found: @chk_slides@
+\layout Description
+
+CTAN: N/A
+\layout Description
+
+Notes: The standard document class 
+\family sans 
+slides
+\family default 
+ is intended to produce transparencies.
+\layout Section
+
+Additional document classes
+\layout Subsection
+
+aa
+\layout Description
+
+Found: @chk_aapaper@
+\layout Description
+
+CTAN: N/A (available from Springer's ftp site
+\family typewriter 
+ ftp.springer.de
+\family default 
+ in directory 
+\family typewriter 
+/pub/tex/latex/aa
+\family default 
+)
+\layout Description
+
+Notes: The document class 
+\family sans 
+aa
+\family default 
+ can be used to write articles for submission to the scientific journal
+\emph on 
+Astronomy and Astrophysics
+\emph default 
+ and the accompanying 
+\emph on 
+Supplement Series 
+\emph default 
+published by Springer -Verlag.
+\layout Subsection
+
+aastex
+\layout Description
+
+Found: @chk_aastex@
+\layout Description
+
+CTAN: N/A (available from the American Astronomical Society's ftp site
+\family typewriter 
+ ftp.aas.
+\family default 
+org in directory 
+\family typewriter 
+/pub
+\family default 
+s)
+\layout Description
+
+Notes: The document class 
+\family sans 
+aastex
+\family default 
+ can be used to write articles for submission to the American journals 
+\emph on 
+Astrophysical Journal, Astronomical Journal
+\emph default 
+ and 
+\emph on 
+Publications of the Astronomical Society of the Pacific
+\emph default 
+.
+\layout Subsection
+
+amsart
+\layout Description
+
+Found: @chk_amsart@
+\layout Description
+
+CTAN: 
+\family typewriter 
+fonts/ams/amslatex/inputs/
+\layout Description
+
+Notes: The document class 
+\family sans 
+amsart
+\family default 
+ is an alternative to the class 
+\family sans 
+article
+\family default 
+.
+ It is part of the AMS-LaTeX package and is used for typesetting of mathematics
+ with a look the American Mathematical Society has developed.
+ They recommend it for the preparation of manuscripts intended for publication
+ both in the Society's books and journals, and also in other mathematical
+ literature.
+ The Society requests that published documents prepared with AMS-LaTeX include
+ an acknowledgment of its use.
+ LyX support is still limited.
+\layout Subsection
+
+broadway
+\layout Description
+
+Found: @chk_broadway@
+\layout Description
+
+CTAN: N/A (must be installed from the 
+\family typewriter 
+tex/
+\family default 
+ subdirectory of LyX source distribution)
+\layout Description
+
+Notes: The document class 
+\family sans 
+broadway
+\family default 
+ is for writing plays.
+ It is not an existing LaTeX document class, but a new one which is distributed
+ with LyX.
+\layout Subsection
+
+dinbrief
+\layout Description
+
+Found: @chk_dinbrief@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/dinbrief/
+\layout Description
+
+Notes: The document class 
+\family sans 
+dinbrief
+\family default 
+ can be used to type letters according to German conventions.
+\layout Subsection
+
+g-brief-en
+\layout Description
+
+Found: @chk_g-brief-en@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/g-brief/
+\layout Description
+
+Notes: The document class 
+\family sans 
+g-brief
+\family default 
+ can be used to type commercial letters with a nice outfit.
+\layout Subsection
+
+g-brief-de
+\layout Description
+
+Found: @chk_g-brief-de@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/g-brief/
+\layout Description
+
+Notes: The document class 
+\family sans 
+g-brief-de
+\family default 
+ is the same as the above g-brief-en only with german labels.
+\layout Subsection
+
+Springer 2-columns Journals (ejour2)
+\layout Description
+
+Found: @chk_ejour2@
+\layout Description
+
+CTAN: N/A (must be installed from the 
+\family typewriter 
+tex/
+\family default 
+ subdirectory of LyX source distribution)
+\layout Description
+
+Notes: The document class 
+\family sans 
+ejour2
+\family default 
+ is for the two-column journal format used by Springer Verlag.
+ It is reasonably well tested only for the Journal of Geodesy.
+ It is not an existing LaTeX document class, but a new one which is distributed
+ with LyX.
+\layout Subsection
+
+foils
+\layout Description
+
+Found: @chk_foils@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/foiltex/
+\layout Description
+
+Notes: The document class 
+\family sans 
+foils
+\family default 
+ (aka FoilTeX) provides an alternative to the standard 
+\family sans 
+slides
+\family default 
+ class to make transparencies.
+ It allows cross references, uses a less ugly font, and is in general much
+ better to use than 
+\family sans 
+slides
+\family default 
+.
+ It does not however have some of the advanced features found in the 
+\family sans 
+seminar
+\family default 
+ class, which is not currently supported by LyX.
+\layout Subsection
+
+hollywood
+\layout Description
+
+Found: @chk_hollywood@
+\layout Description
+
+CTAN: N/A (must be installed from the 
+\family typewriter 
+tex/
+\family default 
+ subdirectory of LyX source distribution)
+\layout Description
+
+Notes: The document class 
+\family sans 
+hollywood
+\family default 
+ can be used to type spec scripts for the U.S.
+ film industry.
+ It is not an existing LaTeX document class, but a new one which is distributed
+ with LyX.
+\layout Subsection
+
+iletter
+\layout Description
+
+Found: @chk_iletter@
+\layout Description
+
+CTAN: N/A (must be installed from the 
+\family typewriter 
+tex/
+\family default 
+ subdirectory of LyX source distribution)
+\layout Description
+
+Notes: The document class 
+\family sans 
+iletter
+\family default 
+ can be used to type letters according to Italian conventions.
+ It is not an existing LaTeX document class, but a new one which is distributed
+ with LyX.
+\layout Subsection
+
+IEEEtran
+\layout Description
+
+Found: @chk_IEEEtran@
+\layout Description
+
+CTAN: N/A
+\layout Description
+
+FTP: Currently, the IEEE ftp site only has an old version at: 
+\newline 
+
+\family sans 
+ftp://ftp.ieee.org/info/publish/latex/ieeetran.cls
+\family default 
+\family sans 
+
+\newline 
+
+\family default 
+A newer version is available from: 
+\newline 
+
+\family sans 
+ftp://ftp.isi.edu/pub/graham/infocom99/latest/IEEEtran.cls
+\layout Description
+
+Notes: The class
+\family sans 
+ IEEEtran 
+\family default 
+produces documents suitable for submission to most of the IEEE Transactions.
+ You should consult the IEEE Author Information pages at 
+\family sans 
+www.ieee.org
+\family default 
+ if you intend to use this class.
+ Note that there are both 
+\family sans 
+IEEEtran.cls
+\family default 
+ and 
+\family sans 
+IEEEtran.sty
+\family default 
+ files you 
+\emph on 
+must
+\emph default 
+ get the .cls file for use with LyX as the .sty file is for LaTeX 2.09 only.
+ Also note that if your 
+\family sans 
+ieeetran.cls
+\family default 
+ is in lowercase like this example LyX will not find it.
+\layout Subsection
+
+latex8
+\layout Description
+
+Found: @chk_latex8@
+\layout Description
+
+CTAN: N/A
+\layout Description
+
+Notes: The class 
+\family sans 
+latex8
+\family default 
+ is actually a LaTeX style file that adds some extra features to the 
+\family sans 
+article
+\family default 
+ document class.
+ It produces documents suitable for submission to IEEE Conferences.
+ The LaTeX files (including BibTeX style file) are distributed with the
+ Author Kit for IEEE sponsored conferences.
+\layout Subsection
+
+linuxdoc
+\layout Description
+
+Found: @chk_sgmltools@
+\layout Description
+
+CTAN: N/A
+\layout Description
+
+Notes: The class 
+\family sans 
+linuxdoc
+\family default 
+ is not a LaTeX document class.
+ It is designed to produce LinuxDoc-SGML documents, which, in turn, can
+ be exported as HTML, RTF, text or...
+ LaTeX.
+ You need to have the 
+\family sans 
+sgml-tools
+\family default 
+ (previously known as 
+\family sans 
+LinuxDoc
+\family default 
+) set of programs installed to use this.
+\layout Subsection
+
+docbook
+\layout Description
+
+Found: @chk_docbook@
+\layout Description
+
+CTAN: N/A
+\layout Description
+
+Notes: fill in here please.
+\layout Subsection
+
+paper
+\layout Description
+
+Found: @chk_paper@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/paper/
+\layout Description
+
+Notes: The document class 
+\family sans 
+paper
+\family default 
+ provides an alternative to the standard 
+\family sans 
+article
+\family default 
+ class.
+ It provides similar functionality, but you might prefer this layout with
+ sans serif sections, headings, and more.
+\layout Subsection
+
+Koma-Script (scrartcl, scrreprt, scrbook)
+\layout Description
+
+Found: @chk_scrartcl@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/koma-script/
+\layout Description
+
+Notes: These document classes provide different versions of the base LaTeX
+ document classes 
+\family sans 
+article
+\family default 
+, 
+\family sans 
+report
+\family default 
+ and 
+\family sans 
+book
+\family default 
+.
+ They have been changed to look somewhat better and be more adapted to european
+ typesetting standards.
+\layout Subsection
+
+REVTeX
+\layout Description
+
+Found: @chk_revtex@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex209/contrib/revtex/
+\layout Description
+
+Notes: The document class 
+\family sans 
+revtex
+\family default 
+ is used to write articles for the publications of the American Physical
+ Society (APS), American Institute of Physics (AIP), and Optical Society
+ of America (OSA).
+ For better results, you should use the file 
+\family typewriter 
+revtex.cls
+\family default 
+ from the 
+\family typewriter 
+tex/
+\family default 
+ subdirectory of LyX source distribution.
+\layout Section
+
+Paper layout packages
+\layout Standard
+
+Changing the margins of a document is one thing people like to do.
+ While LaTeX offers built-in options to set the margins of the documents,
+ some people feel that these margins are too large and want to set them
+ up differently.
+ You can use the package 
+\family sans 
+geometry 
+\family default 
+for this purpose, but note that for the sake of readability, your lines
+ should not contain more than 60-70 characters.
+\layout Subsection
+
+a4
+\layout Description
+
+Found: @chk_a4@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/ntgclass/
+\layout Description
+
+Notes: The package 
+\family sans 
+a4
+\family default 
+ changes the margins of your document to suit the European A4 page dimensions
+ with smaller margins that the default A4 format.
+\layout Subsection
+
+a4wide
+\layout Description
+
+Found: @chk_a4wide@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/other/misc/
+\layout Description
+
+Notes: The package 
+\family sans 
+a4wide
+\family default 
+ is another package that allows setting of the margins of your document
+ to A4 paper.
+ With this package, the margins are very wide, but do not follow typographical
+ conventions.
+\layout Subsection
+
+geometry
+\layout Description
+
+Found: @chk_geometry@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/geometry
+\layout Description
+
+Notes: The package 
+\family sans 
+geometry
+\family default 
+ allows to change the paper size and margins of your document in an arbitrary
+ way.
+ It does not provide a typographically correct page layout like 
+\family sans 
+a4
+\family default 
+ or the standard options, though.
+\layout Section
+
+
+\series bold 
+\size large 
+Other packages
+\layout Subsection
+
+algorithm
+\layout Description
+
+Found: @chk_algorithm@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/algorithms/
+\layout Description
+
+Notes: The package 
+\family sans 
+algorithm
+\family default 
+ is needed by LyX to be able to output 
+\begin_inset Quotes eld
+\end_inset 
+
+algorithm-floats
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ These are useful in placing short algorithms across pagebreaks and support
+ an 
+\begin_inset Quotes eld
+\end_inset 
+
+index of algorithms
+\begin_inset Quotes erd
+\end_inset 
+
+ too.
+\layout Subsection
+
+babel
+\layout Description
+
+Found: @chk_babel@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/packages/babel/
+\layout Description
+
+Notes: The package 
+\family sans 
+babel
+\family default 
+ allows you to customize your document for your favorite language (see the
+\family sans 
+\size normal 
+Layout->Document
+\family default 
+\size default 
+  popup).
+ In particular, it handles hyphenation and automatic translation of all
+ labels like 
+\begin_inset Quotes eld
+\end_inset 
+
+Chapter
+\begin_inset Quotes erd
+\end_inset 
+
+  and 
+\begin_inset Quotes eld
+\end_inset 
+
+Table of contents
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ This package is not needed if you only plan to write in English, except
+ if you want to use non-English quotes.
+\layout Subsection
+
+color
+\layout Description
+
+Found: @chk_color@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/packages/graphics/
+\layout Description
+
+Notes: The package 
+\family sans 
+color
+\family default 
+ is needed by LyX to handled colored text.
+ These colors will not show in the DVI preview window, but will be correct
+ on the printed output or with a PostScript® previewer.
+ This package is bundled with the 
+\family sans 
+graphics
+\family default 
+ package (see 
+\begin_inset LatexCommand \ref{ssec:graphics}
+
+\end_inset 
+
+).
+\layout Subsection
+
+fancyhdr
+\layout Description
+
+Found: @chk_fancyhdr@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/fancyhdr/
+\layout Description
+
+Notes: The package 
+\family sans 
+fancyhdr
+\family default 
+ (previously known as 
+\family sans 
+fancyheadings
+\family default 
+) is used when you select the 
+\begin_inset Quotes eld
+\end_inset 
+
+fancy
+\begin_inset Quotes erd
+\end_inset 
+
+  page style in the document layout popup.
+ It provides alternate headers and footers to your pages.
+\layout Subsection
+
+floatflt
+\layout Description
+
+Found: @chk_floatflt@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/other/floatflt/
+\layout Description
+
+Notes: The package
+\family sans 
+ floatflt 
+\family default 
+(an extension of 
+\family sans 
+floatfig
+\family default 
+) is used by LyX if you select the ``floatflt'' type in 
+\family sans 
+Layout->Paragraph->ExtraOpt
+\family default 
+ in the paragraph of a figure float.
+ It allows you to create a figure float which is narrower than the full
+ page and wrap the text around it.
+\layout Subsection
+
+
+\begin_inset LatexCommand \label{ssec:graphics}
+
+\end_inset 
+
+graphics
+\layout Description
+
+Found: @chk_graphics@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/packages/graphics/
+\layout Description
+
+Notes: The package 
+\family sans 
+graphics
+\family default 
+ is needed by LyX to insert PostScript® figures.
+ You will also need the program 
+\family typewriter 
+\size normal 
+ghostview
+\family default 
+\size default 
+ to see them on screen.
+ The configuration script has determined that the graphics driver used by
+ the package should be 
+\family sans 
+
+\begin_inset Quotes eld
+\end_inset 
+
+@chk_graphicsdriver@
+\begin_inset Quotes erd
+\end_inset 
+
+
+\begin_float footnote 
+\layout Standard
+
+Here, a value of 
+\latex no_latex 
+
+\begin_inset Quotes eld
+\end_inset 
+
+
+\latex default 
+default
+\latex no_latex 
+
+\begin_inset Quotes erd
+\end_inset 
+
+
+\latex default 
+ means that your LaTeX installation provides a sensible value for this parameter.
+\end_float 
+.
+\layout Subsection
+
+linuxdoc-sgml
+\layout Description
+
+Found: @chk_linuxdoc-sgml@
+\layout Description
+
+CTAN: N/A
+\layout Description
+
+Notes: The package 
+\family sans 
+graphics
+\family default 
+ is needed by LaTeX to process files generated by the 
+\family sans 
+sgml-tools
+\family default 
+ set of programs (see above).
+ If you see 
+\begin_inset Quotes eld
+\end_inset 
+
+no
+\begin_inset Quotes erd
+\end_inset 
+
+ here whereas you now that you have
+\family sans 
+ sgml-tools
+\family default 
+ installed you probably forgot to install correctly the file 
+\family typewriter 
+linuxdoc-sgml.sty
+\family default 
+ in some place where LaTeX can find it.
+\layout Subsection
+
+rotating
+\layout Description
+
+Found: @chk_rotating@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/rotating
+\layout Description
+
+Notes: The package 
+\family sans 
+rotating
+\family default 
+ is needed by LyX to change the orientation of some parts of your documents.
+ Note that it only really works with a PostScript® compatible printer.
+\layout Subsection
+
+subfigure
+\layout Description
+
+Found: @chk_subfigure@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/subfigure
+\layout Description
+
+Notes: The package
+\family sans 
+ subfigure 
+\family default 
+is used by LyX when you select ``subfigure'' in the EPS figure popup.
+ Several figures marked in this way can be packed into a single float with
+ individual subcaptions.
+\layout Subsection
+
+setspace
+\layout Description
+
+Found: @chk_setspace@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/supported/setspace/
+\layout Description
+
+Notes: The package 
+\family sans 
+setspace
+\family default 
+ is needed by LyX to change the line spacing of your document.
+\layout Subsection
+
+longtable
+\layout Description
+
+Found: @chk_longtable@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/packages/tools/longtable.dtx
+\layout Description
+
+Notes: The package 
+\family sans 
+longtable
+\family default 
+ is needed by LyX to be able to output correctly multipage tables.
+\layout Subsection
+
+url
+\layout Description
+
+Found: @chk_url@
+\layout Description
+
+CTAN: 
+\family typewriter 
+macros/latex/contrib/other/misc/url.sty
+\layout Description
+
+Notes: The package 
+\family sans 
+url
+\family default 
+ is needed by LyX to be able to output url's corrently.
+\the_end
diff --git a/lib/examples/Foils.lyx b/lib/examples/Foils.lyx
new file mode 100644 (file)
index 0000000..1ebd930
--- /dev/null
@@ -0,0 +1,547 @@
+#This file was created by <lasgoutt> Mon Apr 20 15:52:03 1998
+#LyX 0.12 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass foils
+\begin_preamble
+\raggedright
+\MyLogo{-\LyX{} and \FoilTeX{}: What a team!-}
+\end_preamble
+\options dvips
+\language default
+\inputencoding default
+\fontscheme default
+\graphics dvips
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\paperwidth 0cm
+\paperheight 0cm
+\leftmargin 0cm
+\topmargin 0cm
+\rightmargin 0cm
+\bottommargin 0cm
+\headheight 0cm
+\headsep 0cm
+\footskip 0cm
+\secnumdepth 0
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\bullet 0
+       5
+       2
+       -1
+\end_bullet
+\bullet 1
+       5
+       4
+       -1
+\end_bullet
+\bullet 2
+       4
+       8
+       -1
+\end_bullet
+\bullet 3
+       1
+       3
+       -1
+\end_bullet
+
+\layout Title
+
+Foils Class
+\latex latex 
+
+\newline 
+
+\backslash 
+vspace{7pt}
+\backslash 
+hrule height 7pt
+\layout Author
+
+
+\noun on 
+Allan Rae 
+\noun default 
+and The LyX Team
+\layout Date
+
+November 19 1997
+\layout Abstract
+
+LyX and FoilTeX combine to provide a powerful presentation package for creating
+\begin_inset Quotes eld
+\end_inset 
+
+foils
+\begin_inset Quotes erd
+\end_inset 
+
+ also known as slides and overhead transparencies.
+\layout Foilhead
+
+This is a Foilhead
+\layout LaTeX
+
+
+\backslash 
+hrule height 3pt 
+\layout Standard
+
+A Foilhead starts a new foil.
+ A 
+\emph on 
+short
+\emph default 
+ version is also provided that reduces the separation between the Foilhead
+ and the body of the foil.
+ Almost all the environments found in other classes are also supported.
+\layout Itemize
+
+
+\latex latex 
+
+\backslash 
+zerolistvertdimens{}
+\latex default 
+The new Itemize Bullet Selection popup
+\begin_deeper 
+\layout Itemize
+
+is tailor-made for use with the foils class
+\begin_deeper 
+\layout Itemize
+
+allowing you to select the bullet used
+\begin_deeper 
+\layout Itemize
+
+at each of the four levels of the Itemize environment
+\end_deeper 
+\end_deeper 
+\end_deeper 
+\layout Itemize
+
+NOTE: to get the full capabilities of the Itemize Bullet Selection popup
+ read the Special Tools manual and the ItemizeBullets.lyx file included with
+ the examples.
+\layout Itemize
+
+NOTE 2: To get your list spacing small like this use the FoilTeX command:
+\family typewriter 
+
+\backslash 
+zerolistvertdimens{}
+\family default 
+ set as TeX at the start of the first item.
+\layout ShortFoilhead
+
+This is a ShortFoilhead
+\layout LaTeX
+
+
+\backslash 
+hrule height 3pt
+\layout Standard
+
+The foils class has been extended to provide two additional bullet-lists.
+ These lists are namely:
+\layout TickList
+
+TickList
+\layout Standard
+
+and
+\layout CrossList
+
+CrossList
+\layout Standard
+
+These two lists were added because the listing of do's and don'ts or good
+ and bad are relatively common in foils.
+ Providing a dedicated paragraph style for these occasions should allow
+ faster entry and simplify interaction with LyX.
+\layout Rotatefoilhead
+
+Rotatefoilhead
+\layout LaTeX
+
+
+\backslash 
+hrule height 3pt
+\layout Itemize
+
+Create landscape foils by using Rotatefoilhead
+\layout Itemize
+
+Note that if you are viewing this with xdvi the page will appear to overrun
+ the page dimensions because it xdvi doesn't rotate the text
+\layout Itemize
+
+If you view this document using ghostview or something similar then the
+ page should appear rotated.
+ If not then you probably don't have the necessary dvips driver.
+\layout Definition*
+
+There are also several environments specially designed for presenting Theorems,
+ Lemmas, Corollaries, Propositions, Proofs and Definitions.
+ These are available as numbered or unnumbered environments.
+\layout ShortRotatefoilhead
+
+ShortRotateFoilhead
+\layout LaTeX
+
+
+\backslash 
+hrule height 3pt
+\layout Itemize
+
+Again the short version reduces the space below the heading
+\layout Itemize
+
+Another way to control the amount of separation is to adjust the length
+ in the preamble.
+ This will affect both the normal and short versions of foilhead and rotatefoilh
+ead.
+ For example,
+\newline 
+
+\family typewriter 
+\backslash 
+setlength{
+\backslash 
+foilheadskip}{-0.5in} 
+\family default 
+
+\newline 
+will reduce the spacing by 0.5 inches.
+ Other units include mm (millimeters) and pt (points).
+\layout Itemize
+
+The 
+\emph on 
+short
+\emph default 
+ versions of the foilheads reduce the separation by 0.5 inches (approximately
+ 12.5mm).
+\layout ShortFoilhead
+
+Tricky Proofs
+\layout LaTeX
+
+
+\backslash 
+hrule height 3pt 
+\layout Lemma*
+
+Several consecutive paragraphs of type
+\emph on 
+ Theorem
+\emph default 
+, 
+\emph on 
+Lemma
+\emph default 
+, 
+\emph on 
+Corollary
+\emph default 
+, 
+\emph on 
+Proposition
+\emph default 
+, 
+\emph on 
+Definition
+\emph default 
+, 
+\emph on 
+Proof
+\emph default 
+ or the starred versions of these are part of the same environment.
+\layout Lemma*
+
+As you can see, we are still in the same lemma.
+\layout LaTeX
+
+%
+\layout Lemma*
+
+To force this second Lemma straight after the first it's necessary to add
+ some dividing text or as I've done in this case separate the two by inserting
+ a 
+\emph on 
+LaTeX
+\emph default 
+ environment that simply contains a 
+\begin_inset Quotes eld
+\end_inset 
+
+%
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ This is simply a comment character in LaTeX but the insertion of the LaTeX
+ paragraph is sufficient to fool LyX into correctly handling the multiple
+ environments.
+\layout Lemma*
+
+NOTE: You only have this problem with multiple paragraphs of the same type
+\emph on 
+not
+\emph default 
+ with different types such as a Proof followed by a Theorem.
+\layout ShortFoilhead
+
+Tables and Figures
+\layout LaTeX
+
+
+\backslash 
+hrule height 3pt 
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+3 3 0 0 -1 -1 -1 -1
+1 1 0 0
+1 0 0 0
+1 1 0 0
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+
+Column1
+\newline 
+Column2
+\newline 
+Column3
+\newline 
+A
+\newline 
+
+\emph on 
+simple
+\emph default 
+
+\newline 
+table
+\newline 
+
+\bar under 
+example
+\bar default 
+
+\newline 
+with
+\newline 
+
+\series bold 
+foils
+\layout Standard
+
+Both tables and figures are supported in Foils however floats don't float
+ instead they appear exactly where they appear in the text.
+ Any placement parameters you set will be ignored.
+\begin_float tab 
+\layout Standard
+\align center \LyXTable
+multicol4
+3 3 0 0 -1 -1 -1 -1
+1 1 0 0
+1 0 0 0
+1 1 0 0
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+
+Row1
+\newline 
+
+\emph on 
+Another
+\emph default 
+
+\newline 
+simple
+\newline 
+Row2
+\newline 
+
+\bar under 
+table
+\bar default 
+
+\newline 
+example
+\newline 
+Row3
+\newline 
+
+\series bold 
+with
+\series default 
+
+\newline 
+foils
+\layout Caption
+
+This is a non-floating 
+\begin_inset Quotes eld
+\end_inset 
+
+float
+\begin_inset Quotes erd
+\end_inset 
+
+ table
+\end_float 
+\layout ShortFoilhead
+
+Headers and Footers
+\layout LaTeX
+
+
+\backslash 
+hrule height 3pt
+\layout Standard
+
+FoilTeX provides some powerful header and footer capabilities
+\begin_float footnote 
+\layout Standard
+
+You can also use the standard footnotes like this one.
+\end_float 
+ that are best set in the preamble although they may be set at any point
+ in a document.
+ If you want to change these settings in the document the best place to
+ do so is at the very top of a foil ie.
+ straight after the foilhead.
+\layout Standard
+
+The left-footer is controlled by two commands: 
+\family typewriter 
+
+\backslash 
+MyLogo{}
+\family default 
+ and 
+\family typewriter 
+
+\backslash 
+Restriction{}
+\family default 
+.
+ The first is meant to allow you to include a graphic logo on your foils
+ and defaults to 
+\begin_inset Quotes eld
+\end_inset 
+
+-Typeset by FoilTeX-
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ While the second is meant to provide a classification for the audience
+ eg.
+ Confidential.
+\layout Standard
+
+The remaining corners are controlled by:
+\layout Standard
+
+
+\family typewriter 
+
+\backslash 
+rightfooter{}
+\family default 
+ -- which defaults to page numbers
+\layout Standard
+
+
+\family typewriter 
+
+\backslash 
+rightheader{}
+\layout Standard
+
+
+\family typewriter 
+
+\backslash 
+leftheader{}
+\layout Foilhead
+
+Further Reading
+\layout LaTeX
+
+
+\backslash 
+hrule height 3pt
+\layout Standard
+
+Your LaTeX distribution should include some documentation on FoilTeX.
+ There are many more features in FoilTeX than those described here.
+ For example, FoilTeX can automatically place a horizontal rule between
+ the headers and all foilheads, and between the body and the footers.
+\layout Bibliography
+\bibitem {2}
+
+Jim Hafner, 
+\begin_inset Quotes eld
+\end_inset 
+
+The FoilTeX Class Package
+\begin_inset Quotes erd
+\end_inset 
+
+, 
+\family typewriter 
+.../texmf/texmf/doc/latex/foiltex/foiltex.dvi
+\layout Bibliography
+\bibitem {2}
+
+LyX Documentation Team, 
+\begin_inset Quotes eld
+\end_inset 
+
+Advanced Editing Tools
+\begin_inset Quotes erd
+\end_inset 
+
+.
+\the_end
diff --git a/lib/examples/ItemizeBullets.lyx b/lib/examples/ItemizeBullets.lyx
new file mode 100644 (file)
index 0000000..f9bc99b
--- /dev/null
@@ -0,0 +1,1808 @@
+#This file was created by <rae> Sat Oct  4 03:17:47 1997
+#LyX 0.11 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\begin_preamble
+\usepackage{latexsym,pifont,amssymb}
+\end_preamble
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize 10
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\bulletLaTeX 0
+       \raise1pt\hbox{\small\(\blacktriangleright\)}
+\end_bullet
+\bulletLaTeX 1
+       \raise1pt\hbox{\(\leadsto\)}
+\end_bullet
+\bullet 2
+       4
+       8
+       3
+\end_bullet
+\bullet 3
+       0
+       8
+       -1
+\end_bullet
+
+\layout Section*
+\cursor 0 
+Introduction
+\layout Standard
+
+You'll see pretty quickly that bullet settings can be quite complex if you
+ want them to be.
+ Don't be frightened, most settings are just a mouse click or two away.
+\layout Itemize
+
+
+\emph on 
+itemize
+\emph default 
+ is the standard environment for bullet lists
+\begin_deeper 
+\layout Itemize
+
+it has its own counter that limits it to 4 levels
+\begin_deeper 
+\layout Itemize
+
+each level can have its own bullet shape
+\begin_deeper 
+\layout Itemize
+
+LyX however displays all bullets as an `*'
+\end_deeper 
+\end_deeper 
+\end_deeper 
+\layout Itemize
+
+Also note that LyX does *NOT* check the environment depths for you
+\begin_deeper 
+\begin_deeper 
+\begin_deeper 
+\begin_deeper 
+\begin_deeper 
+\layout Itemize
+
+Other than to enforce the LaTeX depth limit of 6 for all lists.
+\end_deeper 
+\end_deeper 
+\end_deeper 
+\end_deeper 
+\end_deeper 
+\layout Standard
+
+Are there any other restrictions?
+\layout Standard
+
+Yes.
+ The bullet selection support will allow you to set the bullets used across
+ the entire document only.
+ If you want to customise each paragraph you'll have to do that manually.
+\layout Standard
+
+You can access the popup via the 
+\bar under 
+L
+\bar default 
+ayout->
+\bar under 
+D
+\bar default 
+ocument
+\begin_inset LatexCommand \ldots
+
+\end_inset 
+
+ menu and select the 
+\begin_inset Quotes eld
+\end_inset 
+
+Default Itemize Bullets
+\begin_inset Quotes erd
+\end_inset 
+
+ button.
+ Try it now.
+\layout Section*
+
+Bullet Tables:
+\layout Standard
+
+The following tables are those used to generate the bullet panels in the
+ Itemize Bullet Selection popup.
+\layout Subsection*
+
+Standard
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+6 6 0 0 -1 -1 -1 -1
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 0 
+8 1 0 
+2 1 0 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+
+
+\latex latex 
+
+\backslash 
+normalfont
+\backslash 
+bfseries{--}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+(
+\backslash 
+vdash
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+dashv
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+flat
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+natural
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+sharp
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+ast
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+star
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+bullet
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+circ
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+cdot
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+dagger
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+bigtriangleup
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+bigtriangledown
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+triangleleft
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+triangleright
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+lhd
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+rhd
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+oplus
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+ominus
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+otimes
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+oslash
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+odot
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+spadesuit
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+diamond
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+Diamond
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+Box
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+diamondsuit
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+heartsuit
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+clubsuit
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+rightarrow
+\backslash 
+)
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+(
+\backslash 
+leadsto
+\backslash 
+)
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+(
+\backslash 
+rightharpoonup
+\backslash 
+)
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+(
+\backslash 
+rightharpoondown
+\backslash 
+)
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+(
+\backslash 
+Rightarrow
+\backslash 
+)
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+(
+\backslash 
+succ
+\backslash 
+)
+\layout Subsection*
+
+Maths (AMS-symbols) 
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+6 6 0 0 -1 -1 -1 -1
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+
+
+\latex latex 
+
+\backslash 
+(
+\backslash 
+Rrightarrow
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+rightarrowtail
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+twoheadrightarrow
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+rightsquigarrow
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+looparrowright
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+multimap
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+boxtimes
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+boxplus
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+boxminus
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+boxdot
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+divideontimes
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+Vvdash
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+lessdot
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+gtrdot
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+maltese
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+bigstar
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+checkmark
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+Vdash
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+backsim
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+thicksim
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+centerdot
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+circleddash
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+circledast
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+circledcirc
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+vartriangleleft
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+vartriangleright
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+vartriangle
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+triangledown
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+lozenge
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+square
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+blacktriangleleft
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+blacktriangleright
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+blacktriangle
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+blacktriangledown
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+blacklozenge
+\backslash 
+)
+\newline 
+
+\backslash 
+(
+\backslash 
+blacksquare
+\backslash 
+)
+\layout Subsection*
+
+Ding 1 (PSNFSS Fonts - Zapf Dingbats and Symbols)
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+6 6 0 0 -1 -1 -1 -1
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+
+
+\latex latex 
+
+\backslash 
+ding{108}
+\newline 
+
+\backslash 
+ding{109}
+\newline 
+
+\backslash 
+ding{119}
+\newline 
+
+\backslash 
+Pisymbol{psy}{197}
+\newline 
+
+\backslash 
+Pisymbol{psy}{196}
+\newline 
+
+\backslash 
+Pisymbol{psy}{183}
+\newline 
+
+\backslash 
+ding{71}
+\newline 
+
+\backslash 
+ding{70}
+\newline 
+
+\backslash 
+ding{118}
+\newline 
+
+\backslash 
+ding{117}
+\newline 
+
+\backslash 
+Pisymbol{psy}{224}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+Pisymbol{psy}{215}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{111}
+\newline 
+
+\backslash 
+ding{112}
+\newline 
+
+\backslash 
+ding{113}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{114}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+Pisymbol{psy}{68}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+Pisymbol{psy}{209}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{120}
+\newline 
+
+\backslash 
+ding{121}
+\newline 
+
+\backslash 
+ding{122}
+\newline 
+
+\backslash 
+ding{110}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{115}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{116}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+Pisymbol{psy}{42}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{67}
+\newline 
+
+\backslash 
+ding{66}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{82}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{81}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{228}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{162}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{163}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{166}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{167}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{226}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{227}
+\layout Subsection*
+
+Ding 2
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+6 6 0 0 -1 -1 -1 -1
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+
+
+\latex latex 
+
+\backslash 
+ding{37}
+\newline 
+
+\backslash 
+ding{38}
+\newline 
+
+\backslash 
+ding{34}
+\newline 
+
+\backslash 
+ding{36}
+\newline 
+
+\backslash 
+ding{39}
+\newline 
+
+\backslash 
+ding{40}
+\newline 
+
+\backslash 
+ding{41}
+\newline 
+
+\backslash 
+ding{42}
+\newline 
+
+\backslash 
+ding{43}
+\newline 
+
+\backslash 
+ding{44}
+\newline 
+
+\backslash 
+ding{45}
+\newline 
+
+\backslash 
+ding{47}
+\newline 
+
+\backslash 
+ding{53}
+\newline 
+
+\backslash 
+ding{54}
+\newline 
+
+\backslash 
+ding{59}
+\newline 
+
+\backslash 
+ding{57}
+\newline 
+
+\backslash 
+ding{62}
+\newline 
+
+\backslash 
+ding{61}
+\newline 
+
+\backslash 
+ding{55}
+\newline 
+
+\backslash 
+ding{56}
+\newline 
+
+\backslash 
+ding{58}
+\newline 
+
+\backslash 
+ding{60}
+\newline 
+
+\backslash 
+ding{63}
+\newline 
+
+\backslash 
+ding{64}
+\newline 
+
+\backslash 
+ding{51}
+\newline 
+
+\backslash 
+ding{52}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+Pisymbol{psy}{170}
+\newline 
+
+\backslash 
+Pisymbol{psy}{167}
+\newline 
+
+\backslash 
+Pisymbol{psy}{168}
+\newline 
+
+\backslash 
+Pisymbol{psy}{169}
+\newline 
+
+\backslash 
+ding{164}
+\newline 
+
+\backslash 
+ding{165}
+\newline 
+
+\backslash 
+ding{171}
+\newline 
+
+\backslash 
+ding{168}
+\newline 
+
+\backslash 
+ding{169}
+\newline 
+
+\backslash 
+ding{170}
+\layout Subsection*
+
+Ding 3
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+6 6 0 0 -1 -1 -1 -1
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+
+
+\latex latex 
+
+\backslash 
+ding{65}
+\newline 
+
+\backslash 
+ding{76}
+\newline 
+
+\backslash 
+ding{75}
+\newline 
+
+\backslash 
+ding{72}
+\newline 
+
+\backslash 
+ding{80}
+\newline 
+
+\backslash 
+ding{74}
+\newline 
+
+\backslash 
+ding{78}
+\newline 
+
+\backslash 
+ding{77}
+\newline 
+
+\backslash 
+ding{79}
+\newline 
+
+\backslash 
+ding{85}
+\newline 
+
+\backslash 
+ding{90}
+\newline 
+
+\backslash 
+ding{98}
+\newline 
+
+\backslash 
+ding{83}
+\newline 
+
+\backslash 
+ding{84}
+\newline 
+
+\backslash 
+ding{86}
+\newline 
+
+\backslash 
+ding{87}
+\newline 
+
+\backslash 
+ding{88}
+\newline 
+
+\backslash 
+ding{89}
+\newline 
+
+\backslash 
+ding{92}
+\newline 
+
+\backslash 
+ding{91}
+\newline 
+
+\backslash 
+ding{93}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{105}
+\newline 
+
+\backslash 
+ding{94}
+\newline 
+
+\backslash 
+ding{99}
+\newline 
+
+\backslash 
+ding{103}
+\newline 
+
+\backslash 
+ding{104}
+\newline 
+
+\backslash 
+ding{106}
+\newline 
+
+\backslash 
+ding{107}
+\newline 
+
+\backslash 
+ding{68}
+\newline 
+
+\backslash 
+ding{69}
+\newline 
+
+\backslash 
+ding{100}
+\newline 
+
+\backslash 
+ding{101}
+\newline 
+
+\backslash 
+ding{102}
+\newline 
+
+\backslash 
+ding{96}
+\newline 
+
+\backslash 
+ding{95}
+\newline 
+
+\backslash 
+ding{97}
+\layout Subsection*
+
+Ding 4
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+6 6 0 0 -1 -1 -1 -1
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+0 8 1 1 0 0 0
+
+
+\latex latex 
+
+\backslash 
+ding{223}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{224}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{225}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{232}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{229}
+\newline 
+
+\backslash 
+ding{230}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{238}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{237}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{236}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{235}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{234}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{233}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{239}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{241}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{250}
+\newline 
+
+\backslash 
+ding{251}
+\newline 
+
+\backslash 
+ding{49}
+\newline 
+
+\backslash 
+ding{50}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{217}
+\newline 
+
+\backslash 
+ding{245}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{243}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{248}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{252}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{253}
+\latex default 
+
+\newline 
+
+\latex latex 
+
+\backslash 
+ding{219}
+\newline 
+
+\backslash 
+ding{213}
+\newline 
+
+\backslash 
+ding{221}
+\newline 
+
+\backslash 
+ding{222}
+\newline 
+
+\backslash 
+ding{220}
+\newline 
+
+\backslash 
+ding{212}
+\newline 
+
+\backslash 
+Pisymbol{psy}{174}
+\newline 
+
+\backslash 
+Pisymbol{psy}{222}
+\newline 
+
+\backslash 
+ding{254}
+\newline 
+
+\backslash 
+ding{242}
+\newline 
+
+\backslash 
+ding{231}
+\newline 
+
+\backslash 
+Pisymbol{psy}{45}
+\the_end
diff --git a/lib/examples/Literate.lyx b/lib/examples/Literate.lyx
new file mode 100644 (file)
index 0000000..47db337
--- /dev/null
@@ -0,0 +1,1802 @@
+#This file was created by <wiensk> Tue Feb 23 22:25:52 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass literate-article
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+LyX and Literate Programming
+\newline 
+An example program
+\layout Author
+
+Edmar Wienskoski Jr.
+\newline 
+edmar-w-jr@technologist.com
+\layout Date
+
+
+\latex latex 
+
+\backslash 
+today
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents
+
+\end_inset 
+
+
+\layout Section
+
+Introduction
+\layout Standard
+
+After typesetting a document, LyX scans the LaTeX log file looking for errors.
+ For each error found, the line number is obtained and a error box is displayed
+ in the LyX screen at that position.
+\layout Standard
+
+To use this feature to view compilation errors while working with literate
+ documents, we need a program that filters the compilation errors and puts
+ them in a format suitable for LyX reading it.
+\layout Standard
+
+In this document we present a filter that recognizes compilation error messages
+ from noweb, gnu C, and the IBM C compiler (xlc).
+\layout Standard
+
+The filter is required to read from standard input, parse for error messages
+ and copy the error messages to the standard output.
+ During the output process, the filter must present the error messages in a
+ format that LyX can interpret, currently, the LaTeX error message format.
+ Of course, nothing will prevent future LyX releases from being able to read
+ other formats as well (like gcc error messages for example).
+ This mechanism is necessary to fully explore the literate programming
+ tool's capabilities.
+\layout Section
+
+Algorithm
+\layout Scrap
+
+<<Function bodies>>=
+\newline 
+int
+\newline 
+main (int argc, char **argv)
+\newline 
+{
+\newline 
+
+\protected_separator 
+ if (argc == 2) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ switch (argv[1][0]) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ case 'n':
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ <<Scan input for noweb error messages>>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ break;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ case 'x':
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ <<Scan input for xlc error messages>>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ break;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ case 'a':
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+<<AIX system using both noweb and xlc>>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ break;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ case 's':
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ case 'b':
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ <<Solaris and Linux systems using both noweb and gcc>>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ break;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ case 'g':
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ default:
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ <<Scan input for gcc error messages>>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ break;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ }
+\newline 
+
+\protected_separator 
+ } else {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ <<Scan input for gcc error messages>>
+\newline 
+
+\protected_separator 
+ }
+\newline 
+}
+\newline 
+@
+\layout Scrap
+
+<<Function prototypes>>=
+\newline 
+int main (int argc, char **argv);
+\newline 
+@
+\layout Section
+
+Data Structures
+\layout Standard
+
+We resort to some global variables to allow access from several different
+ routines.
+ These are the buffer and related pointers used during the parse of the
+ input.
+\layout Scrap
+
+<<Global variables>>=
+\newline 
+char
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ buffer[200][200];
+\newline 
+int
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ last_buf_line;
+\newline 
+int
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ last_err_line;
+\newline 
+int
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ err_line;
+\newline 
+@ 
+\layout Section
+
+The output format
+\layout Standard
+
+The output format mimics the LaTeX error messages format.
+ This function prints a number of lines residing in the global variable
+\family typewriter 
+buffer
+\family default 
+, a program name and line number.
+ There is no special requirement on the input strings, they can be anything.
+\layout Scrap
+
+<<Function bodies>>=
+\newline 
+void
+\newline 
+output_error (int buf_size, int error_line, char *tool)
+\newline 
+{
+\newline 
+
+\protected_separator 
+ int
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ i;
+\newline 
+
+\protected_separator 
+
+\newline 
+
+\protected_separator 
+ fprintf(stdout, "! Build Error: ==> %s ==>
+\backslash 
+n", tool);
+\newline 
+
+\protected_separator 
+ for (i=0; i<buf_size; i++)
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ fprintf(stdout, "%s", buffer[i]);
+\newline 
+
+\protected_separator 
+ fprintf(stdout, " ...
+\backslash 
+n
+\backslash 
+nl.%d ...
+\backslash 
+n
+\backslash 
+n", error_line);
+\newline 
+}
+\newline 
+@
+\layout Scrap
+
+<<Function prototypes>>=
+\newline 
+void output_error (int buf_size, int error_line, char *tool);
+\newline 
+@
+\layout Section
+
+Functions Implementation
+\layout Standard
+
+Both noweave and notangle routines, always output one single line for each
+ error found, thus to scan the buffer for noweb error messages is enough
+ to exam one input line at a time.
+ Note that the noweb software does not provide a line error number, so all
+ errors boxes related to noweb messages will be displayed at the beginning
+ of the file.
+\layout Scrap
+
+<<Scan input for noweb error messages>>=
+\newline 
+{
+\newline 
+
+\protected_separator 
+ last_buf_line = 0;
+\newline 
+
+\protected_separator 
+ while (fgets(buffer[0], 200, stdin)) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (noweb_try(0))
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ output_error(1, 0, "noweb");
+\newline 
+
+\protected_separator 
+ }
+\newline 
+}
+\newline 
+@
+\layout Standard
+
+The examination itself is very inefficient.
+ Unfortunately noweb doesn't have any characteristic that would help to
+ identify one of its error messages.
+ The solution is to collect all possible output messages in an array of
+ strings, and turn the examination process into a linear search in this
+ array.
+\layout Scrap
+
+<<Global variables>>=
+\newline 
+char *noweb_msgs[] = {
+\newline 
+
+\protected_separator 
+ "couldn't open file",
+\newline 
+
+\protected_separator 
+ "couldn't open temporary file",
+\newline 
+
+\protected_separator 
+ "error writing temporary file",
+\newline 
+
+\protected_separator 
+ "ill-formed option",
+\newline 
+
+\protected_separator 
+ "unknown option",
+\newline 
+
+\protected_separator 
+ "Bad format sequence",
+\newline 
+
+\protected_separator 
+ "Can't open output file",
+\newline 
+
+\protected_separator 
+ "Can't open temporary file",
+\newline 
+
+\protected_separator 
+ "Capacity exceeded:",
+\newline 
+
+\protected_separator 
+ "Ignoring unknown option -",
+\newline 
+
+\protected_separator 
+ "This can't happen:",
+\newline 
+
+\protected_separator 
+ "non-numeric line number in" 
+\newline 
+};
+\newline 
+@
+\layout Standard
+
+A noweb error message can be any string that contains a matching pair of
+ < <
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+> >, or any of the above strings.
+\layout Scrap
+
+<<Function bodies>>=
+\newline 
+int
+\newline 
+noweb_try (int buf_line)
+\newline 
+{
+\newline 
+
+\protected_separator 
+ char
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ *s, *b;
+\newline 
+
+\protected_separator 
+ int
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ i;
+\newline 
+
+\protected_separator 
+
+\newline 
+
+\protected_separator 
+ b = buffer[buf_line];
+\newline 
+
+\protected_separator 
+ s = strstr(b, "<<");
+\newline 
+
+\protected_separator 
+ if (s != NULL) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ s = strstr(s+2, ">>");
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (s != NULL)
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ return 1;
+\newline 
+
+\protected_separator 
+ } else {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ for (i=0; i<12; i++) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ s = strstr (b, noweb_msgs[i]);
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (s != NULL)
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+break;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ }
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (s != NULL)
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ return 1;
+\newline 
+
+\protected_separator 
+ }
+\newline 
+
+\protected_separator 
+ return 0;
+\newline 
+}
+\newline 
+@
+\layout Scrap
+
+<<Function prototypes>>=
+\newline 
+int noweb_try (int buf_line);
+\newline 
+@
+\layout Standard
+
+The xlc compiler always outputs one single line for each error found, thus
+ to scan the buffer for xlc error messages it is enough to exam one input
+ line at a time.
+\layout Scrap
+
+<<Scan input for xlc error messages>>=
+\protected_separator 
+
+\newline 
+{
+\newline 
+
+\protected_separator 
+ last_buf_line = 0;
+\newline 
+
+\protected_separator 
+ while (fgets(buffer[last_buf_line], 200, stdin)) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (xlc_try(0))
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ output_error(1, err_line, "xlc");
+\newline 
+
+\protected_separator 
+ }
+\newline 
+}
+\newline 
+@
+\layout Standard
+
+A xlc error message is easy to identify.
+ Every error message starts with a quoted string with no spaces, a comma,
+ a space, the word 
+\begin_inset Quotes eld
+\end_inset 
+
+line
+\begin_inset Quotes erd
+\end_inset 
+
+, a space, and some variable text.
+ The following routine tests if a given buffer line matches this criteria:
+\layout Scrap
+
+<<Function bodies>>=
+\newline 
+int 
+\newline 
+xlc_try (int buf_line)
+\newline 
+{
+\newline 
+
+\protected_separator 
+ char
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ *s, *t;
+\newline 
+
+\protected_separator 
+
+\newline 
+
+\protected_separator 
+ t = buffer[buf_line];
+\newline 
+
+\protected_separator 
+ s = t+1;
+\newline 
+
+\protected_separator 
+ while (*s != '"' && *s != ' ' && *s != '
+\backslash 
+0')
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ s++;
+\newline 
+
+\protected_separator 
+ if (*t != '"' || *s != '"' || strncmp(s+1, ", line ", 7) != 0)
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ return 0;
+\newline 
+
+\protected_separator 
+ s += 8;
+\newline 
+
+\protected_separator 
+ err_line = atoi(s);
+\newline 
+
+\protected_separator 
+ return 1;
+\newline 
+}
+\newline 
+@
+\layout Scrap
+
+<<Function prototypes>>=
+\newline 
+int xlc_try (int buf_line);
+\newline 
+@
+\layout Standard
+
+The gcc compiler error messages are more complicated to scan.
+ Each error can span more than one line in the buffer.
+ The good news is that every buffer line on each error has the same pattern,
+ and share the same line number.
+ Thus the strategy will be to accumulate lines in the buffer while the reported
+ line number is still the same.
+ At the time they differ, all the accumulated lines, except the last one,
+ will belong to one single error message, which now can be output-ed to
+ LyX.
+\layout Standard
+
+Every gcc error message contains a string with no space followed by a 
+\begin_inset Quotes eld
+\end_inset 
+
+:
+\begin_inset Quotes eld
+\end_inset 
+
+.
+ If the next character is a space, then this line is a header of a error
+ message and the next line will detail the line number of the source code
+ where the error was found.
+ Otherwise, the next thing is a integer number followed by another 
+\begin_inset Quotes eld
+\end_inset 
+
+:
+\begin_inset Quotes eld
+\end_inset 
+
+.
+\layout Scrap
+
+<<Scan input for gcc error messages>>=
+\newline 
+{
+\newline 
+
+\protected_separator 
+ char
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ *s, *t;
+\newline 
+
+\protected_separator 
+
+\newline 
+
+\protected_separator 
+ last_buf_line = 0;
+\newline 
+
+\protected_separator 
+ while (fgets(buffer[last_buf_line], 200, stdin)) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ /****** Skip lines until I find an error */
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ s = strpbrk(buffer[last_buf_line], " :");
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (s == NULL || *s == ' ')
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ continue; /* No gcc error found here */
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ do {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+<<gcc error message criteria is to find a "...:999:" or a "...: ">>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ /****** OK It is an error message, get line number */
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ err_line = atoi(s+1);
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (last_err_line == 0 || last_err_line == err_line) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+last_err_line = err_line;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+continue; /* It's either a header or a continuation, don't output yet */
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ }
+\newline 
+
+\protected_separator 
+\protected_separator 
+\protected_separator 
+ /****** Completed the scan of one error message, output it to LyX */
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ discharge_buffer(1);
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ break;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ } while (fgets(buffer[last_buf_line], 200, stdin));
+\newline 
+
+\protected_separator 
+ }
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+/****** EOF completes the scan of whatever was being scanned */
+\newline 
+
+\protected_separator 
+ discharge_buffer(0);
+\newline 
+}
+\newline 
+@
+\layout Scrap
+
+<<gcc error message criteria is to find a "...:999:" or a "...: ">>=
+\newline 
+/****** Search first ":" in the error number */
+\newline 
+s = strpbrk(buffer[last_buf_line], " :");
+\newline 
+last_buf_line++;
+\newline 
+if (s == NULL || *s == ' ') 
+\newline 
+
+\protected_separator 
+ <<No gcc error found here, but it might terminate the scanning of a previous
+ one>>
+\newline 
+/****** Search second ":" in the error number */
+\newline 
+t = strpbrk(s+1, " :");
+\newline 
+if (t == NULL || *t == ' ')
+\newline 
+
+\protected_separator 
+ <<No gcc error found here, but it might terminate the scanning of a previous
+ one>>
+\newline 
+/****** Verify if is all digits between ":" */
+\newline 
+if (t != s+1+strspn(s+1, "0123456789")) 
+\newline 
+
+\protected_separator 
+ <<No gcc error found here, but it might terminate the scanning of a previous
+ one>>
+\newline 
+@
+\layout Scrap
+
+<<No gcc error found here, but it might terminate the scanning of a previous
+ one>>=
+\newline 
+{
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+err_line = 0;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+discharge_buffer(1);
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+continue;
+\newline 
+}
+\newline 
+@
+\layout Standard
+
+As we mentioned, when the scan of one gcc error message is completed everything
+ in the buffer except the last line is one single error message.
+ But if the scan terminates with a EOF or through finding one line that
+ does not match the gcc error message criteria, then there is no 
+\begin_inset Quotes eld
+\end_inset 
+
+last line
+\begin_inset Quotes erd
+\end_inset 
+
+ in the buffer to be concerned with.
+ In those cases we empty the buffer completely.
+\layout Scrap
+
+<<Function bodies>>=
+\newline 
+void
+\newline 
+discharge_buffer (int save_last)
+\newline 
+{
+\newline 
+
+\protected_separator 
+ if (last_err_line != 0) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (save_last != 0) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ output_error(last_buf_line-1, last_err_line, "gcc");
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ strcpy (buffer[0], buffer[last_buf_line-1]);
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ last_err_line = err_line;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ last_buf_line = 1;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ } else {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ output_error (last_buf_line, last_err_line, "gcc");
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ last_err_line = 0;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ last_buf_line = 0;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ }
+\newline 
+
+\protected_separator 
+ }
+\newline 
+}
+\newline 
+@
+\layout Scrap
+
+<<Function prototypes>>=
+\newline 
+void discharge_buffer (int save_last);
+\newline 
+@
+\layout Standard
+
+To combine the scan of noweb error messages and xlc error messages is very
+ simple.
+ We just try each one for every input line:
+\layout Scrap
+
+<<AIX system using both noweb and xlc>>=
+\newline 
+{
+\newline 
+
+\protected_separator 
+ last_buf_line = 0;
+\newline 
+
+\protected_separator 
+ while (fgets(buffer[0], 200, stdin)) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (noweb_try(0))
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ output_error(1, 0, "noweb");
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ else if (xlc_try(0))
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ output_error(1, err_line, "xlc");
+\newline 
+
+\protected_separator 
+ }
+\newline 
+}
+\newline 
+@
+\layout Standard
+
+To combine the scan of noweb error messages and gcc error messages is simple
+ if we realize that it is not possible to find a noweb error message
+ in the middle of a gcc error message.
+ So we just repeat the gcc procedure and test for noweb error messages in
+ the beginning of the scan:
+\layout Scrap
+
+<<Solaris and Linux systems using both noweb and gcc>>=
+\newline 
+{
+\newline 
+
+\protected_separator 
+ char
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ *s, *t;
+\newline 
+
+\protected_separator 
+
+\newline 
+
+\protected_separator 
+ last_buf_line = 0;
+\newline 
+
+\protected_separator 
+ while (fgets(buffer[last_buf_line], 200, stdin)) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ /****** Skip lines until I find an error */
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (last_buf_line == 0 && noweb_try(0)) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ output_error(1, 0, "noweb");
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ continue;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ }
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ s = strpbrk(buffer[last_buf_line], " :");
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (s == NULL || *s == ' ')
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ continue; /* No gcc error found here */
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ do {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+<<gcc error message criteria is to find a "...:999:" or a "...: ">>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ /****** OK It is an error, get line number */
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ err_line = atoi(s+1);
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ if (last_err_line == 0 || last_err_line == err_line) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+last_err_line = err_line;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+continue; /* It's either a header or a continuation, don't output yet */
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ }
+\newline 
+
+\protected_separator 
+\protected_separator 
+\protected_separator 
+ /****** Completed the scan of one error message, output it to LyX */
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ discharge_buffer(1);
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ break;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+ } while (fgets(buffer[last_buf_line], 200, stdin));
+\newline 
+
+\protected_separator 
+ }
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+/****** EOF completes the scan of whatever was being scanned */
+\newline 
+
+\protected_separator 
+ discharge_buffer(0);
+\newline 
+}
+\newline 
+@
+\layout Section
+
+Wrapping the code into a file
+\layout Scrap
+
+<<listerrors.c>>=
+\newline 
+#include <stdio.h>
+\newline 
+#include <strings.h> 
+\protected_separator 
+\protected_separator 
+\protected_separator 
+\newline 
+
+\protected_separator 
+
+\newline 
+<<Global variables>>
+\newline 
+<<Function prototypes>>
+\newline 
+<<Function bodies>>
+\newline 
+@
+\layout Standard
+
+To build this program, we want to add the 
+\begin_inset Quotes eld
+\end_inset 
+
+-L
+\begin_inset Quotes erd
+\end_inset 
+
+ option in the tangle command to force gdb to load the file 
+\family typewriter 
+Literate.nw
+\family default 
+ instead of 
+\family typewriter 
+listerrors.c
+\family default 
+.
+ In accordance with this, we pass the 
+\begin_inset Quotes eld
+\end_inset 
+
+-g
+\begin_inset Quotes erd
+\end_inset 
+
+ option to gcc.
+\layout Scrap
+
+<<build-script>>=
+\newline 
+#!/usr/local/bin/bash
+\newline 
+notangle -L -Rlisterrors.c Literate.nw > listerrors.c
+\newline 
+gcc -g -o listerrors listerrors.c
+\newline 
+@
+\layout Standard
+
+This project can be tangled and compiled from LyX if you set 
+\family typewriter 
+
+\backslash 
+build_command
+\family default 
+ to call a generic script that always extracts a scrap named 
+\family typewriter 
+build-script
+\family default 
+ and executes it.
+ Here is a example of such generic script:
+\layout LyX-Code
+
+#!/bin/sh
+\newline 
+notangle -Rbuild-script $1 | sh
+\the_end
+
+
+
+
+
+
diff --git a/lib/examples/MathLabeling.lyx b/lib/examples/MathLabeling.lyx
new file mode 100644 (file)
index 0000000..054cf44
--- /dev/null
@@ -0,0 +1,143 @@
+#This file was created by <larsbj> Fri Sep 12 18:47:36 1997
+#LyX 0.11 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language default
+\inputencoding latin1
+\fontscheme default
+\graphics none
+\paperfontsize 10
+\spacing single 
+\papersize letterpaper
+\paperpackage a4
+\use_geometry 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 0
+\papersides 1
+\paperpagestyle plain
+
+\layout Title
+
+Numbering and Labeling equations
+\layout Author
+
+Alejandro Aguilar-Sierra
+\layout Standard
+
+A simple equation can be numbered by two ways.
+ The first is invocating the LyX command 
+\family typewriter 
+math-number
+\family default 
+.
+ The corresponding number
+\begin_float footnote 
+\layout Standard
+
+Or a 
+\series bold 
+#
+\series default 
+ mark since true numbering is not yet implemented.
+\end_float 
+ will appear after the right end of the equation.
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{equation}
+\label{}
+x=y^{2}-3
+\end{equation}
+
+\end_inset 
+
+
+\layout Standard
+
+Usually the equation number will be referred to in the document.
+ It's safer to assign a label to the equation, instead of using a fixed
+ number.
+ Assigning a label to a non-numbered equation will make it numbered automaticall
+y.
+ With the label 
+\series bold 
+planck 
+\series default 
+we can be refer to the equation (
+\begin_inset LatexCommand \ref{planck}
+
+\end_inset 
+
+).
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{equation}
+\label{planck}
+E=hv
+\end{equation}
+
+\end_inset 
+
+
+\layout Standard
+
+In the case of an equation array, every line is sequentially numbered.
+ It's possible to suppress the number for a single line with the command
+\family typewriter 
+math-nonumber
+\family default 
+.
+ The cursor must be at the row you want not to be numbered.
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{eqnarray}
+(x+y)(x-y) & = & x^{2}-xy+xy-y^{2}\nonumber \\
+ & = & x^{2}-y^{2}
+\end{eqnarray}
+
+\end_inset 
+
+
+\layout Standard
+
+It's possible to label more than one line.
+ From the following array of equations we can refer to the equations (
+\begin_inset LatexCommand \ref{eq:gs1}
+
+\end_inset 
+
+) and (
+\begin_inset LatexCommand \ref{eq:gs2}
+
+\end_inset 
+
+) using their corresponding labels.
+\layout Standard
+\cursor 0 
+
+\begin_inset Formula 
+\begin{eqnarray}
+v_{k+1} & = & w_{k}+b_{1}\label{eq:gs1} \\
+w_{k+1} & = & v_{k+1}+b_{2}
+\end{eqnarray}
+
+\end_inset 
+
+
+\layout Standard
+
+To see the final result please preview or print this document.
+\the_end
diff --git a/lib/examples/Math_macros.lyx b/lib/examples/Math_macros.lyx
new file mode 100644 (file)
index 0000000..6ebef71
--- /dev/null
@@ -0,0 +1,268 @@
+#This file was created by <ale> Wed Oct 29 15:21:35 1997
+#LyX 0.11 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize 12
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+User defined macros in math mode
+\layout Author
+
+Alejandro Aguilar Sierra
+\layout Date
+
+25-October-1997
+\layout Section
+
+Introduction
+\layout Standard
+
+LyX version 0.12 allows the user to define macros.
+ An user defined macro in math mode is not a red colored name that LyX didn't
+ know how to draw (formerly known as macro mode, now simply TeX mode).
+ A macro definition box appears on screen as a grayed button with the name
+ of the macro in blue (math color).
+ But if you click on it, it will appear as a normal math box to allow you
+ edit it.
+ Just try it:
+\begin_inset FormulaMacro 
+\newcommand{\macro}{a+b}
+
+\end_inset 
+
+
+\layout Standard
+
+Now, to use this macro in other math boxes just type the name in TeX mode,
+ in this case 
+\family typewriter 
+
+\backslash 
+macro
+\family default 
+, and it will be automatically expanded: 
+\begin_inset Formula \( c=\macro  \)
+\end_inset 
+
+.
+ As you can verify, the cursor can't go inside the macro, the whole macro
+ is like a single character, and the TeX generated code of this expression
+ is 
+\family typewriter 
+c = 
+\backslash 
+macro.
+\layout Standard
+
+However the cursor could go inside of some kind of macros, those that have
+\emph on 
+arguments
+\emph default 
+.
+ In a macro definition box an argument looks like a 
+\family typewriter 
+#
+\family default 
+ followed by the argument number:
+\begin_inset FormulaMacro 
+\newcommand{\macrowarg}[1]{2+\sqrt{#1 }}
+
+\end_inset 
+
+
+\layout Standard
+
+Once expanded, this macro includes the usual empty rectangle to indicate
+ that you can insert there whatever you want: 
+\family typewriter 
+
+\backslash 
+macrowarg = 
+\begin_inset Formula \( \macrowarg{} \)
+\end_inset 
+
+
+\family default 
+.
+ Example: 
+\begin_inset Formula \( b=\macrowarg{x-2} \)
+\end_inset 
+
+.
+\layout Standard
+
+When exported to LaTeX, a macro definition will produce the command 
+\family typewriter 
+
+\backslash 
+newcommand.
+\layout Section
+
+Directions on using macros
+\layout Subsection
+
+How to create them
+\layout Standard
+
+To create a macro definition box use this syntax in the minibuffer:
+\layout Standard
+
+
+\family typewriter 
+math-macro <macro name> [number of arguments]
+\layout Standard
+
+Par example 
+\family typewriter 
+
+\backslash 
+macro
+\family default 
+ was created with 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\family typewriter 
+math-macro macro
+\family default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+, and 
+\family typewriter 
+
+\backslash 
+macrowarg
+\family default 
+ was created with 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\family typewriter 
+math-macro macrowarg 1
+\family default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+.
+\layout Standard
+
+To insert an argument mark (only inside a macro definition box) use this:
+\layout Standard
+
+
+\family typewriter 
+math-macro-arg <number>
+\layout Standard
+
+The argument mark in 
+\family typewriter 
+
+\backslash 
+macrowarg
+\family default 
+ was introduced with 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\family typewriter 
+math-macro-arg 1
+\family default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+.
+\layout Standard
+
+You can use no more than 9 arguments, numbered from 1 to 9.
+ An argument can be repeated inside the macro definition box, but of course
+ can be edited only once.
+ A number can't be greater than the number of arguments originally allowed
+ for the macro.
+\layout Subsection
+
+How to navigate
+\layout Description
+
+With
+\protected_separator 
+the
+\protected_separator 
+arrow
+\protected_separator 
+keys: Opening a macro form the left side will put the cursor in the first
+ argument, to move to the second argument use the TAB key.
+ Remember that pressing the Space bar will get the cursor out and at the
+ right side of the macro.
+\layout Description
+
+With
+\protected_separator 
+the
+\protected_separator 
+mouse: As usual, click on the desired argument box.
+ Sometimes this fails if the box is empty or too small.
+\layout Standard
+
+Currently the user can only define command macros, but internally it's possible
+ to define also environment macros.
+\layout Standard
+\cursor 358 
+There are several predefined macros, mainly to allow AMS-LaTeX users to
+ use AMS macros in a WYSIWYM way, like 
+\family typewriter 
+
+\backslash 
+cases
+\family default 
+ and 
+\family typewriter 
+
+\backslash 
+binom
+\family default 
+.
+ [
+\emph on 
+Pre 0.12 Note: 
+\family typewriter 
+
+\backslash 
+cases
+\family default 
+ are currently disabled because after some simplification and improving
+ of the macro stuff, the only valid arguments are subparagraphs (neither
+ tabs nor newlines).
+ Perhaps they will be again included before 0.12
+\emph default 
+.
+ AAS]
+\the_end
diff --git a/lib/examples/Minipage.lyx b/lib/examples/Minipage.lyx
new file mode 100644 (file)
index 0000000..b5b2a82
--- /dev/null
@@ -0,0 +1,298 @@
+#This file was created by <jug> Mon Jan 12 12:28:05 1998
+#LyX 0.12 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language default
+\inputencoding latin1
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation skip
+\defskip medskip
+\quotes_language danish
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Standard
+\align center 
+
+\series bold 
+\size largest 
+Some examples of how to use minipages
+\layout Standard
+\align center 
+
+\series bold 
+\size largest 
+in LyX 
+\layout Standard
+\added_space_bottom bigskip \align center 
+
+\series bold 
+\size largest 
+by Jürgen Vigna (jug@sad.it)
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \pextra_type 2 \pextra_alignment 0 \pextra_widthp 45
+\LyXTable
+multicol4
+5 5 0 0 -1 -1 -1 -1
+1 1 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 1 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+
+1
+\newline 
+2
+\newline 
+3
+\newline 
+4
+\newline 
+5
+\newline 
+2
+\newline 
+a
+\newline 
+b
+\newline 
+c
+\newline 
+d
+\newline 
+3
+\newline 
+e
+\newline 
+f
+\newline 
+g
+\newline 
+h
+\newline 
+4
+\newline 
+i
+\newline 
+j
+\newline 
+k
+\newline 
+l
+\newline 
+5
+\newline 
+m
+\newline 
+n
+\newline 
+o
+\newline 
+p
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \pextra_type 2 \pextra_alignment 0 \pextra_hfill 1 \pextra_start_minipage 1 \pextra_widthp 45
+\LyXTable
+multicol4
+5 5 0 0 -1 -1 -1 -1
+1 1 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 1 
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+
+1
+\newline 
+2
+\newline 
+3
+\newline 
+4
+\newline 
+5
+\newline 
+2
+\newline 
+a
+\newline 
+b
+\newline 
+c
+\newline 
+d
+\newline 
+3
+\newline 
+e
+\newline 
+f
+\newline 
+g
+\newline 
+h
+\newline 
+4
+\newline 
+i
+\newline 
+j
+\newline 
+k
+\newline 
+l
+\newline 
+5
+\newline 
+m
+\newline 
+n
+\newline 
+o
+\newline 
+p
+\layout Standard
+\align center \pextra_type 2 \pextra_alignment 0 \pextra_start_minipage 1 \pextra_widthp 45
+
+This is Table 1
+\layout Standard
+\align center \pextra_type 2 \pextra_alignment 0 \pextra_hfill 1 \pextra_start_minipage 1 \pextra_widthp 45
+
+This is Table 2
+\layout Subsection*
+
+I use the following when I have to write bilingual text (I live in a region
+ in Italy where about 60% of the people speak german and so you have to
+ write letters in german and italian in two columns as the following text
+ shows):
+\layout Standard
+\pextra_type 2 \pextra_alignment 0 \pextra_hfill 1 \pextra_start_minipage 1 \pextra_widthp 45
+
+Dies ist ein deutscher Text.
+ Dies ist ein deutscher Text.
+ Dies ist ein deutscher Text.
+ Dies ist ein deutscher Text.
+ Dies ist ein deutscher Text.
+ Dies ist ein deut\SpecialChar \-
+scher Text.
+ Dies ist ein deut\SpecialChar \-
+scher Text.
+ Dies ist ein deutscher Text.
+ Dies ist ein deutscher Text.
+ Dies ist ein deutscher Text.
+ Dies ist ein deutscher Text.
+ Dies ist ein deutscher Text.
+ Dies ist ein deut\SpecialChar \-
+scher Text
+\begin_float footnote 
+\layout Standard
+
+Dies ist eine Fußnote
+\end_float 
+.
+ Dies ist ein deutscher Text.
+ Dies ist ein deutscher Text.
+\layout Standard
+\pextra_type 2 \pextra_alignment 0 \pextra_hfill 1 \pextra_start_minipage 1 \pextra_widthp 45
+
+This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+ This is an english Text.
+\begin_float footnote 
+\layout Standard
+
+This is a footnote
+\end_float 
+ This is an english Text.
+\layout Standard
+
+I hope this helps understand for what f.ex.
+ you can use minipages!
+\layout Subsection*
+
+Greets Jürgen
+\the_end
diff --git a/lib/examples/TableExamples.lyx b/lib/examples/TableExamples.lyx
new file mode 100644 (file)
index 0000000..617606f
--- /dev/null
@@ -0,0 +1,1835 @@
+#This file was created by <larsbj> Fri Jan  9 14:59:14 1998
+#LyX 0.12 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\begin_preamble
+\usepackage{multirow}
+\end_preamble
+\language default
+\inputencoding latin1
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation skip
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Standard
+\align center 
+
+\series bold 
+\size largest 
+Some examples of how to use tables in 
+\layout Standard
+\align center 
+
+\series bold 
+\size largest 
+LyX 
+\layout Standard
+\added_space_bottom bigskip \align center 
+
+\series bold 
+\size largest 
+by Jürgen Vigna (jug@sad.it)
+\layout Standard
+
+longtable - 
+\series bold 
+How to use the longtable special options
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+98 3 1 0 3 1 4 4
+1 1 0 0
+1 1 0 0
+1 1 0 0
+1 1 0 0
+1 1 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+0 1 0 0
+2 1 0 5cm
+2 0 0 
+4 1 1 
+1 8 1 1 0 0 0
+2 8 1 1 0 0 0
+2 8 1 1 0 0 0
+1 8 0 1 0 0 0
+2 8 1 1 0 0 0
+1 8 0 1 0 0 0
+1 8 1 1 0 0 0
+2 8 1 1 0 0 0
+2 8 1 1 0 0 0
+1 8 0 1 0 0 0
+2 8 1 1 0 0 0
+1 8 0 1 0 0 0
+1 2 1 1 0 0 0
+2 8 1 1 0 0 0
+2 8 1 1 0 0 0
+0 2 1 0 0 0 1
+0 2 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+1 2 1 0 0 0 0
+2 8 1 0 0 0 0
+2 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 4 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+1 2 0 1 0 0 0
+2 8 1 0 0 0 0
+2 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+1 2 0 1 0 0 0
+2 8 1 0 0 0 0
+2 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 0 1 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+
+
+\series bold 
+Example Phone List (ignore the names)
+\newline 
+NAME
+\newline 
+TEL.
+\newline 
+ Example Phone List
+\newline 
+NAME
+\newline 
+TEL.
+\newline 
+ continue ...
+\newline 
+Kemenater
+\series default 
+
+\newline 
+Klaus
+\newline 
+111
+\newline 
+
+\series bold 
+Maccioni
+\series default 
+
+\newline 
+Piero
+\newline 
+111
+\newline 
+\newline 
+
+\series bold 
+Annovi
+\series default 
+
+\newline 
+Silvia
+\newline 
+111
+\newline 
+
+\series bold 
+Bertoli
+\series default 
+
+\newline 
+Stefano
+\newline 
+111
+\newline 
+
+\series bold 
+Bozzi
+\series default 
+
+\newline 
+Walter
+\newline 
+111
+\newline 
+
+\series bold 
+Cachia
+\series default 
+
+\newline 
+Maria
+\newline 
+111
+\newline 
+
+\series bold 
+Cachia
+\series default 
+
+\newline 
+Maurizio
+\newline 
+111
+\newline 
+
+\series bold 
+Cinquemani
+\series default 
+
+\newline 
+Giusi
+\newline 
+111
+\newline 
+
+\series bold 
+Colin
+\series default 
+
+\newline 
+Bernard
+\newline 
+111
+\newline 
+
+\series bold 
+Concli
+\series default 
+
+\newline 
+Gianfranco
+\newline 
+111
+\newline 
+
+\series bold 
+Dal Bosco
+\series default 
+
+\newline 
+Carolina
+\newline 
+111
+\newline 
+
+\series bold 
+Dalpiaz
+\series default 
+
+\newline 
+Annamaria
+\newline 
+111
+\newline 
+
+\series bold 
+Feliciello
+\series default 
+
+\newline 
+Domenico
+\newline 
+111
+\newline 
+
+\series bold 
+Focarelli
+\series default 
+
+\newline 
+Paola
+\newline 
+111
+\newline 
+
+\series bold 
+Galletti
+\series default 
+
+\newline 
+Oreste
+\newline 
+111
+\newline 
+
+\series bold 
+Gasparini
+\series default 
+
+\newline 
+Franca
+\newline 
+111
+\newline 
+
+\series bold 
+Rizzardi
+\series default 
+
+\newline 
+Paola
+\newline 
+111
+\newline 
+
+\series bold 
+Lassini
+\series default 
+
+\newline 
+Giancarlo
+\newline 
+111
+\newline 
+
+\series bold 
+Malfatti
+\series default 
+
+\newline 
+Luciano
+\newline 
+111
+\newline 
+
+\series bold 
+Malfatti
+\series default 
+
+\newline 
+Valeriano
+\newline 
+111
+\newline 
+
+\series bold 
+Meneguzzo
+\series default 
+
+\newline 
+Roberto
+\newline 
+111
+\newline 
+
+\series bold 
+Mezzadra
+\series default 
+
+\newline 
+Roberto
+\newline 
+111
+\newline 
+
+\series bold 
+Pirpamer
+\series default 
+
+\newline 
+Erich
+\newline 
+111
+\newline 
+
+\series bold 
+Pochiesa
+\series default 
+
+\newline 
+Paolo
+\newline 
+111, 222
+\newline 
+
+\series bold 
+Radina
+\series default 
+
+\newline 
+Claudio
+\newline 
+111
+\newline 
+
+\series bold 
+Stuffer
+\series default 
+
+\newline 
+Oskar
+\newline 
+111
+\newline 
+
+\series bold 
+Tacchelli
+\series default 
+
+\newline 
+Ugo
+\newline 
+111
+\newline 
+
+\series bold 
+Tezzele
+\series default 
+
+\newline 
+Margit
+\newline 
+111
+\newline 
+
+\series bold 
+Unterkalmsteiner
+\series default 
+
+\newline 
+Frieda
+\newline 
+111
+\newline 
+
+\series bold 
+Vieider
+\series default 
+
+\newline 
+Hilde
+\newline 
+111
+\newline 
+
+\series bold 
+Vigna
+\series default 
+
+\newline 
+Jürgen
+\newline 
+111
+\newline 
+
+\series bold 
+Weber
+\series default 
+
+\newline 
+Maurizio
+\newline 
+111
+\newline 
+
+\series bold 
+Winkler
+\series default 
+
+\newline 
+Franz
+\newline 
+111
+\newline 
+\newline 
+
+\series bold 
+Annovi
+\series default 
+
+\newline 
+Silvia
+\newline 
+555
+\newline 
+
+\series bold 
+Bertoli
+\series default 
+
+\newline 
+Stefano
+\newline 
+555
+\newline 
+
+\series bold 
+Bozzi
+\series default 
+
+\newline 
+Walter
+\newline 
+555
+\newline 
+
+\series bold 
+Cachia
+\series default 
+
+\newline 
+Maria
+\newline 
+555
+\newline 
+
+\series bold 
+Cachia
+\series default 
+
+\newline 
+Maurizio
+\newline 
+555
+\newline 
+
+\series bold 
+Cinquemani
+\series default 
+
+\newline 
+Giusi
+\newline 
+555
+\newline 
+
+\series bold 
+Colin
+\series default 
+
+\newline 
+Bernard
+\newline 
+555
+\newline 
+
+\series bold 
+Concli
+\series default 
+
+\newline 
+Gianfranco
+\newline 
+555
+\newline 
+
+\series bold 
+Dal Bosco
+\series default 
+
+\newline 
+Carolina
+\newline 
+555
+\newline 
+
+\series bold 
+Dalpiaz
+\series default 
+
+\newline 
+Annamaria
+\newline 
+555
+\newline 
+
+\series bold 
+Feliciello
+\series default 
+
+\newline 
+Domenico
+\newline 
+555
+\newline 
+
+\series bold 
+Focarelli
+\series default 
+
+\newline 
+Paola
+\newline 
+555
+\newline 
+
+\series bold 
+Galletti
+\series default 
+
+\newline 
+Oreste
+\newline 
+555
+\newline 
+
+\series bold 
+Gasparini
+\series default 
+
+\newline 
+Franca
+\newline 
+555
+\newline 
+
+\series bold 
+Rizzardi
+\series default 
+
+\newline 
+Paola
+\newline 
+555
+\newline 
+
+\series bold 
+Lassini
+\series default 
+
+\newline 
+Giancarlo
+\newline 
+555
+\newline 
+
+\series bold 
+Malfatti
+\series default 
+
+\newline 
+Luciano
+\newline 
+555
+\newline 
+
+\series bold 
+Malfatti
+\series default 
+
+\newline 
+Valeriano
+\newline 
+555
+\newline 
+
+\series bold 
+Meneguzzo
+\series default 
+
+\newline 
+Roberto
+\newline 
+555
+\newline 
+
+\series bold 
+Mezzadra
+\series default 
+
+\newline 
+Roberto
+\newline 
+555
+\newline 
+
+\series bold 
+Pirpamer
+\series default 
+
+\newline 
+Erich
+\newline 
+555
+\newline 
+
+\series bold 
+Pochiesa
+\series default 
+
+\newline 
+Paolo
+\newline 
+555, 222
+\newline 
+
+\series bold 
+Radina
+\series default 
+
+\newline 
+Claudio
+\newline 
+555
+\newline 
+
+\series bold 
+Stuffer
+\series default 
+
+\newline 
+Oskar
+\newline 
+555
+\newline 
+
+\series bold 
+Tacchelli
+\series default 
+
+\newline 
+Ugo
+\newline 
+555
+\newline 
+
+\series bold 
+Tezzele
+\series default 
+
+\newline 
+Margit
+\newline 
+555
+\newline 
+
+\series bold 
+Unterkalmsteiner
+\series default 
+
+\newline 
+Frieda
+\newline 
+555
+\newline 
+
+\series bold 
+Vieider
+\series default 
+
+\newline 
+Hilde
+\newline 
+555
+\newline 
+
+\series bold 
+Vigna
+\series default 
+
+\newline 
+Jürgen
+\newline 
+999
+\newline 
+
+\series bold 
+Weber
+\series default 
+
+\newline 
+Maurizio
+\newline 
+555
+\newline 
+
+\series bold 
+Winkler
+\series default 
+
+\newline 
+Franz
+\newline 
+555
+\newline 
+\newline 
+
+\series bold 
+Annovi
+\series default 
+
+\newline 
+Silvia
+\newline 
+999
+\newline 
+
+\series bold 
+Bertoli
+\series default 
+
+\newline 
+Stefano
+\newline 
+999
+\newline 
+
+\series bold 
+Bozzi
+\series default 
+
+\newline 
+Walter
+\newline 
+999
+\newline 
+
+\series bold 
+Cachia
+\series default 
+
+\newline 
+Maria
+\newline 
+999
+\newline 
+
+\series bold 
+Cachia
+\series default 
+
+\newline 
+Maurizio
+\newline 
+999
+\newline 
+
+\series bold 
+Cinquemani
+\series default 
+
+\newline 
+Giusi
+\newline 
+999
+\newline 
+
+\series bold 
+Colin
+\series default 
+
+\newline 
+Bernard
+\newline 
+999
+\newline 
+
+\series bold 
+Concli
+\series default 
+
+\newline 
+Gianfranco
+\newline 
+999
+\newline 
+
+\series bold 
+Dal Bosco
+\series default 
+
+\newline 
+Carolina
+\newline 
+999
+\newline 
+
+\series bold 
+Dalpiaz
+\series default 
+
+\newline 
+Annamaria
+\newline 
+999
+\newline 
+
+\series bold 
+Feliciello
+\series default 
+
+\newline 
+Domenico
+\newline 
+999
+\newline 
+
+\series bold 
+Focarelli
+\series default 
+
+\newline 
+Paola
+\newline 
+999
+\newline 
+
+\series bold 
+Galletti
+\series default 
+
+\newline 
+Oreste
+\newline 
+999
+\newline 
+
+\series bold 
+Gasparini
+\series default 
+
+\newline 
+Franca
+\newline 
+999
+\newline 
+
+\series bold 
+Rizzardi
+\series default 
+
+\newline 
+Paola
+\newline 
+999
+\newline 
+
+\series bold 
+Lassini
+\series default 
+
+\newline 
+Giancarlo
+\newline 
+999
+\newline 
+
+\series bold 
+Malfatti
+\series default 
+
+\newline 
+Luciano
+\newline 
+999
+\newline 
+
+\series bold 
+Malfatti
+\series default 
+
+\newline 
+Valeriano
+\newline 
+999
+\newline 
+
+\series bold 
+Meneguzzo
+\series default 
+
+\newline 
+Roberto
+\newline 
+999
+\newline 
+
+\series bold 
+Mezzadra
+\series default 
+
+\newline 
+Roberto
+\newline 
+999
+\newline 
+
+\series bold 
+Pirpamer
+\series default 
+
+\newline 
+Erich
+\newline 
+999
+\newline 
+
+\series bold 
+Pochiesa
+\series default 
+
+\newline 
+Paolo
+\newline 
+999, 222
+\newline 
+
+\series bold 
+Radina
+\series default 
+
+\newline 
+Claudio
+\newline 
+999
+\newline 
+
+\series bold 
+Stuffer
+\series default 
+
+\newline 
+Oskar
+\newline 
+999
+\newline 
+
+\series bold 
+Tacchelli
+\series default 
+
+\newline 
+Ugo
+\newline 
+999
+\newline 
+
+\series bold 
+Tezzele
+\series default 
+
+\newline 
+Margit
+\newline 
+999
+\layout Standard
+
+multirow - 
+\series bold 
+Vertical Alignment in Tables
+\layout Standard
+
+The package file 
+\family sans 
+multirow
+\family default 
+ (unknown author) automates the procedure of constructing tables with cells
+ spanning several rows by defining a 
+\family typewriter 
+
+\backslash 
+multirow
+\family default 
+ command.
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+5 4 1 0 -1 -1 -1 -1
+1 1 0 0
+1 0 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 0 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+1 8 0 0 0 0 0
+0 8 1 0 0 0 0
+1 8 0 0 0 0 0
+0 8 1 0 0 0 0
+1 8 0 0 0 0 0
+0 8 1 0 0 0 0
+1 8 0 0 0 0 0
+0 8 1 0 0 0 0
+1 8 0 1 0 0 0
+0 8 1 0 0 0 0
+1 8 0 1 0 0 0
+0 8 1 0 0 0 0
+
+a
+\newline 
+b
+\newline 
+c
+\newline 
+d
+\newline 
+
+\latex latex 
+
+\backslash 
+multirow{4}{14mm}{
+\latex default 
+Text in column 1
+\latex latex 
+}
+\latex default 
+
+\newline 
+C2a
+\newline 
+
+\latex latex 
+
+\backslash 
+multirow{4}{14mm}{
+\latex default 
+Text in column 1
+\latex latex 
+}
+\latex default 
+
+\newline 
+C4a
+\newline 
+
+\newline 
+C2b
+\newline 
+
+\newline 
+C4b
+\newline 
+
+\newline 
+C2c
+\newline 
+
+\newline 
+C4c
+\newline 
+
+\newline 
+C2e
+\newline 
+
+\newline 
+C4e
+\layout Standard
+\pagebreak_top 
+footnotes - 
+\series bold 
+How to use footnotes in tables
+\layout Standard
+
+There are different approaches to putting footnotes inside tables.
+ I'll explain to you the ones I've found work quite well within LyX (maybe
+ these are the only ones which work at all :).
+\layout Enumerate
+
+
+\emph on 
+Using Minipage-Environments
+\begin_deeper 
+\layout Standard
+
+Note that the footnotes are displayed immediately after the minipage closes.
+ The default numbering uses lowercase letters.
+\layout LaTeX
+
+{
+\backslash 
+centering
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \pextra_type 2 \pextra_alignment 0 \pextra_widthp 25
+\LyXTable
+multicol4
+6 4 0 0 -1 -1 -1 -1
+1 1 0 0
+1 0 0 0
+0 0 1 0
+1 0 0 0
+1 1 0 0
+0 1 1 0
+8 1 1 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 1 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 1 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+
+a
+\newline 
+b
+\newline 
+c
+\newline 
+d
+\newline 
+b
+\newline 
+1
+\latex latex 
+
+\backslash 
+footnote{
+\latex default 
+
+\newline 
+2
+\newline 
+3
+\newline 
+
+\newline 
+example1 cell(b,1)
+\latex latex 
+}
+\latex default 
+
+\newline 
+
+\newline 
+
+\newline 
+c
+\newline 
+4
+\newline 
+5
+\newline 
+6
+\newline 
+d
+\newline 
+7
+\newline 
+8
+\newline 
+9
+\latex latex 
+
+\backslash 
+footnote{
+\latex default 
+
+\newline 
+
+\newline 
+
+\newline 
+
+\newline 
+example1 cell(d,9)
+\latex latex 
+}
+\layout LaTeX
+
+}
+\end_deeper 
+\layout Enumerate
+
+
+\emph on 
+Using the 
+\family sans 
+Longtable-Option
+\begin_deeper 
+\layout Standard
+
+Just select the 
+\family sans 
+Longtable-Button
+\family default 
+ in the 
+\family sans 
+Table-Layout-Menu
+\family default 
+ and footnotes will be displayed at the bottom of the page.
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+6 4 1 0 -1 -1 -1 -1
+1 1 0 0
+1 0 0 0
+0 0 1 0
+1 0 0 0
+1 1 0 0
+0 1 1 0
+8 1 1 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 1 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 1 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+
+a
+\newline 
+b
+\newline 
+c
+\newline 
+d
+\newline 
+b
+\newline 
+1
+\latex latex 
+
+\backslash 
+footnote{
+\latex default 
+
+\newline 
+2
+\newline 
+3
+\newline 
+
+\newline 
+example2 cell(b,1)
+\latex latex 
+}
+\latex default 
+
+\newline 
+
+\newline 
+
+\newline 
+c
+\newline 
+4
+\newline 
+5
+\newline 
+6
+\newline 
+d
+\newline 
+7
+\newline 
+8
+\newline 
+9
+\latex latex 
+
+\backslash 
+footnote{
+\latex default 
+
+\newline 
+
+\newline 
+
+\newline 
+
+\newline 
+example2 cell(d,9)
+\latex latex 
+}
+\end_deeper 
+\layout Enumerate
+
+
+\emph on 
+Using footnotemark and footnotetext LaTeX commands
+\begin_deeper 
+\layout Standard
+
+This is a heavy way to do it but just to demonstrate that it works, here
+ it is.
+ Use this method in minipages to get footnotes at the bottom of the page.
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol4
+4 4 0 0 -1 -1 -1 -1
+1 1 0 0
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 1 
+8 1 0 
+8 1 0 
+8 1 1 
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 1 0 0
+
+a
+\newline 
+b
+\newline 
+c
+\newline 
+d
+\newline 
+b
+\newline 
+1
+\latex latex 
+
+\backslash 
+footnotemark
+\latex default 
+
+\newline 
+2
+\newline 
+3
+\newline 
+c
+\newline 
+4
+\newline 
+5
+\newline 
+6
+\newline 
+d
+\newline 
+7
+\newline 
+8
+\newline 
+9
+\latex latex 
+
+\backslash 
+footnotemark
+\layout LaTeX
+
+
+\backslash 
+addtocounter{footnote}{-1}
+\backslash 
+footnotetext{example3 cell(b,1)}%
+\newline 
+\backslash 
+addtocounter{footnote}{1}
+\backslash 
+footnotetext{example3 cell(d,9)}
+\the_end
diff --git a/lib/examples/aa_head.lyx b/lib/examples/aa_head.lyx
new file mode 100644 (file)
index 0000000..33b3700
--- /dev/null
@@ -0,0 +1,153 @@
+#This file was created by <pit> Tue Nov 25 23:06:48 1997
+#LyX 0.11 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass aapaper
+\language default
+\inputencoding latin1
+\fontscheme times
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Thesaurus
+
+Sorry, no thesaurus for that
+\layout Title
+
+The Use of LyX in Astronomy
+\layout Subtitle
+
+Looking towards a bright future
+\layout Author
+
+P.
+ Sütterlin
+\latex latex 
+
+\backslash 
+inst{
+\latex default 
+1
+\latex latex 
+}
+\begin_float footnote 
+\layout Standard
+
+
+\series medium 
+\emph on 
+Present Address:
+\emph default 
+ Universitäts-Sternwarte, Geismarlandstr.
+ 11, D-37083 Göttingen
+\end_float 
+
+\latex latex 
+\backslash 
+and
+\latex default 
+ A.N.
+ Coauthor
+\latex latex 
+
+\backslash 
+inst{
+\latex default 
+2
+\latex latex 
+}
+\layout Address
+
+Kiepenheuer-Institut für Sonnenphysik, Schöneckstr.
+ 6, D-79104 Freiburg
+\latex latex 
+
+\backslash 
+and
+\latex default 
+ Somewhere-in-the-Country
+\layout Offprint
+
+P.
+ Sütterlin
+\layout Email
+
+pit@uni-sw.gwdg.de
+\layout Date
+
+Received: maybe / Accepted: who knows
+\layout Abstract
+
+In this paper we show that LyX can be used to write papers for puplication
+ in the journal Astronomy and Astrophysics.
+\layout Abstract
+
+
+\latex latex 
+
+\backslash 
+keywords{
+\latex default 
+LaTeX - Wordprocessing - Publication
+\latex latex 
+}
+\layout Section
+
+Intoduction
+\layout Standard
+
+In 1997, Springer Verlag decided to accept papers for publication in their
+ journals 
+\emph on 
+Astronomy and Astrophysics
+\emph default 
+ and the acompanying 
+\emph on 
+Supplement Series
+\emph default 
+ only in form of LaTeX.
+ At the same time, they switched the layout macros to LaTeX2
+\begin_inset Formula \( \epsilon  \)
+\end_inset 
+
+ (Lamport 
+\begin_inset LatexCommand \cite{kopka}
+
+\end_inset 
+
+).
+ This made it easy to adapt a corresponding LyX style to produce the correct
+ output for direct submission to A&A.
+\layout Section
+
+Discussion
+\layout Standard
+
+What is there to discuss about? The existence of LyX with this layout makes
+ it as easy as one could wish to write scientific papers.
+\layout Bibliography
+\bibitem [1994]{lamport}
+
+L.
+ Lamport, 1994: 
+\emph on 
+LaTeX: A Document Preparation System
+\emph default 
+, Addison-Wesley Publishing Company, 2nd edition
+\the_end
diff --git a/lib/examples/aa_paper.lyx b/lib/examples/aa_paper.lyx
new file mode 100644 (file)
index 0000000..54e5369
--- /dev/null
@@ -0,0 +1,939 @@
+#This file was created by <pit> Mon Nov 24 22:57:48 1997
+#LyX 0.11 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass aapaper
+\language default
+\inputencoding latin1
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Thesaurus
+
+06(03.11.1;16.06.1;19.06.1;19.37.1;19.53.1;19.63.1)
+\layout Title
+
+Hydrodynamics of giant planet formation
+\layout Subtitle
+
+I.
+ Overviewing the 
+\begin_inset Formula \( \kappa  \)
+\end_inset 
+
+-mechanism
+\layout Author
+
+G.
+ Wuchterl
+\layout Address
+
+Institute for Astronomy (IfA), University of Vienna, Türkenschanzstrasse
+ 17, A-1180 Vienna
+\layout Offprint
+
+G.
+ Wuchterl
+\layout Email
+
+wuchterl@amok.ast.univie.ac.at
+\layout Date
+
+Received September 15, 1996 / Accepted March 16, 1997
+\layout Abstract
+
+To investigate the physical nature of the `nuc\SpecialChar \-
+leated instability' of proto
+ giant planets (Mizuno 
+\begin_inset LatexCommand \cite{mizuno}
+
+\end_inset 
+
+), the stability of layers in static, radiative gas spheres is analysed
+ on the basis of Baker's 
+\begin_inset LatexCommand \cite{baker}
+
+\end_inset 
+
+ standard one-zone model.
+ It is shown that stability depends only upon the equations of state, the
+ opacities and the local thermodynamic state in the layer.
+ Stability and instability can therefore be expressed in the form of stability
+ equations of state which are universal for a given composition.
+\layout Abstract
+
+The stability equations of state are calculated for solar composition and
+ are displayed in the domain 
+\begin_inset Formula \( -14\leq \lg \rho /[\mathrm{g}\, \mathrm{cm}^{-3}]\leq 0 \)
+\end_inset 
+
+, 
+\begin_inset Formula \( 8.8\leq \lg e/[\mathrm{erg}\, \mathrm{g}^{-1}]\leq 17.7 \)
+\end_inset 
+
+.
+ These displays may be used to determine the one-zone stability of layers
+ in stellar or planetary structure models by directly reading off the value
+ of the stability equations for the thermodynamic state of these layers,
+ specified by state quantities as density 
+\begin_inset Formula \( \rho  \)
+\end_inset 
+
+, temperature 
+\begin_inset Formula \( T \)
+\end_inset 
+
+ or specific internal energy 
+\begin_inset Formula \( e \)
+\end_inset 
+
+.
+ Regions of instability in the 
+\begin_inset Formula \( (\rho \, e) \)
+\end_inset 
+
+-plane are described and related to the underlying microphysical processes.
+ Vibrational instability is found to be a common phenomenon at temperatures
+ lower than the second He ionisation zone.
+ The 
+\begin_inset Formula \( \kappa  \)
+\end_inset 
+
+-mechanism is widespread under `cool' conditions.
+\layout Abstract
+
+
+\latex latex 
+
+\backslash 
+keywords{
+\latex default 
+giant planet formation -- 
+\begin_inset Formula \( \kappa  \)
+\end_inset 
+
+-mechanism -- stability of gas spheres 
+\latex latex 
+}
+\layout Section
+
+Introduction
+\layout Standard
+
+In the 
+\emph on 
+nucleated instability
+\emph default 
+ (also called core instability) hypothesis of giant planet formation, a
+ critical mass for static core envelope protoplanets has been found.
+ Mizuno (
+\begin_inset LatexCommand \cite{mizuno}
+
+\end_inset 
+
+) determined the critical mass of the core to be about 
+\begin_inset Formula \( 12\, M_{\oplus } \)
+\end_inset 
+
+ (
+\begin_inset Formula \( M_{\oplus }=5.975\, 10^{27}\, \mathrm{g} \)
+\end_inset 
+
+ is the Earth mass), which is independent of the outer boundary conditions
+ and therefore independent of the location in the solar nebula.
+ This critical value for the core mass corresponds closely to the cores
+ of today's giant planets.
+\layout Standard
+
+Although no hydrodynamical study has been available many workers conjectured
+ that a collapse or rapid contraction will ensue after accumulating the
+ critical mass.
+ The main motivation for this article is to investigate the stability of
+ the static envelope at the critical mass.
+ With this aim the local, linear stability of static radiative gas spheres
+ is investigated on the basis of Baker's (
+\begin_inset LatexCommand \cite{baker}
+
+\end_inset 
+
+) standard one-zone model.
+ The nonlinear, hydrodynamic evolution of the protogiant planet beyond the
+ critical mass, as calculated by Wuchterl (
+\begin_inset LatexCommand \cite{wuchterl}
+
+\end_inset 
+
+), will be described in a forthcoming article.
+\layout Standard
+
+The fact that Wuchterl (
+\begin_inset LatexCommand \cite{wuchterl}
+
+\end_inset 
+
+) found the excitation of hydrodynamical waves in his models raises considerable
+ interest on the transition from static to dynamic evolutionary phases of
+ the protogiant planet at the critical mass.
+ The waves play a crucial role in the development of the so-called nucleated
+ instability in the nucleated instability hypothesis.
+ They lead to the formation of shock waves and massive outflow phenomena.
+ The protoplanet evolves into a new quasi-equilibrium structure with a 
+\emph on 
+pulsating
+\emph default 
+ envelope, after the mass loss phase has declined.
+\layout Standard
+
+Phenomena similar to the ones described above for giant planet formation
+ have been found in hydrodynamical models concerning star formation where
+ protostellar cores explode (Tscharnuter 
+\begin_inset LatexCommand \cite{tscarnuter}
+
+\end_inset 
+
+, Balluch 
+\begin_inset LatexCommand \cite{balluch}
+
+\end_inset 
+
+), whereas earlier studies found quasi-steady collapse flows.
+ The similarities in the (micro)physics, i.e., constitutive relations of protostel
+lar cores and protogiant planets serve as a further motivation for this
+ study.
+\layout Section
+
+Baker's standard one-zone model
+\layout Standard
+
+\begin_float wide-fig 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+rule{0.4pt}{4cm}
+\hfill 
+
+\backslash 
+parbox[b]{55mm}{
+\layout Caption
+
+Adiabatic exponent 
+\begin_inset Formula \( \Gamma  \)
+\end_inset 
+
+.
+\begin_inset Formula \( \Gamma _{1} \)
+\end_inset 
+
+is plotted as a function of 
+\begin_inset Formula \( \lg  \)
+\end_inset 
+
+ internal energy 
+\begin_inset Formula \( [\mathrm{erg}\, \mathrm{g}^{-1}] \)
+\end_inset 
+
+ and 
+\begin_inset Formula \( \lg  \)
+\end_inset 
+
+ density 
+\begin_inset Formula \( [\mathrm{g}\, \mathrm{cm}^{-3}] \)
+\end_inset 
+
+
+\begin_inset LatexCommand \label{FigGam}
+
+\end_inset 
+
+
+\latex latex 
+}
+\end_float 
+In this section the one-zone model of Baker (
+\begin_inset LatexCommand \cite{baker}
+
+\end_inset 
+
+), originally used to study the Cepheïd pulsation mechanism, will be briefly
+ reviewed.
+ The resulting stability criteria will be rewritten in terms of local state
+ variables, local timescales and constitutive relations.
+\layout Standard
+
+Baker (
+\begin_inset LatexCommand \cite{baker}
+
+\end_inset 
+
+) investigates the stability of thin layers in self-gravitating, spherical
+ gas clouds with the following properties:
+\layout Itemize
+
+hydrostatic equilibrium,
+\layout Itemize
+
+thermal equilibrium,
+\layout Itemize
+
+energy transport by grey radiation diffusion.
+\layout Standard
+
+For the one-zone-model Baker obtains necessary conditions for dynamical,
+ secular and vibrational (or pulsational) stability [Eqs.
+\protected_separator 
+(34a,
+\latex latex 
+
+\backslash 
+,
+\latex default 
+b,
+\latex latex 
+
+\backslash 
+,
+\latex default 
+c) in Baker 
+\begin_inset LatexCommand \cite{baker}
+
+\end_inset 
+
+].
+ Using Baker's notation:
+\begin_inset Formula 
+\begin{eqnarray*}
+M_{\mathrm{r}} &  & \mathrm{mass}\, \mathrm{internal}\, \mathrm{to}\, \mathrm{the}\, \mathrm{radius}\, r\\
+m &  & \mathrm{mass}\, \mathrm{of}\, \mathrm{the}\, \mathrm{zone}\\
+r_{0} &  & \mathrm{unperturbed}\, \mathrm{zone}\, \mathrm{radius}\\
+\rho _{0} &  & \mathrm{unperturbed}\, \mathrm{density}\, \mathrm{in}\, \mathrm{the}\, \mathrm{zone}\\
+T_{0} &  & \mathrm{unperturbed}\, \mathrm{temperature}\, \mathrm{in}\, \mathrm{the}\, \mathrm{zone}\\
+L_{r0} &  & \mathrm{unperturbed}\, \mathrm{luminosity}\\
+E_{\mathrm{th}} &  & \mathrm{thermal}\, \mathrm{energy}\, \mathrm{of}\, \mathrm{the}\, \mathrm{zone}
+\end{eqnarray*}
+
+\end_inset 
+
+and with the definitions of the 
+\emph on 
+local cooling time
+\emph default 
+ (see Fig.
+\protected_separator 
+
+\begin_inset LatexCommand \ref{FigGam}
+
+\end_inset 
+
+)
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{equation}
+\label{}
+\tau _{\mathrm{co}}=\frac{E_{\mathrm{th}}}{L_{r0}}\, ,
+\end{equation}
+
+\end_inset 
+
+and the 
+\emph on 
+local free-fall time
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{equation}
+\label{}
+\tau _{\mathrm{ff}}=\sqrt{\frac{3\pi }{32G}\frac{4\pi r_{0}^{3}}{3M_{\mathrm{r}}}\, ,}
+\end{equation}
+
+\end_inset 
+
+Baker's 
+\begin_inset Formula \( K \)
+\end_inset 
+
+ and 
+\begin_inset Formula \( \sigma _{0} \)
+\end_inset 
+
+ have the following form:
+\begin_inset Formula 
+\begin{eqnarray}
+\sigma _{0} & = & \frac{\pi }{\sqrt{8}}\frac{1}{\tau _{\mathrm{ff}}}\\
+K & = & \frac{\sqrt{32}}{\pi }\frac{1}{\delta }\frac{\tau _{\mathrm{ff}}}{\tau _{\mathrm{co}}}\, ;
+\end{eqnarray}
+
+\end_inset 
+
+where 
+\begin_inset Formula \( E_{\mathrm{th}}\approx m(P_{0}/\rho _{0}) \)
+\end_inset 
+
+ has been used and
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{equation}
+\label{}
+\begin{array}{l}
+\delta =-\left( \frac{\partial \ln \rho }{\partial \ln T}\right) _{P}\\
+e=mc^{2}
+\end{array}
+\end{equation}
+
+\end_inset 
+
+is a thermodynamical quantity which is of order 
+\begin_inset Formula \( 1 \)
+\end_inset 
+
+ and equal to 
+\begin_inset Formula \( 1 \)
+\end_inset 
+
+ for nonreacting mixtures of classical perfect gases.
+ The physical meaning of 
+\begin_inset Formula \( \sigma _{0} \)
+\end_inset 
+
+ and 
+\begin_inset Formula \( K \)
+\end_inset 
+
+ is clearly visible in the equations above.
+\begin_inset Formula \( \sigma _{0} \)
+\end_inset 
+
+ represents a frequency of the order one per free-fall time.
+\begin_inset Formula \( K \)
+\end_inset 
+
+ is proportional to the ratio of the free-fall time and the cooling time.
+ Substituting into Baker's criteria, using thermodynamic identities and
+ definitions of thermodynamic quantities, 
+\begin_inset Formula 
+\[
+\Gamma _{1}=\left( \frac{\partial \ln P}{\partial \ln \rho }\right) _{S}\, ,\: \chi _{\rho }=\left( \frac{\partial \ln P}{\partial \ln \rho }\right) _{T}\, ,\: \kappa _{P}=\left( \frac{\partial \ln \kappa }{\partial \ln P}\right) _{T}\]
+
+\end_inset 
+
+
+\layout Standard
+
+
+\begin_inset Formula 
+\[
+\nabla _{\mathrm{ad}}=\left( \frac{\partial \ln T}{\partial \ln P}\right) _{S}\, ,\: \chi _{T}=\left( \frac{\partial \ln P}{\partial \ln T}\right) _{\rho }\, ,\: \kappa _{T}=\left( \frac{\partial \ln \kappa }{\partial \ln P}\right) _{T}\]
+
+\end_inset 
+
+one obtains, after some pages of algebra, the conditions for 
+\emph on 
+stability
+\emph default 
+ given below:
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{eqnarray}
+\frac{\pi ^{2}}{8}\frac{1}{\tau _{\mathrm{ff}}^{2}}(3\Gamma _{1}-4) & > & 0\label{ZSDynSta} \\
+\frac{\pi ^{2}}{\tau _{\mathrm{co}}\tau _{\mathrm{ff}}^{2}}\Gamma _{1}\nabla _{\mathrm{ad}}\left[ \frac{1-3/4\chi _{\rho }}{\chi _{T}}(\kappa _{T}-4)+\kappa _{P}+1\right]  & > & 0\label{ZSSecSta} \\
+\frac{\pi ^{2}}{4}\frac{3}{\tau _{\mathrm{co}}\tau _{\mathrm{ff}}^{2}}\Gamma _{1}^{2}\nabla _{\mathrm{ad}}\left[ 4\nabla _{\mathrm{ad}}-(\nabla _{\mathrm{ad}}\kappa _{T}+\kappa _{P})-\frac{4}{3\Gamma _{1}}\right]  & > & 0\label{ZSVibSta} 
+\end{eqnarray}
+
+\end_inset 
+
+For a physical discussion of the stability criteria see Baker (
+\begin_inset LatexCommand \cite{baker}
+
+\end_inset 
+
+) or Cox (
+\begin_inset LatexCommand \cite{cox}
+
+\end_inset 
+
+).
+\layout Standard
+
+We observe that these criteria for dynamical, secular and vibrational stability,
+ respectively, can be factorized into
+\layout Enumerate
+
+a factor containing local timescales only,
+\layout Enumerate
+
+a factor containing only constitutive relations and their derivatives.
+\layout Standard
+
+The first factors, depending on only timescales, are positive by definition.
+ The signs of the left hand sides of the inequalities
+\protected_separator 
+(
+\begin_inset LatexCommand \ref{ZSDynSta}
+
+\end_inset 
+
+), (
+\begin_inset LatexCommand \ref{ZSSecSta}
+
+\end_inset 
+
+) and (
+\begin_inset LatexCommand \ref{ZSVibSta}
+
+\end_inset 
+
+) therefore depend exclusively on the second factors containing the constitutive
+ relations.
+ Since they depend only on state variables, the stability criteria themselves
+ are 
+\emph on 
+functions of the thermodynamic state in the local zone
+\emph default 
+.
+ The one-zone stability can therefore be determined from a simple equation
+ of state, given for example, as a function of density and temperature.
+ Once the microphysics, i.e.
+ the thermodynamics and opacities (see Table
+\protected_separator 
+
+\begin_inset LatexCommand \ref{KapSou}
+
+\end_inset 
+
+), are specified (in practice by specifying a chemical composition) the
+ one-zone stability can be inferred if the thermodynamic state is specified.
+ The zone -- or in other words the layer -- will be stable or unstable in
+ whatever object it is imbedded as long as it satisfies the one-zone-model
+ assumptions.
+ Only the specific growth rates (depending upon the time scales) will be
+ different for layers in different objects.
+\layout Standard
+
+\begin_float tab 
+\layout Caption
+
+Opacity sources
+\begin_inset LatexCommand \label{KapSou}
+
+\end_inset 
+
+
+\layout Standard
+\align center \LyXTable
+multicol4
+4 2 0 0 -1 -1 -1 -1
+1 0 0 0
+1 0 0 0
+0 0 0 0
+0 1 0 0
+2 0 0 
+2 0 0 
+0 2 1 0 0 0 0
+0 2 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 2 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+0 8 1 0 0 0 0
+
+Source
+\newline 
+T/[K]
+\newline 
+Yorke 1979, Yorke 1980a
+\newline 
+
+\begin_inset Formula \( \leq 1700^{\mathrm{a}} \)
+\end_inset 
+
+
+\newline 
+Krügel 1971
+\newline 
+
+\begin_inset Formula \( 1700\leq T\leq 5000 \)
+\end_inset 
+
+\newline 
+Cox & Stewart 1969
+\newline 
+
+\begin_inset Formula \( 5000\leq  \)
+\end_inset 
+
+\layout Standard
+
+
+\begin_inset Formula \( \mathrm{a} \)
+\end_inset 
+
+ This is footnote a
+\end_float 
+\begin_float wide-tab 
+\layout Caption
+
+Regions of secular instability
+\begin_inset LatexCommand \label{TabSecInst}
+
+\end_inset 
+
+
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+vspace{4cm}
+\end_float 
+We will now write down the sign (and therefore stability) determining parts
+ of the left-hand sides of the inequalities (
+\begin_inset LatexCommand \ref{ZSDynSta}
+
+\end_inset 
+
+), (
+\begin_inset LatexCommand \ref{ZSSecSta}
+
+\end_inset 
+
+) and (
+\begin_inset LatexCommand \ref{ZSVibSta}
+
+\end_inset 
+
+) and thereby obtain 
+\emph on 
+stability equations of state
+\emph default 
+.
+\layout Standard
+
+The sign determining part of inequality
+\protected_separator 
+(
+\begin_inset LatexCommand \ref{ZSDynSta}
+
+\end_inset 
+
+) is 
+\begin_inset Formula \( 3\Gamma _{1}-4 \)
+\end_inset 
+
+ and it reduces to the criterion for dynamical stability
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{equation}
+\label{}
+\Gamma _{1}>\frac{4}{3}
+\end{equation}
+
+\end_inset 
+
+Stability of the thermodynamical equilibrium demands
+\begin_inset Formula 
+\begin{equation}
+\label{}
+\chi _{\rho }>0,\: \: c_{v}>0\, ,
+\end{equation}
+
+\end_inset 
+
+and
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{equation}
+\label{}
+\chi _{T}>0
+\end{equation}
+
+\end_inset 
+
+holds for a wide range of physical situations.
+ With
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{eqnarray}
+\Gamma _{3}-1=\frac{P}{\rho T}\frac{\chi _{T}}{c_{v}} & > & 0\\
+\Gamma _{1}=\chi _{\rho }+\chi _{T}(\Gamma _{3}-1) & > & 0\\
+\nabla _{\mathrm{ad}}=\frac{\Gamma _{3}-1}{\Gamma _{1}} & > & 0
+\end{eqnarray}
+
+\end_inset 
+
+we find the sign determining terms in inequalities
+\protected_separator 
+(
+\begin_inset LatexCommand \ref{ZSSecSta}
+
+\end_inset 
+
+) and (
+\begin_inset LatexCommand \ref{ZSVibSta}
+
+\end_inset 
+
+) respectively and obtain the following form of the criteria for dynamical,
+ secular and vibrational 
+\emph on 
+stability
+\emph default 
+, respectively:
+\layout Standard
+
+
+\begin_inset Formula 
+\begin{eqnarray}
+3\Gamma _{1}-4=:\, S_{\mathrm{dyn}}> & 0 & \label{DynSta} \\
+\frac{1-3/4\chi _{\rho }}{\chi _{T}}(\kappa _{T}-4)+\kappa _{P}+1=:\, S_{\mathrm{sec}}> & 0 & \label{SecSta} \\
+4\nabla _{\mathrm{ad}}-(\nabla _{\mathrm{ad}}\kappa _{T}+\kappa _{P}-\frac{4}{3\Gamma _{1}}=:\, S_{\mathrm{vib}}> & 0 & \label{VibSta} 
+\end{eqnarray}
+
+\end_inset 
+
+The constitutive relations are to be evaluated for the unperturbed thermodynamic
+ state (say 
+\begin_inset Formula \( (\rho _{0},T_{0}) \)
+\end_inset 
+
+) of the zone.
+ We see that the one-zone stability of the layer depends only on the constitutiv
+e relations 
+\begin_inset Formula \( \Gamma _{1} \)
+\end_inset 
+
+, 
+\begin_inset Formula \( \nabla _{\mathrm{ad}} \)
+\end_inset 
+
+, 
+\begin_inset Formula \( \chi _{T},\, \chi _{\rho } \)
+\end_inset 
+
+, 
+\begin_inset Formula \( \kappa _{P},\, \kappa _{T} \)
+\end_inset 
+
+.
+ These depend only on the unperturbed thermodynamical state of the layer.
+ Therefore the above relations define the one-zone-stability equations of
+ state 
+\begin_inset Formula \( S_{\mathrm{dyn}},\, S_{\mathrm{sec}} \)
+\end_inset 
+
+ and 
+\begin_inset Formula \( S_{\mathrm{vib}} \)
+\end_inset 
+
+.
+ See Fig.
+\protected_separator 
+
+\begin_inset LatexCommand \ref{FigVibStab}
+
+\end_inset 
+
+ for a picture of 
+\begin_inset Formula \( S_{\mathrm{vib}} \)
+\end_inset 
+
+.
+ Regions of secular instability are listed in Table
+\protected_separator 
+
+\begin_inset LatexCommand \ref{TabSecInst}
+
+\end_inset 
+
+.
+\layout Standard
+
+\begin_float fig 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+vspace{5cm}
+\layout Caption
+
+Vibrational stability equation of state 
+\begin_inset Formula \( S_{\mathrm{vib}}(\lg e,\lg \rho ) \)
+\end_inset 
+
+.
+\begin_inset Formula \( >0 \)
+\end_inset 
+
+ means vibrational stability.
+\begin_inset LatexCommand \label{FigVibStab}
+
+\end_inset 
+
+
+\end_float 
+\layout Section
+
+Conclusions
+\layout Enumerate
+
+The conditions for the stability of static, radiative layers in gas spheres,
+ as described by Baker's (
+\begin_inset LatexCommand \cite{baker}
+
+\end_inset 
+
+) standard one-zone model, can be expressed as stability equations of state.
+ These stability equations of state depend only on the local thermodynamic
+ state of the layer.
+\layout Enumerate
+
+If the constitutive relations -- equations of state and Rosseland mean opacities
+ -- are specified, the stability equations of state can be evaluated without
+ specifying properties of the layer.
+\layout Enumerate
+
+For solar composition gas the 
+\begin_inset Formula \( \kappa  \)
+\end_inset 
+
+-mechanism is working in the regions of the ice and dust features in the
+ opacities, the 
+\begin_inset Formula \( \mathrm{H}_{2} \)
+\end_inset 
+
+ dissociation and the combined H, first He ionization zone, as indicated
+ by vibrational instability.
+ These regions of instability are much larger in extent and degree of instabilit
+y than the second He ionization zone that drives the Cepheïd pulsations.
+\layout Acknowledgement
+
+Part of this work was supported by the German 
+\emph on 
+Deut\SpecialChar \-
+sche For\SpecialChar \-
+schungs\SpecialChar \-
+ge\SpecialChar \-
+mein\SpecialChar \-
+schaft, DFG
+\emph default 
+ project number Ts
+\protected_separator 
+17/2--1.
+\layout Bibliography
+\bibitem [1966]{baker}
+
+Baker N., 1966, in: Stellar Evolution, eds.
+\protected_separator 
+R.
+ F.
+ Stein, A.
+ G.
+ W.
+ Cameron, Plenum, New York, p.
+\protected_separator 
+333
+\layout Bibliography
+\bibitem [1988]{balluch}
+
+Balluch M., 1988, A&A 200, 58
+\layout Bibliography
+\bibitem [1980]{cox}
+
+Cox J.
+ P., 1980, Theory of Stellar Pulsation, Princeton University Press, Princeton,
+ p.
+\protected_separator 
+165
+\layout Bibliography
+\bibitem [1969]{cox69}
+
+Cox A.
+ N., Stewart J.
+ N., 1969, Academia Nauk, Scientific Information 15, 1
+\layout Bibliography
+\bibitem [1971]{kruegel}
+
+Krügel E., 1971, Der Rosselandsche Mittelwert bei tiefen Temperaturen, Diplom--Th
+esis, Univ.
+\protected_separator 
+ Göttingen
+\layout Bibliography
+\bibitem [1980]{mizuno}
+
+Mizuno H., 1980, Prog.
+ Theor.
+ Phys.
+ 64, 544
+\layout Bibliography
+\bibitem [1987]{tscarnuter}
+
+Tscharnuter W.
+ M., 1987, A&A 188, 55
+\layout Bibliography
+\bibitem [1989]{wuchterl}
+
+Wuchterl G., 1989, Zur Entstehung der Gasplaneten.
+ Ku\SpecialChar \-
+gel\SpecialChar \-
+sym\SpecialChar \-
+me\SpecialChar \-
+tri\SpecialChar \-
+sche Gas\SpecialChar \-
+strö\SpecialChar \-
+mun\SpecialChar \-
+gen auf Pro\SpecialChar \-
+to\SpecialChar \-
+pla\SpecialChar \-
+ne\SpecialChar \-
+ten, Dissertation, Univ.
+ Wien
+\layout Bibliography
+\bibitem [1979]{yorke79}
+
+Yorke H.
+ W., 1979, A&A 80, 215
+\layout Bibliography
+\bibitem [1980a]{yorke80a}
+
+Yorke H.
+ W., 1980a, A&A 86, 286
+\the_end
diff --git a/lib/examples/aas_sample.lyx b/lib/examples/aas_sample.lyx
new file mode 100644 (file)
index 0000000..95d29d1
--- /dev/null
@@ -0,0 +1,1305 @@
+#This file was created by <mike> Sun Jul 25 23:59:27 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass aastex
+\begin_preamble
+\newcommand{\vdag}{(v)^\dagger}
+\newcommand{\myemail}{skywalker@galaxy.far.far.away}
+\slugcomment{Not to appear in Nonlearned J., 45.}
+\shorttitle{Djorgovski et al.}
+\shortauthors{Collapsed Cores in Globular Clusters}
+\end_preamble
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Collapsed Cores in Globular Clusters,  Gauge-Boson Couplings, and AASTeX
+\latex latex 
+\latex default 
+Examples
+\layout Author
+
+S.
+ Djorgovski
+\latex latex 
+
+\backslash 
+altaffilmark{1,2,3}
+\latex default 
+ and Ivan R.
+ King
+\latex latex 
+
+\backslash 
+altaffilmark{1}
+\layout Affiliation
+
+Astronomy Department, University of California, Berkeley, CA 94720
+\layout Author
+
+C.
+ D.
+ Biemesderfer
+\latex latex 
+
+\backslash 
+altaffilmark{4,5}
+\layout Affiliation
+
+National Optical Astronomy Observatories, Tucson, AZ 85719
+\layout Email
+
+aastex-help@aas.org
+\layout And
+
+\layout Author
+
+R.
+ J.
+ Hanisch
+\latex latex 
+
+\backslash 
+altaffilmark{5}
+\layout Affiliation
+
+Space Telescope Science Institute, Baltimore, MD 21218
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+altaffiltext{1}{Visiting Astronomer, Cerro Tololo Inter-American Observatory.
+ CTIO is operated by AURA, Inc.
+\backslash 
+ under contract to the National Science Foundation.} 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+altaffiltext{2}{Society of Fellows, Harvard University.} 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+altaffiltext{3}{present address: Center for Astrophysics, 60 Garden Street,
+ Cambridge, MA 02138} 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+altaffiltext{4}{Visiting Programmer, Space Telescope Science Institute}
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+altaffiltext{5}{Patron, Alonso's Bar and Grill}
+\layout Abstract
+
+This is a preliminary report on surface photometry of the major fraction
+ of known globular clusters, to see which of them show the signs of a collapsed
+ core.
+ We also explore some diversionary mathematics and recreational tables.
+\layout Keywords
+
+clusters: globular, peanut---bosons: bozos
+\layout Section
+
+Introduction
+\layout Standard
+
+A focal problem today in the dynamics of globular clusters is core collapse.
+ It has been predicted by theory for decades 
+\latex latex 
+
+\backslash 
+citep{hen61,lyn68,spi85}
+\latex default 
+, but observation has been less alert to the phenomenon.
+ For many years the central brightness peak in M15 
+\latex latex 
+
+\backslash 
+citep{kin75,new78}
+\latex default 
+ seemed a unique anomaly.
+ Then 
+\latex latex 
+
+\backslash 
+citet{aur82}
+\latex default 
+ suggested a central peak in NGC 6397, and a limited photographic survey
+ of ours 
+\latex latex 
+
+\backslash 
+citep[Paper I]{djo84}
+\latex default 
+ found three more cases, including NGC 6624, whose sharp center had often
+ been remarked on 
+\latex latex 
+
+\backslash 
+citep{can78}
+\latex default 
+.
+\layout Section
+
+Observations
+\layout Standard
+
+All our observations were short direct exposures with CCD's.
+ At Lick Observatory we used a TI 500
+\begin_inset Formula \( \times  \)
+\end_inset 
+
+500 chip and a GEC 575
+\begin_inset Formula \( \times  \)
+\end_inset 
+
+385, on the 1-m Nickel reflector.
+ The only filter available at Lick was red.
+ At CTIO we used a GEC 575
+\begin_inset Formula \( \times  \)
+\end_inset 
+
+385, with 
+\begin_inset Formula \( B,V, \)
+\end_inset 
+
+ and 
+\begin_inset Formula \( R \)
+\end_inset 
+
+ filters, and an RCA 512
+\begin_inset Formula \( \times  \)
+\end_inset 
+
+320, with 
+\begin_inset Formula \( U,B,V,R, \)
+\end_inset 
+
+ and 
+\begin_inset Formula \( I \)
+\end_inset 
+
+ filters, on the 1.5-m reflector.
+ In the CTIO observations we tried to concentrate on the shortest practicable
+ wavelengths; but faintness, reddening, and poor short-wavelength sensitivity
+ often kept us from observing in 
+\begin_inset Formula \( U \)
+\end_inset 
+
+ or even in 
+\begin_inset Formula \( B \)
+\end_inset 
+
+.
+ All four cameras had scales of the order of 0.4 arcsec/pixel, and our field
+ sizes were around 3 arcmin.
+\layout Standard
+
+The CCD images are unfortunately not always suitable, for very poor clusters
+ or for clusters with large cores.
+ Since the latter are easily studied by other means, we augmented our own
+ CCD profiles by collecting from the literature a number of star-count profiles
+\latex latex 
+
+\backslash 
+citep{kin68,pet76,har84,ort85}
+\latex default 
+, as well as photoelectric profiles 
+\latex latex 
+
+\backslash 
+citep{kin66,kin75}
+\latex default 
+ and electronographic profiles 
+\latex latex 
+
+\backslash 
+citep{kro84}
+\latex default 
+.
+ In a few cases we judged normality by eye estimates on one of the Sky Surveys.
+\layout Section
+
+Helicity Amplitudes
+\layout Standard
+
+It has been realized that helicity amplitudes provide a convenient means
+ for Feynman diagram
+\begin_float footnote 
+\layout Standard
+
+Footnotes can be inserted like this.
+\end_float 
+ evaluations.
+ These amplitude-level techniques are particularly convenient for calculations
+ involving many Feynman diagrams, where the usual trace techniques for the
+ amplitude squared becomes unwieldy.
+ Our calculations use the helicity techniques developed by other authors
+\begin_inset LatexCommand \cite{hag86}
+
+\end_inset 
+
+; we briefly summarize below.
+\layout Subsection
+
+Formalism
+\layout Standard
+
+
+\begin_inset LatexCommand \label{bozomath}
+
+\end_inset 
+
+
+\layout Standard
+
+A tree-level amplitude in 
+\begin_inset Formula \( e^{+}e^{-} \)
+\end_inset 
+
+ collisions can be expressed in terms of fermion strings of the form 
+\begin_inset Formula 
+\begin{equation}
+\bar{v}(p_{2},\sigma _{2})P_{-\tau }\hat{a}_{1}\hat{a}_{2}\cdots \hat{a}_{n}u(p_{1},\sigma _{1}),
+\end{equation}
+
+\end_inset 
+
+ where 
+\begin_inset Formula \( p \)
+\end_inset 
+
+ and 
+\begin_inset Formula \( \sigma  \)
+\end_inset 
+
+ label the initial 
+\begin_inset Formula \( e^{\pm } \)
+\end_inset 
+
+ four-momenta and helicities 
+\begin_inset Formula \( (\sigma =\pm 1) \)
+\end_inset 
+
+, 
+\begin_inset Formula \( \hat{a}_{i}=a^{\mu }_{i}\gamma _{\nu } \)
+\end_inset 
+
+ and 
+\begin_inset Formula \( P_{\tau }=\frac{1}{2}(1+\tau \gamma _{5}) \)
+\end_inset 
+
+ is a chirality projection operator 
+\begin_inset Formula \( (\tau =\pm1 ) \)
+\end_inset 
+
+.
+ The 
+\begin_inset Formula \( a^{\mu }_{i} \)
+\end_inset 
+
+ may be formed from particle four-momenta, gauge-boson polarization vectors
+ or fermion strings with an uncontracted Lorentz index associated with final-sta
+te fermions.
+\layout NoteToEditor
+
+Figures 1 and 2 should appear side-by-side in print
+\layout Standard
+
+In the chiral representation the 
+\begin_inset Formula \( \gamma  \)
+\end_inset 
+
+ matrices are expressed in terms of 
+\begin_inset Formula \( 2\times 2 \)
+\end_inset 
+
+ Pauli matrices 
+\begin_inset Formula \( \sigma  \)
+\end_inset 
+
+ and the unit matrix 1 as 
+\begin_inset Formula 
+\begin{eqnarray}
+\gamma ^{\mu } & = & \left( \begin{array}{cc}
+0 & \sigma ^{\mu }_{+}\\
+\sigma ^{\mu }_{-} & 0
+\end{array}\right) ,\gamma ^{5}=\left( \begin{array}{cc}
+-1 & 0\\
+0 & 1
+\end{array}\right) ,\nonumber \\
+\sigma ^{\mu }_{\pm } & = & ({\textbf {1}},\pm \sigma ),\nonumber 
+\end{eqnarray}
+
+\end_inset 
+
+ giving 
+\begin_inset Formula 
+\begin{equation}
+\hat{a}=\left( \begin{array}{cc}
+0 & (\hat{a})_{+}\\
+(\hat{a})_{-} & 0
+\end{array}\right) ,(\hat{a})_{\pm }=a_{\mu }\sigma ^{\mu }_{\pm },
+\end{equation}
+
+\end_inset 
+
+ The spinors are expressed in terms of two-component Weyl spinors as 
+\begin_inset Formula 
+\begin{equation}
+u=\left( \begin{array}{c}
+(u)_{-}\\
+(u)_{+}
+\end{array}\right) ,v={\textbf {(}}\vdag _{+}{\textbf {,}}\vdag _{-}{\textbf {)}}.
+\end{equation}
+
+\end_inset 
+
+
+\layout Standard
+
+The Weyl spinors are given in terms of helicity eigenstates 
+\begin_inset Formula \( \chi _{\lambda }(p) \)
+\end_inset 
+
+ with 
+\begin_inset Formula \( \lambda =\pm1  \)
+\end_inset 
+
+ by 
+\layout MathLetters
+
+
+\begin_inset Formula 
+\begin{eqnarray}
+u(p,\lambda )_{\pm } & = & (E\pm \lambda |{\textbf {p}}|)^{1/2}\chi _{\lambda }(p),\\
+v(p,\lambda )_{\pm } & = & \pm \lambda (E\mp \lambda |{\textbf {p}}|)^{1/2}\chi _{-\lambda }(p)
+\end{eqnarray}
+
+\end_inset 
+
+
+\layout Section
+
+Floating material and so forth
+\layout Standard
+
+Consider a task that computes profile parameters for a modified Lorentzian
+ of the form 
+\begin_inset Formula 
+\begin{equation}
+I=\frac{1}{1+d_{1}^{P(1+d_{2})}}
+\end{equation}
+
+\end_inset 
+
+ where 
+\begin_inset Formula 
+\[
+d_{1}=\sqrt{\left( \begin{array}{c}
+\frac{x_{1}}{R_{maj}}
+\end{array}\right) ^{2}+\left( \begin{array}{c}
+\frac{y_{1}}{R_{min}}
+\end{array}\right) ^{2}}\]
+
+\end_inset 
+
+
+\begin_inset Formula 
+\[
+d_{2}=\sqrt{\left( \begin{array}{c}
+\frac{x_{1}}{PR_{maj}}
+\end{array}\right) ^{2}+\left( \begin{array}{c}
+\case {y_{1}}{PR_{min}}
+\end{array}\right) ^{2}}\]
+
+\end_inset 
+
+
+\begin_inset Formula 
+\[
+x_{1}=(x-x_{0})\cos \Theta +(y-y_{0})\sin \Theta \]
+
+\end_inset 
+
+
+\begin_inset Formula 
+\[
+y_{1}=-(x-x_{0})\sin \Theta +(y-y_{0})\cos \Theta \]
+
+\end_inset 
+
+
+\layout Standard
+
+In these expressions 
+\begin_inset Formula \( x_{0} \)
+\end_inset 
+
+,
+\begin_inset Formula \( y_{0} \)
+\end_inset 
+
+ is the star center, and 
+\begin_inset Formula \( \Theta  \)
+\end_inset 
+
+ is the angle with the 
+\begin_inset Formula \( x \)
+\end_inset 
+
+ axis.
+ Results of this task are shown in table
+\protected_separator 
+
+\begin_inset LatexCommand \ref{tbl-2}
+
+\end_inset 
+
+.
+ It is not clear how these sorts of analyses may affect determination of
+\begin_inset Formula \( M_{\sun } \)
+\end_inset 
+
+, but the assumption is that the alternate results should be less than 90
+\latex latex 
+
+\backslash 
+degr
+\backslash 
+\latex default 
+out of phase with previous values.
+ We have no observations of 
+\latex latex 
+
+\backslash 
+ion{Ca}{2}
+\latex default 
+.
+ Roughly 
+\latex latex 
+
+\backslash 
+slantfrac{4}{5}
+\latex default 
+ of the electronically submitted abstracts for AAS meetings are error-free.
+\layout Acknowledgements
+
+\layout Standard
+
+We are grateful to V.
+ Barger, T.
+ Han, and R.
+ J.
+ N.
+ Phillips for doing the math in section
+\protected_separator 
+
+\begin_inset LatexCommand \ref{bozomath}
+
+\end_inset 
+
+.
+ More information on the AASTeX macros package are available at 
+\latex latex 
+
+\begin_inset LatexCommand \url{http://www.aas.org/publications/aastex}
+
+\end_inset 
+
+
+\latex default 
+ or the 
+\latex latex 
+
+\backslash 
+anchor{ftp://www.aas.org/pubs/}{AAS ftp site}
+\latex default 
+.
+\layout Appendix
+
+\layout Section
+
+Appendicial material
+\layout Standard
+
+Consider once again a task that computes profile parameters for a modified
+ Lorentzian of the form 
+\begin_inset Formula 
+\begin{equation}
+I=\frac{1}{1+d_{1}^{P(1+d_{2})}}
+\end{equation}
+
+\end_inset 
+
+ where 
+\layout MathLetters
+
+
+\begin_inset Formula 
+\[
+d_{1}=\frac{3}{4}\sqrt{\left( \begin{array}{c}
+\frac{x_{1}}{R_{maj}}
+\end{array}\right) ^{2}+\left( \begin{array}{c}
+\frac{y_{1}}{R_{min}}
+\end{array}\right) ^{2}}\]
+
+\end_inset 
+
+
+\begin_inset Formula 
+\begin{equation}
+d_{2}=\case {3}{4}\sqrt{\left( \begin{array}{c}
+\frac{x_{1}}{PR_{maj}}
+\end{array}\right) ^{2}+\left( \begin{array}{c}
+\case {y_{1}}{PR_{min}}
+\end{array}\right) ^{2}}
+\end{equation}
+
+\end_inset 
+
+
+\begin_inset Formula 
+\begin{eqnarray}
+x_{1} & = & (x-x_{0})\cos \Theta +(y-y_{0})\sin \Theta \\
+y_{1} & = & -(x-x_{0})\sin \Theta +(y-y_{0})\cos \Theta 
+\end{eqnarray}
+
+\end_inset 
+
+
+\layout Standard
+
+For completeness, here is one last equation.
+\begin_inset Formula 
+\begin{equation}
+e=mc^{2}
+\end{equation}
+
+\end_inset 
+
+
+\layout References
+\bibitem [Auri\`ere(1982)]{aur82}
+
+Auri\i \`{e}
+re, M.
+ 1982, 
+\latex latex 
+
+\backslash 
+aap
+\latex default 
+, 109, 301 
+\layout References
+\bibitem [Canizares et al.(1978)]{can78}
+
+Canizares, C.
+ R., Grindlay, J.
+ E., Hiltner, W.
+ A., Liller, W., and McClintock, J.
+ E.
+ 1978, 
+\latex latex 
+
+\backslash 
+apj
+\latex default 
+, 224, 39 
+\layout References
+\bibitem [Djorgovski and King(1984)]{djo84}
+
+Djorgovski, S., and King, I.
+ R.
+ 1984, 
+\latex latex 
+
+\backslash 
+apjl
+\latex default 
+, 277, L49 
+\layout References
+\bibitem [Hagiwara and Zeppenfeld(1986)]{hag86}
+
+Hagiwara, K., and Zeppenfeld, D.
+ 1986, Nucl.Phys., 274, 1 
+\layout References
+\bibitem [Harris and van den Bergh(1984)]{har84}
+
+Harris, W.
+ E., and van den Bergh, S.
+ 1984, 
+\latex latex 
+
+\backslash 
+aj
+\latex default 
+, 89, 1816 
+\layout References
+\bibitem [H\`enon(1961)]{hen61}
+
+H\i \'{e}
+non, M.
+ 1961, Ann.d'Ap., 24, 369 
+\layout References
+\bibitem [King(1966)]{kin66}
+
+King, I.
+ R.
+ 1966, 
+\latex latex 
+
+\backslash 
+aj
+\latex default 
+, 71, 276 
+\layout References
+\bibitem [King(1975)]{kin75}
+
+King, I.
+ R.
+ 1975, Dynamics of Stellar Systems, A.
+ Hayli, Dordrecht: Reidel, 1975, 99 
+\layout References
+\bibitem [King et al.(1968)]{kin68}
+
+King, I.
+ R., Hedemann, E., Hodge, S.
+ M., and White, R.
+ E.
+ 1968, 
+\latex latex 
+
+\backslash 
+aj
+\latex default 
+, 73, 456 
+\layout References
+\bibitem [Kron et al.(1984)]{kro84}
+
+Kron, G.
+ E., Hewitt, A.
+ V., and Wasserman, L.
+ H.
+ 1984, 
+\latex latex 
+
+\backslash 
+pasp
+\latex default 
+, 96, 198 
+\layout References
+\bibitem [Lynden-Bell and Wood(1968)]{lyn68}
+
+Lynden-Bell, D., and Wood, R.
+ 1968, 
+\latex latex 
+
+\backslash 
+mnras
+\latex default 
+, 138, 495 
+\layout References
+\bibitem [Newell and O'Neil(1978)]{new78}
+
+Newell, E.
+ B., and O'Neil, E.
+ J.
+ 1978, 
+\latex latex 
+
+\backslash 
+apjs
+\latex default 
+, 37, 27 
+\layout References
+\bibitem [Ortolani et al.(1985)]{ort85}
+
+Ortolani, S., Rosino, L., and Sandage, A.
+ 1985, 
+\latex latex 
+
+\backslash 
+aj
+\latex default 
+, 90, 473 
+\layout References
+\bibitem [Peterson(1976)]{pet76}
+
+Peterson, C.
+ J.
+ 1976, 
+\latex latex 
+
+\backslash 
+aj
+\latex default 
+, 81, 617 
+\layout References
+\bibitem [Spitzer(1985)]{spi85}
+
+Spitzer, L.
+ 1985, Dynamics of Star Clusters, J.
+ Goodman and P.
+ Hut, Dordrecht: Reidel, 109 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+clearpage
+\layout FigCaption
+
+
+\begin_inset LatexCommand \label{fig1}
+
+\end_inset 
+
+This is the first figure and it uses sgi9259.eps as its EPS figure file.
+\layout FigCaption
+
+
+\begin_inset LatexCommand \label{fig2}
+
+\end_inset 
+
+This is an example of a long figure caption that must be set as a paragraph.
+  The processor has to buffer the text of the caption, so it is good not
+ to be too wordy, but that would make for poor communication as well.
+\layout FigCaption
+
+
+\begin_inset LatexCommand \label{fig3}
+
+\end_inset 
+
+This figure has no associated EPS file, so the optional parameter is omitted.
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+clearpage
+\layout Standard
+
+\begin_float tab 
+\layout Caption
+\added_space_bottom medskip 
+Terribly relevant tabular information.
+\begin_inset LatexCommand \label{tbl-2}
+
+\end_inset 
+
+
+\layout Standard
+\LyXTable
+multicol5
+7 13 0 0 -1 -1 -1 -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
+8 0 0 "" ""
+4 0 0 "" ""
+4 0 0 "" ""
+4 0 0 "" ""
+4 0 0 "" ""
+4 0 0 "" ""
+4 0 0 "" ""
+4 0 0 "" ""
+4 0 0 "" ""
+4 0 0 "" ""
+4 0 0 "" ""
+4 0 0 "" ""
+8 0 0 "" ""
+0 8 1 1 0 0 0 "" ""
+0 4 1 1 0 0 0 "" ""
+0 4 1 1 0 0 0 "" ""
+0 4 1 1 0 0 0 "" ""
+0 4 1 1 0 0 0 "" ""
+0 4 1 1 0 0 0 "" ""
+0 4 1 1 0 0 0 "" ""
+0 4 1 1 0 0 0 "" ""
+1 8 0 0 0 0 0 "" ""
+0 4 1 1 0 0 0 "" ""
+0 4 1 1 0 0 0 "" ""
+1 8 0 0 0 0 0 "" ""
+0 8 0 0 0 0 0 "" ""
+0 8 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 8 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 8 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 8 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 8 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 4 0 0 0 0 0 "" ""
+0 8 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+0 4 0 1 0 0 0 "" ""
+
+Star 
+\newline 
+ Height 
+\newline 
+\begin_inset Formula \( d_{x} \)
+\end_inset 
+
+
+\newline 
+\begin_inset Formula \( d_{y} \)
+\end_inset 
+
+
+\newline 
+\begin_inset Formula \( n \)
+\end_inset 
+
+
+\newline 
+\begin_inset Formula \( \chi ^{2} \)
+\end_inset 
+
+
+\newline 
+\begin_inset Formula \( R_{maj} \)
+\end_inset 
+
+
+\newline 
+\begin_inset Formula \( R_{min} \)
+\end_inset 
+
+
+\newline 
+
+\begin_inset Formula \( P \)
+\end_inset 
+
+
+\latex latex 
+
+\backslash 
+tablenotemark{a}
+\latex default 
+
+\newline 
+\begin_inset Formula \( PR_{maj} \)
+\end_inset 
+
+
+\newline 
+\begin_inset Formula \( PR_{min} \)
+\end_inset 
+
+
+\newline 
+
+\begin_inset Formula \( \Theta  \)
+\end_inset 
+
+
+\latex latex 
+
+\backslash 
+tablenotemark{b}
+\latex default 
+
+\newline 
+Ref.
+\newline 
+
+\latex latex 
+
+\backslash 
+tableline
+\backslash 
+tableline
+\latex default 
+1 
+\newline 
+33472.5 
+\newline 
+-0.1 
+\newline 
+0.4 
+\newline 
+53 
+\newline 
+27.4 
+\newline 
+2.065 
+\newline 
+1.940 
+\newline 
+3.900 
+\newline 
+68.3 
+\newline 
+116.2 
+\newline 
+-27.639
+\newline 
+1,2
+\newline 
+ 2 
+\newline 
+27802.4 
+\newline 
+-0.3 
+\newline 
+-0.2 
+\newline 
+60 
+\newline 
+3.7 
+\newline 
+1.628 
+\newline 
+1.510 
+\newline 
+2.156 
+\newline 
+6.8 
+\newline 
+7.5 
+\newline 
+-26.764
+\newline 
+3
+\newline 
+ 3 
+\newline 
+29210.6 
+\newline 
+0.9 
+\newline 
+0.3 
+\newline 
+60 
+\newline 
+3.4 
+\newline 
+1.622 
+\newline 
+1.551 
+\newline 
+2.159 
+\newline 
+6.7 
+\newline 
+7.3 
+\newline 
+-40.272
+\newline 
+4
+\newline 
+ 4 
+\newline 
+32733.8 
+\newline 
+-1.2
+\latex latex 
+
+\backslash 
+tablenotemark{c}
+\latex default 
+
+\newline 
+-0.5 
+\newline 
+41 
+\newline 
+54.8 
+\newline 
+2.282 
+\newline 
+2.156 
+\newline 
+4.313 
+\newline 
+117.4 
+\newline 
+78.2 
+\newline 
+-35.847
+\newline 
+5,6
+\newline 
+ 5 
+\newline 
+ 9607.4 
+\newline 
+-0.4 
+\newline 
+-0.4 
+\newline 
+60 
+\newline 
+1.4 
+\newline 
+1.669
+\latex latex 
+
+\backslash 
+tablenotemark{c}
+\latex default 
+
+\newline 
+1.574 
+\newline 
+2.343 
+\newline 
+8.0 
+\newline 
+8.9 
+\newline 
+-33.417
+\newline 
+7
+\newline 
+ 6 
+\newline 
+31638.6 
+\newline 
+1.6 
+\newline 
+0.1 
+\newline 
+39 
+\newline 
+315.2 
+\newline 
+ 3.433 
+\newline 
+3.075 
+\newline 
+7.488 
+\newline 
+92.1 
+\newline 
+25.3 
+\newline 
+-12.052 
+\newline 
+8
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+tablenotetext{a}{Sample footnote for table~
+\backslash 
+ref{tbl-2} that was generated with the 
+\backslash 
+LaTeX
+\backslash 
+ table environment} 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+tablenotetext{b}{Yet another sample footnote for table~
+\backslash 
+ref{tbl-2}} 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+tablenotetext{c}{Another sample footnote for table~
+\backslash 
+ref{tbl-2}}
+\layout TableComments
+
+We can also attach a long-ish paragraph of explanatory material to a table.
+ Use 
+\backslash 
+tablerefs to append a list of references.
+ The following references were from a different table: I've patched them
+ in here to show how they look, but don't take them too seriously---I certainly
+ have not.
+\layout TableRefs
+
+(1) Barbuy, Spite, & Spite 1985; (2) Bond 1980; (3) Carbon et al.
+ 1987; (4) Hobbs & Duncan 1987; (5) Gilroy et al.
+ 1988: (6) Gratton & Ortolani 1986; (7) Gratton & Sneden 1987; (8) Gratton
+ & Sneden (1988); (9) Gratton & Sneden 1991; (10) Kraft et al.
+ 1982; (11) LCL, or Laird, 1990; (12) Leep & Wallerstein 1981; (13) Luck
+ & Bond 1981; (14) Luck & Bond 1985; (15) Magain 1987; (16) Magain 1989;
+ (17) Peterson 1981; (18) Peterson, Kurucz, & Carney 1990; (19) RMB; (20)
+ Schuster & Nissen 1988; (21) Schuster & Nissen 1989b; (22) Spite et al.
+ 1984; (23) Spite & Spite 1986; (24) Hobbs & Thorburn 1991; (25) Hobbs et
+ al.
+ 1991; (26) Olsen 1983.
+\end_float 
+\layout Standard
+
+
+\latex latex 
+% LyX can load deluxetable files verbatim.
+ To see this in action, uncomment the following
+\layout Standard
+
+
+\latex latex 
+% line (delete the 
+\latex default 
+
+\begin_inset Quotes eld
+\end_inset 
+
+
+\latex latex 
+%
+\latex default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+
+\latex latex 
+) and copy the file table.tex from the AASTeX 5.0 distribution into
+\layout Standard
+
+
+\latex latex 
+% the same directory as this file.
+\layout Standard
+
+
+\latex latex 
+%
+\begin_inset Include \input{table}
+
+\end_inset 
+
+
+\the_end
diff --git a/lib/examples/amsart-test.lyx b/lib/examples/amsart-test.lyx
new file mode 100644 (file)
index 0000000..25b2c93
--- /dev/null
@@ -0,0 +1,453 @@
+#This file was created by <lasgoutt> Tue Mar  3 17:28:33 1998
+#LyX 0.12 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass amsart
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 2
+\paperpagestyle default
+
+\layout Title
+
+Test of AMS-Art Style
+\layout Author
+
+David L.
+ Johnson
+\layout Address
+
+Department of Mathematics
+\newline 
+Lehigh University
+\newline 
+Bethlehem, PA 18015
+\layout Current Address
+
+Home
+\layout Email
+
+dlj0@lehigh.edu
+\layout URL
+
+http://www.lehigh.edu/~dlj0/dlj0.html
+\layout Keywords
+
+Test
+\layout Thanks
+
+To Emmanuel, for forcing me to fix this, and Jean-Marc, for making it possible,
+ and necessary.
+ Also to Mate, who suggested numerous improvements.
+\layout Dedicatory
+
+To my wife.
+\layout Translator
+
+Joe
+\layout Subjectclass
+
+Primary: 12G34, Secondary: 09G87
+\layout Abstract
+
+This is not very abstract.
+ Note that the abstract must be part of the title stuff for AMS.
+ LyX is aware of that since version 0.12.1.
+ Good.
+\layout Section
+
+Introduction
+\layout Standard
+
+This file, and any amsart-* LyX file, can be converted to either of the
+ numbering schemes by simply changing the document class in the 
+\family sans 
+\bar under 
+L
+\bar default 
+ayout-
+\bar under 
+D
+\bar default 
+ocument
+\family default 
+ popup.
+ The styles are:
+\layout Enumerate
+
+amsart - The standard AMS-article format.
+ All results and similar statements are numbered as 
+\begin_inset Formula \( (n.m) \)
+\end_inset 
+
+, where the first number refers to the section, and the second refers to
+ the total number of results (Theorems, Corollaries, Propositions, Definitions
+ and Remarks, etc.) in that section.
+ There are also many (but not all) environments available unnumbered, which
+ is occasionally needed.
+ Unnumbered environments indicated by an asterisk at the end.
+\layout Enumerate
+
+amsart-seq - Here, numbering for each type of statement is in its own sequence,
+ with no reference to the section number.
+ There are also many (but not all) environments available unnumbered, which
+ is occasionally needed.
+\layout Theorem
+
+This is a numbered theorem
+\layout Proof
+
+Here is its proof.
+ Here is its proof.
+ Here is its proof.
+ Here is its proof.
+ Here is its proof.
+ Here is its proof.
+\layout Standard
+
+More text.
+ Note that two occurrences of the same environment, like two definitions,
+ need to be separated somehow.
+ For the moment, the best way is to include a paragraph with a %, in the
+ LaTeX environment, if you really want two definitions (or whatever) together,
+ with no intervening text of another sort.
+\layout Theorem*
+
+This is an unnumbered theorem
+\layout Proof
+
+Here is its proof.
+ Here is its proof.
+ Here is its proof.
+ Here is its proof.
+ Here is its proof.
+ Here is its proof.
+\layout Corollary
+
+First corollary.
+\layout Proof
+
+Its proof.
+\layout Corollary*
+
+Unnumbered corollary.
+\layout LaTeX
+
+%
+\layout Corollary*
+
+A second, with no intervening text.
+ Note the % to force a separation.
+\layout Lemma
+
+Lemma number 1
+\layout Proposition
+
+First proposition.
+\layout Proposition*
+
+Unnumbered version.
+\layout Conjecture
+
+A wild guess.
+\layout Conjecture*
+
+So wild I didn't number it.
+\layout Criterion
+
+Need some criteria
+\layout Algorithm
+
+first this, then the next
+\layout Fact
+
+Not fiction.
+\layout Fact*
+
+Bald statement of fact.
+ Unnumbered environments are often used for emphasis, or in a short presentation
+ that doesn't require numbered results.
+\layout Axiom
+
+It stands to reason.
+\layout Definition
+
+a word means exactly what I say it means.
+\layout Definition*
+
+Unnumbered.
+\layout Standard
+
+Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+\layout Example
+
+This should be an example.
+\layout Standard
+
+Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+ Plain text.
+\layout Condition
+
+If you say so.
+\layout Problem
+
+I don't know what to write is the problem.
+\layout Remark
+
+I think this will be useful.
+\layout Claim
+
+I did it the way the documentation said to.
+\layout Note
+
+It may need more work yet.
+\layout Standard
+
+More plain text, in standard format.
+\layout Theorem
+
+This is a second numbered theorem
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Corollary
+
+Second corollary.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 2
+\layout Proposition
+
+Second proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Notation
+
+
+\begin_inset Formula \( S=\mathbb {R} \)
+\end_inset 
+
+.
+\layout Summary
+
+In the end, will it matter?
+\layout Acknowledgement
+
+Thanks to Mattias Ettrich.
+ Without him I never would have learned LaTeX.
+\layout Case
+
+If this works, then the rest will.
+\layout Conclusion
+
+It seems to work.
+\layout Proof
+
+Here goes another proof.
+\layout Standard
+
+Plain text.
+\layout Section
+
+Next try.
+\layout Standard
+
+This tries out the section environments.
+\layout Theorem
+
+This is a theorem
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Corollary
+
+Third corollary.
+ First one of this section.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 3
+\layout Proposition
+
+Third proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Subsection
+
+This is a subsection
+\layout Standard
+
+With more results therein.
+\layout Theorem
+
+This is a theorem, maybe the fourth one.
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Corollary
+
+Fourth corollary.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 4
+\layout Proposition
+
+Fourth proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Standard
+
+More random text.
+\layout Theorem
+
+This is a theorem
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Claim
+
+I believe this is true.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 5
+\layout Proposition
+
+Fifth proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Subsubsection
+
+This is the subsection with results.
+\layout Standard
+
+The quick, brown fox jumped over the lazy dog.
+\layout Theorem
+
+This is a theorem - sixth in the series
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Corollary
+
+Sixth corollary.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 6
+\layout Proposition
+
+Sixth proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Bibliography
+\bibitem {1}
+
+Johnson, D.
+ L.
+\emph on 
+Out of my head
+\layout Bibliography
+\bibitem {2}
+
+American Mathematical Society, 
+\emph on 
+Instructions for preparation of papers and monographs: AMS-LaTeX
+\emph default 
+, (1997).
+\layout Bibliography
+\bibitem {3}
+
+American Mathematical Society, 
+\layout Standard
+
+\the_end
diff --git a/lib/examples/amsbook-test.lyx b/lib/examples/amsbook-test.lyx
new file mode 100644 (file)
index 0000000..b73640a
--- /dev/null
@@ -0,0 +1,394 @@
+#This file was created by <dlj0> Sun Dec 14 14:56:10 1997
+#LyX 0.11 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass amsbook
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 2
+\paperpagestyle default
+
+\layout Title
+
+Test of AMS-Book Style
+\layout Author
+
+David L.
+ Johnson
+\layout Address
+
+Department of Mathematics
+\newline 
+Lehigh University
+\newline 
+Bethlehem, PA 18015
+\layout Current Address
+
+Home
+\layout Email
+
+dlj0@lehigh.edu
+\layout URL
+
+http://www.lehigh.edu/~dlj0/dlj0.html
+\layout Keywords
+
+Test
+\layout Thanks
+
+To Emmanuel, for forcing me to fix this, and Jean-Marc, for making it possible,
+ and necessary.
+\layout Dedicatory
+
+To my wife.
+\layout Translator
+
+Joe
+\layout Subjectclass
+
+Primary: 12G34, Secondary: 09G87
+\layout Chapter
+
+Beginning.
+\layout Section
+
+Introduction
+\layout Standard
+
+This file, using the amsbook layout, numbers all results, Theorems, Definitions,
+ etc., using 
+\begin_inset Formula \( (m.n.p) \)
+\end_inset 
+
+ where the 
+\begin_inset Formula \( m \)
+\end_inset 
+
+ is the chapter number, the 
+\begin_inset Formula \( n \)
+\end_inset 
+
+ is the section number, and, finally, the 
+\begin_inset Formula \( p \)
+\end_inset 
+
+ is the result number in that section.
+\layout Standard
+
+This can be changed by modifying the layout file, removing the line 
+\family typewriter 
+
+\newline 
+
+\backslash 
+numberwithin{section}{chapter} 
+\family default 
+
+\newline 
+from the 
+\family typewriter 
+Preamble
+\family default 
+ .
+\layout Theorem
+
+This is a theorem
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Corollary
+
+First corollary.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 1
+\layout Proposition
+
+First proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Algorithm
+
+first this, then the next
+\layout Fact
+
+Not fiction.
+\layout Axiom
+
+It stands to reason.
+\layout Definition
+
+a word means exactly what I say it means.
+\layout Example
+
+This should be an example.
+\layout Standard
+
+Plain text.
+\layout Condition
+
+If you say so.
+\layout Problem
+
+I don't know what to write is the problem.
+\layout Remark
+
+I think this will be useful.
+\layout Claim
+
+I did it the way the documentation said to.
+\layout Note
+
+It may need more work yet.
+\layout Standard
+
+More plain text, in standard format.
+\layout Theorem
+
+This is a second theorem
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Corollary
+
+Second corollary.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 2
+\layout Proposition
+
+Second proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Notation
+
+
+\begin_inset Formula \( S=\mathbb {R} \)
+\end_inset 
+
+.
+\layout Summary
+
+In the end, will it matter?
+\layout Acknowledgement
+
+Thanks to Mattias Ettrich.
+ Without him I never would have learned LaTeX.
+\layout Case
+
+If this works, then the rest will.
+\layout Conclusion
+
+It seems to work.
+\layout Proof
+
+Here goes another proof.
+\layout Standard
+
+Plain text
+\layout Chapter Exercises
+
+Exercise 1
+\layout Chapter Exercises
+
+Exercise 2
+\layout Chapter Exercises
+
+These should not be italicised!
+\layout Section
+
+Next try.
+\layout Standard
+
+This tries out the section environments.
+\layout Theorem
+
+This is a theorem
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Corollary
+
+Third corollary.
+ First one of this section.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 3
+\layout Proposition
+
+Third proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Subsection
+
+This is a subsection
+\layout Standard
+
+With more results therein.
+\layout Theorem
+
+This is a theorem, maybe the fourth one.
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Chapter
+
+Next one.
+\layout Section
+
+Next Section
+\layout Corollary
+
+Fourth corollary.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 4
+\layout Proposition
+
+Fourth proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Standard
+
+More random text.
+\layout Section
+
+Another section
+\layout Theorem
+
+This is a theorem
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Corollary
+
+Fifth corollary.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 5
+\layout Proposition
+
+Fifth proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Subsubsection
+
+This is the subsection with results.
+\layout Standard
+
+The quick, brown fox jumped over the lazy dog.
+\layout Theorem
+
+This is a theorem - sixth in the series
+\layout Proof
+
+Here is its proof.
+\layout Standard
+
+More text.
+\layout Corollary
+
+Sixth corollary.
+\layout Proof
+
+Its proof.
+\layout Lemma
+
+Lemma number 6
+\layout Proposition
+
+Sixth proposition.
+\layout Conjecture
+
+A wild guess.
+\layout Criterion
+
+Need some criteria
+\layout Bibliography
+\bibitem {1}
+
+Johnson, D.
+ L.
+\emph on 
+Out of my head
+\layout Bibliography
+\bibitem {2}
+
+American Mathematical Society, 
+\emph on 
+Instructions for preparation of papers and monographs: AMS-LaTeX
+\emph default 
+, (1997).
+\layout Bibliography
+\bibitem {3}
+
+American Mathematical Society, 
+\layout Standard
+
+\the_end
diff --git a/lib/examples/beispiel_gelyxt.lyx b/lib/examples/beispiel_gelyxt.lyx
new file mode 100644 (file)
index 0000000..9699ff1
--- /dev/null
@@ -0,0 +1,285 @@
+#This file was created by <pit> Wed Mar  3 01:35:41 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language german
+\inputencoding latin1
+\fontscheme default
+\graphics dvips
+\paperfontsize 12
+\spacing single 
+\papersize a4paper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Title
+
+DIES IST DER TITEL DES DOKUMENTS
+\layout Author
+
+von Fee LyX
+\layout Date
+
+12.
+ Juni 1972
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset 
+
+
+\layout Section
+
+Grundidee
+\layout Standard
+
+Die Grundidee von LyX ist, daß Sie sich um den Inhalt Ihrer Dokumente kümmern
+ sollten, und nicht um das Aussehen.
+\layout Subsection
+
+Wie LyX es macht
+\layout Standard
+
+LyX benutzt LaTeX, ein Textsatzsystem für Dokumente, das 
+\noun on 
+Leslie
+\noun default 
+\noun on 
+Lamport
+\noun default 
+ 1985 entworfen hatte.
+ Das wiederum baut auf der Textsatzsprache TeX auf, die 
+\noun on 
+Donald
+\noun default 
+\noun on 
+Knuth
+\noun default 
+ 1984 entwickelt hatte.
+ Die Grundidee von LaTeX ist ähnlich wie die von LyX.
+\noun on 
+Leslie
+\noun default 
+\noun on 
+Lamport
+\noun default 
+ sagte einmal (siehe Referenz 
+\begin_inset LatexCommand \cite{lamport}
+
+\end_inset 
+
+):
+\layout Quote
+
+Der Sinn des typographischen Entwurfs ist, daß der Leser die Ideen des Autors
+ versteht.
+ Damit ein Dokument leicht zu lesen ist, muß die sichtbare Struktur die
+ logische widerspiegeln.
+ Zitate und Computerprogramme, die logisch unterschiedliche Strukturelemente
+ darstellen, sollten auch anders aussehen....
+ Weil LaTeX Ihren Text nicht verstehen kann, müssen Sie die logische Struktur
+ durch Spezialbefehle kennzeichnen....
+ Während Sie Ihr Dokument schreiben, sollten Sie sich auf die logische Struktur
+ konzentrieren, nicht auf sein Aussehen.
+\layout Subsection
+
+Warum LyX besser ist
+\layout Standard
+
+
+\series bold 
+
+\begin_inset LatexCommand \label{sec:lyxbetter}
+
+\end_inset 
+
+
+\series default 
+LyX kann mehr Menschen nützen als LaTeX.
+ Es ist viel leichter zu lernen, weil Sie nicht LaTeX lernen müssen (LaTeX
+ ist im Prinzip eine Programmiersprache).
+ LyX ist im Prinzip wie andere WYSIWYG-Textverarbeitungen, aber LyX ist
+ WYSIWYM 
+\begin_inset Quotes eld
+\end_inset 
+
+What you see is what you mean
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ Auf diese Weise verbindet es die Benutzerfreundlichkeit einer Textverarbeitung
+ mit der Stärke von LaTeX.
+ Das ist eine gute Sache.
+ Außerdem ist das Dateiformat plattformunabhängig.
+ Das Beste aber ist: es ist KOSTENLOS!
+\layout Section
+
+LyX-Merkmale
+\layout Standard
+
+LyX hat viele Merkmale, die das Schreiben von Dokumenten erleichtern.
+\begin_float footnote 
+\layout Standard
+
+Warum sollte man es sonst benutzen?
+\end_float 
+ Ich bin 
+\emph on 
+sehr aufgegergt,
+\emph default 
+ über sie zu sprechen.
+ Hier sind ein paar:
+\layout Itemize
+
+LyX kümmert sich für Sie um Ränder und die Numerierung von Fußnoten
+\layout Itemize
+
+LyX erleichtert das Schreiben und Bearbeiten von mathematischen Formeln
+\layout Standard
+
+Für eine mehr philosophische Diskussion, warum LyX besser als viele andere
+ Textverarbeitungen ist, lesen Sie bitte Abschnitt 1.2 
+\begin_inset LatexCommand \ref{sec:lyxbetter}
+
+\end_inset 
+
+ auf Seite 
+\begin_inset LatexCommand \pageref{sec:lyxbetter}
+
+\end_inset 
+
+.
+\layout Section
+
+Lahme Versuche mit anderen LyX-Teilen
+\layout Standard
+
+Neulich schrieb ich ein Programm.
+ Es sah so aus:
+\layout LyX-Code
+
+5 BEACHTET MEIN TOLLES PROGRAMM
+\layout LyX-Code
+
+10 PRINT 
+\begin_inset Quotes eld
+\end_inset 
+
+ICH BIN TOLL !
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout LyX-Code
+
+20 GOTO 10
+\layout Standard
+
+Nach all dem wissenschaftlichen Denken fühlte ich mehr künstlerisch, also
+ schrieb ich dies Gedicht:
+\layout Verse
+
+LyX ist eine wirklich großartige
+\newline 
+schriftsetzende Textverarbeitung.
+\newline 
+Es spart soviel Zeit.
+\layout Section
+
+Mathematik
+\layout Standard
+
+Meine Lieblingsformel ist die Lösung einer quadratischen Gleichung.
+ Aus 
+\begin_inset Formula \( ax^{2}+bx+c=0 \)
+\end_inset 
+
+ (Gl.1) folgt 
+\begin_inset Formula \( x=\frac{-b\pm \sqrt{b^{2}-4ac}}{2a} \)
+\end_inset 
+
+ (Gl.
+ 2).
+\layout Standard
+
+Eine weitere Lieblingsformel ist die Ableitung: 
+\begin_inset Formula \( f'(x)\equiv \lim _{\Delta x\rightarrow 0}\frac{f(x+\Delta x)-f(x)}{\Delta x} \)
+\end_inset 
+
+ (Gl.
+ 3).
+\layout Section
+
+Bemerkungen
+\layout Standard
+
+Ein paar Bemerkungen zum LyXifizieren dieser Datei:
+\layout Itemize
+
+Ich konnte die gestrichelten Linien enntfernen.
+ Sie waren nur dazu da, den Titel und das Quellenverzeichnis from Rest des
+ Dokumentes zu ternnen.
+ LyX (LaTeX) weiß genug, um diese Teile mit Zwischenräumen abzusetzen.
+\layout Itemize
+
+Ich kümmerte mich nicht darum, die mathematischen Formeln als abgesetzte
+ Formeln zu schreiben.
+ Außerdem habe ich nicht die automatische Gleichungsnumerierung von LyX
+ benutzt, weil das nicht im 
+\emph on 
+Tutorium 
+\emph default 
+beschrieben wurde.
+\layout Itemize
+
+Ich mußte das Wort 
+\begin_inset Quotes eld
+\end_inset 
+
+Literatur
+\begin_inset Quotes erd
+\end_inset 
+
+ nicht schreiben.
+ LyX schreibt es automatisch (oder das Wort 
+\begin_inset Quotes eld
+\end_inset 
+
+Referenzen
+\begin_inset Quotes eld
+\end_inset 
+
+, abhängig von der Dokumentklasse), wenn man als Umgebung 
+\family sans 
+Bibliography 
+\family default 
+wählt.
+\layout Bibliography
+\bibitem {lamport}
+
+Lamport, Leslie.
+\emph on 
+LaTeX: A Document Preparation System.
+
+\emph default 
+ Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+\the_end
diff --git a/lib/examples/beispiel_roh.lyx b/lib/examples/beispiel_roh.lyx
new file mode 100644 (file)
index 0000000..a54afb7
--- /dev/null
@@ -0,0 +1,289 @@
+#This file was created by <pit> Wed Mar  3 01:32:12 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language german
+\inputencoding latin1
+\fontscheme default
+\graphics dvips
+\paperfontsize 12
+\spacing single 
+\papersize a4paper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Standard
+
+DIES IST DER TITEL DES DOKUMENTS 
+\begin_inset Info 
+Hinweis: der Titel sollte mehr nach einem Titel aussehen
+\end_inset 
+
+
+\layout Standard
+
+von Fee LyX 
+\begin_inset Info 
+Hinweis: Fee LyX ist der AUTHOR
+\end_inset 
+
+
+\layout Standard
+
+12.
+ Juni 1972 
+\begin_inset Info 
+Hinweis: dies ist ein DATE
+\end_inset 
+
+
+\layout Standard
+
+Inhaltsverzeichnis 
+\begin_inset Info 
+Hinweis: Es wäre schön, wenn wir das Verzeichnis nicht selber schreiben
+ müßten
+\end_inset 
+
+
+\layout Standard
+
+1.
+ Grundidee..................1
+\layout Standard
+
+1.1 Wie LyX es macht...............1
+\layout Standard
+
+1.2 Warum LyX besser ist ...............1
+\layout Standard
+
+2.
+ LyX-Merkmale
+\layout Standard
+
+3.
+ Lahme Versuche mit anderen LyX-Teilen
+\layout Standard
+
+4.
+ Mathematik
+\layout Standard
+
+---------------------------------------------------
+\layout Standard
+
+1.
+ Grundidee 
+\begin_inset Info 
+Hinweis:
+Abschnittüberschriften sollten ein wenig hervorgehoben sein
+\end_inset 
+
+
+\layout Standard
+
+Die Grundidee von LyX ist, daß Sie sich um den Inhalt Ihrer Dokumente kümmern
+ sollten, und nicht um das Aussehen.
+\layout Standard
+
+1.1 Wie LyX es macht
+\layout Standard
+
+LyX benutzt LaTeX, ein Textsatzsystem für Dokumente, das Leslie Lamport
+ 1985 entworfen hatte.
+ Das wiederum baut auf der Textsatzsprache TeX auf, die Donald Knuth 1984
+ entwickelt hatte.
+ Die Grundidee von LaTeX ist ähnlich wie die von LyX.
+ Leslie Lamport sagte einmal (siehe Referenz [1]):
+\begin_inset Info 
+Hinweis: dieser Zitat-Verweis sollte nicht fest sein.
+ Was wäre, wenn wir Lamports Buch als zweites in der Literaturverzeichnis
+ haben wollten?
+\end_inset 
+
+
+\layout Standard
+
+
+\begin_inset Quotes eld
+\end_inset 
+
+Der Sinn des typographischen Entwurfs ist, daß der Leser die Ideen des Autors
+ versteht.
+ Damit ein Dokument leicht zu lesen ist, muß die sichtbare Struktur die
+ logische widerspiegeln.
+ Zitate und Computerprogramme, die logisch unterschiedliche Strukturelemente
+ darstellen, sollten auch anders aussehen....
+ Weil LaTeX Ihren Text nicht verstehen kann, müssen Sie die logische Struktur
+ durch Spezialbefehle kennzeichnen....
+ Während Sie Ihr Dokument schreiben, sollten Sie sich auf die logische Struktur
+ konzentrieren, nicht auf sein Aussehen.
+\begin_inset Quotes erd
+\end_inset 
+
+
+\begin_inset Info 
+Hinweis: Dies ist ein Zitat
+\end_inset 
+
+
+\layout Standard
+
+1.2 Warum LyX besser ist
+\layout Standard
+
+LyX kann mehr Menschen nützen als LaTeX.
+ Es ist viel leichter zu lernen, weil Sie nicht LaTeX lernen müssen (LaTeX
+ ist im Prinzip eine Programmiersprache).
+ LyX ist im Prinzip wie andere WYSIWYG-Textverarbeitungen, aber LyX ist
+ WYSIWYM 
+\begin_inset Quotes eld
+\end_inset 
+
+What you see is what you mean
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ Auf diese Weise verbindet es die Benutzerfreundlichkeit einer Textverarbeitung
+ mit der Stärke von LaTeX.
+ Das ist eine gute Sache.
+ Außerdem ist das Dateiformat plattformunabhängig.
+ Das Beste aber ist: es ist KOSTENLOS!
+\layout Standard
+
+2.
+ LyX-Merkmale
+\layout Standard
+
+LyX hat viele Merkmale, die das Schreiben von Dokumenten erleichtern.
+ (Warum sollte man es sonst benutzen?
+\begin_inset Info 
+Hinweis: Dieser hervorgehobene Satz würde in einer Fußnote besser aussehen
+\end_inset 
+
+) Ich bin SEHR AUFGEREGT
+\begin_inset Info 
+Hinweis: Hervorheben!
+\end_inset 
+
+ über sie zu sprechen.
+ Hier sind ein paar:
+\layout Standard
+
+* LyX kümmert sich für Sie um Ränder und die Numerierung von Fußnoten
+\layout Standard
+
+* LyX erleichtert das Schreiben und Bearbeiten von mathematischen Formeln
+\layout Standard
+
+Für eine mehr philosophische Diskussion, warum LyX besser als viele andere
+ Textverarbeitungen ist, lesen Sie bitte Abschnitt 1.2 auf Seite 1.
+\begin_inset Info 
+Hinweis: Dieser Querverweis sollte nicht fest sein.
+ Was wäre, wenn wir die Abschnittsnummern ändern würden?
+\end_inset 
+
+
+\layout Standard
+
+3.
+ Lahme Versuche mit anderen LyX-Teilen
+\layout Standard
+
+Neulich schrieb ich ein Programm.
+ Es sah so aus:
+\layout Standard
+
+5 BEACHTET MEIN TOLLES PROGRAMM
+\layout Standard
+
+10 PRINT 
+\begin_inset Quotes eld
+\end_inset 
+
+ICH BIN TOLL!
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout Standard
+
+20 GOTO 10
+\layout Standard
+
+
+\begin_inset Info 
+Hinweis: Dies ist Computer-CODE
+\end_inset 
+
+
+\layout Standard
+
+Nach all dem wissenschaftlichen Denken fühlte ich mehr künstlerisch, also
+ schrieb ich dies Gedicht:
+\layout Standard
+
+LyX ist eine wirklich großartige
+\layout Standard
+
+schriftsetzende Textverarbeitung
+\layout Standard
+
+Es spart soviel Zeit.
+\layout Standard
+
+
+\begin_inset Info 
+Hinweis: Es ist nicht sehr gut, aber es ist Poesie, auch als VERSE
+ bekannt
+\end_inset 
+
+
+\layout Standard
+
+4.
+ Mathematik 
+\begin_inset Info 
+Hinweis: diese mathematischen Dinge sollten im Mathematikmodus gedruckt
+ werden!
+\end_inset 
+
+
+\layout Standard
+
+Meine Lieblingsformel ist die Lösung einer quadratischen Gleichung.
+ Aus ax^2+bx+c=0 (Gl.1) folgt x= -b +/- der Quadratwurzel aus b^2-4ac, dividiert
+ durch 2a (Gl.
+ 2).
+\layout Standard
+
+Eine weitere Lieblingsformel ist die Ableitung: f'(x) ist der Grenzwert
+ von f(x+deltax) - f(x) dividiert durch deltax, wenn deltax gegen 0 geht
+ (Gl.
+ 3).
+\layout Standard
+
+------------------------------------------------
+\layout Standard
+
+LITERATUR
+\layout Standard
+
+[1] Lamport, Leslie.
+ LaTeX: A Document Preparation System.
+ Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+\the_end
diff --git a/lib/examples/ca_splash.lyx b/lib/examples/ca_splash.lyx
new file mode 100644 (file)
index 0000000..ec6dcda
--- /dev/null
@@ -0,0 +1,161 @@
+#This file was created by <fburrull> Wed Jun 16 15:02:40 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language catalan
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Benvinguts a LyX !
+\layout Section*
+
+N coses que cal saber per utilitzar LyX
+\layout Enumerate
+
+LyX inclou una documentació excel·lent ---Utilitzeu-la, si us plau! Podeu
+ començar per 
+\family sans 
+\bar under 
+A
+\bar default 
+juda->
+\bar under 
+I
+\bar default 
+ntroducció
+\family default 
+, que proporciona una breu introducció de la documentació disponible.
+ A continuació podeu aprendre a utilitzar LyX mitjançant
+\family sans 
+\bar under 
+A
+\bar default 
+juda->
+\bar under 
+T
+\bar default 
+utorial
+\family default 
+.
+\layout Enumerate
+
+LyX és el que s'anomena un 
+\begin_inset Quotes eld
+\end_inset 
+
+processador de documents.
+\begin_inset Quotes erd
+\end_inset 
+
+ El disseny de LyX és diferent del dels processadors de texts normals ---fent
+ senzilla l'escriptura de documents.
+ Això sí, només una mica diferent, que ningú s'espanti! La documentació
+ ho aclarirà tot
+\begin_float footnote 
+\layout Standard
+
+No us havia dit encara que cal llegir la documentació ?
+\end_float 
+.
+\layout Enumerate
+
+Els documents LyX ténen un aspecte formidable! Proveu de seleccionar 
+\family sans 
+\bar under 
+F
+\bar default 
+itxer->Visualitzar
+\protected_separator 
+
+\bar under 
+d
+\bar default 
+vi
+\family default 
+ ara mateix per veure-ho.
+\layout Enumerate
+
+Sí, LyX pot imitar (quasi bé) tota la funcionalitat de LaTeX.
+ A més a més, LyX pot importar fitxers LaTeX.
+ Els usuaris de LaTeX amb experiència es poden saltar la resta del 
+\emph on 
+Tutorial
+\emph default 
+, i llegir el capítol 
+\begin_inset Quotes eld
+\end_inset 
+
+
+\emph on 
+LyX for LaTeX Users
+\emph default 
+
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ (Per tots els altres: no us preocupeu, no cal saber LaTeX per utilitzar
+ LyX.) 
+\layout Enumerate
+
+LyX té moltes utilitats per qui vulgui fer servir altres idiomes que l'Anglès.
+ A més, els lligams de tecles (
+\emph on 
+keybindings
+\emph default 
+), barra d'utilitats (
+\emph on 
+toolbar
+\emph default 
+), i moltes altres característiques són configurables en gran manera (bàsicament
+ editant el fitxer 
+\family typewriter 
+lyxrc
+\family default 
+).
+ Vegeu 
+\family sans 
+\bar under 
+A
+\bar default 
+juda->
+\bar under 
+P
+\bar default 
+ersonalització
+\family default 
+ per més detalls.
+\layout Enumerate
+
+La pàgina web de LyX 
+\family typewriter 
+és http://www.lyx.org
+\family default 
+.
+ Obté informació sobre LyX, subscriviu-vos a la/les llista/llistes de correu
+ de LyX, Passegeu-vos pel 
+\emph on 
+LyX Graphical Tour
+\emph default 
+, i molt més.
+\the_end
diff --git a/lib/examples/de_splash.lyx b/lib/examples/de_splash.lyx
new file mode 100644 (file)
index 0000000..9dc84c9
--- /dev/null
@@ -0,0 +1,147 @@
+#This file was created by <pit> Sat Feb 27 21:04:08 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language german
+\inputencoding latin1
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language german
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Willkommen zu LyX!
+\layout Section*
+
+Die wichtigsten Dinge, wenn Sie LyX verwenden 
+\layout Enumerate
+
+LyX besitzt eine exzellente Dokumentation --- bitte machen Sie regen Gebrauch
+ davon! Lesen Sie zunächst 
+\family sans 
+\bar under 
+H
+\bar default 
+ilfe\SpecialChar \menuseparator
+
+\bar under 
+E
+\bar default 
+inführung
+\family default 
+, dies gibt Ihnen einen kurzen Überblick über die vorhandene Dokumentation.
+ Wie Sie mit LyX arbeiten erläutert Ihnen 
+\family sans 
+\bar under 
+H
+\bar default 
+ilfe\SpecialChar \menuseparator
+
+\bar under 
+T
+\bar default 
+utorium
+\family default 
+.
+\layout Enumerate
+
+LyX kann man am besten als 
+\begin_inset Quotes gld
+\end_inset 
+
+Dokumenten-Verarbeitung
+\begin_inset Quotes grd
+\end_inset 
+
+ beschreiben.
+ Vom Design her unterscheidet es sich von gängigen Textverarbeitungen und
+ vereinfacht dadurch das Erstellen von komplexen Dokumenten.
+ Aber keine Sorge, die Unterschiede sind nur gering und werden in der Dokumentat
+ion erläutert.
+\layout Enumerate
+
+Mit LyX erstellte Texte sehen gut aus.
+ Überzeugen Sie sich davon mit 
+\family sans 
+\bar under 
+D
+\bar default 
+atei\SpecialChar \menuseparator
+DVI
+\protected_separator 
+
+\bar under 
+a
+\bar default 
+nzeigen
+\family default 
+.
+\layout Enumerate
+
+Ja, LyX kann (fast) die gesamte Funktionalität von LaTeX umsetzen.
+ Und, ja, LyX kann vorhandene LaTeX-Dateien importieren.
+ Erfahrene LaTeX-Nutzer sollten das 
+\emph on 
+Tutorium
+\emph default 
+ überfliegen und dann das Kapitel 
+\begin_inset Quotes gld
+\end_inset 
+
+LyX für LaTeX-Benutzer
+\begin_inset Quotes grd
+\end_inset 
+
+ lesen.
+ Alle anderen brauchen sich keine Gedanken zu machen: Sie müssen kein LaTeX
+ lernen, um mit LyX zu arbeiten.
+\layout Enumerate
+
+LyX bietet ausführliche Unterstützung für all diejenigen, die eine andere
+ Sprache als Englisch lesen und schreiben.
+ Darüberhinaus sind Dinge wie Tastaturbelegung, Werkzeugleiste und viele
+ weitere Charakteristiken frei konfigurierbar (das meiste durch editieren
+ der Datei 
+\family typewriter 
+lyxrc
+\family default 
+).
+ Näheres erläutert 
+\family sans 
+\bar under 
+H
+\bar default 
+ilfe\SpecialChar \menuseparator
+
+\bar under 
+A
+\bar default 
+npassung
+\family default 
+.
+\layout Enumerate
+
+Die Web-Seite von LyX ist auf 
+\family typewriter 
+www.lyx.org
+\family default 
+.
+ Dort bekommen Sie aktuelle Informationen zu LyX, können Mailing-Listen
+ abonnieren, sich einen grafischen Rundgang durch LyX ansehen und vieles
+ mehr.
+\the_end
diff --git a/lib/examples/docbook_example.lyx b/lib/examples/docbook_example.lyx
new file mode 100644 (file)
index 0000000..4089b07
--- /dev/null
@@ -0,0 +1,449 @@
+#This file was created by <jamatos> Mon Sep 27 16:39:07 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass docbook
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout SGML
+
+
+\begin_inset Info Here goes the information about the article:
+  * title
+  * date
+  * author
+    + first name
+    + last name
+ * abstract
+\end_inset 
+
+
+\layout Title
+\added_space_top vfill \added_space_bottom vfill 
+Docbook with LyX
+\layout Date
+
+24 September 1999
+\layout Author
+
+\begin_deeper 
+\layout SGML
+\align center 
+
+\size normal 
+
+\begin_inset Info The author name is always composed of:
+  * first name
+  * surname
+
+It is always possible to have more than one author.
+\end_inset 
+
+
+\layout FirstName
+
+
+\latex no_latex 
+Jos
+\latex default 
+e'
+\layout Surname
+
+
+\latex no_latex 
+Matos
+\end_deeper 
+\layout Abstract
+
+This is a small illustration of lyx's features using DocBook.
+\layout Abstract
+
+The abstract can span several paragraphs.
+\layout Section
+
+
+\begin_inset LatexCommand \label{first-section}
+
+\end_inset 
+
+Introduction
+\layout Standard
+
+This file ilustrates the generation of docbook documents with LyX.
+\layout Standard
+
+This will improve as soon as new features are available.
+\layout Section
+
+Standard layouts
+\layout Standard
+
+One of the goals is the support, as much as possible, of layouts used in
+ other textclass, for compatibility purposes.
+\layout Standard
+
+Remember that this is work in progress, I would like to hear any comments,
+ good or 
+\begin_inset Quotes eld
+\end_inset 
+
+bad
+\begin_inset Quotes erd
+\end_inset 
+
+.
+\layout Subsection
+
+Lists
+\layout Standard
+
+This is an example with several nested lists.
+\layout Itemize
+
+item 1
+\begin_deeper 
+\layout Enumerate
+
+item 2
+\layout Description
+
+new item
+\begin_deeper 
+\layout Enumerate
+
+collection
+\end_deeper 
+\end_deeper 
+\layout Itemize
+
+new set
+\layout Subsection
+
+Code
+\layout Standard
+
+Required steps to have a running lyx.
+\layout Quotation
+
+Be carefull with your own code.
+\layout Quotation
+
+The debugger.
+\layout Code
+
+cat > env.out
+\layout Code
+
+tar xvzf lyx.tgz
+\layout Code
+
+cd lyx-1_0_x
+\layout Code
+
+./configure
+\layout Code
+
+make
+\layout Code
+
+make install
+\layout Subsection
+
+Labels
+\layout Standard
+
+If a label is the first element in any layout, that label will be merged
+ with that element.
+ See as an example 
+\begin_inset LatexCommand \ref[first-section]{first-section}
+
+\end_inset 
+
+.
+\layout Subsection
+
+Fonts
+\layout Standard
+
+The only fonts supported are 
+\emph on 
+Emphasis
+\emph default 
+ and 
+\latex latex 
+<literal>SGML</literal>
+\latex default 
+.
+\layout Subsection
+
+Figures
+\layout Standard
+
+One of the major changes in the docbook when compared with the linuxdoc
+ support are the figures support.
+ LyX only allows to view eps figures.
+ So you should have one of these if you want to take advantage of this feature.
+\layout Standard
+
+Notice that when the docbook code is exported the filename extension is
+ stripped.
+ This enables that when the several backends are processed in sgmltools,
+ the corresponding extensions are added.
+ The default extension are eps for the print and gif for the html backend.
+\layout Standard
+
+\begin_float fig 
+\layout Standard
+
+
+\begin_inset Figure size 56 85
+file platypus.eps
+width 1 2
+height 1 3
+angle 45
+flags 2
+
+\end_inset 
+
+
+\layout Caption
+
+Nice platypus
+\end_float 
+\layout Standard
+
+Wide figures are treated as normal figures.
+\layout Standard
+
+\begin_float wide-fig 
+\layout Standard
+
+
+\begin_inset Figure size 56 85
+file platypus.eps
+width 1 2
+height 1 3
+angle 45
+flags 2
+
+\end_inset 
+
+
+\layout Caption
+
+long, very long...
+ :-)
+\end_float 
+\layout Subsection
+
+Tables
+\layout Standard
+
+There is also basic support for tables.
+\begin_float tab 
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable
+multicol5
+3 5 0 0 -1 -1 -1 -1
+1 0 0 0
+1 0 0 0
+1 1 0 0
+8 1 0 "" ""
+8 1 0 "" ""
+8 1 0 "" ""
+8 1 0 "" ""
+8 1 1 "" ""
+0 8 1 0 0 0 0 "" ""
+0 8 1 0 0 0 0 "" ""
+0 8 1 0 0 0 0 "" ""
+0 8 1 0 0 0 0 "" ""
+0 8 1 0 0 0 0 "" ""
+0 8 1 0 0 0 0 "" ""
+1 8 1 0 0 0 0 "" ""
+0 8 1 0 0 0 0 "" ""
+1 8 1 0 0 0 0 "" ""
+2 8 1 0 0 0 0 "" ""
+0 8 1 0 0 0 0 "" ""
+1 8 0 1 0 0 0 "" ""
+0 8 1 0 0 0 0 "" ""
+0 8 1 0 0 0 0 "" ""
+0 8 1 0 0 0 0 "" ""
+
+
+\newline 
+Software 1
+\newline 
+Software 2
+\newline 
+Software 3
+\newline 
+Software 4
+\newline 
+Plataform 1
+\newline 
+25 MB
+\newline 
+10 MB
+\newline 
+34 MB
+\newline 
+Plataform 2
+\newline 
+
+\newline 
+12 MB
+\newline 
+30 MB
+\newline 
+35 MB
+\layout Caption
+
+Nice Formal Table
+\end_float 
+\layout Standard
+
+As it happens with the figures the wide tables are treated as normal tables.
+\layout Subsection
+
+Margins
+\layout Standard
+
+There are some restrictions when using margins.
+ For further information on docbook allowed syntax consult the 
+\begin_inset LatexCommand \url[docbook reference manual]{http://www.oasis-open.org/docbook/documentation/reference/}
+
+\end_inset 
+
+.
+\layout Quotation
+
+It is also possible to insert margin notes inside some environments.
+\begin_deeper 
+\layout SGML
+
+\begin_float margin 
+\end_deeper 
+\layout Standard
+
+margin note
+\layout Standard
+
+second par -> margin note
+\layout Standard
+
+third par -> margin note
+\end_float 
+\layout Quotation
+
+Notice that the previous layout is at level 1 
+\begin_float footnote 
+\layout Standard
+
+This comes from a docbook restriction.
+ Sidebar can only appear inside "MSGTEXT", "CAUTION", "IMPORTANT", "NOTE",
+ "TIP", "WARNING", "BLOCKQUOTE".
+\layout Standard
+
+These environments are easily added to the docbook layout.
+\end_float 
+ and so is the follow:
+\begin_deeper 
+\layout SGML
+
+\begin_float margin 
+\end_deeper 
+\layout Standard
+
+too marginal ;-)
+\end_float 
+\layout Section
+
+The road map
+\layout Standard
+
+This is a small list of the remaining tasks:
+\layout Itemize
+
+Expand the number of layouts
+\begin_deeper 
+\layout Itemize
+
+example
+\layout Itemize
+
+note
+\layout Itemize
+
+warning
+\layout Itemize
+
+tip
+\layout Itemize
+
+caution
+\layout Itemize
+
+important
+\end_deeper 
+\layout Itemize
+
+Compose other layout files, besides article
+\begin_deeper 
+\layout Enumerate
+
+book
+\layout Enumerate
+
+set (very unlikely)
+\begin_float footnote 
+\end_deeper 
+\layout Standard
+
+I do not expect lyx to deal with colection of books, for now!
+\end_float 
+\begin_deeper 
+\layout Enumerate
+
+refentry
+\end_deeper 
+\layout Itemize
+
+goodies
+\begin_deeper 
+\layout Enumerate
+
+including other lyx files
+\layout Enumerate
+
+more advanced tables support
+\end_deeper 
+\layout Itemize
+
+better documentation
+\layout Standard
+
+That's all.
+ ;-)
+\the_end
diff --git a/lib/examples/ejemplo_con_lyx.lyx b/lib/examples/ejemplo_con_lyx.lyx
new file mode 100644 (file)
index 0000000..a0104c4
--- /dev/null
@@ -0,0 +1,265 @@
+#This file was created by <sergio> Mon May 24 07:03:57 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language spanish
+\inputencoding latin1
+\fontscheme default
+\graphics dvips
+\paperfontsize 12
+\spacing single 
+\papersize a4paper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Title
+
+ESTE ES EL TÍTULO DEL DOCUMENTO
+\layout Author
+
+por Fulanito
+\layout Date
+
+12 de junio de 1972
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset 
+
+
+\layout Section
+
+Filosofía general
+\layout Standard
+
+La filosofía básica de LyX es que te preocupes del contenido de lo que escribes,
+ no de la forma.
+\layout Subsection
+
+Cómo lo hace LyX
+\layout Standard
+
+LyX utiliza LaTeX, un sistema de preparación de documentos diseñado por
+ Leslie Lamport en 1985.
+ Fue construido sobre un lenguaje de composición llamado TeX, creado por
+ Donald Knuth en 1984.
+ LaTeX está diseñado sobre una filosofía similar a la de LyX.
+ Leslie Lamport dijo (ver referencia 
+\begin_inset LatexCommand \cite{lamport}
+
+\end_inset 
+
+):
+\layout Quote
+
+La función del diseño tipográfico es ayudar al lector a comprender las ideas
+ del autor.
+ Para que un documento sea fácil de leer, su estructura visual debe reflejar
+ su estructura lógica.
+ Las citas y los programas de ordenador, al ser elementos estructuralmente
+ distintos, deberían distinguirse visualmente uno de otro [...] Como LaTeX
+ no puede entenderte directamente, debes indicarle explícitamente la estructura
+ lógica mediante comandos especiales [...] Mientras escribes el documento,
+ deberías preocuparte de su estructura lógica, no de su apariencia.
+\layout Subsection
+
+Por qué LyX es mejor
+\layout Standard
+
+
+\begin_inset LatexCommand \label{sec:lyxbetter}
+
+\end_inset 
+
+LyX puede ser útil a más gente que LaTeX.
+ Es considerablemente más fácil de usar, ya que no necesitas aprender LaTeX
+ (que es prácticamente un lenguaje de programación).
+ LyX es básicamente como los demás procesadores de texto 
+\begin_inset Quotes eld
+\end_inset 
+
+lo que ves es lo que obtienes
+\begin_inset Quotes erd
+\end_inset 
+
+, salvo que LyX es 
+\begin_inset Quotes eld
+\end_inset 
+
+lo que ves es lo que quieres decir
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ De esta forma, combina la facilidad de uso de los procesadores de texto
+ con la potencia de LaTeX.
+ Esto es Bueno.
+ Además, el formato de fichero es independiente del ordenador/sistema que
+ uses.
+ Y lo mejor de todo, ¡es LIBRE y GRATUITO!
+\layout Section
+
+Características de LyX
+\layout Standard
+
+LyX posee muchas características que hacen más fácil escribir documentos.
+\begin_float footnote 
+\layout Standard
+
+Después de todo, ¿por qué otra cosa lo querrías usar?
+\end_float 
+ Estoy 
+\emph on 
+muy emocionado
+\emph default 
+ de hablarte de ellas.
+ Aquí tienes una lista con sólo unas pocas.
+\layout Itemize
+
+LyX se engarga él solo de los márgenes y la numeración de las notas a pie
+ de página
+\layout Itemize
+
+LyX hace muy simple la edición de fórmulas matemáticas.
+\layout Standard
+
+Para una discusión más filosófica de por qué LyX es mejor que muchos procesadore
+s de texto, mira la sección 
+\begin_inset LatexCommand \ref{sec:lyxbetter}
+
+\end_inset 
+
+, que se encuentra en la página 
+\begin_inset LatexCommand \pageref{sec:lyxbetter}
+
+\end_inset 
+
+.
+\layout Section
+
+Intentos fallidos de usar más cosas de LyX
+\layout Standard
+
+El otro día escribí un programa.
+ Era el siguiente:
+\layout LyX-Code
+
+5 REMARK MI IMPRESIONANTE PROGRAMA
+\layout LyX-Code
+
+10 PRINT 
+\begin_inset Quotes eld
+\end_inset 
+
+¡SOY IMPRESIONANTE!
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout LyX-Code
+
+20 GOTO 10 
+\layout Standard
+
+Después de este gran esfuerzo científico, empecé a sentirme más artístico,
+ así que escribí este haiku:
+\layout Verse
+
+LyX es un maravilloso
+\newline 
+Procesador de textos
+\newline 
+Ahorra tanto tiempo
+\layout Section
+
+Matemáticas
+\layout Standard
+
+Mi ecuación favorita es la solución de la ecuación de segundo grado.
+ Si 
+\begin_inset Formula \( ax^{2}+bx+c=0 \)
+\end_inset 
+
+ (ec.1), entonces 
+\begin_inset Formula \( x=\frac{-b\pm \sqrt{b^{2}-4ac}}{2a} \)
+\end_inset 
+
+ (ec.
+ 2).
+\layout Standard
+
+Otra de mis ecuaciones favoritas es la base del cálculo: 
+\begin_inset Formula \( f'(x)\equiv \lim _{\Delta x\rightarrow 0}\frac{f(x+\Delta x)-f(x)}{\Delta x} \)
+\end_inset 
+
+ (ec.
+ 3).
+\layout Section
+
+Comentarios
+\layout Standard
+
+Un par de apuntes sobre la adaptación a LyX de este fichero:
+\layout Itemize
+
+He quitado la línea hecha a base de guiones.
+ Era simplemente para separar las referencias y el índice del resto del
+ documento.
+ LyX (LaTeX) ya sabe que debe separarlos dejando un espacio.
+\layout Itemize
+
+No me he molestado en poner las ecuaciones en modo demostración.
+ Tampoco he utilizado la numeración automática de ecuaciones, porque no
+ se ha explicado en el 
+\emph on 
+Tutorial
+\emph default 
+.
+\layout Itemize
+
+No he tenido que escribir la palabra 
+\begin_inset Quotes eld
+\end_inset 
+
+Referencias
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ LyX la escribe automáticamente (o la palabra 
+\begin_inset Quotes eld
+\end_inset 
+
+Bibliografía
+\begin_inset Quotes erd
+\end_inset 
+
+, dependiendo de la clase de texto) cuando seleccionas el estilo 
+\family sans 
+Bibliography
+\family default 
+.
+\layout Bibliography
+\bibitem {lamport}
+
+Lamport, Leslie.
+\emph on 
+LaTeX: A Document Preparation System.
+
+\emph default 
+ Addison-Wesley, Reading, Massachusetts, segunda edición, 1994.
+\the_end
diff --git a/lib/examples/ejemplo_sin_lyx.lyx b/lib/examples/ejemplo_sin_lyx.lyx
new file mode 100644 (file)
index 0000000..36170d2
--- /dev/null
@@ -0,0 +1,277 @@
+#This file was created by <sergio> Mon May 24 07:03:07 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language spanish
+\inputencoding latin1
+\fontscheme default
+\graphics dvips
+\paperfontsize 12
+\spacing single 
+\papersize a4paper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Standard
+
+ESTE ES EL TÍTULO DEL DOCUMENTO
+\begin_inset Info Pista: el título debería parecerse más a un título
+\end_inset 
+
+
+\layout Standard
+
+por Fulanito
+\begin_inset Info Pista: Fulanito es el AUTOR
+\end_inset 
+
+
+\layout Standard
+
+12 de junio de 1972
+\begin_inset Info Pista: Esto es una FECHA
+\end_inset 
+
+
+\layout Standard
+
+Índice general
+\begin_inset Info Pista: Sería estupendo que no tuviésemos que escribir el índice
+de manera explícita
+\end_inset 
+
+
+\layout Standard
+
+1.
+ Filosofía general..................1
+\layout Standard
+
+1.1 Cómo lo hace LyX...............1
+\layout Standard
+
+1.2 Por qué LyX es mejor...............1
+\layout Standard
+
+2.
+ Características de LyX
+\layout Standard
+
+3.
+ Intentos fallidos de usar más cosas de LyX
+\layout Standard
+
+4.
+ Matemáticas
+\layout Standard
+
+---------------------------------------------------
+\layout Standard
+
+1.
+ Filosofía general
+\begin_inset Info Pista: Los títulos de sección deberían resaltar mas
+\end_inset 
+
+
+\layout Standard
+
+La filosofía básica de LyX es que te preocupes del contenido de lo que escribes,
+ no de la forma.
+\layout Standard
+
+1.1 Cómo lo hace LyX
+\layout Standard
+
+LyX utiliza LaTeX, un sistema de preparación de documentos diseñado por
+ Leslie Lamport en 1985.
+ Fue construido sobre un lenguaje de composición llamado TeX, creado por
+ Donald Knuth en 1984.
+ LaTeX está diseñado sobre una filosofía similar a la de LyX.
+ Leslie Lamport dijo (ver referencia [1]) 
+\begin_inset Info Pista: Probablemente esta REFERENCIA A CITA no debería
+estar escrita "directamente". ¿Qué pasaría si ponemos el libro
+de Lamport en la segunda entrada de la bibliografía?
+\end_inset 
+
+:
+\layout Standard
+
+
+\begin_inset Quotes eld
+\end_inset 
+
+La función del diseño tipográfico es ayudar al lector a comprender las ideas
+ del autor.
+ Para que un documento sea fácil de leer, su estructura visual debe reflejar
+ su estructura lógica.
+ Las citas y los programas de ordenador, al ser elementos estructuralmente
+ distintos, deberían distinguirse visualmente uno de otro [...] Como LaTeX
+ no puede entenderte directamente, debes indicarle explícitamente la estructura
+ lógica mediante comandos especiales [...] Mientras escribes el documento,
+ deberías preocuparte de su estructura lógica, no de su apariencia.
+\begin_inset Quotes erd
+\end_inset 
+
+
+\begin_inset Info Pista: Esto es una CITA
+\end_inset 
+
+
+\layout Standard
+
+1.2 Por qué LyX es mejor
+\layout Standard
+
+LyX puede ser útil a más gente que LaTeX.
+ Es considerablemente más fácil de usar, ya que no necesitas aprender LaTeX
+ (que es prácticamente un lenguaje de programación).
+ LyX es básicamente como los demás procesadores de texto 
+\begin_inset Quotes eld
+\end_inset 
+
+lo que ves es lo que obtienes
+\begin_inset Quotes erd
+\end_inset 
+
+, salvo que LyX es 
+\begin_inset Quotes eld
+\end_inset 
+
+lo que ves es lo que quieres decir
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ De esta forma, combina la facilidad de uso de los procesadores de texto
+ con la potencia de LaTeX.
+ Esto es Bueno.
+ Además, el formato de fichero es independiente del ordenador/sistema que
+ uses.
+ Y lo mejor de todo, ¡es LIBRE y GRATUITO!
+\layout Standard
+
+2.
+ Características de LyX
+\layout Standard
+
+LyX posee muchas características que hacen más fácil escribir documentos.
+ (Después de todo, ¿por qué otra cosa lo querrías usar?
+\begin_inset Info Pista: Este comentario entre paréntesis quedaría mejor en una
+nota a pie de página
+\end_inset 
+
+) Estoy MUY EMOCIONADO
+\begin_inset Info Pista: ¡Resáltalo!
+\end_inset 
+
+ de hablarte de ellas.
+ Aquí tienes una lista con sólo unas pocas.
+\layout Standard
+
+* LyX se engarga él solo de los márgenes y la numeración de las notas a
+ pie de página
+\layout Standard
+
+* LyX hace muy simple la edición de fórmulas matemáticas.
+\layout Standard
+
+Para una discusión más filosófica de por qué LyX es mejor que muchos procesadore
+s de texto, mira la sección 1.2, que se encuentra en la página 1.
+\begin_inset Info Pista: Seguramente, estas REFERENCIAS CRUZADAS no
+deberían escribirse "directamente". ¿Y si cambiásemos los
+números de sección?
+\end_inset 
+
+
+\layout Standard
+
+3.
+ Intentos fallidos de usar más cosas de LyX
+\layout Standard
+
+El otro día escribí un programa.
+ Era el siguiente:
+\layout Standard
+
+5 REMARK MI IMPRESIONANTE PROGRAMA
+\layout Standard
+
+10 PRINT 
+\begin_inset Quotes eld
+\end_inset 
+
+¡SOY IMPRESIONANTE!
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout Standard
+
+20 GOTO 10 
+\begin_inset Info Pista: Esto es código de ordenador
+\end_inset 
+
+
+\layout Standard
+
+Después de este gran esfuerzo científico, empecé a sentirme más artístico,
+ así que escribí este haiku:
+\layout Standard
+
+LyX es un maravilloso
+\layout Standard
+
+Procesador de textos
+\layout Standard
+
+Ahorra tanto tiempo 
+\begin_inset Info Pista: No es muy bueno, pero es poesia, concretamente una
+estrofa
+\end_inset 
+
+
+\layout Standard
+
+4.
+ Matemáticas
+\begin_inset Info Pista: Todas las fórmulas a partir de aquí deberían escribirse
+en modo matematico
+\end_inset 
+
+
+\layout Standard
+
+Mi ecuación favorita es la solución de la ecuación de segundo grado.
+ Si ax^2+bx+c=0 (ec.1), entonces x= -b + o menos la raíz cuadrada de b^2-4ac,
+ todo dividido por 2a (ec.
+ 2).
+\layout Standard
+
+Otra de mis ecuaciones favoritas es la base del cálculo: f'(x) se define
+ como el límite cuando deltax tiende a cero de f(x+deltax) - f(x) dividido
+ por deltax (ec.
+ 3).
+\layout Standard
+
+------------------------------------------------
+\layout Standard
+
+REFERENCIAS
+\layout Standard
+
+[1] Lamport, Leslie.
+ LaTeX: A Document Preparation System.
+ Addison-Wesley, Reading, Massachusetts, segunda edición, 1994.
+\the_end
diff --git a/lib/examples/es_splash.lyx b/lib/examples/es_splash.lyx
new file mode 100644 (file)
index 0000000..e83eac5
--- /dev/null
@@ -0,0 +1,156 @@
+#This file was created by <sergio> Mon May 24 07:01:27 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language spanish
+\inputencoding latin1
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+¡Bienvenido a LyX!
+\layout Section*
+
+Las n primeras cosas que debe saber al usar LyX
+\layout Enumerate
+
+LyX viene con una excelente documentación (por favor, ¡úsela!).
+ Comience en el menú con 
+\family sans 
+\bar under 
+A
+\bar default 
+yuda\SpecialChar \menuseparator
+
+\bar under 
+I
+\bar default 
+ntroducción
+\family default 
+, que le hará una introducción muy breve a los manuales.
+ Después aprenda a usar LyX con 
+\family sans 
+\bar under 
+A
+\bar default 
+yuda\SpecialChar \menuseparator
+
+\bar under 
+T
+\bar default 
+utorial
+\family default 
+.
+\layout Enumerate
+
+LyX es lo que llamamos un 
+\begin_inset Quotes eld
+\end_inset 
+
+procesador de documentos
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ Por su diseño, es distinto a los procesadores de texto convencionales,
+ haciendo que resulte más sencilla la tarea de escribir documentos.
+ Pero sólo un poco distinto, no se asuste.
+ La documentación le dejará todo claro
+\begin_float footnote 
+\layout Standard
+
+¿Hemos dicho ya que debería leer la documentación?
+\end_float 
+.
+\layout Enumerate
+
+La salida de LyX tiene un aspecto impecable.
+ Ejecute en el menú 
+\family sans 
+\bar under 
+A
+\bar default 
+rchivo\SpecialChar \menuseparator
+Ver
+\protected_separator 
+
+\bar under 
+d
+\bar default 
+vi
+\family default 
+ para comprobarlo.
+\layout Enumerate
+
+Sí, LyX puede imitar casi toda la funcionalidad de LaTeX.
+ Y sí, LyX puede importar ficheros LaTeX.
+ Los usuarios experimentados de LaTeX deberían leerse el capítulo 
+\begin_inset Quotes eld
+\end_inset 
+
+LyX para usuarios de LaTeX
+\begin_inset Quotes erd
+\end_inset 
+
+, y hojear el resto del 
+\emph on 
+Tutorial
+\emph default 
+.
+ (Al resto de lectores: no se preocupe, no necesita saber LaTeX para usar
+ LyX).
+\layout Enumerate
+
+LyX tiene montones de ventajas para aquellos que leen o escriben en un idioma
+ distinto del inglés.
+ Además, las asociaciones de teclas, la barra de herramientas y muchas otras
+ características son altamente configurables (la mayor parte editando su
+ fichero 
+\family typewriter 
+lyxrc
+\family default 
+).
+ Mire en 
+\family sans 
+\bar under 
+A
+\bar default 
+yuda\SpecialChar \menuseparator
+
+\bar under 
+P
+\bar default 
+ersonalización
+\family default 
+ para más detalles.
+\layout Enumerate
+
+La página de LyX en Internet está en 
+\family typewriter 
+www.lyx.org
+\family default 
+.
+ Consiga allí información sobre el programa, subscríbase a la(s) lista(s)
+ de correo, obtenga el 
+\emph on 
+Tour Gráfico de LyX
+\emph default 
+, y muchas más cosas.
+\the_end
diff --git a/lib/examples/example_lyxified.lyx b/lib/examples/example_lyxified.lyx
new file mode 100644 (file)
index 0000000..2d2b80e
--- /dev/null
@@ -0,0 +1,264 @@
+#This file was created by <cfog> Tue Jan  6 11:05:07 1998
+#LyX 0.12 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language default
+\inputencoding default
+\fontscheme default
+\graphics dvips
+\paperfontsize 12
+\spacing single 
+\papersize letterpaper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Title
+
+THIS IS THE TITLE OF THE DOCUMENT
+\layout Author
+
+by Fee LyX
+\layout Date
+
+June 12, 1972
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents
+
+\end_inset 
+
+
+\layout Section
+
+Basic Philosophy
+\layout Standard
+
+The basic philosophy of LyX is that you should worry about the form of what
+ you're writing and not the content.
+\layout Subsection
+
+How LyX does it
+\layout Standard
+
+LyX uses LaTeX, a document preparation system designed by Leslie Lamport
+ in 1985.
+ It, in turn, was built up from a typesetting language called TeX, created
+ by Donald Knuth in 1984.
+ LaTeX is designed around a philosophy similar to that of LyX.
+ Leslie Lamport once said (see reference 
+\begin_inset LatexCommand \cite{lamport}
+
+\end_inset 
+
+):
+\layout Quote
+
+The function of typographic design is to help the reader understand the
+ author's ideas.
+ For a document to be easy to read, its visual structure must reflect its
+ logical structure.
+ Quotations and computer programs, being logically distinct structural elements,
+ should be distinguished visually from one another....
+ Since LaTeX can't understand your prose, you must explicitly indicate the
+ logical structure by typing special commands....
+ As you are writing your document, you should be concerned with its logical
+ structure, not its visual appearance.
+\layout Subsection
+
+Why LyX is better
+\layout Standard
+
+
+\begin_inset LatexCommand \label{sec:lyxbetter}
+
+\end_inset 
+
+LyX can be useful to more people than LaTeX.
+ It's considerably easier to learn, because you don't need to learn LaTeX
+ (which is practically a programming language).
+ LyX is basically like other 
+\begin_inset Quotes eld
+\end_inset 
+
+What you see is what you get
+\begin_inset Quotes erd
+\end_inset 
+
+ word processors, except that LyX is 
+\begin_inset Quotes eld
+\end_inset 
+
+What you see is what you mean
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ In this way, it combines the ease of use of word processors with the power
+ of LaTeX.
+ This is a Good Thing.
+ Also, the file format is platform independent.
+ Best of all, it's FREE!
+\layout Section
+
+Features of LyX
+\layout Standard
+
+LyX has many features which make writing documents easier.
+\begin_float footnote 
+\layout Standard
+
+After all, why else would you want to use it?
+\end_float 
+ I'm 
+\shape italic 
+very excited
+\shape default 
+ to talk about them.
+ Here's a list of just a few.
+\layout Itemize
+
+LyX worries about margins, and footnote numbering for you
+\layout Itemize
+
+LyX makes it simple to write and edit mathematical formulae
+\layout Standard
+
+For a more philosophical discussion of why LyX is better than lots of other
+ word processors, see Section 
+\begin_inset LatexCommand \ref{sec:lyxbetter}
+
+\end_inset 
+
+, which can be found on page 
+\begin_inset LatexCommand \pageref{sec:lyxbetter}
+
+\end_inset 
+
+.
+\layout Section
+
+Lame attempts to use other LyX stuff
+\layout Standard
+
+I wrote a program the other day.
+ It looked like this.
+\layout LyX-Code
+
+5 REMARK MY AWESOME PROGRAM
+\layout LyX-Code
+
+10 PRINT 
+\begin_inset Quotes eld
+\end_inset 
+
+I'M AWESOME!
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout LyX-Code
+
+20 GOTO 10
+\layout Standard
+
+After all that scientific thinking, I started feeling more artistic, so
+ I wrote this haiku
+\layout Verse
+
+LyX is really great 
+\newline 
+Typesetting word processor
+\newline 
+ It saves so much time
+\layout Section
+
+Math Stuff
+\layout Standard
+
+My favorite equation is the solution to a quadratic equation.
+ If 
+\begin_inset Formula \( ax^{2}+bx+c=0 \)
+\end_inset 
+
+ (eq.1), then 
+\begin_inset Formula \( x=\frac{-b\pm \sqrt{b^{2}-4ac}}{2a} \)
+\end_inset 
+
+ (eq.
+ 2).
+\layout Standard
+
+Another favorite equation is the basis of calculus: 
+\begin_inset Formula \( f'(x)\equiv \lim _{\Delta x\rightarrow 0}\frac{f(x+\Delta x)-f(x)}{\Delta x} \)
+\end_inset 
+
+ (eq.
+ 3).
+\layout Section
+
+Notes
+\layout Standard
+
+A couple notes about LyXifiying this file:
+\layout Itemize
+
+I was able to remove the lines made with dashes.
+ They were there purely to separate the title and references from the rest
+ of the document.
+ LyX (LaTeX) knows enough to separate these parts of the document with space.
+\layout Itemize
+
+I didn't bother putting the math equations in display mode.
+ Also, I didn't use LyX' automatic equation numbering, because it's not
+ described in the 
+\emph on 
+Tutorial
+\emph default 
+.
+\layout Itemize
+
+I didn't have to type the word 
+\begin_inset Quotes eld
+\end_inset 
+
+References
+\begin_inset Quotes erd
+\end_inset 
+
+ below.
+ LyX automatically writes it (or the word 
+\begin_inset Quotes eld
+\end_inset 
+
+Bibliography,
+\begin_inset Quotes erd
+\end_inset 
+
+ depending on the textclass) when you select 
+\family sans 
+Bibliography 
+\family default 
+style.
+\layout Bibliography
+\bibitem {lamport}
+
+Lamport, Leslie.
+\emph on 
+LaTeX: A Document Preparation System.
+
+\emph default 
+ Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+\the_end
diff --git a/lib/examples/example_raw.lyx b/lib/examples/example_raw.lyx
new file mode 100644 (file)
index 0000000..63562c5
--- /dev/null
@@ -0,0 +1,273 @@
+#This file was created by <karger> Tue Mar  2 14:50:20 1999
+#LyX 1.0 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language default
+\inputencoding default
+\fontscheme default
+\graphics dvips
+\paperfontsize 12
+\spacing single 
+\papersize letterpaper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Standard
+
+THIS IS THE TITLE OF THE DOCUMENT 
+\begin_inset Info Hint: the title should look more like a title
+\end_inset 
+
+
+\layout Standard
+
+by Fee LyX
+\begin_inset Info Hint: Fee is the AUTHOR
+\end_inset 
+
+
+\layout Standard
+
+June 12, 1972
+\begin_inset Info Hint: this is a DATE
+\end_inset 
+
+
+\layout Standard
+
+Table of Contents
+\begin_inset Info Hint: It would be nice if we didn't have to type the Table
+of Contents explicitly
+\end_inset 
+
+
+\layout Standard
+
+1.
+ Basic Philosophy..................1
+\layout Standard
+
+1.1 How LyX Does It...............1
+\layout Standard
+
+1.2 Why LyX is Better...............1
+\layout Standard
+
+2.
+ Features of LyX
+\layout Standard
+
+3.
+ Lame Attempts to use more LyX stuff
+\layout Standard
+
+4.
+ Math Stuff
+\layout Standard
+
+---------------------------------------------------
+\layout Standard
+
+1.
+ Basic Philosophy
+\begin_inset Info Hint: Section titles should probably stand out more
+\end_inset 
+
+
+\layout Standard
+
+The basic philosophy of LyX is that you should worry about the form of what
+ you're writing and not the content.
+\layout Standard
+
+1.1 How LyX does it
+\layout Standard
+
+LyX uses LaTeX, a document preparation system designed by Leslie Lamport
+ in 1985.
+ It, in turn, was built up from a typesetting language called TeX, created
+ by Donald Knuth in 1984.
+ LaTeX is designed around a philosophy similar to that of LyX.
+ Leslie Lamport once said (see reference [1])
+\begin_inset Info Hint: Probably, this CITATION REFERENCE shouldn't be
+"hard-coded". What if we make Lamport's book the second
+ item in the bibliography?
+\end_inset 
+
+:
+\layout Standard
+
+
+\begin_inset Quotes eld
+\end_inset 
+
+The function of typographic design is to help the reader understand the
+ author's ideas.
+ For a document to be easy to read, its visual structure must reflect its
+ logical structure.
+ Quotations and computer programs, being logically distinct structural elements,
+ should be distinguished visually from one another....
+ Since LaTeX can't understand your prose, you must explicitly indicate the
+ logical structure by typing special commands....
+ As you are writing your document, you should be concerned with its logical
+ structure, not its visual appearance.
+\begin_inset Quotes erd
+\end_inset 
+
+
+\begin_inset Info Hint: This is a QUOTE
+\end_inset 
+
+
+\layout Standard
+
+1.2 Why LyX is better
+\layout Standard
+
+LyX can be useful to more people than LaTeX.
+ It's considerably easier to learn, because you don't need to learn LaTeX
+ (which is practically a programming language).
+ LyX is basically like other 
+\begin_inset Quotes eld
+\end_inset 
+
+What you see is what you get
+\begin_inset Quotes erd
+\end_inset 
+
+ word processors, except that LyX is 
+\begin_inset Quotes eld
+\end_inset 
+
+What you see is what you mean
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ In this way, it combines the ease of use of word processors with the power
+ of LaTeX.
+ This is a Good Thing.
+ Also, the file format is platform independent.
+ Best of all, it's FREE!
+\layout Standard
+
+2.
+ Features of LyX
+\layout Standard
+
+LyX has many features which make writing documents easier.
+ (After all, why else would you want to use it?
+\begin_inset Info Hint: This parenthetical statement would look better in a footnote
+\end_inset 
+
+) I'm VERY EXCITED
+\begin_inset Info Hint: Emphasize!
+\end_inset 
+
+ to talk about them.
+ Here's a list of just a few.
+\layout Standard
+
+* LyX worries about margins, and footnote numbering for you
+\layout Standard
+
+* LyX makes it simple to write and edit mathematical formulae
+\layout Standard
+
+For a more philosophical discussion of why LyX is better than lots of other
+ word processors, see Section 1.2, which can be found on page 1.
+\begin_inset Info Hint: Probably, these CROSS-REFERENCES shouldn't be
+"hard-coded". What if we change the section numbers?
+\end_inset 
+
+
+\layout Standard
+
+3.
+ Lame attempts to use other LyX stuff
+\layout Standard
+
+I wrote a program the other day.
+ It looked like this.
+\layout Standard
+
+5 REMARK MY AWESOME PROGRAM
+\layout Standard
+
+10 PRINT 
+\begin_inset Quotes eld
+\end_inset 
+
+I'M AWESOME!
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout Standard
+
+20 GOTO 10 
+\begin_inset Info Hint: This is computer CODE
+\end_inset 
+
+
+\layout Standard
+
+After all that scientific thinking, I started feeling more artistic, so
+ I wrote this haiku
+\layout Standard
+
+LyX is really great
+\layout Standard
+
+Typesetting word processor
+\layout Standard
+
+It saves so much time 
+\begin_inset Info Hint: It's not very good, but it is poetry,
+otherwise known as VERSE
+\end_inset 
+
+
+\layout Standard
+
+4.
+ Math Stuff
+\begin_inset Info Hint: these math things should be printed in math mode!
+\end_inset 
+
+
+\layout Standard
+
+My favorite equation is the solution to a quadratic equation.
+ If ax^2+bx+c=0 (eq.1), then x= -b + or minus the square root of b^2-4ac
+ all divided by 2a (eq.
+ 2).
+\layout Standard
+
+Another favorite equation is the basis of calculus: f'(x) is defined as
+ the limit as deltax goes to zero of f(x+deltax) - f(x) divided by deltax
+ (eq.
+ 3).
+\layout Standard
+
+------------------------------------------------
+\layout Standard
+
+REFERENCES
+\layout Standard
+
+[1] Lamport, Leslie.
+ LaTeX: A Document Preparation System.
+ Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+\the_end
diff --git a/lib/examples/exemple_brut.lyx b/lib/examples/exemple_brut.lyx
new file mode 100644 (file)
index 0000000..df89f87
--- /dev/null
@@ -0,0 +1,295 @@
+#This file was created by <phb> Tue Apr 13 00:28:13 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language french
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize a4paper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language french
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Standard
+
+CECI EST LE TITRE DU DOCUMENT 
+\begin_inset Info Indication:
+Le titre devrait ressembler un peu plus à un titre ("TITLE")
+\end_inset 
+
+
+\layout Standard
+
+par Fée LyX 
+\begin_inset Info Indication:
+Fée est l'auteur de ce document ("AUTHOR")
+\end_inset 
+
+
+\layout Standard
+
+12 Juin 1972 
+\begin_inset Info Indication:
+Ceci est une "DATE".(NdT: Si si !)
+\end_inset 
+
+
+\layout Standard
+
+Table des Matières 
+\begin_inset Info Indication:
+Ce serait plus agréable de ne pas avoir à taper la
+ "Table des Matières"  explicitement.
+\end_inset 
+
+
+\layout Standard
+
+1.
+ Philosophie Générale.................1
+\layout Standard
+
+1.1 Comment LyX le fait...............1
+\layout Standard
+
+1.2 Pourquoi LyX est meilleur....1
+\layout Standard
+
+2.
+ Fonctionnalités de LyX
+\layout Standard
+
+3.
+ Tentatives maladroites de mieux utiliser LyX
+\layout Standard
+
+4.
+ Les Maths
+\layout Standard
+
+---------------------------------------------------
+\layout Standard
+
+1.
+ Philosophie Générale 
+\begin_inset Info Indication:
+Les titres de "Sections" ne sont pas assez en valeur, et ne
+devraient pas ^etre numérotés manuellement.
+\end_inset 
+
+
+\layout Standard
+
+La philosophie générale de LyX est de vous laisser vous concentrer sur le
+ contenu et non pas sur la forme de vos écrits.
+\layout Standard
+
+1.1 Comment LyX le fait
+\layout Standard
+
+LyX utilise LaTeX, un système de préparation de documents conçu par Leslie
+ Lamport en 1985.
+ Il a été construit, à son tour, à partir d'un langage de composition, appelé
+ TeX, créé par Donald Knuth en 1984.
+ LaTeX est conçu autour d'une philosophie similaire à celle de LyX.
+ Leslie Lamport disait lui-même (voir référence [1]) 
+\begin_inset Info Indication:
+Cette "Citation Bibliographique" ne devrait probablement pas
+^etre écrite en dur. Que se passe-t-il si le livre de Leslie Lamport
+passe en seconde position dans la bibliographie?
+\end_inset 
+
+:
+\layout Standard
+
+
+\begin_inset Quotes fld
+\end_inset 
+
+Le but de la typographie est d'aider le lecteur à comprendre l'idée de l'auteur.
+ Pour qu'un document soit facile à lire, sa structure visuelle doit refléter
+ sa structure logique.
+ Les citations et les sources de programmes, étant, logiquement parlant,
+ des éléments structurels différents, doivent être visuellement différents
+ les uns des autres...
+ Comme LaTeX ne peut pas comprendre votre prose, vous devez explicitement
+ définir sa structure logique en insérant des codes appropriés...
+ Lors de l'écriture de votre document, vous devez vous préoccuper de sa
+ structure logique, et non pas de son apparence.
+\begin_inset Quotes frd
+\end_inset 
+
+\begin_inset Info Indication:
+C'est une citation (QUOTE)
+\end_inset 
+
+
+\layout Standard
+
+1.2 Pourquoi LyX est meilleur
+\layout Standard
+
+LyX peut être profitable à un plus grand nombre d'utilisateurs que LaTeX.
+ Il est beaucoup plus facile à apprendre, car vous n'avez pas à connaître
+ LaTeX, qui est pratiquement un langage de programmation.
+ LyX est en bien des points comparable à d'autres traitements de texte 
+\begin_inset Quotes fld
+\end_inset 
+
+What you see is what you get
+\begin_inset Quotes frd
+\end_inset 
+
+ (WYSIWYG), excepté que LyX est plutôt 
+\begin_inset Quotes fld
+\end_inset 
+
+What you see is what you mean
+\begin_inset Quotes frd
+\end_inset 
+
+ (WYSIWYM).
+ LyX combine donc le confort des autres traitements de texte, et la puissance
+ de LaTeX.
+ C'est une bonne chose.
+ De plus, le format de fichier est indépendant du système.
+ Et pour finir, c'est un logiciel LIBRE! 
+\layout Standard
+
+2.
+ Fonctionnalités de LyX
+\layout Standard
+
+LyX possède un bon nombre de fonctionnalités qui facilitent l'écriture.
+ ( Après tout, quelle autre raison pourrait vous le faire utiliser? 
+\begin_inset Info Indication:
+Cette parenthèse serait bien mieux en "Note de bas de page"
+\end_inset 
+
+) Je NE RÉSISTE PLUS 
+\begin_inset Info Indication:
+A mettre en "Italique" (ou en "Evidence") plut^ot qu'en majuscules!
+\end_inset 
+
+ à l'envie de vous les présenter.
+ En voici quelques une.
+\layout Standard
+
+* LyX gère les marges et la numérotation des notes de bas de page pour vous.
+\layout Standard
+
+* L'écriture de formules mathématiques est un jeu d'enfant avec LyX.
+\layout Standard
+
+Voir Section 1.2, page 1 
+\begin_inset Info Indication:
+Cette "Référence Croisée" ne devrait pas ^etre écrite en dur.
+Que se passe-t-il si l'on change la numèrotation des sections?
+\end_inset 
+
+ pour une discussion plus approfondie sur les avantages de LyX par rapport
+ aux autres traitements de texte.
+\layout Standard
+
+3.
+ Tentatives maladroites de mieux utiliser LyX
+\layout Standard
+
+J'ai écrit un programme ces derniers jours.
+ Le voici :
+\layout Standard
+
+5 REMARK MON SUPER PROGRAMME
+\layout Standard
+
+10 PRINT 
+\begin_inset Quotes eld
+\end_inset 
+
+JE SUIS SUPER!
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout Standard
+
+20 GOTO 10
+\layout Standard
+
+
+\begin_inset Info Indication: C'est du source de programme ("CODE")
+\end_inset 
+
+
+\layout Standard
+
+Après cette pensée hautement scientifique, je me suis senti l'âme d'un poète.
+ J'ai donc écrit ceci
+\layout Standard
+
+LyX est vraiment un extraordinaire
+\layout Standard
+
+Outil de composition et de traitement de texte
+\layout Standard
+
+Il fait gagner tellement de temps
+\layout Standard
+
+
+\begin_inset Info Indication:
+Pas terrible comme poésie! Mais ce sont quand m^eme
+des vers ("VERSE").
+\end_inset 
+
+
+\layout Standard
+
+4.
+ Les maths 
+\begin_inset Info Indication:
+Les mathématiques qui suivent devraient ^etre traitées
+en "Mode Mathématique":
+\end_inset 
+
+
+\layout Standard
+
+Ma formule préférée est la résolution d'une équation du second degré.
+ Si ax^2+bx+c=0 (eq.1), alors x= -b + ou moins la racine carrée de b^2-4ac
+ le tout divisé par 2a (eq.
+ 2).
+\layout Standard
+
+Une autre favorite, la base du calcul différentiel: f'(x) est définie comme
+ la limite, quand deltax tend vers zéro, de l'expression f(x+deltax) - f(x)
+ divisé par deltax (eq.
+ 3).
+\layout Standard
+
+------------------------------------------------
+\layout Standard
+
+REFERENCES
+\layout Standard
+
+[1] Lamport, Leslie.
+ LaTeX: A Document Preparation System.
+ Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+\the_end
diff --git a/lib/examples/exemple_lyxifie.lyx b/lib/examples/exemple_lyxifie.lyx
new file mode 100644 (file)
index 0000000..449b7d8
--- /dev/null
@@ -0,0 +1,275 @@
+#This file was created by <phb> Tue Apr 13 00:29:05 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language french
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize a4paper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language french
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Title
+
+CECI EST LE TITRE DU DOCUMENT
+\layout Author
+
+par Fée LyX
+\layout Date
+
+12 Juin 1972
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset 
+
+
+\layout Section
+
+Philosophie Générale
+\layout Standard
+
+La philosophie générale de LyX est de vous laisser vous concentrer sur le
+ contenu et non pas sur la forme de vos écrits.
+\layout Subsection
+
+Comment LyX le fait
+\layout Standard
+
+LyX utilise LaTeX, un système de préparation de documents conçu par Leslie
+ Lamport en 1985.
+ Il a été construit, à son tour, à partir d'un langage de composition, appelé
+ TeX, créé par Donald Knuth en 1984.
+ LaTeX est conçu autour d'une philosophie similaire à celle de LyX.
+ Leslie Lamport disait lui-même (voir référence 
+\begin_inset LatexCommand \cite{lamport}
+
+\end_inset 
+
+):
+\layout Quote
+
+Le but de la typographie est d'aider le lecteur à comprendre l'idée de l'auteur.
+ Pour qu'un document soit facile à lire, sa structure visuelle doit refléter
+ sa structure logique.
+ Les citations et les sources de programmes, étant, logiquement parlant,
+ des éléments structurels différents, doivent être visuellement différents
+ les uns les autres...
+ Comme LaTeX ne peut pas comprendre votre prose, vous devez explicitement
+ définir sa structure logique en insérant des codes appropriés...
+ Lors de l'écriture de votre document, vous devez vous préoccuper de sa
+ structure logique, et non pas de son apparence.
+\layout Subsection
+
+Pourquoi LyX est meilleur
+\layout Standard
+
+
+\begin_inset LatexCommand \label{sec:lyxmeilleur}
+
+\end_inset 
+
+LyX peut être profitable à un plus grand nombre d'utilisateurs que LaTeX.
+ Il est beaucoup plus facile à apprendre, car vous n'avez pas à connaître
+ LaTeX, qui est pratiquement un langage de programmation.
+ LyX est en bien des points comparable à d'autres traitements de texte 
+\begin_inset Quotes fld
+\end_inset 
+
+What you see is what you get
+\begin_inset Quotes frd
+\end_inset 
+
+ (WYSIWYG), excepté que LyX est plutôt 
+\begin_inset Quotes fld
+\end_inset 
+
+What you see is what you mean
+\begin_inset Quotes frd
+\end_inset 
+
+ (WYSIWYM).
+ LyX combine donc le confort des autres traitements de texte, et la puissance
+ de LaTeX.
+ C'est une bonne chose.
+ De plus, le format de fichier est indépendant du système.
+ Et pour finir, c'est un logiciel LIBRE! 
+\layout Section
+
+Fonctionnalités de LyX
+\layout Standard
+
+LyX possède un bon nombre de fonctionnalités qui facilitent l'écriture.
+\begin_float footnote 
+\layout Standard
+
+Après tout, quelle autre raison pourrait vous le faire utiliser?
+\end_float 
+ Je 
+\shape italic 
+ne résiste plus
+\shape default 
+ à l'envie de vous les présenter.
+ En voici quelques une.
+\layout Itemize
+
+LyX gère les marges et la numérotation des notes de bas de page pour vous.
+\layout Itemize
+
+L'écriture de formules mathématiques est un jeu d'enfant avec LyX.
+\layout Standard
+
+Voir Section 
+\begin_inset LatexCommand \ref{sec:lyxmeilleur}
+
+\end_inset 
+
+, page 
+\begin_inset LatexCommand \pageref{sec:lyxmeilleur}
+
+\end_inset 
+
+ pour une discussion plus approfondie sur les avantages de LyX par rapport
+ aux autres traitements de texte.
+\layout Section
+
+Tentatives maladroites de mieux utiliser LyX
+\layout Standard
+
+J'ai écrit un programme ces derniers jours.
+ Le voici :
+\layout LyX-Code
+
+5 REMARK MON SUPER PROGRAMME
+\layout LyX-Code
+
+10 PRINT 
+\begin_inset Quotes eld
+\end_inset 
+
+JE SUIS SUPER!
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout LyX-Code
+
+20 GOTO 10
+\layout Standard
+
+Après cette pensée hautement scientifique, je me suis senti l'âme d'un poète.
+ J'ai donc écrit ceci
+\layout Verse
+
+LyX est vraiment un extraordinaire
+\newline 
+Outil de composition et de traitement de texte
+\newline 
+Il fait gagner tellement de temps
+\layout Section
+
+Les maths
+\layout Standard
+
+Ma formule préférée est la résolution d'une équation du second degré.
+\layout Standard
+
+Si 
+\begin_inset Formula \( ax^{2}+bx+c=0 \)
+\end_inset 
+
+ (eq.1), 
+\layout Standard
+
+alors 
+\begin_inset Formula \( x=\frac{-b\pm \sqrt{b^{2}-4ac}}{2a} \)
+\end_inset 
+
+ (eq.
+ 2).
+\layout Standard
+
+Une autre favorite, la base du calcul différentiel: 
+\layout Standard
+
+
+\begin_inset Formula \( f'(x)\equiv \lim _{\Delta x\rightarrow 0}\frac{f(x+\Delta x)-f(x)}{\Delta x} \)
+\end_inset 
+
+ (eq.
+ 3).
+\layout Section
+
+Notes
+\layout Standard
+
+Quelques notes à propos de la LyXification de ce fichier:
+\layout Itemize
+
+J'ai pu éliminer les lignes de tirets.
+ Elles n'étaient là que pour séparer le titre et les références du reste
+ du document.
+ LyX (ou LaTeX) en sait assez pour les séparer avec de l'espace.
+\layout Itemize
+
+Je ne me suis pas ennuyé à mettre les équations mathématiques en mode affichage.
+ Je n'ai pas non plus utilisé le mode de numérotation automatique des équations
+ de LyX parce qu'il n'est pas décrit dans le 
+\emph on 
+Manuel d'Apprentissage
+\emph default 
+.
+\layout Itemize
+
+Je n'ai pas eut à taper le mot 
+\begin_inset Quotes fld
+\end_inset 
+
+References
+\begin_inset Quotes frd
+\end_inset 
+
+ ci-dessous.
+ LyX le met automatiquement (ou le mot 
+\begin_inset Quotes fld
+\end_inset 
+
+Bibliography,
+\begin_inset Quotes frd
+\end_inset 
+
+ en fonction de la classe du document) lorsque vous sélectionnez l'environnement
+\family sans 
+Bibliography
+\family default 
+.
+\layout Bibliography
+\bibitem {lamport}
+
+Lamport, Leslie.
+\emph on 
+LaTeX: A Document Preparation System.
+
+\emph default 
+ Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+\the_end
diff --git a/lib/examples/fr_splash.lyx b/lib/examples/fr_splash.lyx
new file mode 100644 (file)
index 0000000..ec52af9
--- /dev/null
@@ -0,0 +1,155 @@
+#This file was created by <chretien> Tue Apr 27 17:38:30 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language french
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language french
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle empty
+
+\layout Title
+
+Bienvenue dans l'univers de LyX!
+\layout Section*
+
+Le Top N des choses à connaître pour utiliser LyX
+\layout Enumerate
+
+LyX est fourni avec une excellente documentation --- servez-vous-en s'il
+ vous plaît! Vous pouvez commencer par 
+\family sans 
+\bar under 
+A
+\bar default 
+ide
+\bar under 
+\SpecialChar \menuseparator
+I
+\bar default 
+ntroduction
+\family default 
+, qui donne une brève description de la documentation.
+ Vous pourrez ensuite apprendre à vous servir de LyX avec 
+\family sans 
+\bar under 
+A
+\bar default 
+ide\SpecialChar \menuseparator
+Manuel
+\protected_separator 
+d'Apprentissage.
+\family default 
+Seul le titre des autres documents est traduit en français pour le moment.
+\layout Enumerate
+
+LyX est ce qu'on appelle un 
+\begin_inset Quotes fld
+\end_inset 
+
+constructeur de documents
+\begin_inset Quotes frd
+\end_inset 
+
+.
+ Par sa conception, il se distingue des traitements de texte ordinaires
+ --- en ce sens qu'il facilite l'écriture des documents.
+ Mais la distinction est minime, ne vous inquiétez pas.
+ La documentation est là pour faire toute la lumière la-dessus
+\begin_float footnote 
+\layout Standard
+
+Avons-nous déjà mentionné que vous devez lire la documentation? 
+\end_float 
+.
+\layout Enumerate
+
+Les résultats de mise en page de LyX sont très esthétiques! Sélectionnez
+\family sans 
+\bar under 
+F
+\bar default 
+ichier\SpecialChar \menuseparator
+Visualisez
+\protected_separator 
+
+\bar under 
+d
+\bar default 
+vi
+\family default 
+ pour vous en convaincre.
+\layout Enumerate
+
+Oui! LyX est capable d'imiter (presque) toutes les fonctionnalités de LaTeX.
+ Et de nouveau Oui! LyX sait lire les fichiers LaTeX.
+ Les utilisateurs de LaTeX peuvent survoler le 
+\emph on 
+Manuel
+\emph default 
+\emph on 
+d'Apprentissage
+\emph default 
+ et passer au chapitre 
+\begin_inset Quotes fld
+\end_inset 
+
+LyX pour les connaisseurs de LaTeX
+\begin_inset Quotes frd
+\end_inset 
+
+.
+ (Pour tous les autres: ne vous inquiétez pas, vous n'avez pas besoin de
+ connaître LaTeX pour vous servir de LyX).
+\layout Enumerate
+
+LyX possède de nombreuses fonctionnalités pour ceux qui lisent ou écrivent
+ d'autres langages que l'anglais.
+ De plus, le clavier, la barre d'outils et beaucoup d'autres caractéristiques
+ sont pleinement configurables (pour la plupart en éditant votre fichier
+\family typewriter 
+lyxrc
+\family default 
+).
+ Voir le fichier 
+\family sans 
+\bar under 
+A
+\bar default 
+ide
+\bar under 
+\SpecialChar \menuseparator
+P
+\bar default 
+ersonnalisation 
+\family default 
+pour les détails.
+\layout Enumerate
+
+Le site web de LyX est 
+\family typewriter 
+www.lyx.org
+\family default 
+.
+ Vous pouvez y piocher des informations, souscrire à l'une ou l'autre des
+ listes de distributions, faire le tour de LyX (par l'image), et plus encore.
+\the_end
diff --git a/lib/examples/it_splash.lyx b/lib/examples/it_splash.lyx
new file mode 100644 (file)
index 0000000..a19dc74
--- /dev/null
@@ -0,0 +1,149 @@
+#This file was created by <root> Thu Jun 24 15:22:34 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Benvenuti in LyX!
+\layout Section*
+
+Le prime n cose che dovete sapere quando usate LyX
+\layout Enumerate
+
+LyX è accompagnato da una eccellente documentazione---per favore, consultatela!
+ Iniziate da 
+\family sans 
+\bar under 
+A
+\bar default 
+iuto->
+\bar under 
+I
+\bar default 
+ntroduzione
+\family default 
+, il quale vi fornirà una breve introduzione alla documentazione.
+ Quindi imparate ad usare LyX mediante il documento 
+\family sans 
+\bar under 
+A
+\bar default 
+iuto->
+\bar under 
+T
+\bar default 
+utorial
+\family default 
+.
+\layout Enumerate
+
+LyX è ciò che noi chiamiamo un 
+\begin_inset Quotes eld
+\end_inset 
+
+processore di documenti.
+\begin_inset Quotes erd
+\end_inset 
+
+ Per come è stato pensato, esso si differenzia dai comuni programmi di videoscri
+ttura---secondo una prospettiva che rende più semplice la scrittura dei
+ documenti.
+ In realtà si tratta di piccole differenze, quindi non vi spaventate.
+ La documentazione vi renderà tutto più chiaro
+\begin_float footnote 
+\layout Standard
+
+Abbiamo già ribadito il fatto che dovreste leggere la documentazione?
+\end_float 
+.
+\layout Enumerate
+
+I documenti scritti con LyX sono, in termini visivi, davvero notevoli! Provate
+ adesso ad invocare 
+\family sans 
+\bar under 
+F
+\bar default 
+ile->Anteprima
+\protected_separator 
+
+\bar under 
+D
+\bar default 
+VI
+\family default 
+ per constatrlo con i vostri occhi.
+\layout Enumerate
+
+Ebbene sì, LyX è in grado di realizzare (quasi) tutte le funzionalità del
+ LaTeX, potendo anche importare i file LaTeX.
+ Gli utilizzatori esperti di LaTeX potrebbero scorrere velocemente la restante
+ parte del 
+\emph on 
+Tutorial
+\emph default 
+, soffermandosi sul capitolo 
+\begin_inset Quotes eld
+\end_inset 
+
+LyX per gli Utilizzatori di LaTeX.
+ (Per tutti gli altri: non preoccupatevi, non avete bisogno di conoscere
+ LaTeX per usare LyX.) 
+\layout Enumerate
+
+LyX possiede un mucchio di caratteristiche per tutti coloro che leggono
+ o scrivono in una lingua diversa dall'Inglese.
+ In più, le funzioni attivabili mediante i tasti, la barra degli strumenti,
+ e molte altre caratteristiche sono fortemente configurabili (la maggior
+ parte editando il vostro file 
+\family typewriter 
+lyxrc
+\family default 
+).
+ Leggete 
+\family sans 
+\bar under 
+A
+\bar default 
+iuto->
+\bar under 
+P
+\bar default 
+ersonalizzazione
+\family default 
+ per ulteriori dettagli.
+\layout Enumerate
+
+La home page di LyX si trova all'indirizzo 
+\family typewriter 
+www.lyx.org
+\family default 
+.
+ Consultatela per informazioni su LyX, per iscrivervi alle mailing list(s)
+ sul LyX , per effettuare il 
+\emph on 
+Tour Grafico di LyX
+\emph default 
+ e per altro ancora.
+\the_end
diff --git a/lib/examples/landslide.lyx b/lib/examples/landslide.lyx
new file mode 100644 (file)
index 0000000..c03f4c9
--- /dev/null
@@ -0,0 +1,135 @@
+#This file was created by <lasgoutt> Wed Mar 25 16:47:59 1998
+#LyX 0.12 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass foils
+\options dvips
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize a4paper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation landscape
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation skip
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle foilheadings
+
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+MyLogo{HUT/ECDL Kimmo Koli 
+\backslash 
+today}
+\layout ShortFoilhead
+\line_bottom 
+Landscape slide example with a figure
+\layout Standard
+\pextra_type 2 \pextra_alignment 1 \pextra_start_minipage 1 \pextra_widthp 52
+
+It is possible to place text beside a figure (clipart platypus in this example)
+ using the minipage enviroment
+\layout Itemize
+\pextra_type 2 \pextra_alignment 1 \pextra_widthp 52
+
+The text can contain also item lists
+\layout TickList
+\pextra_type 2 \pextra_alignment 1 \pextra_widthp 52
+
+Also other lists like tick lists 
+\layout CrossList
+\pextra_type 2 \pextra_alignment 0 \pextra_widthp 52
+
+and cross lists can be entered
+\layout Standard
+\added_space_top 0.3cm \added_space_bottom 0.3cm \align center \pextra_type 2 \pextra_alignment 1 \pextra_hfill 1 \pextra_start_minipage 1 \pextra_widthp 45
+
+
+\begin_inset Figure size 283 208
+file ../clipart/platypus.eps
+width 1 10
+flags 1
+
+\end_inset 
+
+
+\layout Standard
+
+You can also add more text below below the minipages as you may have guessed.
+\layout ShortFoilhead
+\line_bottom 
+How it was done
+\layout Itemize
+
+
+\family roman 
+Just select with the mouse the text paragraphs you want to mark as minipages
+ and then select
+\emph on 
+\family default 
+\emph default 
+Layout->Paragraph:ExtraOpt
+\family roman 
+ and press the 
+\family default 
+Minipage
+\family roman 
+ button and add a minipage width.
+\layout Itemize
+
+
+\family roman 
+Then put cursor to the paragraph containing the figure and mark it also
+ a minipage, but add also the 
+\family default 
+HFill between the Minipage paragraphs
+\family roman 
+ and
+\emph on 
+\family default 
+\emph default 
+Start a new Minipage
+\family roman 
+ options
+\layout Itemize
+
+
+\family roman 
+You can also change the alignment in this
+\family default 
+ Extra options
+\family roman 
+ menu to middle for all minipage paragraphs for a better result.
+\layout Itemize
+
+
+\family roman 
+Somehow (correct this if you know how) the figure size set by the 
+\family default 
+% of the page
+\family roman 
+ doesn't scale the picture right but still the 
+\family default 
+cm
+\family roman 
+ and 
+\family default 
+inches
+\family roman 
+ entries will work.
+\the_end
diff --git a/lib/examples/nl_splash.lyx b/lib/examples/nl_splash.lyx
new file mode 100644 (file)
index 0000000..e7b3116
--- /dev/null
@@ -0,0 +1,147 @@
+#This file was created by <maarten> Fri Jul 23 14:44:46 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language dutch
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation skip
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Welkom bij LyX!
+\layout Section*
+
+De Belangrijkste N Dingen die je moet weten om LyX te gebruiken
+\layout Enumerate
+
+LyX komt met zeer goede documentatie---gebruik die! De documentatie is momenteel
+ nog niet in het Nederlands vertaald maar wordt in het Engels meegeleverd.
+ Begin met 
+\family sans 
+\bar under 
+H
+\bar default 
+elp->
+\bar under 
+I
+\bar default 
+ntroduction
+\family default 
+, dat je een korte introductie tot de documentatie geeft.
+ Leer daarna LyX te gebruiken met 
+\family sans 
+\bar under 
+H
+\bar default 
+elp->
+\bar under 
+T
+\bar default 
+utorial
+\family default 
+.
+\layout Enumerate
+
+LyX noemen we een 
+\begin_inset Quotes eld
+\end_inset 
+
+document verwerker.
+\begin_inset Quotes erd
+\end_inset 
+
+ LyX is bewust anders ontworpen dan normale tekstverwerkers---met LyX wordt
+ het schrijven van documenten makkelijker.
+ Maar alleen een beetje anders, dus geen reden om bang te zijn.
+ De documentatie zal het allemaal duidelijk maken
+\begin_float footnote 
+\layout Standard
+
+Hebben we al verteld dat je de documentatie moet lezen?
+\end_float 
+.
+\layout Enumerate
+
+Het resultaat van LyX ziet er goed uit! Selecteer 
+\family sans 
+\bar under 
+F
+\bar default 
+ile->View
+\protected_separator 
+
+\bar under 
+d
+\bar default 
+vi
+\family default 
+ nu om het zelf te zien.
+\layout Enumerate
+
+Ja, LyX kan (bijna) alle LaTeX functionaliteit nabootsen.
+ En ja, LyX kan LaTeX bestanden importeren.
+ Ervaren LaTeX gebruikers kunnen de rest van de 
+\emph on 
+Tutorial
+\emph default 
+ overslaan en daarna het hoofdstuk 
+\begin_inset Quotes eld
+\end_inset 
+
+LyX for LaTeX Users
+\begin_inset Quotes erd
+\end_inset 
+
+ lezen.
+ (Alle anderen: maak je niet druk: je hoeft LaTeX niet te kennen om LyX
+ te gebruiken.) 
+\layout Enumerate
+
+LyX heeft veel mogelijkheden voor mensen die lezen en schrijven in een andere
+ taal dan Engels.
+ Daarnaast zijn de bindingen voor het toetsenbord, de knoppenbalk en veel
+ andere zaken uiterst configureerbaar.
+ (Meestal door je 
+\family typewriter 
+lyxrc
+\family default 
+ bestand te bewerken).
+ Zie 
+\family sans 
+\bar under 
+H
+\bar default 
+elp->
+\bar under 
+C
+\bar default 
+ustomization
+\family default 
+ voor de details.
+\layout Enumerate
+
+De LyX homepage is 
+\family typewriter 
+www.lyx.org
+\family default 
+.
+ Leer over LyX, abonneer op LyX email lijst(en), doe de LyX Graphical Tour,
+ en meer.
+\the_end
diff --git a/lib/examples/noweb2lyx.lyx b/lib/examples/noweb2lyx.lyx
new file mode 100644 (file)
index 0000000..8b2d4b2
--- /dev/null
@@ -0,0 +1,1358 @@
+#This file was created by <kayvan> Sun May  2 15:56:35 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass literate-article
+\begin_preamble
+%
+% This relaxes the noweb constraint that chunks are
+% never broken across pages.
+%
+% This is from the noweb FAQ
+%
+\def\nwendcode{\endtrivlist \endgroup}
+\let\nwdocspar=\smallbreak
+\end_preamble
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+
+\noun on 
+noweb2lyx
+\layout Author
+
+Kayvan A.
+ Sylvan <kayvan@sylvan.com>
+\layout Date
+
+May 6, 1999
+\layout Abstract
+
+This document describes and implements a perl script for importing noweb
+ files into LyX
+\layout Standard
+\pagebreak_bottom 
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset 
+
+
+\layout Section
+
+Introduction
+\layout Standard
+
+Since version 1.0.1, LyX now supports Literate Programming using 
+\noun on 
+noweb
+\noun default 
+.
+ This addition to LyX made it very pleasant to write programs in the literate
+ style (like this one).
+ In addition to being able to write new literate programs, it would be quite
+ useful if old 
+\noun on 
+noweb
+\noun default 
+ code could be imported into LyX in some fashion.
+ That's where this program comes in.
+\layout Standard
+
+The purpose of 
+\noun on 
+noweb2lyx
+\noun default 
+ is to convert a 
+\noun on 
+noweb
+\noun default 
+ file to LyX.
+\layout Scrap
+
+<<noweb2lyx.in>>=
+\newline 
+#!@PERL@
+\newline 
+# 
+\newline 
+# Copyright (C) 1999 Kayvan A.
+ Sylvan <kayvan@sylvan.com>
+\newline 
+#
+\protected_separator 
+You are free to use and modify this code under the terms of
+\newline 
+# the GNU General Public Licence version 2 or later.
+\newline 
+#
+\newline 
+#
+\protected_separator 
+Written with assistance from:
+\newline 
+# 
+\protected_separator 
+ Edmar Wienskoski Jr.
+ <edmar-w-jr@technologist.com>
+\newline 
+# 
+\protected_separator 
+ Amir Karger <karger@post.harvard.edu>
+\newline 
+#
+\newline 
+# $Id: noweb2lyx.lyx,v 1.1 1999/09/27 18:44:32 larsbj Exp $
+\newline 
+#
+\newline 
+# NOTE: This file was automatically generated from noweb2lyx.lyx using noweb.
+\newline 
+#
+\newline 
+<<Setup variables from user supplied args>>
+\newline 
+<<Subroutines>>
+\newline 
+<<Convert noweb to LyX>>
+\newline 
+@
+\layout Section
+
+The Noweb file defined
+\layout Standard
+
+A 
+\noun on 
+noweb
+\noun default 
+ file is a collection of documentation and code chunks.
+ Documentation chunks simply start with an ``@'' and have no name:
+\layout LyX-Code
+
+@ Here is some documentation.
+\newline 
+We can do arbitrary LaTeX code here.
+\newline 
+[...
+ blah blah blah ...]
+\layout Standard
+
+Code chunks look like this:
+\layout LyX-Code
+
+<<Name of chunk here>>=
+\newline 
+{...
+ code for the chunk goes here ...}
+\newline 
+@ 
+\layout Standard
+
+The ``@'' is a necessary delimiter to end the code chunk.
+ The other form that the ``@'' line takes is as follows:
+\layout LyX-Code
+
+<<Name of chunk here>>=
+\newline 
+{...
+ code for the chunk ...}
+\newline 
+@ %def identifier1 identifier2
+\layout Standard
+
+In the latter form, we are declaring to 
+\noun on 
+noweb
+\noun default 
+ that this code chunk defines identifier1, identifier2, etc.
+\layout Standard
+
+When first tackling this problem, I spoke with members of the LyX team that
+ knew about the literate programming extensions and reLyX (the LaTeX importing
+ code).
+\layout Standard
+
+One of the first ideas was to extend the reLyX code to understand the 
+\noun on 
+noweb
+\noun default 
+ code chunks.
+ This proved to be too hard and presents other problems
+\begin_float footnote 
+\layout Standard
+
+Not the least of these problems is the fact that << is a quote in French.
+\end_float 
+.
+ On the other hand, it turns out that reLyX contains a very useful literal
+ quoting mechanism.
+ If the input file contains the construct
+\layout LyX-Code
+
+
+\backslash 
+begin{reLyXskip}
+\newline 
+{...
+ LaTeX stuff ...}
+\newline 
+
+\backslash 
+end{reLyXskip}
+\layout Standard
+
+then reLyX will copy the surrounded code to the output file verbatim.
+ Given this, the first part of the translation is easy; we simply have to
+ copy the code chunks into an intermediate file that surrounds them with
+\family typewriter 
+
+\backslash 
+begin{reLyXskip}
+\family default 
+ and 
+\family typewriter 
+
+\backslash 
+end{reLyXskip}
+\family default 
+.
+\layout Standard
+
+Once reLyX is done with the input file, the problem is reduced to changing
+ the code chunks from LyX's LaTeX layout to the Scrap layout.
+\layout Standard
+
+There is one final constraint on 
+\noun on 
+noweb2lyx
+\noun default 
+.
+ We want to be able to run it as a simple pre-processor and post-processor
+ from within reLyX.
+ We can accomplish this by setting the flags 
+\latex latex 
+[[pre_only]]
+\latex default 
+ and 
+\latex latex 
+[[post_only]]
+\latex default 
+ before we reach the main conversion code.
+\layout Standard
+
+With all that preamble out of the way, we now have the basic high-level
+ outline for our code:
+\layout Scrap
+
+<<Convert noweb to LyX>>=
+\newline 
+if (!$post_only) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+<<Transform noweb for reLyX>>
+\newline 
+}
+\newline 
+if ((!$pre_only) && (!$post_only)) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+<<Run reLyX on intermediate file>>
+\newline 
+}
+\newline 
+if (!$pre_only) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+<<Fix up LyX file>>
+\newline 
+}
+\newline 
+<<Clean up>>
+\newline 
+@
+\layout Section
+
+Making a file that reLyX can process
+\layout Standard
+
+In this section, we present the code that performs the task of creating
+ the intermediate file that reLyX can process, using the algorithm that
+ we just outlined.
+ This algorithm is outlined in the code that follows:
+\layout Scrap
+
+<<Transform noweb for reLyX>>=
+\newline 
+<<Setup INPUT and OUTPUT>>
+\newline 
+inputline: while(<INPUT>)
+\newline 
+{
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+if (/^
+\backslash 
+s*
+\backslash 
+<
+\backslash 
+<.*
+\backslash 
+>
+\backslash 
+>=/) { # Beginning of a noweb scrap
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+<<Read in and output the noweb code chunk>>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+} elsif (/^@
+\backslash 
+s+(.*)/) { # Beginning of a documentation chunk
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+print OUTPUT $1; # We do not need the ``@'' part
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+} elsif (/
+\backslash 
+[
+\backslash 
+[.+
+\backslash 
+]
+\backslash 
+]/) { # noweb quoted code
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+<<Perform special input quoting of [[var]]>>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+} else {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+print OUTPUT; # Just let the line pass through
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+}
+\newline 
+}
+\newline 
+<<Close INPUT and OUTPUT>>
+\newline 
+@
+\layout Standard
+
+In the code above, we do some pre-processing of the noweb ``[[...]]'' construct.
+ This avoids some problems with reLyX confusing lists composed of ``[[...]]''
+ constructs.
+\layout Scrap
+
+<<Perform special input quoting of [[var]]>>=
+\newline 
+s/
+\backslash 
+[
+\backslash 
+[.+?
+\backslash 
+]{2,}/{$&}/g;
+\newline 
+print OUTPUT;
+\newline 
+@
+\layout Standard
+
+While reading in the 
+\latex latex 
+[[INPUT]]
+\latex default 
+ file, once we have identified a 
+\noun on 
+noweb
+\noun default 
+ code chunk, we transform it into a form that is usable by reLyX.
+\layout Scrap
+
+<<Read in and output the noweb code chunk>>= 
+\newline 
+<<Save the beginning of the scrap to savedScrap>>
+\newline 
+<<Concatenate the rest of the scrap>>
+\newline 
+<<print out the scrap in a reLyXskip block>>
+\newline 
+@
+\layout Subsection
+
+File input and output for the pre-processing step
+\layout Standard
+
+In 
+\noun on 
+noweb2lyx
+\noun default 
+, we will use 
+\latex latex 
+[[INPUT]]
+\latex default 
+ and 
+\latex latex 
+[[OUTPUT]]
+\latex default 
+ to read and write files.
+ In the code fragment above, we need to read from the input file and write
+ to a file that will be later transformed by reLyX.
+ If we are being called only to pre-process the input file, then there is
+ no need to create a temporary file.
+\layout Scrap
+
+<<Setup INPUT and OUTPUT>>=
+\newline 
+if ($pre_only) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+&setup_files($input_file, $output_file);
+\newline 
+} else {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+$relyx_file = "temp$$";
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+&setup_files($input_file, $relyx_file);
+\newline 
+}
+\newline 
+@
+\layout Standard
+
+This code uses a small perl subroutine, 
+\latex latex 
+[[setup_files]]
+\latex default 
+, which we define below:
+\layout Scrap
+
+<<Subroutines>>=
+\newline 
+sub setup_files {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+my($in, $out) = @_;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+open(INPUT, "<$in") || die "Can not read $in: $!
+\backslash 
+n";
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+open(OUTPUT, ">$out") || die "Can not write $out: $!
+\backslash 
+n";
+\newline 
+}
+\newline 
+@ %def setup_files 
+\protected_separator 
+
+\protected_separator 
+
+\layout Subsection
+
+Reading in the 
+\noun on 
+noweb
+\noun default 
+ scrap
+\layout Standard
+
+After we see the beginning of the scrap, we need to read in and save the
+ rest of the scrap for output.
+\layout Scrap
+
+<<Save the beginning of the scrap to savedScrap>>=
+\newline 
+$savedScrap = $_;
+\newline 
+$endLine = "";
+\newline 
+@
+\layout Scrap
+
+<<Concatenate the rest of the scrap>>=
+\newline 
+scrapline: while (<INPUT>) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+last scrapline if /^@
+\backslash 
+s+/;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+$savedScrap .= $_;
+\newline 
+};
+\newline 
+switch: {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+if (/^@
+\backslash 
+s+$/) {$savedScrap .= $_; last switch; }
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+if (/^@
+\backslash 
+s+%def.*$/) {$savedScrap .= $_; last switch; }
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+if (/^@
+\backslash 
+s+(.*)$/) {$savedScrap .= "@
+\backslash 
+n"; $endLine = "$1
+\backslash 
+n"; }
+\newline 
+}
+\newline 
+@
+\layout Subsection
+
+Printing out the scrap
+\layout Standard
+
+The final piece of the first pass of the conversion is done by this code.
+\layout Scrap
+
+<<print out the scrap in a reLyXskip block>>=
+\newline 
+print OUTPUT "
+\backslash 
+
+\backslash 
+begin{reLyXskip}
+\backslash 
+n";
+\newline 
+print OUTPUT $savedScrap;
+\newline 
+print OUTPUT "
+\backslash 
+
+\backslash 
+end{reLyXskip}
+\backslash 
+n
+\backslash 
+n";
+\newline 
+print OUTPUT "$endLine";
+\newline 
+@
+\layout Standard
+
+Finally, we need to close the 
+\latex latex 
+[[INPUT]]
+\latex default 
+ and 
+\latex latex 
+[[OUTPUT]]
+\latex default 
+ files.
+\layout Scrap
+
+<<Close INPUT and OUTPUT>>=
+\newline 
+close(INPUT);
+\newline 
+close(OUTPUT);
+\newline 
+@
+\layout Section
+
+Running reLyX
+\layout Standard
+
+In this section, we describe and implement the code that runs reLyX on the
+ intermediate file 
+\latex latex 
+[[relyx_file]]
+\latex default 
+.
+\layout Subsection
+
+Selecting the document class
+\layout Standard
+
+In order to run reLyX, we need to know the article class of the input document
+ (to choose the corresponding literate document layout).
+ For this, we need to parse the intermediate file.
+\layout Scrap
+
+<<Run reLyX on intermediate file>>=
+\newline 
+<<Parse for document class>>
+\newline 
+<<Run reLyX with document class>>
+\newline 
+@
+\layout Standard
+
+In the code below, you'll see a strange regular expression to search for
+ the document class.
+ The reason for this kludge is that without it, we can't run 
+\noun on 
+noweb2lyx
+\noun default 
+ on the 
+\emph on 
+noweb2lyx.nw
+\emph default 
+ file that is generated by LyX
+\begin_float footnote 
+\layout Standard
+
+reLyX searches for 
+\backslash 
+
+\backslash 
+doc
+\latex latex 
+{}
+\latex default 
+ument
+\latex latex 
+{}
+\latex default 
+class and gets confused, so we have to obfuscate it slightly.
+\end_float 
+.
+ With the regular expression as it is, we can actually run 
+\noun on 
+noweb2lyx
+\noun default 
+ on itself and a produce a quite reasonable LyX file.
+\layout Scrap
+
+<<Parse for document class>>=
+\newline 
+open(INPUT, "<$relyx_file") ||
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+die "Can not read $relyx_file: $!
+\backslash 
+n";
+\newline 
+$class = "article"; # default if none found
+\newline 
+parse: while(<INPUT>) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+if (/
+\backslash 
+
+\backslash 
+docu[m]entclass{(.*)}/) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+$class = $1;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+last parse;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+}
+\newline 
+}
+\newline 
+close(INPUT);
+\newline 
+@
+\layout Subsection
+
+Running reLyX with the corresponding literate document layout
+\layout Standard
+
+Now that we know what the document class ought to be, we do:
+\layout Scrap
+
+<<Run reLyX with document class>>= 
+\newline 
+$doc_class = "literate-" .
+ $class;
+\newline 
+die "reLyX returned non-zero: $!
+\backslash 
+n"
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+if (system("reLyX -c $doc_class $relyx_file"));
+\newline 
+@
+\layout Standard
+
+reLyX performs the main bulk of the translation work.
+ Note that if the ``literate-
+\emph on 
+class
+\emph default 
+'' document layout is not found, then reLyX will fail with an error.
+ In that case, you may need to modify your 
+\noun on 
+noweb
+\noun default 
+ input file to a supported document type.
+\layout Section
+
+Fixing the reLyX output
+\layout Standard
+
+We need to perform some post-processing of what reLyX produces in order
+ to have the best output for our literate document.
+ The outline of the post-processing steps are:
+\layout Scrap
+
+<<Fix up LyX file>>=
+\newline 
+<<Setup INPUT and OUTPUT for the final output>>
+\newline 
+line: while(<INPUT>)
+\newline 
+{
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+<<Fix code chunks in latex layout>>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+<<Fix [[var]] noweb construct>>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+print OUTPUT; # default
+\newline 
+} 
+\newline 
+<<Close INPUT and OUTPUT>>
+\newline 
+@
+\layout Standard
+
+Note that in the perl code that is contained in the 
+\latex latex 
+[[while(<INPUT>)]]
+\latex default 
+ loop above, the perl construct 
+\latex latex 
+[[next line]]
+\latex default 
+ is sufficient to restart the loop.
+ We can use this construct to do some relatively complex parsing of the
+ reLyX generated file.
+\layout Subsection
+
+File input and output for the post-processing
+\layout Standard
+
+Setting up the 
+\latex latex 
+[[INPUT]]
+\latex default 
+ and 
+\latex latex 
+[[OUTPUT]]
+\latex default 
+ is taken care of by this code:
+\layout Scrap
+
+<<Setup INPUT and OUTPUT for the final output>>=
+\newline 
+if ($post_only) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+&setup_files("$input_file", "$output_file");
+\newline 
+} else {
+\newline 
+
+\protected_separator 
+ &setup_files("$relyx_file.lyx", "$output_file");
+\newline 
+}
+\newline 
+@
+\layout Subsection
+
+Making sure the code chunks are in the Scrap layout
+\layout Standard
+
+Now, as we outlined before, the final step is transforming the code-chunks
+ which have been put into a LaTeX layout by LyX into the scrap layout.
+\layout Scrap
+
+<<Fix code chunks in latex layout>>=
+\newline 
+if (/
+\backslash 
+
+\backslash 
+latex latex/) { # Beginning of some latex code
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+if (($line = <INPUT>) =~ /^
+\backslash 
+s*<</) { # code scrap
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+\protected_separator 
+<<Transform this chunk into layout scrap>>
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+} else {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+# print the 
+\backslash 
+latex latex line + next line
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+
+\protected_separator 
+print OUTPUT "$_$line";
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+}
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+next line;
+\newline 
+}
+\newline 
+@
+\layout Standard
+
+When we are sure that we are in a code chunk, we must read in the rest of
+ the code chunk and output a scrap layout for it:
+\layout Scrap
+
+<<Transform this chunk into layout scrap>>=
+\newline 
+$savedScrap = "
+\backslash 
+
+\backslash 
+layout Scrap
+\backslash 
+n
+\backslash 
+n$line";
+\newline 
+codeline: while (<INPUT>) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+$savedScrap .= $_;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+last codeline if /^@
+\backslash 
+s+/;
+\newline 
+};
+\newline 
+print OUTPUT $savedScrap;
+\newline 
+<<Slurp up to the end of the latex layout>>
+\newline 
+@
+\layout Standard
+
+Okay, now we just need to eat the rest of the latex layout.
+ There should only be a few different types of lines for us to match:
+\layout Scrap
+
+<<Slurp up to the end of the latex layout>>=
+\newline 
+slurp: while (<INPUT>) {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+last slurp if /
+\backslash 
+
+\backslash 
+latex /;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+next slurp if /
+\backslash 
+
+\backslash 
+newline/;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+next slurp if /^
+\backslash 
+s*$/;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+warn "confused by line: $_";
+\newline 
+}
+\newline 
+@
+\layout Subsection
+
+Taking care of the 
+\noun on 
+noweb
+\noun default 
+\emph on 
+[[quoted code]]
+\emph default 
+ construct
+\layout Standard
+
+
+\noun on 
+noweb
+\noun default 
+ allows the user to use a special code quoting mechanism in documentation
+ chunks.
+ Fixing this ``[[quoted-code]]'' 
+\noun on 
+noweb
+\noun default 
+ syntax means putting the ``[[quoted-code]]'' in a LaTeX layout in the LyX
+ file.
+ Otherwise, LyX will backslash-quote the brackets, creating ugly output.
+ The quoted-code is transformed by 
+\noun on 
+noweb
+\noun default 
+ when it generates the final LaTeX code.
+\layout Scrap
+
+<<Fix [[var]] noweb construct>>=
+\newline 
+if (/
+\backslash 
+[
+\backslash 
+[.+
+\backslash 
+]
+\backslash 
+]/) { # special code for [[var]]
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+s/
+\backslash 
+[
+\backslash 
+[.+?
+\backslash 
+]{2,}/
+\backslash 
+n
+\backslash 
+
+\backslash 
+latex latex
+\backslash 
+n$&
+\backslash 
+n
+\backslash 
+
+\backslash 
+latex default
+\backslash 
+n/g;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+print OUTPUT;
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+next line;
+\newline 
+}
+\newline 
+@
+\layout Section
+
+Cleaning up intermediate files
+\layout Standard
+
+The cleanup code is very simple:
+\layout Scrap
+
+<<Clean up>>=
+\newline 
+system("rm -f $relyx_file*") unless ($post_only || $pre_only);
+\newline 
+@
+\layout Section
+
+User supplied arguments
+\layout Standard
+
+The 
+\noun on 
+noweb2lyx
+\noun default 
+ script understands two arguments, input-file and output-file.
+ It is also set up to be used internally by reLyX to pre-process or postprocess
+ files in the import pipeline.
+\layout Scrap
+
+<<Setup variables from user supplied args>>=
+\newline 
+&usage() if ($#ARGV < 1); # zero or one argument 
+\newline 
+if ($ARGV[0] eq "-pre") {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+&usage unless ($#ARGV == 2);
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+$input_file = $ARGV[1]; $output_file = $ARGV[2]; $pre_only = 1;
+\newline 
+} elsif ($ARGV[0] eq "-post") {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+&usage unless ($#ARGV == 2);
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+$input_file = $ARGV[1]; $output_file = $ARGV[2]; $post_only = 1;
+\newline 
+} else {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+&usage unless ($#ARGV == 1);
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+$input_file = $ARGV[0];
+\protected_separator 
+$output_file = $ARGV[1];
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+$pre_only = 0; $post_only = 0;
+\newline 
+}
+\newline 
+@ %def input_file output_file pre_only post_only
+\layout Scrap
+
+<<Subroutines>>=
+\newline 
+sub usage() {
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+print "Usage: noweb2lyx [-pre | -post] input-file output-file
+\newline 
+
+\newline 
+If -pre is specified, only pre-processes the input-file for reLyX.
+\newline 
+Similarly, in the case of -post, post-processes reLyX output.
+\newline 
+In case of bugs, Email Kayvan Sylvan <kayvan
+\backslash 
+@sylvan.com>.
+\backslash 
+n";
+\newline 
+
+\protected_separator 
+
+\protected_separator 
+exit;
+\newline 
+}
+\newline 
+@ %def usage
+\layout Section
+
+Generating the 
+\noun on 
+noweb2lyx
+\noun default 
+ script
+\layout Standard
+
+The noweb2lyx script can be tangled from LyX if you set 
+\family typewriter 
+
+\backslash 
+build_command
+\family default 
+ to call a generic script that always extracts a scrap named 
+\family typewriter 
+build-script
+\family default 
+ and executes it.
+ Here is an example of such a script:
+\layout LyX-Code
+
+#!/bin/sh
+\newline 
+notangle -Rbuild-script $1 | sh
+\layout Scrap
+
+<<build-script>>=
+\newline 
+PREFIX=/usr
+\newline 
+notangle -Rnoweb2lyx.in noweb2lyx.nw > noweb2lyx.in
+\newline 
+sed -e "s=@PERL@=$PREFIX/bin/perl=" noweb2lyx.in > noweb2lyx
+\newline 
+chmod +x noweb2lyx
+\newline 
+@
+\layout Section*
+\pagebreak_top 
+Macros
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+nowebchunks
+\layout Section*
+
+Identifiers
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+nowebindex
+\the_end
diff --git a/lib/examples/pl_splash.lyx b/lib/examples/pl_splash.lyx
new file mode 100644 (file)
index 0000000..e2c8ed0
--- /dev/null
@@ -0,0 +1,159 @@
+#This file was created by <dzieko> Mon Mar  1 21:49:28 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language polish
+\inputencoding latin2
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize a4paper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language german
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Witaj w LyXie!
+\layout Section*
+
+Kilka uwag zanim rozpoczniesz pracê z LyXem
+\layout Enumerate
+
+Pakiet LyXa zawiera wspania³± (angielskojêzyczn±) dokumentacjê---u¿ywaj
+ jej! Rozpocznij w 
+\family sans 
+\bar under 
+P
+\bar default 
+omoc->
+\bar under 
+W
+\bar default 
+prowadzenie
+\family default 
+, da Ci to krótkie wprowadzenie do dokumentacji.
+ Potem poczytaj o LyXie w 
+\family sans 
+\bar under 
+P
+\bar default 
+omoc->
+\bar under 
+S
+\bar default 
+amouczek
+\family default 
+.
+\layout Enumerate
+
+Zwiemy LyXa 
+\begin_inset Quotes eld
+\end_inset 
+
+procesorem tekstu
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ Z za³o¿enia LyX ró¿ni siê od innych procesorów tekstu---pozwala bowiem
+ ³atwiej tworzyæ dokumenty.
+ Ró¿ni siê jednak bardzo niewiele, wiêc nie ma obawy.
+ W razie problemów zajrzyj do dokumentacji.
+\begin_float footnote 
+\layout Standard
+
+Czy wspomnieli¶my ju¿, ¿e powiniene¶ przeczytaæ dokumentacjê?
+\end_float 
+.
+\layout Enumerate
+
+Wynik pracy wygl±da naprawdê wspaniale! Wybierz teraz 
+\family sans 
+\bar under 
+P
+\bar default 
+lik->Podgl±d
+\protected_separator 
+dvi
+\family default 
+ by zobaczyæ ten dokument w ca³ej okaza³o¶ci.
+\layout Enumerate
+
+Pakiet zawiera wiele szablonów (
+\family sans 
+\bar under 
+P
+\bar default 
+lik->Nowy
+\protected_separator 
+z
+\protected_separator 
+szablonu
+\family default 
+) i przyk³adów (
+\family sans 
+\bar under 
+P
+\bar default 
+lik->
+\bar under 
+O
+\bar default 
+twó
+\family default 
+rz).
+\layout Enumerate
+
+Tak, LyX potrafi wszystko (prawie) to co LaTeX.
+ Potrafi tak¿e importowaæ pliki LaTeXa.
+ U¿ytkownicy znaj±cy ju¿ LaTeXa powinni pomin±æ resztê 
+\emph on 
+Samouczka
+\emph default 
+ i przej¶æ bezpo¶rednio do rozdzia³u 
+\begin_inset Quotes eld
+\end_inset 
+
+LyX for LaTeX Users
+\begin_inset Quotes erd
+\end_inset 
+
+ (uwaga pozostali U¿ytkownicy: nie, nie musicie znaæ LaTeXa by u¿ywaæ LyXa).
+\layout Enumerate
+
+LyX potrafi tak¿e pracowaæ dla tych z Was, którzy mówi± w innym ni¿ angielski
+ jêzyku.
+ Zobacz w 
+\family sans 
+\bar under 
+P
+\bar default 
+omoc->
+\bar under 
+K
+\bar default 
+onfiguracja
+\family default 
+ .
+\layout Enumerate
+
+Oficjalna strona LyXa to 
+\family typewriter 
+www.lyx.org
+\family default 
+.
+ Znajdziesz tam informacje o LyXie, mo¿esz zapisaæ siê na LyXowe listy dyskusyjn
+e, pobraæ the LyX Graphical Tour i nie tylko.
+\the_end
diff --git a/lib/examples/primer_lyxan.lyx b/lib/examples/primer_lyxan.lyx
new file mode 100644 (file)
index 0000000..4d92eee
--- /dev/null
@@ -0,0 +1,282 @@
+#This file was created by <roman> Wed May 26 23:42:34 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language slovene
+\inputencoding latin2
+\fontscheme default
+\graphics dvips
+\paperfontsize 12
+\spacing single 
+\papersize letterpaper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language german
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Title
+
+TO JE NASLOV VA©EGA SPISA
+\layout Author
+
+Fe LyX
+\layout Date
+
+12.
+ junij 1972
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset 
+
+
+\layout Section
+
+Osnovna filozofija
+\layout Standard
+
+Osnovna filozofija LyX-a je ta, da bi morali skrbeti za vsebino tega, kar
+ pi¹ete, ne za obliko.
+\layout Subsection
+
+Kako to poène LyX
+\layout Standard
+
+LyX uporablja LaTeX, sistem za pripravo spisov, ki ga je leta 1985 zasnoval
+ Leslie Lamport.
+ LaTeX pa je zgrajen na stavnem jeziku, imenovanem TeX, ki ga je leta 1984
+ ustvaril Donald Knuth.
+ LaTeX je zasnovan na podobni filozofiji kot LyX.
+ Leslie Lamport je nekoè rekel (glejte vir 
+\begin_inset LatexCommand \cite{lamport}
+
+\end_inset 
+
+):
+\layout Quote
+
+Funkcija tipografskega oblikovanja je pomagati bralcu, da razume avtorjeve
+ ideje.
+ Èe naj bo spis lahek za branje, mora njegova vizualna struktura odsevati
+ njegovo logièno strukturo.
+ Navedki in raèunalni¹ki programi, ki so logièno razlièni strukturni elementi,
+ bi morali biti vizualno razloèljivi drug od drugega ...
+ Ker LaTeX ne more razumeti va¹e poezije, morate eksplicitno oznaèiti logièno
+ strukturo z vnosom posebnih ukazov ...
+ Ko pi¹ete va¹ spis, bi se morali ukvarjati z njegovo logièno strukturo
+ in ne z njegovo vizualno pojavo.
+\layout Subsection
+
+Zakaj je LyX bolj¹i
+\layout Standard
+
+
+\begin_inset LatexCommand \label{sec:lyxbetter}
+
+\end_inset 
+
+LyX je lahko uporaben veè ljudem kot LaTeX.
+ Precej la¾je se ga je nauèiti, saj se vam ni treba nauèiti LaTeX-a (ki
+ je praktièno programski jezik).
+ LyX je pravzaprav kot ostali urejevalniki besedil tipa 
+\begin_inset Quotes gld
+\end_inset 
+
+kar vidi¹ to dobi¹
+\begin_inset Quotes grd
+\end_inset 
+
+, le da je LyX tipa 
+\begin_inset Quotes gld
+\end_inset 
+
+kar vidi¹ to misli¹
+\begin_inset Quotes grd
+\end_inset 
+
+.
+ Na ta naèin kombinira preprostost uporabe urejevalnikov besedil z moèjo
+ LaTeX-a.
+ To je Dobra Stvar.
+ Tudi datoteèni format je neodvisen od platforme.
+ Najbolj¹e od vsega pa je, da je PROST!
+\layout Section
+
+Odlike LyX-a
+\layout Standard
+
+LyX ima mnoge odlike, ki olaj¹ajo pisanje spisov.
+\begin_float footnote 
+\layout Standard
+
+Navsezadnje, zakaj bi ga sicer ¾eleli uporabljati?
+\end_float 
+\emph on 
+Zelo vznemirjen
+\emph default 
+ sem, da lahko govorim o tem.
+ Tukaj je seznam le nekaterih.
+\layout Itemize
+
+LyX skrbi za robove in ¹tevilèenje opomb v nogi namesto vas.
+\layout Itemize
+
+Z LyX-om postane pisanje in urejanje matematiènih obrazcev preprosto.
+\layout Standard
+
+Za bolj filozofsko diskusijo o tem zakaj je LyX bolj¹i od drugih urejevalnikov
+ besedil glejte razdelek 
+\begin_inset LatexCommand \ref{sec:lyxbetter}
+
+\end_inset 
+
+, ki ga lahko najdete na strani 
+\begin_inset LatexCommand \pageref{sec:lyxbetter}
+
+\end_inset 
+
+.
+\layout Section
+
+3.
+ Nerodni poskusi uporabe veè zadev LyX-a
+\layout Standard
+
+Zadnjiè sem napisal program.
+ Videti je bil takole.
+\layout LyX-Code
+
+5 REM MOJ STRA©NI PROGRAM
+\layout LyX-Code
+
+10 PRINT 
+\begin_inset Quotes eld
+\end_inset 
+
+STRA©EN SEM!
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout LyX-Code
+
+20 GOTO 10
+\layout Standard
+
+Po vsem tem znanstvenem razmi¹ljanju sem se zaèel poèutiti bolj umetni¹ko,
+ zato sem napisal tale haiku
+\layout Verse
+
+LyX je zares èudovit
+\newline 
+stavni urejevalnik besedil
+\newline 
+prihrani mi toliko èasa
+\layout Section
+
+Matematiène zadeve
+\layout Standard
+
+Moja najljub¹a enaèba je re¹itev kvadratne enaèbe.
+ Èe je 
+\begin_inset Formula \( ax^{2}+bx+c=0 \)
+\end_inset 
+
+ (en.
+ 1), potem je 
+\begin_inset Formula \( x=\frac{-b\pm \sqrt{b^{2}-4ac}}{2a} \)
+\end_inset 
+
+ (en.
+ 2).
+\layout Standard
+
+Druga priljubljena enaèba predstavlja osnovo matematiène analize: 
+\begin_inset Formula \( f'(x)\equiv \lim _{\Delta x\rightarrow 0}\frac{f(x+\Delta x)-f(x)}{\Delta x} \)
+\end_inset 
+
+ (en.
+ 3).
+\layout Section
+
+Opazke
+\layout Standard
+
+Nekaj opazk o LyXanju te datoteke:
+\layout Itemize
+
+Vrstice, narejene z vezaji, sem lahko odstranil.
+ Tam so bile le zato, da so loèevale naslove in vire od ostanka spisa.
+ LyX (LaTeX) ve dovolj, da loèi te dele spisa z razmikom.
+\layout Itemize
+
+Nisem se trudil z vstavljanjem matematiènih enaèb v prikazni naèin.
+ Nisem tudi uporabljal samodejnega ¹tevilèenja enaèb, ki ga pozna LyX, saj
+ to ni opisano v 
+\emph on 
+Uèbeniku
+\emph default 
+.
+\layout Itemize
+
+Ni mi bilo treba vpisati besede 
+\begin_inset Quotes gld
+\end_inset 
+
+Literatura
+\begin_inset Quotes grd
+\end_inset 
+
+, spodaj (v LyX-u pravzaprav 
+\begin_inset Quotes gld
+\end_inset 
+
+References
+\begin_inset Quotes grd
+\end_inset 
+
+ ali 
+\begin_inset Quotes gld
+\end_inset 
+
+Bibliography
+\begin_inset Quotes grd
+\end_inset 
+
+, v izhodu pa ob slovenskih nastavitvah 
+\begin_inset Quotes gld
+\end_inset 
+
+Literatura
+\begin_inset Quotes grd
+\end_inset 
+
+).
+ LyX jo samodejno zapi¹e, ko izberete okolje 
+\family sans 
+Bibliography
+\family default 
+.
+\layout Bibliography
+\bibitem {lamport}
+
+Lamport, Leslie.
+\emph on 
+LaTeX: A Document Preparation System.
+
+\emph default 
+ Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+\the_end
diff --git a/lib/examples/primer_surov.lyx b/lib/examples/primer_surov.lyx
new file mode 100644 (file)
index 0000000..61c8d2a
--- /dev/null
@@ -0,0 +1,277 @@
+#This file was created by <roman> Wed May 26 23:43:16 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language slovene
+\inputencoding latin2
+\fontscheme default
+\graphics dvips
+\paperfontsize 12
+\spacing single 
+\papersize letterpaper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language german
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle plain
+
+\layout Standard
+
+TO JE NASLOV VA©EGA SPISA 
+\begin_inset Info Namig: naslov bi moral biti videti bolj kot naslov.
+\end_inset 
+
+
+\layout Standard
+
+Avtor: Fe LyX
+\begin_inset Info Namig: Fe je AVTOR (angl. Author).
+\end_inset 
+
+
+\layout Standard
+
+12.
+ junij 1972
+\begin_inset Info Namig: to je DATUM (angl. Date).
+\end_inset 
+
+
+\layout Standard
+
+Kazalo
+\begin_inset Info Namig: Fino bi bilo, èe nam ne bi bilo treba roèno dobesedno
+vpisovati vsebinskega kazala.
+\end_inset 
+
+
+\layout Standard
+
+1.
+ Osnovna filozofija..................1
+\layout Standard
+
+1.1 Kako to poène LyX...............1
+\layout Standard
+
+1.2 Zakaj je LyX bolj¹i................1
+\layout Standard
+
+2.
+ Odlike LyX-a
+\layout Standard
+
+3.
+ Nerodni poskusi uporabe veè zadev LyX-a
+\layout Standard
+
+4.
+ Matematiène zadeve
+\layout Standard
+
+---------------------------------------------------
+\layout Standard
+
+1.
+ Osnovna filozofija
+\begin_inset Info Namig: naslovi razdelkov (angl. Section) bi verjetno
+morali bolj izstopati.
+\end_inset 
+
+
+\layout Standard
+
+Osnovna filozofija LyX-a je ta, da bi morali skrbeti za vsebino tega, kar
+ pi¹ete, ne za obliko.
+\layout Standard
+
+1.1 Kako to poène LyX
+\layout Standard
+
+LyX uporablja LaTeX, sistem za pripravo spisov, ki ga je leta 1985 zasnoval
+ Leslie Lamport.
+ LaTeX pa je zgrajen na stavnem jeziku, imenovanem TeX, ki ga je leta 1984
+ ustvaril Donald Knuth.
+ LaTeX je zasnovan na podobni filozofiji kot LyX.
+ Leslie Lamport je nekoè rekel (glejte vir [1])
+\begin_inset Info Namig: Verjetno ta NAVZKRI®NI SKLIC ne bi smel biti
+"vne¹en". Kaj, èe naredimo Lamportovo knjigo za drugo
+postavko spiska literature?
+\end_inset 
+
+:
+\layout Standard
+
+
+\begin_inset Quotes gld
+\end_inset 
+
+Funkcija tipografskega oblikovanja je pomagati bralcu, da razume avtorjeve
+ ideje.
+ Èe naj bo spis lahek za branje, mora njegova vizualna struktura odsevati
+ njegovo logièno strukturo.
+ Navedki in raèunalni¹ki programi, ki so logièno razlièni strukturni elementi,
+ bi morali biti vizualno razloèljivi drug od drugega ...
+ Ker LaTeX ne more razumeti va¹e poezije, morate eksplicitno oznaèiti logièno
+ strukturo z vnosom posebnih ukazov ...
+ Ko pi¹ete va¹ spis, bi se morali ukvarjati z njegovo logièno strukturo
+ in ne z njegovo vizualno pojavo.
+\begin_inset Quotes grd
+\end_inset 
+
+
+\begin_inset Info Namig: To je NAVEDEK (angl. Quote).
+\end_inset 
+
+
+\layout Standard
+
+1.2 Zakaj je LyX bolj¹i
+\layout Standard
+
+LyX je lahko uporaben veè ljudem kot LaTeX.
+ Precej la¾je se ga je nauèiti, saj se vam ni treba nauèiti LaTeX-a (ki
+ je praktièno programski jezik).
+ LyX je pravzaprav kot ostali urejevalniki besedil tipa 
+\begin_inset Quotes gld
+\end_inset 
+
+kar vidi¹ to dobi¹
+\begin_inset Quotes grd
+\end_inset 
+
+, le da je LyX tipa 
+\begin_inset Quotes gld
+\end_inset 
+
+kar vidi¹ to misli¹
+\begin_inset Quotes grd
+\end_inset 
+
+.
+ Na ta naèin kombinira preprostost uporabe urejevalnikov besedil z moèjo
+ LaTeX-a.
+ To je Dobra Stvar.
+ Tudi datoteèni format je neodvisen od platforme.
+ Najbolj¹e od vsega pa je, da je PROST!
+\layout Standard
+
+2.
+ Odlike LyX-a
+\layout Standard
+
+LyX ima mnoge odlike, ki olaj¹ajo pisanje spisov.
+ (Navsezadnje, zakaj bi ga sicer ¾eleli uporabljati?
+\begin_inset Info Namig: Ta oklepajski stavek je videti bolje kot opomba v nogi.
+\end_inset 
+
+) ZELO VZNEMIRJEN
+\begin_inset Info Namig: Poudarite!
+\end_inset 
+
+ sem, da lahko govorim o tem.
+ Tukaj je seznam le nekaterih.
+\layout Standard
+
+* LyX skrbi za robove in ¹tevilèenje opomb v nogi namesto vas.
+\layout Standard
+
+* Z LyX-om postane pisanje in urejanje matematiènih obrazcev preprosto.
+\layout Standard
+
+Za bolj filozofsko diskusijo o tem zakaj je LyX bolj¹i od drugih urejevalnikov
+ besedil glejte razdelek 1.2, ki ga lahko najdete na strani 1.
+\begin_inset Info Namig: Verjetno ta NAVZKRI®NA SKLICEVANJA ne bi smela
+biti "zakodirana". Kaj, èe spremenimo ¹tevilke razdelkov?
+\end_inset 
+
+
+\layout Standard
+
+3.
+ Nerodni poskusi uporabe veè zadev LyX-a
+\layout Standard
+
+Zadnjiè sem napisal program.
+ Videti je bil takole.
+\layout Standard
+
+5 REM MOJ STRA©NI PROGRAM
+\layout Standard
+
+10 PRINT 
+\begin_inset Quotes eld
+\end_inset 
+
+STRA©EN SEM!
+\begin_inset Quotes erd
+\end_inset 
+
+
+\layout Standard
+
+20 GOTO 10 
+\begin_inset Info Namig: To je raèunalni¹ka KODA (angl. Code).
+\end_inset 
+
+
+\layout Standard
+
+Po vsem tem znanstvenem razmi¹ljanju sem se zaèel poèutiti bolj umetni¹ko,
+ zato sem napisal tale haiku
+\layout Standard
+
+LyX je zares èudovit
+\layout Standard
+
+stavni urejevalnik besedil
+\layout Standard
+
+prihrani mi toliko èasa 
+\begin_inset Info Namig: Ni preveè dobro, a je poezija,
+znana tudi kot VERZI (angl. Verse).
+\end_inset 
+
+
+\layout Standard
+
+4.
+ Matematiène zadeve
+\begin_inset Info Namig: Te matematiène stvari bi morale biti izpisane
+v matematiènem naèinu!
+\end_inset 
+
+
+\layout Standard
+
+Moja najljub¹a enaèba je re¹itev kvadratne enaèbe.
+ Èe je ax^2+bx+c=0 (en.
+ 1), potem je x= -b + ali minus kvadratni koren od b^2-4ac vse skupaj ulomljeno
+ z 2a (en.
+ 2).
+\layout Standard
+
+Druga priljubljena enaèba predstavlja osnovo matematiène analize: izraz
+ f'(x) je definiran kot limita izraza f(x+deltax) - f(x) ulomljenega z deltax,
+ ko gredo ¹tevila deltax proti niè (en.
+ 3).
+\layout Standard
+
+------------------------------------------------
+\layout Standard
+
+LITERATURA
+\layout Standard
+
+[1] Lamport, Leslie.
+ LaTeX: A Document Preparation System.
+ Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+\the_end
diff --git a/lib/examples/pt_splash.lyx b/lib/examples/pt_splash.lyx
new file mode 100644 (file)
index 0000000..088006c
--- /dev/null
@@ -0,0 +1,146 @@
+#This file was created by <kroger> Sat May 22 23:22:53 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language brazil
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Bem-vindo ao LyX!
+\layout Section*
+
+As coisas mais importantes a saber para utilizar o LyX
+\layout Enumerate
+
+LyX vem com uma excelente documentação---por favor, use-a! Comece com 
+\family sans 
+\bar under 
+A
+\bar default 
+juda->
+\bar under 
+I
+\bar default 
+ntrodução
+\family default 
+, que lhe dará uma breve introdução sobre a documentação.
+ Então leia sobre o uso do LyX com
+\family sans 
+\bar under 
+A
+\bar default 
+juda->
+\bar under 
+T
+\bar default 
+utorial
+\family default 
+.
+\layout Enumerate
+
+LyX é o que nos chamamos um
+\begin_inset Quotes eld
+\end_inset 
+
+processador de documentos
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ Ele é diferente dos processadores de texto comuns---no sentido que torna
+ a escrita de documentos mais fácil.
+ Mas somente um pouco diferente, então não se assuste.
+ A documentação tornará tudo isso claro
+\begin_float footnote 
+\layout Standard
+
+Nos já mencionamos que você deve ler a documentação?
+\end_float 
+.
+\layout Enumerate
+
+O resultado visual dos documentos no LyX é excelente! Selecione
+\family sans 
+\bar under 
+ A
+\bar default 
+rquivo->Ver
+\protected_separator 
+
+\bar under 
+d
+\bar default 
+vi
+\family default 
+ agora para ver você mesmo.
+\layout Enumerate
+
+Sim, LyX pode reproduzir (a maioria de) toda a funcionalidade do LaTeX.
+ E sim, LyX pode importar arquivos do LaTeX.
+ Usuários experientes do LaTeX podem pular o resto do
+\emph on 
+ Tutorial
+\emph default 
+ e ler o capítulo 
+\begin_inset Quotes eld
+\end_inset 
+
+LyX para usuários de LaTeX
+\begin_inset Quotes erd
+\end_inset 
+
+.
+ (Para os demais: não se preocupe, você não precisa conhecer LaTeX para
+ usar o LyX.) 
+\layout Enumerate
+
+LyX tem diversos recursos para pessoas que lêem ou escrevem em outra língua
+ diferente do Inglês.
+ As teclas de atalho, barra de ferramentas, e muitas outras características
+ são altamente configuráveis (a maioria editando seu arquivo 
+\family typewriter 
+lyxrc
+\family default 
+).
+ Veja 
+\family sans 
+\bar under 
+A
+\bar default 
+juda->
+\bar under 
+C
+\bar default 
+ustomização
+\family default 
+ para detalhes.
+\layout Enumerate
+
+A página na internet do LyX é 
+\family typewriter 
+www.lyx.org
+\family default 
+.
+ Obtenha informações sobre o LyX, inscreva-se na(s) lista(s) de discussão,
+ veja a  Turnê Gráfica do LyX, e mais.
+\the_end
diff --git a/lib/examples/ru_splash.lyx b/lib/examples/ru_splash.lyx
new file mode 100644 (file)
index 0000000..277328f
--- /dev/null
@@ -0,0 +1,129 @@
+#This file was created by <const> Thu May 27 14:26:22 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language russian
+\inputencoding koi8-r
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language french
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+äÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ × LyX!
+\layout Section*
+
+çÌÁ×ÎÙÅ N ×ÅÝÅÊ, ËÏÔÏÒÙÅ ÎÕÖÎÏ ÚÎÁÔØ ÐÒÉ ÒÁÂÏÔÅ × LyX
+\layout Enumerate
+
+LyX ÐÏÓÔÁ×ÌÑÅÔÓÑ Ó ÐÒÅËÒÁÓÎÙÍ ÎÁÂÏÒÏÍ ÄÏËÕÍÅÎÔÁÃÉÉ --- ÐÏÌØÚÕÊÔÅÓØ ÅÊ! îÁÞÎÉÔÅ
+ Ó ×ÙÂÏÒÁ ÐÕÎËÔÁ ÍÅÎÀ
+\family sans 
+ ðÏÍÏÝØ->÷×ÅÄÅÎÉÅ
+\family default 
+, ÇÄÅ ×Ù ÓÍÏÖÅÔÅ ÎÁÊÔÉ ÏÞÅÎØ ËÒÁÔËÏÅ ××ÅÄÅÎÉÅ × ÓÉÓÔÅÍÕ ÄÏËÕÍÅÎÔÁÃÉÉ.
+ úÁÔÅÍ ÉÚÕÞÉÔÅ ÐÒÉÎÃÉÐÙ ÒÁÂÏÔÙ × LyX, ×ÙÂÒÁ× × ÍÅÎÀ ÐÕÎËÔ
+\family sans 
+ ðÏÍÏÝØ->óÁÍÏÕÞÉÔÅÌØ
+\family default 
+.
+\layout Enumerate
+
+íÙ ÎÁÚÙ×ÁÅÍ LyX 
+\begin_inset Quotes fld
+\end_inset 
+
+ÐÒÏÃÅÓÓÏÒÏÍ ÄÏËÕÍÅÎÔÏ×
+\begin_inset Quotes frd
+\end_inset 
+
+.
+ üÔÁ ÐÒÏÇÒÁÍÍÁ ÏÔÌÉÞÁÅÔÓÑ ÐÏ ÚÁÍÙÓÌÕ ÏÔ ÏÂÙÞÎÙÈ 
+\begin_inset Quotes fld
+\end_inset 
+
+ÔÅËÓÔÏ×ÙÈ ÐÒÏÃÅÓÓÏÒÏ×
+\begin_inset Quotes frd
+\end_inset 
+
+; Ó ÐÏÍÏÝØÀ LyX ÐÒÏÃÅÓÓ ÓÏÚÄÁÎÉÑ ÄÏËÕÍÅÎÔÁ ÕÐÒÏÝÁÅÔÓÑ.
+ îÏ ÎÅ ÐÕÇÁÊÔÅÓØ, ÅÓÌÉ ÜÔÏÔ ÐÒÏÃÅÓÓ ÎÅÓËÏÌØËÏ ÏÔÌÉÞÁÅÔÓÑ ÏÔ ÔÏÇÏ, Ë ËÏÔÏÒÏÍÕ
+ ×Ù ÐÒÉ×ÙËÌÉ.
+ ÷ÏÚÎÉËÛÉÅ Õ ×ÁÓ ×ÏÐÒÏÓÙ ÍÏÖÅÔ ÐÒÏÑÓÎÉÔØ ÄÏËÕÍÅÎÔÁÃÉÑ
+\begin_float footnote 
+\layout Standard
+
+íÙ, ËÁÖÅÔÓÑ, ÕÖÅ ÕÐÏÍÉÎÁÌÉ, ÞÔÏ ÄÏËÕÍÅÎÔÁÃÉÀ ÞÉÔÁÔØ ÏÞÅÎØ ÐÏÌÅÚÎÏ?
+\end_float 
+.
+\layout Enumerate
+
+÷Ù×ÏÄ ÐÒÏÇÒÁÍÍÙ LyX ×ÙÇÌÑÄÉÔ ÐÏÔÒÑÓÁÀÝÅ! þÔÏÂÙ ÓÅÊÞÁÓ ÖÅ × ÜÔÏÍ ÕÂÅÄÉÔØÓÑ,
+ ×ÙÂÅÒÉÔÅ ÐÕÎËÔ ÍÅÎÀ 
+\family sans 
+æÁÊÌ->ðÒÏÓÍÏÔÒÅÔØ
+\protected_separator 
+dvi
+\family default 
+.
+\layout Enumerate
+
+LyX ÍÏÖÅÔ ÉÍÉÔÉÒÏ×ÁÔØ ×ÓÀ (ÉÌÉ ÐÏÞÔÉ ×ÓÀ) ÆÕÎËÃÉÏÎÁÌØÎÏÓÔØ ÓÉÓÔÅÍÙ LaTeX.
+ é, ËÒÏÍÅ ÔÏÇÏ, LyX ÍÏÖÅÔ ÉÍÐÏÒÔÉÒÏ×ÁÔØ ÆÁÊÌÙ, ÓÏÚÄÁÎÎÙÅ ÄÌÑ LaTeX.
+ ïÐÙÔÎÙÅ ÐÏÌØÚÏ×ÁÔÅÌÉ LaTeX ÍÏÇÕÔ ÌÉÛØ ÂÅÇÌÏ ÐÒÏÓÍÏÔÒÅÔØ ÏÓÔÁÌØÎÕÀ ÞÁÓÔØ
+\emph on 
+óÁÍÏÕÞÉÔÅÌÑ
+\emph default 
+, É ÐÒÉÓÔÕÐÉÔØ Ë ÞÔÅÎÉÀ ÇÌÁ×Ù 
+\begin_inset Quotes fld
+\end_inset 
+
+LyX ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÅÊ LaTeX
+\begin_inset Quotes frd
+\end_inset 
+
+.
+ (÷ÓÅÍ ÏÓÔÁÌØÎÙÍ: ÎÅ ÂÅÓÐÏËÏÊÔÅÓØ, ×ÁÍ ÎÅÏÂÑÚÁÔÅÌØÎÏ ÚÎÁÔØ LaTeX ÄÌÑ ÒÁÂÏÔÙ
+ × LyX.)
+\layout Enumerate
+
+LyX ÓÏÄÅÒÖÉÔ ÍÎÏÖÅÓÔ×Ï ×ÏÚÍÏÖÎÏÓÔÅÊ ÄÌÑ ÞÔÅÎÉÑ ÉÌÉ ÓÏÚÄÁÎÉÑ ÄÏËÕÍÅÎÔÏ× ÎÁ
+ ÑÚÙËÅ, ÏÔÌÉÞÎÏÍ ÏÔ ÁÎÇÌÉÊÓËÏÇÏ.
+ ÷ ÄÏÐÏÌÎÅÎÉÅ Ë ÜÔÏÍÕ, ÎÁÚÎÁÞÅÎÉÑ ËÌÁ×ÉÛ, ÎÁÂÏÒ ËÎÏÐÏË ÐÁÎÅÌÉ ÕÐÒÁ×ÌÅÎÉÑ
+ É ÍÎÏÇÉÅ ÄÒÕÇÉÅ Ó×ÏÊÓÔ×Á ÐÒÏÇÒÁÍÍÙ ÄÏÐÕÓËÁÀÔ ÏÞÅÎØ ÇÉÂËÕÀ ÎÁÓÔÒÏÊËÕ (×
+ ÏÓÎÏ×ÎÏÍ, Ó ÐÏÍÏÝØÀ ÐÒÁ×ËÉ ×ÁÛÅÇÏ ÆÁÊÌÁ 
+\family typewriter 
+lyxrc
+\family default 
+).
+ äÌÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ÎÁÊÄÉÔÅ × ÍÅÎÀ ÐÕÎËÔ 
+\family sans 
+ðÏÍÏÝØ->îÁÓÔÒÏÊËÁ
+\family default 
+.
+\layout Enumerate
+
+óÔÒÁÎÉÃÁ LyX × Internet ÎÁÈÏÄÉÔÓÑ ÐÏ ÁÄÒÅÓÕ
+\family typewriter 
+ www.lyx.org
+\family default 
+.
+ ÷Ù ÍÏÖÅÔÅ ÎÁÊÔÉ ÉÎÆÏÒÍÁÃÉÀ Ï ÐÒÏÇÒÁÍÍÅ LyX, ÐÏÄÐÉÓÁÔØÓÑ ÎÁ ÓÐÉÓËÉ ÒÁÓÓÙÌËÉ,
+ ÏÚÎÁËÏÍÉÔØÓÑ Ó ÇÒÁÆÉÞÅÓËÉÍÉ ÏÂÒÁÚÁÍÉ ÜËÒÁÎÁ LyX, É ÍÎÏÇÏÅ ÄÒÕÇÏÅ.
+\the_end
diff --git a/lib/examples/scriptone.lyx b/lib/examples/scriptone.lyx
new file mode 100644 (file)
index 0000000..9e8aad3
--- /dev/null
@@ -0,0 +1,197 @@
+#This file was created by <garst> Thu Jan  7 22:44:37 1999
+#LyX 1.0 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass hollywood
+\begin_preamble
+\renewcommand{\headrulewidth}{0pt}
+\renewcommand{\ref}[1]{#1}
+\end_preamble
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize letterpaper
+\paperpackage a4
+\use_geometry 1
+\use_amsmath 0
+\paperorientation portrait
+\leftmargin 1.6in
+\topmargin 0.5in
+\rightmargin 0.75in
+\bottommargin 0.75in
+\headheight 0.5in
+\headsep 12bp
+\footskip 0.5in
+\secnumdepth 2
+\tocdepth 2
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Silent Heavens
+\layout Author
+\added_space_bottom vfill 
+by Garst R.
+ Reese
+\layout Right Address
+\pagebreak_bottom 
+
+\size large 
+Garst R.
+ Reese
+\newline 
+284 Sydney Street
+\newline 
+Charlottetown, PE
+\newline 
+CANADA C1A 1H2
+\newline 
+(902) 566-3565
+\newline 
+reese@isn.net
+\newline 
+WGA/c
+\layout EXT.
+
+RURAL NEW ZEALAND ROADSIDE DURING METEOR STORM - NIGHT
+\layout Narrative
+
+Earth is colliding with the first meteor storm of the space age.
+ The sky is filled with meteor trails.
+ As credits role we here (0.S.) OOH's AHH's, the occaisional 
+\begin_inset Quotes eld
+\end_inset 
+
+LOOK AT THAT ONE!
+\begin_inset Quotes erd
+\end_inset 
+
+, 
+\begin_inset Quotes eld
+\end_inset 
+
+WOW
+\begin_inset Quotes erd
+\end_inset 
+
+.
+\layout Transition
+
+CUT TO:
+\layout INT.
+
+NATIONAL SECURITY AGENCY - DAY
+\layout Narrative
+
+War-room like setting.
+ Gathering of Generals, scientists and politicos.
+ Big wall computer display showing satellite orbits.
+\layout Speaker
+
+
+\begin_inset LatexCommand \label{GENERAL BULLMOOSE}
+
+\end_inset 
+
+
+\begin_inset LatexCommand \ref{GENERAL BULLMOOSE}
+
+\end_inset 
+
+
+\layout Parenthetical
+
+frustrated
+\layout Dialogue
+
+How many we gonna loose?
+\newline 
+Can anybody here make a wild guess?
+\layout Speaker
+
+
+\begin_inset LatexCommand \label{DR. NOAD}
+
+\end_inset 
+
+
+\begin_inset LatexCommand \ref{DR. NOAD}
+
+\end_inset 
+
+
+\layout Dialogue
+
+Pick a number between none and all.
+\layout Speaker
+
+
+\begin_inset LatexCommand \ref{GENERAL BULLMOOSE}
+
+\end_inset 
+
+
+\layout Dialogue
+
+Fuck you smartass.
+ I don't need your humor, I need information.
+ I got men depending on those goddamned satellites.
+ And you better believe that Saddam knows that.
+ He knows that's the only reason our tanks were able to sneek around his
+ defenses.
+ They go, he comes, we die.
+\layout Speaker
+
+
+\begin_inset LatexCommand \ref{DR. NOAD}
+
+\end_inset 
+
+
+\layout Parenthetical
+
+taking a deep breath
+\layout Dialogue
+
+My apologies general.
+ It was not my intention to make light of your situation.
+ My own frustrations pale in the light of your responsibilites.
+ The estimates I have received all fall into the category of wild guesses.
+ I'll do my best to tell you what we know we can expect.
+\layout Speaker
+
+
+\begin_inset LatexCommand \ref{GENERAL BULLMOOSE}
+
+\end_inset 
+
+
+\layout Dialogue
+
+From the look on your face, I can tell you are not going to be bearer of
+ good news.
+ Don't worry, we no longer shoot bearers of bad news.
+ Go ahead.
+\layout Speaker
+
+
+\begin_inset LatexCommand \ref{DR. NOAD}
+
+\end_inset 
+
+
+\layout Dialogue
+
+Even if the satellites are not hit directly, the atomospheric ionization
+ is likely to disrupt communications for several hours, and possibly several
+ days.
+ During that period we will not know how many survived.
+\the_end
diff --git a/lib/examples/sl_splash.lyx b/lib/examples/sl_splash.lyx
new file mode 100644 (file)
index 0000000..54eaf4c
--- /dev/null
@@ -0,0 +1,149 @@
+#This file was created by <roman> Wed May 26 22:49:22 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language slovene
+\inputencoding latin2
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language german
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Dobrodo¹li v LyX-u!
+\layout Section*
+
+Najpomembnej¹ih N stvari, ki jih morate vedeti, ko uporabljate LyX
+\layout Enumerate
+
+LyX-u je prilo¾ena izvrstna dokumentacija (v angle¹èini, deloma tudi v sloven¹èi
+ni) -- prosimo, uporabljajte jo! Zaènite s 
+\family sans 
+\bar under 
+P
+\bar default 
+omoè\SpecialChar \menuseparator
+
+\bar under 
+U
+\bar default 
+vod
+\family default 
+, ki vam ponuja zelo kratek uvod v dokumentacijo.
+ Potem se uèite uporabljati LyX s pomoèjo postavke 
+\family sans 
+\bar under 
+P
+\bar default 
+omoè\SpecialChar \menuseparator
+Uè
+\bar under 
+b
+\bar default 
+enik
+\family default 
+.
+\layout Enumerate
+
+LyX je to, èemur pravimo 
+\begin_inset Quotes gld
+\end_inset 
+
+stavnik spisov
+\begin_inset Quotes grd
+\end_inset 
+
+.
+ Po zasnovi se razlikuje od obièajnih urejevalnikov besedil -- na naèin,
+ ki olaj¹a pisanje spisov.
+ Vendar se le malce razlikuje, zato se ne prestra¹ite.
+ V dokumentaciji je to vse pojasnjeno
+\begin_float footnote 
+\layout Standard
+
+Smo ¾e omenili, da bi morali prebrati dokumentacijo?
+\end_float 
+.
+\layout Enumerate
+
+Izhod LyX-a je videti èudovit! Zdaj izberite 
+\family sans 
+\bar under 
+D
+\bar default 
+atoteka\SpecialChar \menuseparator
+Glej
+\protected_separator 
+
+\bar under 
+d
+\bar default 
+vi
+\family default 
+ in se preprièajte sami.
+\layout Enumerate
+
+Da, LyX lahko opona¹a (skoraj) vso funkcionalnost LaTeX-a.
+ In da, LyX lahko uva¾a datoteke za LaTeX.
+ Izku¹eni uporabniki LaTeX-a naj bi preleteli ostanek 
+\emph on 
+Uèbenika
+\emph default 
+ in potem prebrali razdelek 
+\begin_inset Quotes gld
+\end_inset 
+
+LyX za uporabnike LaTeX-a
+\begin_inset Quotes grd
+\end_inset 
+
+.
+ (Vsi ostali: ne skrbite, za uporabo LyX-a vam ni treba znati LaTeX-a.)
+\layout Enumerate
+
+LyX ima veliko odlik za ljudi, ki berejo ali pi¹ejo v jeziku, razliènem
+ od angle¹èine.
+ Poleg tega so tipkovne povezave, orodna vrstica in mnoge druge znaèilnosti
+ moèno nastavljive (veèinoma z urejanjem va¹e datoteke 
+\family typewriter 
+lyxrc
+\family default 
+).
+ Za podrobnosti glejte 
+\family sans 
+\bar under 
+P
+\bar default 
+omoè\SpecialChar \menuseparator
+
+\bar under 
+P
+\bar default 
+rilagoditev
+\family default 
+.
+\layout Enumerate
+
+Domaèa stran LyX-a je na 
+\family typewriter 
+www.lyx.org
+\family default 
+.
+ Poi¹èite informacije o LyX-u, prijavite se na dopisne sezname o LyX-u,
+ podajte se na grafièno turo po LyX-u in ¹e veè.
+\the_end
diff --git a/lib/examples/splash.lyx b/lib/examples/splash.lyx
new file mode 100644 (file)
index 0000000..a095a93
--- /dev/null
@@ -0,0 +1,144 @@
+#This file was created by <karger> Fri Feb 26 14:30:20 1999
+#LyX 1.0 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Welcome to LyX!
+\layout Section*
+
+Top N Things to know when using LyX
+\layout Enumerate
+
+LyX comes with excellent documentation---please use it! Start with the 
+\family sans 
+\bar under 
+H
+\bar default 
+elp->
+\bar under 
+I
+\bar default 
+ntroduction
+\family default 
+, which will give you a very brief introduction to the documentation.
+ Then learn about using LyX with
+\family sans 
+\bar under 
+H
+\bar default 
+elp->
+\bar under 
+T
+\bar default 
+utorial
+\family default 
+.
+\layout Enumerate
+
+LyX is what we call a 
+\begin_inset Quotes eld
+\end_inset 
+
+document processor.
+\begin_inset Quotes erd
+\end_inset 
+
+ By design, it is different from regular word processors---in a way that
+ makes writing documents easier.
+ But only a little different, so don't be scared.
+ The documentation will make it all clear
+\begin_float footnote 
+\layout Standard
+
+Have we mentioned yet that you ought to read the documentation?
+\end_float 
+.
+\layout Enumerate
+
+The output from LyX looks great! Select 
+\family sans 
+\bar under 
+F
+\bar default 
+ile->View
+\protected_separator 
+
+\bar under 
+d
+\bar default 
+vi
+\family default 
+ now to see for yourself.
+\layout Enumerate
+
+Yes, LyX can mimic (almost) all LaTeX functionality.
+ And yes, LyX can import LaTeX files.
+ Experienced LaTeX users should skim the rest of the 
+\emph on 
+Tutorial
+\emph default 
+, then read the 
+\begin_inset Quotes eld
+\end_inset 
+
+LyX for LaTeX Users
+\begin_inset Quotes erd
+\end_inset 
+
+ chapter.
+ (Everyone else: don't worry, you don't need to know LaTeX to use LyX.) 
+\layout Enumerate
+
+LyX has lots of features for people who read or write a language other than
+ English.
+ In addition, the keybindings, toolbar, and many other characteristics are
+ highly configurable (mostly by editing your 
+\family typewriter 
+lyxrc
+\family default 
+ file).
+ See 
+\family sans 
+\bar under 
+H
+\bar default 
+elp->
+\bar under 
+C
+\bar default 
+ustomization
+\family default 
+ for details.
+\layout Enumerate
+
+The LyX home page is at 
+\family typewriter 
+www.lyx.org
+\family default 
+.
+ Get information about LyX, subscribe to the LyX mailing list(s), take the
+ LyX Graphical Tour, and more.
+\the_end
diff --git a/lib/images/amssymb.xbm b/lib/images/amssymb.xbm
new file mode 100644 (file)
index 0000000..49db34d
--- /dev/null
@@ -0,0 +1,388 @@
+#define amssymb_width 264
+#define amssymb_height 174
+static char amssymb_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0xaa,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x04,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x0c,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x02,0x00,
+ 0x04,0x00,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x30,
+ 0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,
+ 0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x08,0x08,0x01,
+ 0x00,0x00,0x20,0x0c,0x10,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,
+ 0x18,0x00,0x00,0x00,0x0c,0x00,0x08,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x00,
+ 0x1c,0x1c,0x02,0x00,0x00,0x60,0x08,0x20,0x00,0x00,0x00,0x00,0x80,0x11,0x00,
+ 0x00,0xe0,0xff,0x7f,0x00,0x00,0x00,0xf8,0xff,0x1f,0x00,0x00,0xe0,0xff,0x7f,
+ 0x00,0x00,0x00,0x36,0xf7,0x07,0x00,0x00,0xc0,0xff,0x7f,0x00,0x00,0x00,0xfe,
+ 0xff,0x30,0x00,0x00,0x80,0x10,0x31,0x00,0x00,0x00,0x58,0x92,0x1a,0x00,0x00,
+ 0x00,0x49,0x37,0x00,0x00,0x00,0xe0,0x41,0x03,0x00,0x00,0x00,0x9d,0x34,0x00,
+ 0x00,0x00,0x90,0xa4,0x30,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x04,0x00,
+ 0x0c,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0xc0,0x00,0x01,0x00,0x00,0x00,
+ 0x08,0x10,0x00,0x00,0x00,0x00,0x80,0x19,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,
+ 0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x08,0x10,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0xa0,0xaa,
+ 0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+ 0x00,0x80,0x00,0x00,0x00,0x00,0x0c,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xe0,0xff,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,
+ 0x02,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,
+ 0xe0,0xff,0x07,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x22,0x02,0x00,0x00,0x00,0xe0,0x00,0x07,0x00,0x00,0x00,0x82,0x41,
+ 0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x06,0x00,0x00,0x00,0xa0,0x01,0x07,0x00,0x00,
+ 0x00,0x06,0x61,0x00,0x00,0x00,0x60,0x00,0x06,0x00,0x00,0x00,0x06,0x60,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x02,0x00,0x00,0x00,0x60,0xc3,
+ 0x04,0x00,0x00,0x00,0x82,0x41,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x00,0x00,
+ 0x02,0x40,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x22,0x06,0x00,0x00,
+ 0x00,0x20,0xc6,0x04,0x00,0x00,0x00,0x06,0x41,0x00,0x00,0x00,0x60,0x00,0x04,
+ 0x00,0x00,0x00,0x06,0x40,0x00,0x00,0x00,0x80,0xbd,0x01,0x00,0x00,0x00,0x66,
+ 0x02,0x00,0x00,0x00,0x60,0x34,0x06,0x00,0x00,0x00,0x82,0x61,0x00,0x00,0x00,
+ 0x20,0x00,0x06,0x00,0x00,0x00,0x02,0x60,0x00,0x00,0x00,0x00,0x93,0x00,0x00,
+ 0x00,0x00,0x22,0x02,0x00,0x00,0x00,0x20,0x1c,0x04,0x00,0x00,0x00,0xfe,0x7d,
+ 0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0x82,0x41,0x00,0x00,0x00,0x00,
+ 0xe6,0x00,0x00,0x00,0x00,0x62,0xfe,0x01,0x00,0x00,0x20,0x38,0x04,0x00,0x00,
+ 0x00,0xae,0x6f,0x00,0x00,0x00,0xe0,0xaa,0x06,0x00,0x00,0x00,0x86,0x41,0x00,
+ 0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x00,0x26,0x96,0x00,0x00,0x00,0x60,0x34,
+ 0x06,0x00,0x00,0x00,0x82,0x40,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x00,0x00,
+ 0x02,0x60,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+ 0x00,0x20,0x67,0x04,0x00,0x00,0x00,0x82,0x41,0x00,0x00,0x00,0x20,0x00,0x04,
+ 0x00,0x00,0x00,0x06,0x40,0x00,0x00,0x00,0x00,0x3d,0x01,0x00,0x00,0x00,0x66,
+ 0x06,0x00,0x00,0x00,0x60,0xc3,0x05,0x00,0x00,0x00,0x06,0x61,0x00,0x00,0x00,
+ 0x60,0x00,0x06,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x00,0x66,0x00,0x00,
+ 0x00,0x00,0x22,0x02,0x00,0x00,0x00,0xe0,0x00,0x07,0x00,0x00,0x00,0x82,0x41,
+ 0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x00,0x00,0x02,0x60,0x00,0x00,0x00,0x00,
+ 0xc6,0x00,0x00,0x00,0x00,0x22,0x06,0x00,0x00,0x00,0xe0,0x00,0x07,0x00,0x00,
+ 0x00,0x06,0x41,0x00,0x00,0x00,0x60,0x00,0x04,0x00,0x00,0x00,0x06,0x40,0x00,
+ 0x00,0x00,0x80,0xb9,0x01,0x00,0x00,0x00,0x66,0x02,0x00,0x00,0x00,0xe0,0xff,
+ 0x07,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,
+ 0xfe,0x7f,0x00,0x00,0x00,0x80,0x39,0x01,0x00,0x00,0x00,0x22,0x02,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,
+ 0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x42,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+ 0x00,0x00,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,
+ 0x00,0x00,0x00,0x20,0x38,0x10,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,
+ 0x80,0x01,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,
+ 0x00,0x1c,0x00,0x00,0x00,0x00,0x20,0x30,0x18,0x00,0x00,0x00,0x00,0x07,0x00,
+ 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x46,0x00,0x00,0x00,0x00,0x00,0xe0,
+ 0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x70,0x10,0x1c,0x00,0x00,0x00,
+ 0x00,0x0f,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,
+ 0x00,0x00,0x38,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0xe0,0x11,0x1f,
+ 0x00,0x00,0x00,0xaa,0xaf,0x02,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x66,
+ 0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
+ 0xf0,0xff,0x1f,0x00,0x00,0x00,0xfe,0xff,0x03,0x00,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x00,0xc2,0x3f,0x00,0x00,0x00,0x80,0xc3,0x00,0x00,0x00,0x00,0x30,0x1c,
+ 0x00,0x00,0x00,0xe0,0x13,0x0f,0x00,0x00,0x00,0xf8,0xff,0x01,0x00,0x00,0x00,
+ 0x18,0x00,0x00,0x00,0x00,0xc6,0x04,0x00,0x00,0x00,0xc0,0xe0,0x00,0x00,0x00,
+ 0x00,0x70,0x30,0x00,0x00,0x00,0xe0,0x10,0x1e,0x00,0x00,0x00,0xf0,0xff,0x00,
+ 0x00,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x00,0xc0,0xc1,
+ 0x00,0x00,0x00,0x00,0x30,0x38,0x00,0x00,0x00,0x70,0x30,0x18,0x00,0x00,0x00,
+ 0xe0,0x3f,0x00,0x00,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x46,0x00,0x00,0x00,
+ 0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x20,0x38,0x18,
+ 0x00,0x00,0x00,0xc0,0x3f,0x00,0x00,0x00,0xc0,0x0d,0x00,0x00,0x00,0x00,0x42,
+ 0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,
+ 0x00,0x38,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x80,0x07,0x00,0x00,
+ 0x00,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0xf0,0x00,
+ 0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x80,
+ 0x07,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+ 0x00,0x38,0x00,0x00,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0xe0,0x79,0x00,
+ 0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x03,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,
+ 0x70,0x70,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x30,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,
+ 0x6e,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x00,
+ 0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x10,0x18,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x08,0x20,0x00,0x00,0x00,0xc0,0x10,0x02,0x00,0x00,0x00,0x08,0x20,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x04,0x20,0x00,0x00,0x00,0x40,0x18,0x02,0x00,0x00,0x00,0x04,
+ 0x20,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x30,0x40,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x20,0x93,0x04,0x00,
+ 0x00,0x00,0xc2,0x43,0x00,0x00,0x00,0x20,0xe0,0x03,0x00,0x00,0x00,0xfc,0x40,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x20,
+ 0xfe,0x04,0x00,0x00,0x00,0x62,0x46,0x00,0x00,0x00,0x60,0x38,0x06,0x00,0x00,
+ 0x00,0xee,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc2,0x46,0x00,
+ 0x00,0x00,0x00,0x38,0x04,0x00,0x00,0x00,0x22,0x44,0x00,0x00,0x00,0xc0,0x1e,
+ 0x04,0x00,0x00,0x00,0x86,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x02,0x40,0x00,0x00,0x00,0x20,0x7e,0x04,0x00,0x00,0x00,0x62,0x44,0x00,0x00,
+ 0x00,0x80,0x07,0x04,0x00,0x00,0x00,0x02,0x3e,0x00,0x00,0x00,0xe0,0x01,0x00,
+ 0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x20,0xd3,0x04,0x00,0x00,0x00,0xc2,
+ 0x47,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xe0,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x40,0x18,0x00,0x00,
+ 0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x04,0x20,0x00,0x00,0x00,0x40,
+ 0x10,0x02,0x00,0x00,0x00,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0x08,0x10,0x00,
+ 0x00,0x00,0x80,0x00,0x03,0x00,0x00,0x00,0x08,0x10,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x30,0x0c,0x00,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x30,0x0c,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0xc0,
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0x02,
+ 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x08,0x00,0x00,0x00,0x00,0xfc,0x1f,0x00,0x00,0x00,0x00,0x13,0x00,0x00,
+ 0x00,0x00,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0e,0x00,
+ 0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x04,0x18,0x00,0x00,0x00,0x80,
+ 0x31,0x00,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,
+ 0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x0c,0x08,0x00,
+ 0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,0x06,0x40,0x00,0x00,0x00,0x00,0x70,
+ 0x02,0x00,0x00,0x00,0xe4,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x00,
+ 0x08,0x0c,0x00,0x00,0x00,0xc0,0x40,0x00,0x00,0x00,0x00,0x02,0x60,0x00,0x00,
+ 0x00,0x00,0x1c,0x06,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0x00,0x00,0x22,0x00,
+ 0x00,0x00,0x00,0x18,0x0c,0x00,0x00,0x00,0x60,0xc0,0x00,0x00,0x00,0x00,0x02,
+ 0x40,0x00,0x00,0x00,0x00,0x07,0x02,0x00,0x00,0x00,0x04,0x0e,0x00,0x00,0x00,
+ 0x00,0x23,0x00,0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x00,0x60,0x80,0x01,0x00,
+ 0x00,0x00,0x06,0x40,0x00,0x00,0x00,0xc0,0x01,0x02,0x00,0x00,0x00,0x04,0x38,
+ 0x00,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x00,0x30,0x06,0x00,0x00,0x00,0x60,
+ 0x80,0x00,0x00,0x00,0x00,0x02,0x60,0x00,0x00,0x00,0xc0,0x01,0x06,0x00,0x00,
+ 0x00,0x06,0x38,0x00,0x00,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x20,0x02,0x00,
+ 0x00,0x00,0x40,0xc0,0x00,0x00,0x00,0x00,0x06,0x40,0x00,0x00,0x00,0x00,0x07,
+ 0x02,0x00,0x00,0x00,0x04,0x0e,0x00,0x00,0x00,0x80,0xc1,0x00,0x00,0x00,0x00,
+ 0x60,0x03,0x00,0x00,0x00,0xc0,0x60,0x00,0x00,0x00,0x00,0x02,0x40,0x00,0x00,
+ 0x00,0x00,0x1c,0x06,0x00,0x00,0x00,0x84,0x03,0x00,0x00,0x00,0x80,0x80,0x00,
+ 0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x00,0x80,0x61,0x00,0x00,0x00,0x00,0x02,
+ 0x60,0x00,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x00,0xc6,0x00,0x00,0x00,0x00,
+ 0xc0,0x80,0x01,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x31,0x00,0x00,
+ 0x00,0x00,0x06,0x40,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x3c,0x00,
+ 0x00,0x00,0x00,0x40,0xff,0x01,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x13,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,
+ 0x00,0x1c,0x00,0x00,0x00,0x00,0xc0,0xb5,0x01,0x00,0x00,0x00,0x80,0x00,0x00,
+ 0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x00,0xfc,0x1f,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0xfe,
+ 0x7f,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,
+ 0x00,0x1c,0x00,0x00,0x00,0x00,0xfc,0x1f,0x00,0x00,0x00,0x80,0x3f,0x00,0x00,
+ 0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x3c,0x00,
+ 0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0xfc,0x0f,0x00,0x00,0x00,0x80,
+ 0x7f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,
+ 0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0xf8,0x0f,0x00,
+ 0x00,0x00,0xc0,0x7f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0xfc,
+ 0x07,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,
+ 0xf8,0x0f,0x00,0x00,0x00,0xc0,0xff,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,
+ 0x00,0x00,0xff,0x03,0x00,0x00,0x00,0xfe,0x0f,0x00,0x00,0x00,0x00,0x3f,0x00,
+ 0x00,0x00,0x00,0xf0,0x07,0x00,0x00,0x00,0xe0,0xff,0x01,0x00,0x00,0x00,0xfe,
+ 0x7f,0x00,0x00,0x00,0xc0,0xff,0x07,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,
+ 0x00,0x7f,0x00,0x00,0x00,0x00,0xf0,0x07,0x00,0x00,0x00,0xe0,0xff,0x00,0x00,
+ 0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0xfe,0x3f,
+ 0x00,0x00,0x00,0x80,0x7f,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0xc0,
+ 0xff,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0xff,0x07,0x00,0x00,
+ 0x00,0xfc,0x1f,0x00,0x00,0x00,0x80,0xff,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,
+ 0x00,0x00,0xc0,0x7f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0xfc,
+ 0x03,0x00,0x00,0x00,0xfc,0x03,0x00,0x00,0x00,0x80,0xff,0x00,0x00,0x00,0x00,
+ 0xe0,0x01,0x00,0x00,0x00,0x80,0x7f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,
+ 0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0xc0,0xff,0x01,
+ 0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0xfe,
+ 0x7f,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,
+ 0xc0,0xff,0x01,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,
+ 0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0e,0x00,
+ 0x00,0x00,0x00,0xc0,0xff,0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
+ 0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+
diff --git a/lib/images/amssymb.xpm b/lib/images/amssymb.xpm
new file mode 100644 (file)
index 0000000..164db26
--- /dev/null
@@ -0,0 +1,199 @@
+/* XPM */
+static char *amssymb[] = {
+/* width height num_colors chars_per_pixel */
+"   264   174       16            1",
+/* colors */
+". c #000000",
+"# c #0a0a0a",
+"a c #181818",
+"b c #222222",
+"c c #303030",
+"d c #3a3a3a",
+"e c #4a4a4a",
+"f c #585858",
+"g c #626262",
+"h c #707070",
+"i c #7a7a7a",
+"j c #8a8a8a",
+"k c #989898",
+"l c #a2a2a2",
+"m c #b0b0b0",
+"n c #b8bcb8",
+/* pixels */
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnllnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnhcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnm#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnld..ainnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnkjjjjjjjjjjddnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnafmnj#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnfcccccccccccainnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#nnnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnkalnnnnnnnnnnnnnnnnnnnnnnnnnnnnnijnnnnnnnnnnnnnnmfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlgnnijnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnijnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnicnnnnnnnijnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgfjnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnibmnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdnnnnnnnnnnnnnnndlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndmnmcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgnnnnnnkinnnmcnnnnnnnnnnnnnnnnnnnnnnnnnnnjannnnjcnnnnnnnmcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#efaennnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnibknnnnnnnnnnnnnnnnnnnnnnnnnnnniennnnnnnnnnnnnnmcmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlcmnjennnnnnnnnnnnnnnnnnnnnnnnnnnmb#emnnnj##hnnnjennnnnnnnnnnnnnnnnnnnnnnnnnnafnnnjcnnnnnnnnjennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfnnm#jnnnnnnnnnn",
+"nnnnnnnnnnnnnfcccccccccccccca#innnnnnnnnnnnnnnnnnnnnnnnnnnncbccccccccccccccaalnnnnnnnnnnnnnnnnnnnnnnnfcccccccccccaacc#cnnnnnnnnnnnnnnnnnnnnnnnnnnbemebmnh#jk#cccc#cnnnnnnnnnnnnnnnnnnnnnnnnnnkc.ccb#ccccccccc#cnnnnnnnnnnnnnnnnnnnnnnnnnnfccccccccccccc.mnnnffnnnnnnnnnn",
+"nnnnnnnnnnnnnkjjjjjjjjjjjjjjbemnnnnnnnnnnnnnnnnnnnnnnnnnnnmbijjjjjjjjjjjjjjbgnnnnnnnnnnnnnnnnnnnnnnnnljjjjjjjjjjjbgjiajnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnebg#knnmjjjiajnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjgbjjjjjjjjiajnnnnnnnnnnnnnnnnnnnnnnnnnnljjjjjjjjjjjjj#jnnncgnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnmbgnnnnnnnnnnnnnnnnnnnnnnnnnnnnneknnnnnnnnnnnnnnignnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnghnneknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfaknnnnnnneknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnneknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfblng#mnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnndgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnnnnnnbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf#.cknnnnnnnnnnn",
+"nnnnnnnnnnnnnkjjjjjjjjjjjfdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlmnnnnnnnnnnnnnnmlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmlnnlmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnlmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnfcccccccccca#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnchnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnk#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnhgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnimnnimnnimnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnc.hnnnnnnnnh.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnffnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncg#hnnnnnnh#gcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnffnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncjk#hnnnnh#kjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnffnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnl#.innlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncjnk#hnnh#knjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnffnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbenk..gnh#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncjnnk#hh#knnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnffnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbenignh#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncjnnnk##knnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnceffffccffffecnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnceffffffffffecnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnn##nnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbennh#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncbcccccdnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncjnnnk##knnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnceffffccffffecnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnceffffffffffecnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnn##nnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbeh#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncgjjjjjknnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncjnnk#hh#knnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnffnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfccccb..accccfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncjnk#hnnh#knjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnffnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljjjje#bbjjjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncjk#hnnnnh#kjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnffnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#kmbennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncg#hnnnnnnh#gcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnffnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#knnmbennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnc.hnnnnnnnnh.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnffnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#kmb#kmbennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnncjnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneknj..fnmennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndknndknndknnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfdmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.......blnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnimnnminnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.....ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmejnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh...ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnmgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmhmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkgnnnnnd.amnnnnjhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnmf#emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnme#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.knnnnk.gnnnnmafnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb..innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnmf#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnle#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.#knnnnalnnnmb.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnmf#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnle#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..#gnnncnnnja..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjjjjjf...ajjjjjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnmf#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnle#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....#cfafda....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnf...............bknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnj#ccccccinnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnmf#elnnmfgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngfmnnle#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...agjncnkhc...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnja............fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjbjjjjjjmnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnl#clnnnnf..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..fnnnnlc#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..emnnncnnnng..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmd.........#innnnnnnnnnnnnnnnnnnnnnnnnnnnnnffnnj.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnf#elnnni.#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.innnle#fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.ennnnm.innnnh.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng#......clnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl..jnebnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnmf#elnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnle#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjbnnnnnh.ennnnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm.......fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.bm.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnmf#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnle#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmlnnnnm#..jnnnnmlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.......annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnma.c.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnmf#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnle#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb...#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd...d#...knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni..annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnmf#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnke#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkb.....#innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm..#gnlc..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndknnkdnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnmf#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffffffffflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni.bknnnnf.bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnefmnnnnnnjalnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgffffflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlffjjgfjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgffffflnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgmnnnnnhfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgnnnnnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgmnnnnnhfnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnihnnnnnnnnkfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnihnnnifnnnkfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnihnnnnnnnnkfnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmennnnnnnnnngjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmennnnfcnnnngjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmennnnkjnnnngjnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnjnnnnnnnnifhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhfhmnnnnnnninnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhknnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhknfgnifnjdnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhknnmcabaknnnfnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncnnnnnnkb...bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd...#gnnnnnmcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnniadiff#fnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnednngannnfnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnfhnnnng.dknldfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.fjga.clnnneennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnlffffffjnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnia.hmnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnncjnnn.nnnfnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnl#fjhc#innnnmbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndgnnnnf..dfc.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnhbdcbfmnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnndfnnj#nnnfnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnh#..clnnnnnncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncnnnnnnkc...gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#..gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmnnnnnnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmndakjfmc#nnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmnnk#ef#hnnnennnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnmjlnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnljlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkhnnnnnnnnnnlgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkhnlmngdnnknlgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkhnnnmgflnnnlgnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnemnnnnnnnnnemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnemnnnfcnnnnemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnemnnnnnnnnnemnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#..gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmemnnnnnnnfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmemnnmlnnnfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmemnnnnnnnfknnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmggknnlhflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfhnnnnjfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmggknnlhflnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmiffhlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlffffjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmiffhlnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfa#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.kddnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..........#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfnm#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnle.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd#gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#jnnnnnnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngamnngamnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnle#fbjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjbf#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.fannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfcnnnnnnm#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#jnnnncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnle#fmncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnmf#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneenahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm.lnnnnnhbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnddnnnnnk.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnle#fmnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnmf#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#kngcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneennnnnahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#mnnnnnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnle#fmnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnmf#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfcnnm#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.mnnniannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnagnnnnnnnmahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnme#fmnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnmf#emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#jnnnfdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfnnncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfnnnnnnnl#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmcahnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnhacmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhannnnl.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#mnj#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.knnnnnndennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnjcahnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnhacjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnahnnnnneennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbhnefnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfbnnnnni#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnjcahnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnhacjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#nnnnnnk#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhal.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnagnnnmahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnjcahnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnhacjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfnnnnnnncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnabennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#lnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnjcnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnjcahcjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjchacjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.ffffffffd#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnednk.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnjc.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.cjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmffffffffffgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#ibfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk...dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..........#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnle.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#.........cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.....amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnle...jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl..annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#......fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnle.....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm........bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd........knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnle.......jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#...cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.......hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.........cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnle.........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.........elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl......annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna..........hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnme...........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...........emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#.....dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc..........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmc...........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...........cmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.......lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.........ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnjc.........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.........cjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.......ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.......#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnjc.......jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......cjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj........#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh...lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna......hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnjc.....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....cjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.........fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnjc...jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...cjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..........#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne....lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnjc.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.cjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmffffffffffgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+};
+
+
diff --git a/lib/images/psnfss1.xbm b/lib/images/psnfss1.xbm
new file mode 100644 (file)
index 0000000..7498b56
--- /dev/null
@@ -0,0 +1,388 @@
+#define psnfss1_width 264
+#define psnfss1_height 174
+static char psnfss1_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,0x00,
+ 0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0x30,0x3c,
+ 0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,
+ 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,0x00,0x00,
+ 0x00,0x08,0x70,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x38,0x18,0x00,
+ 0x00,0x00,0x80,0xc3,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xff,
+ 0x03,0x00,0x00,0x00,0x04,0xe0,0x00,0x00,0x00,0xf0,0x07,0x00,0x00,0x00,0x00,
+ 0x8c,0x31,0x00,0x00,0x00,0xc0,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0x06,0xc0,0x01,0x00,0x00,0xe0,0x0f,0x00,
+ 0x00,0x00,0x00,0x86,0x61,0x00,0x00,0x00,0x60,0xc3,0x06,0x00,0x00,0x00,0x78,
+ 0x00,0x00,0x00,0x00,0xe0,0xff,0x0f,0x00,0x00,0x00,0x02,0xc0,0x01,0x00,0x00,
+ 0xf0,0x0f,0x00,0x00,0x00,0x00,0x86,0x61,0x00,0x00,0x00,0x60,0x66,0x06,0x00,
+ 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xe0,0xff,0x0f,0x00,0x00,0x00,0x02,0x80,
+ 0x03,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0x82,0x41,0x00,0x00,0x00,0x20,
+ 0x3c,0x04,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0xf0,0xff,0x0f,0x00,0x00,
+ 0x00,0x02,0x80,0x03,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0xfa,0xdf,0x00,
+ 0x00,0x00,0x30,0x18,0x0c,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0xe0,0xff,
+ 0x0f,0x00,0x00,0x00,0x02,0x80,0x03,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,
+ 0xb3,0x5f,0x00,0x00,0x00,0x20,0x3c,0x04,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,
+ 0x00,0xe0,0xff,0x0f,0x00,0x00,0x00,0x02,0x80,0x01,0x00,0x00,0xf0,0x0f,0x00,
+ 0x00,0x00,0x00,0x86,0x41,0x00,0x00,0x00,0x60,0x66,0x04,0x00,0x00,0x00,0xfe,
+ 0x00,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0x02,0xc0,0x01,0x00,0x00,
+ 0xe0,0x0f,0x00,0x00,0x00,0x00,0x06,0x61,0x00,0x00,0x00,0x60,0xc7,0x06,0x00,
+ 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xc0,0xff,0x07,0x00,0x00,0x00,0x04,0xc0,
+ 0x01,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x84,0x21,0x00,0x00,0x00,0xc0,
+ 0x40,0x06,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,
+ 0x00,0x0c,0xf0,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,0x0c,0x31,0x00,
+ 0x00,0x00,0x80,0x81,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,
+ 0x01,0x00,0x00,0x00,0x10,0x70,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,
+ 0x38,0x1c,0x00,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0xe0,0x1f,0x00,0x00,0x00,0xe0,0x01,0x00,
+ 0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x80,0x01,
+ 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x80,
+ 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+ 0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,
+ 0x00,0x00,0x80,0x0d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,
+ 0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,
+ 0xe0,0x0f,0x00,0x00,0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x64,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x7e,0x00,
+ 0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x40,0x08,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xe7,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,
+ 0x80,0xb9,0x01,0x00,0x00,0x00,0xf8,0x3f,0x00,0x00,0x00,0x60,0x18,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc3,0x01,0x00,0x00,0x00,0xf8,0x1f,
+ 0x00,0x00,0x00,0xc0,0xd7,0x03,0x00,0x00,0x00,0xfc,0x7f,0x00,0x00,0x00,0x30,
+ 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x0f,0x00,0x00,
+ 0x00,0xfe,0xff,0x00,0x00,0x00,0xe0,0xe7,0x0f,0x00,0x00,0x00,0xfe,0x7f,0x00,
+ 0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x81,
+ 0x03,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0xe0,0xc3,0x07,0x00,0x00,0x00,
+ 0xfe,0x7f,0x00,0x00,0x00,0x60,0x18,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+ 0x00,0x00,0xc7,0x01,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0xc0,0x9b,0x03,
+ 0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0x60,0x18,0x00,0x00,0x00,0x00,0x0e,
+ 0x00,0x00,0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,
+ 0x00,0x7d,0x01,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0xc0,0x08,0x00,0x00,
+ 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0xc0,0x03,
+ 0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x80,
+ 0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+ 0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,
+ 0x00,0x00,0x80,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,
+ 0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,
+ 0xc0,0x03,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x18,0x00,
+ 0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xa0,0xaa,0x00,0x00,0x00,0x00,0xf8,0x7f,0x00,0x00,0x00,0xa0,0xaa,0x00,
+ 0x00,0x00,0x00,0xa8,0x2a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,
+ 0x15,0x00,0x00,0x00,0xe0,0xee,0x01,0x00,0x00,0x00,0xf8,0x7f,0x00,0x00,0x00,
+ 0xe0,0xdd,0x01,0x00,0x00,0x00,0xfc,0x7f,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+ 0x00,0x00,0xfe,0x3f,0x00,0x00,0x00,0x20,0x00,0x03,0x00,0x00,0x00,0xf8,0x7f,
+ 0x00,0x00,0x00,0x10,0x00,0x07,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,
+ 0x0c,0x00,0x00,0x00,0x00,0x0e,0x10,0x00,0x00,0x00,0x20,0x00,0x07,0x00,0x00,
+ 0x00,0x5f,0x75,0x00,0x00,0x00,0x20,0x00,0x07,0x00,0x00,0x00,0x92,0x74,0x00,
+ 0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x0c,0x10,0x00,0x00,0x00,0x20,0x00,
+ 0x07,0x00,0x00,0x00,0x02,0x70,0x00,0x00,0x00,0x20,0x00,0x07,0x00,0x00,0x00,
+ 0x02,0x70,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x1c,0x18,0x00,0x00,
+ 0x00,0x20,0x00,0x07,0x00,0x00,0x00,0x01,0x70,0x00,0x00,0x00,0x20,0x00,0x07,
+ 0x00,0x00,0x00,0x03,0x70,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x18,
+ 0x08,0x00,0x00,0x00,0x20,0x00,0x07,0x00,0x00,0x00,0x02,0x70,0x00,0x00,0x00,
+ 0x20,0x00,0x07,0x00,0x00,0x00,0x02,0x70,0x00,0x00,0x00,0x00,0x19,0x00,0x00,
+ 0x00,0x00,0x38,0x04,0x00,0x00,0x00,0x20,0x00,0x07,0x00,0x00,0x00,0x02,0x70,
+ 0x00,0x00,0x00,0x20,0x00,0x07,0x00,0x00,0x00,0x02,0x70,0x00,0x00,0x00,0x00,
+ 0x39,0x00,0x00,0x00,0x00,0x30,0x06,0x00,0x00,0x00,0x20,0x00,0x07,0x00,0x00,
+ 0x00,0x02,0x70,0x00,0x00,0x00,0x20,0x00,0x07,0x00,0x00,0x00,0x02,0x70,0x00,
+ 0x00,0x00,0x80,0x30,0x00,0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x00,0x20,0x00,
+ 0x07,0x00,0x00,0x00,0x02,0x70,0x00,0x00,0x00,0x30,0x00,0x07,0x00,0x00,0x00,
+ 0x02,0x70,0x00,0x00,0x00,0xc0,0x70,0x00,0x00,0x00,0x00,0x70,0x02,0x00,0x00,
+ 0x00,0x20,0x00,0x07,0x00,0x00,0x00,0x02,0x70,0x00,0x00,0x00,0x20,0x00,0x07,
+ 0x00,0x00,0x00,0x02,0x70,0x00,0x00,0x00,0x40,0x70,0x00,0x00,0x00,0x00,0xe0,
+ 0x03,0x00,0x00,0x00,0x30,0x00,0x07,0x00,0x00,0x00,0x03,0x70,0x00,0x00,0x00,
+ 0x20,0x00,0x07,0x00,0x00,0x00,0x02,0x70,0x00,0x00,0x00,0x40,0x60,0x00,0x00,
+ 0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0x02,0x70,
+ 0x00,0x00,0x00,0xa0,0xff,0x07,0x00,0x00,0x00,0x03,0x70,0x00,0x00,0x00,0x60,
+ 0xe0,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,
+ 0x00,0x02,0x10,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0x02,0x30,0x00,
+ 0x00,0x00,0x20,0xc0,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x80,0xff,
+ 0x07,0x00,0x00,0x00,0xfe,0x1f,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,0x00,
+ 0xfe,0x1f,0x00,0x00,0x00,0xf0,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,
+ 0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,
+ 0xfe,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xff,0x03,0x00,
+ 0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,
+ 0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0xfe,
+ 0xff,0x01,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,
+ 0xe0,0x0f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x70,0x00,0x00,
+ 0x00,0x00,0xfc,0xff,0x01,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,
+ 0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0xff,0x7f,0x00,0x00,0x00,0x00,
+ 0x78,0x00,0x00,0x00,0x00,0xf8,0xff,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
+ 0x00,0x1e,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,
+ 0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0xf8,0xff,0x00,0x00,0x00,0x20,0x00,
+ 0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,
+ 0xfe,0x7f,0x00,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0xf0,0x7f,0x00,0x00,
+ 0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,
+ 0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0xf0,
+ 0x7f,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,
+ 0xe0,0x0f,0x00,0x00,0x00,0x00,0xff,0x7f,0x00,0x00,0x00,0x00,0xfe,0x03,0x00,
+ 0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,
+ 0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,
+ 0xff,0x03,0x00,0x00,0x00,0xe0,0x1f,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
+ 0x00,0x1e,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,
+ 0x00,0x00,0x00,0xff,0x07,0x00,0x00,0x00,0xc0,0x1f,0x00,0x00,0x00,0x60,0x00,
+ 0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,
+ 0xff,0x7f,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,
+ 0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,
+ 0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x80,0xff,0x0f,0x00,0x00,0x00,0x80,
+ 0x0f,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,
+ 0xe0,0x0f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0xc0,0xff,0x1f,0x00,
+ 0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x1e,0x00,
+ 0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0xff,0x7f,0x00,0x00,0x00,0xe0,
+ 0xff,0x1f,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
+ 0x00,0x1f,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,
+ 0x00,0x00,0xe0,0xff,0x3f,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
+ 0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,
+ 0xc0,0x01,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x3c,0x00,
+ 0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x3c,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,
+ 0x00,0x38,0x00,0x00,0x00,0x00,0xc4,0x11,0x00,0x00,0x00,0xc0,0x3c,0x03,0x00,
+ 0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x80,0x01,
+ 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x8e,0x39,0x00,0x00,0x00,0xe0,
+ 0xdd,0x03,0x00,0x00,0x00,0xf8,0x07,0x00,0x00,0x00,0x40,0x13,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0xfe,0x3f,0x00,
+ 0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0xe0,0x1a,
+ 0x00,0x00,0x00,0x00,0x0e,0x71,0x00,0x00,0x00,0xe0,0x11,0x07,0x00,0x00,0x00,
+ 0x38,0x0e,0x00,0x00,0x00,0xc0,0xff,0x01,0x00,0x00,0x00,0xf0,0xff,0x00,0x00,
+ 0x00,0x00,0x07,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0xe0,0xff,0x0f,
+ 0x00,0x00,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0xe0,
+ 0xff,0x03,0x00,0x00,0x80,0x05,0x00,0x00,0x00,0x00,0x9e,0xf9,0x00,0x00,0x00,
+ 0xe0,0xdb,0x0f,0x00,0x00,0x00,0x30,0x06,0x00,0x00,0x00,0x80,0xff,0x00,0x00,
+ 0x00,0x00,0xf0,0xff,0x01,0x00,0x00,0xe0,0x1a,0x00,0x00,0x00,0x00,0x0e,0x71,
+ 0x00,0x00,0x00,0x00,0x18,0x02,0x00,0x00,0x00,0x3c,0x1e,0x00,0x00,0x00,0xc0,
+ 0xff,0x03,0x00,0x00,0x00,0xf0,0x3f,0x00,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0xde,0x3f,0x00,
+ 0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0xf8,0x0f,0x00,0x00,0x00,0x00,0x03,
+ 0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,
+ 0xce,0x39,0x00,0x00,0x00,0xe0,0xbd,0x03,0x00,0x00,0x00,0xf8,0x03,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x38,0x00,
+ 0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x40,0x1c,0x03,0x00,0x00,0x00,0x7c,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,
+ 0x00,0x3c,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,
+ 0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,
+ 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,
+ 0x1c,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0x9c,0x01,
+ 0x00,0x00,0x00,0x00,0x18,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x3f,0x00,0x00,0x00,
+ 0x00,0xfe,0x03,0x00,0x00,0x00,0xc0,0x2f,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f,
+ 0x00,0x00,0x00,0x00,0xfe,0x07,0x00,0x00,0x00,0x20,0x2c,0x06,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
+ 0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0xff,0x07,0x00,0x00,0x00,0x20,0x30,0x02,
+ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x3c,
+ 0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0xfe,0x07,0x00,0x00,0x00,
+ 0x20,0xe0,0x01,0x00,0x00,0x00,0x86,0x03,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,
+ 0x00,0x00,0xf8,0x01,0x00,0x00,0x00,0xc0,0x1f,0x00,0x00,0x00,0x00,0xfe,0x03,
+ 0x00,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x00,0xce,0x07,0x00,0x00,0x00,0x00,
+ 0x71,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,0x00,
+ 0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0xef,0x01,0x00,0x00,0x00,0xd8,0x0f,0x00,
+ 0x00,0x00,0x00,0x82,0x03,0x00,0x00,0x00,0xe0,0xff,0x00,0x00,0x00,0x00,0x06,
+ 0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x80,0xff,0x01,0x00,0x00,0x00,
+ 0xd4,0x0f,0x00,0x00,0x00,0x00,0x0c,0x1c,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xff,0x03,
+ 0x00,0x00,0x00,0xea,0xcf,0x00,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0x40,
+ 0xa0,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,
+ 0x80,0xff,0x01,0x00,0x00,0x00,0xe7,0x8f,0x00,0x00,0x00,0x00,0xfe,0x03,0x00,
+ 0x00,0x00,0x20,0x1c,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0xf8,0x00,
+ 0x00,0x00,0x00,0x80,0xff,0x01,0x00,0x00,0x00,0xe3,0x3f,0x00,0x00,0x00,0x00,
+ 0x7f,0x00,0x00,0x00,0x00,0x90,0x03,0x00,0x00,0x00,0x80,0x1f,0x00,0x00,0x00,
+ 0x00,0xfc,0x01,0x00,0x00,0x00,0x80,0x7f,0x00,0x00,0x00,0x00,0xce,0x1f,0x00,
+ 0x00,0x00,0xc0,0x0f,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x80,0x1f,
+ 0x00,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x00,0x00,0x9f,0x00,0x00,0x00,0x00,
+ 0x04,0x07,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+ 0x00,0x80,0x1f,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x9e,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,
+ 0x00,0xdc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,
+ 0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+
diff --git a/lib/images/psnfss1.xpm b/lib/images/psnfss1.xpm
new file mode 100644 (file)
index 0000000..6e932b2
--- /dev/null
@@ -0,0 +1,199 @@
+/* XPM */
+static char *psnfss1[] = {
+/* width height num_colors chars_per_pixel */
+"   264   174       16            1",
+/* colors */
+". c #000000",
+"# c #0a0a0a",
+"a c #181818",
+"b c #222222",
+"c c #303030",
+"d c #3a3a3a",
+"e c #4a4a4a",
+"f c #585858",
+"g c #626262",
+"h c #707070",
+"i c #7a7a7a",
+"j c #8a8a8a",
+"k c #989898",
+"l c #a2a2a2",
+"m c #b0b0b0",
+"n c #b8bcb8",
+/* pixels */
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnkfccdhmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlgeccegmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcfjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnlc......#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmffknnlga.emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...clnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhb#cc#bhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnib....ahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnk#.........fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkdlnnnnnnne.#knnnnnnnnnnnnnnnnnnnnnnnnnnnnj....#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdainlkniadmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnme#fknnkf#dmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnma...........innnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcmnnnnnnnnne.#mnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncbmnnfcnnmbcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndbknnnnnnlbdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnf............#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfhnnnnnnnnnnna.ennnnnnnnnnnnnnnnnnnnnnnnnnnj......fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#mnnnfcnnnm#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#khennnnehm#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfcdinnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnn#.............hnnnnnnnnnnnnnnnnnnnnnnnnnnnnncnnnnnnnnnnnnh..lnnnnnnnnnnnnnnnnnnnnnnnnnnj......#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnafnnnnfcnnnnfannnnnnnnnnnnnnnnnnnnnnnnnnnnnnafnk#enne#knfannnnnnnnnnnnnnnnnnnnnnnnnnnnnnma....fnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnk..............fnnnnnnnnnnnnnnnnnnnnnnnnnnnnlennnnnnnnnnnnl..hnnnnnnnnnnnnnnnnnnnnnnnnnnj.......jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.lnnnnfcnnnnl.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.knnk#ee#knnl.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnne......knnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj..............cnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnnnn..fnnnnnnnnnnnnnnnnnnnnnnnnnnj.......jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.ncccca#ccccn.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.nnnnk..knnnn.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#......fnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj..............cnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnnnn..fnnnnnnnnnnnnnnnnnnnnnnnnnnj.......jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.nffffcaffffn.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.nnnne#bennnn.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#......fnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnm..............fnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcnnnnnnnnnnnnj..innnnnnnnnnnnnnnnnnnnnnnnnnj.......knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm.jnnnnfcnnnnj.mnnnnnnnnnnnnnnnnnnnnnnnnnnnnm.jnne#kk#ennj.mnnnnnnnnnnnnnnnnnnnnnnnnnnnnne......knnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnc.............knnnnnnnnnnnnnnnnnnnnnnnnnnnnncmnnnnnnnnnnne.#mnnnnnnnnnnnnnnnnnnnnnnnnnnj......annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncennnnfcnnnnednnnnnnnnnnnnnnnnnnnnnnnnnnnnnndenf#knnk#fnednnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#....ennnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnj............cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnk..fnnnnnnnnnnnnnnnnnnnnnnnnnnnj......hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.knnnfcnnnk.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.hmknnnnkkj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfcdhnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnne..........#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfhnnnnnnnnka.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf#knnhfnnk#fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.gnnnnnni#gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnne........aknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffmnnnnnh#.fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....dmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.eknnke.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#bgjjgc.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnjc....afmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjedffea#ejnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..bhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfb..bflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfb..bflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnmjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjjknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnlinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnminnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfcecnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnmbejnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb..#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.kl.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnfehbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng..dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc....#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.....hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneennfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnh.hm.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmk#...hnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.......hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.lnnm#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnh.anne.emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#.....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbbmk#.hne#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.........hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncennnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnld.dknnme.bjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf........clnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb..bmkhne..#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb...........hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#mnnnnm#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnlefimnnnnnnmifdhnnnnnnnnnnnnnnnnnnnnnnnnnnnnme#...........dinnnnnnnnnnnnnnnnnnnnnnnnnnnnmb....bnnf....#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.............innnnnnnnnnnnnnnnnnnnnnnnnnnngannnnnnbgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnkecflnnnnlgcdinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf..........cinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....hnmk#...bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnne............bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#hnnnnj#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfmnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnkb.fnni.#gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlb......#innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh..hnebmk#.emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne..........bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfannnncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.fnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnmb.lna#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne....#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhhne..bmkfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne........bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmahnnh#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcknnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnmbgk.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc..#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne....bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne......bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhannahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnkcffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh....ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne....bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnahhannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnedmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne..bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhaahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnaannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmjjjjjjjjjjjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffffffffffffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjjjjjjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjjjjjjjjjjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjjjjjjjjjnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjcffffffffffannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcffffffffffbjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnelnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.accccccccacnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjfnnnnnnnnnncjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjj............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.cnnnnnnnncjnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcffffffffffa..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjejjjjjjjjjjb..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#.jnnnnnnjcnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnma#.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.ennnnnncjnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngff.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl..lnnnnjcnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnaml..lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.ennnncjnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhennd.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..mnnjcnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnalnni.#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.fnncjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniennnna.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.#mjcnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncknnnnf.bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#.gcjnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnm..knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.#cnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjacccccccccc#..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnncccnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcffffffffffa..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnc.annnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnne.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm..jnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnn............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnncbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlbnnnnnnnj.#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnecnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnn............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjacccccccccc#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjacccccccccccmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne...........hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnlflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlffffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfffffffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlffffffffffffffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmffffffffffffffffinnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd...............jnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl..............ennnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf...lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf............#lnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl....dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#...........fnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh..........amnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni......annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb.........hnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.......gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj........cnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf........#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.......knnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.........ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.....ennnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne...........knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....#mnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj............cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnma...fnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb.............hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni..annnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh..............amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.innnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#...............fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmedknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfdmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhfflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne..#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncflnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc...jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh..cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnc..jnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..chnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnlknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjhnnnf.cnnnhjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmagnnc..jnkcfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne...#flnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnndannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.cjnf.cnjc.annnnnnnnnnnnnnnnnnnnnnnnnnnnnnne..bkc..jf..#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.....chnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnjingenkinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkmnnnmgnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmd...egcee...dmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#....#..#....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.......#flnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnf.hjik#dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.#knnjfnnmb.#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfceinniennkfcemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjb.bnnnb.bjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf.........ajnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.........dinnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnlhffhknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...#gi..fhb...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnk....#cecea....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhjnnnjgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnld.....#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni...........afmnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnlhffhknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl...blm#.ime...gnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#..#ehgeifa...gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcgnnngcknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#......elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..........#flnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnf.hjik#dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhcdmnnminnnfcemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljjnnnhcnnnkginnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf..#mnm#..emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnja..........fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#........chnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnjingenkhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#..ajf.cja..#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#...aa..c....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd......#flnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnndbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#.innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne#fnnf.cnnf#dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..fmc..jja.amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....bhnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnlknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd..#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlmnnnf.cnnnmlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneknnc..jnnfinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna..#eknnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc...knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng..cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.bhmnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh..dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfknnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnlfcccfjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlecinkddjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljnnfdknnndhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnk#......hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb...g#...lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngfeafdmennj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnd.......#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.........fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmnnmfbmfnnmaannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhlnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnc........mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.........fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlbnnnnnkcennnbknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkacglnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbafinnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnne.......#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.........hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.lnnnnnndfhilnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.hnnnnfcdknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmegfdglnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmc..#dhlnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmb.....#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.......ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnngcdkimjknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngccmng....knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcknkfdglnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.....bfknnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnh#..fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnle...cinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh...dib..ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjffgf....dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdknnnkfdglnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.......#ehmnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnmahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb...ac....knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniililc....bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfhnnnnnkfeglnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfacccefffd#ennnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnninnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn..........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfkgnh#.....nngdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmd........afgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcmnnnnkfdglnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnfcelnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfcemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn..........mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebfnnc......jnfhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb......aeinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcmnnkfdglnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnne...#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb...bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc........hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncdnlnd......#ejnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#....cgknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnjfdglnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnl.....ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.....hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh......cjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..fnlb....#fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#.#eimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhaeehlnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnj.....cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb...#jnilnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjgmnnniffjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhbfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhdhmnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnm#....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb..innadnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnh#..ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#cjecknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnmjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+};
+
+
diff --git a/lib/images/psnfss2.xbm b/lib/images/psnfss2.xbm
new file mode 100644 (file)
index 0000000..60aaf59
--- /dev/null
@@ -0,0 +1,388 @@
+#define psnfss2_width 264
+#define psnfss2_height 174
+static char psnfss2_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
+ 0x7c,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3a,0x00,0x00,
+ 0x00,0x00,0x00,0x89,0x01,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x0c,0x37,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,
+ 0x6e,0x00,0x03,0x00,0x00,0x80,0x18,0x02,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,
+ 0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x84,0x27,0x00,0x00,0x00,0x20,0x01,0x00,
+ 0x00,0x00,0x00,0x65,0xe0,0x04,0x00,0x00,0x40,0x38,0x02,0x00,0x00,0x00,0x80,
+ 0x01,0x00,0x00,0x00,0xe0,0xff,0x03,0x00,0x00,0x00,0x86,0x4f,0x00,0x00,0x00,
+ 0x30,0x01,0x7c,0x00,0x00,0x00,0x56,0x18,0x06,0x00,0x00,0x20,0x3c,0x04,0x00,
+ 0x00,0x00,0x80,0x07,0x00,0x00,0x00,0xe0,0xe3,0x03,0x00,0x00,0x00,0xc2,0xc1,
+ 0x00,0x00,0x00,0xe0,0x03,0x3f,0x00,0x00,0x00,0xaa,0x0f,0x01,0x00,0x00,0x20,
+ 0x00,0x08,0x00,0x00,0x00,0x02,0x07,0x00,0x00,0x00,0xf0,0xbe,0x03,0x00,0x00,
+ 0x00,0xe2,0x80,0x00,0x00,0x00,0x40,0xef,0x07,0x00,0x00,0x00,0x78,0xc3,0x00,
+ 0x00,0x00,0x20,0x3c,0x08,0x00,0x00,0x00,0x86,0x07,0x00,0x00,0x00,0x40,0x63,
+ 0x02,0x00,0x00,0x00,0x62,0x80,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,
+ 0x80,0x35,0x00,0x00,0x00,0x10,0x3c,0x08,0x00,0x00,0x00,0xfe,0xff,0x00,0x00,
+ 0x00,0x00,0x63,0x00,0x00,0x00,0x00,0x62,0x80,0x00,0x00,0x00,0x00,0xf8,0x03,
+ 0x00,0x00,0x00,0x50,0x2e,0x00,0x00,0x00,0x20,0xff,0x08,0x00,0x00,0x00,0xf6,
+ 0x7f,0x00,0x00,0x00,0x80,0xe3,0x00,0x00,0x00,0x00,0x72,0x80,0x00,0x00,0x00,
+ 0xc0,0xcf,0x1f,0x00,0x00,0x00,0xcc,0xc6,0x00,0x00,0x00,0xa0,0xff,0x01,0x00,
+ 0x00,0x00,0x06,0x07,0x00,0x00,0x00,0x80,0xf7,0x00,0x00,0x00,0x00,0xf2,0x40,
+ 0x00,0x00,0x00,0x20,0x01,0x7e,0x00,0x00,0x00,0x7a,0x09,0x01,0x00,0x00,0xe0,
+ 0xc3,0x0b,0x00,0x00,0x00,0x82,0x07,0x00,0x00,0x00,0x80,0xff,0x00,0x00,0x00,
+ 0x00,0xf4,0x40,0x00,0x00,0x00,0x20,0x01,0x30,0x00,0x00,0x00,0x46,0x30,0x06,
+ 0x00,0x00,0x80,0x01,0x05,0x00,0x00,0x00,0x80,0x07,0x00,0x00,0x00,0x00,0x52,
+ 0x00,0x00,0x00,0x00,0x50,0x30,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,
+ 0x66,0x40,0x04,0x00,0x00,0x40,0x00,0x02,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x5a,0x80,0x03,0x00,0x00,0x80,0x01,0x01,0x00,0x00,0x00,0xc0,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0xec,0x00,0x00,
+ 0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x07,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa8,0x05,0x00,
+ 0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xff,
+ 0x03,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x60,0x05,0x00,0x00,0x00,
+ 0xa8,0x02,0x00,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,
+ 0x00,0x10,0x00,0x02,0x00,0x00,0x00,0xc0,0xff,0x01,0x00,0x00,0xe0,0xcd,0x74,
+ 0x00,0x00,0x00,0xa8,0x02,0x00,0x00,0x00,0x00,0x72,0x00,0x00,0x00,0x00,0x1c,
+ 0x70,0x00,0x00,0x00,0x20,0x80,0x02,0x00,0x00,0x00,0xfe,0xff,0x07,0x00,0x00,
+ 0x60,0x83,0x41,0x00,0x00,0x00,0xd0,0x02,0x00,0x00,0x00,0x00,0x79,0x00,0x00,
+ 0x00,0x00,0x12,0xa0,0x00,0x00,0x00,0x90,0x1c,0x02,0x00,0x00,0x00,0xfc,0xbf,
+ 0x07,0x00,0x00,0x70,0x21,0x3f,0x00,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0x80,
+ 0x9c,0x1e,0x00,0x00,0x00,0xea,0x7f,0x01,0x00,0x00,0x00,0x1e,0x02,0x00,0x00,
+ 0x00,0xfe,0x3f,0x00,0x00,0x00,0x60,0x65,0x02,0x00,0x00,0x00,0x1c,0x02,0x00,
+ 0x00,0x00,0x00,0x0e,0x12,0x00,0x00,0x00,0x1d,0x20,0x06,0x00,0x00,0x30,0x3e,
+ 0x00,0x00,0x00,0x00,0xfd,0x3f,0x00,0x00,0x00,0x60,0x19,0x07,0x00,0x00,0x00,
+ 0xf4,0x05,0x00,0x00,0x00,0x40,0x0e,0x12,0x00,0x00,0x00,0x0d,0x20,0x03,0x00,
+ 0x00,0x00,0x49,0x02,0x00,0x00,0x00,0xfd,0x3f,0x00,0x00,0x00,0x70,0xe1,0x04,
+ 0x00,0x00,0x00,0xe6,0x04,0x00,0x00,0x00,0xc0,0x17,0x10,0x00,0x00,0x00,0xf4,
+ 0xbf,0x01,0x00,0x00,0x60,0x80,0x02,0x00,0x00,0x00,0xfe,0x1f,0x00,0x00,0x00,
+ 0x60,0xc7,0x05,0x00,0x00,0x00,0x6b,0x04,0x00,0x00,0x00,0xa0,0x00,0x16,0x00,
+ 0x00,0x00,0x12,0x60,0x00,0x00,0x00,0x60,0x55,0x03,0x00,0x00,0x00,0xe2,0x1f,
+ 0x00,0x00,0x00,0xe0,0xa9,0x06,0x00,0x00,0x00,0x3a,0x06,0x00,0x00,0x00,0xc0,
+ 0xb3,0x12,0x00,0x00,0x00,0xbc,0x35,0x00,0x00,0x00,0x90,0x92,0x00,0x00,0x00,
+ 0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x02,0x00,
+ 0x00,0x00,0xc0,0x8a,0x1a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x04,0x03,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x30,
+ 0x00,0x00,0x00,0x00,0x60,0x00,0x06,0x00,0x00,0x00,0x18,0x1c,0x00,0x00,0x00,
+ 0x00,0x18,0x00,0x00,0x00,0x00,0x60,0x06,0x00,0x00,0x00,0x80,0x05,0x00,0x00,
+ 0x00,0x00,0x70,0x00,0x00,0x00,0x00,0xe0,0x00,0x07,0x00,0x00,0x00,0x3c,0x3c,
+ 0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0xa0,0x03,0x00,0x00,0x00,0x00,
+ 0x0c,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0xc0,0x81,0x01,0x00,0x00,
+ 0x00,0x7e,0x7f,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0xa0,0x03,0x00,
+ 0x00,0x00,0xa0,0x1d,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x80,0xc3,
+ 0x01,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,
+ 0xe0,0x07,0x00,0x00,0x00,0x50,0x24,0x00,0x00,0x00,0x00,0xfe,0x03,0x00,0x00,
+ 0x00,0x00,0xe7,0x00,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0x00,0x18,0x00,
+ 0x00,0x00,0x00,0xb6,0x7b,0x00,0x00,0x00,0x10,0x60,0x00,0x00,0x00,0x00,0xfe,
+ 0x03,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,
+ 0x40,0xbd,0x02,0x00,0x00,0x00,0xbe,0x5d,0x00,0x00,0x00,0xe0,0x7c,0x00,0x00,
+ 0x00,0x00,0xb5,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0xf0,0x0f,
+ 0x00,0x00,0x00,0xf0,0xe7,0x07,0x00,0x00,0x00,0xfd,0x7f,0x00,0x00,0x00,0xc0,
+ 0x7c,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+ 0x00,0xf8,0x0f,0x00,0x00,0x00,0xe0,0xe7,0x07,0x00,0x00,0x00,0xfe,0x7f,0x00,
+ 0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x76,
+ 0x00,0x00,0x00,0x00,0xfc,0x1f,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
+ 0xb6,0x6b,0x00,0x00,0x00,0x80,0x0c,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+ 0x00,0x00,0xe7,0x00,0x00,0x00,0x00,0xfe,0x3f,0x00,0x00,0x00,0x00,0x18,0x00,
+ 0x00,0x00,0x00,0xa9,0x17,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x30,
+ 0x00,0x00,0x00,0x00,0x80,0xc3,0x01,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,
+ 0x00,0x1c,0x00,0x00,0x00,0x00,0xa0,0x03,0x00,0x00,0x00,0x00,0x0d,0x00,0x00,
+ 0x00,0x00,0x70,0x00,0x00,0x00,0x00,0xc0,0x80,0x03,0x00,0x00,0x00,0x7c,0x3e,
+ 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0xe0,0x05,0x00,0x00,0x00,0x80,
+ 0x0c,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0xe0,0x00,0x07,0x00,0x00,
+ 0x00,0x38,0x1e,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0xa0,0x03,0x00,
+ 0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x60,0x00,
+ 0x06,0x00,0x00,0x00,0x10,0x08,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
+ 0xc0,0x07,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,
+ 0x40,0x01,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x08,0x1c,0x00,0x00,0x00,0x00,0x7e,0x00,
+ 0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0xe1,0x00,0x00,0x00,0x00,0x1c,0x1e,0x00,0x00,0x00,
+ 0x00,0x3e,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,
+ 0x00,0x00,0x50,0x01,0x00,0x00,0x00,0x80,0x73,0x00,0x00,0x00,0x00,0x3c,0x1f,
+ 0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0xa0,
+ 0x2f,0x00,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x00,0x80,0x3f,0x00,0x00,0x00,
+ 0x00,0xbc,0x07,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,
+ 0x00,0x00,0xe0,0x5b,0x00,0x00,0x00,0x00,0x62,0x04,0x00,0x00,0x00,0x00,0x1f,
+ 0x00,0x00,0x00,0x00,0xf8,0x07,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,
+ 0xca,0x2b,0x00,0x00,0x00,0xd0,0x7f,0x00,0x00,0x00,0x00,0x62,0x0c,0x00,0x00,
+ 0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0xe0,0xff,0x07,
+ 0x00,0x00,0x00,0x3f,0x7c,0x00,0x00,0x00,0xd0,0x5f,0x00,0x00,0x00,0x00,0x67,
+ 0x06,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0xf0,0x01,0x00,0x00,0x00,
+ 0xe0,0xff,0x07,0x00,0x00,0x00,0x3f,0x7c,0x00,0x00,0x00,0x60,0x37,0x00,0x00,
+ 0x00,0x00,0xfe,0x07,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0xf0,0x01,
+ 0x00,0x00,0x00,0xf0,0xff,0x07,0x00,0x00,0x00,0x3f,0x7c,0x00,0x00,0x00,0x00,
+ 0x0f,0x00,0x00,0x00,0x00,0x4e,0x0f,0x00,0x00,0x00,0x80,0x1f,0x00,0x00,0x00,
+ 0x00,0xf8,0x03,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0x3e,0x7c,0x00,
+ 0x00,0x00,0x80,0x0b,0x00,0x00,0x00,0x00,0x63,0x04,0x00,0x00,0x00,0xc0,0x1f,
+ 0x00,0x00,0x00,0x00,0xfc,0x07,0x00,0x00,0x00,0x40,0x7e,0x02,0x00,0x00,0x00,
+ 0xc0,0x03,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x62,0x0c,0x00,0x00,
+ 0x00,0xe0,0x39,0x00,0x00,0x00,0x00,0xfe,0x0f,0x00,0x00,0x00,0x00,0x3e,0x00,
+ 0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x00,0xf0,
+ 0x00,0x00,0x00,0x00,0xe0,0x38,0x00,0x00,0x00,0x00,0x9e,0x07,0x00,0x00,0x00,
+ 0x00,0x7e,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,
+ 0x00,0x00,0xf8,0x03,0x00,0x00,0x00,0xf0,0x10,0x00,0x00,0x00,0x00,0x0f,0x07,
+ 0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,
+ 0x0b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,
+ 0x00,0x0e,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,
+ 0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,
+ 0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x03,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+ 0x00,0x08,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0x00,0xf8,
+ 0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,
+ 0x18,0x00,0x00,0x00,0x00,0x78,0x0e,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,
+ 0x00,0x1c,0x3c,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,
+ 0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x78,0x1f,0x00,0x00,0x00,0x00,0x38,
+ 0x00,0x00,0x00,0x00,0x1e,0x3e,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,
+ 0xe0,0x07,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0xfc,0x1f,0x00,0x00,
+ 0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x1e,0x1f,0x00,0x00,0x00,0x00,0x7f,0x00,
+ 0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0xfc,
+ 0x1f,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x9f,0x0f,0x00,0x00,0x00,
+ 0x80,0xff,0x00,0x00,0x00,0x00,0xd0,0x0b,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
+ 0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x60,0x0e,0x00,0x00,0x00,0x00,0xfe,0x07,
+ 0x00,0x00,0x00,0x80,0xff,0x01,0x00,0x00,0x00,0xfc,0x1f,0x00,0x00,0x00,0x80,
+ 0xff,0x00,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0xe0,0x0e,0x00,0x00,0x00,
+ 0x00,0xfe,0x03,0x00,0x00,0x00,0xc0,0xff,0x01,0x00,0x00,0x00,0xfc,0x3f,0x00,
+ 0x00,0x00,0x80,0xff,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0xe0,0x07,
+ 0x00,0x00,0x00,0x00,0xfe,0x01,0x00,0x00,0x00,0xc0,0xff,0x01,0x00,0x00,0x00,
+ 0xfe,0x3f,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0xf0,0x07,0x00,0x00,
+ 0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0xc0,0xff,0x01,
+ 0x00,0x00,0x00,0xbc,0x3f,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xe0,
+ 0x03,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,
+ 0x80,0xeb,0x00,0x00,0x00,0x00,0xb8,0x1d,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,
+ 0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x1c,0x00,
+ 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,
+ 0x18,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x1c,0x0e,0x00,0x00,0x00,0x00,0x03,0x06,0x00,0x00,
+ 0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,
+ 0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x7e,0x1f,0x00,0x00,0x00,0xc0,0x8f,
+ 0x1f,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,
+ 0xe0,0x07,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0xfe,0x3f,0x00,0x00,
+ 0x00,0xe0,0xdf,0x3f,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,
+ 0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0xfe,
+ 0x3f,0x00,0x00,0x00,0xe0,0xff,0x3f,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,
+ 0x00,0x1f,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x80,0x1f,0x00,0x00,
+ 0x00,0x00,0xfe,0x3f,0x00,0x00,0x00,0xf0,0xff,0x3f,0x00,0x00,0x00,0xfe,0x01,
+ 0x00,0x00,0x00,0xc0,0x3f,0x00,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0xc0,
+ 0x3f,0x00,0x00,0x00,0x00,0xfe,0x1f,0x00,0x00,0x00,0xe0,0xff,0x3f,0x00,0x00,
+ 0x00,0xfc,0x07,0x00,0x00,0x00,0xc0,0x7f,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,
+ 0x00,0x00,0xc0,0x7f,0x00,0x00,0x00,0x00,0xfc,0x1f,0x00,0x00,0x00,0xe0,0xff,
+ 0x3f,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0xe0,0xff,0x00,0x00,0x00,0x00,
+ 0xfe,0x7f,0x00,0x00,0x00,0xe0,0xff,0x00,0x00,0x00,0x00,0xfc,0x0f,0x00,0x00,
+ 0x00,0xe0,0xff,0x3f,0x00,0x00,0x00,0xfc,0x1f,0x00,0x00,0x00,0xe0,0xff,0x01,
+ 0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0xe0,0x7f,0x00,0x00,0x00,0x00,0xf8,
+ 0x0f,0x00,0x00,0x00,0x80,0xff,0x0f,0x00,0x00,0x00,0xfe,0x03,0x00,0x00,0x00,
+ 0xf0,0xff,0x00,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0xc0,0x3f,0x00,0x00,
+ 0x00,0x00,0xf0,0x07,0x00,0x00,0x00,0x00,0xff,0x07,0x00,0x00,0x00,0xfe,0x01,
+ 0x00,0x00,0x00,0xe0,0xff,0x00,0x00,0x00,0x00,0x7e,0x7f,0x00,0x00,0x00,0x80,
+ 0x3f,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,
+ 0x00,0xfe,0x01,0x00,0x00,0x00,0xc0,0x75,0x00,0x00,0x00,0x00,0xb8,0x39,0x00,
+ 0x00,0x00,0x80,0x1f,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x70,
+ 0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,
+ 0x80,0x01,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,
+ 0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,
+ 0xc0,0x7f,0x00,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x00,0x06,0x00,0x00,
+ 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+
diff --git a/lib/images/psnfss2.xpm b/lib/images/psnfss2.xpm
new file mode 100644 (file)
index 0000000..6cc00fc
--- /dev/null
@@ -0,0 +1,199 @@
+/* XPM */
+static char *psnfss2[] = {
+/* width height num_colors chars_per_pixel */
+"   264   174       16            1",
+/* colors */
+". c #000000",
+"# c #0a0a0a",
+"a c #181818",
+"b c #222222",
+"c c #303030",
+"d c #3a3a3a",
+"e c #4a4a4a",
+"f c #585858",
+"g c #626262",
+"h c #707070",
+"i c #7a7a7a",
+"j c #8a8a8a",
+"k c #989898",
+"l c #a2a2a2",
+"m c #b0b0b0",
+"n c #b8bcb8",
+/* pixels */
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfccehmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkgfffhmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjdnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlcejnnlhbinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgffdmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfinhgnlfhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#fnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcknnnfdjnefnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcdknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgcifhennnnnnnlhfgmnnnnnnnnnnnnnnnnnnnnnnnnnnnkfnnn..jnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.ainnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnlhfdcccdfimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmblnnnf..fgneinnnnnnnnnnnnnnnnnnnnnnnnnnnnnldmkannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjffnnfcnnnnnleeknmfknnnnnnnnnnnnnnnnnnnnnnnnnmennnk..innnjinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.#mnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnne...........fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfhnnnj..cbhnnbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnclnnnnnnnnhd..cnnnnnnnnnnnnnnnnnnnnnnnnnkgcmhhfnnnmfcjnnnggmnnnnnnnnnnnnnnnnnnnnnnnnnflnnnj..fnnnnfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.acnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnk...efmnmdd...mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncnnnna.glfnnnhhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnciiajmnnnnke#..bgmnnnnnnnnnnnnnnnnnnnnnnnnnnfkfjjfffebhnnnjflnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnkjjjnnnnlhnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcmnnnnh..fnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnkccek##c#aldcclnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkennng.fnnnnnnlennnnnnnnnnnnnnnnnnnnnnnnnnnnnmhfffadigb..#eknnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgfccgkc#jnnlfinnnnnnnnnnnnnnnnnnnnnnnnnnnnlhnnnnh..bnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnacnnnnj...innnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnjjlcamnmacljjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnna.mnnnnnnncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna...ahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkbiifnfgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnm#...jnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.bca........cfnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnk.fnnnf.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnni.ennnnnnnncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#a...bgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjjfjmfeehelnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnmeea...icmnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.gfffc...aefflnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnne.ennnc.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndnnf.dnnnnnnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkdcceejnmhb...dinnnnnnnnnnnnnnnnnnnnnnnnnnnnkfijjhjjdennmfgnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfkb.#ha.gd.aknfnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#fnnnnj..#lnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnn#..fjf..annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnemnc.afnnnnnnejnnnnnnnnnnnnnnnnnnnnnnnnnnnnmclmdnnnnnnnlfa..#fnnnnnnnnnnnnnnnnnnnnnnnnnnfifgifigmiemnnjeknnnnnnnnnnnnnnnnnnnnnnnnnnnfh..ainnkc..dijnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgnnnnnf..fnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnn.........nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfnd.f#nnnnnkcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnfjnnnnnnnnnkffjnnnnnnnnnnnnnnnnnnnnnnnnnjhdnlhdnnnnmeinnnffnnnnnnnnnnnnnnnnnnnnnnnnnnjifinnnnnnjckfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb.dfnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnjjjjjjjjknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjmfkdinnnnkalnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndffcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjffnmgbnnnnnnifknldknnnnnnnnnnnnnnnnnnnnnnnnnnfknnnnnnnnnflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.amnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnemnnnnngcknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnklnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffffjennnnnnnnifhmnnnnnnnnnnnnnnnnnnnnnnnnnnnnfinnnnnnlfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndafjnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnldeffdbfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkffffmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjffjjhffmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.jnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlknnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdjnnnmjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngjcnnndegnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniiginihhgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnlffffffffffffhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnleccdfhknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgfjjjjjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfmdnemdlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnigl#.innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfffffffffflnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjhmnnnnnnnnniennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjnnld........aflnnnnnnnnnnnnnnnnnnnnnnnnnnlffccmfflmeejjjjhehnnnnnnnnnnnnnnnnnnnnnnnnnnnndndkencnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfjm#.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmedhjjjjjjjfainnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjjknnnnnnmgmfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfkcb.............dmnnnnnnnnnnnnnnnnnnnnnnnnj..nceknmnnfknnljidnnnnnnnnnnnnnnnnnnnnnnnnnnnnhihbihgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmemne.cfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnemmennnnnnnmcgemnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjnkhlcahjhnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnge..........bjgdcfmnnnnnnnnnnnnnnnnnnnnnnnnj..ncnnnmdmnaafffimnnnnnnnnnnnnnnnnnnnnnnnnnnnjf#d.cbinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmne.enlfhfefinnnnnnnnnnnnnnnnnnnnnnnnnnnjjhgjefffffffcmlejnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjnnmc..#knnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjc...........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..ncnknkdhkiflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlbg.mnkidhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkknf.bjnnnnfnlannnnnnnnnnnnnnnnnnnnnnnnnnnjjccjjnnnnnnnfjnm.fnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjnnjd..bgnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjc..........ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..ncnlfejnifffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkenebfjhmdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnj.bimmnnnhjnbnnnnnnnnnnnnnnnnnnnnnnnnnnnjjccjjnnnnnnnfjnkaknnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjnikngfmmglnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjc..........fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..ncknnmdcjnhennnnnnnnnnnnnnnnnnnnnnnnnnnnnmbcjleedkncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngjcdihhnnnnjjncnnnnnnnnnnnnnnnnnnnnnnnnnnnkijjhbcccccccangfmnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjihmnnnnnnnhjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfg.........alnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..jbffknmcffjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjimcldennldnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkffkhnnnnnnngkndnnnnnnnnnnnnnnnnnnnnnnnnnnnngkkfnnnnnnnnfdinnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjejjjjjjjjjjgdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfjmjh#.....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcaffnnijjfgifhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlckj##mnnhgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.ffnkhfjjgcnndnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfaffffffffedmnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmjjjjjjjjjjjjknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmhfhjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfffdnnmbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfhnjjjmljjmeffennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniennkmmbhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlhlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnicffedjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmmnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfffflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhflnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmbbmnnnnnnnnmbennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne#knnnnh.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfgjjejnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjgjdknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnne.bmnnnnnnmb.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne..#knnh...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfj..fjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnccnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnne.bmnnnnmb.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne....#kh.....hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfj..fjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjgjncbjmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnne.bmnnmb.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.....#......bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfj..fjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjgjjmnkjjeknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkccc#.bcchnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnne.bmmb.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkb..........bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlffffcj..feffffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnccnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj........fnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnne.bb.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb........bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjhccjjjjjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjegfffi..hfffgbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmeccknfcc#cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjb.gjjlnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnne..gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnma......bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....cnn......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfc..........ccnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfbjnc#ccfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnmb..bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.......#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....cnn......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjffcccc..ccccfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnccnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnmb.he.bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.........#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcffffl..jffffannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnccnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnmb.hnne.bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh...........#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjej..fgjjjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnccnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnmb.hnnnne.bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#.....bb.....cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfj..fjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnccnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmb.hnnnnnne.bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#...bmmb...bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfj..fjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnccnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmb.hnnnnnnnne.bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.bmnnk#.bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfjfffjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkffacnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnehnnnnnnnnnnehnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcmnnnnkcmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfbccajnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnka.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.jnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfffflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnmnnnnkfhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfknnnnne.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjffhfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnc#lnnm#.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl..bnnnne...lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjc.ffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjjjjjjknnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnd.enmb.dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#..fnne...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjgc.fejjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlh#..#hlnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnh..jc.amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf...ke...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfffd.effhfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnk..knnjjnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnm#.#.#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl...#...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlffffc....effffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljjjjiccccjjjjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjf.......ffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnndennnejnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnne...gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.....ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....fnnnn.....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnjhffc.cffjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.gnnffnng.jnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnh..#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl....bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....fnnnn.....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfffd.feffhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..aeccea..jnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnma...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#...#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....fnnnn.....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjc.ffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.#fjeejf#.jnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnb....cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.....bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............nnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....fnnnn.....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjc.ffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#knnffnnk#jnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnne..fe..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.......ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjje....gjjjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjc.ffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjgnnnbbnnngjnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnni..bnm#.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd...ed....hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjc.ffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkknng..gnnkknnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnm#..knni.dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl...bmm#..#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjc.ffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhc....chnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnf..fnnnnflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm..#lnnj.dinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjc.ffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnn#.annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhainnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjefffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnn#.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnlgfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnf..knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnme.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnng..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb..cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnj..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb...jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnm#.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#..cmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmagnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf#ainme.bknnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnc.#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnka.gnnnnmb...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni...dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#....gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni...#lf...annnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnng..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb..fnnnmb...ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#....gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf...#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....f#....nnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnk..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...cnnmb...ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.....#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd....lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.....bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..........nnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnc.bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...#nmb...ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.......bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgle.#jjflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#......fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.........bnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnf#jng.#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....fb...ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#........fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd..#f.cc...knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc........innnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj..dm#.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm........ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.........annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl...........ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.......bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#......ennnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnl...c.bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.......ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd..........nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...........cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.....#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni.....bmnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnb....knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.....ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng...b.c...annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#...hbfb...gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf...#knnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnng...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmc.ak.je.#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniccincfmecemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb..innnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnm#.#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#fnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnkjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnklnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnicennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnimnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkecfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnidchnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngceknnnfcelnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnniffknnnnniffknnnnnnnnnnnnnnnnnnnnnnnnnnnnni....#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....jmb...#lnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmb....cmnmc....dmnnnnnnnnnnnnnnnnnnnnnnnnnnn#.....dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm......lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.....ag.....fnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnc......dnc......fnnnnnnnnnnnnnnnnnnnnnnnnnnj.......lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj......jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb...jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj............cnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnl........f........nnnnnnnnnnnnnnnnnnnnnnnnnnj.......fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#...#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm......knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne....amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl............fnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.................knnnnnnnnnnnnnnnnnnnnnnnnnna.......knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.....#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmecdb....adcemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh......dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc...........knnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.................lnnnnnnnnnnnnnnnnnnnnnnnnnnj#......#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.......#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk........fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..........dnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnn#...............annnnnnnnnnnnnnnnnnnnnnnnnnnnle.......acjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.........annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..............jnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.........innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf........#mnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnh...............jnnnnnnnnnnnnnnnnnnnnnnnnnnnnfb......#eflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............innnnnnnnnnnnnnnnnnnnnnnnnnnnnc........#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.......jnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnia...........bknnnnnnnnnnnnnnnnnnnnnnnnnnnnf.......dmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...........jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl......dd......knnnnnnnnnnnnnnnnnnnnnnnnnnnnnma.......jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#.....gnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnhb.......cinnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.......amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb...bab...bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....ehfe....ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.....gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....dnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnjb...cjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfcgk.kfcfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhcdhnednjdchnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh....dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..#mnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnme.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk......#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd..amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnma.hnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnmdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmd...emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#..#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhannnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmc...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjd.......djnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfb......aennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+};
+
+
diff --git a/lib/images/psnfss3.xbm b/lib/images/psnfss3.xbm
new file mode 100644 (file)
index 0000000..69e0e59
--- /dev/null
@@ -0,0 +1,388 @@
+#define psnfss3_width 264
+#define psnfss3_height 174
+static char psnfss3_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,
+ 0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,
+ 0x70,0x00,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+ 0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+ 0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x00,0xf8,0x3e,0x00,0x00,0x00,0x00,0x12,
+ 0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,
+ 0x80,0x03,0x00,0x00,0x00,0x00,0xe8,0x00,0x00,0x00,0x00,0x7c,0x3e,0x00,0x00,
+ 0x00,0xe0,0xff,0x03,0x00,0x00,0x00,0x80,0x04,0x00,0x00,0x00,0x00,0x38,0x00,
+ 0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0xc8,0x01,0x00,0x00,0x00,0x7e,
+ 0x7e,0x00,0x00,0x00,0x60,0x21,0x01,0x00,0x00,0x00,0xf4,0xb6,0x00,0x00,0x00,
+ 0x00,0x38,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x40,0xc5,0x15,0x00,
+ 0x00,0x00,0x7e,0xf4,0x00,0x00,0x00,0xc0,0xc1,0x00,0x00,0x00,0x00,0xd6,0xcf,
+ 0x00,0x00,0x00,0xe0,0xef,0x0f,0x00,0x00,0x00,0xfe,0xff,0x00,0x00,0x00,0xa0,
+ 0x02,0x3a,0x00,0x00,0x00,0x06,0xc0,0x00,0x00,0x00,0x80,0xc0,0x00,0x00,0x00,
+ 0x00,0xc8,0x27,0x00,0x00,0x00,0x80,0xc7,0x07,0x00,0x00,0x00,0xf8,0x3f,0x00,
+ 0x00,0x00,0x80,0x00,0x1e,0x00,0x00,0x00,0x0f,0xf0,0x00,0x00,0x00,0xc0,0xc0,
+ 0x00,0x00,0x00,0x00,0xd0,0x37,0x00,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x00,
+ 0xf0,0x1f,0x00,0x00,0x00,0x00,0x01,0x0f,0x00,0x00,0x00,0x1e,0xf8,0x00,0x00,
+ 0x00,0x40,0xc1,0x01,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0xc4,0x00,
+ 0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0x82,0x03,0x00,0x00,0x00,0x3e,
+ 0x78,0x00,0x00,0x00,0xe0,0x75,0x01,0x00,0x00,0x00,0xa0,0x1b,0x00,0x00,0x00,
+ 0x00,0xee,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0x82,0x07,0x00,
+ 0x00,0x00,0x1e,0x79,0x00,0x00,0x00,0xa0,0xbf,0x03,0x00,0x00,0x00,0x30,0x13,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,
+ 0x31,0x07,0x00,0x00,0x00,0xdc,0x7b,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,
+ 0x00,0x90,0x16,0x00,0x00,0x00,0x00,0xc6,0x01,0x00,0x00,0x00,0xf0,0x1e,0x00,
+ 0x00,0x00,0x00,0x7d,0x07,0x00,0x00,0x00,0xec,0x37,0x00,0x00,0x00,0x00,0x0c,
+ 0x00,0x00,0x00,0x00,0x70,0x14,0x00,0x00,0x00,0x00,0x83,0x01,0x00,0x00,0x00,
+ 0x30,0x18,0x00,0x00,0x00,0x00,0x1f,0x0f,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,
+ 0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x01,0x02,
+ 0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x0f,0x0e,0x00,0x00,0x00,0xe0,
+ 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0xc0,
+ 0x07,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+ 0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x4a,0x00,0x00,
+ 0x00,0x00,0xf0,0x1e,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x03,
+ 0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x00,
+ 0x6a,0x00,0x00,0x00,0x00,0xf8,0x1e,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+ 0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x98,0x11,0x00,
+ 0x00,0x00,0xc0,0xac,0x01,0x00,0x00,0x00,0xec,0x6e,0x00,0x00,0x00,0x00,0x68,
+ 0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,
+ 0x70,0x1f,0x00,0x00,0x00,0x00,0xbd,0x00,0x00,0x00,0x00,0xae,0x76,0x00,0x00,
+ 0x00,0x40,0xd7,0x05,0x00,0x00,0x00,0x40,0x05,0x00,0x00,0x00,0x00,0x60,0x00,
+ 0x00,0x00,0x00,0xd0,0x0b,0x00,0x00,0x00,0xe0,0x7b,0x07,0x00,0x00,0x00,0x2e,
+ 0x70,0x00,0x00,0x00,0xe0,0x5d,0x0f,0x00,0x00,0x00,0xfe,0xfb,0x00,0x00,0x00,
+ 0xe0,0xf7,0x0f,0x00,0x00,0x00,0xa0,0x0d,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
+ 0x00,0x00,0x1e,0xf8,0x00,0x00,0x00,0xc0,0xfe,0x06,0x00,0x00,0x00,0xe8,0x5f,
+ 0x00,0x00,0x00,0x80,0x2e,0x07,0x00,0x00,0x00,0xfc,0xf7,0x00,0x00,0x00,0xe0,
+ 0xff,0x07,0x00,0x00,0x00,0x13,0xc8,0x00,0x00,0x00,0x80,0x7b,0x03,0x00,0x00,
+ 0x00,0xd0,0x2f,0x00,0x00,0x00,0x00,0xf1,0x01,0x00,0x00,0x00,0xaa,0x1f,0x00,
+ 0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x16,0xe8,0x00,0x00,0x00,0x00,0xba,
+ 0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0xae,0x00,0x00,0x00,0x00,
+ 0xe0,0x0a,0x00,0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0x1e,0xf8,0x00,0x00,
+ 0x00,0x00,0xef,0x01,0x00,0x00,0x00,0xe0,0x17,0x00,0x00,0x00,0x00,0x6e,0x01,
+ 0x00,0x00,0x00,0xb0,0x0e,0x00,0x00,0x00,0x60,0x56,0x06,0x00,0x00,0x00,0x2e,
+ 0x74,0x00,0x00,0x00,0x00,0x3b,0x01,0x00,0x00,0x00,0xd0,0x1e,0x00,0x00,0x00,
+ 0x00,0x76,0x01,0x00,0x00,0x00,0xb0,0x1a,0x00,0x00,0x00,0x80,0xbd,0x00,0x00,
+ 0x00,0x00,0xcc,0x66,0x00,0x00,0x00,0x00,0xed,0x01,0x00,0x00,0x00,0xd0,0x16,
+ 0x00,0x00,0x00,0x00,0xcb,0x01,0x00,0x00,0x00,0x88,0x31,0x00,0x00,0x00,0x80,
+ 0x6a,0x01,0x00,0x00,0x00,0x7c,0x3e,0x00,0x00,0x00,0x00,0xc7,0x01,0x00,0x00,
+ 0x00,0x30,0x18,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x01,0x00,
+ 0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x00,0xf8,0x1e,0x00,0x00,0x00,0x80,0x01,
+ 0x01,0x00,0x00,0x00,0x10,0x30,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x08,0x00,
+ 0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,
+ 0x09,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
+ 0x00,0x0c,0x00,0x00,0x00,0x00,0x60,0x06,0x00,0x00,0x00,0x00,0x66,0x00,0x00,
+ 0x00,0x00,0xb0,0x09,0x00,0x00,0x00,0xc0,0x88,0x01,0x00,0x00,0x00,0x88,0x11,
+ 0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0xe0,0x06,0x00,0x00,0x00,0x00,
+ 0x7e,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,
+ 0x00,0xb0,0x0c,0x00,0x00,0x00,0x60,0x0c,0x03,0x00,0x00,0x00,0xc2,0x43,0x00,
+ 0x00,0x00,0x40,0x7e,0x02,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0x00,0x6a,
+ 0x00,0x00,0x00,0x00,0xa0,0x07,0x00,0x00,0x00,0xc0,0xff,0x00,0x00,0x00,0x00,
+ 0xfc,0x7f,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,
+ 0x00,0x00,0x14,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x80,0xff,0x00,
+ 0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x80,0xff,0x01,0x00,0x00,0x00,0xf8,
+ 0x3f,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0xfc,0xff,0x00,0x00,0x00,
+ 0x00,0x3f,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0xff,0x00,0x00,
+ 0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0xa0,0x1c,0x00,0x00,0x00,0x00,0xe8,0x07,
+ 0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x80,
+ 0xff,0x01,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,
+ 0x00,0xe0,0x07,0x00,0x00,0x00,0x80,0xff,0x00,0x00,0x00,0x00,0xfc,0x3f,0x00,
+ 0x00,0x00,0xc0,0xff,0x03,0x00,0x00,0x00,0xf8,0x1f,0x00,0x00,0x00,0x00,0x6b,
+ 0x00,0x00,0x00,0x00,0xa0,0x0d,0x00,0x00,0x00,0xc0,0xdd,0x01,0x00,0x00,0x00,
+ 0xee,0x77,0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,
+ 0x00,0x00,0xc1,0x00,0x00,0x00,0x00,0x10,0x09,0x00,0x00,0x00,0x20,0x0c,0x01,
+ 0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xe0,
+ 0x0f,0x00,0x00,0x00,0xc0,0x08,0x01,0x00,0x00,0x00,0x08,0x11,0x00,0x00,0x00,
+ 0x00,0x0c,0x00,0x00,0x00,0x00,0x60,0x06,0x00,0x00,0x00,0x00,0x6e,0x00,0x00,
+ 0x00,0x00,0xa0,0x0d,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x00,
+ 0x62,0x00,0x00,0x00,0x00,0x90,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x20,0x04,0x00,
+ 0x00,0x00,0x00,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,
+ 0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x1e,0x00,
+ 0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x00,0x20,
+ 0x01,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,
+ 0x00,0x1e,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,0x22,0x00,0x00,
+ 0x00,0x00,0xa0,0x03,0x00,0x00,0x00,0x40,0x0c,0x01,0x00,0x00,0x00,0xc4,0x10,
+ 0x00,0x00,0x00,0x40,0x9c,0x01,0x00,0x00,0x00,0xce,0x39,0x00,0x00,0x00,0xe0,
+ 0xb2,0x01,0x00,0x00,0x00,0x8e,0x39,0x00,0x00,0x00,0xe0,0x88,0x03,0x00,0x00,
+ 0x00,0x8e,0x38,0x00,0x00,0x00,0xe0,0xcc,0x03,0x00,0x00,0x00,0x8e,0x3c,0x00,
+ 0x00,0x00,0xe0,0xe3,0x03,0x00,0x00,0x00,0xde,0x25,0x00,0x00,0x00,0xe0,0xdd,
+ 0x03,0x00,0x00,0x00,0x1e,0x3c,0x00,0x00,0x00,0xf0,0xed,0x01,0x00,0x00,0x00,
+ 0x9e,0x3c,0x00,0x00,0x00,0xe0,0xf7,0x03,0x00,0x00,0x00,0x78,0x3b,0x00,0x00,
+ 0x00,0x80,0xf7,0x00,0x00,0x00,0x00,0xd0,0x0f,0x00,0x00,0x00,0xe0,0xf3,0x01,
+ 0x00,0x00,0x00,0xb6,0x1a,0x00,0x00,0x00,0xe0,0xff,0x03,0x00,0x00,0x00,0xe6,
+ 0x1e,0x00,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,
+ 0x00,0x1e,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x40,0xff,0x00,0x00,
+ 0x00,0x00,0xf0,0x07,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0xe0,0x01,
+ 0x00,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x00,0xe4,0x0b,0x00,0x00,0x00,0xa0,
+ 0x5d,0x01,0x00,0x00,0x00,0xfc,0x11,0x00,0x00,0x00,0xe0,0xff,0x01,0x00,0x00,
+ 0x00,0x9c,0x1e,0x00,0x00,0x00,0xe0,0xe9,0x01,0x00,0x00,0x00,0x9e,0x3c,0x00,
+ 0x00,0x00,0x20,0x1c,0x02,0x00,0x00,0x00,0xce,0x27,0x00,0x00,0x00,0xe0,0xc9,
+ 0x03,0x00,0x00,0x00,0x8f,0x3c,0x00,0x00,0x00,0xe0,0xed,0x03,0x00,0x00,0x00,
+ 0x9e,0x3c,0x00,0x00,0x00,0x10,0x3e,0x02,0x00,0x00,0x00,0x56,0x3f,0x00,0x00,
+ 0x00,0x60,0x8c,0x03,0x00,0x00,0x00,0x8e,0x38,0x00,0x00,0x00,0xe0,0xcc,0x01,
+ 0x00,0x00,0x00,0x8e,0x38,0x00,0x00,0x00,0x60,0xdf,0x02,0x00,0x00,0x00,0x6a,
+ 0x39,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
+ 0x00,0x1e,0x00,0x00,0x00,0x00,0xc4,0x09,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,
+ 0x00,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0xc0,0x01,
+ 0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0xe0,0x01,0x00,0x00,0x00,0x00,
+ 0x3e,0x00,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,
+ 0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+ 0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+ 0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x18,
+ 0x02,0x00,0x00,0x00,0x84,0x03,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
+ 0x80,0x01,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,
+ 0x00,0xc0,0x38,0x02,0x00,0x00,0x00,0xc8,0x23,0x00,0x00,0x00,0x80,0x18,0x03,
+ 0x00,0x00,0x00,0x98,0x13,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xc0,
+ 0x03,0x00,0x00,0x00,0x80,0x98,0x01,0x00,0x00,0x00,0xc8,0x13,0x00,0x00,0x00,
+ 0xc0,0x91,0x01,0x00,0x00,0x00,0x9c,0x39,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,
+ 0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0xb0,0x09,
+ 0x00,0x00,0x00,0x80,0x93,0x01,0x00,0x00,0x00,0xb8,0x1d,0x00,0x00,0x00,0x00,
+ 0x7c,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x56,0x00,0x00,0x00,
+ 0x00,0x20,0x05,0x00,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x00,0xf0,0x0f,0x00,
+ 0x00,0x00,0xc0,0xb9,0x07,0x00,0x00,0x00,0x18,0x19,0x00,0x00,0x00,0xa0,0x34,
+ 0x05,0x00,0x00,0x00,0x8e,0x7b,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,
+ 0xc0,0x57,0x00,0x00,0x00,0xe0,0xdb,0x07,0x00,0x00,0x00,0x3c,0x79,0x00,0x00,
+ 0x00,0xe0,0xfb,0x0f,0x00,0x00,0x00,0xfe,0xff,0x00,0x00,0x00,0xe0,0xfd,0x0f,
+ 0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0xe0,0xff,0x0f,0x00,0x00,0x00,0xfe,
+ 0xfd,0x00,0x00,0x00,0xe0,0x9b,0x07,0x00,0x00,0x00,0xbe,0xfb,0x00,0x00,0x00,
+ 0xe0,0x3c,0x06,0x00,0x00,0x00,0xfe,0x7b,0x00,0x00,0x00,0xf0,0xd7,0x0f,0x00,
+ 0x00,0x00,0x1e,0xf9,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x8c,0x21,
+ 0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0xe0,
+ 0x9b,0x07,0x00,0x00,0x00,0x38,0x39,0x00,0x00,0x00,0x00,0xda,0x00,0x00,0x00,
+ 0x00,0x20,0x0d,0x00,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x00,0x70,0x1d,0x00,
+ 0x00,0x00,0xc0,0x3c,0x03,0x00,0x00,0x00,0x88,0x03,0x00,0x00,0x00,0x00,0x19,
+ 0x01,0x00,0x00,0x00,0x90,0x09,0x00,0x00,0x00,0x80,0x93,0x01,0x00,0x00,0x00,
+ 0xb8,0x3d,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,
+ 0x00,0xc0,0x18,0x03,0x00,0x00,0x00,0xc8,0x13,0x00,0x00,0x00,0x80,0x98,0x03,
+ 0x00,0x00,0x00,0x9c,0x39,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xe0,
+ 0x07,0x00,0x00,0x00,0x40,0x38,0x02,0x00,0x00,0x00,0xc4,0x23,0x00,0x00,0x00,
+ 0x80,0x18,0x00,0x00,0x00,0x00,0x98,0x03,0x00,0x00,0x00,0x00,0x7c,0x00,0x00,
+ 0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x80,0x03,
+ 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,
+ 0x3c,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,
+ 0x38,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+ 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x06,0x00,
+ 0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0xc0,0x02,0x00,0x00,0x00,0x00,0x36,
+ 0x00,0x00,0x00,0x00,0x90,0x04,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,
+ 0x40,0x04,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0xf8,0x2f,0x00,0x00,
+ 0x00,0x80,0x4c,0x00,0x00,0x00,0x00,0xe0,0x05,0x00,0x00,0x00,0x80,0xde,0x00,
+ 0x00,0x00,0x00,0x40,0x0c,0x00,0x00,0x00,0x80,0xfe,0x02,0x00,0x00,0x00,0xa4,
+ 0x3b,0x00,0x00,0x00,0xa0,0xc8,0x01,0x00,0x00,0x00,0x96,0x34,0x00,0x00,0x00,
+ 0xe0,0xc8,0x01,0x00,0x00,0x00,0x5c,0x75,0x00,0x00,0x00,0xe0,0x7f,0x0f,0x00,
+ 0x00,0x00,0xfc,0x1f,0x00,0x00,0x00,0xc0,0xc8,0x00,0x00,0x00,0x00,0x9c,0x1c,
+ 0x00,0x00,0x00,0xc0,0xc9,0x00,0x00,0x00,0x00,0x62,0xcd,0x00,0x00,0x00,0xe0,
+ 0xff,0x0f,0x00,0x00,0x00,0xf4,0x3f,0x00,0x00,0x00,0xe0,0xaf,0x03,0x00,0x00,
+ 0x00,0xf8,0x07,0x00,0x00,0x00,0xe0,0xe9,0x03,0x00,0x00,0x00,0xcb,0x87,0x00,
+ 0x00,0x00,0xe0,0xc7,0x1f,0x00,0x00,0x00,0x7a,0x6e,0x00,0x00,0x00,0x00,0x1c,
+ 0x00,0x00,0x00,0x00,0xc6,0x11,0x00,0x00,0x00,0x20,0x1c,0x00,0x00,0x00,0x00,
+ 0xf2,0x9f,0x00,0x00,0x00,0xf0,0x83,0x0f,0x00,0x00,0x00,0x3e,0xbc,0x00,0x00,
+ 0x00,0x20,0x1e,0x01,0x00,0x00,0x00,0xe4,0x1b,0x00,0x00,0x00,0x20,0x1e,0x01,
+ 0x00,0x00,0x00,0xe6,0xcf,0x00,0x00,0x00,0xe0,0x83,0x0f,0x00,0x00,0x00,0x7d,
+ 0xbc,0x00,0x00,0x00,0xc0,0xe9,0x01,0x00,0x00,0x00,0x38,0x06,0x00,0x00,0x00,
+ 0xe0,0xe9,0x03,0x00,0x00,0x00,0xf8,0x3f,0x00,0x00,0x00,0x80,0xc7,0x03,0x00,
+ 0x00,0x00,0x76,0x7f,0x00,0x00,0x00,0xe0,0x88,0x01,0x00,0x00,0x00,0x9e,0x1c,
+ 0x00,0x00,0x00,0xc0,0xc9,0x01,0x00,0x00,0x00,0xc8,0x17,0x00,0x00,0x00,0x80,
+ 0xff,0x03,0x00,0x00,0x00,0xf8,0x2f,0x00,0x00,0x00,0xa0,0x4c,0x01,0x00,0x00,
+ 0x00,0xd2,0x34,0x00,0x00,0x00,0xa0,0x4c,0x01,0x00,0x00,0x00,0x48,0x25,0x00,
+ 0x00,0x00,0xc0,0xff,0x07,0x00,0x00,0x00,0xfc,0x3d,0x00,0x00,0x00,0x80,0x5c,
+ 0x00,0x00,0x00,0x00,0xb0,0x05,0x00,0x00,0x00,0x80,0xde,0x00,0x00,0x00,0x00,
+ 0x0c,0x61,0x00,0x00,0x00,0x80,0xff,0x07,0x00,0x00,0x00,0xa4,0x2b,0x00,0x00,
+ 0x00,0x00,0x0a,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x3a,0x00,
+ 0x00,0x00,0x00,0x8c,0x22,0x00,0x00,0x00,0xc0,0xef,0x03,0x00,0x00,0x00,0xd8,
+ 0x1d,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x08,0x00,0x00,0x00,0x00,0xf8,0x3e,0x00,0x00,0x00,0x80,0xef,0x03,0x00,
+ 0x00,0x00,0x80,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x08,0x00,0x00,0x00,0x00,
+ 0x82,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+
diff --git a/lib/images/psnfss3.xpm b/lib/images/psnfss3.xpm
new file mode 100644 (file)
index 0000000..544e6ac
--- /dev/null
@@ -0,0 +1,199 @@
+/* XPM */
+static char *psnfss3[] = {
+/* width height num_colors chars_per_pixel */
+"   264   174       16            1",
+/* colors */
+". c #000000",
+"# c #0a0a0a",
+"a c #181818",
+"b c #222222",
+"c c #303030",
+"d c #3a3a3a",
+"e c #4a4a4a",
+"f c #585858",
+"g c #626262",
+"h c #707070",
+"i c #7a7a7a",
+"j c #8a8a8a",
+"k c #989898",
+"l c #a2a2a2",
+"m c #b0b0b0",
+"n c #b8bcb8",
+/* pixels */
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfccehmnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnngcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnelnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd..innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlc..#e..#innnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnmbfhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniifnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnika.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#...ei....hnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnfjmbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndndnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnf.#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnma....in#....jnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmcccc.ccabcccinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlcnfinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnk..innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....#nne....annnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnfhnclnnnclmbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjiffcfnhbffhjjmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk...lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjjjjgknna.djjjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnaffffhnnkffffdinnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmbffnnnnkcfinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgjjifbcbfijjggnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhccccfejfeccccelnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.............fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhfjjjjnnnkjjjh#.blnnnnnnnnnnnnnnnnnnnnnnnnnk.cmnnnnnnnnnf.fnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnhamnnnnnecnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhfmnf...cnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnja..ennnf..#fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#.........#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfmnnnnnnnng#.fmnnnnnnnnnnnnnnnnnnnnnnnnnnj..#jnnnnnnmc..dnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnf#lnnnnncbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjbjc....kbhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.gnnnj.dlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmc.......cmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfknnnnnmc.#innnnnnnnnnnnnnnnnnnnnnnnnnnnj....innnnl#...ennnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnlckcnnnnhfgfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.d...c.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjennnfgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.....dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndnnnnne..knnnnnnnnnnnnnnnnnnnnnnnnnnnnnm....innnnn....gnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncgjchjjjaijalnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmanfcemejnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.fjf.dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.....dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngnnnnni..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc..annlinnd...lnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmffff#ffbefffjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnifnk#hnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna..f#..lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm...a...mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnilnjbhnm..dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..fng#.emh..ennnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnngfldnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnflicjdfnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.#knlb.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh..fnf..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngnf..#fmd..mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.jd....bj.#mnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnbdjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfhfnnnifgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneblnnnmeannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndaknnnjadnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfc..dmmgf..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne#......#bknnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnjennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmeknnnnnmfjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmnnnnnnginnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdmnnnnnmdmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..#gnnnnhccfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjc....afmnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnllnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjlnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnninnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfcdehmnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnl.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnblnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnelnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmenfjndnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlc..bg..#innnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnf.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmegnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnniennnmhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmkndlfjhgnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkb...hm#...innnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnn#i#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnflfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhibnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfemnhcmnielnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmckjgfjemhennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmahid#jjdagl#jnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnhbnchnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfehinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngj.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfaigcfhggnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnmckcfhehennlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.bnjfijffnh.annnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmjjgfahfhafgjjmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhj.hfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlij.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnij#hcghbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfbhlcfccfemfchnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna..hhnnnnkfa..innnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmb.bfffk.lfffb.cmnnnnnnnnnnnnnnnnnnnnnnnnnnnnebffffg.bifffdblnnnnnnnnnnnnnnnnnnnnnnnnnnnnfba...kj.ffffccmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfkbdh#fknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhde#..bedinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..cdnnnnnnfd#.fnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnneakicb.achkaennnnnnnnnnnnnnnnnnnnnnnnnnnnnnngfhcc#..ccfhfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkikfbbifmhe#fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmifc..cfaejjgeehnnnnnnnnnnnnnnnnnnnnnnnnnnnnlffffe...#effffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjeknfnnnnnnjjmgennnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnh.hh...hh#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjeg.....ffhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmhmnkff..#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjihijfecfbbfhlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjid#..aeijjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjaflfnnnnnnijhcennnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnni#k...k#innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlee...cfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfdaiflemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnaegh#kfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnieefb##cgfejnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm...dmnnnnnfa..gnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnhdffnfgdhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlg#.d#.hinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb.kj.ilinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngekbje#gjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfgmheeffgcklfgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc..lgmnnnhid..lnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnneglgaglgfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhhaificgfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.gmf.#kgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlehjejhjcfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhemefjdmcknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.enlcffdgnj.dnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnbicbhbcibnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnelhemffjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfdjhnkbbgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneinngflnnfhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcngifjfkmcmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnege..lnc.chbmnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnm.agnnnf#.nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneeinnnleeknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncgknnnnfcinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnkfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnbnfjkenmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne...fl...bknnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnniclnnnnnkbjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkdmnnnnnngfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfmnnnnnnkdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnminfjnhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjc.#e.afmnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnmnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjlnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnhlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnllnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncnnnncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbmnnmbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkmnkfnninnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnmmnnncjnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmnnnjhnnnmknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnicnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.ennc#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlbmgbnhdnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnkcmnncknnhdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfknnifnnkfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.jj.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna.fe.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnabc.e.gnnmnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnkcmnfnnhennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndhnffnkbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfhlnnc.knnieinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjmnnh.aa.hnnmjmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjmnc....cnmjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhbfb.....fdbmnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnkcmfnhennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbffch#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.bg#.fe##hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni##ce....eca#gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh............hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh........#knnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnmffjhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk###.innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnme......#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlc........bknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#........#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjb.......elnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnkcfffff#cffffefnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjffeca..#ccfffinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne....#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf......fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk........knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng............clnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmjjjjjgaejjjjjknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjfa..#fjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.....hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnja......aknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne........ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmib.......fknnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnkffkfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.ba#fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.......fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..........fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb..........cmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh........bmnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnhfnfnkdmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#kfclbhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#bgla.iie#ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmffgji....ijfddmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfdffa....affdfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhaeb.....ecbmnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnhbnnennkcmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlcmnifnmdknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmhlnnnd.lnnnijnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.dd.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.##.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknna#a.d.hnmlnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnjbmnncjnnkcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgmnnjfnnnfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne#mmaennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#.ki.bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#kfanednnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnncjnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnkfnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.hnnh.nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniknjfnnhnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnninnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnninnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnhdmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhdlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfcinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnifmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmffinnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnna.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfknelnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnf.knnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnna.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh...knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngnf.jnllnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnhhnnne.innmgknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhhnnnf.knnmgknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjflnj..gnmghnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhcfnnd.fnmecinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhcemennhjidelnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.cmgmf.nifiinnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnk..enni#nnla.#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..ennlannmb.#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..#mna.mmb..gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk...jnncnng..#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...bijnfh...cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjhc.blhfdiknh#nnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnma..engalmb..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmc..fnnknmb..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk...bnfene...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk...hnncnne..#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....dflf#...cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkknhabfffjjb.annnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmhfaadibacfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkgfjc.hifhlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhc..ejhg..bfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhcffelcjchecinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb....bfa....innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnggjlfbcgd.#elnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnbnniennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng...nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlhddhlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlc.fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjffaaf.efhlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlhdb.aeinnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnlamnhcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng..alnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljfeefefjknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjmmfdachnljnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnifggjcbgifffmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlea.eeadjjhgknnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnjeb.fbfcd.cflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlea#ljflh.bfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc...higk#..bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb.#djncnhb#.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdnnnib.emnnkennnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#.ckhegf.emngnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnl...hnjbnne..annnnnnnnnnnnnnnnnnnnnnnnnnnnnnk...jnnfnnf..annnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...fnebnh...gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj...inncnnf...nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnjg#.eemnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjahnik#jgh.#fhnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnl#.hnnh.mnne.bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl##jnnh#nnnf.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnla.enm#.lnf.#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#.#lnlbmni..cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfjhhf..#lfiifnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngjfkj.jgni#.fnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmmnnnd.hnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmnnnd.jnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnh..fnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjlnl#.bnnkjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjmn#...gnklnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjmnf.jjknnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnn#.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh...jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.jiknnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnc.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbaknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnka.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmefhnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnmknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnniemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnihnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlecinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfdlnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnlnnnnc.jnnninnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnminnnh..cnnnmknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#...innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn..fnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnbhnnnc.jnnkaknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnehnnf..#nnmemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlcknnf.nnmdinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmeinn..jnkcjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng....cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnme..aknnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnmbhnnc.jnkaknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnehnh..enmemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.bnnjcnnf.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..knc.nm#.dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf....cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng....cnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnmcine.mlclnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnehnc.lmemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni#fnmfnj.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.amebnc.aknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#...gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl##a.fnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnfkiememnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnellfnfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdllkndknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.efdg.dmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnldbemk#.engbbinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneemnjfnnhcknnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnjjjlnijfkmnkjjmnnnnnnnnnnnnnnnnnnnnnnnnnnnnng#djnmb#hnleaemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknnnni..ennnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljnnj#baahnmjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna...bmgbne....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjf..hnjfnn#.cfmnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnk....bk#.fe#...gnnnnnnnnnnnnnnnnnnnnnnnnnnnnl....df..#f#...fnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..bejc...ifc..gnnnnnnnnnnnnnnnnnnnnnnnnnnnnl...acc..#c#...gnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....#ecc.....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnk....efecffb...dnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnlcccdhmb#jjfcccinnnnnnnnnnnnnnnnnnnnnnnnnnnnl#..#hh..bjc...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdfilne...lmjfdknnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.acfc..ahfc#.innnnnnnnnnnnnnnnnnnnnnnnnnnnk.....dgdh#....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#...knjfnnc...fnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnmgnkiknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfgmmnhfmmnhfhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmledjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#dabclnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne...enf#mk#..#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..knjfnna.emnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnmemidnehnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmemhdnfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnibmnjndfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmd.fhbk##innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhfhnh..bmlfgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjhnkhfjmljmnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnkaknf.nnehnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmemm#.jnfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmd.jnlenm#bknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnla.bmf.ng..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....bnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnkaknnc.jnncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmemng..cnnfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.fnnhanni.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..knc.knd.dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.....nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....cnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnbknnnc.jnnmbjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmemnnf..annnfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnf.mnnkmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngjnn#.inmhlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk..dmnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnmnnnnc.jnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnk#.fnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..aknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#.fnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnmknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmknnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnmlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfcfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkdcdknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmhhlnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnicnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjfmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfjdcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#...#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnekkflnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnkdhffhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngnjcnkinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.fdbgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcnnncknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.....gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfggfb.jbfhinnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnncnlcajnfjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnfffbfjfnmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjbnh..enfennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnjnfjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljlh.....hljlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfjchfb.fidffnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmcjfnnjfnnfjdjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm.fmfniennfjafnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnej.lngbmnbffjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkacdkfnenfjdccknnnnnnnnnnnnnnnnnnnnnnnnnnnnnh...g#...#g...hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfg.#fe#gd.chnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmdblnjfnndcknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnleafnjfnmaahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmd.gnnfnl.ajnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#knngbj#jagnnj#nnnnnnnnnnnnnnnnnnnnnnnnnnnnl.....c#c#b.....lnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfgf.caac.chblnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnfdhdfjfichfeknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfcehfhafinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnla.acinflec.#innnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnmjnd...enjmncjnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....cmnmc.....jnnnnnnnnnnnnnnnnnnnnnnnnnnnneigfeblmebgghejnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnknnnibafnnnmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnghnnj#.fmnlfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjmnnjfbgnnnjmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlannha.....ahnnalnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....lnnnl.....jnnnnnnnnnnnnnnnnnnnnnnnnnnnji#..binnma#..lfnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnngmnmecbdknnhknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfllebbbhnghnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhjnngfbfmnlhlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnedlnh.....hnldfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd....nnnnn....dnnnnnnnnnnnnnnnnnnnnnnnnnnnnkhdadchnnlaebalgnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnjdedkjfmeechnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcajjfmfainnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmd..cknfmf#.ainnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfea#...#aefknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnifdagnnngaefinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffffd#hibcfffcmnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnibdnnjfnnfcfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#ffnjfnndbcjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnld.gnnfnl.chnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhfne..#enfjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne...dfd...ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniib.ebaf.#hfnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmfmfnnjfnnfkhjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdknfmfcjnfnfhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfk.lnebmnbfgjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlcnlen.nelmamnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.....b.....hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnff.bfe.ff.cfnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnfnia#fnhknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncgjcjgfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjenf#.bmhfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffnknieknlncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.....d.....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfjfifa.gggjfnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnkfjfjhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnjcnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#hfbfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhbmnmcmcmnm#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....k.....jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffhff#jfffmnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjfmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf#cainhac#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne...fnf...ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhhjemnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljmnnnmjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfjnnnjfjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+};
+
+
diff --git a/lib/images/psnfss4.xbm b/lib/images/psnfss4.xbm
new file mode 100644 (file)
index 0000000..04f7c5e
--- /dev/null
@@ -0,0 +1,388 @@
+#define psnfss4_width 264
+#define psnfss4_height 174
+static char psnfss4_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
+ 0x00,0x02,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,
+ 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x14,0x00,0x00,0x00,0x40,0xd5,0x01,
+ 0x00,0x00,0x00,0xfe,0x07,0x00,0x00,0x00,0x20,0x80,0x01,0x00,0x00,0x00,0xfc,
+ 0x7f,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0xfe,0x3f,0x00,0x00,0x00,
+ 0xf0,0xff,0x03,0x00,0x00,0x00,0xff,0x1f,0x00,0x00,0x00,0xf0,0xff,0x03,0x00,
+ 0x00,0x00,0xfe,0xff,0x00,0x00,0x00,0xd0,0xff,0x07,0x00,0x00,0x00,0xd9,0x7f,
+ 0x00,0x00,0x00,0xe0,0xff,0x07,0x00,0x00,0x00,0xfe,0x3f,0x00,0x00,0x00,0xe0,
+ 0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,0x03,0x00,0x00,0x40,0xff,0x0f,0x00,0x00,
+ 0x00,0xf5,0xff,0x01,0x00,0x00,0xf0,0xff,0x0f,0x00,0x00,0x00,0xff,0xff,0x01,
+ 0x00,0x00,0xf0,0xff,0x1f,0x00,0x00,0x00,0xff,0xff,0x03,0x00,0x00,0xd0,0xff,
+ 0x0f,0x00,0x00,0x00,0xba,0xff,0x01,0x00,0x00,0xe0,0xff,0x0f,0x00,0x00,0x00,
+ 0xfe,0xff,0x00,0x00,0x00,0xe0,0xff,0x3f,0x00,0x00,0x00,0xfe,0xff,0x01,0x00,
+ 0x00,0xa0,0xfa,0x07,0x00,0x00,0x00,0xd9,0x7f,0x00,0x00,0x00,0xe0,0xff,0x07,
+ 0x00,0x00,0x00,0xff,0x1f,0x00,0x00,0x00,0xe0,0xff,0x3f,0x00,0x00,0x00,0xff,
+ 0x7f,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xd4,0x3e,0x00,0x00,0x00,
+ 0xf0,0xff,0x03,0x00,0x00,0x00,0xfe,0x0f,0x00,0x00,0x00,0xe0,0xff,0x0f,0x00,
+ 0x00,0x00,0xae,0x3a,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0xfe,0x07,0x00,0x00,0x00,0x80,
+ 0xff,0x03,0x00,0x00,0x00,0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x02,0x00,
+ 0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x60,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+ 0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0xc0,0x3f,
+ 0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
+ 0x00,0x60,0x00,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x1d,0x00,0x00,
+ 0x00,0xe0,0x7b,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,0xe0,0xff,0x01,
+ 0x00,0x00,0x00,0xe0,0x9f,0x00,0x00,0x00,0x40,0x75,0x02,0x00,0x00,0x00,0x2a,
+ 0x39,0x00,0x00,0x00,0xa0,0xe2,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00,0x00,
+ 0xe0,0xff,0x07,0x00,0x00,0x00,0x08,0x00,0x01,0x00,0x00,0xf0,0x24,0x04,0x00,
+ 0x00,0x00,0xa5,0x70,0x00,0x00,0x00,0x10,0xc0,0x01,0x00,0x00,0x00,0x02,0x08,
+ 0x00,0x00,0x00,0xe0,0xbf,0x1f,0x00,0x00,0x00,0x04,0x00,0x01,0x00,0x00,0x60,
+ 0x00,0x08,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x00,0x20,0x80,0x03,0x00,0x00,
+ 0x00,0x01,0x18,0x00,0x00,0x00,0x20,0x00,0x3e,0x00,0x00,0x00,0x02,0xc0,0x01,
+ 0x00,0x00,0x60,0x00,0x10,0x00,0x00,0x00,0x03,0xc0,0x01,0x00,0x00,0x10,0x80,
+ 0x01,0x00,0x00,0x00,0x02,0x3c,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+ 0x7e,0xf1,0x03,0x00,0x00,0x70,0x00,0x08,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,
+ 0x00,0x10,0x40,0x00,0x00,0x00,0x00,0x01,0x0e,0x00,0x00,0x00,0x80,0x00,0x10,
+ 0x00,0x00,0x00,0xfe,0xff,0x00,0x00,0x00,0x60,0x00,0x04,0x00,0x00,0x00,0x02,
+ 0x70,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x3e,0x0f,0x00,0x00,0x00,
+ 0x00,0xa5,0x08,0x00,0x00,0x00,0xfe,0x3f,0x00,0x00,0x00,0xe0,0x7f,0x04,0x00,
+ 0x00,0x00,0xfe,0x71,0x00,0x00,0x00,0xe0,0x1b,0x00,0x00,0x00,0x00,0xbe,0x03,
+ 0x00,0x00,0x00,0x00,0x54,0x05,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,
+ 0x70,0x03,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,
+ 0x00,0xf4,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x01,0x00,
+ 0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+ 0x00,0x00,0x18,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x10,0x00,
+ 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xe0,0xff,
+ 0x02,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,
+ 0x38,0x30,0x00,0x00,0x00,0x80,0x42,0x03,0x00,0x00,0x00,0x08,0x7c,0x00,0x00,
+ 0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xbe,0x7b,0x00,0x00,0x00,0x80,0xc0,0x03,
+ 0x00,0x00,0x00,0x7c,0x78,0x00,0x00,0x00,0x60,0x27,0x0c,0x00,0x00,0x00,0xfe,
+ 0xfc,0x00,0x00,0x00,0x20,0x00,0x08,0x00,0x00,0x00,0x02,0xc0,0x00,0x00,0x00,
+ 0xe0,0x8f,0x03,0x00,0x00,0x00,0xfc,0xf9,0x00,0x00,0x00,0x20,0xb8,0x19,0x00,
+ 0x00,0x00,0xfe,0xfe,0x01,0x00,0x00,0x40,0x00,0x18,0x00,0x00,0x00,0x00,0xc0,
+ 0x01,0x00,0x00,0xf0,0x7f,0x0f,0x00,0x00,0x00,0xfe,0xf7,0x01,0x00,0x00,0x20,
+ 0xc0,0x7b,0x00,0x00,0x00,0xfe,0xc7,0x07,0x00,0x00,0x20,0x00,0x18,0x00,0x00,
+ 0x00,0x04,0x00,0x01,0x00,0x00,0xe0,0xbf,0x0e,0x00,0x00,0x00,0xfc,0xf3,0x01,
+ 0x00,0x00,0x20,0x80,0x3d,0x00,0x00,0x00,0xff,0xcf,0x03,0x00,0x00,0x20,0x00,
+ 0x0e,0x00,0x00,0x00,0x02,0x80,0x00,0x00,0x00,0xe0,0x83,0x03,0x00,0x00,0x00,
+ 0xfc,0x78,0x00,0x00,0x00,0x20,0xbc,0x19,0x00,0x00,0x00,0xfe,0xfc,0x00,0x00,
+ 0x00,0xc0,0xff,0x07,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,0x00,0xc0,0x01,
+ 0x00,0x00,0x00,0x7c,0x38,0x00,0x00,0x00,0xc0,0x27,0x0c,0x00,0x00,0x00,0xfc,
+ 0xfc,0x00,0x00,0x00,0x40,0xb5,0x03,0x00,0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,
+ 0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,
+ 0x00,0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xfe,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00,0x00,0x00,0x40,
+ 0x05,0x00,0x00,0x00,0x00,0xfe,0xe3,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x1f,0x08,0x00,0x00,0x00,0xfe,0x60,0x00,
+ 0x00,0x00,0xe0,0x0f,0x0e,0x00,0x00,0x00,0xfe,0xe7,0x01,0x00,0x00,0x00,0x80,
+ 0x03,0x00,0x00,0x00,0xfe,0x20,0x00,0x00,0x00,0xa0,0x12,0x0c,0x00,0x00,0x00,
+ 0xfe,0xc1,0x00,0x00,0x00,0xe0,0x1f,0x1e,0x00,0x00,0x00,0xfe,0xe7,0x03,0x00,
+ 0x00,0xe0,0x8f,0x0f,0x00,0x00,0x00,0xfc,0x61,0x00,0x00,0x00,0x40,0x2d,0x1c,
+ 0x00,0x00,0x00,0xfc,0xc1,0x01,0x00,0x00,0xc0,0x7f,0x3e,0x00,0x00,0x00,0xfe,
+ 0xff,0x07,0x00,0x00,0xf0,0xff,0x3f,0x00,0x00,0x00,0xf8,0xff,0x01,0x00,0x00,
+ 0x80,0xdf,0x3a,0x00,0x00,0x00,0xf8,0xff,0x07,0x00,0x00,0xc0,0xff,0x7f,0x00,
+ 0x00,0x00,0xfc,0xff,0x07,0x00,0x00,0xe0,0xff,0x3f,0x00,0x00,0x00,0xf8,0xe3,
+ 0x01,0x00,0x00,0x80,0x76,0x3c,0x00,0x00,0x00,0xfc,0x87,0x03,0x00,0x00,0xc0,
+ 0xff,0x3f,0x00,0x00,0x00,0xfe,0xff,0x07,0x00,0x00,0xe0,0x80,0x0f,0x00,0x00,
+ 0x00,0xfc,0x61,0x00,0x00,0x00,0x40,0x2b,0x1c,0x00,0x00,0x00,0xfc,0xc1,0x01,
+ 0x00,0x00,0xc0,0x3f,0x3e,0x00,0x00,0x00,0xfe,0xef,0x03,0x00,0x00,0x00,0x80,
+ 0x03,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0xa0,0x1a,0x0c,0x00,0x00,0x00,
+ 0xfe,0xc0,0x00,0x00,0x00,0xe0,0x1f,0x0e,0x00,0x00,0x00,0xfe,0xe7,0x03,0x00,
+ 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x0f,0x00,
+ 0x00,0x00,0x00,0xff,0x40,0x00,0x00,0x00,0xf0,0x0f,0x04,0x00,0x00,0x00,0xfe,
+ 0xe3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xff,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,
+ 0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,
+ 0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x08,
+ 0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,
+ 0xc0,0x0f,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,
+ 0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x95,0x1f,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,0xf8,
+ 0x01,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+ 0xaa,0xea,0x01,0x00,0x00,0xe0,0xff,0x3f,0x00,0x00,0x00,0xfe,0xff,0x01,0x00,
+ 0x00,0xe0,0xf7,0x1f,0x00,0x00,0x00,0xfe,0xfd,0x00,0x00,0x00,0xe0,0xff,0x3f,
+ 0x00,0x00,0x00,0xfe,0xff,0x03,0x00,0x00,0xf0,0xff,0x3f,0x00,0x00,0x00,0xfe,
+ 0xff,0x03,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,
+ 0x00,0x00,0x3e,0x00,0x00,0x00,0xff,0xff,0x03,0x00,0x00,0xe0,0xff,0x3f,0x00,
+ 0x00,0x00,0xfe,0xff,0x01,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x30,
+ 0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0xc0,
+ 0xff,0x1f,0x00,0x00,0x00,0x02,0xf4,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+ 0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x80,0x1f,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x78,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,
+ 0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,
+ 0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x80,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x07,0x00,
+ 0x00,0x00,0xa0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0xfe,0x1e,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x03,
+ 0x00,0x00,0x00,0xfe,0x3c,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xc0,0x06,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xf0,0x07,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,
+ 0x00,0x00,0x00,0x00,0x80,0x0c,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xe0,
+ 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,
+ 0x00,0x00,0x80,0x01,0x00,0x00,0xe0,0xff,0x1b,0x00,0x00,0x00,0x00,0x60,0x00,
+ 0x00,0x00,0xe0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x30,0x00,0x00,0x00,0xfe,0xff,0x01,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+ 0x00,0x40,0x00,0x00,0x00,0xf0,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x92,0x54,0x03,0x00,0x00,0x40,0x55,0x31,
+ 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0xe0,0x1f,0x00,0x00,0x00,0x00,0xaa,
+ 0x02,0x00,0x00,0x00,0xe0,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,
+ 0xf0,0xff,0x0d,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,
+ 0x00,0x00,0xff,0x07,0x00,0x00,0x00,0xe0,0xee,0x7e,0x00,0x00,0x00,0x00,0x00,
+ 0x06,0x00,0x00,0x00,0xc0,0x06,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xe0,
+ 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,
+ 0x00,0xfe,0xff,0x03,0x00,0x00,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x38,0x00,
+ 0x00,0x00,0xf0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x10,0x00,0x00,0x00,0xfe,0xf7,0x01,0x00,0x00,0x00,0x60,0x03,0x00,0x00,0x00,
+ 0xfe,0x1c,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0xfe,0x1e,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x07,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+
diff --git a/lib/images/psnfss4.xpm b/lib/images/psnfss4.xpm
new file mode 100644 (file)
index 0000000..55ea13b
--- /dev/null
@@ -0,0 +1,199 @@
+/* XPM */
+static char *psnfss4[] = {
+/* width height num_colors chars_per_pixel */
+"   264   174       16            1",
+/* colors */
+". c #000000",
+"# c #0a0a0a",
+"a c #181818",
+"b c #222222",
+"c c #303030",
+"d c #3a3a3a",
+"e c #4a4a4a",
+"f c #585858",
+"g c #626262",
+"h c #707070",
+"i c #7a7a7a",
+"j c #8a8a8a",
+"k c #989898",
+"l c #a2a2a2",
+"m c #b0b0b0",
+"n c #b8bcb8",
+/* pixels */
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnninnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjennnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncbknnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnjennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmmlllljljjj.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjjjjjjb#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.........#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#mnnnnnnnncfmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfb..........fnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnj.cmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjjffff.f....amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj............#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..........#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.#cccccccc#.ajnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd.............bknnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjffccf.......bknnnnnnnnnnnnnnnnnnnnnnnnnnnnjjjffff.f.....aknnnnnnnnnnnnnnnnnnnnnnnnnnnnj.............#knnnnnnnnnnnnnnnnnnnnnnnnnnnnj............elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............fmnnnnnnnnnnnnnnnnnnnnnnnnnnnl................fnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjffccf........#knnnnnnnnnnnnnnnnnnnnnnnnnnnjjjffff.f.......fmnnnnnnnnnnnnnnnnnnnnnnnnnnj..............#lnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............bflnnnnnnnnnnnnnnnnnnnnnnnnnnj...............ajnnnnnnnnnnnnnnnnnnnnnnnnnnj................aknnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjffccf........cmnnnnnnnnnnnnnnnnnnnnnnnnnnnjjjffff.f......#hnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............ennnnnnnnnnnnnnnnnnnnnnnnnnnnj.............bglnnnnnnnnnnnnnnnnnnnnnnnnnnnj.................knnnnnnnnnnnnnnnnnnnnnnnnnj...............fmnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnkkhhffhccccb..ennnnnnnnnnnnnnnnnnnnnnnnnnnnnjjjffff.f.....bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.............ennnnnnnnnnnnnnnnnnnnnnnnnnnnnj...........ainnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#..............bknnnnnnnnnnnnnnnnnnnnnnnnnnj.............ajnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnj.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkkkhhhhchccc.bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcccccccccc#.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..........cmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.............fnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.djjjjjjjjb.fmnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnkjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlffffffff.dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkffffffffa.bknnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnejnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjffknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjffknnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnme.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.bdmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfe.amnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmdccbe..ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlffffeidknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.eknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.cmemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfne.bmnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmb....jh..ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjgjjjjmnfhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfffffff...chnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngfffffffelkinnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjjje.cnlennnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjjjenmb.dnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjgjjjjmni#.cmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnggnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......#a...#flnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfknnnnnnnnnnihnnnnnnnnnnnnnnnnnnnnnnnnnnnj..jjjjjjjknnkfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjgjjjjjjjnnmb.ennnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjnnnnnnnk#.bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnhfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj........hic....elnnnnnnnnnnnnnnnnnnnnnnnnnnnniknnnnnnnnnnnnflnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnjhnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnnnl#.gnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjnnnnnnnnk#.gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnnfcmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfnnnnnnnnnnlf#..jnnnnnnnnnnnnnnnnnnnnnnnnnnniknnnnnnnnnnnhc.jnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnhhnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnnnnk#.hnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjnnnnnnnnnehnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnh..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfnnnnnnnnnnnmhajnnnnnnnnnnnnnnnnnnnnnnnnnnkdfffffffinlfa...jnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnfknnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnnnnh.#knnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjnnnnnnnmeknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnne..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkhnnnnnnnnnnnngmnnnnnnnnnnnnnnnnnnnnnnnnnnj.......#ie....cinnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnngknnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnnni.#knnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjjnnnnnnleknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjefffflne..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjgjjjjjjjknnflnnnnnnnnnnnnnnnnnnnnnnnnnnnj...........#flnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkccfffffecfnnhhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkfffffffennk#.hnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnjbcccckkdmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne....ie..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjjjjjjjgiiknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn..ahmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.cnihnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnk#.hnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnjefnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngfff#..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnejnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.ckfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmb.ennnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnjgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnniajnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.afnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfb.ennnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnlmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjmnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnjemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkglnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.#jnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnndffffffffffkglnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcccccccccb##knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngcgmnnnni.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjknnkdjfdknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjnnnnnf...#knnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnfnnnnnnnnnnnneknnnnnnnnnnnnnnnnnnnnnnnnnnnnleffffffffffkb#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjlnnnnne..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf...aknnnf..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhcfffcmndmnnmffmnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.....hnna....bmnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnkhnnnnnnnnnnnmcknnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnmb#knnnnnnnnnnnnnnnnnnnnnnnnnnnnb...afimnnhb.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm.....#inng...gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbnnnnkcbkmdfnnc#jnnnnnnnnnnnnnnnnnnnnnnnnnnl......#ig.bjd..bmnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnfnnnnnnnnnnnnj#knnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnnnnmb#knnnnnnnnnnnnnnnnnnnnnnnnnnj........bdfffceknnnnnnnnnnnnnnnnnnnnnnnnnnnnf.......bfhb...cknnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnh..hjb..hnnnnnnnnnnnnnnnnnnnnnnnnnj..........inmiffefnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnflnnnnnnnnnnnk#bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnkennnnnnnnnnnnnnnnnnnnnnnnnnnk......#cfijkfdinnnnnnnnnnnnnnnnnnnnnnnnnnnnni......#gkla..#gnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnh..hjb.#knnnnnnnnnnnnnnnnnnnnnnnnnj.......aa.fnj...fmnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmfnnnnnnnnnnnk#bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnhjnnnnnnnnnnnkfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..cfjnnnlc.amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna....bmnnf..aknnnnnnnnnnnnnnnnnnnnnnnnnnnnnbmnnnhbchnggnnbdmnnnnnnnnnnnnnnnnnnnnnnnnnnm#.....aml..c...hnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmecccccccccch#cmnnnnnnnnnnnnnnnnnnnnnnnnnnnnndnnnnnnnnnnnkfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna..hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni...fnnnnf.#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkbcccbnnelnnjdinnnnnnnnnnnnnnnnnnnnnnnnnnnnnicccceknnb....ennnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmfffffffffe.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnmffffffffffehfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn..#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljlnnnnnl#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbfcfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng...bmnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnjennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnidknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfcemnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfccccccdknnniinnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjjknnnnnlmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjjjjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj........bnnk..ennnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnjbjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbfbdebfgnnnnnjhnnnnnnnnnnnnnnnnnnnnnnnnnnnnl......#nnnnnlbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnk......#knnnnd.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.........gnl...fnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnb.cjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.....#knnnnfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjgfkejgglnnnnf#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnc......hnnnnnabmnnnnnnnnnnnnnnnnnnnnnnnnnnnnd......amnnne..ennnnnnnnnnnnnnnnnnnnnnnnnnnna........#mna...hnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj.#cdfgjjnnh...cjnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb.....#jnnnd#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnngkejgflfnnnng.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.....#knnnnf.bknnnnnnnnnnnnnnnnnnnnnnnnnnnl#......bijjd...ennnnnnnnnnnnnnnnnnnnnnnnnnnf.........bf#....hnnnnnnnnnnnnn",
+"nnnnnnnnnnnnj..........c.....dmnnnnnnnnnnnnnnnnnnnnnnnnnnnmfffffffgffc..elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfffdhdgfjjji..clnnnnnnnnnnnnnnnnnnnnnnnnnnnlc......dffff...fmnnnnnnnnnnnnnnnnnnnnnnnnnnf...............gnnnnnnnnnnnnnnnnnnnnnnnnnnj.................knnnnnnnnnnnn",
+"nnnnnnnnnnnnj.......ccfe....ahnnnnnnnnnnnnnnnnnnnnnnnnnnnnkccccccfjjjf.ajnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmefgdhdffjjjh..dlnnnnnnnnnnnnnnnnnnnnnnnnnnnh#.....agjjji#.bjnnnnnnnnnnnnnnnnnnnnnnnnnnne...............jnnnnnnnnnnnnnnnnnnnnnnnnnnh................#lnnnnnnnnnnnn",
+"nnnnnnnnnnnnkcffjjnnnnnf..ahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.....bmnnncemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnelejhfkennnnf.ennnnnnnnnnnnnnnnnnnnnnnnnnnni......bmnnnne.ennnnnnnnnnnnnnnnnnnnnnnnnnnnj.......ennnf...hnnnnnnnnnnnnnnnnnnnnnnnnnnnd.........hnb...#knnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnm##hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmdcccccclnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngieleiiemnnnngbnnnnnnnnnnnnnnnnnnnnnnnnnnnnna......jnnnnn#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnma......dnnnnb.#knnnnnnnnnnnnnnnnnnnnnnnnnnnn#........cnn#..#knnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnifmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmefeefdfinnnnnmjnnnnnnnnnnnnnnnnnnnnnnnnnnnnk......annnnnkfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.....cmnnnnidknnnnnnnnnnnnnnnnnnnnnnnnnnnnj.........jnj..#knnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk........fnnl##knnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjffffffinnnnmnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkddmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjjjnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb..bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#..ennnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnna...bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#..ennnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnfinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni....ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#..ennnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnk.aflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjjjjjjjjf....ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk...ennnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnf...bglnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbbknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn..#knnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjjjjjjjjj..#knnnnnnnnnnnnnnnnnnnnnnnnnnnc...............hnnnnnnnnnnnnnnnnnnnnnnnnnnlfffffffffffb...ennnnnnnnnnnnnnn",
+"nnnnnnnnnnnnkffffffg#.....#dfjnnnnnnnnnnnnnnnnnnnnnnnnnnlfffffffffffd..eknnnnnnnnnnnnnnnnnnnnnnnnnnnlfffffffffffff...#knnnnnnnnnnnnnnnnnnnnnnnnnj................#knnnnnnnnnnnnnnnnnnnnnnnnnj.................innnnnnnnnnnnnnnnnnnnnnnnnj................fnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmjjjknnk#....bfilnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng.ahnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjjjjjjjjj...bmnnnnnnnnnnnnnnnnnnnnnnnnnj................bmnnnnnnnnnnnnnnnnnnnnnnnnnl................bmnnnnnnnnnnnnnnnnnnnnnnnnnj...............#knnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnc..chlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn..bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn..bmnnnnnnnnnnnnnnnnnnnnnnnnnnnjffffffffff....#mnnnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjjjjjjjb..#knnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnh#flnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmb...#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..#knnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnninnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd....innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh..#knnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn....hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh...innnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc..ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkccchnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhb....e#elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlffc.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmjnmjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc......ne..gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncgncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlcccccccnne..fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnninnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#jmahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne..knnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....amnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnbennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkakk#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnj......fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnl#ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.hnnnnnnnnnnnnnnnnnnnnnnnnnnnj...........#ikagnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnk#hnnnnnnnnnnnnnnnnnnnnnnnnnnncccccccccccccc#.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcdmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnni.hnnnnnnnnnnnnnnnnnnnnnnnnnnjjjjjjjjjjjjjjje#knnnnnnnnnnnnnnnnnnnnnnnnnmjjjjjjjjjjjjknjagnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.......fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjjjjjjjjjjnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnncccccccccccccccc#.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.hnnnnnnnnnnnnnnnnnnnnnnnnkcccccccccc#blh#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#annnnnnnnnnnnnnnnnnnnnnnnnnnnnj......annnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc..........nnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnffffffffffffffff##knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhbmhbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj......innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnf#knnnnnnnnnnnnnnnnnnnnnnnnnnfffffffffffffffd#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#mj#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#.#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnh#knnnnnnnnnnnnnnnnnnnnnnnnnnncccccccccccccc##knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmajmainnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.......nk#.#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.....lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnj.innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh......k#.aknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlgc#..bdhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfamnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+};
+
+
diff --git a/lib/images/standard.xbm b/lib/images/standard.xbm
new file mode 100644 (file)
index 0000000..11775f6
--- /dev/null
@@ -0,0 +1,388 @@
+#define standard_width 264
+#define standard_height 174
+static char standard_bits[] = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,
+ 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20,
+ 0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x02,0x00,0x00,
+ 0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,
+ 0x02,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x64,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x00,0xa0,0x07,0x00,0x00,
+ 0x00,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,
+ 0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x00,0xe0,
+ 0x03,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0xfe,0x07,0x00,0x00,0x00,0xe0,0xff,0x00,0x00,0x00,0x00,0x62,0x00,0x00,
+ 0x00,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x96,0x04,0x00,0x00,0x00,0x40,0x52,0x00,0x00,0x00,0x00,
+ 0x62,0x00,0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+ 0x00,0xf0,0xff,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x62,0x00,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,
+ 0x00,0x40,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,
+ 0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0x20,
+ 0x04,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x18,0x00,0x00,
+ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,
+ 0x0e,0x00,0x00,0x00,0x00,0x20,0x06,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xc0,0x00,
+ 0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x7c,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,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,0x00,0x00,0x00,0x00,0x00,0x60,
+ 0x04,0x00,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,
+ 0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+ 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf6,
+ 0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,
+ 0x80,0x0f,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xde,0x00,0x00,0x00,0x00,0x60,0x1a,0x00,0x00,0x00,0x00,0x30,0x00,
+ 0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,0x00,0x00,0x8c,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,0x00,
+ 0x00,0x33,0x02,0x00,0x00,0x00,0xe0,0x1f,0x00,0x00,0x00,0x00,0x86,0x01,0x00,
+ 0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x03,
+ 0x00,0x00,0x00,0x00,0xfc,0x01,0x00,0x00,0x00,0xe0,0x1f,0x00,0x00,0x00,0x00,
+ 0x02,0x01,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+ 0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0x00,0xe0,0x1f,0x00,
+ 0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x18,
+ 0x00,0x00,0x00,0x00,0xe0,0x1a,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,
+ 0xe0,0x1f,0x00,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0xd8,0x00,
+ 0x00,0x00,0x00,0xc0,0x0f,0x00,0x00,0x00,0x00,0xec,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+ 0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x78,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc8,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x8c,
+ 0x00,0x00,0x00,0x00,0xfc,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,
+ 0x00,0x00,0x8c,0x01,0x00,0x00,0x00,0xae,0xaa,0x01,0x00,0x00,0x00,0x38,0x00,
+ 0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0xe0,0x06,0x00,0x00,0x00,0x76,
+ 0x00,0x00,0x00,0x00,0x00,0x06,0x01,0x00,0x00,0x00,0x04,0x80,0x01,0x00,0x00,
+ 0x00,0x3c,0x00,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x38,0x02,0x00,
+ 0x00,0x00,0xc4,0x01,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,0x0c,0x80,
+ 0x00,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0x00,
+ 0x0e,0x06,0x00,0x00,0x00,0x06,0x07,0x00,0x00,0x00,0x00,0x03,0x02,0x00,0x00,
+ 0x00,0x08,0xc0,0x00,0x00,0x00,0xc0,0x31,0x00,0x00,0x00,0x00,0xe3,0x00,0x00,
+ 0x00,0x00,0x80,0x03,0x02,0x00,0x00,0x00,0x04,0x1c,0x00,0x00,0x00,0x00,0x01,
+ 0x06,0x00,0x00,0x00,0x18,0x60,0x00,0x00,0x00,0x60,0x20,0x00,0x00,0x00,0x00,
+ 0x82,0x03,0x00,0x00,0x00,0xc0,0x00,0x02,0x00,0x00,0x00,0x04,0x30,0x00,0x00,
+ 0x00,0x80,0x01,0x04,0x00,0x00,0x00,0x30,0x60,0x00,0x00,0x00,0xe0,0x30,0x00,
+ 0x00,0x00,0x00,0x82,0x01,0x00,0x00,0x00,0xc0,0x01,0x06,0x00,0x00,0x00,0x06,
+ 0x38,0x00,0x00,0x00,0xc0,0x00,0x0c,0x00,0x00,0x00,0x30,0x20,0x00,0x00,0x00,
+ 0x80,0x23,0x00,0x00,0x00,0x00,0x63,0x00,0x00,0x00,0x00,0x00,0x07,0x02,0x00,
+ 0x00,0x00,0x04,0x0e,0x00,0x00,0x00,0xc0,0x00,0x18,0x00,0x00,0x00,0x60,0x30,
+ 0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x00,0x3a,0x00,0x00,0x00,0x00,0x00,
+ 0x1c,0x06,0x00,0x00,0x00,0x84,0x03,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,
+ 0x00,0x40,0x18,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,
+ 0x00,0x00,0x00,0x70,0x02,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x00,0xe0,0xff,
+ 0x1f,0x00,0x00,0x00,0xc0,0x08,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,
+ 0x02,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0c,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x05,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xe0,0x07,
+ 0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0x00,
+ 0x7e,0x00,0x00,0x00,0x00,0xe0,0x03,0x00,0x00,0x00,0x00,0x81,0x01,0x00,0x00,
+ 0x00,0x10,0x18,0x00,0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x00,0x10,0x18,0x00,
+ 0x00,0x00,0x00,0x81,0x01,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,0x00,0xc0,0x08,
+ 0x01,0x00,0x00,0x00,0x08,0x10,0x00,0x00,0x00,0xc0,0x00,0x01,0x00,0x00,0x00,
+ 0x08,0x10,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,
+ 0x00,0x40,0x08,0x02,0x00,0x00,0x00,0x04,0x20,0x00,0x00,0x00,0x40,0x81,0x02,
+ 0x00,0x00,0x00,0x04,0x28,0x00,0x00,0x00,0x40,0x00,0x02,0x00,0x00,0x00,0xf8,
+ 0x1f,0x00,0x00,0x00,0x20,0x10,0x04,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x00,
+ 0x20,0x42,0x04,0x00,0x00,0x00,0x02,0x44,0x00,0x00,0x00,0x20,0x00,0x04,0x00,
+ 0x00,0x00,0xfc,0x3f,0x00,0x00,0x00,0x20,0x08,0x04,0x00,0x00,0x00,0x02,0x40,
+ 0x00,0x00,0x00,0x20,0x24,0x04,0x00,0x00,0x00,0x02,0x42,0x00,0x00,0x00,0x20,
+ 0x18,0x04,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0xa0,0xbb,0x07,0x00,0x00,
+ 0x00,0x6e,0x7b,0x00,0x00,0x00,0x20,0x18,0x04,0x00,0x00,0x00,0x02,0x41,0x00,
+ 0x00,0x00,0x20,0x38,0x04,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x20,0x00,
+ 0x04,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x20,0x18,0x04,0x00,0x00,0x00,
+ 0x82,0x40,0x00,0x00,0x00,0x20,0x1c,0x04,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,
+ 0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x20,0x24,0x04,
+ 0x00,0x00,0x00,0x42,0x40,0x00,0x00,0x00,0x20,0x00,0x04,0x00,0x00,0x00,0xfe,
+ 0x7f,0x00,0x00,0x00,0x40,0x08,0x04,0x00,0x00,0x00,0x04,0x40,0x00,0x00,0x00,
+ 0x40,0x42,0x02,0x00,0x00,0x00,0x24,0x20,0x00,0x00,0x00,0x40,0x00,0x02,0x00,
+ 0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x40,0x10,0x02,0x00,0x00,0x00,0x04,0x20,
+ 0x00,0x00,0x00,0x40,0x81,0x02,0x00,0x00,0x00,0x14,0x20,0x00,0x00,0x00,0x40,
+ 0x00,0x02,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x80,0x08,0x01,0x00,0x00,
+ 0x00,0x08,0x10,0x00,0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0x08,0x10,0x00,
+ 0x00,0x00,0x80,0x00,0x01,0x00,0x00,0x00,0xbc,0x3d,0x00,0x00,0x00,0x00,0xd3,
+ 0x00,0x00,0x00,0x00,0x30,0x0c,0x00,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x00,
+ 0x30,0x0c,0x00,0x00,0x00,0x00,0xc3,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,
+ 0x00,0x00,0x2c,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x38,0x00,
+ 0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x80,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,
+ 0x00,0x00,0xc0,0xe7,0x03,0x00,0x00,0x00,0xc0,0x07,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x55,0x01,0x00,0x00,0x00,
+ 0xc0,0x01,0x00,0x00,0x00,0x40,0x3c,0x02,0x00,0x00,0x00,0xf0,0x07,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0xe0,0xff,0x03,
+ 0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x60,0x18,0x06,0x00,0x00,0x00,0xf0,
+ 0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x06,0x00,0x00,0x00,
+ 0x40,0x00,0x02,0x00,0x00,0x00,0x40,0x06,0x00,0x00,0x00,0x60,0x18,0x04,0x00,
+ 0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x0c,
+ 0x00,0x00,0x00,0x40,0x00,0x03,0x00,0x00,0x00,0x30,0x04,0x00,0x00,0x00,0x20,
+ 0x00,0x06,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
+ 0x00,0x18,0x18,0x00,0x00,0x00,0x60,0x00,0x02,0x00,0x00,0x00,0x30,0x0c,0x00,
+ 0x00,0x00,0x60,0x00,0x04,0x00,0x00,0x00,0xf0,0x0f,0x00,0x00,0x00,0x00,0x07,
+ 0x00,0x00,0x00,0x00,0x0c,0x30,0x00,0x00,0x00,0x40,0x00,0x02,0x00,0x00,0x00,
+ 0x18,0x18,0x00,0x00,0x00,0x40,0x00,0x06,0x00,0x00,0x00,0xe0,0x07,0x00,0x00,
+ 0x00,0xc0,0x0c,0x00,0x00,0x00,0x00,0x06,0x60,0x00,0x00,0x00,0x40,0x00,0x03,
+ 0x00,0x00,0x00,0x08,0x30,0x00,0x00,0x00,0x60,0x00,0x02,0x00,0x00,0x00,0xfc,
+ 0x3f,0x00,0x00,0x00,0x60,0x18,0x00,0x00,0x00,0x00,0x06,0x60,0x00,0x00,0x00,
+ 0x60,0x00,0x02,0x00,0x00,0x00,0x06,0x60,0x00,0x00,0x00,0xc0,0x00,0x03,0x00,
+ 0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x20,0x30,0x00,0x00,0x00,0x00,0x0c,0x30,
+ 0x00,0x00,0x00,0x40,0x00,0x02,0x00,0x00,0x00,0x0e,0x20,0x00,0x00,0x00,0x80,
+ 0x81,0x01,0x00,0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x60,0x30,0x00,0x00,0x00,
+ 0x00,0x18,0x18,0x00,0x00,0x00,0x40,0x00,0x03,0x00,0x00,0x00,0x0c,0x30,0x00,
+ 0x00,0x00,0x00,0x81,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00,0xc0,0x18,
+ 0x00,0x00,0x00,0x00,0x30,0x0c,0x00,0x00,0x00,0x60,0x00,0x02,0x00,0x00,0x00,
+ 0x18,0x18,0x00,0x00,0x00,0x00,0xc7,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x00,
+ 0x00,0x80,0x0d,0x00,0x00,0x00,0x00,0x60,0x06,0x00,0x00,0x00,0x40,0x55,0x03,
+ 0x00,0x00,0x00,0x30,0x0c,0x00,0x00,0x00,0x00,0x6c,0x00,0x00,0x00,0x00,0xfe,
+ 0xff,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,
+ 0xc0,0xff,0x03,0x00,0x00,0x00,0x20,0x04,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,
+ 0x00,0x00,0xfe,0x7f,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x80,0x01,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x06,0x00,0x00,0x00,0x00,
+ 0x18,0x00,0x00,0x00,0x00,0x7e,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x03,0x00,
+ 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x98,0x19,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,
+ 0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,
+ 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x18,0x00,0x00,0x00,0x1e,0x00,0x01,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0xe0,0xff,0x0f,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x73,0x00,0x03,0x00,0x00,0x00,0x00,0x30,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x70,
+ 0x00,0x00,0x00,0x00,0xe0,0xff,0x7f,0x00,0x00,0x80,0xc1,0xc0,0x07,0x00,0x00,
+ 0xe0,0xff,0x7f,0x00,0x00,0x00,0xfe,0xff,0x07,0x00,0x00,0x00,0x00,0x70,0x00,
+ 0x00,0x00,0xc0,0x3f,0x00,0x00,0x00,0x40,0x92,0x34,0x00,0x00,0x00,0x80,0x70,
+ 0x03,0x00,0x00,0x00,0x49,0x52,0x00,0x00,0x00,0x90,0x24,0x07,0x00,0x00,0x00,
+ 0x00,0x30,0x00,0x00,0x00,0xc0,0x2f,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,
+ 0x00,0x00,0x1f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,
+ 0x00,0x00,0xc0,0x7f,0x0f,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x08,0x00,0x00,0x00,0x00,0x86,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x80,0x01,0x00,0x00,0x60,0xd5,0x07,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0c,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x03,0x00,
+ 0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+
+
diff --git a/lib/images/standard.xpm b/lib/images/standard.xpm
new file mode 100644 (file)
index 0000000..235f465
--- /dev/null
@@ -0,0 +1,199 @@
+/* XPM */
+static char *standard[] = {
+/* width height num_colors chars_per_pixel */
+"   264   174       16            1",
+/* colors */
+". c #000000",
+"# c #0a0a0a",
+"a c #181818",
+"b c #222222",
+"c c #303030",
+"d c #3a3a3a",
+"e c #4a4a4a",
+"f c #585858",
+"g c #626262",
+"h c #707070",
+"i c #7a7a7a",
+"j c #8a8a8a",
+"k c #989898",
+"l c #a2a2a2",
+"m c #b0b0b0",
+"n c #b8bcb8",
+/* pixels */
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhnnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnlfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnldfnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfhfflnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfic..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlcb..cnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnahjf#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..egjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...ddmnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncbcccccccclnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfcccccccc#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnm.dnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfgmnjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndemnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncgjjjjjjjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnljjjjjjjjbjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnn.cnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnncccccccccccfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnl.ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnng.innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnmacnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnf#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfhbknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnlejnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnldfnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbdmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfic..jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlcb..cnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnninnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..egjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...ddmnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgmnjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndemnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnfnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnlnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnllnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlclnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.knnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.nnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnifnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnddhehddnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkb..#innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkbab#innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnddhehddnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnffnifnhdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#.....innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#hnnk#innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnannnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnkcbhfeainnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnghjnf.nljfknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf......bnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfennnnhbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.lnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnja.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmha.#.#.eknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc.......nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncinnnnm.nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnjccbbhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng..blnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd......#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndgnnnnk#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmefnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnf#ijfkbbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf.a#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh......ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhamnnndennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnllngdnmknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#hmbfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne....bmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebhidbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnehnnmblnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnidcgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnidcgnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.jnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnmlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhnnnnminnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.knnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.nnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.nnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn.nnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnibnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnna.hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnfbi#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnm#jncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmhmnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnfcnnj#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnifffffffffffffffmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf##jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj##fmnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnl#jnnncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnneaffffffffffffe.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf#fnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#elcjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcle#fmnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnneennnnl.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.knnnnnnnnnnndennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjadefnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjbf#gnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#elnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnle#fmnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnl.lnnnnneennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfcnnnnnnnnnnj#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlcajnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnlcajnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#elnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnle#fmnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnneennnnnnl.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#jnnnnnnnnncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#gnnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnjadlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#elnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnle#fmnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnj#lnnnnnnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfcnnnnnnnnj#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#cmnnnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnf.innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#clnnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnlc#lnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnncfnnnnnnnnm#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmahnnnnnnnagnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf#fmnnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnh#emnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf#elnnnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnle#fnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnj#mnnnnnnnnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhannnnnnhannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmeahnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnjccknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#elnnnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnle#fmnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnbfnnnnnnnnnnm#innnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnahnnnnnahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcckffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcmeahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#elnnncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnle#fmnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnhannnnnnnnnnnnhannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhamnnngannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#afnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj##fmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#elncjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnle#fmnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnd...............knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfnnm#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlelnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#ebjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjbe#fmnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#mnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#fmnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfm#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.cdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnminnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnddnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl..lnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne..ennnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnmgfeefgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgffffgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgffffgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgffffgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgffffgmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj....jnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnhgmnjjnmghnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgmnnnnmghnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgmnnnnmghnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgmnnnnmghnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhgmnnnnmghnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#....#knnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnihnnnjjnnnhinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnihnnnnnnnnhinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnidknnnnnnkdinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnihnnnnnnnkdinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnihnnnnnnnnhinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#......#knnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmennnnjjnnnnemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmennnnnnnnnnemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmenfknnnnkfnemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmennnnnnnkfnemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmennnnnnnnnnemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#........#lnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnhknnnnjjnnnnkhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhknnnnnnnnnnkhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhknnfknnkfnnkhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhknnnnnnkfnnkhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhknnnnnnnnnnkhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb..........bnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnfnnnnnjjnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnfkkfnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnkfnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnmeemnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh............hnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnefffffeefffffennnnnnnnnnnnnnnnnnnnnnnnnnnnnneffffffffffffennnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnneennnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnkfnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnng..gnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnfnnnnnjjnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnnnnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnkffknnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnkfnnnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfnnnnj..jnnnnfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnfmnnnnjjnnnnmfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmnnnnnnnnnnmfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmnnkfnnfknnmfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmnnkfnnnnnnmfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfmnnnnllnnnnmfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc............cnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnkhnnnnjjnnnnhknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkhnnnnnnnnnnhknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkhnkfnnnnfknhknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkhnkfnnnnnnnhknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkhnnnnnnnnnnhknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd............dnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnemnnnjjnnnmennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnemnnnnnnnnmennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnejfnnnnnnfjennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnejfnnnnnnnmennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnemnnnnnnnnmennnnnnnnnnnnnnnnnnnnnnnnnnnnnnng....eeee....gnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnmemnnjjnnmemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmemnnnnnnmemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcmnnnnnnmcmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcmnnnnnnmemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmemnnnnnnmemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#..#kffk#..#lnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnmggkjjkggmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmggknnkggmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmggknnkggmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmggknnkggmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmggknnkggmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfgmnccnmgflnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnmiffimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmiffimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmiffimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmiffimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmiffimnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnaannnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnddnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjjnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnccnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnia.agnnga.ainnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnni#..#innnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkjjjjjjjjjjlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj##jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk#jnkbeebknj#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj......jnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebg#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#cccccccccbcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnbffbnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfennnm##mnnnefnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne......ennnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebmnh#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnngannagnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnchnnnneennnnhcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc......cnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebmnnnh#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#jnnj#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncjnnnnmmnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnc......cnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnhaknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebmnnnnnh#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfnnnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncinnnnnnnnnnicnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf......fnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnh#f#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebmnnnnnnnh#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfbmnnnnmbfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffnnnnnnnnnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#....#lnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnh#knh#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfbmnnnnnnnnnh#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#lnnnnnnl#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#mnnnnnnnnm#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmfcfe....efcfmnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnh#knnnh#knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#knnnnnnnnnebmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#knnnnnnnnk#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncfnnnnnnnnfcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnb............bnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnni.knnnnng#nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#knnnnnnnebmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfbmnnnnnnnnmbfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#hnnnnnnh#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj..............jnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnmbennnnmbennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#knnnnnebmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnebmnnnnnnmbennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnk.knnnnk.knnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..............fnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnmbennmbennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#knnnebmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjcnnnnnnnnnjcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncennnnnnecnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#jnnj#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnf..............fnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnmbembennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#knebmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjbjjjjjjjjjgcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmagnnnngamnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj.kk.jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnng..............gnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnmb#ennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh#dbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkcccccccccccfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#lnnl#jnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfbbfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl.....eeee.....lnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnmhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfcnncfnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnaannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh....iffi....hnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#ii#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfflnccnlfflnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhaahnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnaannnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnaannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnddnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnl#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjbnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnaknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnchnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnffnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm.lnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnfdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnndlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnednnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnmahnnnnnnnnnnnnnnnnnnnnnnnnnnnnia.bjnnnnnnnnnjdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnednnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnne.............hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbemnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnk#hnnnnnnnnnnnnnnnnnnnnnnnnnnebjni#hnnnnnnnnnfennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbemnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmcdlnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#fjnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnfcccccccccccccca.clnnnnnnnnnnnnnnnnnnnnnnngbmnnnk#hnnnnnjdcc#clnnnnnnnnnnnnnnnnnnnnnnnnnfccccccccccccccb.blnnnnnnnnnnnnnnnnnnnnnnnnnfcccccccccccccccccknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnh.elnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfb.ccfffmnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnljjjjjjjjjjjjjjbbjnnnnnnnnnnnnnnnnnnnnnnnnmmnnnnnk.jnnnfahjgajnnnnnnnnnnnnnnnnnnnnnnnnnnljjjjjjjjjjjjjjjjjmnnnnnnnnnnnnnnnnnnnnnnnnnljjjjjjjjjjjjjje#hnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjaelnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlfb.ccfffmnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnfbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#efadmnmcknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnj#knnnnnnnnnnnnnnnnnnnnnnnnnnnifffffffffffffbknnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmf#fjnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnj#mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmgfjnnnfhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm#innnnnnnnnnnnnnnnnnnnnnnnnnnnifffffffffffbbmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmbemnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnndhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnhnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnfdnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjamnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnednnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnn.mnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn#lnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnajnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnm.lnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnjbnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnlnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn",
+"nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"
+};
+
+
diff --git a/lib/kbd/american-2.kmap b/lib/kbd/american-2.kmap
new file mode 100644 (file)
index 0000000..7fc40a2
--- /dev/null
@@ -0,0 +1,19 @@
+#
+# Contributed by Juergen Vigna (so ask me if you have questions)
+# This is a keyboard map for keyboards which do not have dead-keys
+# so you can put accents and umlauts on carachters
+#
+\kmod ' acute aeiouAEIOU
+\kmod ` grave aeiouAEIOU
+\kmod \" umlaut aeouAEOU
+\kxmod acute i "\\'{\\i}"
+\kxmod grave i "\\`{\\i}"
+\kxmod acute j "\\'{\\j}"
+\kxmod grave j "\\`{\\j}"
+# \kxmod acute ' '
+# \kxmod grave ` `
+# \kxmod umlaut \" \"
+#
+# Example of substituting local chars to TeX-Strings
+#
+# \kmap ß "\\ss{}"
diff --git a/lib/kbd/american.kmap b/lib/kbd/american.kmap
new file mode 100644 (file)
index 0000000..95a2ebb
--- /dev/null
@@ -0,0 +1,52 @@
+\kmod ' acute all
+\kmod ` grave all
+\kmod ~ tilde all
+\kmod . dot all
+\kmod _ underbar all
+\kmod - macron all
+\kmod "," cedilla all
+\kmod ; underdot all
+\kmod ^ circumflex all
+\kmod < tie all
+\kmod > breve all
+\kmod + caron all
+\kmod / hugarian_umlaut all
+\kmod : umlaut all
+\kmod ? circle all
+# \kxmod acute i "\\'{\\i}"
+# \kxmod grave i "\\`{\\i}"
+# \kxmod tilde i "\\~{\\i}"
+# \kxmod dot i "\\.{\\i}"
+# \kxmod macron i "\\={\\i}"
+# \kxmod circumflex i "\\^{\\i}"
+# \kxmod breve i "\\u{\\i}"
+# \kxmod caron i "\\v{\\i}"
+# \kxmod hugarian_umlaut i "\\H{\\i}"
+# \kxmod umlaut i "\\\"{\\i}"
+# \kxmod circle i "\\r{\\i}"
+# \kxmod acute j "\\'{\\j}"
+# \kxmod grave j "\\`{\\j}"
+# \kxmod tilde j "\\~{\\j}"
+# \kxmod dot j "\\.{\\j}"
+# \kxmod macron j "\\={\\j}"
+# \kxmod circumflex j "\\^{\\j}"
+# \kxmod breve j "\\u{\\j}"
+# \kxmod caron j "\\v{\\j}"
+# \kxmod hugarian_umlaut j "\\H{\\j}"
+# \kxmod umlaut j "\\\"{\\j}"
+# \kxmod circle j "\\r{\\j}"
+# \kxmod acute ' '
+# \kxmod grave ` `
+# \kxmod tilde ~ ~
+# \kxmod dot . .
+# \kxmod underbar _ _
+# \kxmod macron - -
+# \kxmod cedilla "," ","
+# \kxmod underdot ; ;
+# \kxmod circumflex ^ ^
+# \kxmod tie < <
+# \kxmod breve > >
+# \kxmod caron + +
+# \kxmod hugarian_umlaut / /
+# \kxmod umlaut : :
+# \kxmod circle ? ?
diff --git a/lib/kbd/brazil.kmap b/lib/kbd/brazil.kmap
new file mode 100644 (file)
index 0000000..146928d
--- /dev/null
@@ -0,0 +1,25 @@
+#
+# brazil.kmap
+#
+# this is for Brazil, with US Keyborad.
+# 1998 By Marcos Tadeu (marcos@microlink.com.br)
+#
+# For use with br.ispell (http://www.ime.usp.br/~ueda/br.ispell),
+# execute a ln -s br.hash brazil.hash in a /usr/lib/ispell directory
+# and configure Brazil as default language in Layout/Document/Language
+#
+# Pode ser usado com o ispell Brasil (http://www.ime.usp.br/~ueda/br.ispell).
+# Se o ispell esta' instalado, va' para o diretorio /usr/lib/ispell e
+# execute um ln -s br.hash brazil.hash.  Use Brazil na opcao
+# Layout/Document/Language do lyx
+#
+\kmod ' acute aeioucAEIOUC
+\kmod ` grave aA
+\kmod ~ tilde aoAO
+\kmod ^ circumflex eaoEAO
+\kmod \" umlaut aeiouAEIOU
+
+\kxmod acute c "\\c{c}"
+\kxmod acute C "\\c{C}"
+
+\kxmod acute i "\\'{\\i}"
diff --git a/lib/kbd/brazil2.kmap b/lib/kbd/brazil2.kmap
new file mode 100644 (file)
index 0000000..f0af8fe
--- /dev/null
@@ -0,0 +1,29 @@
+#
+# brazil.kmap
+# Brazilian keymap for american style keyboards
+#  
+
+# (C)1998 by Rubens Ramos, rubens_ramos@yahoo.com
+#
+# Obs.:  
+
+# 1. I had to use "font_encoding T1"in
+# lyxrc file to view cedillas in dvi output.
+# 2. You should select brazil in your lyxrc file.
+#    (bogus)
+#
+
+\kmod ` grave aeiouAEIOU
+\kmod ~ tilde aoAO
+\kmod ^ circumflex eaoEAO
+\kmod ' cedilla cC
+\kxmod cedilla a "\\'{a}"
+\kxmod cedilla A "\\'{A}"
+\kxmod cedilla e "\\'{e}"
+\kxmod cedilla E "\\'{E}"
+\kxmod cedilla i "\\'{i}"
+\kxmod cedilla I "\\'{I}"
+\kxmod cedilla o "\\'{o}"
+\kxmod cedilla O "\\'{O}"
+\kxmod cedilla u "\\'{u}"
+\kxmod cedilla U "\\'{U}"
diff --git a/lib/kbd/czech.kmap b/lib/kbd/czech.kmap
new file mode 100644 (file)
index 0000000..7e2b0de
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# Key definition file for Czech national keyboard for LyX - hope it's OK
+#
+# (c)1995 by Ivan Schreter, schreter@ccsun.tuke.sk
+#
+
+\kmod = acute aceilnorsuyzACEILNORSUYZ # acute is on '='
+\kmod + caron cdelnrstzCDELNRSTZ       # caron is on Shift-'='
+\kmap ~ ;
+\kmap 1 +              # map numbers to Czech letters and
+\kmap ! 1              # Shift-numbers to numbers
+\kmap 2 "\\v{e}"
+\kmap @ 2
+\kmap 3 "\\v{s}"
+\kmap \# 3
+\kmap 4 "\\v{c}"
+\kmap $ 4
+\kmap 5 "\\v{r}"
+\kmap % 5
+\kmap 6 "\\v{z}"
+\kmap ^ 6
+\kmap 7 "\\'{y}"
+\kmap & 7
+\kmap 8 "\\'{a}"
+\kmap * 8
+\kmap 9 "\\'{\\i}"
+\kmap ( 9
+\kmap 0 "\\'{e}"
+\kmap ) 0
+\kmap - =              # map other keys to reflect Slovak keyboard
+\kmap _ %
+\kmap ; "\\r{u}"
+\kmap : \"
+\kmap ' "\\S{}"
+\kmap \" !
+\kmap [ "\\'{u}"
+\kmap { /
+\kmap ] )
+\kmap } (
+\kmap < ?
+\kmap > :
+\kmap ? _
+\kmap / -
+\kxmod caron o "\\^{o}"                # mapping exception - generate ^ instead for o
+\kxmod caron O "\\^{O}"
+\kxmod caron u "\\r{u}"                # generate circle for u - it's a Czech letter
+\kxmod caron U "\\r{U}"
+\kxmod caron t "\\q{t}"        # use proper caron mark for t, l, d and L
+\kxmod caron l "\\q{l}"
+\kxmod caron L "\\q{L}"
+\kxmod caron d "\\q{d}"
+\kxmod acute i "\\'{\\i}"      # use only root of i for i acute
+
+
diff --git a/lib/kbd/european.kmap b/lib/kbd/european.kmap
new file mode 100644 (file)
index 0000000..0f6f92e
--- /dev/null
@@ -0,0 +1,72 @@
+#
+# (C)1998 by Jacek M. Holeczek, holeczek@us.edu.pl
+# This is the second version of the international european keyboard map.
+# It should fully work ( at least ) for english, french, german, polish.
+# Other languages are currently ( probably ) not fully supported, but
+# most of special characters should already be present. Feel free to
+# add your own language here.
+# To get all characters properly in latex/dvi/ps one needs to set
+# Layout->Document->Encoding latin1 in LyX.
+# This is a keyboard map for keyboards which do not have dead-keys
+# so you can put accents and umlauts on characters.
+#
+\kmod ' acute aAcCeEiIjJlLnNoOsSuUzZ
+\kmod ` grave aAeEiIjJoOuU
+\kmod ~ tilde aAoO
+\kmod "," cedilla aAcCeE
+\kmod ^ circumflex aAcCeEiIjJnNoOrRsSuUyYzZ
+\kmod \" umlaut aAeEiIjJoOsSuUyY$\#~
+\kmod . dot zZ
+#
+# some exceptions
+#
+\kxmod acute i "\\'{\\i}"
+\kxmod grave i "\\`{\\i}"
+\kxmod circumflex i "\\^{\\i}"
+\kxmod acute j "\\'{\\j}"
+\kxmod grave j "\\`{\\j}"
+\kxmod circumflex j "\\^{\\j}"
+#
+# polish characters
+#
+\kxmod cedilla a "\\k{a}"
+\kxmod cedilla A "\\k{A}"
+# \kxmod acute c "\\'{c}"
+# \kxmod acute C "\\'{C}"
+\kxmod cedilla e "\\k{e}"
+\kxmod cedilla E "\\k{E}"
+\kxmod acute l "\\l{}"
+\kxmod acute L "\\L{}"
+# \kxmod acute n "\\'{n}"
+# \kxmod acute N "\\'{N}"
+# \kxmod acute o "\\'{o}"
+# \kxmod acute O "\\'{O}"
+# \kxmod acute s "\\'{s}"
+# \kxmod acute S "\\'{S}"
+# \kxmod dot z "\\.{z}"
+# \kxmod dot Z "\\.{Z}"
+# \kxmod acute z "\\'{z}"
+# \kxmod acute Z "\\'{Z}"
+#
+# german characters
+#
+\kxmod umlaut s "\\ss{}"
+\kxmod umlaut S "\\ss{}"
+#
+# special characters
+#
+\kxmod umlaut $ "\\pounds{}"   # pound
+\kxmod umlaut \# "\\S{}"       # paragraph
+\kxmod umlaut ~ "\\b{}"                # degree
+#
+# \kxmod acute ' '
+# \kxmod grave ` `
+# \kxmod tilde ~ ~
+# \kxmod cedilla "," ","
+# \kxmod circumflex ^ ^
+# \kxmod umlaut \" \"
+# \kxmod dot . .
+#
+# Example of substituting local chars to TeX-Strings
+#
+# \kmap ß "\\ss{}"
diff --git a/lib/kbd/francais.kmap b/lib/kbd/francais.kmap
new file mode 100644 (file)
index 0000000..942e587
--- /dev/null
@@ -0,0 +1,10 @@
+#
+# Key definition file for French national keyboard for LyX
+#
+
+\kmap ¤ "\\oe{}"                # {\oe} before u and i
+\kmod ¨ umlaut aeiouAEIOU       # umlaut on ¨
+\kxmod umlaut i "\\\"{\\i}"      # some exceptions
+\kmod ^ circumflex aeiouAEIOU   # circumflex on ^
+\kxmod circumflex i "\\^{\\i}"   # some exceptions
+\kmod ² cedilla cC              # cedilla on cC
diff --git a/lib/kbd/french.kmap b/lib/kbd/french.kmap
new file mode 100644 (file)
index 0000000..ae7bcbf
--- /dev/null
@@ -0,0 +1,60 @@
+#
+# Key definition file for French national keyboard for LyX
+#
+# (c)1996 by Ivan Schreter, schreter@ccsun.tuke.sk
+#
+# Gosh! French have sooooo crazy keyboard!!!
+# Would some of them please verify it?
+#
+
+\kmod { umlaut aeijouyAEIJOUY                  # umlaut on {
+\kmod [ circumflex aceijnorsuyzACEIJNORSUYZ    # circumflex on [
+\kmap 1 &              # map numbers to some letters and
+\kmap ! 1              # Shift-numbers to numbers
+\kmap 2 "\\'{e}"
+\kmap @ 2
+\kmap 3 \"
+\kmap \# 3
+\kmap 4 '
+\kmap $ 4
+\kmap 5 (
+\kmap % 5
+\kmap 6 -
+\kmap ^ 6
+\kmap 7 "\\`{e}"
+\kmap & 7
+\kmap 8 _
+\kmap * 8
+\kmap 9 "\\c{c}"
+\kmap ( 9
+\kmap 0 "\\`{a}"
+\kmap ) 0
+\kmap - )
+\kmap _ "\\b{}"        # degree sign?
+#\kmap `               # to the power of two?
+\kmap a q
+\kmap A Q      # switched A<->Q
+\kmap q a
+\kmap Q A
+\kmap w z
+\kmap z w      # switched W<->Z
+\kmap W Z
+\kmap Z W
+\kmap m ","
+\kmap M        ?
+\kmap ] $
+\kmap } "\\pounds{}"   # pound sign?
+\kmap ; m
+\kmap : M
+\kmap ' "\\`{u}"
+\kmap \" %
+\kmap . :
+\kmap "," ;
+\kmap < .
+\kmap > /
+\kmap ? "\\S{}"
+\kmap / !
+\kmap \\ *
+\kmap | "$\\mu$"
+\kxmod circumflex i "\\^{\\i}" # some exceptions
+\kxmod umlaut i "\\\"{\\i}"
diff --git a/lib/kbd/german-2.kmap b/lib/kbd/german-2.kmap
new file mode 100644 (file)
index 0000000..8cfd8c9
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# German keyboard definition for LyX - hopefully correct
+#
+# (C)1995 by Ivan Schreter, schreter@ccsun.tuke.sk
+#
+\kmod ` circumflex aceijnorsuyzACEIJNORSUYZ    # dead circumflex
+\kmap ä ä
+\kmap ö ö
+\kmap ü ü
+\kmap ß ß
+\kmap Ä Ä
+\kmap Ö Ö
+\kmap Ü Ü
+\kmap ~ °              # degree
+\kmap @ \"             # shift-numbers is different on German kbd
+\kmap \# "\\S{}"
+\kmap ^ &
+\kmap & /
+\kmap * (
+\kmap ( )
+\kmap ) =
+\kmap - ß              # "\\ss{}"              # - maps to sharfes s
+\kmap _ ?              # _ maps to question mark
+\kmod = acute aceijlnorsuyzACEIJLNORSUYZ       # = is acute deadkey
+\kmod + grave aceijlnorsuyzACEIJLNORSUYZ       # Shift-= is grave dead key
+\kmap z y              # they have switched Y and Z !!
+\kmap Z Y
+\kmap y z
+\kmap Y Z
+\kmap [ ü              #"\\\"{u}"              # [{ maps to u umlaut
+\kmap { Ü              #"\\\"{U}"
+\kmap ] +
+\kmap } *
+\kmap ; ö              #"\\\"{o}"              # ;: maps to o umlaut
+\kmap : Ö              #"\\\"{O}"
+\kmap ' ä              #"\\\"{a}"              # '" maps to a umlaut
+\kmap \" Ä             # "\\\"{A}"
+\kmap < ;              # yet some modifiers
+\kmap > :
+\kmap / -
+\kmap ? _
+\kmap \\ \#
+\kmap | '
+\kxmod acute i "\\'{\\i}"              # correct some misspellings :-)
+\kxmod acute j "\\'{\\j}"
+\kxmod grave i "\\`{\\i}"
+\kxmod grave j "\\`{\\j}"
+\kxmod circumflex i "\\^{\\i}"
+\kxmod circumflex j "\\^{\\j}"
+
diff --git a/lib/kbd/german-3.kmap b/lib/kbd/german-3.kmap
new file mode 100644 (file)
index 0000000..d9af4e6
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# German keyboard definition for LyX - hopefully correct
+#
+# (C)1996 by István Pál (3.14) <pali@agy.bgytf.hu>
+# Bindings for German keyboard by Ivan Schreter and I've added
+# (changed, removed) ISO-8859.1 (Latin-1) key mapping for LyX.
+# Set the Layout/Document/Encoding to latin1 xor latin2
+#
+\kmod ` circumflex aceijnorsuyzACEIJNORSUYZ    # dead circumflex
+#\kmap ä ä
+#\kmap ö ö
+#\kmap ü ü
+#\kmap ß ß
+#\kmap Ä Ä
+#\kmap Ö Ö
+#\kmap Ü Ü
+\kmap ~ °              # degree
+\kmap @ \"             # shift-numbers are different on German kbd
+\kmap \# §     #"\\S "
+\kmap ^ &
+\kmap & /
+\kmap * (
+\kmap ( )
+\kmap ) =
+\kmap - ß              # "\\ss "               # - maps to sharfes s
+\kmap _ ?              # _ maps to question mark
+\kmod = acute aceijlnorsuyzACEIJLNORSUYZ       # = is acute deadkey
+\kmod + grave aceijlnorsuyzACEIJLNORSUYZ       # Shift-= is grave dead key
+#\kmap z y             # they have switched Y and Z !!
+#\kmap Z Y
+#\kmap y z
+#\kmap Y Z
+\kmap [ ü              #"\\\"u"                # [{ maps to u umlaut
+\kmap { Ü              #"\\\"U"
+\kmap ] +
+\kmap } *
+\kmap ; ö              #"\\\"o"                # ;: maps to o umlaut
+\kmap : Ö              #"\\\"O"
+\kmap ' ä              #"\\\"a"                # '" maps to a umlaut
+\kmap \" Ä             # "\\\"A"
+\kmap < ;              # yet some modifiers
+\kmap > :
+\kmap / -
+\kmap ? _
+\kmap \\ \#
+\kmap | '
+# needed only for lyx-0.10.7
+#\kxmod acute i "\\'\\i"               # correct some misspellings :-)
+#\kxmod acute j "\\'\\j"
+#\kxmod grave i "\\`\\i"
+#\kxmod grave j "\\`\\j"
+#\kxmod circumflex i "\\^\\i"
+#\kxmod circumflex j "\\^\\j"
+
diff --git a/lib/kbd/german.kmap b/lib/kbd/german.kmap
new file mode 100644 (file)
index 0000000..57a5455
--- /dev/null
@@ -0,0 +1,43 @@
+#
+# German keyboard definition for LyX - hopefully correct
+#
+# (C)1995 by Ivan Schreter, schreter@ccsun.tuke.sk
+#
+\kmod ` circumflex aceijnorsuyzACEIJNORSUYZ    # dead circumflex
+\kmap ~ °              # degree
+\kmap @ \"             # shift-numbers is different on German kbd
+\kmap \# "\\S{}"
+\kmap ^ &
+\kmap & /
+\kmap * (
+\kmap ( )
+\kmap ) =
+\kmap - "\\ss{}"               # - maps to sharfes s
+\kmap _ ?              # _ maps to question mark
+\kmod = acute aceijlnorsuyzACEIJLNORSUYZ       # = is acute deadkey
+\kmod + grave aceijlnorsuyzACEIJLNORSUYZ       # Shift-= is grave dead key
+\kmap z y              # they have switched Y and Z !!
+\kmap Z Y
+\kmap y z
+\kmap Y Z
+\kmap [ "\\\"{u}"              # [{ maps to u umlaut
+\kmap { "\\\"{U}"
+\kmap ] +
+\kmap } *
+\kmap ; "\\\"{o}"              # ;: maps to o umlaut
+\kmap : "\\\"{O}"
+\kmap ' "\\\"{a}"              # '" maps to a umlaut
+\kmap \" "\\\"{A}"
+\kmap < ;              # yet some modifiers
+\kmap > :
+\kmap / -
+\kmap ? _
+\kmap \\ \#
+\kmap | '
+\kxmod acute i "\\'{\\i}"              # correct some misspellings :-)
+\kxmod acute j "\\'{\\j}"
+\kxmod grave i "\\`{\\i}"
+\kxmod grave j "\\`{\\j}"
+\kxmod circumflex i "\\^{\\i}"
+\kxmod circumflex j "\\^{\\j}"
+
diff --git a/lib/kbd/greek.kmap b/lib/kbd/greek.kmap
new file mode 100644 (file)
index 0000000..766cdd8
--- /dev/null
@@ -0,0 +1,10 @@
+# Greek keyboard definition for LyX - hopefully correct # 
+# Flames to Alkis Polyzotis, alkis@dbnet.ece.ntua.gr
+#
+\kmod ; acute aeioyvhAEIOYVH # áåéïõùÁÅÉÏÕÙ 
+\kmod : umlaut iyIY # éõÉÕ
+\kmod ' grave ayiAYI
+\kmap Q :
+\kcomb acute umlaut iy
+\kcomb umlaut acute iy
+
diff --git a/lib/kbd/iso8859-1.cdef b/lib/kbd/iso8859-1.cdef
new file mode 100644 (file)
index 0000000..e11b934
--- /dev/null
@@ -0,0 +1,110 @@
+#
+# Character definition file for iso8859-1 character set
+#
+# (c)1996 by Ivan Schreter, schreter@ccsun.tuke.sk
+#
+# Any takers to complete the stuff?
+#
+
+161    "!`"            # mirrored !
+#162   Cent sign?
+163    "\\pounds{}"    # pound sign
+#164   String sign?
+#165   Yen sign?
+#166   What's this?
+167    "\\S{}"         # paragraph
+168    "\\\"{}"        # umlaut
+169    "\copyright{}"
+170    "\\b{a}"                # a macron
+171    "\guillemotleft{}"
+#172   What's this?
+#173   horiz. line?
+#174   Registered?
+#175   horiz. line at the top?
+176    "\\b{}" # circle
+#177   Plusminus?
+#178   ^2?
+#179   ^3?
+180    "\\'{}" # acute
+181    "$\\mu$"        # micro
+#182   Paragraph?
+183    "$\\cdot$"
+184    "\\c{}" # cedilla
+185    "${^1}$"
+186    "\\b{o}"                # o macron
+187    "\guillemotright{}"
+188    "\ensuremath{\frac14}"
+189    "\ensuremath{\frac12}"
+190    "\ensuremath{\frac34}"            # "0BE
+191    "?`"            # mirrored ?
+192    "\\`{A}"
+193    "\\'{A}"
+194    "\\^{A}"
+195    "\\~{A}"
+196    "\\\"{A}"
+197    "\\AA{}"                # A with circle
+198    "\\AE{}"                # AE cat'ed together
+199    "\\c{C}"                # C cedilla
+200    "\\`{E}"
+201    "\\'{E}"
+202    "\\^{E}"
+203    "\\\"{E}"
+204    "\\`{I}"
+205    "\\'{I}"
+206    "\\^{I}"
+207    "\\\"{I}"
+208    "\\DH{}"
+209    "\\~{N}"
+210    "\\`{O}"
+211    "\\'{O}"
+212    "\\^{O}"
+213    "\\~{O}"
+214    "\\\"{O}"
+215    "$\\times$"
+216    "\\O{}"
+217    "\\`{U}"
+218    "\\'{U}"
+219    "\\^{U}"
+220    "\\\"{U}"
+221    "\\'{Y}"
+222    "\\TH{}"
+223    "\\ss{}"                # German sharp S
+224    "\\`{a}"
+225    "\\'{a}"
+226    "\\^{a}"
+227    "\\~{a}"
+228    "\\\"{a}"
+229    "\\aa{}"                # a with circle
+230    "\\ae{}"
+231    "\\c{c}"                # c cedilla
+232    "\\`{e}"
+233    "\\'{e}"
+234    "\\^{e}"
+235    "\\\"{e}"
+236    "\\`{\\i}"
+237    "\\'{\\i}"
+238    "\\^{\\i}"
+239    "\\\"{\\i}"
+240    "\\dh{}" 
+241    "\\~{n}"
+242    "\\`{o}"
+243    "\\'{o}"
+244    "\\^{o}"
+245    "\\~{o}"
+246    "\\\"{o}"
+247    "$\\div$"
+248    "\\o{}"
+249    "\\`{u}"
+250    "\\'{u}"
+251    "\\^{u}"
+252    "\\\"{u}"
+253    "\\'{y}"
+254    "\\th{}"
+255    "\\\"{y}"
+
+
+
+
+
+
+
diff --git a/lib/kbd/iso8859-2.cdef b/lib/kbd/iso8859-2.cdef
new file mode 100644 (file)
index 0000000..0bed65c
--- /dev/null
@@ -0,0 +1,101 @@
+#
+# LaTeX codes for iso8859-2 character set.
+#
+# (c) 1996  by Petr Mejzlík, mejzlik@fi.muni.cz
+# Modified by Asger Alstrup (not checked, but better)
+161  "\\c{A}"  # A cedilla
+162  "\\u{}"   # breve
+163  "\\L{}"   # L slash
+#164 
+165  "\\q{L}"  # L caron
+166  "\\'{S}"  # S acute
+167  "\\S{}"   # section mark
+168  "\\\"{}"  # umlaut
+169  "\\v{S}"  # S caron
+170  "\\c{S}"  # S cedilla
+171  "\\v{T}"  # T caron
+172  "\\'{Z}"  # Z acute
+173  "\\-{}"   # dash
+174  "\\v{Z}"  # Z caron
+175  "\\.{Z}"  # Z dot
+176  "\\r{}"   # circle
+177  "\\c{a}"  # a cedilla
+178  "\\k{}"   #
+179  "\\l{}"   # l slash
+180  "\\'{}"   # acute
+181  "\\q{l}"  # l caron
+182  "\\'{s}"  # s acute
+183  "\\v{}"   # caron
+184  "\\c{}"   # cedilla
+185  "\\v{s}"  # s caron
+186  "\\c{s}"  # s cedilla
+187  "\\q{t}"  # t caron
+188  "\\'{z}"  # z acute
+189  "\\H{}"   #
+190  "\\v{z}"  # z caron
+191  "\\.{z}"  # z dot
+192  "\\'{R}"  # R acute
+193  "\\'{A}"  # A acute
+194  "\\^{A}"  # A circumflex
+195  "\\u{A}"  # A breve
+196  "\\\"{A}" # A umlaut
+197  "\\'{L}"  # L acute
+198  "\\'{C}"  # C acute
+199  "\\c{C}"  # C cedilla
+200  "\\v{C}"  # C caron
+201  "\\'{E}"  # E acute
+202  "\\k{E}"
+203  "\\\"{E}" # E umlaut
+204  "\\v{E}"  # E caron
+205  "\\'{I}"  # I acute
+206  "\\^{I}"  # I circumflex
+207  "\\v{D}"  # D caron
+208  "\\DH{}"  #
+209  "\\'{N}"  # N acute
+210  "\\v{N}"  # N caron
+211  "\\'{O}"  # O acute
+212  "\\^{O}"  # O circumflex
+213  "\\H{O}"  #
+214  "\\\"{O}" # O umlaut
+215  "$\\times$"
+216  "\\v{R}"  # R caron
+217  "\\r{U}"  # U circle
+218  "\\'{U}"  # U acute
+219  "\\H{U}"  #
+220  "\\\"{U}" # U umlaut
+221  "\\'{Y}"  # Y acute
+222  "\\c{T}"  # T cedilla
+223  "\\ss{}"  #
+224  "\\'{r}"  # r acute
+225  "\\'{a}"  # a acute
+226  "\\^{a}"  # a circumflex
+227  "\\u{a}"  # a breve
+228  "\\\"{a}" # a umlaut
+229  "\\'{l}"  # l acute
+230  "\\'{c}"  # c acute
+231  "\\c{c}"  # c cedilla
+232  "\\v{c}"  # c caron
+233  "\\'{e}"  # e acute
+234  "\\k{e}"  #
+235  "\\\"{e}" # e umlaut
+236  "\\v{e}"  # e caron
+237  "\\'{\\i}"        # i acute
+238  "\\^{\\i}"        # i circumflex
+239  "\\q{d}"  # d caron
+240  "\\dh{}"  #
+241  "\\'{n}"  # n acute
+242  "\\v{n}"  # n caron
+243  "\\'{o}"  # o acute
+244  "\\^{o}"  # o caron
+245  "\\H{o}"  #
+246  "\\\"{o}" # o umlaut
+247  "$\\div$"
+248  "\\v{r}"  # r caron
+249  "\\r{u}"  # u circle
+250  "\\'{u}"  # u acute
+251  "\\H{u}"  #
+252  "\\\"{u}" # u umlaut
+253  "\\'{y}"  # y acute
+254  "\\c{t}"  # t cedilla
+255  "\\.{}"   # dot
diff --git a/lib/kbd/iso8859-7.cdef b/lib/kbd/iso8859-7.cdef
new file mode 100644 (file)
index 0000000..b6b6044
--- /dev/null
@@ -0,0 +1,78 @@
+#
+# Character definition file for iso8859-7 character set
+#
+# (c)1997 by Alkis Polyzotis, npoly@dbnet.ece.ntua.gr
+#
+
+182    "\\'{A}"                # accented A
+184    "\\'{E}"        # accented E
+185    "\\'{H}"  # accented H
+186    "\\'{I}"        # accented I
+188    "\\'{O}"
+190    "\\'{Y}"    # accented Upsilon
+191    "\\'{V}"        # accented Omega        
+192    "\\'{\\\"{\\i}}" # accented iota with dyalitika
+192 "\\\"{\\'{\\i}}"
+193 "A"
+194 "B"
+195 "G"
+196 "D"
+197 "E"
+198 "Z"
+199 "H"
+200 "U"
+201 "I"
+202 "K"
+203 "L"
+204 "M"
+205 "N"
+206 "J"
+207 "O"
+208 "P"
+209 "R"
+210 "S"
+211 "S"
+212 "T"
+213 "Y"
+214 "F"
+215 "X"
+216 "C"
+217 "V"
+218 "\\\"{I}" 
+219 "\\\"{Y}"
+220 "\\'{a}"   # accented alpha
+221 "\\'{e}"
+222 "\\'{h}"
+223 "\\'{\\i}"
+224 "\\'{\\\"{y}}"
+224 "\\\"{\\'{y}}"
+225 "a"
+226 "b"
+227 "g"
+228 "d"
+229 "e"
+230 "z"
+231 "h"
+232 "u"
+233 "i"
+234 "k"
+235 "l"
+236 "m"
+237 "n"
+238 "j"
+239 "o"
+240 "p"
+241 "r"
+242 "w"
+243 "s"
+244 "t"
+245 "y"
+246 "f"
+247 "x"
+248 "c"
+249 "v"
+250 "\\\"{\\i}"
+251 "\\\"{y}"
+252 "\\'{o}"
+253 "\\'{y}"
+254 "\\'{v}"
diff --git a/lib/kbd/magyar-2.kmap b/lib/kbd/magyar-2.kmap
new file mode 100644 (file)
index 0000000..3cc873e
--- /dev/null
@@ -0,0 +1,31 @@
+#
+# Key definition file for Hungarian keyboards for LyX
+# 
+# (c)1996 by Peter Soos <sp@osb.hu>
+#
+# These are the bindings for Hungarian keyboards using ISO-8859.2 (Latin-2)
+# key mapping for X.
+#
+\kmap û "\\H{u}"
+\kmap Û "\\H{U}"
+\kmap õ "\\H{o}"
+\kmap Õ "\\H{O}"
+\kmap ú "\\'{u}"
+\kmap Ú "\\'{U}"
+\kmap é "\\'{e}"
+\kmap É "\\'{E}"
+\kmap á "\\'{a}"
+\kmap Á "\\'{A}"
+\kmap í "\\'{\\i}"
+\kmap Í "\\'{I}"
+\kmap ó "\\'{o}"
+\kmap Ó "\\'{O}"
+\kmap ü "\\\"{u}"
+\kmap Ü "\\\"{U}"
+\kmap ö "\\\"{o}"
+\kmap Ö "\\\"{O}"
+
+\kmap § "\\S{}"
+\kmap ß "\\ss{}"
+\kmap × "\\times{}"
+\kmap ÷ "\\div{}"
diff --git a/lib/kbd/magyar-3.kmap b/lib/kbd/magyar-3.kmap
new file mode 100644 (file)
index 0000000..a0e5b52
--- /dev/null
@@ -0,0 +1,27 @@
+#
+# Hungarian keyboard definition file for LyX
+# 
+# (c)1996 by István Pál (3.14) <pali@agy.bgytf.hu>
+#
+# Bindings for Hungarian keyboard using ISO-8859.2 (Latin-2) 
+# key mapping for LyX.
+# Set the Layout/Document/Encoding to latin2
+
+\kmap \\ û  #"{\\H u}"
+\kmap | Û  #"{\\H U}"
+\kmap [ õ  #"{\\H o}"
+\kmap { Õ  #"{\\H O}"
+\kmap ] ú  #"{\\'u}"
+\kmap } Ú  #"{\\'U}"
+\kmap ; é  #"{\\'e}"
+\kmap : É  #"{\\'E}"
+\kmap ' á  #"{\\'a}"
+\kmap \" Á  #"{\\'A}"
+\kmap \` í  #"{\\'\\i}"
+\kmap ~ Í  #"{\\'I}"
+\kmap = ó  #"{\\'o}"
+\kmap + Ó  #"{\\'O}"
+\kmap - ü  #"{\\\"u}"
+\kmap _ Ü  #"{\\\"U}"
+\kmap 0 ö  #"{\\\"o}"
+\kmap ) Ö  #"{\\\"O}"
diff --git a/lib/kbd/magyar.kmap b/lib/kbd/magyar.kmap
new file mode 100644 (file)
index 0000000..dbbf4b0
--- /dev/null
@@ -0,0 +1,40 @@
+#
+# Key definition file for Hungarian (i.e. Magyar) national keyboard for LyX
+# 
+# These are the bindings from Windows 95. I found them very 
+# weird, however if somebody migrate from an ordinary typing 
+# machine can be familiar.
+#
+# (c)1996 by Boloni Laszlo, blaci@utcluj.ro
+#
+
+\kmap [ "\\H{o}"
+\kmap { "\\H{O}"
+\kmap \\ "\\H{u}"
+\kmap | "\\H{U}"
+\kmap ] "\\'{u}"
+\kmap } "\\'{U}"
+\kmap ; "\\'{e}"
+\kmap : "\\'{E}"
+\kmap ' "\\'{a}"
+\kmap \" "\\'{A}"
+\kmap ` "\\'{\\i}"
+\kmap ~ "\\'{I}"
+\kmap = "\\'{o}"
+\kmap + "\\'{O}"
+\kmap - "\\\"{u}"
+\kmap _ "\\\"{U}"
+\kmap 0 "\\\"{o}"
+\kmap ) "\\\"{O}"
+\kmap / -
+\kmap ? ;
+\kmap > :
+\kmap < ?
+\kmap @ \"
+\kmap ! '
+\kmap \# +
+\kmap $ !
+\kmap ^ /
+\kmap & =
+\kmap * (
+\kmap ( ) 
diff --git a/lib/kbd/polish.kmap b/lib/kbd/polish.kmap
new file mode 100644 (file)
index 0000000..42da016
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# Polish keyboard definition for LyX
+#
+# (C)1997 by Skubiszewski Marcin, Marcin.Skubiszewski@inria.fr
+#
+# The keymap assumes that you have a non-Polish keyboard, Polish
+# letters are produced by prepending / to the corresponding
+# Latin letters.
+#
+\kmod / acute  aAcCeElLnNoOsSzZxX
+\kxmod acute a "\\k{a}"
+\kxmod acute A "\\k{A}"
+\kxmod acute c "\\'{c}"
+\kxmod acute C "\\'{C}"
+\kxmod acute e "\\k{e}"
+\kxmod acute E "\\k{E}"
+\kxmod acute l "\\l{}"
+\kxmod acute L "\\L{}"
+\kxmod acute n "\\'{n}"
+\kxmod acute N "\\'{N}"
+\kxmod acute o "\\'{o}"
+\kxmod acute O "\\'{O}"
+\kxmod acute s "\\'{s}"
+\kxmod acute S "\\'{S}"
+\kxmod acute z "\\.{z}"
+\kxmod acute Z "\\.{Z}"
+\kxmod acute x "\\'{z}"
+\kxmod acute X "\\'{Z}"
diff --git a/lib/kbd/portuges.kmap b/lib/kbd/portuges.kmap
new file mode 100644 (file)
index 0000000..99fb301
--- /dev/null
@@ -0,0 +1,19 @@
+#
+# portuges.kmap
+#
+# blame me, jcardoso@inescn.pt, not lyx
+#
+
+\kmod ´ acute aeiouAEIOU
+\kmod ` grave aA
+\kmod ~ tilde aoAO
+\kmod ^ circumflex eaoEAO
+
+\kxmod acute i "\\'{\\i}"
+
+# \kxmod acute ´ ´
+# \kxmod grave ` "$\\grave{}$" # is this really needed?!
+# \kxmod tilde ~ ~
+# \kxmod circumflex ^ ^
+
+
diff --git a/lib/kbd/romanian.kmap b/lib/kbd/romanian.kmap
new file mode 100644 (file)
index 0000000..0a11b51
--- /dev/null
@@ -0,0 +1,33 @@
+#
+# Key definition file for Romanian national keyboard for LyX
+# 
+# These are the bindings from Windows 95. I found them very 
+# weird, however if somebody migrate from an ordinary typing 
+# machine can be familiar.
+#
+# (c)1996 by Boloni Laszlo, blaci@utcluj.ro
+#
+
+\kmap ; "\\c{s}"
+\kmap : "\\c{S}"
+\kmap ' "\\c{t}"
+\kmap \" "\\c{T}"
+\kmap [ "\\u{a}"
+\kmap { "\\u{A}"
+\kmap ] "\\^{\\i}"
+\kmap } "\\^{I}"
+\kmap \\ "\\^{a}"
+\kmap | "\\^{A}"
+\kmap = '
+\kmap + *
+\kmap - +
+\kmap _ ?
+\kmap ) =
+\kmap ^ &
+\kmap @ @
+\kmap ` [
+\kmap ~ ]
+\kmap / -
+\kmap ? _
+\kmap > :
+\kmap < ;
diff --git a/lib/kbd/sf.kmap b/lib/kbd/sf.kmap
new file mode 100644 (file)
index 0000000..3529204
--- /dev/null
@@ -0,0 +1,41 @@
+# Key definition file for Swiss french keyboard for LyX
+#
+# (c)1998 by Alain Borel, Alain.Borel@icma.unil.ch
+#
+#
+
+\kmod = circumflex aceijnorsuyzACEIJNORSUYZ     # circumflex on =
+\kmod ] umlaut aeijouyAEIJOUY                   # umlaut on ]
+\kmap ! +
+\kmap @ \"
+\kmap \# \*
+\kmap $ "\\c{c}"
+\kmap ^ &
+\kmap & /
+\kmap * (
+\kmap ( )
+\kmap ) =
+\kmap - '
+\kmap _ ?
+\kmap + `
+\kmap ~ "\\b{}" # degree sign?
+\kmap ` "\\it\\${}"             # paragraph mark? doesn't work
+\kmap y z
+\kmap z y       # switched Y<->Z
+\kmap Y Z
+\kmap Z Y
+\kmap [ "\\`{e}"
+\kmap { "\\\"{u}"
+\kmap } !
+\kmap ; "\\'{e}"
+\kmap : "\\\"{o}"
+\kmap ' "\\`{a}"
+\kmap \" "\\\"{a}"
+\kmap < ;
+\kmap > :
+\kmap ? _
+\kmap / -
+\kmap \\ $
+\kmap | "\\it\\${}"
+\kxmod circumflex i "\\^{\\i}"  # some exceptions
+\kxmod umlaut i "\\\"{\\i}"
diff --git a/lib/kbd/sg.kmap b/lib/kbd/sg.kmap
new file mode 100644 (file)
index 0000000..6e54ac2
--- /dev/null
@@ -0,0 +1,41 @@
+# Key definition file for Swiss german keyboard for LyX
+#
+# (c)1998 by Alain Borel, Alain.Borel@icma.unil.ch
+#
+#
+
+\kmod = circumflex aceijnorsuyzACEIJNORSUYZ     # circumflex on =
+\kmod ] umlaut aeijouyAEIJOUY                   # umlaut on ]
+\kmap ! +
+\kmap @ \"
+\kmap \# \*
+\kmap $ "\\c{c}"
+\kmap ^ &
+\kmap & /
+\kmap * (
+\kmap ( )
+\kmap ) =
+\kmap - '
+\kmap _ ?
+\kmap + `
+\kmap ~ "\\b{}" # degree sign?
+\kmap ` "\\it\\${}"             # paragraph mark? doesn't work
+\kmap y z
+\kmap z y       # switched Y<->Z
+\kmap Y Z
+\kmap Z Y
+\kmap { "\\`{e}"
+\kmap [ "\\\"{u}"
+\kmap } !
+\kmap : "\\'{e}"
+\kmap ; "\\\"{o}"
+\kmap \" "\\`{a}"
+\kmap ' "\\\"{a}"
+\kmap < ;
+\kmap > :
+\kmap ? _
+\kmap / -
+\kmap \\ $
+\kmap | "\\it\\${}"
+\kxmod circumflex i "\\^{\\i}"  # some exceptions
+\kxmod umlaut i "\\\"{\\i}"
diff --git a/lib/kbd/slovak.kmap b/lib/kbd/slovak.kmap
new file mode 100644 (file)
index 0000000..529a0fc
--- /dev/null
@@ -0,0 +1,56 @@
+#
+# Key definition file for Slovak national keyboard for LyX
+#
+# (c)1995 by Ivan Schreter, schreter@ccsun.tuke.sk
+#
+
+\kmod = acute aceilnorsuyzACEILNORSUYZ # acute is on '='
+\kmod + caron cdelnrstzCDELNRSTZ       # caron is on Shift-'='
+\kmod ` umlaut aeijouyAEIJOUY          # umlaut is on ` - but it's not widely used...
+\kmap 1 +              # map numbers to Slovak letters and
+\kmap ! 1              # Shift-numbers to numbers
+\kmap 2 "\\q{l}"
+\kmap @ 2
+\kmap 3 "\\v{s}"
+\kmap \# 3
+\kmap 4 "\\v{c}"
+\kmap $ 4
+\kmap 5 "\\q{t}"
+\kmap % 5
+\kmap 6 "\\v{z}"
+\kmap ^ 6
+\kmap 7 "\\'{y}"
+\kmap & 7
+\kmap 8 "\\'{a}"
+\kmap * 8
+\kmap 9 "\\'{\\i}"
+\kmap ( 9
+\kmap 0 "\\'{e}"
+\kmap ) 0
+\kmap - =              # map other keys to reflect Slovak keyboard
+\kmap _ %
+\kmap ; "\\^{o}"
+\kmap : \"
+\kmap ' "\\S{}"
+\kmap \" !
+\kmap [ "\\'{u}"
+\kmap { /
+\kmap ] "\\\"{a}"
+\kmap } (
+\kmap < ?
+\kmap > :
+\kmap ? _
+\kmap / -
+\kmap \\ "\\'{o}"
+\kmap | )
+\kxmod caron o "\\^{o}"                # mapping exception - generate ^ instead for o
+\kxmod caron O "\\^{O}"
+\kxmod caron u "\\r{u}"                # generate circle for u - it's a Czech letter
+\kxmod caron U "\\r{U}"
+\kxmod caron t "\\q{t}"        # use proper caron mark for t, l, d and L
+\kxmod caron l "\\q{l}"
+\kxmod caron L "\\q{L}"
+\kxmod caron d "\\q{d}"
+\kxmod acute i "\\'{\\i}"      # use only root of i for i acute
+\kxmod umlaut i "\\\"{\\i}"    # not really needed
+\kxmod umlaut j "\\\"{\\j}"    # not really needed
diff --git a/lib/kbd/slovene.kmap b/lib/kbd/slovene.kmap
new file mode 100644 (file)
index 0000000..f30e0f3
--- /dev/null
@@ -0,0 +1,32 @@
+#
+# Key definition file for Slovene national keyboard for LyX
+#
+# (c)1996 by Alen Salamun, alen.salamun@medinet.si
+#
+
+\kmap ` -                         # Remaped keys
+\kmap ~ _
+\kmap @ \"
+\kmap ^ &
+\kmap & /
+\kmap * (
+\kmap ( )
+\kmap ) =
+\kmap - '
+\kmap _ ?
+\kmap + *
+\kmap = +
+\kmap \\ <
+\kmap | >
+\kmap < ;
+\kmap > :
+
+\kmap [ "\\v{s}"                    # Chars with carons
+\kmap { "\\v{S}"
+\kmap ; "\\v{c}"
+\kmap : "\\v{C}"
+\kmap / "\\v{z}"
+\kmap ? "\\v{Z}"
+
+\kmap ' "\\'{c}"                     # Chars with accute
+\kmap \" "\\'{C}"
diff --git a/lib/kbd/transilvanian.kmap b/lib/kbd/transilvanian.kmap
new file mode 100644 (file)
index 0000000..28630cb
--- /dev/null
@@ -0,0 +1,32 @@
+#
+# Key definition file for Transilvanian keyboard
+#
+#   Well, I live in a multicultural environment and it is 
+# very frequent to use hungarian and romanian letters in the
+# same document. 
+#   Also, I prefer deadkeys to keyboard arrangements. Here only 
+# "'", ";" and "q" are used as deadkeys, their initial values can be 
+# obtained repeating them 
+#
+# (c) 1996 by Laszlo Boloni, blaci@utcluj.ro
+#
+
+\kmod ' acute aeiouAEIOU       # acute is on '
+\kmod q hugarian_umlaut ouOU           # hungarian umlaut on q 
+\kmod ; umlaut ouOU            # umlaut is on ;
+# \kxmod hug q q               # possibility to type q, ' or ; by duplicating
+# \kxmod acute ' '     # 
+# \kxmod umlaut ; ;            
+\kxmod acute i "\\'{\\i}"      # use only root of i for i acute
+\kxmod hugarian_umlaut a "\\u{a}"
+\kxmod hugarian_umlaut A "\\u{A}"
+\kxmod acute s "\\c{s}"
+\kxmod acute S "\\c{S}"
+\kxmod acute t "\\c{t}"
+\kxmod acute T "\\c{T}"
+\kxmod umlaut i "\\^{\\i}"
+\kxmod umlaut I "\\^{I}"
+\kxmod umlaut a "\\^{a}"
+\kxmod umlaut A "\\^{A}"
+
+
diff --git a/lib/kbd/turkish-f.kmap b/lib/kbd/turkish-f.kmap
new file mode 100644 (file)
index 0000000..ae6493c
--- /dev/null
@@ -0,0 +1,86 @@
+#
+# Key definition file for Turkish national F-keyboard for LyX
+
+\kmod ^ circumflex auAU                # circumflex on #
+
+\kmap @ '                      # mappings for Shift-numbers
+\kmap $ +
+\kmap ^ &
+\kmap & /
+\kmap * (
+\kmap ( )
+\kmap ) =
+
+\kmap ` \\                     # mappings for punctuation signs
+\kmap ~ \"
+\kmap - *
+\kmap _ ?
+\kmap = -
+\kmap + _
+\kmap > :
+\kmap / ","
+\kmap ? ;
+
+\kmap q f                      # mappings for standard letters
+\kmap Q F
+\kmap w g
+\kmap W G
+\kmap R I
+\kmap t o
+\kmap T O
+\kmap y d
+\kmap Y D
+\kmap u r
+\kmap U R
+\kmap i n
+\kmap I N
+\kmap o h
+\kmap O H
+\kmap [ q
+\kmap { Q
+\kmap ] w
+\kmap } W
+\kmap a u
+\kmap A U
+\kmap s i
+\kmap d e
+\kmap D E
+\kmap f a
+\kmap F A
+\kmap h t
+\kmap H T
+\kmap j k
+\kmap J K
+\kmap k m
+\kmap K M
+\kmap ; y
+\kmap : Y
+\kmap \\ x
+\kmap | X
+\kmap z j
+\kmap Z J
+\kmap c v
+\kmap C V
+\kmap v c
+\kmap V C
+\kmap n z
+\kmap N Z
+\kmap m s
+\kmap M S
+\kmap "," b
+\kmap < B
+
+\kmap e "\\u{g}"                       # mappings for Turkish letters
+\kmap E "\\u{G}"
+\kmap r "\\i{}"
+\kmap S "\\.{I}"
+\kmap g "\\\"{u}"
+\kmap G "\\\"{U}"
+\kmap ' "\\c{s}"
+\kmap \" "\\c{S}"
+\kmap x "\\\"{o}"
+\kmap X "\\\"{O}"
+\kmap b "\\c{c}"
+\kmap B "\\c{C}"
+
+
diff --git a/lib/kbd/turkish.kmap b/lib/kbd/turkish.kmap
new file mode 100644 (file)
index 0000000..7a10e49
--- /dev/null
@@ -0,0 +1,37 @@
+#
+# Key definition file for Turkish national Q-keyboard for LyX
+
+\kmod \# circumflex auAU       # circumflex on #
+
+\kmap @ '                      # mappings for Shift-numbers
+\kmap $ +
+\kmap ^ &
+\kmap & /
+\kmap * (
+\kmap ( )
+\kmap ) =
+
+\kmap - *                      # mappings for punctuation signs
+\kmap _ ?
+\kmap = -
+\kmap + _
+\kmap ` \\
+\kmap ~ \"
+\kmap / .
+\kmap ? :
+\kmap \\ ","
+\kmap | ;
+
+\kmap [ "\\u{g}"                       # mappings for Turkish letters
+\kmap { "\\u{G}"
+\kmap ] "\\\"{u}"
+\kmap } "\\\"{U}"
+\kmap i "\\i{}"        
+\kmap ; "\\c{s}"
+\kmap : "\\c{S}"
+\kmap ' i
+\kmap \" "\\.{I}"
+\kmap "," "\\\"{o}"
+\kmap < "\\\"{O}"
+\kmap . "\\c{c}"
+\kmap > "\\c{C}"
diff --git a/lib/layouts/IEEEtran.layout b/lib/layouts/IEEEtran.layout
new file mode 100644 (file)
index 0000000..816874e
--- /dev/null
@@ -0,0 +1,262 @@
+#% Do not delete he line below; configure depends on this
+#  \DeclareLaTeXClass{article (IEEEtran)}
+# Based on Article textclass definition file. 
+#
+# Author : Allan Rae <rae@elec.uq.edu.au>
+#
+# IEEEtran is the class used for submitting to any of the IEEE Transactions.
+# The on-screen display in LyX is set to reflect the appearance of two column
+# text.  The section counters appear correctly in the output but are
+# in arabic numerals in LyX -- this requires some additional code in LyX
+# to get right (maybe LyX-1.0.1).
+#
+# IEEEtran.cls can be obtained from the www.ieee.org website -- look for
+# the author information area.  There is a LaTeX 2.09 IEEEtran.sty available
+# also but LyX doesn't support 2.09 stuff so don't get that one.
+#
+# Input general definitions
+
+Columns                 1
+Sides                   1
+MaxCounter             Counter_Section
+SecNumDepth            3
+TocDepth               3
+
+ClassOptions
+  FontSize              9|10|11|12
+End  
+
+DefaultFont
+  Family               Roman
+  Series               Medium
+  Shape                        Up
+  Size                 Normal
+  Color                        None
+EndFont
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+##
+## stdlists
+##
+Input stdlists.inc
+
+##
+## stdsections and stdstarsections
+##
+Input stdsections.inc
+Input stdstarsections.inc
+
+NoStyle                 Part
+NoStyle                 Part*
+NoStyle                 Chapter
+NoStyle                 Chapter*
+NoStyle                 Subparagraph
+NoStyle                 Subparagraph*
+
+Style Section
+  Align                        Center
+  AlignPossible                Block, Center, Left
+
+  Font
+     Shape              Smallcaps
+     Size               Normal
+  EndFont
+End
+
+
+Style Subsection
+  Font
+     Shape              Italic
+     Size               Normal
+  EndFont
+End
+
+Style Subsubsection
+  Font
+     Shape              Up
+     Size               Normal
+  EndFont
+End
+
+Style Section*
+  Align                        Center
+  AlignPossible                Block, Center, Left
+
+  Font
+     Shape              Smallcaps
+     Size               Normal
+  EndFont
+End
+
+
+Style Subsection*
+  Font
+     Shape              Italic
+     Size               Normal
+  EndFont
+End
+
+Style Subsubsection*
+  Font
+     Shape              Up
+     Size               Normal
+  EndFont
+End
+
+##
+## stdstruct
+##
+Input stdstruct.inc
+
+Style Abstract
+  Margin                First_Dynamic
+  LeftMargin           ""
+  RightMargin          ""
+#  ParIndent           MM
+  LabelSep              M
+  LabelType            Static
+  LabelString          "Abstract---"
+#  LabelBottomSep        0.0
+
+  # standard font definition
+  Font 
+    Series              Bold
+    Size               Small
+  EndFont
+
+  # label font definition
+  LabelFont
+    Shape               Italic
+    Series             Medium
+    Size               Small
+  EndFont
+End 
+
+Style Keywords
+  Margin               Dynamic
+  LatexType            Environment
+  InTitle              0
+  LatexName            keywords
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Keywords---"
+  # label font definition
+  TextFont
+    Shape               Up
+    Size                Small
+  EndFont
+  LabelFont
+    Shape              Italic
+    Size                Small
+  EndFont
+End
+
+# Bibliography style definition
+Style Bibliography
+  # label font definition
+  LabelFont
+    Shape               Smallcaps             
+    Series             Medium
+    Size               Normal
+  EndFont
+End
+
+Style Appendix
+  Margin               Static
+  LatexType            Command
+  InTitle              0
+  LatexName            appendix
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Appendix"
+  # label font definition
+  TextFont
+    Shape               Up
+    Size                Normal
+  EndFont
+  LabelFont
+    Shape              Smallcaps
+    Size                Normal
+  EndFont
+End
+
+Style Appendices
+  Margin               Static
+  LatexType            Command
+  InTitle              0
+  LatexName            appendices
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Center
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Appendices"
+  # label font definition
+  TextFont
+    Shape               Up
+    Size                Small
+  EndFont
+  LabelFont
+    Shape              Smallcaps
+    Size                Normal
+  EndFont
+End
+
+##
+##  stdlayouts
+##
+Input stdlayouts.inc
+
+Style Caption
+  LabelFont
+    Series              Medium
+  EndFont
+End
+
+Style Footernote
+  Margin               Static
+  LatexType            Command
+  InTitle              0
+  LatexName            footernote
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Center
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Footernote"
+  # label font definition
+  TextFont
+    Shape               Up
+    Size                Small
+  EndFont
+  LabelFont
+    Shape              Italic
+    Size                Small
+  EndFont
+End
+##
+## Others
+##
+Input lyxmacros.inc
+Input obsolete.inc
diff --git a/lib/layouts/aapaper.inc b/lib/layouts/aapaper.inc
new file mode 100644 (file)
index 0000000..35d0a1f
--- /dev/null
@@ -0,0 +1,131 @@
+# This file contains additional style definitions for the
+# A&A paper style not found in the standard include files.  
+# It is Input by aapaper.layout
+#
+# Author: Peter Sütterlin <pit@uni-sw.gwdg.de>
+
+# Subitle style definition
+Style Subtitle
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            subtitle
+  NextNoIndent         1
+  ParSkip              0.4
+  ItemSep              0
+  TopSep               1.3
+  BottomSep            1.3
+  ParSep               1
+  Align                        Left
+  AlignPossible                Left
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Size               Normal
+    Series             Bold
+  EndFont
+End
+
+# Address style definition
+Style Address
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            institute
+  ParSkip              0.4
+  BottomSep            0.4
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+
+  Font 
+    Family             Sans
+    Size               Small
+  EndFont
+End
+
+# Email address style definition
+Style Email
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            mail
+  Align                        Left
+  AlignPossible                Left
+  LeftMargin           email:M
+  LabelType            Static
+  LabelString          email:
+  LabelSep             M
+
+  Font 
+    Family             Sans
+    Size               Small
+  EndFont
+End
+
+# Address for Offprints style definition
+Style Offprint
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            offprints
+  Align                        Left
+  AlignPossible                Left
+  LeftMargin           "Offprint Requests to:M"
+  LabelType            Static
+  LabelString          "Offprint Requests to:"
+  LabelSep             M
+
+  Font 
+    Family             Sans
+    Size               Small
+  EndFont
+End
+
+# Acnowledgement style definition
+Style Acknowledgement
+  Margin               Static
+  LatexType            Environment
+  LatexName            acknowledgements
+  NextNoIndent         1
+  ItemSep              0
+  TopSep               0.2
+  BottomSep            0
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block
+  LabelType            Top_Environment
+  LabelString          Acknowledgements
+  LabelSep             M
+  # standard font definition
+  Font 
+    Size               Small
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Size               Small
+    Shape              Italic
+  EndFont
+End 
+  
+Style Thesaurus
+  LabelType            Static
+  LatexType            Command
+  InTitle              1
+  LatexName            thesaurus
+  NextNoIndent         1
+  TopSep               0
+  BottomSep            1
+  LeftMargin           Thesaurus:M
+  LabelSep             M
+  LabelType            Static
+  LabelString          Thesaurus:
+  Font
+    Size               Small
+  EndFont
+End
+
+
+
diff --git a/lib/layouts/aapaper.layout b/lib/layouts/aapaper.layout
new file mode 100644 (file)
index 0000000..4336571
--- /dev/null
@@ -0,0 +1,190 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[aa]{article (A&A)}
+#
+# Author: Peter Sütterlin <pit@uni-sw.gwdg.de>
+
+# General textclass parameters
+Columns                        2
+Sides                  2
+MaxCounter             Counter_Section
+SecNumDepth            3
+TocDepth               0
+PageStyle              Plain
+
+DefaultFont
+  Family               Roman
+  Series               Medium
+  Shape                        Up
+  Size                 Normal
+  Color                        None
+EndFont
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+# I want to keep the entries in a logical order.
+# Therefore I'll define the entries first, then fill them
+
+Style Itemize
+  End
+Style Enumerate
+  End
+Style Description
+  End
+Style List
+  End
+Style Caption
+  End
+Style LaTeX
+  End
+Style Section
+  End
+Style Subsection
+  End
+Style Subsubsection
+  End
+Style Title
+  End
+Style Subtitle
+  End
+Style Author
+  End
+Style Address
+  End
+Style Email
+  End
+Style Offprint
+  End
+Style Thesaurus
+  End
+Style Date
+  End
+Style Abstract 
+  End
+Style Acknowledgement
+  End
+Style Bibliography
+  End
+
+# OK, now we have a more or less consistent Ordering. Now fill the
+# definitions. 
+# First, the standard includes
+
+Input stdlists.inc
+Input stdlayouts.inc
+Input stdsections.inc
+Input stdstruct.inc
+
+# Remove unwanted Styles
+
+NoStyle Quotation
+NoStyle        Quote
+NoStyle        Verse
+NoStyle Chapter
+NoStyle Paragraph
+NoStyle Subparagraph
+NoStyle Part
+
+# Definitions only valid for A&A style
+Input aapaper.inc
+
+# Redefine some things
+
+# Section style redefinition
+Style Section
+  TopSep               2.0
+  BottomSep            1.3
+  Font 
+    Size               Normal
+  EndFont
+End
+
+# Subsection style redefinition
+Style Subsection
+  TopSep               1.7
+  BottomSep            1.1
+  Font 
+    Series             Medium
+    Size               Normal
+    Shape              Italic
+  EndFont
+End
+
+# Subsubsection style redefinition
+Style Subsubsection
+  TopSep               1.7
+  BottomSep            1.1
+  Font 
+    Series             Medium
+    Size               Normal
+  EndFont
+End
+
+# Title style redefinition
+Style Title
+  TopSep               2
+  BottomSep            1.3
+  Align                        Left
+  AlignPossible                Left
+  Font 
+    Series             Bold
+  EndFont
+End
+
+# Author style redefinition
+Style Author
+  Align                        Left
+  AlignPossible                Left
+  LabelType            No_Label
+  Font 
+    Size               Normal
+    Series             Bold
+  EndFont
+End
+
+# Date style redefinition
+Style Date
+  LabelSep             ""
+  TopSep               1.2
+  Align                        Left
+  AlignPossible                Left
+  Font 
+    Size               Small
+  EndFont
+End
+
+# Abstract style redefinition
+Style Abstract 
+  LeftMargin            ""
+  RightMargin           ""
+  ParIndent            ""
+  TopSep               1.4
+  BottomSep            0.7
+  LabelType            Top_Environment
+  Font 
+    Size               Normal
+  EndFont
+  LabelFont 
+    Series             Bold
+    Size               Normal
+  EndFont
+End 
+
+# Bibliography style redefinition
+Style Bibliography
+  Align                        Left
+  AlignPossible                Left
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
diff --git a/lib/layouts/aastex.layout b/lib/layouts/aastex.layout
new file mode 100644 (file)
index 0000000..432cba4
--- /dev/null
@@ -0,0 +1,527 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[aastex]{article (AASTeX)}
+#
+# Author: Mike Ressler <mike.ressler@alum.mit.edu>     
+#
+# Disclaimer: Though I am an astronomer at the Jet Propulsion Laboratory, this
+# package was prepared on my own time on my own machine. Neither the United
+# States government, the National Aeronautics and Space Administration, the
+# California Institute of Technology, the American Astronomical Society, nor
+# the Jet Propulsion Laboratory endorse this package - indeed, they probably
+# don't even know of it's existence. Use of this package is covered by the LyX
+# license which is found in the file COPYING in the root directory of the LyX
+# distribution.
+#
+# Version 0.0  5/27/99 - Initial submission, basic LaTeX equivalents
+# Version 0.1  6/04/99 - Most everything in sections 2.1-2.11 of AASTeX guide
+#                        works. References work with some ERT. Regular tables
+#                        (2.14) okay, deluxetable will never be supported.
+#                        Figures (2.13) not even attempted yet. Misc (2.15) 
+#                        partially supported, but much will remain ERT.
+#                        Style options (section 3) can be typed into Extra
+#                        Document options.
+#                        Much cleaning of this file needs to be done.
+# Version 1.0  6/09/99 - Implemented remaining commands as well as possible.
+#                        There is little more I can do unless LyX source code
+#                        is changed. (Not by me!) Documentation, template, and
+#                        example files are available.
+# Version 1.1  7/25/99 - Changed \url to take advantage of new layout option.
+
+# General textclass parameters
+Columns                        1
+Sides                  1
+MaxCounter             Counter_Section
+#SecNumDepth           3
+TocDepth               0
+PageStyle              Plain
+ProvidesAmsmath                1
+ProvidesUrl            1
+ClassOptions
+  PageStyle            ""      
+End
+
+DefaultFont
+  Family               Roman
+  Series               Medium
+  Shape                        Up
+  Size                 Normal
+  Color                        None
+EndFont
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+# I want to keep the entries in a logical order.
+# Therefore I'll define the entries first, then fill them in
+
+Style Section
+  End
+Style Subsection
+  End
+Style Subsubsection
+  End
+Style Paragraph
+  End
+Style Itemize
+  End
+Style Enumerate
+  End
+Style Description
+  End
+Style List
+  End
+Style Title
+  End
+Style Author
+  End
+Style Affiliation
+  End
+Style Email
+  End
+Style And
+  End
+Style Date
+  End
+Style Abstract 
+  End
+Style Keywords
+  End
+Style Acknowledgements
+  End
+Style Appendix
+  End
+Style References
+  End
+Style PlaceFigure
+  End
+Style PlaceTable
+  End
+Style TableComments
+  End
+Style TableRefs
+  End
+Style Caption
+  End
+Style MathLetters
+  End
+Style NoteToEditor
+  End
+
+# OK, now we have a more or less consistent Ordering. Now fill the
+# definitions. 
+# First, the standard includes
+
+Input stdsections.inc
+Input stdstruct.inc
+Input stdlists.inc
+
+# Remove unwanted Styles
+NoStyle Part
+NoStyle Chapter
+NoStyle Subparagraph
+NoStyle List
+NoStyle Bibliography
+
+# Redefine some things
+
+# Section style redefinition
+Style Section
+  Align                        Center
+  AlignPossible                Center
+  NextNoIndent          0
+  TopSep               2.0
+  BottomSep            1.3
+  Font 
+    Series             Bold
+    Size               Normal
+  EndFont
+End
+
+# Subsection style redefinition
+Style Subsection
+  Align                        Center
+  AlignPossible                Center
+  NextNoIndent          0
+  TopSep               1.7
+  BottomSep            1.1
+  Font 
+    Series             Bold
+    Size               Normal
+  EndFont
+End
+
+# Subsubsection style redefinition
+Style Subsubsection
+  Align                        Center
+  AlignPossible                Center
+  NextNoIndent          0
+  TopSep               1.7
+  BottomSep            1.1
+  Font 
+    Series             Medium
+    Shape              Italic
+    Size               Normal
+  EndFont
+End
+
+# Title style redefinition
+Style Title
+  TopSep               2
+  BottomSep            1.3
+  Align                        Center
+  AlignPossible                Center
+  InTitle              0
+  Font 
+    Series             Bold
+    Size               Large
+  EndFont
+End
+
+# Author style redefinition
+Style Author
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+  InTitle              0
+  Font 
+    Size               Normal
+    Series             Medium
+    Shape              SmallCaps
+  EndFont
+End
+
+# Date style redefinition
+Style Date
+  LabelSep             ""
+  TopSep               1.2
+  Align                        Center
+  AlignPossible                Center
+  InTitle              0
+  Font 
+    Size               Small
+  EndFont
+End
+
+# Abstract style redefinition
+Style Abstract 
+  LeftMargin            "MMM"
+  RightMargin           "MMM"
+  ParIndent            "MM"
+  TopSep               1.4
+  BottomSep            0.7
+  LabelType            Centered_Top_Environment
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  Font 
+    Size               Normal
+  EndFont
+  LabelFont 
+    Series             Bold
+    Size               Normal
+  EndFont
+End 
+
+# Affiliation style definition
+Style Affiliation
+  Margin               Static
+  LatexType            Command
+  InTitle              0
+  LatexName            affil
+  ParSkip              0.4
+  BottomSep            0.4
+  Align                        Center
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+
+  Font 
+    Family             Roman
+    Size               Normal
+  EndFont
+End
+
+# Keywords style definition
+Style Keywords
+  LeftMargin           MMM     
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              0
+  LatexName            keywords
+  ParSkip              0.4
+  BottomSep            0.4
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelSep             M
+  LabelString          "Subject headings:"
+  Font 
+    Family             Roman
+    Shape              Up
+    Size               Normal
+  EndFont
+  LabelFont 
+    Family             Roman
+    Shape              Italic
+    Size               Normal
+  EndFont
+End
+
+# Email style definition
+Style Email
+  Margin               Static
+  LatexType            Command
+  InTitle              0
+  LatexName            email
+  ParSkip              0.4
+  BottomSep            0.4
+  Align                        Center
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+  Font 
+    Family             Roman
+    Size               Normal
+    Shape              Italic
+  EndFont
+End
+
+# Acknowledgements style definition
+Style Acknowledgements
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              0
+  LatexName            acknowledgements
+  TopSep               1.2     
+  ParSkip              0.4
+  BottomSep            0.8
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          [Acknowledgements]
+  KeepEmpty            1       
+  Font 
+    Family             Roman
+    Size               Normal
+    Shape              Italic
+  EndFont
+End
+
+  
+# And style definition
+Style And
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              0
+  LatexName            and
+  TopSep               1.2     
+  ParSkip              0.4
+  BottomSep            1.2
+  Align                        Center
+  AlignPossible                Center
+  LabelType            Static
+  LabelString          and
+  KeepEmpty            1       
+  Font 
+    Family             Roman
+    Size               Normal
+  EndFont
+End
+# Placefigure style definition
+Style PlaceFigure
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              0
+  LatexName            placefigure
+  TopSep               1.2     
+  ParSkip              0.4
+  BottomSep            0.8
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          "Place Figure here: "
+  Font 
+    Family             Roman
+    Size               Normal
+    Shape              Italic
+  EndFont
+End
+
+# Placetable style definition
+Style PlaceTable
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              0
+  LatexName            placetable
+  TopSep               1.2     
+  ParSkip              0.4
+  BottomSep            0.8
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          "Place Table here: "
+  Font 
+    Family             Roman
+    Size               Normal
+    Shape              Italic
+  EndFont
+End
+
+# Appendix style definition
+Style Appendix
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              0
+  LatexName            appendix
+  TopSep               1.2     
+  ParSkip              0.4
+  BottomSep            0.8
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          [Appendix]
+  KeepEmpty            1       
+  Font 
+    Family             Roman
+    Size               Normal
+    Shape              Italic
+  EndFont
+End
+
+# MathLetters style redefinition
+Style MathLetters
+  LatexType            Environment     
+  LatexName            mathletters
+  LabelType            No_Label
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  Font 
+    Size               Normal
+  EndFont
+End 
+
+# References style redefinition
+Style References
+  Margin               First_Dynamic   
+  LatexType            Item_Environment        
+  LatexName            thebibliography
+  NextNoIndent         1
+  LeftMargin           MM
+  ParSkip              0.4
+  ItemSep               0
+  TopSep                0.7
+  BottomSep             0.7
+  ParSep                0.5
+  LabelType            Bibliography
+  LabelString          References
+  LabelBottomSep       0.7
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelFont 
+    Family             Roman
+    Size               Normal
+    Series             Bold
+  EndFont
+End 
+
+# Need reordering below here
+
+# Notetoeditor style definition
+Style NoteToEditor
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              0
+  LatexName            notetoeditor
+  TopSep               1.2     
+  ParSkip              0.4
+  BottomSep            0.8
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Note to Editor: "
+  Font 
+    Family             Roman
+    Size               Normal
+    Shape              Italic
+  EndFont
+End
+
+# TableRefs style definition
+Style TableRefs
+  Margin               First_Dynamic
+  LatexType            Command
+  InTitle              0
+  LatexName            tablerefs
+  TopSep               1.2     
+  ParSkip              0.4
+  BottomSep            0.8
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "References. --- "
+  Font 
+    Family             Roman
+    Size               Normal
+  EndFont
+End
+
+# TableComments style definition
+Style TableComments
+  Margin               First_Dynamic
+  LatexType            Command
+  InTitle              0
+  LatexName            tablecomments
+  TopSep               1.2     
+  ParSkip              0.4
+  BottomSep            0.8
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Note. --- "
+  Font 
+    Family             Roman
+    Size               Normal
+  EndFont
+End
+
+# Caption style definition
+Style Caption
+  Margin                First_Dynamic
+  LatexType             Command
+  LatexName             caption
+  NeedProtect           1
+  LabelSep              xx
+  ParSkip               0.4
+  TopSep                0.5
+  Align                 Block
+  AlignPossible         Block, Left
+  LabelType             Sensitive
+  LabelString           Caption
+
+  # label font definition
+  LabelFont 
+    Series              Bold
+  EndFont
+End
+
+# FigCaption style definition
+Style FigCaption
+  Margin                First_Dynamic
+  LatexType             Command
+  LatexName             figcaption
+  LatexParam           [FileName]
+  LabelSep              xx
+  ParSkip               0.4
+  TopSep                0.5
+  Align                 Block
+  AlignPossible         Block, Left
+  LabelType             Static
+  LabelString           "Fig. --- "
+End
diff --git a/lib/layouts/amsart-plain.layout b/lib/layouts/amsart-plain.layout
new file mode 100644 (file)
index 0000000..4fc51c3
--- /dev/null
@@ -0,0 +1,21 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[amsart]{article (AMS, unnumbered)}
+# AMS-Article textclass definition file. Taken from initial LyX source code
+# and from the Article textclass definition file, following the AMS sample
+# paper "testmath.tex" of January, 1995
+# Author : David L. Johnson <dlj0@lehigh.edu>
+# The "unnumbered" version has all results, unnumbered 
+# Probably broken by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
+# modified and modularized by Emmanuel GUREGHIAN <gureghia@boston.bertin.fr>
+
+Input amsart.layout
+# Change the definitions of the theorem-like environments to get unnumbered
+# results
+Input amsmaths-plain.inc
+
+# Use a simpler preamble.
+Preamble
+  \usepackage{amsmath,amsthm}
+  \usepackage{amsfonts}
+EndPreamble
+
diff --git a/lib/layouts/amsart-seq.layout b/lib/layouts/amsart-seq.layout
new file mode 100644 (file)
index 0000000..762ffaa
--- /dev/null
@@ -0,0 +1,22 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[amsart]{article (AMS, sequential numbering)}
+# AMS-Article textclass definition file. Taken from initial LyX source code
+# and from the Article textclass definition file, following the AMS sample
+# paper "testmath.tex" of January, 1995
+# Author : David L. Johnson <dlj0@lehigh.edu>
+# The "seq" version has all results, figures, etc., numbered in a separate
+# sequence, without section numbers attached (Theorem (1), Corollary (1), Theorem
+# (2), etc.).  
+# Probably broken by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
+# modified and modularized by Emmanuel GUREGHIAN <gureghia@boston.bertin.fr>
+
+Input amsart.layout
+# Change the definitions of the theorem-like environments to get a
+# better numbering.
+Input amsmaths-seq.inc
+
+# Use a simpler preamble.
+Preamble
+
+EndPreamble
+
diff --git a/lib/layouts/amsart.layout b/lib/layouts/amsart.layout
new file mode 100644 (file)
index 0000000..e974513
--- /dev/null
@@ -0,0 +1,106 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{article (AMS)}
+# AMS-Article textclass definition file. Taken from initial LyX source code
+# and from the Article textclass definition file, following the AMS sample
+# paper "testmath.tex" of January, 1995
+# Author : David L. Johnson <dlj0@lehigh.edu>
+# Probably broken by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
+# modified and modularized by Emmanuel GUREGHIAN <gureghia@boston.bertin.fr>
+
+
+# General textclass parameters
+# Description          "article (AMS)"
+Columns                        1
+Sides                  2
+PageStyle              Headers
+MaxCounter             Counter_Section
+
+ClassOptions
+  FontSize   8|9|10|11|12
+End  
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+############### Sections.
+# First the standard numbered definitions
+Input stdsections.inc
+
+
+# Redefine some of the section styles.
+Style Section
+  Align                        Center
+  AlignPossible                Block, Center, Left
+
+  # standard font definition
+  Font
+    Series             Medium
+    Shape              Smallcaps
+    Size               Large
+  EndFont
+End
+
+# Subsection-numbered style definition
+Style Subsection
+  # standard font definition
+  Font
+    Series             Bold
+    Size               Normal
+  EndFont
+End
+
+# Subsubsection-numbered style definition
+Style Subsubsection
+  # standard font definition
+  Font
+    Shape              Italic
+    Size               Normal
+  EndFont
+End
+
+# then define the unumbered sections, based on the numbered ones.
+Input stdstarsections.inc
+
+# remove the layouts that we do not need.
+NoStyle                Chapter
+NoStyle                Paragraph
+NoStyle                Subparagraph
+NoStyle                Chapter*
+#NoStyle               Paragraph*
+#NoStyle               Subparagraph*
+
+# Perharp's we should put this at the end of the file so it appears at the end
+# of the list box ??
+
+Preamble
+  \theoremstyle{plain}    
+  \newtheorem{thm}{Theorem}[section]
+  \numberwithin{equation}{section} %% Comment out for sequentially-numbered
+  \numberwithin{figure}{section} %% Comment out for sequentially-numbered
+EndPreamble
+
+
+
+Input amsdefs.inc
+
+Input stdlayouts.inc
+NoStyle Verse    # Although mathematicians tend to be poets at times, 
+                 # we don't need this.
+
+
+Input stdlists.inc
+
+
+### Finally a few obsolete definitions for compatibility
+Input obsolete.inc
+
diff --git a/lib/layouts/amsbook.layout b/lib/layouts/amsbook.layout
new file mode 100644 (file)
index 0000000..00e6690
--- /dev/null
@@ -0,0 +1,133 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{book (AMS)}
+# AMS-Article textclass definition file. Taken from initial LyX source code
+# and from the Article textclass definition file, following the AMS sample
+# paper "testmath.tex" of January, 1995
+# Author : David L. Johnson <dlj0@lehigh.edu>
+# Probably broken by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
+# modified and modularized by Emmanuel GUREGHIAN <gureghia@boston.bertin.fr>
+
+
+# General textclass parameters
+# Description          "book (AMS)"
+Columns                        1
+Sides                  2
+PageStyle              Headers
+MaxCounter             Counter_Chapter
+
+ClassOptions
+  FontSize   8|9|10|11|12
+End  
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+
+
+############### Sections.
+
+Input stdsections.inc
+
+# Redefine some of the section styles.
+Style Section
+  Align                        Center
+  AlignPossible                Block, Center, Left
+
+  # standard font definition
+  Font
+    Series             Medium
+    Shape              Smallcaps
+    Size               Large
+  EndFont
+End
+
+# Subsection-numbered style definition
+Style Subsection
+  # standard font definition
+  Font
+    Series             Bold
+    Size               Normal
+  EndFont
+End
+
+# Subsubsection-numbered style definition
+Style Subsubsection
+  # standard font definition
+  Font
+    Shape              Italic
+    Size               Normal
+  EndFont
+End
+
+# then define the unumbered sections, based on the numbered ones.
+Input stdstarsections.inc
+
+
+# Perharp's we should put this at the end of the file so it appears at the end
+# of the list box ??
+
+Preamble
+  \numberwithin{section}{chapter}
+  \theoremstyle{plain}    
+  \newtheorem{thm}{Theorem}[section]
+  \numberwithin{equation}{section} %% Comment out for sequentially-numbered
+  \numberwithin{figure}{section} %% Comment out for sequentially-numbered
+EndPreamble
+
+Input amsdefs.inc
+
+Input stdlayouts.inc
+NoStyle Verse    # Although mathematicians tend to be poets at times, 
+                 # we don't need this.
+NoStyle Abstract  # there are no abstract in a book.
+
+Input stdlists.inc
+
+
+# End-of Chapter exercises  I need a way to do this.
+
+# Chapter Exercises style definition
+Style Chapter_Exercises
+  Margin               First_Dynamic
+  LatexType            Item_Environment
+  LatexName            lyxxcb
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ParSkip              0.0
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_EnumI
+
+  # standard font definition
+
+  # label font definition
+  LabelFont
+    Shape              Up
+    Series             Bold
+  EndFont
+
+  Preamble
+    \newenvironment{lyxxcb}{\begin{xcb}{Exercises}\begin{enumerate}}
+                       {\end{enumerate}\end{xcb}}
+  EndPreamble
+
+End
+
+### Finally a few obsolete definitions for compatibility
+Input obsolete.inc
+
diff --git a/lib/layouts/amsdefs.inc b/lib/layouts/amsdefs.inc
new file mode 100644 (file)
index 0000000..4a3ec9f
--- /dev/null
@@ -0,0 +1,365 @@
+# Author : David L. Johnson <dlj0@lehigh.edu>
+# Probably broken by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
+# modified and modularized by Emmanuel GUREGHIAN <gureghia@boston.bertin.fr>
+
+# Including the maths stuff
+Input amsmaths.inc
+
+# The AMS documentclasses use the package amsmath and provide the
+# functionality of makeidx.sty.
+ProvidesAmsmath                1
+ProvidesMakeidx                1
+
+
+# the environnements copied from the old amsart.layout are :
+# - Proof, 
+# - Bibliography
+# - Title
+# - Author
+# - Date
+# - Abstract (This is a title component for this style.)
+# - Address
+# - Email
+# - Keywords
+# - Subjectclass
+
+# Proof style declaration
+Style Proof
+  Margin               First_Dynamic
+  LatexType            Environment
+  LatexName            proof
+  NextNoIndent         1
+  LabelSep             xx
+  ParIndent             MMM  
+  ParSkip              0.4
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          "Proof."
+  
+  # standard font definition
+  Font
+    Shape               Up
+    Size                Normal
+  EndFont
+
+  # label font definition
+  LabelFont
+    Shape               Italic
+  EndFont
+
+  # We don't want the preamble from Theorem
+  Preamble
+  EndPreamble 
+End  
+
+### Now the title stuff. We copy do not use stdstruct.inc to keep
+### things in the right order
+
+# Title style definition
+Style Title
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            title
+  ParSkip              0.4
+  ItemSep              0
+  TopSep               0
+  BottomSep            1
+  ParSep               1
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font
+    Shape              Smallcaps
+    Series             Bold
+    Size               Larger
+  EndFont
+End
+
+# Author style definition
+Style Author
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            author
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font
+    Size               Large
+    Shape              Smallcaps
+  EndFont
+
+End
+
+# Date style definition
+Style Date
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            date
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               1
+  Align                        Center
+  AlignPossible                Center
+  LabelType            Static
+  LabelString          "Date: "
+
+  # standard font definition
+  Font 
+    Size               Large
+  EndFont
+
+  LabelFont
+    Shape              Italic
+    Size               Large
+  EndFont
+End
+
+# Abstract style definition
+Style Abstract 
+  Margin               First_Dynamic
+  LatexType            Environment
+  InTitle              1
+  LatexName            abstract
+  LeftMargin           MMM
+  LabelIndent          MMM
+  RightMargin          MMM
+  ParIndent            MM
+  TopSep               0.7
+  BottomSep            0.7
+  Align                        Block
+  AlignPossible                Block
+  LabelType            Static
+  LabelString          Abstract.
+  LabelSep             M
+
+  # standard font definition
+  Font 
+    Size               Small
+  EndFont
+
+  # label font definition
+  LabelFont
+    Shape              Smallcaps
+  EndFont
+End 
+
+# Address style definition
+Style Address
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            address
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Address: "
+  # label font definition
+  LabelFont
+    Shape              Italic
+  EndFont
+End  
+
+# Current Address style definition
+Style Current_Address
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            curraddr
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Current address: "
+  # label font definition
+  LabelFont
+    Shape              Italic
+  EndFont
+End  
+
+# Email style definition
+Style Email
+  Margin               First_Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            email
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  labelString          "E-mail address: "
+  LabelFont
+    Shape              Italic
+  EndFont
+End
+
+# URL style definition
+Style URL
+  Margin               First_Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            urladdr
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  labelString          "URL: "
+  LabelFont
+    Shape              Italic
+  EndFont
+End
+
+# Keywords style definition
+Style Keywords
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            keywords
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Key words and phrases: "
+  # label font definition
+  LabelFont
+    Shape              Italic
+  EndFont
+End  
+
+# Thanks style definition
+Style Thanks
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            thanks
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Thanks: "
+  # label font definition
+  LabelFont
+    Shape              Italic
+  EndFont
+End  
+
+# Dedicatory style definition
+Style Dedicatory
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            dedicatory
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Dedication: "
+  # label font definition
+  LabelFont
+    Shape              Italic
+  EndFont
+End  
+
+
+# Translator style definition
+Style Translator
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            translator
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "Translator: "
+  # label font definition
+  LabelFont
+    Shape              Italic
+  EndFont
+End  
+
+# Subjectclass style definition
+Style Subjectclass
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            subjclass
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString          "1991 Mathematics Subject Classification: "
+  # label font definition
+  LabelFont
+    Shape              Italic
+  EndFont
+End 
+
+
+# Bibliography style definition
+Style Bibliography
+  Margin               First_Dynamic
+  LatexType            Item_Environment
+  LatexName            thebibliography
+  NextNoIndent         1
+  LeftMargin           MM
+  ParSkip              0.4
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Bibliography
+  LabelString          References
+  LabelBottomSep    0.7
+
+  # standard font definition
+  Font
+    Size               Small
+  EndFont
+
+  # label font definition
+  LabelFont
+    Size               Normal
+    Shape              Smallcaps
+  EndFont
+End
+
diff --git a/lib/layouts/amsmaths-plain.inc b/lib/layouts/amsmaths-plain.inc
new file mode 100644 (file)
index 0000000..0ca65cb
--- /dev/null
@@ -0,0 +1,276 @@
+# Author : David L. Johnson <dlj0@lehigh.edu>
+# Probably broken by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
+# modified and modularized by Emmanuel GUREGHIAN <gureghia@boston.bertin.fr>
+
+
+# These are only the plain (unnumbered) theorem styles environnements
+# The environnements defined are :
+# - Theorem
+# - Corollary
+# - Lemma
+# - Proposition
+# - Conjecture
+# - Criterion
+# - Algorithm
+# - Fact 
+# - Axiom
+# - Definition
+# - Example
+# - Condition
+# - Problem
+# - Exercise
+# - Remark
+# - Claim
+# - Note
+# - Notation
+# - Summary
+# - Acknowledgement
+# - Case
+# - Conclusion
+
+# Theorem-plain style declaration
+Style Theorem
+  LatexName            thm*
+  LabelString          "Theorem."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{thm*}{Theorem}
+  EndPreamble
+End  
+
+# Corollary-plain style declaration
+Style Corollary
+  LatexName            cor*
+  LabelString          "Corollary."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{cor*}{Corollary}
+  EndPreamble
+End
+
+# Lemma-plain style declaration
+Style Lemma
+  LatexName            lem*
+  LabelString          "Lemma."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{lem*}{Lemma}
+  EndPreamble
+End
+
+# Proposition-plain style declaration
+Style Proposition
+  LatexName            prop*
+  LabelString          "Proposition."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{prop*}{Proposition}
+  EndPreamble
+End  
+
+# Conjecture-plain style declaration
+Style Conjecture
+  LatexName            conjecture*
+  LabelString          "Conjecture."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{conjecture*}{Conjecture}
+  EndPreamble
+End  
+
+# Criterion-plain style declaration
+Style Criterion
+  LatexName            criterion*
+  LabelString          "Criterion."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{criterion*}{Criterion}
+  EndPreamble
+End  
+
+# Algorithm-plain style declaration
+Style Algorithm
+  LatexName            algorithm*
+  LabelString          "Algorithm #."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{algorithm*}{Algorithm} 
+  EndPreamble
+End  
+
+# Fact-plain style declaration
+Style Fact
+  LatexName            fact*
+  LabelString          "Fact."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{fact*}{Fact} 
+  EndPreamble
+End  
+
+# Axiom-plain style declaration
+Style Axiom
+  LatexName            ax*
+  LabelString          "Axiom."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{ax*}{Axiom}
+  EndPreamble
+End
+
+# Definition-plain style declaration
+Style Definition
+  LatexName            defn*
+  LabelString          "Definition."
+
+  Preamble
+    \theoremstyle{definition}
+    \newtheorem*{defn*}{Definition}
+  EndPreamble
+End  
+
+# Example-plain style declaration
+Style Example
+  LatexName            example*
+  LabelString          "Example."
+
+  Preamble
+    \theoremstyle{definition}
+    \newtheorem*{example*}{Example}
+  EndPreamble
+End  
+
+# Condition-plain style declaration
+Style Condition
+  LatexName            condition*
+  LabelString          "Condition."
+
+  Preamble
+    \theoremstyle{definition}
+    \newtheorem*{condition*}{Condition}
+  EndPreamble
+End  
+
+# Problem-plain style declaration
+Style Problem
+  LatexName            problem*
+  LabelString          "Problem."
+
+  Preamble
+    \theoremstyle{definition}
+    \newtheorem*{problem*}{Problem}
+  EndPreamble
+End  
+
+# Exercise-plain style declaration
+Style Exercise
+  LatexName            xca*
+  LabelString          "Exercise."
+
+  Preamble
+    \theoremstyle{definition}
+    \newtheorem*{xca*}{Exercise}
+  EndPreamble
+End  
+
+# Remark-plain style declaration
+Style Remark
+  LatexName            rem*
+  LabelString          "Remark."
+
+  Preamble
+    \theoremstyle{remark}
+    \newtheorem*{rem*}{Remark}
+  EndPreamble
+End  
+
+# Claim-plain style declaration
+Style Claim
+  LatexName            claim*
+  LabelString          "Claim."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem*{claim*}{Claim} 
+  EndPreamble
+End  
+
+# Note-plain style declaration
+Style Note
+  LatexName            note*
+  LabelString          "Note."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem*{note*}{Note} 
+  EndPreamble
+End  
+
+# Notation style declaration
+Style Notation
+  LatexName            notation*
+  LabelString          "Notation."
+
+  Preamble
+    \theoremstyle{remark}
+    \newtheorem*{notation*}{Notation}
+  EndPreamble
+End  
+
+# Summary style declaration
+Style Summary
+  LatexName            summary*
+  LabelString          "Summary."
+
+  Preamble
+    \theoremstyle{remark}
+    \newtheorem*{summary*}{Summary}
+  EndPreamble
+End  
+
+# Acknowledgement style declaration
+Style Acknowledgement
+  LatexName            acknowledgement*
+  LabelString          "Acknowledgement."
+
+  Preamble
+    \theoremstyle{remark}
+    \newtheorem*{acknowledgement*}{Acknowledgement}
+  EndPreamble
+End  
+
+# Case style declaration
+Style Case
+  LatexName            case*
+  LabelString          "Case."
+
+  Preamble
+    \theoremstyle{remark}
+    \newtheorem*{case*}{Case}
+  EndPreamble
+End  
+
+# Conclusion style declaration
+Style Conclusion
+  LatexName            conclusion*
+  LabelString          "Conclusion."
+
+  Preamble
+    \theoremstyle{remark}
+    \newtheorem*{conclusion*}{Conclusion}
+  EndPreamble
+End  
diff --git a/lib/layouts/amsmaths-seq.inc b/lib/layouts/amsmaths-seq.inc
new file mode 100644 (file)
index 0000000..038b0a8
--- /dev/null
@@ -0,0 +1,209 @@
+# Author : David L. Johnson <dlj0@lehigh.edu>
+# Probably broken by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
+# modified and modularized by Emmanuel GUREGHIAN <gureghia@boston.bertin.fr>
+
+# These are only the theorems styles environnements
+# The environnements defined are :
+# - Theorem
+# - Corollary
+# - Lemma
+# - Proposition
+# - Conjecture
+# - Criterion
+# - Algorithm
+# - Fact 
+# - Axiom
+# - Definition
+# - Example
+# - Condition
+# - Problem
+# - Exercise
+# - Remark
+# - Claim
+# - Note
+# - Notation
+# - Summary
+# - Acknowledgement
+# - Case
+# - Conclusion
+
+
+# Theorem-numbered style declaration
+Style Theorem
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{thm}{Theorem} 
+  EndPreamble
+End  
+
+# Corollary-numbered style declaration
+Style Corollary
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{cor}{Corollary} 
+  EndPreamble
+End  
+
+# Lemma-numbered style declaration
+Style Lemma
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{lem}{Lemma} 
+  EndPreamble
+End  
+
+# Proposition-numbered style declaration
+Style Proposition
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{prop}{Proposition} 
+  EndPreamble
+End  
+
+# Conjecture-numbered style declaration
+Style Conjecture
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{conjecture}{Conjecture} 
+  EndPreamble
+End  
+
+# Criterion-numbered style declaration
+Style Criterion
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{criterion}{Criterion} 
+  EndPreamble
+End  
+
+# Algorithm-numbered style declaration
+Style Algorithm
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{algorithm}{Algorithm} 
+  EndPreamble
+End  
+
+# Fact-numbered style declaration
+Style Fact
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{fact}{Fact}
+  EndPreamble
+End  
+
+# Axiom-numbered style declaration
+Style Axiom
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{ax}{Axiom}
+  EndPreamble
+End  
+
+# Definition-numbered style declaration
+Style Definition
+  Preamble
+   \theoremstyle{definition}
+   \newtheorem{defn}{Definition}
+  EndPreamble
+End  
+
+# Example-numbered style declaration
+Style Example
+  Preamble
+   \theoremstyle{definition}
+    \newtheorem{example}{Example}
+  EndPreamble
+End  
+
+# Condition-numbered style declaration
+Style Condition
+  Preamble
+   \theoremstyle{definition}
+    \newtheorem{condition}{Condition}
+  EndPreamble
+End  
+
+# Problem-numbered style declaration
+Style Problem
+  Preamble
+   \theoremstyle{definition}
+    \newtheorem{problem}{Problem}
+  EndPreamble
+End  
+
+# Exercise-numbered style declaration
+Style Exercise
+  Preamble
+   \theoremstyle{definition}
+    \newtheorem{xca}{Exercise}
+  EndPreamble
+End  
+
+# Remark-numbered style declaration
+Style Remark
+  Preamble
+    \theoremstyle{remark}
+    \newtheorem{rem}{Remark}
+  EndPreamble
+End  
+
+# Claim-numbered style declaration
+Style Claim
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{claim}{Claim}
+  EndPreamble
+End  
+
+# Note-numbered style declaration
+Style Note
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{note}{Note}
+  EndPreamble
+End  
+
+# Notation-numbered style declaration
+Style Notation
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{notation}{Notation}
+  EndPreamble
+End  
+
+# Summary-numbered style declaration
+Style Summary
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{summary}{Summary}
+  EndPreamble
+End  
+
+# Acknowledgement-numbered style declaration
+Style Acknowledgement
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{acknowledgement}{Acknowledgement}
+  EndPreamble
+End  
+
+# Case-numbered style declaration
+Style Case
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{case}{Case}
+  EndPreamble
+End  
+
+# Conclusion-numbered style declaration
+Style Conclusion
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{conclusion}{Conclusion}
+  EndPreamble
+End  
+
+
+
diff --git a/lib/layouts/amsmaths.inc b/lib/layouts/amsmaths.inc
new file mode 100644 (file)
index 0000000..79e46b3
--- /dev/null
@@ -0,0 +1,507 @@
+# Author : David L. Johnson <dlj0@lehigh.edu>
+# Probably broken by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>
+# modified and modularized by Emmanuel GUREGHIAN <gureghia@boston.bertin.fr>
+# This version has Theorems and other results numbered in one sequence, and all
+# numbered environments (figures as well) containing the section number.
+# (Themorem (1.1), Corollary (1.2) Theorem (1.3), etc.
+# These are only the theorems styles environnements
+
+
+# The environnements defined are :
+# - Theorem
+# - Theorem*
+# - Corollary
+# - Corollary*
+# - Lemma
+# - Lemma*
+# - Proposition
+# - Proposition*
+# - Conjecture
+# - Conjecture*
+# - Criterion
+# - Algorithm
+# - Axiom
+# - Definition
+# - Definition*
+# - Example
+# - Example*
+# - Condition
+# - Problem
+# - Exercise
+# - Remark
+# - Remark*
+# - Note
+# - Note*
+# - Notation
+# - Claim
+# - Claim*
+# - Summary
+# - Acknowledgement
+# - Acknowledgement*
+# - Case
+# - Conclusion
+# - Conclusion*
+# - Fact 
+# - Fact*
+
+# Theorem-numbered style declaration
+Style Theorem
+  Margin               First_Dynamic
+  LatexType            Environment
+  LatexName            thm
+  NextNoIndent         1
+  LabelSep             xx
+  ParIndent             MMM  
+  ParSkip              0.4
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          "Theorem #."
+
+  
+  # standard font definition
+  Font
+    Shape              Italic
+    Size               Normal
+  EndFont
+
+  # label font definition
+  LabelFont
+    Shape              Up
+    Series             Bold
+  EndFont
+
+End  
+
+# Theorem-unnumbered style declaration
+Style Theorem*
+  CopyStyle            Theorem
+  LatexName            thm*
+  LabelString          "Theorem."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{thm*}{Theorem} 
+  EndPreamble
+End  
+
+# Corollary-numbered style declaration
+Style Corollary
+  CopyStyle            Theorem
+  LatexName            cor
+  LabelString          "Corollary #."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{cor}[thm]{Corollary} %%Delete [thm] to re-start numbering
+  EndPreamble
+End  
+# Corollary-unnumbered style declaration
+Style Corollary*
+  CopyStyle            Theorem
+  LatexName            cor*
+  LabelString          "Corollary."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{cor*}{Corollary}
+  EndPreamble
+End  
+
+# Lemma-numbered style declaration
+Style Lemma
+  CopyStyle            Theorem
+  LatexName            lem
+  LabelString          "Lemma #."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{lem}[thm]{Lemma} %%Delete [thm] to re-start numbering
+  EndPreamble
+End  
+
+# Lemma-unnumbered style declaration
+Style Lemma*
+  CopyStyle            Theorem
+  LatexName            lem*
+  LabelString          "Lemma."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{lem*}{Lemma} %%Delete [thm] to re-start numbering
+  EndPreamble
+End  
+
+# Proposition-numbered style declaration
+Style Proposition
+  CopyStyle            Theorem
+  LatexName            prop
+  LabelString          "Proposition #."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{prop}[thm]{Proposition} %%Delete [thm] to re-start numbering
+  EndPreamble
+End  
+
+# Proposition-unnumbered style declaration
+Style Proposition*
+  CopyStyle            Theorem
+  LatexName            prop*
+  LabelString          "Proposition."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{prop*}{Proposition} 
+  EndPreamble
+End  
+
+# Conjecture-numbered style declaration
+Style Conjecture
+  CopyStyle            Theorem
+  LatexName            conjecture
+  LabelString          "Conjecture #."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{conjecture}[thm]{Conjecture} %%Delete [thm] to re-start numbering
+  EndPreamble
+End  
+
+# Conjecture-unnumbered style declaration
+Style Conjecture*
+  CopyStyle            Theorem
+  LatexName            conjecture*
+  LabelString          "Conjecture."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{conjecture*}{Conjecture} 
+  EndPreamble
+End 
+
+# Criterion-numbered style declaration
+Style Criterion
+  CopyStyle            Theorem
+  LatexName            criterion
+  LabelString          "Criterion #."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{criterion}[thm]{Criterion} %%Delete [thm] to re-start numbering
+  EndPreamble
+End  
+
+# Algorithm-numbered style declaration
+Style Algorithm
+  CopyStyle            Theorem
+  LatexName            algorithm
+  LabelString          "Algorithm #."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{algorithm}[thm]{Algorithm} %%Delete [thm] to re-start numbering
+  EndPreamble
+End  
+
+# Fact-numbered style declaration
+Style Fact
+  CopyStyle            Theorem
+  LatexName            fact
+  LabelString          "Fact #."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{fact}[thm]{Fact} 
+  EndPreamble
+End  
+
+# Fact-unnumbered style declaration
+Style Fact*
+  CopyStyle            Theorem
+  LatexName            fact*
+  LabelString          "Fact."
+
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem*{fact*}{Fact} 
+  EndPreamble
+End  
+
+# Axiom-numbered style declaration
+Style Axiom
+  CopyStyle            Theorem
+  LatexName            ax
+  LabelString          "Axiom #."
+  
+  Preamble
+    \theoremstyle{plain}    
+    \newtheorem{ax}[thm]{Axiom} 
+  EndPreamble
+End  
+
+# Definition-numbered style declaration
+Style Definition
+  CopyStyle            Theorem
+  LatexName            defn
+  LabelString          "Definition #."
+  
+  # standard font definition
+  Font
+    Shape              Up
+  EndFont
+
+  # label font definition
+  LabelFont
+    Shape              Up
+    Series             Bold
+  EndFont
+  Preamble
+   \theoremstyle{definition}
+   \newtheorem{defn}[thm]{Definition}
+  EndPreamble
+End  
+# Definition-unnumbered style declaration
+Style Definition*
+  CopyStyle            Definition
+  LatexName            defn*
+  LabelString          "Definition."
+  
+  Preamble
+   \theoremstyle{definition}
+   \newtheorem*{defn*}{Definition}
+  EndPreamble
+End  
+
+# Example-numbered style declaration
+Style Example
+  CopyStyle            Definition
+  LatexName            example
+  LabelString          "Example #."
+
+  Preamble
+   \theoremstyle{definition}
+    \newtheorem{example}[thm]{Example}
+  EndPreamble
+End  
+
+# Example-unnumbered style declaration
+Style Example*
+  CopyStyle            Definition
+  LatexName            example*
+  LabelString          "Example."
+
+  Preamble
+   \theoremstyle{definition}
+    \newtheorem*{example*}{Example}
+  EndPreamble
+End  
+
+# Condition-numbered style declaration
+Style Condition
+  CopyStyle            Definition
+  LatexName            condition
+  LabelString          "Condition #."
+
+  Preamble
+   \theoremstyle{definition}
+    \newtheorem{condition}[thm]{Condition}
+  EndPreamble
+End  
+
+# Problem-numbered style declaration
+Style Problem
+  CopyStyle            Definition
+  LatexName            problem
+  LabelString          "Problem #."
+
+  Preamble
+   \theoremstyle{definition}
+    \newtheorem{problem}[thm]{Problem}
+  EndPreamble
+End  
+
+# Exercise-numbered style declaration
+Style Exercise
+  CopyStyle            Definition
+  LatexName            xca
+  LabelString          "Exercise #."
+
+  Preamble
+   \theoremstyle{definition}
+    \newtheorem{xca}[section]{Exercise}%%Delete [section] for sequential numbering
+  EndPreamble
+End  
+
+# Remark-numbered style declaration
+Style Remark
+  CopyStyle            Theorem
+  LatexName            rem
+  LabelString          "Remark #."
+  
+  # standard font definition
+  Font
+    Shape              Up
+    Size               Normal
+  EndFont
+
+  # label font definition
+  LabelFont
+    Series             Medium
+    Shape              Italic
+  EndFont
+
+  Preamble
+    \theoremstyle{remark}
+    \newtheorem{rem}[thm]{Remark}
+  EndPreamble
+End  
+# Remark-unnumbered style declaration
+Style Remark*
+  CopyStyle            Remark
+  LatexName            rem*
+  LabelString          "Remark."
+
+  Preamble
+    \theoremstyle{remark}
+    \newtheorem*{rem*}{Remark}
+  EndPreamble
+End  
+
+# Claim-numbered style declaration
+Style Claim
+  CopyStyle            Remark
+  LatexName            claim
+  LabelString          "Claim #."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{claim}[thm]{Claim}
+  EndPreamble
+End  
+
+# Claim-unnumbered style declaration
+Style Claim*
+  CopyStyle            Remark
+  LatexName            claim*
+  LabelString          "Claim."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem*{claim*}{Claim}
+  EndPreamble
+End  
+
+# Note-numbered style declaration
+Style Note
+  CopyStyle            Remark
+  LatexName            note
+  LabelString          "Note #."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{note}[thm]{Note} 
+  EndPreamble
+End  
+
+# Note-unnumbered style declaration
+Style Note*
+  CopyStyle            Remark
+  LatexName            note*
+  LabelString          "Note."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem*{note*}{Note} 
+  EndPreamble
+End  
+
+
+# Notation-numbered style declaration
+Style Notation
+  CopyStyle            Remark
+  LatexName            notation
+  LabelString          "Notation #."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{notation}[thm]{Notation} 
+  EndPreamble
+End  
+
+# Summary-numbered style declaration
+Style Summary
+  CopyStyle            Remark
+  LatexName            summary
+  LabelString          "Summary #."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{summary}[thm]{Summary} 
+  EndPreamble
+End  
+
+# Acknowledgement-numbered style declaration
+Style Acknowledgement
+  CopyStyle            Remark
+  LatexName            acknowledgement
+  LabelString          "Acknowledgement #."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{acknowledgement}[thm]{Acknowledgement} 
+  EndPreamble
+End  
+# Acknowledgement-unnumbered style declaration
+Style Acknowledgement*
+  CopyStyle            Remark
+  LatexName            acknowledgement*
+  LabelString          "Acknowledgement."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem*{acknowledgement*}{Acknowledgement} 
+  EndPreamble
+End  
+
+# Case-numbered style declaration
+Style Case
+  CopyStyle            Remark
+  LatexName            case
+  LabelString          "Case #."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{case}{Case} %%Numbering of Cases not keyed to sections 
+  EndPreamble
+End  
+
+# Conclusion-numbered style declaration
+Style Conclusion
+  CopyStyle            Remark
+  LatexName            conclusion
+  LabelString          "Conclusion #."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem{conclusion}[thm]{Conclusion} 
+  EndPreamble
+End  
+
+# Conclusion-unnumbered style declaration
+Style Conclusion*
+  CopyStyle            Remark
+  LatexName            conclusion*
+  LabelString          "Conclusion #."
+
+  Preamble
+    \theoremstyle{remark}    
+    \newtheorem*{conclusion*}{Conclusion} 
+  EndPreamble
+End  
+
diff --git a/lib/layouts/apa.layout b/lib/layouts/apa.layout
new file mode 100644 (file)
index 0000000..bb60839
--- /dev/null
@@ -0,0 +1,311 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[apa,apacite.sty]{APA style}
+# Author: Randy Gobbel <gobbel@andrew.cmu.edu>
+
+# General textclass parameters
+# Description  "APA style"
+Columns                1
+Sides          1
+PageStyle      Headers
+MaxCounter     Counter_Section
+
+ClassOptions
+  Other        "man"
+  FontSize     6|8|10|12
+End
+
+Preamble
+\helvetica
+\author{Author} % hack around some bugs in apa.cls
+\affiliation{Affiliation} % hack around some bugs in apa.cls
+EndPreamble
+
+DefaultFont
+  Family       Roman
+  Series       Medium
+  Shape                Up
+  Size         Normal
+  Color                None
+EndFont
+
+Style Standard
+  LatexName    dummy
+  LatexType    Paragraph
+  Margin       Static
+  ParIndent    MM
+  ParSkip      0.4
+  ParSep       0.4
+  TopSep       1.0
+  BottomSep    1.0
+  Align        Block
+  AlignPossible Block, Left, Right, Center
+  LabelType    No_Label
+End
+
+Style Title
+  LatexName    title
+  LatexType    Command
+  InTitle      1
+  Font
+    Size       Huge
+  EndFont
+  Align                Center
+End
+
+Style RightHeader
+  LatexName    rightheader
+  LatexType    Command
+  InTitle      1
+  Font
+    Size       Small
+    Shape      SmallCaps
+  EndFont
+  Labeltype    Static
+  LabelString  "Right header: "
+  Labelsep     M
+  LabelFont
+    Series     Bold
+    Size       Small
+  EndFont
+  Align                Right
+  AlignPossible        Right
+End
+
+Style Abstract
+  LatexName    abstract
+  LatexType    Command
+  InTitle      1
+  Font
+    Size       Small
+  EndFont
+  Margin       Dynamic
+  LeftMargin   MMN
+  RightMargin  MMN
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  Labeltype    Static
+  LabelString  "Abstract: "
+  Labelsep     M
+  LabelFont
+    Series     Bold
+    Size       Small
+  EndFont
+End
+
+Style ShortTitle
+  LatexName    shorttitle
+  LatexType    Command
+  InTitle      1
+  Align                Left
+  AlignPossible        Left, Right, Center
+  Margin       Dynamic
+  Labeltype    Static
+  LabelString  "Short title: "
+  Labelsep     M
+  Font
+    Shape      SmallCaps
+    Size       Small
+  EndFont
+  LabelFont
+    Series     Bold
+    Size       Small
+    Shape      Up
+  EndFont
+End
+
+Style Author
+  LatexName    author
+  LatexType    Command
+  InTitle      1
+  Align                Center
+  AlignPossible        Left, Right, Center
+  TopSep       0.5
+  BottomSep    0.5
+  Font
+    Shape      Italic
+    Size       Small
+  EndFont
+End
+
+Style TwoAuthors
+  LatexName    twoauthors
+  LatexType    Command
+  InTitle      1
+End
+
+Style ThreeAuthors
+  LatexName    threeauthors
+  LatexType    Command
+  InTitle      1
+End
+
+Style FourAuthors
+  LatexName    fourauthors
+  LatexType    Command
+  InTitle      1
+End
+
+Style Affiliation
+  LatexName    affiliation
+  LatexType    Command
+  InTitle      1
+  Margin       Dynamic
+  ParSkip      0.4
+  BottomSep    1.5
+  TopSep       1.5
+  ParSep       1.5
+  Align                Left
+  AlignPossible        Block, Left, Right, Center
+  LabelType    Static
+  LabelString  "Affiliation: "
+  Labelsep     M
+  LabelFont
+    Series     Bold
+    Size       Small
+  EndFont
+End
+
+Style TwoAffiliations
+  LatexName    twoaffiliations
+  LatexType    Command
+  InTitle      1
+End
+
+Style ThreeAffiliations
+  LatexName    threeaffiliations
+  LatexType    Command
+  InTitle      1
+End
+
+Style FourAffiliations
+  LatexName    fouraffiliations
+  LatexType    Command
+  InTitle      1
+End
+
+Style Journal
+  LatexName    journal
+  LatexType    Command
+  InTitle      1
+End
+
+Style Copyright
+  LatexName    ccoppy
+  LatexType    Command
+  InTitle      1
+End
+
+Style CopNum
+  LatexName    copnum
+  LatexType    Command
+  InTitle      1
+End
+
+Style Note
+  LatexName    note
+  LatexType    Command
+  Font
+    Size       Small
+  EndFont
+End
+
+Style Acknowledgments
+  LatexName    acknowledgments
+  LatexType    Command
+End
+
+Style ThickLine
+  LatexName    thickline
+  LatexType    Command
+  KeepEmpty    1
+End
+
+Input stdlayouts.inc
+
+Style CenteredCaption
+  CopyStyle    Caption
+  LatexName    centeredcaption
+  Align                Center
+  AlignPossible        Center
+End
+
+Style FitFigure
+  LatexName    fitfigure
+  LatexType    Command
+End
+
+Style FitBitmap
+  LatexName    fitbitmap
+  LatexType    Command
+End
+
+############### Sections.
+# First the standard numbered definitions
+Input stdsections.inc
+# then define the unumbered sections, based on the numbered ones.
+Input stdstarsections.inc
+
+# remove the layouts that we do not need.
+NoStyle        Part
+NoStyle        Section
+NoStyle        Subsection
+NoStyle        Subsubsection
+NoStyle        Chapter
+NoStyle        Paragraph
+NoStyle        Subparagraph
+NoStyle        Chapter*
+
+# Itemize style definition
+Style Itemize
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            APAitemize
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          *
+End
+
+# Enumerate style definition
+Style Enumerate
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            APAenumerate
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ParSkip              0.0
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_EnumI
+End
+
+#seriate style definition
+Style Seriate
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            seriate
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             x
+  ParSkip              0.0
+  ItemSep              0.9
+  TopSep               0.5
+  BottomSep            0.5
+  ParSep               0.0
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_EnumII
+End
+
diff --git a/lib/layouts/article.layout b/lib/layouts/article.layout
new file mode 100644 (file)
index 0000000..5e117c4
--- /dev/null
@@ -0,0 +1,40 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{article}
+# Article textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by serveral developers.
+
+# Input general definitions
+Input stdclass.inc
+
+# There are no chapters in an article.
+NoStyle Chapter
+NoStyle Chapter*
+
+MaxCounter             Counter_Section
+SecNumDepth            3
+TocDepth               3
+
+# Change a bit Part and Part*
+Style Part
+  Align                        Left
+  AlignPossible                Left
+  TopSep                2
+  BottomSep             1.5
+
+  Font
+    Size               Larger
+  EndFont
+End
+
+Style Part*
+  Align                        Left
+  AlignPossible                Left
+  TopSep                2
+  BottomSep             1.5
+
+  Font
+    Size               Larger
+  EndFont
+End
diff --git a/lib/layouts/book.layout b/lib/layouts/book.layout
new file mode 100644 (file)
index 0000000..8d6d496
--- /dev/null
@@ -0,0 +1,29 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{book}
+# Book textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by serveral developers.
+
+# Input general definitions
+Input stdclass.inc
+
+# Global parameters.
+Sides          2
+PageStyle      Headings
+
+# There is no abstract environment in book.cls
+NoStyle        Abstract
+       
+# a few changes to the bibliography
+Style Bibliography
+  TopSep               4
+  LabelString          Bibliography
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Size               Huge
+  EndFont
+End
+
+
diff --git a/lib/layouts/broadway.layout b/lib/layouts/broadway.layout
new file mode 100644 (file)
index 0000000..b69ccbd
--- /dev/null
@@ -0,0 +1,242 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[broadway]{broadway}
+# 
+# For theater plays
+# General textclass parameters
+Columns                 1
+Sides                   1
+SecNumDepth             2
+TocDepth                2
+
+ClassOptions
+FontSize               12
+End
+
+# This is just to show how to declare the default font.
+# The defaults are exactly those shown here.
+DefaultFont
+  Family                Roman
+  Series                Medium
+  Shape                 Up
+  Size                  Normal
+  Color                 None
+EndFont
+
+Preamble
+\usepackage{fancyhdr}
+\usepackage{extramarks}
+\usepackage{ifthen}
+\usepackage{lastpage}
+\pagestyle{fancy}
+\newcommand{\TheAuthor}{}
+\newcommand{\Author}[1]{\renewcommand{\TheAuthor}{#1}}
+\newcommand{\TheTitle}{}
+\newcommand{\Title}[1]{\renewcommand{\TheTitle}{#1}}
+
+
+\rhead{\thepage}
+\lhead{\TheTitle}
+\chead{\TheAuthor}
+\cfoot{}
+% We do not want any hyphenation
+  \sloppy
+EndPreamble
+
+# Standard style definition (I kept this one to provide a general case)
+Style Standard
+  Margin                Static
+  LatexType             Paragraph
+  LatexName             dummy
+  ParIndent             ""
+  ParSkip               0.4
+  Align                 Left
+  AlignPossible         Block, Left, Right, Center
+  Labeltype             No_Label
+End
+
+# Narrative description of Scene
+Style Narrative
+  Margin                Static
+  LatexType             Environment
+  LatexName             narrative
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  Align                 Left
+  AlignPossible         Left
+  LabelType             No_Label
+Font
+  Family                Roman
+  Series                Medium
+  Shape                 Italic
+  Size                  Normal
+  Color                 Black
+EndFont
+End
+
+Style ACT
+  Margin                Dynamic
+  LatexType             Environment
+  LatexName             act
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  KeepEmpty            1
+  Align                 Center
+  AlignPossible         Center
+  LabelType             Counter_Chapter
+  LabelString          "ACT "
+End
+
+Style ACT*
+  Margin                Dynamic
+  LatexType             Paragraph
+  LatexName             dummy
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  Align                 Center
+  AlignPossible         Center
+  LabelType            No_Label
+End
+
+Style SCENE
+  Margin                Dynamic
+  LatexType             Environment
+  LatexName             scene
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  KeepEmpty            1
+  Align                 Center
+  AlignPossible         Center
+  LabelType             Static       # Counter_EnumI
+  LabelString          "SCENE "
+End
+
+Style AT_RISE:
+  Margin                Dynamic
+  LatexType             Environment
+  LatexName             atrise
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  Align                 Left
+  AlignPossible         Left
+  KeepEmpty            1
+  LabelType             Static
+  LabelString          "AT RISE: "
+End
+
+# Speaker style definition, identifies speaker  ALL CAPS
+Style Speaker
+  Margin                Static
+  LatexType             Environment
+  LatexName             speaker
+  ParSkip               0.4
+  TopSep               0.4
+  Align                 Center
+  AlignPossible         Center
+  LabelType             No_Label
+End
+
+# Parenthetical instruction to speaker (in parenthises, l.c.)
+# The ( will automatically appear on screen, both () will be
+# in print, so don't type any.
+Style Parenthetical  
+  Margin                Static
+  LatexType             Environment
+  LatexName             parenthetical
+  Align                 Center
+  AlignPossible         Center
+  LabelType            Static
+  LabelString          (
+
+Font
+  Family                Roman
+  Series                Medium
+  Shape                 Italic
+  Size                  Normal
+  Color                 Blue
+EndFont
+
+LabelFont
+  Family                Roman
+  Series                Medium
+  Shape                 Up
+  Size                  Normal
+  Color                 Blue
+EndFont
+End
+
+# Dialogue style definition. Actor dialog
+Style Dialogue
+  Margin                Static
+  LatexType             Environment
+  LatexName             dialogue
+  LeftMargin            MM
+  RightMargin          MM
+  Align                 Left
+  AlignPossible         Left
+  LabelType             No_Label
+End
+
+Style CURTAIN
+  Margin                Dynamic
+  LatexType             Paragraph
+  LatexName             dummy
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  KeepEmpty            1
+  Align                 Center
+  AlignPossible         Center
+  LabelType             Static
+  LabelString          "CURTAIN"
+End
+
+Style Title
+  Margin               Static
+  LatexType            Command
+  LatexName            title
+  InTitle              1
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Center
+  AlignPossible                Left, Right, Center
+
+End
+
+Style Author
+  Margin               Static
+  LatexType            Command
+  LatexName            author
+  InTitle              1
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Center
+  AlignPossible                Left, Right, Center
+End
+
+# Right Address style
+Style Right_Address
+  Margin               Right_Address_Box
+  LatexType            Command
+  LatexName            address
+  InTitle              1
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Left, Right
+End
+Input stdstruct.inc
+# Input lyxmacros.inc
+NoStyle Abstract
+NoStyle Bibliography
+NoStyle Date
+
+
diff --git a/lib/layouts/dinbrief.layout b/lib/layouts/dinbrief.layout
new file mode 100644 (file)
index 0000000..21e857a
--- /dev/null
@@ -0,0 +1,200 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{letter (german)}
+# German DIN-Brief textclass definition file. 
+# Author : Juergen Vigna <jug@sad.it>
+# Modified by: Carsten Kaemmerer <kammerer@ips.cs.tu-bs.de>
+# Modifies only some things from letter.layout
+
+
+# Input general definitions
+Input letter.layout
+
+# Redefine some stuff
+
+# My Address style
+Style My_Address
+  Margin               Static
+  LeftMargin            Unterschr
+  LabelType            Static
+  LabelString           Briefkopf:
+  LabelSep              x
+  LabelFont 
+    Shape              Italic
+    Size                Small
+    Color               blue
+  EndFont
+  BottomSep             0.5
+  Spacing               Other 0.9
+End
+
+# Send To Adress style changes
+Style Send_To_Address
+  Margin                Static
+  BottomSep             0.1
+  LeftMargin            Unterschr
+  LabelType            Static
+  LabelString           Adresse:
+  LabelSep              x
+  LabelFont 
+    Series             Medium
+    Shape              Italic
+    Size                Small
+    Color               blue
+  EndFont
+  Spacing               Other 0.9
+End
+
+# Opening style definition
+Style Opening
+  LeftMargin            Unterschr
+  LabelString          Anrede:
+  LabelSep              x
+  LabelFont 
+    Series              Medium
+    Shape              Italic
+    Size                Small
+    Color               blue
+    Latex              no_latex
+  EndFont
+End
+
+# Signature style definition
+Style Signature
+  LeftMargin            Unterschr
+  LabelString          Unterschrift:
+  LabelSep              x
+  LabelFont 
+    Series              Medium
+    Shape              Italic
+    Size                Small
+    Color               blue
+    Latex              no_latex
+  EndFont
+End
+
+# Closing style definition
+Style Closing
+  LeftMargin            Unterschr
+  LabelString          Gruß:
+  LabelSep              x
+  LabelFont 
+    Series              Medium
+    Shape              Italic
+    Size                Small
+    Color               blue
+    Latex              no_latex
+  EndFont
+End
+
+# encl style definition
+Style encl
+  LabelString          Anlagen:
+  LeftMargin            Unterschr
+  LabelSep              x
+  LabelFont 
+    Series             Medium
+    Shape              Italic
+    Size                Small
+    Color               blue
+  EndFont
+End
+
+# ps style definition
+Style ps
+  Margin               Static
+  LatexType            Command
+  LatexName            ps
+  LeftMargin            Unterschr
+  LabelSep             x
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          PS:
+  LabelFont 
+    Series             Medium
+    Shape              Italic
+    Size                Small
+    Color               blue
+  EndFont
+End
+
+# ps style definition
+Style cc
+  LabelString          Verteiler:
+  LeftMargin            Unterschr
+  LabelSep             x
+  LabelFont 
+    Series             Medium
+    Shape              Italic
+    Size                Small
+    Color               blue
+  EndFont
+End
+
+# Oggetto style definition
+Style Betreff
+  Margin               Static
+  LatexType            Command
+  LatexName            subject
+  LeftMargin           Unterschr
+  LabelSep             x
+  KeepEmpty             1  
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Betreff:
+  LabelFont 
+    Shape              Italic
+    Size                Small
+    Color               blue
+  EndFont
+  TextFont
+    Shape               Italic
+  EndFont
+End
+
+# Stadt style definition
+Style Stadt
+  Margin               Right_Address_Box
+  LatexType            Command
+  LatexName            place
+  LabelSep             x
+  TopSep               0.1
+  BottomSep            0.1
+  ParSep               0.1
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Stadt:
+  LabelFont 
+    Shape              Italic
+    Size                Small
+    Color               blue
+  EndFont
+End
+
+# Data style definition
+Style Datum
+  Margin               Right_Address_Box
+  LatexType            Command
+  LatexName            date
+  LabelSep             x
+  TopSep               0.1
+  BottomSep            0.1
+  ParSep               0.1
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Datum:
+  LabelFont 
+    Shape              Italic
+    Size                Small
+    Color               blue
+  EndFont
+End
diff --git a/lib/layouts/docbook.layout b/lib/layouts/docbook.layout
new file mode 100644 (file)
index 0000000..9d2be7f
--- /dev/null
@@ -0,0 +1,177 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareDocBookClass[article]{SGML (DocBook article)}
+# DocBook textclass definition file. 
+# Author : Jose' Matos <jamatos@lyx.org>
+
+# Input general definitions
+Input stdclass.inc
+
+OutputType             docbook
+
+MaxCounter             Counter_Section
+SecNumDepth            3
+TocDepth               3
+
+#docbook specific definitions
+Style Standard
+  LatexType            Paragraph
+  LatexName            para
+End
+
+# Quote style definition
+Style Quotation
+  LatexType            Environment
+  LatexName            blockquote
+  LatexParam           para
+End
+
+# Title style definition
+Style Title
+  LatexType            Command
+  LatexName            artheader
+  LatexParam           "1|"
+End
+
+# Section style definition
+Style Section
+  LatexType            Command
+  LatexName            sect1
+  LatexParam           "1|"
+End
+
+# Subsection style definition
+Style Subsection
+  LatexType            Command
+  LatexName            sect2
+  LatexParam           "2|"
+End
+
+# Subsubsection style definition
+Style Subsubsection
+  LatexType            Command
+  LatexName            sect3
+  LatexParam           "3|"
+End
+
+# Paragraph style definition
+Style Paragraph
+  LatexType            Command
+  LatexName            sect4
+  LatexParam           "4|"
+End
+
+# Subparagraph style definition
+Style Subparagraph
+  LatexType            Command
+  LatexName            sect5
+  LatexParam           "5|"
+End
+
+# Enumerate style definition
+Style Enumerate
+  LatexType            Item_Environment
+  LatexName            orderedlist
+End
+
+# Itemize style definition
+Style Itemize
+  LatexType            Item_Environment
+  LatexName            itemizedlist
+End
+
+# Description style definition
+Style Description
+  LatexType            Item_environment
+  LatexName            variablelist
+End
+
+# Verbatim style definition
+Style Literal
+  LatexType            Environment
+  LatexName            literal
+  Font
+    Latex               Latex
+  EndFont                                                                                     
+End
+
+# Code style definition
+Style Code
+  CopyStyle            LyX-Code
+  LatexType            Environment
+  LatexName            programlisting
+  Preamble
+  EndPreamble
+  Font
+    Latex               Latex
+  EndFont                                                                                     
+End
+
+# Author style definition
+Style Author
+  LatexType            Environment
+  LatexName            author
+  KeepEmpty            1
+End
+
+# first name style definition
+Style FirstName
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            firstname
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Center
+  AlignPossible        Center
+  LabelType            No_Label
+End
+
+# surname style definition
+Style Surname
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            surname
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Center
+  AlignPossible        Center
+  LabelType            No_Label
+End
+
+# Date style definition
+Style Date
+  LatexType            Paragraph
+  LatexName            date
+End
+
+# Abstract style definition
+Style Abstract
+  LatexType            Environment
+  LatexName            abstract
+  LatexParam           para
+End 
+
+# SGML style definition
+Style SGML
+  CopyStyle            LaTeX
+End
+
+# There are no chapters or parts in an docbook article.
+NoStyle Chapter
+NoStyle Chapter*
+NoStyle Part
+NoStyle Part*
+NoStyle LaTeX
+NoStyle LyX-Code
+NoStyle Address
+NoStyle Right_Address
+NoStyle LaTeX_Title
+NoStyle Verse
+NoStyle Section*
+NoStyle Subsection*
+NoStyle Subsubsection*
+NoStyle Paragraph*
+NoStyle Subparagraph*
+
+Style LyX-Code
+  ObsoletedBy          Code
+End
diff --git a/lib/layouts/egs.layout b/lib/layouts/egs.layout
new file mode 100644 (file)
index 0000000..11379a7
--- /dev/null
@@ -0,0 +1,769 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{article (European Geophysical Society) egs}
+# egs (article) textclass definition file for LyX.
+# Get egs.cls from EGS website under www.copernicus.org
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by several developers.
+# Converted article -> egs Martin Vermeer
+
+# General textclass parameters
+Columns                        2
+Sides                  1
+PageStyle              Plain
+MaxCounter             Counter_Section
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+# Section style definition
+Style Section
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            section
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_Section
+
+  # standard font definition
+  Font
+    Series             Bold
+  EndFont
+
+  # label font definition
+  LabelFont
+    Series             Bold
+  EndFont
+End
+
+# Subsection style definition
+Style Subsection
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            subsection
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_Subsection
+
+  Font
+    Shape              Up
+  EndFont
+
+End
+
+# Paragraph style definition
+Style Paragraph
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            paragraph
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.4
+  BottomSep            0.4
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_Paragraph
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Normal
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Size               Normal
+  EndFont
+End
+
+# Subparagraph style definition
+Style Subparagraph
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            subparagraph
+  NextNoIndent         0
+  LeftMargin           MM
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.4
+  ParSep               0.4
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_SubParagraph
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Normal
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Size               Normal
+  EndFont
+End
+
+# Quotation style definition
+Style Quotation
+  Margin               Static
+  LatexType            Environment
+  LatexName            quotation
+  NextNoIndent         1
+  LeftMargin           MMM
+  RightMargin          MMM
+  ParIndent            MM
+  ParSkip              0
+  ItemSep              0
+  TopSep               0.5
+  BottomSep            0.5
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+End
+
+# Quote style definition
+Style Quote
+  Margin               Static
+  LatexType            Environment
+  LatexName            quote
+  NextNoIndent         1
+  LeftMargin           MMM
+  RightMargin          MMM
+  TopSep               0.5
+  ParSep               0.5
+  BottomSep            0.5
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+# List style definition
+Style List
+  Margin               Manual
+  LatexType            List_Environment
+  LatexName            lyxlist
+  NextNoindent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Manual
+  LabelString          00.00.0000
+End
+
+# Enumerate style definition
+Style Enumerate
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            enumerate
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ParSkip              0.0
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_EnumI
+End
+
+# Itemize style definition
+Style Itemize
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            itemize
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          *
+End
+
+# Description style definition
+Style Description
+  Margin               First_Dynamic
+  LatexType            Item_environment
+  LatexName            description
+  NextNoIndent         1
+  LeftMargin           MM
+  LabelSep             xxx
+  ParSkip              0.4
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Manual
+  LabelString          MM
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
+# Verse style definition
+Style Verse
+# LaTeX type is first dynamic because of LaTeX implementation.
+# In LyX this does not make sense.
+  LatexType            Environment
+  LatexName            verse
+  Margin               First_Dynamic
+  NextNoIndent         1
+  LeftMargin           MMMM
+  LabelIndent          MMMM
+  ParSkip              0.4
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            No_Label
+End
+
+# Right Address style
+Style Right_Address
+  Margin               Right_Address_Box
+  LatexType            Command
+  LatexName            lyxrightaddress
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Left
+End
+
+# Address style definition
+Style Address
+  Margin               Static
+  LatexType            Command
+  LatexName            lyxaddress
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+# Title style definition
+Style Title
+  Margin               Static
+  LatexType            Command
+  LatexName            title
+  NextNoIndent         1
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Block, Center, Left, Right, Center
+  LabelType            No_Label
+  Fill_Top             1
+  Fill_Bottom          1
+
+  # standard font definition
+  Font 
+    Family             Sans
+    Series             Bold
+    Size               Largest
+  EndFont
+
+End
+
+
+# Title style definition
+Style LaTeX_Title
+  Margin               Static
+  LatexType            Command
+  LatexName            title
+  NextNoIndent         1
+  ParSkip              0.4
+  ItemSep              0
+  TopSep               0
+  BottomSep            0
+  ParSep               0
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Family             Sans
+    Series             Bold
+    Size               Largest
+  EndFont
+
+End
+
+# Author style definition
+Style Author
+  Margin               Static
+  LatexType            Command
+  LatexName            author
+  NextNoIndent         1
+  LeftMargin           Author:xx
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          Author:
+
+  # standard font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+
+End
+
+# Affiliation style definition
+Style Affil
+  Margin               Static
+  LatexType            Command
+  LatexName            affil
+  NextNoIndent         1
+  LeftMargin           Affiliation:x
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          Affilation:
+
+  # standard font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+
+End
+
+# journal name style definition
+Style Journal
+  Margin               Static
+  LatexType            Command
+  LatexName            journal
+  NextNoIndent         1
+  LeftMargin           Journal:xx
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          Journal:
+
+  # standard font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+
+End
+
+# msnumber style definition
+Style msnumber
+  Margin               Static
+  LatexType            Command
+  LatexName            msnumber
+  NextNoIndent         1
+  LabelSep             xxx
+  LeftMargin           MS_number:xx
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          MS_number:
+
+  # standard font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+
+End
+
+
+# FirstAuthor style definition
+Style FirstAuthor
+  Margin               Static
+  LatexType            Command
+  LatexName            firstauthor
+  NextNoIndent         1
+  LabelSep             xxx
+  LeftMargin           1st_author_surname:xx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          1st_author_surname:
+  # standard font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+
+End
+
+# Recieved style definition
+Style Received
+  Margin               Static
+  LatexType            Command
+  LatexName            received
+  NextNoIndent         1
+  LabelSep             xxx
+  LeftMargin           Received:xx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          Received:
+
+  # standard font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+
+End
+
+# Accepted style definition
+Style Accepted
+  Margin               Static
+  LatexType            Command
+  LatexName            accepted
+  NextNoIndent         1
+  LabelSep             xxx
+  LeftMargin           Accepted:xx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          Accepted:
+
+  # standard font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+
+End
+
+#
+#
+# offsets style definition
+Style Offsets
+  Margin               Static
+  LatexType            Command
+  LatexName            offsets 
+  NextNoIndent         1
+  LabelSep             xxx
+  LeftMargin           Reprint_reqs_To:x
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          reprint_reqs_to:
+
+  # standard font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+
+End
+
+# Date style definition
+Style Date
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            date
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               0.5
+  Align                        Left
+  AlignPossible                Left
+  LabelType            No_Label
+
+End
+
+# Abstract style definition
+Style Abstract 
+  Margin               First_Dynamic
+  LatexType            Environment
+  LatexName            abstract
+  NextNoIndent         0
+  ParIndent            MM
+  LabelSep             x
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          Abstract.  
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End 
+
+# Acknowledgement(s) style definitions
+Style Acknowledgements
+  Margin               First_Dynamic
+  LatexType            Environment
+  LatexName            acknowledgements
+  NextNoIndent         0
+  ParIndent            MM
+  LabelSep             x
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          Acknowledgements. 
+
+  # font & label font definition
+  Font 
+    Size               Small
+  EndFont
+
+  LabelFont 
+    Shape              Italic
+    Size               Small
+  EndFont
+End 
+
+Style Acknowledgement
+  Margin               First_Dynamic
+  LatexType            Environment
+  LatexName            acknowledgement
+  NextNoIndent         0
+  ParIndent            MM
+  LabelSep             x
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          Acknowledgement. 
+
+  # font & label font definition
+  Font 
+    Size               Small
+  EndFont
+
+  LabelFont 
+    Shape              Italic
+    Size               Small
+  EndFont
+End 
+#
+# Bibliography style definition
+Style Bibliography
+  Margin               First_Dynamic
+  LatexType            Item_Environment
+#  LatexName           lyxsectionbibliography
+  LatexName            lyxbibliography
+  NextNoIndent         1
+  LeftMargin           MM
+  ParSkip              0.4
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Top_Environment
+  LabelString          References 
+  LabelBottomSep    0.7
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
+# Caption style definition
+Style Caption
+  Margin               First_Dynamic
+  LatexType            Command
+  LatexName            caption
+  LabelSep             xx
+  ParSkip              0.4
+  TopSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Sensitive
+  LabelString          Caption
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
+# Section* style definition
+Style Section*
+  Margin               Static
+  LatexType            Command
+  LatexName            section*
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Series             Bold
+#    Size              Larger
+  EndFont
+
+End
+
+# Subsection* style definition
+Style Subsection*
+  Margin               Static
+  LatexType            Command
+  LatexName            subsection*
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+
+End
+
+# LaTeX style definition
+Style LaTeX
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  NewLine              0
+  ParIndent            MM
+  ParSkip              0.4
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+  FreeSpacing          1
+
+  # standard font definition
+  Font 
+    Latex              Latex
+  EndFont
+
+End
+
+
+
+# Lyx-Code style definition
+Style LyX-Code
+  Margin               Static
+  LatexType            Environment
+  LatexName            lyxcode
+  NextNoIndent         1
+  LeftMargin           MMM
+  RightMargin          MMM
+  TopSep               0.5
+  BottomSep            0.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+  FreeSpacing          1
+
+  # standard font definition
+  Font 
+    Family             Typewriter
+  EndFont
+
+End
diff --git a/lib/layouts/ejour2.layout b/lib/layouts/ejour2.layout
new file mode 100644 (file)
index 0000000..2a14314
--- /dev/null
@@ -0,0 +1,590 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{article (Springer - ejour2)}
+# ejour2 (article) textclass definition file. 
+# for Springer Verlag 2-column journals, e.g.
+# Zeitschrift fuer Physik C, Journal of geodesy, etc.
+# --------
+#
+# Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modified and enhanced by serveral developers.
+#
+# --------
+# ejour2 made originally by Martin Vermeer based on article.layout.
+# Modified for LyX 12 by Jean-Marc Lasgouttes and MV.
+#
+# General textclass parameters
+Columns                        2
+Sides                  1
+PageStyle              Plain
+MaxCounter             Counter_Section
+
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+# The standard sections
+Input stdsections.inc
+
+# Section style definition
+Style Section
+  # standard font definition
+  Font
+    Series             Medium
+    Series             Bold
+    Size               Normal
+  EndFont
+End
+
+# Subsection style definition
+Style Subsection
+  Font
+    Series             Medium
+    Shape              Italic
+    Size               Normal
+  EndFont
+End
+
+# Subsubsection style definition
+Style Subsubsection
+  # standard font definition
+  Font 
+    Series             Medium
+    Shape              Up
+    Size               Normal
+  EndFont
+End
+
+# Paragraph style definition
+Style Paragraph
+# standard font definition
+  Font 
+    Series             Medium
+    Shape              Italic
+    Size               Normal
+  EndFont
+End
+
+# Subparagraph style definition
+Style Subparagraph
+  # standard font definition
+  Font
+    Series             Medium
+    Shape              Up
+    Size               Normal
+  EndFont
+End
+
+# Now define the starred versions from the normal ones.
+Input stdstarsections.inc
+
+# Remove the ones that we do not want
+NoStyle                Part
+NoStyle                Part*
+NoStyle                Chapter
+NoStyle                Chapter*
+
+# Some standard things
+Input stdlayouts.inc
+Input stdlists.inc
+
+# Standard style definition
+Style Petit
+  Margin               Static
+  LatexType            Environment
+  LatexName            petit
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+
+  # Font definition
+  Font 
+    Size               Small
+  EndFont
+End
+
+# Journal name style definition (not needed if JG option given)
+Style Journal
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            journalname
+  NextNoIndent         1
+  LeftMargin           Journal:xxx
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          Journal:
+
+  # standard font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color              Red
+  EndFont
+
+End
+
+# Headnote style definition
+Style Headnote
+  CopyStyle            Journal
+  LatexName            dedication
+  LeftMargin           "HeadNote (optional):xxx"
+  LabelString          "Headnote (optional): "
+End
+
+# Title style definition
+Style Title
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            title
+  NextNoIndent         1
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left            
+  AlignPossible                Block, Center, Left, Right, Center
+  LabelType            No_Label
+  Fill_Top             1
+  Fill_Bottom          1
+
+  # standard font definition
+  Font 
+    Family             Sans
+    Series             Bold
+    Size               Largest
+  EndFont
+
+End
+
+
+# Title style definition
+Style Subtitle
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            subtitle
+  NextNoIndent         1
+  ParSkip              0.4
+  ItemSep              0
+  TopSep               0
+  BottomSep            0
+  ParSep               0
+  Align                        Left
+  AlignPossible                Left
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Family             Sans
+    Series             Bold
+    Size               Large
+  EndFont
+
+End
+
+
+# Translated Title style definition
+Style Translated_Title
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            transtitle
+  NextNoIndent         1
+  LeftMargin           "English title:xxx"
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7     
+  Align                        Left
+  AlignPossible                Left
+  LabelType            Static
+  LabelString          "English title: "
+
+  # Standard font definition
+  Font 
+    Series             Bold
+  EndFont
+
+  # Label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color              Red
+  EndFont
+
+End
+
+# Title_Running style definition
+Style Running_LaTeX_Title
+  CopyStyle            Journal
+  LatexName            titlerunning
+  LeftMargin           "Running title:xxx"
+  LabelString          "Running title: "
+End
+
+# Author style definition
+Style Author
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            author
+  NextNoIndent         1
+  ParSkip              0.4
+  TopSep               0.7
+  BottomSep            0.7
+  ItemSep              0
+  ParSep               0
+  Align                        Left
+  AlignPossible                Left
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Shape              Italic
+  EndFont
+
+End
+
+# AuthorRunning style definition
+Style Author_Running
+  CopyStyle            Journal
+  LatexName            authorrunning
+  LeftMargin           "Author Running:xxx"
+  LabelString          "Author Running: "
+End
+
+# Institute style definition
+Style Institute
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            institute
+  NextNoIndent         1
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Left
+  AlignPossible                Left
+  LabelType            No_Label
+
+  # Std. font definition
+  Font 
+    Size               Small
+  EndFont
+
+End
+
+# Dedication style definition (optional) 
+Style Dedication
+  CopyStyle            Journal
+  LatexName            headnote
+  LeftMargin           Dedication:xxx
+  LabelString          Dedication:
+End
+
+
+# Recieved/Accepted style definition
+Style Date
+  CopyStyle            Journal
+  LatexName            date
+  LeftMargin           Received/Accepted:xx
+  LabelString          Received/Accepted:
+End
+
+#
+#
+# Correspondence address style definition
+Style Mail
+  CopyStyle            Journal
+  LatexName            mail    
+  LeftMargin           "Corr Author:xx."
+  LabelString          "Corr Author: "
+End
+
+# Abstract style definition
+Style Abstract 
+  Margin               First_Dynamic
+  LatexType            Environment
+  LatexName            abstract
+  NextNoIndent         0
+  ParIndent            MM
+  LabelSep             xx
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Top_Environment
+  LabelString          Abstract. 
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End 
+
+# Keywords style definition
+Style  Keywords
+  Margin               First_Dynamic
+  LatexType            Command
+  LatexName            keywords
+  NextNoIndent         0
+  ParIndent            MM
+  LabelSep             xx
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          "Key Words: " 
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End 
+
+
+# Translated abstract style definition
+Style TranslatedAbstract
+  CopyStyle            Abstract
+  LatexName            transsummary
+  LabelString          "Eng. Abstract. " 
+End 
+
+# Trans_Keywords style definition
+Style  Trans_Keywords
+  CopyStyle            Keywords
+  LatexName            trankey
+  LabelString          "Eng Key Words: " 
+End 
+
+# Acknowledgement(s) style definitions
+Style Acknowledgements
+  Margin               First_Dynamic
+  LatexType            Environment
+  LatexName            acknowledgements
+  NextNoIndent         0
+  ParIndent            MM
+  LabelSep             xx
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          Acknowledgements. 
+
+  # font & label font definition
+  Font 
+    Size               Small
+  EndFont
+
+  LabelFont 
+    Shape              Italic
+    Size               Small
+  EndFont
+End 
+
+Style Acknowledgement
+  CopyStyle            Acknowledgements
+  LatexName            acknowledgement
+  LabelString          Acknowledgement. 
+End 
+
+#
+# Bibliography style definition
+Style Bibliography
+  Margin               First_Dynamic
+  LatexType            Item_Environment
+  LatexName            lyxbibliography
+  NextNoIndent         1
+  LeftMargin           MM
+  ParSkip              0.4
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Bibliography
+  LabelString          References 
+  LabelBottomSep    0.7
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+
+  Preamble
+    \newcommand{\lyxbibliography}{\thebibliography{References}%
+      \renewcommand{\bibitem}[3][!]{\@bibitem{##1}{##2}{##3}}}
+  EndPreamble
+
+
+End
+
+# Mathematics-like definitions:
+
+Style Claim
+  Margin               First_Dynamic
+  LatexType            Environment
+  LatexName            claim
+  NextNoIndent         0
+  ParIndent            MM
+  LabelSep             xx
+  ItemSep              0
+  TopSep               0.5
+  BottomSep            0.5
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          Claim. 
+
+  # font & label font definition
+  
+  LabelFont 
+    Shape              Italic
+  EndFont
+
+End
+
+Style Conjecture
+  CopyStyle            Claim
+  LatexName            conjecture
+  LabelString          "Conjecture #. " 
+End
+
+Style Corollary
+  CopyStyle            Claim
+  LatexName            corollary
+  LabelString          "Corollary #. " 
+
+  # font & label font definition
+  Font 
+    Shape              Italic
+  EndFont
+  
+  LabelFont 
+    Shape              Up
+    Series             Bold
+  EndFont
+
+End
+
+Style Definition
+  CopyStyle            Corollary
+  LatexName            definition
+  LabelString          "Definition #. "
+End
+
+Style Example
+  CopyStyle            Claim
+  LatexName            example
+  LabelString          "Example #. "
+End
+
+Style Exercise
+  CopyStyle            Claim
+  LatexName            exercise
+  LabelString          "Exercise #. "
+
+  # font & label font definition
+  
+  LabelFont 
+    Shape              Up
+    Series             Bold
+  EndFont
+
+End
+
+Style Lemma
+  CopyStyle            Corollary
+  LatexName            lemma
+  LabelString          "Lemma #. "
+End
+
+Style Note
+  CopyStyle            Claim
+  LatexName            note
+  LabelString          "Note #. "
+End
+
+Style Problem
+  CopyStyle            Exercise
+  LatexName            problem
+  LabelString          "Problem #. "
+End
+
+Style Proof
+  CopyStyle            Claim
+  LatexName            proof
+  LabelString          "Proof. "
+End
+
+Style Property
+  CopyStyle            Claim
+  LatexName            property
+  LabelString          "Property #. "
+End
+
+Style Proposition
+  CopyStyle            Claim
+  LatexName            proposition
+  LabelString          "Proposition_#. "
+End
+
+Style Question
+  CopyStyle            Claim
+  LatexName            question        
+  LabelString          "Question #. "
+End
+
+Style Remark
+  CopyStyle            Claim
+  LatexName            remark
+  LabelString          "Remark #. "
+End
+
+Style Solution
+  CopyStyle            Exercise
+  LatexName            solution
+  LabelString          "Solution #. "
+End
+
+Style Theorem
+  CopyStyle            Corollary
+  LatexName            theorem
+  LabelString          "Theorem #. "
+End
+
+#Finally a few older definitions for compatibility
+Input obsolete.inc
diff --git a/lib/layouts/foils.layout b/lib/layouts/foils.layout
new file mode 100644 (file)
index 0000000..6fb7ac6
--- /dev/null
@@ -0,0 +1,356 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{slides (FoilTeX)}
+# Foils textclass definition file. 
+# Created (1.Oct.96):   Alejandro Aguilar Sierra
+# Enhanced (fonts & centering):  Jean-Marc Lasgouttes
+# To do: Define class specific options.
+
+# General textclass parameters
+Columns                        1
+Sides                  1
+MaxCounter             Counter_Section
+
+DefaultFont
+  Family               Sans
+  Series               Medium
+  Shape                        Up
+  Size                 Normal
+  Color                        None
+EndFont
+
+ClassOptions
+  FontSize   17|20|25|30
+  PageStyle  "empty|plain|foilheadings|fancy"
+  Other      "dvips"
+End
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+# foilhead style definition
+Style Foilhead
+  Margin               Static
+  LatexType            Command
+  LatexName            foilhead
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Larger
+  EndFont
+
+End
+
+
+# Shortfoilhead style definition
+Style ShortFoilhead
+  Margin               Static
+  LatexType            Command
+  LatexName            foilhead
+  LatexParam           "[-0.5in]"
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Larger
+  EndFont
+
+End
+
+
+# landscape foilhead style definition
+Style Rotatefoilhead
+  Margin               Static
+  LatexType            Command
+  LatexName            rotatefoilhead
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Larger
+  EndFont
+
+End
+
+
+# ShortRotatefoilhead style definition
+Style ShortRotatefoilhead
+  Margin               Static
+  LatexType            Command
+  LatexName            rotatefoilhead
+  LatexParam           "[-0.5in]"
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Larger
+  EndFont
+
+End
+
+# then a few lists
+Input stdlists.inc
+
+# We add there a few additional lists that look good in foils.
+
+# TickList style definition
+Style TickList
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            dinglist
+  LatexParam           "{52}"
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          _/
+  
+  Preamble
+     \usepackage{pifont}
+  EndPreamble
+End
+
+# CrossList style definition
+Style CrossList
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            dinglist
+  LatexParam           "{56}"
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          ><
+  
+  Preamble
+    \usepackage{pifont}
+  EndPreamble
+End
+
+# Then the Titles stuff.
+Input stdstruct.inc
+
+# Title style definition. 
+Style Title
+  Font 
+    Series             Bold
+    Size               Largest
+  EndFont
+End
+
+# Author style definition
+Style Author
+  Font 
+    Size               Large
+  EndFont
+End
+
+# Date style definition
+Style Date
+  Font 
+    Size               Large
+  EndFont
+End
+
+# Abstract style definition
+Style Abstract
+  Font 
+    Size               Normal
+    Series             Medium
+  EndFont
+  
+  LabelFont 
+    Size               Large
+    Series             Bold
+  EndFont
+End
+
+# Bibliography style definition
+Style Bibliography
+  LabelFont 
+    Size               Larger
+    Series             Bold    
+  EndFont
+End
+
+# Theorem-numbered style declaration
+Style Theorem
+  Margin               First_Dynamic
+  LatexType            Environment
+  LatexName            Theorem
+  NextNoIndent         1
+  LabelSep             xx
+  ParSkip              0.4
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          "Theorem #."
+
+  
+  # standard font definition
+  TextFont
+    Shape              Slanted
+    Size               Normal
+  EndFont
+
+  # label font definition
+  LabelFont
+    Series             Bold
+  EndFont
+End
+
+# Lemma-numbered style declaration
+Style Lemma
+  CopyStyle            Theorem
+  LatexName            Lemma
+  LabelString          "Lemma #."
+End  
+
+# Corollary-numbered style declaration
+Style Corollary
+  CopyStyle            Theorem
+  LatexName            Corollary
+  LabelString          "Corollary #."
+End  
+
+# Proposition-numbered style declaration
+Style Proposition
+  CopyStyle            Theorem
+  LatexName            Proposition
+  LabelString          "Proposition #."
+End  
+
+# Definition-numbered style declaration
+Style Definition
+  CopyStyle            Theorem
+  LatexName            Definition
+  LabelString          "Definition #."
+
+  # standard font definition
+  Font
+    Shape              Up
+  EndFont
+
+  # label font definition
+  LabelFont
+    Shape              Up
+    Series             Bold
+  EndFont
+End
+
+# Proof style declaration
+Style Proof
+  CopyStyle            Theorem
+  LatexName            Proof
+  LabelString          "Proof."
+  
+  # standard font definition
+  Font
+    Shape              Up
+  EndFont
+
+  # label font definition
+  LabelFont
+    Shape              Up
+    Series             Bold
+  EndFont
+End  
+
+
+# Theorem-numbered style declaration
+Style Theorem*
+  CopyStyle            Theorem
+  LatexName            Theorem*
+  LabelString          "Theorem."
+ End
+
+# Lemma-numbered style declaration
+Style Lemma*
+  CopyStyle            Lemma
+  LatexName            Lemma*
+  LabelString          "Lemma."
+End  
+
+# Corollary-numbered style declaration
+Style Corollary*
+  CopyStyle            Corollary
+  LatexName            Corollary*
+  LabelString          "Corollary."
+End  
+
+# Proposition-numbered style declaration
+Style Proposition*
+  CopyStyle            Proposition
+  LatexName            Proposition*
+  LabelString          "Proposition."
+End  
+
+# Definition-numbered style declaration
+Style Definition*
+  CopyStyle            Definition
+  LatexName            Definition*
+  LabelString          "Definition."
+End
+
+# all the standard LaTeX environments
+Input stdlayouts.inc
+
+# Finally add a few weird LyX environments.
+Input lyxmacros.inc
diff --git a/lib/layouts/g-brief-de.layout b/lib/layouts/g-brief-de.layout
new file mode 100644 (file)
index 0000000..3859d99
--- /dev/null
@@ -0,0 +1,620 @@
+#% Do not delete he line below; configure depends on this
+#  \DeclareLaTeXClass[g-brief]{letter (g-brief, german)}
+# Letter textclass definition file. 
+# Author : Thomas Hartkens <hartkens@informatik.uni-hamburg.de>
+
+# Input general definitions
+# Input stdletter.inc
+
+
+
+
+# General textclass parameters
+Columns                        1
+Sides                  1
+PageStyle              Empty
+
+# This is just to show how to declare the default font.
+# The defaults are exactly those shown here.
+DefaultFont
+  Family               Roman
+  Series               Medium
+  Shape                        Up
+  Size                 Normal
+  Color                        None
+EndFont
+
+
+
+# Brieftext style definition
+Style Brieftext
+  Margin               Static
+  LatexType            Environment
+  LatexName            g-brief
+  ParIndent            MM
+  ParSkip              0.4
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+
+
+
+
+# Name und Titel des Absenders
+Style Name
+  Margin               Static
+  LatexType            Command
+  LatexName            Name
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Name:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Unterschrift des Absenders
+Style Unterschrift
+  Margin               Static
+  LatexType            Command
+  LatexName            Unterschrift
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Unterschrift:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Strasse
+Style Strasse
+  Margin               Static
+  LatexType            Command
+  LatexName            Strasse
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Strasse:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Zusatz
+Style Zusatz
+  Margin               Static
+  LatexType            Command
+  LatexName            Zusatz
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Zusatz:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Ort
+Style Ort
+  Margin               Static
+  LatexType            Command
+  LatexName            Ort
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Ort:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Land
+Style Land
+  Margin               Static
+  LatexType            Command
+  LatexName            Land
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Land:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# RetourAdresse
+Style RetourAdresse
+  Margin               Static
+  LatexType            Command
+  LatexName            RetourAdresse
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          RetourAdresse:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# MeinZeichen
+Style MeinZeichen
+  Margin               Static
+  LatexType            Command
+  LatexName            MeinZeichen
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          MeinZeichen:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# IhrZeichen
+Style IhrZeichen
+  Margin               Static
+  LatexType            Command
+  LatexName            IhrZeichen
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          IhrZeichen:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# IhrSchreiben
+Style IhrSchreiben
+  Margin               Static
+  LatexType            Command
+  LatexName            IhrSchreiben
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          IhrSchreiben:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+
+
+
+
+# Telefon
+Style Telefon
+  Margin               Static
+  LatexType            Command
+  LatexName            Telefon
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  TopSep               1.5
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Telefon:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Telefax
+Style Telefax
+  Margin               Static
+  LatexType            Command
+  LatexName            Telefax
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Telefax:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Telex
+Style Telex
+  Margin               Static
+  LatexType            Command
+  LatexName            Telex
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Telex:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# email  des Absenders
+Style EMail
+  Margin               Static
+  LatexType            Command
+  LatexName            EMail
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          EMail:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# HTTP  des Absenders
+Style HTTP
+  Margin               Static
+  LatexType            Command
+  LatexName            HTTP
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          HTTP:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Bank
+Style Bank
+  Margin               Static
+  LatexType            Command
+  LatexName            Bank
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  TopSep               1.5
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Bank:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# BLZ
+Style BLZ
+  Margin               Static
+  LatexType            Command
+  LatexName            BLZ
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          BLZ:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Konto
+Style Konto
+  Margin               Static
+  LatexType            Command
+  LatexName            Konto
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Konto:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Postvermerk
+Style Postvermerk
+  Margin               Static
+  LatexType            Command
+  LatexName            Postvermerk
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Postvermerk:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# Adresse
+Style Adresse
+  Margin               Static
+  LatexType            Command
+  LatexName            Adresse
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  TopSep               1.5
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Adresse:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# Data style definition
+Style Datum
+  Margin               Static
+  LatexType            Command
+  LatexName            Datum
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Left
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Datum:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Oggetto style definition
+Style Betreff
+  Margin               Static
+  LatexType            Command
+  LatexName            Betreff
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  TopSep               1.5
+  ParSep               0.4
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Betreff:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# Opening style definition
+Style Anrede
+  Margin               Static
+  LatexType            Command
+  LatexName            Anrede
+  KeepEmpty            1  
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  TopSep               1.5
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Anrede:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+
+
+# Anlagen style definition
+Style Anlagen
+  Margin               Static
+  LatexType            Command
+  LatexName            Anlagen
+  KeepEmpty            1  
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Anlagen:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# Verteiler style definition
+Style Verteiler
+  Margin               Static
+  LatexType            Command
+  LatexName            Verteiler
+  KeepEmpty            1  
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Verteiler:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+
+
+# Gruss style definition
+Style Gruss
+  Margin               Static
+  LatexType            Command
+  LatexName            LyxGruss
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  BottomSep            1.5
+  ParSep               0.4
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Gruß:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+
+  #define the environment lyxGruss
+  Preamble
+  \newcommand{\LyxGruss}[1]
+    { \Gruss{#1}{0.5cm} }
+  EndPreamble
+
+
+End
+
+
+
+
+
+
+
+
+
+# Input lyxmacros.inc
+
+# Remove some unwanted styles.
+# NoStyle              Right_Address
+# NoStyle              Address
diff --git a/lib/layouts/g-brief-en.layout b/lib/layouts/g-brief-en.layout
new file mode 100644 (file)
index 0000000..046723f
--- /dev/null
@@ -0,0 +1,620 @@
+#% Do not delete he line below; configure depends on this
+#  \DeclareLaTeXClass[g-brief]{letter (g-brief)}
+# Letter textclass definition file. 
+# Author : Thomas Hartkens <hartkens@informatik.uni-hamburg.de>
+
+# Input general definitions
+# Input stdletter.inc
+
+
+
+
+# General textclass parameters
+Columns                        1
+Sides                  1
+PageStyle              Empty
+
+# This is just to show how to declare the default font.
+# The defaults are exactly those shown here.
+DefaultFont
+  Family               Roman
+  Series               Medium
+  Shape                        Up
+  Size                 Normal
+  Color                        None
+EndFont
+
+
+
+# Brieftext style definition
+Style Letter
+  Margin               Static
+  LatexType            Environment
+  LatexName            g-brief
+  ParIndent            MM
+  ParSkip              0.4
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+
+
+
+
+# Name und Titel des Absenders
+Style Name
+  Margin               Static
+  LatexType            Command
+  LatexName            Name
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Name:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Unterschrift des Absenders
+Style Signature
+  Margin               Static
+  LatexType            Command
+  LatexName            Unterschrift
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Signature:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Strasse
+Style Street
+  Margin               Static
+  LatexType            Command
+  LatexName            Strasse
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Street:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Zusatz
+Style Addition
+  Margin               Static
+  LatexType            Command
+  LatexName            Zusatz
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Addition:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Ort
+Style Town
+  Margin               Static
+  LatexType            Command
+  LatexName            Ort
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Town:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Land
+Style State
+  Margin               Static
+  LatexType            Command
+  LatexName            Land
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          State:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# RetourAdresse
+Style ReturnAddress
+  Margin               Static
+  LatexType            Command
+  LatexName            RetourAdresse
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          ReturnAddress:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# MeinZeichen
+Style MyRef
+  Margin               Static
+  LatexType            Command
+  LatexName            MeinZeichen
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          MyRef:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# IhrZeichen
+Style YourRef
+  Margin               Static
+  LatexType            Command
+  LatexName            IhrZeichen
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          YourRef:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# IhrSchreiben
+Style YourMail
+  Margin               Static
+  LatexType            Command
+  LatexName            IhrSchreiben
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          YourMail:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+
+
+
+
+# Telefon
+Style Phone
+  Margin               Static
+  LatexType            Command
+  LatexName            Telefon
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  TopSep               1.5
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Phone:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Telefax
+Style Telefax
+  Margin               Static
+  LatexType            Command
+  LatexName            Telefax
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Telefax:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Telex
+Style Telex
+  Margin               Static
+  LatexType            Command
+  LatexName            Telex
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Telex:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# email  des Absenders
+Style EMail
+  Margin               Static
+  LatexType            Command
+  LatexName            EMail
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          EMail:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# HTTP  des Absenders
+Style HTTP
+  Margin               Static
+  LatexType            Command
+  LatexName            HTTP
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          HTTP:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Bank
+Style Bank
+  Margin               Static
+  LatexType            Command
+  LatexName            Bank
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  TopSep               1.5
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Bank:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# BLZ
+Style BankCode
+  Margin               Static
+  LatexType            Command
+  LatexName            BLZ
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          BankCode:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Konto
+Style BankAccount
+  Margin               Static
+  LatexType            Command
+  LatexName            Konto
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          BankAccount:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Postvermerk
+Style PostalCommend
+  Margin               Static
+  LatexType            Command
+  LatexName            Postvermerk
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          PostalCommend:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# Adresse
+Style Address
+  Margin               Static
+  LatexType            Command
+  LatexName            Adresse
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  TopSep               1.5
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Address:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# Data style definition
+Style Date
+  Margin               Static
+  LatexType            Command
+  LatexName            Datum
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  KeepEmpty            1  
+  Align                Left
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Date:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+# Oggetto style definition
+Style Reference
+  Margin               Static
+  LatexType            Command
+  LatexName            Betreff
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  TopSep               1.5
+  ParSep               0.4
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Reference:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# Opening style definition
+Style Opening
+  Margin               Static
+  LatexType            Command
+  LatexName            Anrede
+  KeepEmpty            1  
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  TopSep               1.5
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Opening:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+
+
+# Anlagen style definition
+Style Encl.
+  Margin               Static
+  LatexType            Command
+  LatexName            Anlagen
+  KeepEmpty            1  
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Encl.:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+# Verteiler style definition
+Style cc
+  Margin               Static
+  LatexType            Command
+  LatexName            Verteiler
+  KeepEmpty            1  
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          cc:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+End
+
+
+
+
+# Gruss style definition
+Style Closing
+  Margin               Static
+  LatexType            Command
+  LatexName            LyxGruss
+  LeftMargin           xxxxxxxxxx::xx
+  LabelSep             xx
+  BottomSep            1.5
+  ParSep               0.4
+  KeepEmpty            1  
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Closing:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Color               Blue
+  EndFont
+
+  #define the environment lyxGruss
+  Preamble
+  \newcommand{\LyxGruss}[1]
+    { \Gruss{#1}{0.5cm} }
+  EndPreamble
+
+
+End
+
+
+
+
+
+
+
+
+
+# Input lyxmacros.inc
+
+# Remove some unwanted styles.
+# NoStyle              Right_Address
+# NoStyle              Address
diff --git a/lib/layouts/hollywood.layout b/lib/layouts/hollywood.layout
new file mode 100644 (file)
index 0000000..6dcd7b5
--- /dev/null
@@ -0,0 +1,266 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[hollywood]{hollywood}
+# This layout follows the current Hollywood standard for movie scripts
+# 
+# Font Courier 12 pts
+# abbreviations used in scripts are as follows:
+# INT. - interior      EXT. - exterior
+#(O.S) - off screen    b.g. - background       PAN - camera movement
+#(V.O) - voice over    C.U. - close-up         INSERT - cut to close-up of
+# each page should be 1 minute of film
+# Spec scripts should not be more that 120 pages or less than 110.
+# Nothing goes in a script that you cannot see or hear.
+
+# Contributed by Garst R. Reese with lots of help from the LyX Team
+# Based on course given by Lars Davidson
+
+# General textclass parameters
+Columns                 1
+Sides                   1
+SecNumDepth             2
+TocDepth                2
+
+ClassOptions
+FontSize               12
+End
+
+# This is just to show how to declare the default font.
+# The defaults are exactly those shown here.
+DefaultFont
+  Family                Typewriter
+  Series                Medium
+  Shape                 Up
+  Size                  Normal
+  Color                 None
+EndFont
+
+Preamble
+\usepackage{fancyhdr}
+\usepackage{extramarks}
+\usepackage{ifthen}
+\usepackage{lastpage}
+\pagestyle{fancy}
+% This stuff is for a shooting script
+% \lhead{\ifthenelse{ \not \value{page} = 1}{CONTINUED:}{}}
+% \rfoot{\ifthenelse{ \not \value{page}=\pageref{LastPage}}{(CONT'D)}
+%  {\ifthenelse{\value{page}=\pageref{LastPage}}{(END)}{}}}
+
+
+% This is what we want for a spec script
+\rhead{\thepage.}
+\cfoot{}
+% \renewcommand{\headrulewitdh}{0pt}
+  % This one is needed to get real adobe courier, but you can use
+  % cmtt which is also correct
+  \renewcommand{\familydefault}{pcr}
+  % This is to negate the effect of the ~ that LyX adds everywhere
+ \let~=\space
+  % this protects you against the fact that TeX does not want to
+  % hyphenate in typewriter font. It is possible to enable
+  % hyphenation, but I do not remember how.
+  % That's good because we -do not- want any hyphenation.
+  \sloppy
+EndPreamble
+
+# Standard style definition (I kept this one to provide a general case)
+Style Standard
+  Margin                Static
+  LatexType             Paragraph
+  LatexName             dummy
+  ParIndent             ""
+  ParSkip               0.4
+  Align                 Left
+  AlignPossible         Block, Left, Right, Center
+  Labeltype             No_Label
+End
+
+
+# Narrative description of Scene
+Style Narrative
+  Margin                Static
+  LatexType             Environment
+  LatexName             narrative
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  Align                 Left
+  AlignPossible         Left
+  LabelType             No_Label
+End
+
+# FADE_IN: and FADE_OUT: usually stand alone. If you want a more complicated
+# FADE_IN e.g. FADE_IN on STELLA:, use the Narrative Style.
+Style FADE_IN:
+  Margin                Dynamic
+  LatexType             Environment
+  LatexName             fadein
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  Align                 Left
+  AlignPossible         Left
+  KeepEmpty            1
+  LabelType             Static
+  LabelString          "FADE IN: "
+End
+
+# Scene headings (ALL CAPS) This is a general case, probably not needed
+# example:
+# INT. LOG CABIN - NIGHT
+# Use Style EXT. for Exterior, INT. for Interior scenes. Last word should be
+# - DAY, or - NIGHT or similar to define lighting.
+Style INT.
+  Margin                Dynamic
+  LatexType             Environment
+  LatexName             interior
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  Align                 Left
+  AlignPossible         Left
+  LabelType             Static
+  LabelString          "INT. "
+End
+
+Style EXT.
+  Margin                Dynamic
+  LatexType             Environment
+  LatexName             exterior
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  Align                 Left
+  AlignPossible         Left
+  LabelType             Static
+  LabelString          "EXT. "
+End
+
+# Dialogue style definition. Actor dialog
+Style Dialogue
+  Margin                Static
+  LatexType             Environment
+  LatexName             dialogue
+  LeftMargin            MMMMMMMMMMMM
+  RightMargin          MMMMMMMMMMMM
+  ParSkip               0.0
+  TopSep               0.0
+  BottomSep            0.0
+  Align                 Left
+  AlignPossible         Left
+  LabelType             No_Label
+End
+# Speaker style definition, identifies speaker  ALL CAPS
+Style Speaker
+  Margin                Static
+  LatexType             Environment
+  LatexName             speaker
+  LeftMargin            MMMMMMMMMMMMMMMMMMMMMM
+  ParSkip               0.0
+  TopSep               1.0
+  BottomSep            0.0
+  Align                 Left
+  AlignPossible         Left
+  LabelType             No_Label
+End
+
+# Parenthetical instruction to speaker (in parenthises, l.c.)
+# The ( will automatically appear on screen, both () will be
+# in print, so don't type any.
+Style Parenthetical  
+  Margin                Static
+  LatexType             Environment
+  LatexName             parenthetical
+  LeftMargin            MMMMMMMMMMMMMMMMM
+  TopSep               0.0
+  BottomSep            0.0
+  ParSkip              0.0
+  Align                 Left
+  AlignPossible         Left
+  LabelType            Static
+  LabelString          (
+Font
+  Family                Typewriter
+  Series                Medium
+  Shape                 Up
+  Size                  Normal
+  Color                 Blue
+EndFont
+
+End
+
+# Transition style definition ALL CAPS
+Style Transition
+  Margin                Static
+  LatexType             Environment
+  LatexName             flushright
+  ParIndent             ""
+  TopSep               1.0
+  ParSkip               0.4
+  Align                 Right
+  AlignPossible         Right
+  LabelType             No_Label
+End
+
+Style FADE_OUT:
+  Margin                Dynamic
+  LatexType             Environment
+  LatexName             fadeout
+  ParIndent             ""
+  ParSkip               0.8
+  TopSep               1.0
+  Align                 Left
+  AlignPossible         Left
+  KeepEmpty            1
+  LabelType             Static
+  LabelString          "FADE OUT: "
+End
+
+
+
+
+# Right Address style
+Style Right_Address
+  Margin               Right_Address_Box
+  LatexType            Command
+  LatexName            address
+  InTitle              1
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Left, Right
+End
+
+Style Author
+  Margin               Static
+  LatexType            Command
+  LatexName            author
+  InTitle              1
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Center
+  AlignPossible                Left, Right, Center
+
+End
+
+Style Title
+  Margin               Static
+  LatexType            Command
+  LatexName            title
+  InTitle              1
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Center
+  AlignPossible                Left, Right, Center
+
+End
+Input stdstruct.inc
+# Input lyxmacros.inc
+NoStyle Abstract
+NoStyle Bibliography
+NoStyle Date
+
+
diff --git a/lib/layouts/iletter.layout b/lib/layouts/iletter.layout
new file mode 100644 (file)
index 0000000..6941546
--- /dev/null
@@ -0,0 +1,111 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{letter (italian)}
+# Italian Letter textclass definition file. 
+# Author : Juergen Vigna <jug@sad.it>
+# Modifies only some things from letter.layout
+
+
+# Input general definitions
+Input letter
+
+# Redefine some stuff
+
+# My Address style
+Style My_Address
+  Margin               Static
+End
+
+# Send_To_Address style definition
+Style Send_To_Address
+  Margin               Right_Address_Box
+End
+
+# Opening style definition
+Style Opening
+  LeftMargin           Apertura::xx
+  LabelString          Apertura:
+End
+
+# Signature style definition
+Style Signature
+  LeftMargin           Firma::xx
+  LabelString          Firma:
+End
+
+# Closing style definition
+Style Closing
+  LeftMargin           Saluti::xx
+  LabelString          Saluti:
+End
+
+# encl style definition
+Style encl
+  LeftMargin           Allegati::xx
+  LabelString          Allegati:
+End
+
+# Oggetto style definition
+Style Oggetto
+  Margin               Static
+  LatexType            Command
+  LatexName            oggetto
+  LeftMargin           Oggetto::xx
+  LabelSep             xx
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Oggetto:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+End
+
+# Citta style definition
+Style Citta
+  Margin               Static
+  LatexType            Command
+  LatexName            citta
+  LeftMargin           Città::xx
+  LabelSep             xx
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Città:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+End
+
+# Data style definition
+Style Data
+  Margin               Static
+  LatexType            Command
+  LatexName            data
+  LeftMargin           Data::xx
+  LabelSep             xx
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Data:
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+End
diff --git a/lib/layouts/latex8.layout b/lib/layouts/latex8.layout
new file mode 100644 (file)
index 0000000..9a3eda7
--- /dev/null
@@ -0,0 +1,125 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[article,latex8.sty,times.sty]{article (Latex8)}
+# Latex8 textclass definition file.
+# Author : Allan Rae <rae@elec.uq.edu.au>
+
+Preamble
+  \usepackage{latex8}
+  \usepackage{times}
+EndPreamble
+
+# Input general definitions
+Input stdclass.inc
+
+Columns                1
+MaxCounter             Counter_Section
+
+ClassOptions
+   FontSize            10
+End
+
+NoStyle Part
+NoStyle Part*
+NoStyle Chapter
+NoStyle Chapter*
+NoStyle Section*
+NoStyle Subsection*
+NoStyle Subsubsection
+NoStyle Subsubsection*
+NoStyle Paragraph
+NoStyle Subparagraph
+
+Style Title
+  Font
+    Series             Bold
+    Size               Larger
+  EndFont
+End
+
+Style Section
+  TopSep               1.0
+  BottomSep            1.0
+  ParSep               1.0
+  latexname            "Section"
+End
+
+Style Subsection
+  TopSep               1.0
+  BottomSep            1.0
+  ParSep               1.0
+  latexname            "SubSection"
+End
+
+Style Email
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            email
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               1
+  Align                        Center
+  AlignPossible                Center
+  LabelType            Static
+  LabelString          "E-mail:"
+  # standard font definition
+  Font 
+    Size               Large
+    Family             Typewriter
+  EndFont
+
+  LabelFont
+    Family             Roman
+  EndFont
+End
+
+Style Affiliation
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            affiliation
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               1
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+  # standard font definition
+  Font 
+    Size               Large
+  EndFont
+End
+
+# Abstract style redefinition
+Style Abstract 
+  LeftMargin           ""
+  RightMargin          ""
+
+  # standard font definition
+  Font
+    Size               Normal
+    Shape              Italic
+  EndFont
+  
+  LabelFont
+    Size               Large
+    Shape              Up
+    Series             Bold
+  EndFont
+End
+
+Style Caption
+  Font
+    Series             Bold
+  EndFont
+End
+
+Style Bibliography
+  LabelFont
+    Size               Large
+  EndFont
+End
diff --git a/lib/layouts/letter.layout b/lib/layouts/letter.layout
new file mode 100644 (file)
index 0000000..6f8ab80
--- /dev/null
@@ -0,0 +1,15 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{letter}
+# Letter textclass definition file. 
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Heavily modifed and enhanced by serveral developers.
+
+# Input general definitions
+Input stdletter.inc
+Input stdlists.inc
+Input lyxmacros.inc
+
+# Remove some unwanted styles.
+NoStyle                Right_Address
+NoStyle                Address
+
diff --git a/lib/layouts/linuxdoc.layout b/lib/layouts/linuxdoc.layout
new file mode 100644 (file)
index 0000000..81538eb
--- /dev/null
@@ -0,0 +1,399 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLinuxDocClass[article]{SGML (LinuxDoc article)}
+# LinuxDoc textclass definition file. 
+# Author : Pascal André <andre@via.ecp.fr>
+
+# General textclass parameters
+Columns                        1
+Sides                  1
+PageStyle              Plain
+MaxCounter             Counter_Section
+OutputType             linuxdoc
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            p
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block
+  LabelType            No_Label
+End
+
+# Quote style definition
+Style Quote
+  Margin               Static
+  LatexType            Environment
+  LatexName            quote
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block
+  LabelType            No_Label
+End
+
+# Title style definition
+Style Title
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            title
+  NextNoIndent         1
+  ParSkip              0.4
+  Align                        Center
+  AlignPossible                Block, Center, Left, Right, Center
+  LabelType            No_Label
+  Fill_Top             1
+  Fill_Bottom          1
+
+  # standard font definition
+  Font 
+    Family             Sans
+    Series             Bold
+    Size               Largest
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Family             Sans
+    Series             Bold
+    Size               Largest
+  EndFont
+End
+
+# Section style definition
+Style Section
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            sect
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_Section
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Larger
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Size               Larger
+  EndFont
+End
+
+# Subsection style definition
+Style Subsection
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            sect1
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_Subsection
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Large
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Size               Large
+  EndFont
+End
+
+# Subsubsection style definition
+Style Subsubsection
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            sect2
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.7
+  BottomSep            0.4
+  ParSep               0.4
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_SubSubSection
+
+  # standard font definition
+  Font 
+    Series             Bold
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
+# Paragraph style definition
+Style Paragraph
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            sect3
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.4
+  BottomSep            0.4
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_Paragraph
+
+  # standard font definition
+  Font 
+    Series             Bold
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
+# Subparagraph style definition
+Style Subparagraph
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            sect4
+  LeftMargin           MM
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.4
+  ParSep               0.4
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_SubParagraph
+
+  # standard font definition
+  Font 
+    Series             Bold
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
+# Enumerate style definition
+Style Enumerate
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            enum
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_EnumI
+End
+
+# Itemize style definition
+Style Itemize
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            itemize
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          *
+End
+
+# Description style definition
+Style Description
+  Margin               First_Dynamic
+  LatexType            Item_environment
+  LatexName            descrip
+  NextNoIndent         1
+  LeftMargin           MM
+  LabelSep             xxx
+  ParSkip              0.4
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Manual
+  LabelString          MM
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
+# Verbatim style definition
+Style Verbatim
+  Margin               Static
+  LatexType            environment
+  LatexName            verb
+  NextNoIndent         1
+  LeftMargin           MM
+  LabelSep             xx
+  ItemSep              0.2
+  Topsep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block
+  FreeSpacing          1
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Family             Typewriter
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Family             Typewriter
+  EndFont
+End
+
+# Code style definition
+Style Code
+  Margin               Static
+  LatexType            Environment
+  LatexName            code
+  NextNoIndent         1
+  LeftMargin           MM
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block
+  LabelType            No_Label
+  FreeSpacing          1
+End
+
+# Author style definition
+Style Author
+  Margin               Dynamic
+  LatexType            Paragraph
+  LatexName            author
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Size               Larger
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Size               Larger
+  EndFont
+End
+
+# Date style definition
+Style Date
+  Margin               Dynamic
+  LatexType            Paragraph
+  LatexName            date
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               0.5
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Size               Large
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Size               Large
+  EndFont
+End
+
+# Abstract style definition
+Style Abstract
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            abstract
+  NextNoIndent         1
+  LeftMargin           MM
+  LabelSep             xx
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Shape              Italic
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Shape              Italic
+  EndFont
+End 
+
+# SGML style definition
+Style SGML
+  Margin                Static
+  LatexType             Paragraph
+  LatexName             p
+  NewLine               0
+  ParIndent             MM
+  ParSkip               0.4
+  ParSep                0.5
+  Align                 Center
+  AlignPossible         Block, Left, Right, Center
+  LabelType             No_Label
+  FreeSpacing           1
+
+  # standard font definition
+  Font 
+    Latex               Latex
+  EndFont
+End
diff --git a/lib/layouts/literate-article.layout b/lib/layouts/literate-article.layout
new file mode 100644 (file)
index 0000000..e62cb79
--- /dev/null
@@ -0,0 +1,13 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[article,noweb.sty]{article (Noweb)}
+# literate-article textclass definition file.
+# Author : Edmar Wienskoski Jr. <edmar-w-jr@technologist.com>
+
+Preamble
+  \usepackage{noweb}
+EndPreamble
+
+Input article.layout
+Input literate-scrap.inc
+
+
diff --git a/lib/layouts/literate-book.layout b/lib/layouts/literate-book.layout
new file mode 100644 (file)
index 0000000..b477cbc
--- /dev/null
@@ -0,0 +1,13 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[book,noweb.sty]{book (Noweb)}
+# literate-book textclass definition file.
+# Author : Edmar Wienskoski Jr. <edmar-w-jr@technologist.com>
+
+Preamble
+  \usepackage{noweb}
+EndPreamble
+
+Input book.layout
+Input literate-scrap.inc
+
+
diff --git a/lib/layouts/literate-report.layout b/lib/layouts/literate-report.layout
new file mode 100644 (file)
index 0000000..29b4948
--- /dev/null
@@ -0,0 +1,13 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[report,noweb.sty]{report (Noweb)}
+# literate-report textclass definition file.
+# Author : Edmar Wienskoski Jr. <edmar-w-jr@technologist.com>
+
+Preamble
+  \usepackage{noweb}
+EndPreamble
+
+Input report.layout
+Input literate-scrap.inc
+
+
diff --git a/lib/layouts/literate-scrap.inc b/lib/layouts/literate-scrap.inc
new file mode 100644 (file)
index 0000000..63eb3fe
--- /dev/null
@@ -0,0 +1,36 @@
+#
+# Suggested style to write your code:
+# Within same scrap, lines are separated by new-lines (Ctrl-return), use:
+#  ItemSep               0.4
+#     . disavantage: lyx doesn't allow space on first column, use proteced space
+#                    must type ctrl-return every single line
+#     . advantage:   looks better (IMHO)
+#                    resembles more closelly the produced paper doc. (more WYSIWYG)
+#
+
+OutputType              literate
+
+Style Scrap
+  Margin                First_Dynamic
+  LatexType             Paragraph
+  LatexName             dummy
+  NewLine               0
+  LeftMargin            MMM
+  ParSep                0.4
+  TopSep                0.4
+  BottomSep             0.4
+  ItemSep               0.4
+  Align                 Left
+  AlignPossible         Block,Left
+  FreeSpacing           1
+  LabelType             Static
+
+  LabelFont
+    Color               magenta
+  EndFont
+  TextFont
+    Latex               Latex
+    Family              Typewriter
+  EndFont
+
+End
diff --git a/lib/layouts/lyxmacros.inc b/lib/layouts/lyxmacros.inc
new file mode 100644 (file)
index 0000000..60ef9ed
--- /dev/null
@@ -0,0 +1,121 @@
+# Standard textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by several developers.
+
+# This file contains some special LyX environments that are used by
+# all environment classes. Some of these are a bit peculiar and might
+# be removed later.
+
+# Lyx-Code style definition
+Style LyX-Code
+  Margin               Static
+  LatexType            Environment
+  LatexName            lyxcode
+  NextNoIndent         1
+  LeftMargin           MMM
+  RightMargin          MMM
+  TopSep               0.5
+  BottomSep            0.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+  FreeSpacing          1
+
+  # define the environment lyxcode
+  Preamble
+  \newenvironment{lyxcode}
+    {\begin{list}{}{
+      \setlength{\rightmargin}{\leftmargin}
+      \raggedright
+      \setlength{\itemsep}{0pt}
+      \setlength{\parsep}{0pt}
+      \ttfamily}%
+     \item[]}
+    {\end{list}}
+  EndPreamble
+
+  # standard font definition
+  Font 
+    Family             Typewriter
+  EndFont
+
+End
+
+# Comment style definition
+Style Comment
+  Margin               Dynamic
+  LatexType            Environment
+  LatexName            comment
+  NextNoIndent         1
+  LeftMargin           MMM
+  RightMargin           MMM
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelSep             :x
+  Labelstring          "Comment:"
+
+  LabelFont
+       Shape           Italic
+       Series          Bold
+       Color           black
+  EndFont
+
+  TextFont
+       Color           magenta
+       Shape           Italic
+  EndFont
+
+  Preamble
+  \usepackage{verbatim}
+  EndPreamble
+
+End
+
+# Address style definition
+Style Address
+  Margin               Static
+  LatexType            Command
+  LatexName            lyxaddress
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+
+  # define the macro \lyxaddress
+  Preamble
+  \newcommand{\lyxaddress}[1]{
+    \par {\raggedright #1 
+    \vspace{1.4em}
+    \noindent\par}
+  }
+  EndPreamble
+
+End
+
+# Right Address style
+Style Right_Address
+  Margin               Right_Address_Box
+  LatexType            Command
+  LatexName            lyxrightaddress
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Left
+
+  # define the macro \lyxrightaddress
+  Preamble
+  \newcommand{\lyxrightaddress}[1]{
+    \par {\raggedleft \begin{tabular}{l}\ignorespaces
+    #1
+    \end{tabular}
+    \vspace{1.4em}
+    \par}
+  }
+  EndPreamble
+  
+End
diff --git a/lib/layouts/manpage.layout b/lib/layouts/manpage.layout
new file mode 100644 (file)
index 0000000..b5e43e1
--- /dev/null
@@ -0,0 +1,213 @@
+#% Do not delete he line below; configure depends on this
+#  \DeclareLinuxDocClass[manpage]{SGML (LinuxDoc manpage)}
+# LinuxDoc manpage textclass definition file. 
+# Author : José Matos <jamatos@novalis.fc.up.pt>
+
+# General textclass parameters
+Columns                        1
+Sides                  1
+PageStyle              Plain
+MaxCounter             Counter_Subsection
+OutputType             linuxdoc
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            p
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block
+  LabelType            No_Label
+End
+
+# Quote style definition
+Style Quote
+  Margin               Static
+  LatexType            Environment
+  LatexName            quote
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block
+  LabelType            No_Label
+End
+
+# Subsection style definition
+Style Section
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            sect1
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_Subsection
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Large
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Size               Large
+  EndFont
+End
+
+# Subsubsection style definition
+Style SubSection
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            sect2
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.7
+  BottomSep            0.4
+  ParSep               0.4
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_SubSubSection
+
+  # standard font definition
+  Font 
+    Series             Bold
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
+# Enumerate style definition
+Style Enumerate
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            enum
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_EnumI
+End
+
+# Itemize style definition
+Style Itemize
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            itemize
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          *
+End
+
+# Description style definition
+Style Description
+  Margin               First_Dynamic
+  LatexType            Item_environment
+  LatexName            descrip
+  NextNoIndent         1
+  LeftMargin           MM
+  LabelSep             xxx
+  ParSkip              0.4
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Manual
+  LabelString          MM
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
+# Verbatim style definition
+Style Verbatim
+  Margin               Static
+  LatexType            environment
+  LatexName            verb
+  NextNoIndent         1
+  LeftMargin           MM
+  LabelSep             xx
+  ItemSep              0.2
+  Topsep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Family             Typewriter
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Family             Typewriter
+  EndFont
+End
+
+# Code style definition
+Style Code
+  Margin               Static
+  LatexType            Environment
+  LatexName            code
+  NextNoIndent         1
+  LeftMargin           MM
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block
+  LabelType            No_Label
+  FreeSpacing          1
+End
+
+# SGML style definition
+Style SGML
+  Margin                Static
+  LatexType             Paragraph
+  LatexName             p
+  NewLine               0
+  ParIndent             MM
+  ParSkip               0.4
+  ParSep                0.5
+  Align                 Center
+  AlignPossible         Block, Left, Right, Center
+  LabelType             No_Label
+  FreeSpacing           1
+
+  # standard font definition
+  Font 
+    Latex               Latex
+  EndFont
+End
diff --git a/lib/layouts/obsolete.inc b/lib/layouts/obsolete.inc
new file mode 100644 (file)
index 0000000..25f0dac
--- /dev/null
@@ -0,0 +1,12 @@
+# Standard textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by several developers.
+
+# This include files contains all obsolete layouts, kept for
+# historical reasons 
+
+# Title style definition
+Style LaTeX_Title
+  ObsoletedBy          Title
+End
diff --git a/lib/layouts/paper.layout b/lib/layouts/paper.layout
new file mode 100644 (file)
index 0000000..905014e
--- /dev/null
@@ -0,0 +1,166 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{article (paper)}
+# Paper textclass definition file. 
+# Created by Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr)
+
+
+# General textclass parameters
+MaxCounter             Counter_Section
+Columns                        1
+Sides                  1
+SecNumDepth            3
+TocDepth               3
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+# A few lists
+Input stdlists.inc
+
+# Standard sections.
+Input stdsections.inc
+
+### All the section headings now use sans serif
+Style Part
+  Align                        Left
+  AlignPossible                Left
+  TopSep                2
+  BottomSep             1.5
+
+  Font
+    Family             Sans
+    Series             Bold
+    Size               Largest
+  EndFont
+End
+
+Style Section
+  Font 
+    Family              Sans
+    Series              Bold
+    Size                Large
+  EndFont
+End
+
+Style Subsection
+  Font 
+    Family              Sans
+    Series              Bold
+    Size                Large
+  EndFont
+End
+
+Style Subsubsection
+  Font 
+    Family              Sans
+    Series              Bold
+    Size                Normal
+  EndFont
+End
+
+Style Paragraph
+  Font 
+    Family              Sans
+    Series              Bold
+    Size                Normal
+  EndFont
+End
+
+Style Subparagraph
+  Font 
+    Family              Sans
+    Size                Normal
+  EndFont
+End
+
+# Starred versions of the sectioning layouts.
+Input stdstarsections.inc
+
+# There are no chapters in a paper.
+NoStyle                        Chapter
+NoStyle                        Chapter*
+
+# Some standard layouts 
+Input stdstruct.inc
+Input lyxmacros.inc
+Input stdlayouts.inc
+Input obsolete.inc
+
+### The description environment also uses sans serif labels.
+Style Description
+  LabelFont 
+    Family              Sans
+    Series              Bold
+  EndFont
+End
+
+### The \maketitle stuff is by default left justified.
+Style Title
+  Align                 Left
+  AlignPossible         Left
+
+  Font 
+    Family              Sans
+    Series              Bold
+    Size                Largest
+  EndFont
+End
+
+Style Author
+  Align                 Left
+  AlignPossible         Left
+
+  Font 
+    Size                Larger
+    Family              Sans
+    Shape               Italic
+  EndFont
+End
+
+Style                  Abstract
+  Align                 Left
+  AlignPossible         Left
+
+  Font 
+    Size                Small
+    Family              Sans
+  EndFont
+End
+
+### A few new things defined only in the paper document class
+Style SubTitle
+  CopyStyle            Title
+  LatexName            subtitle
+
+  Font 
+    Family              Sans
+    Series              Medium
+    Size                Large
+  EndFont
+End
+
+Style Institution
+  CopyStyle            Title
+  LatexName            institution
+
+  Font 
+    Family              Sans
+    Series              Medium
+    Size                Normal
+  EndFont
+End
+
+Style Keywords
+  CopyStyle            Abstract
+  LatexName            keywords
+  LabelString          "Keywords:"
+End
diff --git a/lib/layouts/report.layout b/lib/layouts/report.layout
new file mode 100644 (file)
index 0000000..6928a69
--- /dev/null
@@ -0,0 +1,23 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{report}
+# Report textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by serveral developers.
+
+# Input general definitions
+Input stdclass.inc
+
+# a few changes to the bibliography
+Style Bibliography
+  TopSep               4
+  LabelString          Bibliography
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Size               Huge
+  EndFont
+End
+
+
diff --git a/lib/layouts/revtex.layout b/lib/layouts/revtex.layout
new file mode 100644 (file)
index 0000000..5041393
--- /dev/null
@@ -0,0 +1,173 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{article (REVTeX)}
+# RevTeX textclass definition file. Based on:
+# AMS-Article textclass definition file. Taken from initial LyX source code
+# and from the Article textclass definition file, following the AMS sample
+# paper "testmath.tex" of January, 1995
+# Author : David L. Johnson <dlj0@lehigh.edu> (AMS)
+#          Marc Mengel (RevTeX)
+#          Amir Karger (LyX v11.34 style modifications - using changes
+#                       made by Jean-Marc Lasgouttes to amsart.layout)
+
+# General textclass parameters
+Columns                        1
+Sides                  1
+PageStyle              Headers
+MaxCounter             Counter_Section
+
+# Default textclass options. The user may need to modify this.
+ClassOptions
+  Other                        "aps,manuscript"
+End
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+############### Sections.
+
+Input stdsections.inc
+
+# Redefine some of the section styles.
+
+# Section-numbered style definition
+Style Section
+  Align                        Center
+  AlignPossible                Block, Center, Left
+
+  # standard font definition
+  Font
+    Series             Medium
+    Shape              Smallcaps
+    Size               Large
+  EndFont
+End
+
+# Subsection-numbered style definition
+Style Subsection
+  # standard font definition
+  Font
+    Series             Bold
+    Size               Normal
+  EndFont
+End
+
+# Subsubsection-numbered style definition
+Style Subsubsection
+  # standard font definition
+  Font
+    Shape              Italic
+    Size               Normal
+  EndFont
+End
+
+# Paragraph-numbered style definition
+Style Paragraph
+  TopSep               0.7
+  ParSep               0.4
+
+  # standard font definition
+  Font
+    Shape              Italic
+    Size               Normal
+  EndFont
+End
+
+# then define the unumbered sections, based on the numbered ones.
+Input stdstarsections.inc
+
+# remove the layouts that do not make sense.
+NoStyle         Chapter
+NoStyle         Chapter*
+NoStyle                Subparagraph
+NoStyle                Subparagraph*
+
+########### LAYOUTS quotes, etc.
+Input stdlayouts.inc
+
+########## LISTS
+Input stdlists.inc
+
+################ STRUCTURE OF THE DOCUMENT
+Input stdstruct.inc
+
+# Title style definition
+Style Title
+  # standard font definition
+  Font
+    Series             Bold
+    Size               Large
+  EndFont
+End
+
+# Author style definition
+# Same as stdstruct.inc except the font
+Style Author
+  # standard font definition
+  Font
+    Size               Large
+    Shape              Smallcaps
+  EndFont
+End
+
+# Date style definition
+Style Date
+  LabelType            Static
+  LabelString          "Date: "
+
+  # standard font definition
+  LabelFont
+    Shape              Italic
+    Size               Large
+  EndFont
+End
+
+# Address style definition
+Style Address
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            address
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Center
+  AlignPossible                Block, Left, Right, Center
+  LabelType            Static
+  LabelString           "Address: "
+
+  LabelFont
+    Shape              Italic
+  EndFont
+End  
+
+# Abstract style definition
+Style Abstract 
+  ItemSep              0.2
+  ParSep               0.3
+
+  # standard font definition
+  Font
+    Size               Normal
+  EndFont
+
+  # label font definition
+  LabelFont
+    Size               Large
+  EndFont
+End 
+
+### Finally a few obsolete definitions for compatibility
+Input obsolete.inc
+
+Style REVTEX_Title
+  ObsoletedBy          Title
+End
diff --git a/lib/layouts/scrartcl.layout b/lib/layouts/scrartcl.layout
new file mode 100644 (file)
index 0000000..a802276
--- /dev/null
@@ -0,0 +1,38 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[scrartcl]{article (koma-script)}
+# KOMA scrartcl textclass definition file.
+# Bernd Rellermeyer <100.41728@germanynet.de>, 1998/7/11.
+
+# General textclass parameters
+Input scrclass.inc
+MaxCounter              Counter_Section
+NoStyle Chapter
+NoStyle Chapter*
+NoStyle Addchap
+NoStyle Addchap*
+SecNumDepth             3
+TocDepth                3
+
+# Modify Part
+Style Part
+  Align                 Left
+  AlignPossible         Left
+  TopSep                2
+  BottomSep             1.5
+
+  Font
+    Size                Larger
+  EndFont
+End
+
+# Modify Part*
+Style Part*
+  Align                 Left
+  AlignPossible         Left
+  TopSep                2
+  BottomSep             1.5
+
+  Font
+    Size                Larger
+  EndFont
+End
diff --git a/lib/layouts/scrbook.layout b/lib/layouts/scrbook.layout
new file mode 100644 (file)
index 0000000..b151219
--- /dev/null
@@ -0,0 +1,21 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[scrbook]{book (koma-script)}
+# KOMA scrbook textclass definition file.
+# Bernd Rellermeyer <100.41728@germanynet.de>, 1998/7/11.
+
+# General textclass parameters
+Input scrclass.inc
+Sides                   2
+PageStyle               Headings
+NoStyle Abstract
+        
+# Modify bibliography
+Style Bibliography
+  TopSep                4
+  LabelString           Bibliography
+
+  LabelFont 
+    Series              Bold
+    Size                Largest
+  EndFont
+End
diff --git a/lib/layouts/scrclass.inc b/lib/layouts/scrclass.inc
new file mode 100644 (file)
index 0000000..de2b376
--- /dev/null
@@ -0,0 +1,232 @@
+# KOMA script textclass definition file.
+# Base definitions for the KOMA script layouts.
+# Bernd Rellermeyer <100.41728@germanynet.de>, 1998/7/23.
+
+# General textclass parameters
+SecNumDepth             2
+TocDepth                2
+
+# Standard style definition
+Style Standard
+  LatexName             dummy
+  ParIndent             MM
+  ParSkip               0.4
+  AlignPossible         Block, Left, Right, Center
+End
+
+Input stdlists.inc
+
+# Modify Description
+Style Description
+  LabelFont
+    Family              Sans
+  EndFont
+End
+
+# Delete List
+NoStyle List
+
+# Labeling style definition
+Style Labeling
+  Margin               Manual
+  LatexType            List_Environment
+  LatexName             labeling
+  NextNoindent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Manual
+  LabelString          00.00.0000
+End
+
+Input stdsections.inc
+
+# Modify Part
+Style Part
+  Font
+    Family              Sans
+  EndFont
+End
+
+# Modify Chapter
+Style Chapter
+  LabelString           ""
+  Font
+    Family              Sans
+    Size                Largest
+  EndFont
+End
+
+# Modify Section
+Style Section
+  Font
+    Family              Sans
+  EndFont
+End
+
+# Modify Subsection
+Style Subsection
+  Font
+    Family              Sans
+  EndFont
+End
+
+# Modify Subsubsection
+Style Subsubsection
+  Font
+    Family              Sans
+  EndFont
+End
+
+# Modify Paragraph
+Style Paragraph
+  Font
+    Family              Sans
+  EndFont
+End
+
+# Modify Subparagraph
+Style Subparagraph
+  LeftMargin            ""
+  Font
+    Family              Sans
+  EndFont
+End
+
+Input stdstarsections.inc
+
+# Addchap Style Definition
+Style Addchap
+  CopyStyle             Chapter*
+  LatexName             addchap
+End
+
+# Addsec Style Definition
+Style Addsec
+  CopyStyle             Section*
+  LatexName             addsec
+End
+
+# Addchap* Style Definition
+Style Addchap*
+  CopyStyle             Chapter*
+  LatexName             addchap*
+End
+
+# Addsec* Style Definition
+Style Addsec*
+  CopyStyle             Section*
+  LatexName             addsec*
+End
+
+# Minisec style definition
+Style Minisec
+  LatexType             Command
+  LatexName             minisec
+  NeedProtect           1
+  NextNoIndent          1
+  LabelSep              xxx
+  ParSkip               0.4
+  TopSep                0.4
+  ParSep                0.4
+  AlignPossible         Block, Left
+
+  Font 
+    Family              Sans
+    Series              Bold
+  EndFont
+End
+
+Input stdstruct.inc
+
+# Modify Title
+Style Title
+  Font
+    Family              Sans
+    Series              Bold
+  EndFont
+End
+
+# Modify Author
+Style Author
+  Font
+    Size                Larger
+  EndFont
+End
+
+# Modify Date
+Style Date
+  Font
+    Size                Larger
+  EndFont
+End
+
+# Modify Abstract
+Style Abstract
+  LabelFont
+    Family              Sans
+  EndFont
+End
+
+# Modify Bibliography
+Style Bibliography
+  LabelFont
+    Family              Sans
+  EndFont
+End
+
+# Subject style definition
+Style Subject
+  CopyStyle             Author
+  LatexName             subject
+End
+
+# Publishers style definition
+Style Publishers
+  CopyStyle             Author
+  LatexName             publishers
+End
+
+# Dedication style definition
+Style Dedication
+  CopyStyle             Author
+  LatexName             dedication
+End
+
+# Titlehead style definition
+Style Titlehead
+  CopyStyle             Author
+  LatexName             titlehead
+  Align                 Left
+  AlignPossible         Left
+
+  Font 
+    Size                Normal
+  EndFont
+End
+
+# Uppertitleback style definition
+Style Uppertitleback
+  CopyStyle             Titlehead
+  LatexName             uppertitleback
+End
+
+# Lowertitleback style definition
+Style Lowertitleback
+  CopyStyle             Titlehead
+  LatexName             lowertitleback
+End
+
+# Extratitle style definition
+Style Extratitle
+  CopyStyle             Titlehead
+  LatexName             extratitle
+End
+
+Input stdlayouts.inc
+Input lyxmacros.inc
+Input scrmacros.inc
diff --git a/lib/layouts/scrlettr.layout b/lib/layouts/scrlettr.layout
new file mode 100644 (file)
index 0000000..b346925
--- /dev/null
@@ -0,0 +1,258 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[scrlettr]{letter (koma-script)}
+# KOMA scrlettr textclass definition file. 
+# Bernd Rellermeyer <100.41728@germanynet.de>, 1999/2/17.
+
+# Standard style definition
+Style Standard
+  LatexName             dummy
+  ParSep                0.4
+  AlignPossible         Block, Left, Right, Center
+End
+
+Input stdlists.inc
+
+# Modify Description
+Style Description
+  LabelFont
+    Family              Sans
+  EndFont
+End
+
+# Delete List
+NoStyle List
+
+# Labeling style definition
+Style Labeling
+  Margin               Manual
+  LatexType            List_Environment
+  LatexName             labeling
+  NextNoindent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Manual
+  LabelString          00.00.0000
+End
+
+Input stdlayouts.inc
+
+# Delete Caption
+NoStyle Caption
+
+# Letter style definition
+Style Letter
+  LatexType             Command
+  LatexName             letter
+  KeepEmpty             1
+  LabelSep              xx
+  TopSep                1.5
+  BottomSep             1.5
+  ParSep                1.5
+  Align                 Left
+  AlignPossible         Left
+  LabelType             Static
+  LabelString           "L"
+
+  LabelFont 
+    Series              Bold
+    Shape               Italic
+    Size                Small
+    Color               Blue
+  EndFont
+End
+
+# Opening style definition
+Style Opening
+  CopyStyle             Letter
+  LatexName             lyxopening
+  LabelString           "O"
+
+  Preamble
+    \newcommand{\lyxopening}[1]{\pagebreak\startbreaks\opening{#1}}
+  EndPreamble
+End
+
+# Closing style definition
+Style Closing
+  LatexType             Command
+  LatexName             closing
+  KeepEmpty             0
+  TopSep                1.5
+  BottomSep             1.5
+  ParSep                1.5
+  Align                 Left
+  AlignPossible         Left
+End
+
+# PS style definition
+Style PS
+  LatexType             Command
+  LatexName             ps
+  TopSep                0.4
+  BottomSep             0.4
+  ParSep                0.4
+  Align                 Left
+  AlignPossible         Left
+End
+
+# CC style definition
+Style CC
+  LatexType             Command
+  LatexName             cc
+  LeftMargin            xxxx::xx
+  LabelSep              xx
+  TopSep                0.4
+  BottomSep             0.4
+  ParSep                0.4
+  Align                 Left
+  AlignPossible         Left
+  LabelType             Static
+  LabelString           "cc:"
+End
+
+# Encl style definition
+Style Encl
+  CopyStyle             CC
+  LatexName             encl
+  LabelString           "encl:"
+End
+
+# Name style definition
+Style Name
+  LatexType             Command
+  LatexName             name
+  KeepEmpty             1
+  LeftMargin            xxxxxxxxxxxx::xx
+  LabelSep              xx
+  TopSep                0.4
+  BottomSep             0.4
+  ParSep                0.4
+  Align                 Left
+  AlignPossible         Left
+  LabelType             Static
+  LabelString           "Name:"
+
+  LabelFont 
+    Series              Bold
+    Shape               Italic
+    Color               Blue
+  EndFont
+End
+
+# Signature style definition
+Style Signature
+  CopyStyle             Name
+  LatexName             signature
+  LabelString           "Signature:"
+End
+
+# Address style definition
+Style Address
+  CopyStyle             Name
+  LatexName             address
+  LabelString           "Address:"
+End
+
+# Telephone style definition
+Style Telephone
+  CopyStyle             Name
+  LatexName             telephone
+  LabelString           "Telephone:"
+End
+
+# Place style definition
+Style Place
+  CopyStyle             Name
+  LatexName             place
+  LabelString           "Place:"
+End
+
+# Date style definition
+Style Date
+  CopyStyle             Name
+  LatexName             date
+  LabelString           "Date:"
+End
+
+# Backaddress style definition
+Style Backaddress
+  CopyStyle             Name
+  LatexName             backaddress
+  LabelString           "Backaddress:"
+End
+
+# Specialmail style definition
+Style Specialmail
+  CopyStyle             Name
+  LatexName             specialmail
+  LabelString           "Specialmail:"
+End
+
+# Location style definition
+Style Location
+  CopyStyle             Name
+  LatexName             location
+  LabelString           "Location:"
+End
+
+# Title style definition
+Style Title
+  CopyStyle             Name
+  LatexName             title
+  LabelString           "Title:"
+End
+
+# Subject style definition
+Style Subject
+  CopyStyle             Name
+  LatexName             subject
+  LabelString           "Subject:"
+End
+
+# Yourref style definition
+Style Yourref
+  CopyStyle             Name
+  LatexName             yourref
+  LabelString           "Your ref.:"
+
+  LabelFont 
+    Family              Sans
+    Series              Medium
+    Shape               Up
+    Size                Small
+    Color               None
+  EndFont
+End
+
+# Yourmail style definition
+Style Yourmail
+  CopyStyle             Yourref
+  LatexName             yourmail
+  LabelString           "Your letter of:"
+End
+
+# Myref style definition
+Style Myref
+  CopyStyle             Yourref
+  LatexName             myref
+  LabelString           "Our ref.:"
+End
+
+# Customer style definition
+Style Customer
+  CopyStyle             Yourref
+  LatexName             customer
+  LabelString           "Customer no.:"
+End
+
+# Invoice style definition
+Style Invoice
+  CopyStyle             Yourref
+  LatexName             invoice
+  LabelString           "Invoice no.:"
+End
diff --git a/lib/layouts/scrmacros.inc b/lib/layouts/scrmacros.inc
new file mode 100644 (file)
index 0000000..3a62961
--- /dev/null
@@ -0,0 +1,8 @@
+# KOMA script textclass definition file.
+# Extensions for the KOMA script classes.
+# Bernd Rellermeyer <100.41728@germanynet.de>, 1998/7/12.
+
+# List style definition
+Style List
+  ObsoletedBy           Labeling
+End
diff --git a/lib/layouts/scrreprt.layout b/lib/layouts/scrreprt.layout
new file mode 100644 (file)
index 0000000..fd955ae
--- /dev/null
@@ -0,0 +1,18 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass[scrreprt]{report (koma-script)}
+# KOMA scrreprt textclass definition file.
+# Bernd Rellermeyer <100.41728@germanynet.de>, 1998/7/11.
+
+# General textclass parameters
+Input scrclass.inc
+
+# Modify bibliography
+Style Bibliography
+  TopSep                4
+  LabelString           Bibliography
+
+  LabelFont 
+    Series              Bold
+    Size                Largest
+  EndFont
+End
diff --git a/lib/layouts/slides.layout b/lib/layouts/slides.layout
new file mode 100644 (file)
index 0000000..0e59c32
--- /dev/null
@@ -0,0 +1,304 @@
+#% Do not delete the line below; configure depends on this
+#  \DeclareLaTeXClass{slides (default)}
+# Slides textclass definition file.
+# Author : John Weiss <jpweiss@idsi.net>
+#
+# Based on the Article textclass "article.layout"
+#
+
+# General textclass parameters
+Columns        1
+Sides          1
+PageStyle      Plain
+MaxCounter     Counter_EnumI
+
+DefaultFont
+  Family       Sans
+  Series       Medium
+  Shape        Up
+  Size         Largest
+  Color        None
+EndFont
+
+ClassOptions
+  FontSize   |
+  Pagestyle  plain|headings|empty
+  Other      "dvips"
+End
+
+
+#####################################
+#
+#  Layout-specific preamble
+#
+#####################################
+
+
+Preamble
+  \newcounter{slidetype}
+  \setcounter{slidetype}{0}
+  \newif\ifLyXsNoCenter
+  \LyXsNoCenterfalse
+  \newcommand{\noslidecentering}{
+     \LyXsNoCentertrue%
+  }
+  \newcommand{\slidecentering}{
+     \LyXsNoCenterfalse%
+  }
+  \newcommand{\lyxendslide}[1]{
+     \ifLyXsNoCenter%
+          \vfill%
+     \fi%
+     \ifcase \value{slidetype}%
+          \or % no action for 0
+          \end{slide} \or%
+          \end{overlay} \or%
+          \end{note}%
+     \fi%
+     \setcounter{slidetype}{0}
+       \visible
+  }
+  \AtEndDocument{\lyxendslide{.}}
+EndPreamble
+
+
+############################
+#
+# Standard style definition
+# Always comes first.
+#
+############################
+
+Style Standard
+  Margin            Static
+  LatexType         Paragraph
+  LatexName         dummy
+  ParIndent         M
+  ParSkip           0.4
+  Align             Block
+  AlignPossible     Block, Left, Right, Center
+  LabelType         No_Label
+End
+
+
+
+##############################
+#
+# New Definitions for Slides
+#
+##############################
+
+# Slide style definition
+Style Slide
+  LatexType         Command
+  LatexName         lyxnewslide
+  KeepEmpty         1
+  Margin            Static
+  NextNoIndent      1
+  ParSkip           0.4
+  TopSep            1.0
+  BottomSep         1.0
+  ParSep            0.5
+  Align             Left
+  AlignPossible     Left
+  LabelType         Static
+  LabelBottomSep    0.5
+  LeftMargin        MMMMxMMMMxxxNewSlide
+  LabelString       "_____________________________NewSlide: "
+
+  Font 
+    Family          Typewriter
+    Series          Bold
+    Size            Large
+    Color           Blue
+  EndFont
+  LabelFont 
+    Family          Typewriter
+    Size            Large
+    Color           Blue
+  EndFont
+
+  Preamble
+  \newcommand{\lyxnewslide}[1]{
+     \lyxendslide{.}
+     \setcounter{slidetype}{1}
+     \begin{slide}
+  }
+  EndPreamble
+End
+
+# Overlay style definition
+Style Overlay
+  LatexType         Command
+  LatexName         lyxnewoverlay
+  KeepEmpty         1
+  Margin            Static
+  NextNoIndent      1
+  ParSkip           0.4
+  TopSep            1.0
+  BottomSep         1.0
+  ParSep            0.5
+  Align             Left
+  AlignPossible     Left
+  LabelType         Static
+  LabelBottomSep    0.5
+  LeftMargin        MMMMxNewOverlay
+  LabelString       "- - - - - - - - - - NewOverlay: "
+
+  Font 
+    Family          Typewriter
+    Series          Bold
+    Size            Large
+    Shape                      SmallCaps
+    Color           Magenta
+  EndFont
+  LabelFont 
+    Family          Typewriter
+    Series          Bold
+    Size            Large
+    Shape                      SmallCaps
+    Color           Magenta
+  EndFont
+
+  Preamble
+  \newcommand{\lyxnewoverlay}[1]{
+     \lyxendslide{.}
+     \setcounter{slidetype}{2}
+     \begin{overlay}
+  }
+  EndPreamble
+End
+
+## Note style definition
+Style Note
+  LatexType         Command
+  LatexName         lyxnewnote
+  KeepEmpty         1
+  Margin            Static
+  NextNoIndent      1
+  ParSkip           0.4
+  TopSep            1.0
+  BottomSep         1.0
+  ParSep            0.5
+  Align             Left
+  AlignPossible     Left
+  LabelType         Static
+  LabelBottomSep    0.5
+  LeftMargin        MMMMxMMxxNewNote
+  LabelString       "........................NewNote: "
+
+  Font 
+    Family          Typewriter
+    Series          Bold
+    Size            Large
+    Shape                      Italic
+    Color           Magenta
+  EndFont
+  LabelFont 
+    Family          Typewriter
+    Series          Bold
+    Size            Large
+    Shape                      Italic
+    Color           Magenta
+  EndFont
+
+  Preamble
+  \newcommand{\lyxnewnote}[1]{
+     \lyxendslide{.}
+     \setcounter{slidetype}{3}
+     \begin{note}
+  }
+  EndPreamble
+End
+
+## Invisible environment
+Style InvisibleText
+  LatexType         Command
+  LatexName         lyxinvisible
+  KeepEmpty         1
+  Margin            Static
+  Align             Center
+  AlignPossible     Center
+  LabelType         Static
+  LabelString       "<Invisible Text Follows>"
+
+  Font 
+    Family          Roman
+    Size            Normal
+    Color           Cyan
+  EndFont
+  LabelFont 
+    Family          Roman
+    Size            Normal
+    Color           Cyan
+  EndFont
+
+  Preamble
+  \newcommand{\lyxinvisible}[1]{
+     \invisible
+  }
+  EndPreamble
+End
+
+## Visible environment
+Style VisibleText
+  LatexType         Command
+  LatexName         lyxvisible
+  KeepEmpty         1
+  Margin            Static
+  Align             Center
+  AlignPossible     Center
+  LabelType         Static
+  LabelString       "<Visible Text Follows>"
+
+  Font 
+    Family          Roman
+    Size            Normal
+    Color           Green
+  EndFont
+  LabelFont 
+    Family          Roman
+    Size            Normal
+    Color           Green
+  EndFont
+
+  Preamble
+  \newcommand{\lyxvisible}[1]{
+     \visible
+  }
+  EndPreamble
+End
+
+########################################################################
+#
+# Definitions taken from article.layout.
+#
+#  Note that the "Section" family of environments is missing, as is
+#  "Title" "Bibliograpy" "LaTeX-Title" "Author" "Abstract" and "Date".
+#
+#  I may choose to reintroduce these and/or remove others at a later
+#  date.
+# 
+#  -jw 10/2/96
+#
+########################################################################
+
+Input stdlists.inc
+Input stdlayouts.inc
+Input lyxmacros.inc
+#Input obsolete.inc
+
+# Style definition for end of a slide
+Style End_All_Slides
+  ObsoletedBy       Comment
+End
+
+NoStyle Address
+NoStyle Right_Address
+
+
+
+
+#############
+#
+# End  File
diff --git a/lib/layouts/stdclass.inc b/lib/layouts/stdclass.inc
new file mode 100644 (file)
index 0000000..a5609ff
--- /dev/null
@@ -0,0 +1,43 @@
+# Standard textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by several developers.
+
+# This is a base layout which is designed to be included from other
+# ``standard'' layouts, like article and friends.
+
+# General textclass parameters
+Columns                        1
+Sides                  1
+SecNumDepth            2
+TocDepth               2
+
+# This is just to show how to declare the default font.
+# The defaults are exactly those shown here.
+DefaultFont
+  Family               Roman
+  Series               Medium
+  Shape                        Up
+  Size                 Normal
+  Color                        None
+EndFont
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+Input stdlists.inc
+Input stdsections.inc
+Input stdstarsections.inc
+Input stdstruct.inc
+Input lyxmacros.inc
+Input stdlayouts.inc
+Input obsolete.inc
diff --git a/lib/layouts/stdlayouts.inc b/lib/layouts/stdlayouts.inc
new file mode 100644 (file)
index 0000000..70f096e
--- /dev/null
@@ -0,0 +1,101 @@
+# Standard textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by several developers.
+
+# This include files contains various standard environments for lists,
+# quotations and such.
+
+# LaTeX style definition
+Style LaTeX
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  NewLine              0
+  ParIndent            MM
+  ParSkip              0.4
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+  FreeSpacing          1
+
+  # standard font definition
+  Font 
+    Latex              Latex
+  EndFont
+
+End
+
+# Quotation style definition
+Style Quotation
+  Margin               Static
+  LatexType            Environment
+  LatexName            quotation
+  NextNoIndent         1
+  LeftMargin           MMM
+  RightMargin          MMM
+  ParIndent            MM
+  ParSkip              0
+  ItemSep              0
+  TopSep               0.5
+  BottomSep            0.5
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+End
+
+# Quote style definition
+Style Quote
+  Margin               Static
+  LatexType            Environment
+  LatexName            quote
+  NextNoIndent         1
+  LeftMargin           MMM
+  RightMargin          MMM
+  TopSep               0.5
+  ParSep               0.5
+  BottomSep            0.5
+  Align                        Block
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+# Verse style definition
+Style Verse
+# LaTeX type is first dynamic because of LaTeX implementation.
+# In LyX this does not make sense.
+  LatexType            Environment
+  LatexName            verse
+  Margin               First_Dynamic
+  NextNoIndent         1
+  LeftMargin           MMMM
+  LabelIndent          MMMM
+  ParSkip              0.4
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            No_Label
+End
+
+# Caption style definition
+Style Caption
+  Margin               First_Dynamic
+  LatexType            Command
+  LatexName            caption
+  NeedProtect          1
+  LabelSep             xx
+  ParSkip              0.4
+  TopSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Sensitive
+  LabelString          Caption
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
diff --git a/lib/layouts/stdletter.inc b/lib/layouts/stdletter.inc
new file mode 100644 (file)
index 0000000..bf2f331
--- /dev/null
@@ -0,0 +1,195 @@
+# Letter textclass definition file. 
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Heavily modifed and enhanced by several developers.
+
+# General textclass parameters
+Columns                        1
+Sides                  1
+PageStyle              Empty
+
+# This is just to show how to declare the default font.
+# The defaults are exactly those shown here.
+DefaultFont
+  Family               Roman
+  Series               Medium
+  Shape                        Up
+  Size                 Normal
+  Color                        None
+EndFont
+
+# Standard style definition
+Style Standard
+  Margin               Static
+  LatexType            Paragraph
+  LatexName            dummy
+  ParIndent            MM
+  ParSkip              0.4
+  Align                Block
+  AlignPossible        Block, Left, Right, Center
+  LabelType            No_Label
+End
+
+# My Address style
+Style My_Address
+  Margin               Right_Address_Box
+  LatexType            Command
+  LatexName            address
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Left
+End
+
+# Send_To_Address style definition
+Style Send_To_Address
+  Margin               Static
+  LatexType            Command
+  LatexName            letter
+  KeepEmpty            1  
+  ParSkip              0.4
+  BottomSep            1.5
+  ParSep               1.5
+  Align                        Left
+  AlignPossible                Block, Left, Right, Center
+  LabelType            No_Label
+  Spacing               Other 1.5
+End
+
+# Opening style definition
+Style Opening
+  Margin               Static
+  LatexType            Command
+  LatexName            opening
+  KeepEmpty            1  
+  LeftMargin           Signature::xx
+  LabelSep             xx
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Opening:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+End
+
+# Signature style definition
+Style Signature
+  Margin               Static
+  LatexType            Command
+  LatexName            signature
+  LeftMargin           Signature::xx
+  LabelSep             xx
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Signature:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+End
+
+# Closing style definition
+Style Closing
+  Margin               Static
+  LatexType            Command
+  LatexName            closing
+  LeftMargin           Signature::xx
+  LabelSep             xx
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Closing:
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Shape              Italic
+    Latex              Latex
+  EndFont
+End
+
+# cc style definition
+Style cc
+  Margin               Static
+  LatexType            Command
+  LatexName            cc
+  LeftMargin           cc:xx
+  LabelSep             xx
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          cc:
+End
+
+# encl style definition
+Style encl
+  Margin               Static
+  LatexType            Command
+  LatexName            encl
+  LeftMargin           encl:xx
+  LabelSep             xx
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          encl:
+  Spacing               Other 1.5
+End
+
+# Telephone style definition
+Style Location
+  Margin               Static
+  LatexType            Command
+  LatexName            location
+  LeftMargin           Location:xx
+  LabelSep             xx
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Location:
+  Spacing               Other 1.5
+End
+
+# Telephone style definition
+Style Telephone
+  Margin               Static
+  LatexType            Command
+  LatexName            telephone
+  LeftMargin           Telephone:xx
+  LabelSep             xx
+  TopSep               0.4
+  BottomSep            0.4
+  ParSep               0.4
+  Align                Block
+  AlignPossible        Block, Left
+  LabelType            Static
+  LabelString          Telephone:
+  Spacing               Other 1.5
+End
+
diff --git a/lib/layouts/stdlists.inc b/lib/layouts/stdlists.inc
new file mode 100644 (file)
index 0000000..3ecaecb
--- /dev/null
@@ -0,0 +1,95 @@
+# Standard textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by several developers.
+
+# This include files contains various standard environments for lists.
+
+# Itemize style definition
+Style Itemize
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            itemize
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Static
+  LabelString          *
+End
+
+# Enumerate style definition
+Style Enumerate
+  Margin               Static
+  LatexType            Item_Environment
+  LatexName            enumerate
+  NextNoIndent         1
+  LeftMargin           MMN
+  LabelSep             xx
+  ParSkip              0.0
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_EnumI
+End
+
+# Description style definition
+Style Description
+  Margin               First_Dynamic
+  LatexType            Item_environment
+  LatexName            description
+  NextNoIndent         1
+  LeftMargin           MM
+  LabelSep             xxx
+  ParSkip              0.4
+  ItemSep              0.2
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.3
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Manual
+  LabelString          MM
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+  EndFont
+End
+
+# List style definition
+Style List
+  Margin               Manual
+  LatexType            List_Environment
+  LatexName            lyxlist
+  NextNoindent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Manual
+  LabelString          00.00.0000
+
+  #define the environment lyxlist
+  Preamble
+  \newenvironment{lyxlist}[1]
+    {\begin{list}{}
+      {\settowidth{\labelwidth}{#1}
+       \setlength{\leftmargin}{\labelwidth}
+       \addtolength{\leftmargin}{\labelsep}
+       \renewcommand{\makelabel}[1]{##1 \hfill}}}
+    {\end{list}}
+  EndPreamble
+
+End
diff --git a/lib/layouts/stdsections.inc b/lib/layouts/stdsections.inc
new file mode 100644 (file)
index 0000000..a1ead72
--- /dev/null
@@ -0,0 +1,180 @@
+# Standard textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by several developers.
+
+# This include files contains all numbered sectionning-related
+# commands that are useful for article-like document classes, but not
+# for letters.
+
+# Part style definition
+Style Part
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            part
+  NeedProtect          1
+  NextNoIndent          1
+  Labelsep             xxx
+  ParSkip               0.4
+  TopSep                4
+  BottomSep             4
+  ParSep                0.8
+  Align                        Center         
+  Alignpossible         Center
+  LabelType             Static
+  LabelString          "Part #"
+
+  # standard font definition
+  Font 
+    Series              Bold
+    Size                Huge
+  EndFont
+
+End
+  
+
+# Chapter style definition
+Style Chapter
+  Margin                Static
+  LatexType             Command
+  LatexName             chapter
+  NeedProtect          1
+  NextNoIndent          1
+  ParSkip               0.4
+  TopSep                4
+  BottomSep             0.8
+  ParSep                0.8
+  Align                 Block
+  AlignPossible         Block, Left
+  LabelType             Counter_Chapter
+  LabelString          "Chapter "
+  LabelStringAppendix   "Appendix "
+
+  # standard font definition
+  Font 
+    Series              Bold
+    Size                Huge
+  EndFont
+
+End
+
+# Section style definition
+Style Section
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            section
+  NeedProtect          1
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_Section
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Larger
+  EndFont
+
+End
+
+# Subsection style definition
+Style Subsection
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            subsection
+  NeedProtect          1
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_Subsection
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Large
+  EndFont
+
+End
+
+# Subsubsection style definition
+Style Subsubsection
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            subsubsection
+  NeedProtect          1
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.7
+  BottomSep            0.4
+  ParSep               0.4
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_SubSubSection
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Normal
+  EndFont
+
+End
+
+# Paragraph style definition
+Style Paragraph
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            paragraph
+  NeedProtect          1
+  NextNoIndent         1
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.4
+  BottomSep            0
+  ParSep               0.4
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_Paragraph
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Normal
+  EndFont
+
+End
+
+# Subparagraph style definition
+Style Subparagraph
+  Margin               Dynamic
+  LatexType            Command
+  LatexName            subparagraph
+  NeedProtect          1
+  NextNoIndent         0
+  LeftMargin           MM
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.4
+  BottomSep            0
+  ParSep               0.4
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Counter_SubParagraph
+
+  # standard font definition
+  Font 
+    Series             Bold
+    Size               Normal
+  EndFont
+
+End
diff --git a/lib/layouts/stdstarsections.inc b/lib/layouts/stdstarsections.inc
new file mode 100644 (file)
index 0000000..1456163
--- /dev/null
@@ -0,0 +1,66 @@
+# Standard textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by several developers.
+
+# This include files contains all non numbered versions of the
+# sectionning-related commands that are useful for article-like
+# document classes, but not for letters. It should be Input after
+# modying the style of the regular sectionning layouts.
+
+# Part* style definition
+Style Part*
+  CopyStyle            Part
+  Margin               Static
+  LatexName            part*
+  LabelType            No_Label
+End
+
+# Chapter* style definition
+Style Chapter*
+  CopyStyle            Chapter
+  Margin               Static
+  LatexName            chapter*
+  LabelType            No_Label
+End
+
+# Section* style definition
+Style Section*
+  CopyStyle            Section
+  Margin               Static
+  LatexName            section*
+  LabelType            No_Label
+End
+
+# Subsection* style definition
+Style Subsection*
+  CopyStyle            Subsection
+  Margin               Static
+  LatexName            subsection*
+  LabelType            No_Label
+End
+
+# Subsubsection* style definition
+Style Subsubsection*
+  CopyStyle            Subsubsection
+  Margin               Static
+  LatexName            subsubsection*
+  LabelType            No_Label
+End
+
+# Paragraph* style definition
+Style Paragraph*
+  CopyStyle            Paragraph
+  Margin               Static
+  LatexName            paragraph*
+  LabelType            No_Label
+End
+
+# Subparagraph* style definition
+Style Subparagraph*
+  CopyStyle            Subparagraph
+  Margin               Static
+  LatexName            subparagraph*
+  LabelType            No_Label
+End
+
diff --git a/lib/layouts/stdstruct.inc b/lib/layouts/stdstruct.inc
new file mode 100644 (file)
index 0000000..cd97f79
--- /dev/null
@@ -0,0 +1,130 @@
+# Standard textclass definition file. Taken from initial LyX source code
+# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de>
+# Transposed by Pascal André <andre@via.ecp.fr>
+# Heavily modifed and enhanced by several developers.
+
+# This include files contains all layouts that handle the structure of
+# a document, like titles and such.
+
+# Title style definition
+Style Title
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            title
+  ParSkip              0.4
+  ItemSep              0
+  TopSep               0
+  BottomSep            1
+  ParSep               1
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Size               Largest
+  EndFont
+
+End
+
+# Author style definition
+Style Author
+  Margin               Static
+  LatexType            Command
+  InTitle              1
+  LatexName            author
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               1.3
+  BottomSep            0.7
+  ParSep               0.7
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+  # standard font definition
+  Font 
+    Size               Large
+  EndFont
+
+End
+
+# Date style definition
+Style Date
+  Margin               Dynamic
+  LatexType            Command
+  InTitle              1
+  LatexName            date
+  LabelSep             xxx
+  ParSkip              0.4
+  TopSep               0.9
+  BottomSep            0.5
+  ParSep               1
+  Align                        Center
+  AlignPossible                Center
+  LabelType            No_Label
+
+
+  # standard font definition
+  Font 
+    Size               Large
+  EndFont
+
+End
+
+# Abstract style definition
+Style Abstract 
+  Margin               Static
+  LatexType            Environment
+  LatexName            abstract
+  NextNoIndent         1
+  LeftMargin           MMM
+  RightMargin          MMM
+  ParIndent            MM
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0
+  Align                        Block
+  AlignPossible                Block
+  LabelType            Centered_Top_Environment
+  LabelString          Abstract
+  LabelBottomSep    0.5
+
+  # standard font definition
+  Font 
+    Size               Small
+  EndFont
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Size               Large
+  EndFont
+End 
+
+# Bibliography style definition
+Style Bibliography
+  Margin               First_Dynamic
+  LatexType            Item_Environment
+  LatexName            thebibliography
+  NextNoIndent         1
+  LeftMargin           MM
+  ParSkip              0.4
+  ItemSep              0
+  TopSep               0.7
+  BottomSep            0.7
+  ParSep               0.5
+  Align                        Block
+  AlignPossible                Block, Left
+  LabelType            Bibliography
+  LabelString          References
+  LabelBottomSep    0.7
+
+  # label font definition
+  LabelFont 
+    Series             Bold
+    Size               Larger
+  EndFont
+End
diff --git a/lib/lyxrc.example b/lib/lyxrc.example
new file mode 100644 (file)
index 0000000..ac0ff7e
--- /dev/null
@@ -0,0 +1,537 @@
+### This file is part of
+### =====================================================
+###
+###           LyX, the High Level Word Processor
+###
+###  Copyright 1995-1997 Matthias Ettrich & the LyX Team
+###
+### =====================================================
+
+# The file lyxrc.example is a template to write your own lyxrc file. 
+# If you copy/rename it to lyxrc in the current directory, it will
+# give global options for all LyX users. It is also possible to copy
+# this file to $HOME/.lyx/lyxrc so that the configuration applies to a
+# particular user.
+#
+# Several of these settings have defaults that are auto-detected when you use
+# the menu option Options->Reconfigure.  You can see their value by looking at
+# the file $HOME/.lyx/lyxrc.defaults. Any setting in this file will override
+# the defaults.
+
+#
+# BIND SECTION ###########################################################
+#
+
+# Before defining your own key-bindings, select one of the available default
+# binding sets. These are resource files (like this one) that define a
+# large set of (keyboard) bindings. These files live in bind directory of
+# the LyX system directory and have in general the .bind suffix.
+# Currently, you can choose from the following flavors:
+#
+# cua.bind            for Windows-, Mac- and Motif-like bindings
+# emacs.bind          for Emacs-like bindings.
+#
+# The \bind_file command looks in the LyX bind directory for a file 
+# of the given name, but a full path can also be given. If you have
+# a bind file in your ~/.lyx/bind/ directory, it will be preferred
+# over a system wide bind file. Default is `cua'.
+
+#\bind_file cua
+#\bind_file emacs
+
+# Based on the default, you can now change part or all of it with the
+# \bind command. For example, when you want the delete key to do the
+# backspace action, uncomment the following line:
+#\bind "Delete" "delete-backward"
+
+# However, if you're not at all happy with the default bindings,
+# the most logical thing to do would be to use one of the system
+# wide bind files as a template and place your own version in
+# ~/.lyx/bind/mine_is_best.bind and change the above \bind_file 
+# to this instead:
+#\bind_file mine_is_best
+
+# Tip: Use "lyx -dbg 4" to survey how LyX interprets your keybindings.
+
+
+#
+# MISC SECTION ###########################################################
+#
+
+# Set to false if you don't want the current selection to be replaced
+# automatically by what you type. Default is true.
+#\auto_region_delete false
+
+# This is the time interval between auto-saves (in seconds).
+# 0 means no auto-save, default is 300 for five minutes.
+#\autosave 600
+
+# LyX asks for a second confirmation to exit if you exit with changed 
+# documents that you don't want to save.  You can turn this confirmation off 
+# (LyX will still ask to save changed documents) with the following line.
+# We recommend to keep the confirmation, though.
+#\exit_confirmation false
+
+# LyX continously displays names of last command executed, along with a list 
+# of defined short-cuts for it in the minibuffer.
+# It requires some horsepower to function, so you can turn it off, if LyX
+# seems slow to you, by uncommenting this line:
+#\display_shortcuts false
+
+# Define which program to use to view dvi files here.
+# You can include any options you need by "quoting" the entire command.
+# You don't need to specify the paper-size and orientation, which is done
+# automatically by LyX (hence, your viewer has to interpret the -paper
+# option like xdvi does)
+# The default is "xdvi".
+# Example: the next line would use xdvi and display with shrink 2:
+#\view_dvi_command "xdvi -s 2"
+# It can get more involved. Expert users might prefer something like:
+#\view_dvi_command "xdvi -s 2 -expert -geometry 1014x720+0+0 -keep -margins 1.5"
+
+# LyX assumes that the default papersize should be usletter.  If this is not
+# true for your site, use the next line to specify usletter, legal,
+# executive, a3, a4, a5, or b5 as the default papersize.
+#\default_papersize "a4"
+
+# Define which program to use to view postscript files here.
+# You can include any options you need by "quoting" the entire command
+# The default is auto-detected, but you might want to override it.
+# It is possible to get nice anti-aliased text (slower, but as nice as
+# xdvi) by using something like
+#\view_ps_command "ghostview -swap -sDEVICE=x11alpha"
+
+# Define which program to use to full screen view included postscript
+# pictures. You can not include any options. The default is auto-detected.
+#\view_pspic_command ghostview
+
+# Define which program to use to use as postscript interpreter for included
+# images.
+# You can not include any options. The default is "gs" if it can be found.
+# If you have a slow computer, you should consider turning off the WYSIWYG 
+# display of includes images, by using this command:
+#\ps_command ""
+
+# Define which program to use to run "chktex".
+# You should include options that turn different warnings on and off.
+# Default is "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38"
+# Check the ChkTeX documentation for info on what the flags mean.
+# Example: use this to ignore warnings about using "\ldots" instead of "..."
+#\chktex_command "chktex -n11 -n1 -n3 -n6 -n9 -22 -n25 -n30 -n38"
+
+# If you want to pass extra flags to the LinuxDoc sgml scripts, insert them
+# here. 
+# Example: the next line activates iso-latin1 support:
+#\sgml_extra_options -l
+
+# Keyboard Mapping. Use this to set the correct mapping file for your
+# keyboard, that is if you need one. You'll need one if you for instance
+# want to type German documents on an American keyboard. In that case,
+# uncomment these three lines:
+#\kbmap true
+#\kbmap_primary german
+#\kbmap_secondary american
+# The following keyboards are supported: american, czech, francais,
+# french, german, german-2, magyar, magyar-2, portuges, romanian,
+# slovak, slovene, transilvanian, turkish and turkish-f. Check
+# the lib/kbd directory if you want to write support for your language.
+# If you do, please submit it to lyx-devel@lists.lyx.org.
+
+# The Pause button is defined to be a three-way switch between primary 
+# keyboard, secondary keyboard, and no keyboard mapping with the
+# following command. It is useful if you want to write in a language
+# not directly supported by your keyboard and you have defined a
+# custom keyboard mapping above.
+#\bind "Pause" "keymap-toggle"
+
+# This starts the lyxserver. The pipes get an additional extension
+# '.in' and '.out'. Only for advanced users.
+# \serverpipe "/home/chb/.lyxpipe"
+
+# Which command to use to invoke the reLyX script to convert
+# LaTeX files to LyX files.  This setting is automatically
+# disabled if you do not have the appropriate Perl version
+# installed.  In that case, the File->Import LaTeX command
+# will be disabled.  If the reLyX command does work for you,
+# you can override that here by uncommenting this line:
+#\relyx_command "reLyX"
+#
+# If it doesn't work, you can disable the command by uncommenting
+# this line:
+#\relyx_command "none"
+
+#
+# SCREEN & FONTS SECTION #################################################
+#
+
+# DPI (dots per inch) of your monitor is auto-detected by LyX. If that goes 
+# wrong, you can override the setting here:
+#\screen_dpi 100
+
+# The zoom percentage for screen fonts.
+# A setting of 100% will make the fonts roughly the same size as on paper. 
+# However, since a screen is wider than a piece of paper, the default setting
+# is 150%.
+#\screen_zoom 100
+
+# LyX offers a faster method for drawing selected text if you uncomment the 
+# following line. The trick is to invert the color-information. This will 
+# switch between white and black and give almost random results for
+# other colors, so a white background is necessary. Any other settings of 
+# the background color will be ignored for this reason. This setting
+# is useful on monochrome screens and on slow systems. Fast selection
+# can cause cosmetic problems with a few broken X servers.
+#\fast_selection true
+
+# If you don't like the default background or selection color, you can
+# set your own here:
+#\background_color white
+#\background_color lightyellow
+#
+# For reference, the defaults are:
+#\background_color linen
+#\selection_color lightblue
+
+# LyX normally doesn't update the cursor position if you move the scrollbar.
+# If you scroll the cursor off the screen and then start typing LyX will
+# move you back to where the cursor was. If you'd prefer to always have the 
+# cursor on screen, bounded by the topmost and bottommost visible lines 
+# -- much like XEmacs for example -- then uncomment the next line.
+#\cursor_follows_scrollbar true
+
+# The screen fonts used to display the text while editing
+# The defaults are:
+#\screen_font_roman -*-times
+#\screen_font_sans -*-helvetica
+#\screen_font_typewriter -*-courier
+
+# For some, this font looks better:
+#\screen_font_roman -*-utopia
+
+# Allow the use of scalable screen fonts? Default is true.
+# If you choose "false", LyX will use the closest existing size for a match.
+# Use this if the scalable fonts look bad and you have many fixed size fonts.
+#\screen_font_scalable false
+
+# Tip: Run lyx as "lyx -dbg 512" to learn which fonts are used.
+
+# The norm for the screen fonts. The default is iso8859-1, which is
+# the same as what LaTeX calls latin1.
+#\screen_font_encoding iso8859-2
+
+# The font for popups. It is set to 
+#    <font_popup>-*-*-*-?-*-*-*-*-<font_encoding>.
+# The default  is:
+#\screen_font_popup -*-helvetica-medium-r
+
+# The font for menus (and groups titles in popups). It is set to 
+#    <font_menu>-*-*-*-?-*-*-*-*-<font_encoding>.
+# The default  is:
+#\screen_font_menu -*-helvetica-bold-r
+
+# The font sizes used for calculating the scaling of the screen fonts.
+# You should only have to change these if the fonts on your screen look bad,
+# in which case you can fine tune the font selection size by size. LyX selects
+# font size according to this table, the monitor DPI setting and the current
+# zoom setting. 
+# The format is:
+#\screen_font_sizes tiny smallest smaller small normal large larger largest huge huger
+#
+# This is the default in LyX (exactly what LaTeX does):
+#\screen_font_sizes 5.0 7.0 8.0 9.0 10.0 12.0 14.4 17.28 20.74 24.88
+
+#
+# TOOLBAR SECTION ########################################################
+#
+
+# Setup your favorite Toolbar here:
+# Only three commands are allowed inside the begin_toolbar and end_toolbar
+# directives: 
+#   \add <action> [<parameter>] adds an icon to the toolbar performing
+#          "<action> <parameter>"
+#      Examples:
+#      \add font-size small
+#      \add set-emph
+#
+#   \layouts adds the layouts combo-box to the toolbar
+#
+#   \separator adds some spacing to the toolbar
+#
+# These actions have icons (please give us more :-):
+#   buffer-open, buffer-close, buffer-print, buffer-write, font-emph,
+#   font-noun, font-free, footnote-insert, depth-next, copy, cut, paste,
+#   tex-mode, math-mode, marginpar-insert, figure-insert, table-insert,
+#   melt, lyx-quit, buffer-export ascii|latex, font-bold, font-sans, 
+#   buffer-typeset, buffer-view, buffer-view-ps, symbol_insert [parameter]
+#
+#  All other lyx commands will get a "unknown" icon.
+#
+# This is the default toolbar:
+#\begin_toolbar
+#\layouts
+#\add buffer-open
+#\add buffer-write
+#\add buffer-print
+#\separator
+#\add cut
+#\add copy
+#\add paste
+#\separator
+#\add font-emph
+#\add font-noun
+#\add font-free
+#\separator
+#\add footnote-insert
+#\add marginpar-insert
+#\add depth-next
+#\separator
+#\add tex-mode
+#\add math-mode
+#\separator
+#\add figure-insert
+#\add table-insert
+#\end_toolbar
+
+#
+# PRINTER SECTION ########################################################
+#
+
+# The default printer to print on. If none is specified, LyX will use
+# the environment variable PRINTER. If that fails, the default is empty.
+#\printer ""
+
+# If you have setup (as we recommend you to do) your print program
+# (e.g. dvips) to take advantage of the particularities of the various
+# printers you have access to, then you should set the following to
+# true. Then LyX will pass the name of the destination printer to your
+# print command.
+# The default is false, because we have unfortunately to cope with
+# people who refuse to take the time to configure their system.
+# Note that you will probably have to change \print_spool_command below.
+#\print_adapt_output true
+
+# If you don't use dvips, you may specify your favorite print program
+# here. See other options at the end of this section to adapt LyX to
+# your print program.
+#\print_command dvips
+
+# Extra options to pass to printing program after everything 
+# else, but before the filename of the DVI file to be printed.
+#\print_extra_options
+
+# When set, this printer option automatically prints to a file 
+# and then calls a separate print spooling program on that file
+# with the given name and arguments.
+# This is set by default to 'lp' or 'lpr', depending on what your
+# system uses. 
+# Set this to "" if you have set up dvips so that it sends
+# output to the right printer (remember to also use \print_adapt_output).
+#\print_spool_command ""
+
+# If you specify a printer name in the print dialog,
+# the following argument is prepended along with the printer name
+# after the spool command. The default is autodetected, along with
+# \print_spool_command determination. 
+#\print_spool_printerprefix ""
+
+# Other print related options
+
+# The following options are only of interest to people who do not
+# use dvips as print command. You may safely skip to the end of this
+# section otherwise.
+
+# These specify the options to pass to the printer program to select the
+# corresponding features. These default to the options used for the dvips
+# program. Look at the man page for your favorite print program to learn
+# which options to use.
+# Normally you don't need to change this unless you use something other
+# than dvips. 
+#\print_evenpage_flag -B
+#\print_oddpage_flag -A
+#\print_reverse_flag -r 
+#\print_landscape_flag "-t landscape"
+#\print_pagerange_flag -pp
+#\print_copies_flag -c
+#\print_collcopies_flag -C
+#\print_paper_flag -t
+#\print_paper_dimension_flag -T
+
+# Option to pass to the print program to print on a specific printer.
+#\print_to_printer -P
+
+# Option to pass to the print program to print to a file.
+#\print_to_file -o 
+
+# Extension of printer program output file. Usually .ps
+#\print_file_extension .ps
+
+# Sample configuration to use with dvilj4 for a HP Laserjet IV (or
+# better) printer [provided by Reuben Thomas <rrt@sc3d.org>]:
+#\print_command dvilj4
+#\print_extra_options -q
+#\print_evenpage_flag "-D2 -r"
+#\print_oddpage_flag -D1
+#\print_reverse_flag -r 
+#\print_landscape_flag -l
+#\print_pagerange_flag -p
+#\print_to_file -e
+#\print_file_extension .lj
+#\print_copies_flag -c
+#\print_collcopies_flag -c
+#\print_adapt_output false
+
+
+#
+# EXPORT SECTION ########################################################
+#
+
+
+# With this you can send a LyX-Document to a User-defined program. You
+# can specify by adding the tag $$FName where the filename should be
+# put on the defined command. if no $$FName is specified the file is
+# sent in standard input (stdin). There is no default command
+# specified.  Example: 
+#\custom_export_command "kghostview $$FName"
+
+# This is the default for the type of contents to be sent to the export
+# command: possible values are lyx, dvi, tex, ps and ascii.
+#\custom_export_format ps
+
+#
+# TEX SECTION  ###########################################################
+#
+
+# LyX tries to auto-detect which command to use to invoke LaTeX(2e).
+# If the auto-detection for some reasons fail, you can override it
+# here:
+#\latex_command latex2e
+
+# The font encoding used for the LaTeX2e fontenc package.
+# T1 is highly recommended for non-English languages. LyX uses T1 as a
+# default if you have the ec fonts installed on your system.
+#\font_encoding T1
+# Choose "default" if T1 doesn't work for you for some reason:
+#\font_encoding default
+
+
+#
+# FILE SECTION  ##########################################################
+#
+
+# The default path for your documents.
+# Default is $HOME
+#\document_path ~/Documents/
+
+# The file where the last-files information should be stored.
+# Default is ~/.lyx/lastfiles
+#\lastfiles ~/.lyx_lastfiles
+
+# Maximal number of lastfiles. Up to nine can appear in the file menu.
+# Default is four.
+#\num_lastfiles 9
+
+# Flag telling whether the lastfiles should be checked for existence.
+# Files that does not exist are left out of the lastfiles entries.
+# Default is true. If you use slow or removable media, such as networks
+# or floppy disks, you can speed up the starting time of LyX by disabling 
+# this feature.
+#\check_lastfiles false
+
+# The path that LyX will set when offering you to choose a template.
+# Default is (System LyX dir)/templates
+#\template_path ~/.lyx/templates
+
+# The path that LyX will use to put temporary TeX outputs.
+# Default is /tmp/<unique directory for each instance of LyX>
+# containing <unique subdirectory for each buffer>
+# If you set it, it will be /directory/<unique subdirectory for each buffer>
+# (unless set to /tmp).
+#\tempdir_path /usr/tmp
+
+# If you set this flag, LyX will always use a temporary directory
+# to put TeX outputs into. It is enabled by default.
+# This directory is deleted when you quit LyX.
+# You might want to avoid using a temporary directory in several
+# cases:
+# - LaTeX cannot find some files it needs;
+# - you have a large number of include files, and you get messages
+#   saying that some LaTeX buffers overflow.
+# Note that, even if tell LyX not to use a temporary directory, there
+# will be cases where it will be forced to: this happens for example
+# when typesetting a file in a read-only directory (documentation).
+#\use_tempdir false
+
+# This is the maximum line length of an exported ASCII file (LaTeX,
+# SGML or plain text). Default is 75. 
+#\ascii_linelen 80
+
+
+#
+# FAX SECTION #############################################################
+#
+
+# In the following, the <$$something> strings are substituted by
+# reasonable values by LyX. The 's are important as there may be spaces in 
+# the string. The default is auto-detected.
+# This one is what is used with HylaFax:
+#\fax_command "sendfax -n -h '$$Host' -c '$$Comment' -x '$$Enterprise' -d '$$Name'@'$$Phone' '$$FName'"
+# Use this for the efax-command:
+#\fax_command "faxsend '$$Phone' '$$FName'"
+
+# This is the name of your phone book. It's per default situated in ~/.lyx/,
+# but you can override that with an absolute path.
+#\phone_book phonebook
+
+# This is how to call an external FAX-program instead of the built-in.
+# You may also insert $$FName to reference the PostScript file.
+#\fax_program "myfaxprg '$$FName'"
+#\fax_program tkhylafax
+
+#
+# ASCII EXPORT SECTION ###################################################
+#
+
+# The following entry can be used to define an external program to
+# render tables in the ASCII output. If you specify "none", a simple 
+# internal routine is used. The default is auto-detected.
+# The following line will use groff and output using latin-1 encoding
+# (here $$FName is the input file and the output goes to stdout):
+#\ascii_roff_command "groff -t -Tlatin1 $$FName"
+
+#
+# SPELLCHECKER SECTION ####################################################
+#
+
+# What command runs the spell checker? Default is "ispell" if it is
+# installed, "none" otherwise.
+# If you have aspell (http://metalab.unc.edu/kevina/aspell/)
+# installed and configured, you might want to uncomment the line below.
+#\spell_command aspell
+
+# Consider run-together words, such as "notthe" for "not the", as legal 
+# words? Default is no. 
+#\accept_compound true
+
+# Specify an alternate language. The default is to use the language of 
+# document. Uncomment both to enable.
+#\use_alt_language true
+#\alternate_language dansk
+
+# Specify additional chars that can be part of a word.
+#\use_escape_chars true
+#\escape_chars "æøåÆØÅ"
+
+# Specify an alternate personal dictionary file. If the file name does not
+# begin with "/", $HOME is prefixed. The default is to search for a personal 
+# dictionary in both the current directory and $HOME, creating one in $HOME 
+# if none is found. The preferred name is constructed by appending ".ispell_" 
+# to the base name of the hash file. For example, if you use the English 
+# dictionary, your personal dictionary would be named ".ispell_english". 
+#\use_personal_dictionary true
+#\personal_dictionary .ispell_dansk
+
+# Specify whether to pass the -T input encoding option to ispell (only if the 
+# language is different than "default".) Enable this if you can't spellcheck
+# words with international letters in them. There have been reports that this
+# does not work with all dictionaries, so this is disabled by default.
+#\use_input_encoding true
diff --git a/lib/reLyX/.cvsignore b/lib/reLyX/.cvsignore
new file mode 100644 (file)
index 0000000..b9002fc
--- /dev/null
@@ -0,0 +1,2 @@
+reLyX
+noweb2lyx
diff --git a/lib/reLyX/BUGS b/lib/reLyX/BUGS
new file mode 100644 (file)
index 0000000..bf193ba
--- /dev/null
@@ -0,0 +1,94 @@
+There are still a couple large bugs (or features lacking) in reLyX, and new
+users (i.e., everyone) will need to know them in order to know how to avoid
+them. Those bugs are currently listed in the BUGS section of the reLyX man
+page. This file lists only the smaller bugs. This includes bugs which appear
+only rarely, and bugs which may be more common but do not affect the printed
+output.
+
+- In optional arguments, reLyX doesn't recognize a braced bracket "{]}"
+as being different from a regular bracket. You'll notice this problem if
+you've got a description environment item like "\item [foo {]} bar]". This
+is probably simplest to fix in the LyX file after you run reLyX. If
+you're very unlucky, it could mess up reLyX, in which case you'll have to
+remove it from the TeX file and put it in the LyX file after you translate it.
+
+- The underscore character '_', when used as an argument to an unknown command,
+may be copied incorrectly. \foo{a_b} will be copied in TeX mode as \foo{a_{b}}.
+'_' in math mode works fine.  It also works fine as the argument to known
+tokens, like \cite{foo_bar}, or even in translated arguments to untranslatable
+commands (see the Syntax Files section of the man page).  Also, if you have
+an underscore in a file name, you have to use the LaTeX style of \input. That
+is, write "\input{a_b}" instead of the old TeX style "\input a_b" (even though
+the latter is legal LaTeX). If \includegraphics can't be copied for various
+reasons (see the reLyX man page), underscore will break. Finally, 
+\label{foo_bar} in math mode will break.
+
+- Complicated nesting could confuse matters. Simple nesting, including nesting
+lists within lists, or having multiple paragraphs in one \item, should work.
+
+- ' { } { } ' is a legal LaTeX way to make five spaces. reLyX will translate
+it as '     ', which will show up in the LyX display, but not in the LaTeX
+document. Use '~~~~~' instead. Or don't use it because it's usually bad style.
+
+- \normalfont and \textnormal are not supported and may confuse the font stacks.
+You can change "\sffamily foo \normalfont" to "\sffamily foo \rmfamily" or
+even to "\textsf{foo}" to get around this problem.
+
+- font sizing commands *usually* work. reLyX may complain about "font
+confusion" when several font sizing commands are given in close proximity.
+Even if it complains, it may get the sizes right.
+
+- {\cal foo} is translated as {\mathcal{foo}}. The LyX file will display
+and extra set of (red) braces, but those braces won't show up in the dvi file
+or printed output.
+
+- CleanTeX adds {} around arguments if they're not there already. It breaks
+on a_b_c or a_\foo{bar}. Unfortunately, examples like that are pretty hard
+to parse, so all we can do is ask you to write clearer LaTeX (or contribute
+your coding skills to the reLyX project!). Sorry.
+
+- reLyX translates {\bf foo} to \textbf{foo}. However, it also does that in
+math mode. Write \mathbf{foo} explicitly in the LyX file instead.
+
+- period in \label or \ref will word-wrap. E.g. \ref{Dr. foo} will yield
+a reference to "Dr." in the LyX file, with an extra "foo}" printed as
+regular text
+
+- \end in a \newcommand, for example, will really confuse reLyX. Put the
+\newcommand in the preamble to avoid this problem.
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Changes in translation caused by features not (yet) in LyX:
+
+
+- Centering (or right or left justifying) works on full paragraphs. Therefore,
+if you have the following:
+    \begin{center}
+    centered text
+    \end{center}
+    NON-centered text without a blank line before it
+
+the reLyX'ed file will put your NON-centered text into a new paragraph. To
+closely approximate what you had, just select "No Indent" from the
+Layout->Paragraph popup for the new paragraph.
+
+- LyX support for tables isn't perfect. Some complicated column descriptions
+(e.g., multiple lines between columns or @{} column descriptions) will not
+be displayed WYSIWYG, but will be printed out correctly. These can be
+entered using the "Extra" popup in LyX's table popup. reLyX should
+translate these things correctly. In addition, '|' characters in the second
+argument to \multicolumn will be ignored. (For example, if you have:
+    \begin{tabular}{|cc|}
+    a & b \\
+    \multicolumn{2}{c}
+    \end{tabular}
+
+there will be lines to the right and left in all rows of the table.)
+Tables must be their own paragraphs, while LaTeX allows a table to appear
+in the middle of a paragraph. \clines will only work on multicolumns. However,
+most tables that aren't too complicated will be translated just fine. For very
+complicated tables, use a "skip" block, so that they will be copied in TeX
+mode.
+
+- Nested \input files will only work if you set \use_tempdir false in your
+lyxrc file.
diff --git a/lib/reLyX/BasicLyX.pm b/lib/reLyX/BasicLyX.pm
new file mode 100644 (file)
index 0000000..728a0bc
--- /dev/null
@@ -0,0 +1,1514 @@
+# This file is part of reLyX
+# Copyright (c) 1998-9 Amir Karger karger@post.harvard.edu
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+
+package BasicLyX;
+# This package includes subroutines to translate "clean" LaTeX to LyX.
+# It translates only "basic" stuff, which means it doesn't do class-specific
+#     things. (It uses the TeX parser Text::TeX)
+use strict;
+
+use RelyxTable; # Handle LaTeX tables
+use RelyxFigure; # Handle LaTeX figures
+use Verbatim;   # Copy stuff verbatim
+
+use vars qw($bibstyle_insert_string $bibstyle_file $Begin_Inset_Include);
+$bibstyle_insert_string = "%%%%%Insert bibliographystyle file here!";
+$bibstyle_file = "";
+$Begin_Inset_Include = "\\begin_inset Include";
+
+#################### PACKAGE-WIDE VARIABLES ###########################
+my $debug_on; # is debugging on?
+
+######
+#Next text starts a new paragraph?
+# $INP = 0 for plain text not starting a new paragraph
+# $INP = 1 for text starting a new paragraph, so that we write a new
+#    \layout command and renew any font changes for the new paragraph
+# Starts as 1 cuz if the first text in the document is plain text
+#    (not, e.g., in a \title command) it will start a new paragraph
+my $IsNewParagraph = 1;
+my $OldINP; #Save $IsNewParagraph during footnotes
+
+# Some layouts may have no actual text in them before the next layout
+# (e.g. slides). Pending Layout is set when we read a command that puts us
+# in a new layout. If we get some regular text to print out, set it to false.
+# But if we get to another layout command, first print out the command to
+# start the pending layout.
+my $PendingLayout = 0;
+
+# HACK to protect spaces within optional argument to \item
+my $protect_spaces = 0;
+
+# $MBD = 1 if we're in a list, but haven't seen an '\item' command
+#    In that case, we may need to start a nested "Standard" paragraph
+my $MayBeDeeper = 0;
+my $OldMBD; #Save $MBD during footnotes -- this should very rarely be necessary!
+
+# Stack to take care of environments like Enumerate, Quote
+# We need a separate stack for footnotes, which have separate layouts etc.
+# Therefore we use a reference to an array, not just an array
+my @LayoutStack = ("Standard"); #default if everything else pops off
+my $CurrentLayoutStack = \@LayoutStack;
+
+# Status of various font commands
+# Every font characteristic (family, series, etc.) needs a stack, because
+#    there may be nested font commands, like \textsf{blah \texttt{blah} blah}
+# CurrentFontStatus usually points to the main %FontStatus hash, but
+#     when we're in a footnote, it will point to a temporary hash
+my %FontStatus = (
+    '\emph' => ["default"],
+    '\family' => ["default"],
+    '\series' => ["default"],
+    '\shape' => ["default"],
+    '\bar' => ["default"],
+    '\size' => ["default"],
+    '\noun' => ["default"],
+);
+my $CurrentFontStatus = \%FontStatus;
+
+# Currently aligning paragraphs right, left, or center?
+my $CurrentAlignment = "";
+my $OldAlignment; # Save $AS during footnotes
+
+# Global variables for copying tex stuff
+my $tex_mode_string; # string we accumulate tex mode stuff in
+my @tex_mode_tokens; # stack of tokens which required calling copy_latex_known
+
+# LyX strings to start and end TeX mode
+my $start_tex_mode = "\n\\latex latex \n";
+my $end_tex_mode = "\n\\latex default \n";
+
+# String to write before each item
+my $item_preface = "";
+
+#############  INFORMATION ABOUT LATEX AND LYX   #############################
+# LyX translations of LaTeX font commands
+my %FontTransTable = (
+   # Font commands
+   '\emph' => "\n\\emph on \n",
+   '\underline' => "\n\\bar under \n",
+   '\underbar' => "\n\\bar under \n", # plain tex equivalent of underline?
+   '\textbf' => "\n\\series bold \n",
+   '\textmd' => "\n\\series medium \n",
+   '\textsf' => "\n\\family sans \n",
+   '\texttt' => "\n\\family typewriter \n",
+   '\textrm' => "\n\\family roman \n",
+   '\textsc' => "\n\\shape smallcaps \n",
+   '\textsl' => "\n\\shape slanted \n",
+   '\textit' => "\n\\shape italic \n",
+   '\textup' => "\n\\shape up \n",
+   '\noun' => "\n\\noun on \n", # LyX abstraction of smallcaps
+
+# Font size commands
+   '\tiny' => "\n\\size tiny \n",
+   '\scriptsize' => "\n\\size scriptsize \n",
+   '\footnotesize' => "\n\\size footnotesize \n",
+   '\small' => "\n\\size small \n",
+   '\normalsize' => "\n\\size default \n",
+   '\large' => "\n\\size large \n",
+   '\Large' => "\n\\size Large \n",
+   '\LARGE' => "\n\\size LARGE \n",
+   '\huge' => "\n\\size huge \n",
+   '\Huge' => "\n\\size Huge \n",
+   # This doesn't work yet!
+   #'\textnormal' => "\n\\series medium \n\\family roman \n\\shape up \n",
+);
+
+# Things LyX implements as "Floats"
+my %FloatTransTable = (
+   # Footnote, Margin note
+   '\footnote' => "\n\\begin_float footnote \n",
+   '\thanks' => "\n\\begin_float footnote \n", # thanks is same as footnote
+   '\marginpar' => "\n\\begin_float margin \n",
+);
+# Environments that LyX implements as "floats"
+my %FloatEnvTransTable = (
+    "table" => "\n\\begin_float tab \n",
+    "table*" => "\n\\begin_float wide-tab \n",
+    "figure" => "\n\\begin_float fig \n",
+    "figure*" => "\n\\begin_float wide-fig \n",
+);
+
+# Simple LaTeX tokens which are turned into small pieces of LyX text
+my %TextTokenTransTable = (
+    # LaTeX escaped characters
+    '\_' => '_',
+    '\%' => '%',
+    '\$' => '$',
+    '\&' => '&',
+    '\{' => '{',
+    '\}' => '}',
+    '\#' => '#',
+    '\~' => '~',
+    '\^' => '^',
+    # \i and \j are used in accents. LyX doesn't recognize them in plain
+    #    text. Hopefully, this isn't a problem.
+    '\i' => '\i',
+    '\j' => '\j',
+
+    # Misc simple LaTeX tokens
+    '~'      => "\n\\protected_separator \n",
+    '@'      => "@", # TeX.pm considers this a token, but it's not really
+    '\@'     => "\\SpecialChar \\@",
+    '\ldots' => "\n\\SpecialChar \\ldots\{\}\n",
+    '\-'     => "\\SpecialChar \\-\n",
+    '\LaTeX' => "LaTeX",
+    '\LaTeXe' => "LaTeX2e",
+    '\TeX'    => "TeX",
+    '\LyX'    => "LyX",
+    '\hfill'  => "\n\\hfill \n",
+    '\noindent'        => "\n\\noindent \n",
+    '\textbackslash'   => "\n\\backslash \n",
+    '\textgreater'     => ">",
+    '\textless'        => "<",
+    '\textbar'         => "|",
+);
+
+# LyX translations of some plain LaTeX text (TeX parser won't recognize it
+#     as a Token, so we need to translate the Text::TeX::Text token.)
+my %TextTransTable = (
+    # Double quotes
+    "``" => "\n\\begin_inset Quotes eld\n\\end_inset \n\n",
+    "''" => "\n\\begin_inset Quotes erd\n\\end_inset \n\n",
+
+    # Tokens that don't start with a backslash, so parser won't recognize them
+    # (LyX doesn't support them, so we just print them in TeX mode)
+    '?`' => "$start_tex_mode?`$end_tex_mode",
+    '!`' => "$start_tex_mode!`$end_tex_mode",
+);
+
+# Things that LyX translates as "LatexCommand"s
+# E.g., \ref{foo} ->'\begin_inset LatexCommand \ref{foo}\n\n\end_inset \n'
+# (Some take arguments, others don't)
+my @LatexCommands = map {"\\$_"} qw(ref pageref label cite bibliography
+                                index printindex tableofcontents
+                                 listofalgorithms listoftables listoffigures);
+my @IncludeCommands = map {"\\$_"} qw(input include);
+# Included postscript files
+# LyX 1.0 can't do \includegraphics*!
+my @GraphicsCommands = map {"\\$_"} qw(epsf epsffile epsfbox
+                                       psfig epsfig includegraphics);
+
+# Accents. Most of these take an argument -- the thing to accent
+# (\l and \L are handled as InsetLatexAccents, so they go here too)
+my $AccentTokens = "\\\\[`'^#~=.bcdHklLrtuv\"]";
+
+# Environments which describe justifying (converted to LyX \align commands)
+#    and the corresponding LyX commands
+my %AlignEnvironments = (
+    "center" => "\n\\align center \n",
+    "flushright" => "\n\\align right \n",
+    "flushleft" => "\n\\align left \n",
+);
+
+# Some environments' begin commands take an extra argument
+# Print string followed by arg for each item in the list, or ignore the arg ("")
+my %ExtraArgEnvironments = (
+    "thebibliography" => "",
+    "lyxlist" =>'\labelwidthstring ',
+    "labeling" =>'\labelwidthstring ', # koma script list
+);
+
+# Math environments are copied verbatim
+my $MathEnvironments = "(math|equation|displaymath|eqnarray(\\*)?)";
+# ListLayouts may have standard paragraphs nested inside them.
+my $ListLayouts = "Itemize|Enumerate|Description";
+
+#####################   PARSER INVOCATION   ##################################
+sub call_parser {
+# This subroutine calls the TeX parser & translator
+# Before it does that, it does lots of setup work to get ready for parsing.
+# Arg0 is the file to read (clean) LaTeX from
+# Arg1 is the file to write LyX to
+# Arg2 is the file to read layouts from (e.g., in LYX_DIR/layouts/foo.layout)
+
+    my ($InFileName, $OutFileName) = (shift,shift);
+
+# Before anything else, set the package-wide variables based on the
+#    user-given flags
+    # opt_d is set to 1 if '-d' option given, else (probably) undefined
+    $debug_on = (defined($main::opt_d) && $main::opt_d);
+
+    # Hash of tokens passed to the TeX parser
+    # Many values are $Text::TeX::Tokens{'\operatorname'}, which has
+    #    Type=>report_args and count=>1
+    # Note that we don't have to bother putting in tokens which will be simply
+    #    translated (e.g., from %TextTokenTransTable).
+    my %MyTokens = ( 
+       '{' => $Text::TeX::Tokens{'{'},
+       '}' => $Text::TeX::Tokens{'}'},
+       '\begin' => $Text::TeX::Tokens{'\begin'},
+       '\end' => $Text::TeX::Tokens{'\end'},
+
+       # Lots of other commands will be made by ReadCommands:Merge
+       # by reading the LaTeX syntax file
+
+       # Font sizing commands (local)
+       '\tiny' => {Type => 'local'},
+       '\small' => {Type => 'local'},
+       '\scriptsize' => {Type => 'local'},
+       '\footnotesize' => {Type => 'local'},
+       '\small' => {Type => 'local'},
+       '\normalsize' => {Type => 'local'},
+       '\large' => {Type => 'local'},
+       '\Large' => {Type => 'local'},
+       '\LARGE' => {Type => 'local'},
+       '\huge' => {Type => 'local'},
+       '\Huge' => {Type => 'local'},
+
+       # Tokens to ignore (which make a new paragraph)
+       # Just pretend they actually ARE new paragraph markers!
+       '\maketitle' => {'class' => 'Text::TeX::Paragraph'},
+    );
+    
+    # Now add to MyTokens all of the commands that were read from the
+    #    commands file by package ReadCommands
+    &ReadCommands::Merge(\%MyTokens);
+
+# Here's the actual subroutine. The above is all preparation
+    # Output LyX file
+    my $zzz = $debug_on ? " ($InFileName --> $OutFileName)\n" : "... ";
+    print STDERR "Translating$zzz";
+    open (OUTFILE,">$OutFileName");
+
+    # Open the file to turn into LyX.
+    my $infile = new Text::TeX::OpenFile $InFileName,
+       'defaultact' => \&basic_lyx,
+       'tokens' => \%MyTokens;
+
+    # Process what's left of the file (everything from \begin{document})
+    $infile->process;
+
+    # Last line of the LyX file
+    print OUTFILE "\n\\the_end\n";
+    close OUTFILE;
+    #warn "Done with basic translation\n";
+    return;
+} # end subroutine call_parser
+
+##########################   MAIN TRANSLATOR SUBROUTINE   #####################
+sub basic_lyx {
+# This subroutine is called by Text::TeX::process each time subroutine
+#     eat returns a value.
+# Argument 0 is the return value from subroutine eat
+# Argument 1 is the Text::TeX::OpenFile (namely, $TeXfile)
+    my $eaten = shift;
+    my $fileobject = shift;
+
+    # This handles most but maybe not all comments
+    # THere shouldn't be any if we've run CleanTeX.pl
+    print "Comment: ",$eaten->comment if defined $eaten->comment && $debug_on;
+
+    my $type = ref($eaten);
+    print "$type " if $debug_on;
+
+    # This loop is basically just a switch. However, making it a for
+    #    (1) makes $_ = $type (convenient)
+    #    (2) allows us to use things like next and last
+    TYPESW: for ($type) {
+
+        # some pre-case work
+        s/^Text::TeX:://o or die "unknown token?!";
+       my ($dummy, $tok);
+       my ($thistable);
+
+       # The parser puts whitespace before certain kinds of tokens along
+       # with that token. If that happens, save a space
+       my $pre_space = ""; # whitespace before a token
+       if (/BegArgsToken|^Token|::Group$/) {
+           $dummy = $eaten->exact_print;
+           # Only set prespace if we match something
+           #    We wouldn't want it to be more than one space, since that's
+           # illegal in LyX. Also, replace \t or \n with ' ' since they are
+           # ignored in LyX. Hopefully, this won't lead to anything worse
+           # than some lines with >80 chars
+           #    Finally, don't put a space at the beginning of a new paragraph
+           if (($dummy =~ /^\s+/) && !$IsNewParagraph) {
+               $pre_space = " ";
+           }
+       }
+
+        # Handle blank lines.
+        if (m/^Paragraph$/o) {
+           # $INP <>0 means We will need a new layout command
+           $IsNewParagraph = 1;
+
+           # $MBD means start a begin_deeper within list environments
+           #    unless there's an \item command
+           $MayBeDeeper = 1;
+
+            last TYPESW;
+        }
+
+       # If, e.g., there's just a comment in this token, don't do anything
+       # This actually shouldn't happen if CleanTeX has already removed them
+       last TYPESW if !defined $eaten->print;
+        
+        # Handle LaTeX tokens
+        if (/^Token$/o) {
+
+           my $name = $eaten->token_name; # name of the token, e.g., "\large"
+           print "'$name' " if $debug_on;
+
+           # Tokens which turn into a bit of LyX text
+           if (exists $TextTokenTransTable{$name}) {
+               &CheckForNewParagraph; #Start new paragraph if necessary
+
+               my $to_print = $TextTokenTransTable{$name};
+
+               # \@ has to be specially handled, because it depends on
+               # the character AFTER the \@
+               if ($name eq '\@') {
+                   my $next = $fileobject->eatGroup(1);
+                   my $ch="";
+                   $ch = $next->print or warn "\@ confused me!\n";
+                   if ($ch eq '.') {
+                       # Note: \@ CAN'T have pre_space before it
+                       print OUTFILE "$to_print$ch\n";
+                       print "followed by $ch" if $debug_on;
+                   } else {
+                      warn "LyX (or LaTeX) can't handle '$ch' after $name\n";
+                       print OUTFILE $ch;
+                   }
+
+               } else { # it's not \@
+                   # Print the translated text (include preceding whitespace)
+                   print OUTFILE "$pre_space$to_print";
+               } # end special handling for \@
+
+           # Handle tokens that LyX translates as a "LatexCommand" inset
+           } elsif (grep {$_ eq $name} @LatexCommands) {
+               &CheckForNewParagraph; #Start new paragraph if necessary
+               print OUTFILE "$pre_space\n\\begin_inset LatexCommand ",
+                              $name,
+                             "\n\n\\end_inset \n\n";
+
+           # Math -- copy verbatim until you're done
+           } elsif ($name eq '\(' || $name eq '\[') {
+               print "\nCopying math beginning with '$name'\n" if $debug_on;
+               # copy everything until end text
+               $dummy = &Verbatim::copy_verbatim($fileobject, $eaten);
+               $dummy = &fixmath($dummy); # convert '\sp' to '^', etc.
+
+               &CheckForNewParagraph; # math could be first thing in a par
+               print OUTFILE "$pre_space\n\\begin_inset Formula $name ";
+               print $dummy if $debug_on;
+               print OUTFILE $dummy;
+
+           } elsif ($name eq '\)' || $name eq '\]') {
+               # end math
+               print OUTFILE "$name\n\\end_inset \n\n";
+               print "\nDone copying math ending with '$name'" if $debug_on;
+
+           # Items in list environments
+           } elsif ($name eq '\item') {
+               
+               # What if we had a nested "Standard" paragraph?
+               # Then write \end_deeper to finish the standard layout
+               #     before we write the new \layout ListEnv command
+               if ($$CurrentLayoutStack[-1] eq "Standard") {
+                   pop (@$CurrentLayoutStack); # take "Standard" off the stack
+                   print OUTFILE "\n\\end_deeper ";
+                   print "\nCurrent Layout Stack: @$CurrentLayoutStack"
+                         if $debug_on;
+               } # end deeper if
+
+               # Upcoming text (the item) will be a new paragraph, 
+               #    requiring a new layout command based on whichever
+               #    kind of list environment we're in
+               $IsNewParagraph = 1;
+
+               # But since we had an \item command, DON'T nest a
+               #    deeper "Standard" paragraph in the list
+               $MayBeDeeper = 0;
+
+               # Check for an optional argument to \item
+               # If so, within the [] we need to protect spaces
+               # TODO: In fact, for description, if there's no [] or
+               # there's an empty [], then we need to write a ~, since LyX
+               # will otherwise make the next word the label
+               # If it's NOT a description & has a [] then we're stuck!
+               # They need to fix the bullets w/in lyx!
+               if (($dummy = $fileobject->lookAheadToken) &&
+                   ($dummy =~ /\s*\[/)) {
+                   $fileobject->eatFixedString('\['); # eat the [
+                   $protect_spaces = 1;
+               }
+
+               # Special lists (e.g. List layout) have to print something
+               # before each item. In that case, CFNP and print it
+               if ($item_preface) {
+                   &CheckForNewParagraph;
+                   print OUTFILE $item_preface;
+               }
+
+           # Font sizing commands
+           # (Other font commands are TT::BegArgsTokens because they take
+           #     arguments. Font sizing commands are 'local' TT::Tokens)
+           } elsif (exists $FontTransTable{$name}) {
+               my $command = $FontTransTable{$name}; #e.g., '\size large'
+
+               if (! $IsNewParagraph) {
+                   print OUTFILE "$pre_space$command";
+               } #otherwise, wait until we've printed the new paragraph command
+
+               # Store the current font change
+               ($dummy = $command) =~ s/\s*(\S+)\s+(\w+)\s*/$1/;
+               die "Font command error" if !exists $$CurrentFontStatus{$dummy};
+               push (@{$CurrentFontStatus->{$dummy}}, $2);
+               print "\nCurrent $dummy Stack: @{$CurrentFontStatus->{$dummy}}"
+                     if $debug_on;
+
+           # Table stuff
+           } elsif ($name eq '&') {
+               if ($thistable = &RelyxTable::in_table) {
+                   print OUTFILE "\n\\newline \n";
+                   $thistable->nextcol;
+               } else {warn "& is illegal outside a table!"}
+
+           } elsif ($name eq '\\\\' || $name eq '\\newline') {
+               &CheckForNewParagraph; # could be at beginning of par?
+                print OUTFILE "\n\\newline \n";
+
+               # If we're in a table, \\ means add a row to the table
+               # Note: if we're on the last row of the table, this extra
+               # row will get deleted later. This hack is necessary, because
+               # we don't know while reading when the last row is!
+               if ($thistable = &RelyxTable::in_table) {
+                   $thistable->addrow;
+               }
+
+           } elsif ($name eq '\hline') {
+               if ($thistable = &RelyxTable::in_table) {
+                   # hcline does hline if no arg is given
+                   $thistable->hcline;
+               } else {warn "\\hline is illegal outside a table!"}
+
+           # Figures
+
+           } elsif ($name =~ /^\\epsf[xy]size$/) {
+               # We need to eat '=' followed by EITHER more text OR
+               # one (or more?!) macros describing a TeX size
+               my $arg = $fileobject->eatMultiToken;
+               my $length = $arg->print;
+               $length =~ s/^\s*=\s*// or warn "weird '$name' command!";
+
+               # If there's no "cm" or other letters in $length, the next token
+               # ought to be something like \textwidth. Then it will be empty
+               # or just have numbers in it.
+               # This is bugprone. Hopefully not too many people use epsf!
+               if ($length =~ /^[\d.]*\s*$/) {
+                   my $next = $fileobject->eatMultiToken;
+                   $length .= $next->print;
+               }
+               $length =~ s/\s*$//; # may have \n at end
+
+               # If we can't parse the command, print it in tex mode
+               &RelyxFigure::parse_epsfsize($name, $length) or 
+                   &print_tex_mode("$name=$length");
+
+           # Miscellaneous...
+
+           } elsif ($name =~ /\\verb.*?/) {
+               my $dummy = &Verbatim::copy_verb($fileobject, $eaten);
+               print "\nCopying $name in TeX mode: " if $debug_on;
+               &print_tex_mode ($dummy);
+
+           # Otherwise it's an unknown token, which must be copied
+           #     in TeX mode, along with its arguments, if any
+           } else {
+               if (defined($eaten->relyx_args($fileobject))) {
+                  &copy_latex_known($eaten, $fileobject);
+               } else { # it's not in MyTokens
+                   &copy_latex_unknown($eaten, $fileobject);
+               }
+           }
+
+            last TYPESW;
+        }
+        
+       # Handle tokens that take arguments, like \section{},\section*{}
+       if (/^BegArgsToken$/) {
+           my $name = $eaten->token_name;
+           print "$name" if $debug_on;
+
+           # Handle things that LyX translates as a "LatexCommand" inset
+           if (grep {$_ eq $name} @LatexCommands) {
+               &CheckForNewParagraph; #Start new paragraph if necessary
+
+               print OUTFILE "$pre_space\n\\begin_inset LatexCommand ";
+
+               #    \bibliography gets handled as a LatexCommand inset, but
+               # it's a special case, cuz LyX syntax expects "\BibTeX"
+               # instead of "\bibliography" (I have no idea why), and because
+               # we have to print extra stuff
+               #    Because we might not have encountered the
+               # \bibliographystyle command yet, we write
+               # "insert bibstyle here", and replace that string
+               # with the actual bibliographystyle argument in
+               # LastLyX (i.e., the next pass through the file)
+               if ($name eq "\\bibliography") {
+                   print OUTFILE "\\BibTeX[", $bibstyle_insert_string, "]";
+               } else {
+                   print OUTFILE "$name";
+               }
+
+               # \cite takes an optional argument, e.g.
+               my $args = $eaten->relyx_args ($fileobject);
+               while ($args =~ s/^o//) {
+                   my $tok = $fileobject->eatOptionalArgument;
+                   my $dummy = $tok->exact_print;
+                   print OUTFILE $dummy;
+               }
+
+               print OUTFILE "\{";
+               last TYPESW; # skip to the end of the switch
+           }
+
+           if (grep {$_ eq $name} @IncludeCommands) {
+               &CheckForNewParagraph; #Start new paragraph if necessary
+               print OUTFILE "$pre_space\n$Begin_Inset_Include $name\{";
+               last TYPESW; # skip to the end of the switch
+           }
+
+           # This is to handle cases where _ is used, say, in a filename.
+           # When _ is used in math mode, it'll be copied by the math mode
+           # copying subs. Here we handle cases where it's used in non-math.
+           # Examples are filenames for & citation labels.
+           # (It's illegal to use it in regular LaTeX text.)
+           if ($name eq "_") {
+              print OUTFILE $eaten->exact_print;
+              last TYPESW;
+           }
+
+           # Sectioning and Title environments (using a LyX \layout command)
+           if (exists $ReadCommands::ToLayout->{$name}) {
+               &ConvertToLayout($name);
+               last TYPESW; #done translating
+
+           # Font characteristics
+           } elsif (exists $FontTransTable{$name}) {
+               my $dum2;
+               my $command = $FontTransTable{$name};
+               ($dummy, $dum2) = ($command =~ /(\S+)\s+(\w+)/);
+
+               # HACK so that "\emph{hi \emph{bye}}" yields unemph'ed "bye"
+               if ( ($dummy eq "\\emph") && 
+                    ($CurrentFontStatus->{$dummy}->[-1] eq "on")) {
+                      $dum2 = "default"; # "on" instead of default?
+                      $command =~ s/on/default/;
+               }
+
+               # If we're about to start a new paragraph, save writing
+               #    this command until *after* we write '\layout Standard'
+               if (! $IsNewParagraph) {
+                   print OUTFILE "$pre_space$command";
+               }
+
+               # Store the current font change
+               die "Font command error" if !exists $$CurrentFontStatus{$dummy};
+               push (@{$CurrentFontStatus->{$dummy}}, $dum2);
+
+
+           # Handle footnotes and margin notes
+           # Make a new font table & layout stack which will be local to the 
+           #    footnote or marginpar
+           } elsif (exists $FloatTransTable{$name}) {
+               my $command = $FloatTransTable{$name};
+
+               # Open the footnote
+               print OUTFILE "$pre_space$command";
+
+               # Make $CurrentFontStatus point to a new (anonymous) font table
+               $CurrentFontStatus =  {
+                   '\emph' => ["default"],
+                   '\family' => ["default"],
+                   '\series' => ["default"],
+                   '\shape' => ["default"],
+                   '\bar' => ["default"],
+                   '\size' => ["default"],
+                   '\noun' => ["default"],
+               };
+
+               # And make $CurrentLayoutStack point to a new (anon.) stack
+               $CurrentLayoutStack = ["Standard"];
+
+               # Store whether we're at the end of a paragraph or not
+               #    for when we get to end of footnote AND 
+               # Note that the footnote text will be starting a new paragraph
+               # Also store the current alignment (justification)
+               $OldINP = $IsNewParagraph; $OldMBD = $MayBeDeeper;
+               $OldAlignment = $CurrentAlignment;
+               $IsNewParagraph = 1;
+               $MayBeDeeper = 0; #can't be deeper at beginning of footnote
+               $CurrentAlignment = "";
+
+           # Accents
+           } elsif ($name =~ m/^$AccentTokens$/) {
+               &CheckForNewParagraph; # may be at the beginning of a par
+
+               print OUTFILE "$pre_space\n",'\i ',$name,'{'
+           
+           # Included Postscript Figures
+           # Currently, all postscript including commands take one
+           # required argument and 0 to 2 optional args, so we can
+           # clump them together in one else.
+           } elsif (grep {$_ eq $name} @GraphicsCommands) {
+               &CheckForNewParagraph; # may be at the beginning of a par
+               my $arg1 = $fileobject->eatOptionalArgument;
+               # arg2 is a token of an empty string for most commands
+               my $arg2 = $fileobject->eatOptionalArgument;
+               my $arg3 = $fileobject->eatRequiredArgument;
+               my $save = $arg1->exact_print . $arg2->exact_print .
+                          $arg3->exact_print;
+
+               # Parse and put figure into LyX file
+               # Print it verbatim if we didn't parse correctly
+               my $thisfig = new RelyxFigure::Figure;
+               if ($thisfig->parse_pscommand($name, $arg1, $arg2, $arg3)) {
+                   print OUTFILE $thisfig->print_info;
+               } else {
+                   &print_tex_mode($eaten->exact_print . $save);
+               }
+
+           # Tables
+
+           } elsif ($name eq "\\multicolumn") {
+               if ($thistable = &RelyxTable::in_table) {
+                   # the (simple text) first arg.
+                   $dummy = $fileobject->eatRequiredArgument->contents->print;
+                   my $group = $fileobject->eatRequiredArgument;
+                   $thistable->multicolumn($dummy, $group);
+               } else {warn "\\multicolumn is illegal outside a table!"}
+
+           } elsif ($name eq '\cline') {
+               if ($thistable = &RelyxTable::in_table) {
+                   # the (simple text) first arg.
+                   $dummy = $fileobject->eatRequiredArgument->contents->print;
+                   # sub hcline does cline if an arg is given
+                   $thistable->hcline($dummy);
+               } else {warn "\\cline is illegal outside a table!"}
+
+           # Bibliography
+
+           } elsif ($name eq '\bibliographystyle') {
+               $tok = $fileobject->eatRequiredArgument;
+               $bibstyle_file = "";
+               # There may be >1 token in the {}, e.g. "{a_b}" -> 3 tokens
+               my @toks = $tok->contents;
+               foreach $tok (@toks) {
+                   # kludge: CleanTeX adds {} after _
+                   $tok = $tok->contents if ref($tok) eq "Text::TeX::Group";
+                   $bibstyle_file .= $tok->print;
+               }
+               print "\nBibliography style file is $bibstyle_file"if $debug_on;
+
+           # LyX \bibitem actually looks just like LaTeX bibitem, except
+           # it's in a Bibliography par & there must be a space after the
+           # bibitem command. Note we need to explicitly print the braces...
+           } elsif ($name eq "\\bibitem") {
+               $IsNewParagraph=1; # \bibitem always starts new par. in LyX
+               &CheckForNewParagraph;
+
+               $tok = $fileobject->eatOptionalArgument;
+               print OUTFILE "$name ", $tok->exact_print, "{";
+
+           # Miscellaneous
+
+           # ensuremath -- copy verbatim until you're done
+           # but add \( and \)
+           # Note that we'll only get here if the command is NOT in math mode
+           } elsif ($name eq '\ensuremath') {
+               print "\nCopying math beginning with '$name'\n" if $debug_on;
+               my $tok = $fileobject->eatGroup; # eat math expression
+               my $dummy = $tok->exact_print;
+               $dummy =~ s/\{(.*)\}/$1/;
+               $dummy = &fixmath($dummy); # convert '\sp' to '^', etc.
+
+               &CheckForNewParagraph; # math could be first thing in a par
+               print OUTFILE "$pre_space\n\\begin_inset Formula \\( ";
+               print $dummy if $debug_on;
+               print OUTFILE $dummy;
+
+               # end math
+               print OUTFILE "\\)\n\\end_inset \n\n";
+               print "\nDone copying math" if $debug_on;
+
+           # Token in the ReadCommands command list that basic_lyx doesn't
+           #    know how to handle
+           } else {
+               &copy_latex_known($eaten,$fileobject);
+           } # end big if
+
+           # Exit the switch
+           last TYPESW;
+       }
+
+       # ArgTokens appear when we've used eatRequiredArgument
+       if (/^ArgToken$/) {
+           # If we're copying a recognized but untranslatable token in tex mode
+           my $tok = $tex_mode_tokens[-1] || 0;
+           if ($eaten->base_token == $tok) {
+               &copy_latex_known($eaten,$fileobject);
+           }
+        
+           last TYPESW;
+       }
+
+       if (/^EndArgsToken$/) {
+           # If we're copying a recognized but untranslatable token in tex mode
+           my $tok = $tex_mode_tokens[-1] || 0;
+           if ($eaten->base_token eq $tok) {
+               &copy_latex_known($eaten,$fileobject);
+               last TYPESW;
+           }
+
+           my $name = $eaten->token_name;
+           print "$name" if $debug_on;
+
+           # Handle things that LyX translates as a "LatexCommand" inset
+           # or "Include" insets
+           if (grep {$_ eq $name} @LatexCommands, @IncludeCommands) {
+               print OUTFILE "\}\n\n\\end_inset \n\n";
+
+           } elsif (exists $ReadCommands::ToLayout->{$name}) {
+               &EndLayout($name);
+
+           # Font characteristics
+           # Pop the current FontStatus stack for a given characteristic
+           #    and give the new command (e.g., \emph default)
+           } elsif (exists $FontTransTable{$name}) {
+               my $command = $FontTransTable{$name};
+               ($dummy) = ($command =~ /(\S+)\s+\w+/);
+               pop @{$CurrentFontStatus->{$dummy}};
+               $command = "\n$dummy $CurrentFontStatus->{$dummy}->[-1] \n";
+               print OUTFILE "$command";
+
+           # Footnotes and marginpars
+           } elsif (exists $FloatTransTable{$name}) {
+               print OUTFILE "\n\\end_float \n\n";
+
+               # Reset the layout stack and font status table pointers to
+               #    point to the global stack/table again, instead of the
+               #    footnote-specific stack/table
+               $CurrentFontStatus = \%FontStatus;
+               $CurrentLayoutStack = \@LayoutStack;
+
+               # We need to reissue any font commands (but not layouts)
+               foreach $dummy (keys %$CurrentFontStatus) {
+                   if ($CurrentFontStatus->{$dummy}->[-1] ne "default") {
+                       print OUTFILE $FontTransTable{$dummy};
+                   }
+               }
+
+               # Same paragraph status as we had before the footnote started
+               $IsNewParagraph = $OldINP; $MayBeDeeper = $OldMBD;
+               $CurrentAlignment = $OldAlignment;
+
+           } elsif ($name =~ m/^$AccentTokens$/) {
+               print OUTFILE "}\n";
+           
+           } elsif ($name eq "\\bibitem") {
+               print OUTFILE "}\n";
+           } # End if on $name
+
+           # Exit main switch
+           last TYPESW;
+       } # end if EndArgsToken
+
+       # Handle END of scope of local commands like \large
+       if (/^EndLocal$/) {
+           my $name = $eaten->token_name; #cmd we're ending, e.g.,\large
+           print $name if $debug_on;
+
+           if (exists $FontTransTable{$name}) {
+               my $command = $FontTransTable{$name};
+               ($dummy = $command) =~ s/\s*(\S*)\s+(\w+)\s*/$1/; #e.g., '\size'
+               die "Font command error" if !exists $$CurrentFontStatus{$dummy};
+               # TT::OF->check_presynthetic returns local commands FIFO!
+               # So pop font stack, but warn if we pop the wrong thing
+               warn " font confusion?" if
+                          pop @{$CurrentFontStatus->{$dummy}} ne $2;
+               print "\nCurrent $dummy Stack: @{$CurrentFontStatus->{$dummy}}"
+                     if $debug_on;
+               my $newfont = $CurrentFontStatus->{$dummy}->[-1];
+               $command = "\n$dummy $newfont\n";
+               print OUTFILE "$command";
+
+           } else {
+               warn "Unknown EndLocal token!\n";
+           }
+
+           last TYPESW;
+       }
+
+       # We don't print { or }, but we make sure that the spacing is correct
+       # Handle '{'
+       if (/^Begin::Group$/) {
+           print OUTFILE "$pre_space";
+           last TYPESW;
+       }
+
+       # Handle '{'
+       if (/^End::Group$/) {
+           print OUTFILE "$pre_space";
+           last TYPESW;
+       }
+
+        # Handle \begin{foo}
+        if (/^Begin::Group::Args$/) {
+           print $eaten->print," " if $debug_on; # the string "\begin{foo}"
+           my $env = $eaten->environment;
+           
+           # Any environment found in the layouts files
+           if (exists $ReadCommands::ToLayout->{$env}) {
+               &ConvertToLayout($env);
+
+               # Some environments have an extra argument. In that case,
+               # print the \layout command (cuz these environments always
+               # start new pars). Then either print the extra arg or
+               # ignore it (depending on the environment).
+               if (exists $ExtraArgEnvironments{$env}) {
+                   # Should be just one token in the arg.
+                   my $arg = $fileobject->eatBalanced->contents->print;
+
+                   if ($ExtraArgEnvironments{$env}) { #print it
+                       print "\nArgument $arg to $env environment"
+                                                               if $debug_on;
+                       $item_preface = $ExtraArgEnvironments{$env} . $arg."\n";
+
+                   } else { #ignore it
+                       print "\nIgnoring argument '$arg' to $env environment"
+                                                               if $debug_on;
+                   }
+               } # end if for reading extra args to \begin command
+
+           # Math environments
+           } elsif ($env =~ /^$MathEnvironments$/o) {
+               &CheckForNewParagraph; # may be beginning of paragraph
+               my $begin_text = $eaten->print;
+               print "\nCopying math beginning with '$begin_text'\n"
+                                                             if $debug_on;
+               print OUTFILE "\n\\begin_inset Formula $begin_text ";
+               $dummy = &Verbatim::copy_verbatim($fileobject, $eaten);
+               $dummy = &fixmath($dummy); # convert '\sp' to '^', etc.
+               print $dummy if $debug_on;
+               print OUTFILE $dummy;
+
+           # Alignment environments
+           } elsif (exists $AlignEnvironments{$env}) {
+               # Set it to the command which creates this alignment
+               $CurrentAlignment = $AlignEnvironments{$env};
+               ($dummy) = ($CurrentAlignment =~ /\S+\s+(\w+)/);
+               print "\nNow $dummy-aligning text " if $debug_on;
+
+               # alignment environments automatically start a new paragraph
+               $IsNewParagraph = 1;
+
+           # Environments lyx translates to floats
+           } elsif (exists $FloatEnvTransTable{$env}) {
+               $tok = $fileobject->eatOptionalArgument;
+               if ($tok && defined ($dummy = $tok->print) && $dummy) {
+                   print "\nIgnoring float placement '$dummy'" if $debug_on;
+               }
+               my $command = $FloatEnvTransTable{$env};
+
+               # Open the footnote
+               print OUTFILE "$command";
+
+           # table
+           } elsif ($env =~ /^tabular$/) { # don't allow tabular* or ctabular
+               # Table must start a new paragraph
+               $IsNewParagraph = 1; $MayBeDeeper = 1;
+               # We want to print table stuff *after* a \layout Standard
+               &CheckForNewParagraph;
+
+               # Since table info needs to come *before* the table content,
+               #    put a line in the output file saying that the *next*
+               #    reLyX pass needs to put the table info there
+               print OUTFILE "\n$RelyxTable::TableBeginString\n";
+
+               # Read and ignore an optional argument [t] or [b]
+               $tok = $fileobject->eatOptionalArgument;
+               if ($tok && defined ($dummy = $tok->print) && $dummy) {
+                   print "\nIgnoring positioning arg '$dummy'" if $debug_on;
+               }
+
+               # Read the argument into a TT::Group
+               #   (that group may contain groups, e.g. for {clp{10cm}}
+               $tok = $fileobject->eatGroup;
+               new RelyxTable::Table $tok;
+
+           # \begin document
+           } elsif ($env eq "document") {
+               # do nothing
+               #print "\nStarting to translate actual document" if $debug_on;
+
+           # Special environments to copy as regular text (-r option).
+           # Do this by copying the \begin & \end command in TeX mode
+           # (\Q\E around $env allows *'s in environment names!)
+           } elsif (grep /^\Q$env\E$/, @ReadCommands::regular_env) {
+               print "\nCopying $env environment as regular text\n"
+                                                             if $debug_on;
+               $dummy = $eaten->print; # \begin{env}, ignore initial whitespace
+               &print_tex_mode($dummy);
+
+           # otherwise, it's an unknown environment
+           # In that case, copy everything up to the \end{env}
+           #    Save stuff in global tex_mode_string so we can print it
+           # when we read & handle the \end{env}
+           } else {
+
+               print "\nUnknown environment $env" if $debug_on;
+               $tex_mode_string = "";
+               # print "\begin{env}
+               # For reLyXskip env, don't print the \begin & \end commands!
+               $tex_mode_string .= $eaten->exact_print 
+                               unless $env eq "reLyXskip";
+               $tex_mode_string .=&Verbatim::copy_verbatim($fileobject,$eaten);
+           }
+
+            last TYPESW;
+        }
+        
+        # Handle \end{foo}
+        if (/^End::Group::Args$/) {
+           print $eaten->print," " if $debug_on; # the string "\end{foo}"
+           my $env = $eaten->environment;
+
+           # End of list or quote/verse environment
+           # OR special environment given with -t option
+           if (exists $ReadCommands::ToLayout->{$env}) {
+               &EndLayout($env);
+               $item_preface = ""; # reset when at end of List env.
+
+           # End of math environments
+           } elsif ($env =~ /^$MathEnvironments$/o) {
+               print OUTFILE "\\end{$env}\n\\end_inset \n\n";
+               print "\nDone copying math environment '$env'" if $debug_on;
+
+           } elsif (exists $AlignEnvironments{$env}) {
+               # Back to block alignment
+               $CurrentAlignment = "";
+               print "\nBack to block alignment" if $debug_on;
+
+               # assume that \end should end a paragraph
+               # This isn't correct LaTeX, but LyX can't align part of a par
+               $IsNewParagraph = 1;
+
+           # Environments lyx translates to floats
+           } elsif (exists $FloatEnvTransTable{$env}) {
+               print OUTFILE "\n\\end_float \n\n";
+
+           # table
+           } elsif ($env =~ /tabular$/) { # don't allow tabular*
+               if ($thistable = &RelyxTable::in_table) {
+                   $thistable->done_reading;
+                   print OUTFILE "\n$RelyxTable::TableEndString\n";
+               } else {warn "found \\end{tabular} when not in table!"}
+
+               # Anything after a table will be a new paragraph
+               $IsNewParagraph = 1; $MayBeDeeper = 1;
+
+           } elsif ($env eq "document") {
+               print "\nDone with document!" if $debug_on;
+
+           # "regular" environment given with -r option
+           } elsif (grep /^\Q$env\E$/, @ReadCommands::regular_env) {
+               $dummy = $eaten->print; # \end{env}, ignore initial whitespace
+               &print_tex_mode($dummy);
+
+               # Next stuff will be new env.
+               $IsNewParagraph = 1;
+
+           # End of unknown environments. We're already in TeX mode
+           } else {
+               # Add \end{env} (including initial whitespace) to string
+               # For reLyXskip environment, don't print \begin & \end commands!
+               $tex_mode_string .= $eaten->exact_print
+                                      unless $env eq "reLyXskip";
+               # Now print it
+               &print_tex_mode($tex_mode_string);
+               print "Done copying unknown environment '$env'" if $debug_on;
+           }
+
+            last TYPESW;
+
+        }
+
+       # Note for text handling: we have to do lots of stuff to handle
+       # spaces in (as close as possible to) the same way that LaTeX does
+       #    LaTeX considers all whitespace to be the same, so basically, we
+       # convert each clump of whitespace to one space. Unfortunately, there
+       # are special cases, like whitespace at the beginning/end of a par,
+       # which we have to get rid of to avoid extra spaces in the LyX display.
+       #    \n at the end of a paragraph must be considered like a space,
+       # because the next line might begin with a token like \LyX. But
+       # if the next line starts with \begin, say, then an extra space will be
+       # generated in the LyX file. Oh well. It doesn't affect the dvi file.
+       if (/^Text$/) {
+           my $outstr = $eaten->print; # the actual text
+
+           # don't bother printing whitespace
+           #    Note: this avoids the problem of extra whitespace generating
+           # extra Text::TeX::Paragraphs, which would generate extra
+           # \layout commands
+           last TYPESW if $outstr =~ /^\s+$/;
+
+           # whitespace at beginning of a paragraph is meaningless
+           # e.g. \begin{foo}\n hello \end{foo} shouldn't print the \n
+           # (Note: check IsNewParagraph BEFORE calling &CFNP, which zeros it)
+           my $replace = $IsNewParagraph ? "" : " ";
+           $outstr =~ s/^\s+/$replace/;
+
+           # Only write '\layout Standard' once per paragraph
+           &CheckForNewParagraph;
+
+           # \n\n signals end of paragraph, so get rid of it (and any space
+           # before it)
+           $outstr =~ s/\s*\n\n$//;
+
+           # Print the LaTeX text to STDOUT
+           print "'$outstr'" if $debug_on;
+
+           # LyX *ignores* \n and \t, whereas LaTeX considers them just
+           # like a space.
+           #    Also, many spaces are equivalent to one space in LaTeX
+           # (But LyX misleadingly displays them on screen, so get rid of them)
+           $outstr =~ s/\s+/ /g;
+
+           # protect spaces in an optional argument if necessary
+           # Put a SPACE after the argument for List, Description layouts
+           if ($protect_spaces) {
+               $dummy = $TextTokenTransTable{'~'};
+
+               # This will not handle brackets in braces!
+               if ($outstr =~ /\]/) { # protect spaces only *until* the bracket
+                   my $tempstr = $`;
+                   my $tempstr2 = $';
+                   # Note that any \t's have been changed to space already
+                   $tempstr =~ s/ /$dummy/g;
+
+                   # Print 1 space after the argument (which finished with ])
+                   # Don't print 2 (i.e. remove leading space from $tempstr2)
+                   # don't print the bracket
+                   $tempstr2 =~ s/^ //;
+                   $outstr = "$tempstr $tempstr2";
+                   $protect_spaces = 0; # Done with optional argument
+               } else { # protect all spaces, since we're inside brackets
+                   $outstr =~ s/ /$dummy/g;
+               }
+           } # end special stuff for protected spaces
+
+           # Translate any LaTeX text that requires special LyX handling
+           foreach $dummy (keys %TextTransTable) {
+               $outstr =~ s/\Q$dummy\E/$TextTransTable{$dummy}/g;
+           }
+
+           # "pretty-print" the string. It's not perfect, since there may
+           # be text in the OUTFILE before $outstr, but it will keep from
+           # having REALLY long lines.
+           # Try to use approximately the same word-wrapping as LyX does:
+           # - before space after a period, except at end of string
+           # - before first space after column seventy-one
+           # - after 80'th column
+           while (1) {
+               $outstr =~ s/\. (?!$)/.\n /      or
+               $outstr =~ s/(.{71,79}?) /$1\n / or
+               $outstr =~ s/(.{80})(.)/$1\n$2/ or
+               last; # exit loop if string is < 79 characters
+           }
+
+           # Actually print the text
+           print OUTFILE "$outstr";
+           last TYPESW;
+       } # end TT::Text handling
+
+       # The default action - this should never happen!
+       print("I don't know ",$eaten->print) if $debug_on;
+
+    } # end for ($type)
+
+    print "\n" if $debug_on;
+
+} #end sub basic_lyx
+
+#########################  TEX MODE  SUBROUTINES  #########################
+
+# This subroutine copies and prints a latex token and its arguments if any.
+# This sub is only needed if the command was not found in the syntax file
+# Use exact_print to preserve, e.g., whitespace after macros
+sub copy_latex_unknown {
+    my $eaten = shift;
+    my $fileobject = shift;
+    my $outstr = $eaten->exact_print;
+    my ($dummy, $tok, $count);
+
+# Copy the actual word. Copy while you've still got
+#     arguments. Assume all args must be in the same paragraph
+#     (There could be new paragraphs *within* args)
+    #    We can't use copy_verbatim (unless we make it smarter) because
+    # it would choke on nested braces
+    print "\nUnknown token: '",$eaten->print,"': Copying in TeX mode\n"
+                                                         if $debug_on;
+    my $dum2;
+    while (($dum2 = $fileobject->lookAheadToken) &&
+          ($dum2 =~ /^[[{]$/)) {
+       if ($dum2 eq '[') { #copy optional argument - assume it's simple
+           $tok = $fileobject->eatOptionalArgument;
+           $outstr .= $tok->exact_print; # also print brackets & whitespace
+       } else {
+           $count = 0;
+           EAT: { #copied from eatBalanced, but allow paragraphs
+               die unless defined ($tok = $fileobject->eatMultiToken);
+               $outstr.="\n",redo EAT if ref($tok) eq "Text::TeX::Paragraph";
+               $dummy = $tok->exact_print;
+               $outstr .= $dummy;
+               # Sometimes, token will be '\n{', e.g.
+               $count++ if $dummy =~ /^\s*\{$/; # add a layer of nesting
+               $count-- if $dummy =~ /^\s*\}$/; # end one layer of nesting
+               redo EAT if $count; #don't dump out until all done nesting
+           } #end EAT block
+       } # end if $dummy = [{
+
+    } #end while
+    # Add {} after macro if it's followed by '}'. Otherwise, {\foo}bar
+    #     will yield \foobar when LyX creates LaTeX files
+    $outstr.="{}" if $outstr=~/\\[a-zA-Z]+$/ && $dum2 eq '}';
+
+    # Print it out in TeX mode
+    &print_tex_mode($outstr);
+
+    print "\nDone copying unknown token" if $debug_on;
+} # end sub copy_latex_unknown
+
+# Copy an untranslatable latex command whose syntax we know, along with its
+# arguments
+#    The command itself, optional arguments, and untranslatable
+# arguments get copied in TeX mode. However, arguments which contain regular
+# LaTeX will get translated by reLyX. Do that by printing what you have so
+# far in TeX mode, leaving this subroutine, continuing with regular reLyX
+# translating, and then returning here when you reach the ArgToken or
+# EndArgsToken at the end of the translatable argument.
+#    We need to keep a stack of the tokens that brought us here, because
+# you might have nested commands (e.g., \mbox{hello \fbox{there} how are you}
+sub copy_latex_known {
+    my ($eaten, $fileobject) = (shift,shift);
+    my $type = ref($eaten);
+    $type =~ s/^Text::TeX::// or die "unknown token?!";
+
+    # token itself for TT::Token, TT::BegArgsToken,
+    # Corresponding BegArgsToken for ArgToken,EndArgsToken
+    my $temp_start = $eaten->base_token;
+
+# Initialize tex mode copying
+    if ($type eq "BegArgsToken" or $type eq "Token") {
+       print "\nCopying untranslatable token '",$eaten->print,
+                                     "' in TeX mode" if $debug_on;
+       push @tex_mode_tokens, $temp_start;
+
+       # initialize the string of stuff we're copying
+       $tex_mode_string = $eaten->exact_print;
+    } # Start tex copying?
+
+# Handle arguments
+    # This token's next arguments -- returns a string matching /o*[rR]?/
+    my $curr_args = $eaten->next_args($fileobject);
+
+    if ($type eq "EndArgsToken" or $type eq "ArgToken") {
+       # Print ending '}' for the group we just finished reading
+       $tex_mode_string .= '}';
+    }
+
+    # If there could be optional arguments next, copy them
+    while ($curr_args =~ s/^o// && $fileobject->lookAheadToken eq '[') {
+       my $opt = $fileobject->eatOptionalArgument;
+       $tex_mode_string .= $opt->exact_print;
+    }
+    $curr_args =~ s/^o*//; # Some OptArgs may not have appeared
+
+    if ($type eq "BegArgsToken" or $type eq "ArgToken") {
+       # Print beginning '{' for the group we're about to read
+       $tex_mode_string .= '{';
+    }
+
+    # Now copy the next required argument, if any
+    # Copy it verbatim (r), or translate it as regular LaTeX (R)?
+    if ($curr_args =~ s/^r//) {
+       my $group = $fileobject->eatRequiredArgument;
+       my $temp = $group->exact_print;
+       # Remove braces. They're put in explicitly
+       $temp =~ s/\{(.*)\}/$1/; # .* is greedy
+       $tex_mode_string .= $temp;
+
+    } elsif ($curr_args =~ s/^R//) {
+       print "\n" if $debug_on;
+       &print_tex_mode($tex_mode_string);
+       $tex_mode_string = "";
+       print "\nTranslating this argument for ",$temp_start->print,
+             " as regular LaTeX" if $debug_on;
+
+    } else { # anything but '' is weird
+       warn "weird arg $curr_args to ",$temp_start->print,"\n" if $curr_args;
+    }
+
+# Finished tex mode copying
+    if ($type eq "Token" or $type eq "EndArgsToken") {
+
+       # Add {} to plain tokens followed by { or }. Otherwise {\foo}bar
+       # and \foo{bar} yield \foobar in the LaTeX files created by LyX
+       my $dummy;
+       if ($type eq "Token" and
+               $dummy=$fileobject->lookAheadToken and
+               $dummy =~ /[{}]/)
+       {
+           $tex_mode_string .= '{}';
+       }
+
+       # Print out the string
+       print "\n" if $debug_on;
+       &print_tex_mode($tex_mode_string);
+       $tex_mode_string = "";
+
+        # We're done with this token
+       pop(@tex_mode_tokens);
+
+       my $i = $type eq "Token" ? "" : " and its arguments";
+       my $j = $temp_start->print;
+       print "\nDone copying untranslatable token '$j'$i in TeX mode"
+                                                         if $debug_on;
+    } # end tex copying?
+} # end sub copy_latex_known
+
+# Print a string in LyX "TeX mode"
+#    The goal of this subroutine is to create a block of LyX which will be
+# translated exactly back to the original when LyX creates its temporary LaTeX
+# file prior to creating a dvi file.
+#    Don't print \n\n at the end of the string... instead just set the new
+# paragraph flag. Also, don't print whitespace at the beginning of the string.
+# Print nothing if it's the beginning of a paragraph, or space otherwise.
+# These two things avoid extra C-Enter's in the LyX file
+sub print_tex_mode {
+    my $outstr = shift;
+
+    print "'$outstr'" if $debug_on;
+
+    # Handle extra \n's (& spaces) at beginning & end of string
+    my $str_ends_par = ($outstr =~ s/\n{2,}$//);
+    if ($IsNewParagraph) {
+        $outstr =~ s/^\s+//;  # .e.g, $outstr follows '\begin{quote}'
+    } else {
+       # Any whitespace is equivalent to one space in LaTeX
+        $outstr =~ s/^\s+/ /; # e.g. $outstr follows "\LaTeX{}" or "Hi{}"
+    }
+
+    # Check whether string came right at the beginning of a new paragraph
+    # This *might* not be necessary. Probably can't hurt.
+    &CheckForNewParagraph;
+
+    # Get into TeX mode
+    print OUTFILE "$start_tex_mode";
+
+    # Do TeX mode translation;
+    $outstr =~ s/\\/\n\\backslash /g;
+    # don't translate \n in '\n\backslash' that we just made!
+    $outstr =~ s/\n(?!\\backslash)/\n\\newline \n/g;
+
+    # Print the actual token + arguments if any
+    print OUTFILE $outstr;
+
+    # Get OUT of LaTeX mode (and end nesting if nec.)
+    print OUTFILE "$end_tex_mode";
+    $IsNewParagraph = $str_ends_par;
+
+    return;
+} # end sub print_tex_mode
+
+############################  LAYOUT  SUBROUTINES  ###########################
+
+sub CheckForNewParagraph {
+# This subroutine makes sure we only write \layout command once per paragraph
+#    It's mostly necessary cuz 'Standard' layout is the default in LaTeX;
+#    there is no command which officially starts a standard environment
+# If we're in a table, new layouts aren't allowed, so just return
+# If $IsNewParagraph is 0, it does nothing
+# If $INP==1, It starts a new paragraph
+# If $CurrentAlignment is set, it prints the alignment command for this par.
+# If $MayBeDeeper==1 and we're currently within a list environment,
+#    it starts a "deeper" Standard paragraph
+    my $dummy; 
+    my $layout = $$CurrentLayoutStack[-1];
+
+    return if &RelyxTable::in_table;
+
+    if ($IsNewParagraph) {
+       # Handle standard text within a list environment specially
+       if ($MayBeDeeper) {
+           if ($layout =~ /^$ListLayouts$/o) {
+               push (@$CurrentLayoutStack, "Standard");
+               print "\nCurrent Layout Stack: @$CurrentLayoutStack\n"
+                                                    if $debug_on;
+               print OUTFILE "\n\\begin_deeper ";
+               $layout = "Standard";
+           }
+           $MayBeDeeper = 0; # Don't test again until new paragraph
+       }
+
+       # Print layout command itself
+       print OUTFILE "\n\\layout $layout\n\n";
+       print OUTFILE $CurrentAlignment if $CurrentAlignment;
+
+       # Now that we've written the command, it's no longer a new paragraph
+       $IsNewParagraph = 0;
+
+       # And we're no longer waiting to see if this paragraph is empty
+       $PendingLayout = 0;
+
+       # When you write a new paragraph, reprint any font commands
+       foreach $dummy (keys %$CurrentFontStatus) {
+           my $currf = $CurrentFontStatus->{$dummy}->[-1];
+           if ($currf ne "default") {
+               print OUTFILE "\n$dummy $currf \n";
+           }
+       }
+    } # end if $INP
+} # end sub CheckForNewParagraph
+
+sub ConvertToLayout {
+# This subroutine begins a new layout, pushing onto the layout stack, nesting
+# if necessary. It doesn't actually write the \layout command -- that's
+# done by CheckForNewParagraph.
+#    The subroutine assumes that it's being passed an environment name or macro
+# which is known and which creates a known layout
+#    It uses the ToLayout hash (created by the ReadCommands module) which
+# gives the LyX layout for a given LaTeX command or environment
+# Arg0 is the environment or macro
+    my $name = shift;
+
+    my $layoutref = $ReadCommands::ToLayout->{$name};
+    my $layout = $layoutref->{'layout'};
+    my $keepempty = $layoutref->{'keepempty'};
+    my $dummy = ($name =~ /^\\/ ? "macro" : "environment");
+    print "\nChanging $dummy $name to layout $layout" if $debug_on;
+
+    # Nest if the layout stack has more than just "Standard" in it
+    if ($#{$CurrentLayoutStack} > 0) {
+       # Die here for sections & things that can't be nested!
+       print " Nesting!" if $debug_on;
+       print OUTFILE "\n\\begin_deeper ";
+    }
+
+    # If we still haven't printed the *previous* \layout command because that
+    # environment is empty, print it now! (This happens if an environment
+    # is nested inside a keepempty, like slide.)
+    &CheckForNewParagraph if $PendingLayout;
+
+    # Put the new layout onto the layout stack
+    push @$CurrentLayoutStack, $layout;
+    print "\nCurrent Layout Stack: @$CurrentLayoutStack" if $debug_on;
+
+    # Upcoming text will be new paragraph, needing a new layout cmd
+    $IsNewParagraph = 1;
+
+    # Test for nested "Standard" paragraph in upcoming text?
+    # Some environments can nest. Sections & Title commands can't
+    $MayBeDeeper = $layoutref->{"nestable"};
+
+    # We haven't yet read any printable stuff in the new paragraph
+    # If this is a layout that's allowed to be empty, prepare for an
+    # empty paragraph
+    $PendingLayout = $keepempty;
+
+} # end sub ConvertToLayout
+
+sub EndLayout {
+# This subroutine ends a layout, popping the layout stack, etc.
+#    The subroutine assumes that it's being passed an environment name or macro
+# which is known and which creates a known layout
+#    It uses the ToLayout hash (created by the ReadCommands module) which
+# gives the LyX layout for a given LaTeX command or environment
+# Arg0 is the environment or macro
+    my $name = shift;
+
+    my $layoutref = $ReadCommands::ToLayout->{$name};
+    my $layout = $layoutref->{'layout'};
+    my $dummy = ($name =~ /^\\/ ? "macro" : "environment");
+    print "\nEnding $dummy $name (layout $layout)" if $debug_on;
+
+    # If we still haven't printed the *previous* \layout command because that
+    # environment is empty, print it now! Before we pop the stack!
+    # This happens for a totally empty, non-nesting environment,
+    # like hollywood.sty's fadein
+    &CheckForNewParagraph if $PendingLayout;
+
+    my $mylayout = pop (@$CurrentLayoutStack);
+
+    # If a standard paragraph was the last thing in a list, then
+    #     we need to end_deeper and then pop the actual list layout
+    # This should only happen if the Standard layout was nested
+    #    in a nestable layout. We don't check.
+    if ($mylayout eq "Standard") {
+       print OUTFILE "\n\\end_deeper ";
+       print " End Standard Nesting!" if $debug_on;
+       $mylayout = pop (@$CurrentLayoutStack);
+    }
+
+    # The layout we popped off the stack had better match the
+    #    environment (or macro) we're ending!
+    if ($mylayout ne $layout) { die "Problem with Layout Stack!\n"};
+    print "\nCurrent Layout Stack: @$CurrentLayoutStack" if $debug_on;
+
+    # If we're finishing a nested layout, we need to end_deeper
+    # This should only happen if the layout was nested
+    #    in a nestable layout. We don't check.
+    # Note that if we're nested in a list environment and the
+    #     NEXT paragraph is Standard, then we'll have an extra
+    #     \end_deeper \begin_deeper in the LyX file. It's sloppy
+    #     but it works, and LyX will get rid of it when it
+    #     resaves the file.
+    if ($#{$CurrentLayoutStack} > 0) {
+       print " End Nesting!" if $debug_on;
+       print OUTFILE "\n\\end_deeper ";
+    }
+
+    # Upcoming text will be new paragraph, needing a new layout cmd
+    $IsNewParagraph = 1;
+
+    # Test for nested "Standard" paragraph in upcoming text?
+    # Some environments can nest. Sections & Title commands can't
+    $MayBeDeeper = $layoutref->{"nestable"};
+} # end sub EndLayout
+
+#######################  MISCELLANEOUS SUBROUTINES  ###########################
+sub fixmath {
+# Translate math commands LyX doesn't support into commands it does support
+    my $input = shift;
+    my $output = "";
+
+    while ($input =~ s/
+           (.*?)    # non-token matter ($1)
+           (\\      # token ($2) is a backslash followed by ...
+               ( ([^A-Za-z] \*?) |    # non-letter (and *) ($4) OR
+                 ([A-Za-z]+ \*?)   )  # letters (and *) ($5)
+           )//xs) # /x to allow whitespace/comments, /s to copy \n's
+    { 
+       $output .= $1;
+       my $tok = $2;
+       if (exists $ReadCommands::math_trans{$tok}) {
+           $tok = $ReadCommands::math_trans{$tok};
+           # add ' ' in case we had, e.g., \|a, which would become \Verta
+           # Only need to do it in those special cases
+           $tok .= ' ' if
+                   defined $4 && $tok =~ /[A-Za-z]$/ && $input =~ /^[A-Za-z]/;
+       }
+       $output .= $tok;
+    }
+    $output .= $input; # copy what's left in $input
+
+    return $output;
+}
+
+1; # return true to calling subroutine
+
diff --git a/lib/reLyX/CHANGES b/lib/reLyX/CHANGES
new file mode 100644 (file)
index 0000000..c8d197e
--- /dev/null
@@ -0,0 +1,178 @@
+From 2.9.1.1 to 2.9.2.1
+- noweb documents, with -n option (Kayvan Aghaiepour Sylvan)
+
+From 2.9 to 2.9.1.1
+- translate text argument to \resizebox, \scalebox, \rotatebox
+- BUG: if syntax.default said to "translate" the third of three arguments to
+  a command, reLyX would actually translate the second.
+- handle \r, \k
+- Change a line to work in Windows
+
+From 2.8.1.2 to 2.9
+- Empty layouts (like slide and hollywood's fadein) are supported (reported
+  and pseudo-coded by Alain Castera)
+- \includegraphics -- graphics and graphicx forms, to the extent that LyX
+  supports them
+- Bug: bugfix in 2.6.1.3 meant \n in "\ERT{text\ntext}" was lost! (Now it's
+  converted to a space)
+- REfixed the bug where thebibliography environment created an extra paragraph
+- Handle \epsfig, \psfig
+- Handle \epsffile, \epsfbox
+- LyX now understands sqrt[]{}! Don't need to delete optional argument anymore.
+- BUG: "\layout Abstract " had extra space at end; LyX didn't recognize it!
+- BUG: tables with empty cells at end and no bottom line were mistranslated
+- BUG: one-column tables could be mistranslated (HACK)
+
+From 2.8.1.1 to 2.8.1.2
+- Cleaned up directory stuff. "reLyX foo/bar.tex" wouldn't work if foo/bar.tex
+  \include'd another file
+
+From 2.8 to 2.8.1.1
+- -o option allows you to create temp & LyX file(s) in a given output directory
+- support figure & figure* float
+- BUG: \input and \include support was broken
+- BUG: reLyX didn't notice if it was trying to write to a read-only directory,
+  causing bad errors. Now it dies politely.
+- support \index and \printindex
+- \^ and \~ are apparently legal LaTeX, so support them. Also \textless,
+  \textgreater, \textbar
+
+From 2.7.2.1 to 2.8
+- support \textbackslash, \listof[tables|figures|algorithms], \ensuremath
+- reLyXskip environment is magical; it doesn't get put into LyX file
+- support for verbatim environment and \verb command
+- _ in bibliographystyle filename works
+- some "kernel cleanup", including removing some hacks, and adding methods
+- -h option prints usage. So does dying due to missing options, filename, etc.
+- translate \sp, etc. to their LyX-supported equivalents, using new 'reLyXmt'
+  block in syntax.defaults file
+- translate certain arguments to untranslatable commmands (e.g., argument
+  to \mbox{}) as regular LaTeX
+
+From 2.7.1.1 to 2.7.2.1
+- Translate common optional args to \documentclass
+- support TeX style \input
+
+From 2.6.1.3 to 2.7.1.1
+- support \include{foo} and \input{foo} (but not TeX's "\input foo.tex")
+- -p option translates latex fragments
+- Whitespace is a lot closer to lyx
+- Correctly (?) translate layouts of LatexType Command found in layout files
+  even if the command isn't in syntax.default. E.g., \curradr, \lyxaddress
+
+From 2.6.1.2 to 2.6.1.3
+- table bug: \multicolumn could screw up where cells were placed
+- table bug: \\ \hline at end of table made broken LyX tables
+- Don't print leading C-Enter for strings in TeX mode (e.g. unknown tokens)
+- support optional argument to \cite
+- support \hfill
+- Bug: known but untranslatable tokens may need braces after them. Translate
+    {\oe} or \oe{} as TeX mode \oe{}.
+
+From 2.6 to 2.6.1.2
+- Bug: \@ wasn't being handled correctly.
+- BUG! An 's' coming right after a comment would be deleted!
+- correct support for List (won't work for things nested in List,
+    but that's OK because List is buggy anyway!) and (koma) Labeling layouts
+- support for \bibliography and \bibliographystyle commands (slightly kludged)
+- Buglet: needed to add a space after args in List, Description
+- Better handling of spaces for tokens and regular text
+- "Welcome message" with revision date
+- \LaTeXe -> "LaTeX2e"; support \underbar, \noun
+
+From 2.5.2.3 to 2.6
+- text after \end{center|right|left} automatically starts new paragraph
+- \bibitem and thebibliography (i.e., non-BibTeX bibliographies) support
+- Partial fix to '_' bug. Non-math mode _ will translate correctly as long as
+     it's not in an argument of an unknown command
+- Streamlined (non-debug) output to ~ 10 short lines
+- Allow comments in optional arguments to \documentclass
+- Handle @{} descriptions in tables
+- Added 'slide' as a regular environment in syntax.default
+- syntax file stuff broke \multicolumn & \cline. HACKED them back in.
+     (had to pretend in syntax file that they don't take arguments!)
+- Fixed bug: *'s in regular environments are now recognized
+- Buglet: font size changes in footnote caused crash
+- Buglet: print \n after align commands
+
+From 2.5.2.2 to 2.5.2.3
+- Read ~/.lyx/reLyX/syntax.default (if it exists) instead of system-wide file
+- Always put untranslatable text in TeX mode (never use LaTeX layout)
+- LaTeX command \newline is synonomous with \\, so support it
+
+From 2.5.1.1 to 2.5.2.2
+- Look in ~/.lyx/layouts OR $lyxdir/layouts for layout files
+- -s option allows user to read syntax files in addition to the default one
+- "regular environments" section in syntax file (partially obsoletes -r option)
+- Slight change to \latex block vs. LaTeX paragraph printing decision
+
+From 2.5 to 2.5.1.1
+- Fixed bug that made syntax.default useless in translation pass (thanks Jmarc!)
+- Fix to printing things in TeX mode (improvements & removing a couple buglets)
+- \thanks and \noindent supported
+
+From 2.4 to 2.5
+- Bug: \underline broke reLyX
+- Try to read "foo.tex" if input file "foo" doesn't exist
+- Read in a default LaTeX syntax file saying how many (required/optional)
+     arguments each LaTeX command takes
+- Ignore optional arguments to commands for which LyX can't handle them
+     (e.g., \sqrt, \\)
+- More intelligently add braces to (math) command args that are missing them
+     (e.g., x^\sqrt2 now works)
+
+From 2.3.1.1 to 2.4
+- Table support! (i.e., tabular environment, \hline, \cline, \multicolumn)
+- table environment (including \caption and a tabular environment, e.g.)
+- (mostly) removed extra spaces (which display in LyX, but not in dvi)
+- Added support for accents, including all accents in table 3.1 of Lamport,
+   plus \l \L ?` and !` (last two in LaTeX mode since LyX doesn't support 'em)
+- Added support for center, flushright, and flushleft environments
+- Add {} to end of unknown token if necessary
+- Fixed buglet: unknown token at end of paragraph didn't start new paragraph
+
+From 2.3 to 2.3.1.1
+- Don't bother translating '\ ', since ~ isn't equivalent
+- Description \item commands now handled correctly (except "{]}")
+- Added -c option to override the LyX file's textclass
+- Fixed bug which didn't allow unknown environment nested within itself
+- Ignore anything after the \end{document} command
+- Fixed bug where floats (like footnote) didn't print enough \n's (which could
+     lead to LyX ignoring text following the footnote up to the next \n!)
+
+From 2.2.3.1 to 2.3
+- Remove LyX-generated preamble matter (JAMatos)
+- read LyX layout files from LIBDIR/layouts/ (-t option no longer necessary)
+
+From 2.2.1.3 to 2.2.3.1
+- Added -r and -t options
+- deal with perl5.002 bug and fixed font commands at beginning of paragraph bug
+
+From 2.2.1.1 to 2.2.1.3
+- Added -d switch
+- Fixed bug: \end{environment} wasn't ending local commands
+- Add braces to \frac, plus better brace-adding for ^ and _ (still not perfect)
+- Wrote a man page
+
+From 2.2 to 2.2.1.1:
+- Got rid of *many* 'uninitialized value' errors due to $ or eof
+- Added abstract environment
+- Fixed support for {\em foo \em bar} + partial fix for {\cal A} in math mode
+- Fixed bug: math mode at beginning of a paragraph was mistranslated
+- Translate '\ ' as a protected space. This is probably wrong.
+- Major rewrite of CleanTeX. Only changes test.relyx2 + adds space to test.lyx
+     but in the future it will allow better verbatim copying
+
+From 2.1.1.1 to 2.2:
+- Major code rewrite/reorganization: should not change functionality (Karger)
+- CleanTeX is now a *subroutine*, not a separate executable (Karger)
+- Added -f option to clobber existing .lyx file (Karger)
+
+From 2.1 to 2.1.1.1
+- Many little bug fixes (Karger)
+
+2.1 Initial release 980118
+
+1.1 Initial version, checked in 971210
+
+pre1.1 work (mostly on CleanTeX) done by John Weiss.
diff --git a/lib/reLyX/CleanTeX.pm b/lib/reLyX/CleanTeX.pm
new file mode 100644 (file)
index 0000000..307a6bb
--- /dev/null
@@ -0,0 +1,353 @@
+# This file is part of reLyX
+# Copyright (c) 1998-9 Amir Karger karger@post.harvard.edu
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+
+package CleanTeX;
+# This package prepares a LaTeX file for translation to LyX
+# - Translates some local commands (e.g., {\em blah} to {\emph{blah}})
+# - Prepares math mode stuff for LyX. LyX reads LaTeX math mode directly,
+#      so reLyX can basically copy all math mode exactly, but LyX is a
+#      bit stricter than LaTeX. E.g., translate 'x^2' -> 'x^{2}
+# - Removes optional arguments if LyX doesn't understand them, e.g. \\
+
+use strict;
+
+use Verbatim;
+
+######
+# Global variables
+my $last_eaten; # last token we ate
+
+# List of commands for which LyX doesn't support the optional argument
+my @DeleteOptArg = map {"\\$_"} qw(\\ \\*
+              chapter section subsection subsubsection paragraph subparagraph
+             );
+
+my $debug_on; # was -d option given?
+
+#########################   PARSER INVOCATION   ################################
+sub call_parser {
+# This subroutine opens the TeX parser and processes the file.
+# Arg0 is the name of the input TeX file
+# Arg1 is the name of the output "clean" file
+
+    my ($InFileName, $OutFileName) = (shift,shift);
+
+    $debug_on = (defined($main::opt_d) && $main::opt_d);
+    my $zzz=$debug_on ? " TeX file ($InFileName --> $OutFileName)\n" :"... ";
+    print STDERR "Cleaning$zzz";
+    open (OUTFILE, ">$OutFileName") or die "problem opening $OutFileName: $!\n";
+
+# Create the list of tokens for the parser
+# Parts of the token list are swiped from TeX.pm
+    my %MyTokens = ( '{' => $Text::TeX::Tokens{'{'},
+                    '}' => $Text::TeX::Tokens{'}'},
+                    '$' => $Text::TeX::Tokens{'$'},
+                    '$$' => $Text::TeX::Tokens{'$$'},
+                    '\begin' => $Text::TeX::Tokens{'\begin'},
+                    '\end' => $Text::TeX::Tokens{'\end'},
+                  );
+
+    # Put local tokens, like \em, into %MyTokens
+    #Note: \cal is "local", although it's found in math mode
+    # (The "map" just puts a backslash in front of each word in the list)
+    my @LocalTokens = qw (em rm bf tt sf sc sl it
+                        rmfamily ttfamily sffamily mdseries bfseries
+                       upshape itshape slshape scshape cal
+                       ); 
+    foreach (@LocalTokens) {
+       $MyTokens{"\\$_"} = $Text::TeX::Tokens{'\em'}
+    }
+    # Now add any commands
+    &ReadCommands::Merge(\%MyTokens);
+
+# Create the fileobject
+    my $file = new Text::TeX::OpenFile 
+          $InFileName,
+          'defaultact' => \&clean_tex,
+          'tokens' => \%MyTokens;
+
+# Now actually process the file
+    $file->process;
+    close OUTFILE;
+    #warn "Done cleaning TeX file\n";
+} # end sub call_parser
+
+
+#######################   MAIN TRANSLATING SUBROUTINE   ########################
+# Routine called by the TeX-parser to perform token-processing.
+sub clean_tex {
+    my($eaten,$txt) = (shift,shift);
+    my ($outstr, $type);
+
+    # Sub translate is given a string and one of the translation tables below.
+    # It returns the translation, or just the string if there's no translation
+    # Translation table for TT::Begin::Group tokens
+    my %begtranstbl = (
+                       '$' => '\(', # LyX math mode doesn't
+                       '$$' => '\[', # understand \$ or $$
+                       );
+
+    # Translation table for TT::End::Group tokens
+    my %endtranstbl = (
+                          '$' => '\)',
+                          '$$' => '\]',
+                      );
+
+    # Translation table for TT::Token tokens whose translations should
+    #    NOT have whitespace after them! See sub translate...
+    #   Note that tokens of type TT::EndLocal are always translated to '}'. So,
+    #   any token defined as a local token *must* be translated to something
+    #   with a '{' (e.g., '\em' -> '\emph{') or we'll have mismatched braces
+    my %no_ws_transtbl = (
+                       '\em' => '\emph{',
+                       '\rm' => '\textrm{',
+                       '\bf' => '\textbf{',
+                       '\tt' => '\texttt{',
+                       '\sf' => '\textsf{',
+                       '\sc' => '\textsc{',
+                       '\sl' => '\textsl{',
+                       '\it' => '\textit{',
+                       '\rmfamily' => '\textrm{',
+                       '\ttfamily' => '\texttt{',
+                       '\sffamily' => '\textsf{',
+                       '\mdseries' => '\textmd{',
+                       '\bfseries' => '\textbf{',
+                       '\upshape' => '\textup{',
+                       '\itshape' => '\textit{',
+                       '\slshape' => '\textsl{',
+                       '\scshape' => '\textsc{',
+                       '\cal' => '\mathcal{',
+                       );
+
+
+    # a faux "switch" statement.  sets $_ for later use in pattern
+    # matching.
+    $type = ref($eaten);
+    $type =~ s/^Text::TeX::// or die "Non-Text::TeX object";
+    my $printstr = ""; # default for undefined printstrs etc.
+    SWITCH: for ($type) {
+          # Handle blank lines.
+          if (/Paragraph/) {
+              last SWITCH;
+          }
+
+          # Handle the end of a local font command - insert a '}'
+          if (/EndLocal/) {
+              # we could just say $printstr='}'
+              $printstr = &translate('}', \%endtranstbl);
+              last SWITCH;
+          }
+          
+          # $eaten->exact_print is undefined for previous environments
+          $outstr = $eaten->exact_print;
+          if (! defined $outstr) { # comment at end of paragraph
+              warn "Weird undefined token $eaten!" unless $eaten->comment;
+              last SWITCH;
+           }
+          
+          # Handle LaTeX tokens
+          if (/^Token$/) {
+              my $realtok = $eaten->print; # w/out whitespace
+              # If a comment is its own paragraph, print nothing
+              last SWITCH unless defined($realtok);
+              # Special handling for \verb and \verb*
+              if ($realtok =~ /^\\verb\*?/) {
+                  $printstr = &Verbatim::copy_verb($txt,$eaten);
+                  last SWITCH;
+              }
+
+              # Translate token if necessary, or just print it
+              # "no_ws" is HACK to remove whitespace, so '\em ' -> '\emph{'
+              $printstr = &translate($outstr, \%no_ws_transtbl, "no_ws");
+
+              # Ignore optional argument(s) if necessary
+              $printstr .= &handle_opt_args($eaten,$txt);
+
+              last SWITCH;
+          }
+
+          # Tokens taking arguments, like '^'
+          # ADD '{' if there isn't one before the argument!
+          if (/^BegArgsToken$/) {
+              $printstr = $outstr;
+
+              # Ignore optional argument(s) if necessary
+              $printstr .= &handle_opt_args($eaten,$txt);
+
+              # Add beginning brace before the 1st argument if there isn't one
+              my $tok = $txt->lookAheadToken;
+              $printstr .= '{' unless ($tok =~ /\{/);
+              last SWITCH;
+          }
+
+          # End of one argument, beginning of next
+          # Note: by default ArgToken,EndArgsToken print nothing
+          # ADD '}' if there isn't one after the last argument
+          # Then read and print any optional arguments which may exist
+          #    between this argument the next (we must do this here or we would
+          #    add a '{' before an optional argument!)
+          # ADD '{' if there isn't one before the next argument!
+          # (just like we do in BegArgsToken and EndArgsToken)
+          if (/^ArgToken$/) {
+              $printstr = $outstr; # = ''
+
+              # Add '}' after the argument that ended if necessary
+              $printstr .= '}' unless $last_eaten->print eq "\}";
+
+              # Eat and print any optional arguments
+              $printstr .= &handle_opt_args($eaten,$txt);
+
+              # Add '{' before the next argument if necessary
+              my $tok = $txt->lookAheadToken;
+              $printstr .= '{' unless ($tok =~ /\{/);
+              last SWITCH;
+          }
+
+          # End of tokens taking arguments, like '^'
+          #     ADD '}' if there isn't one after the last argument, i.e., 
+          # if the previous token *wasn't* a '}'
+          #     Kludge: for TeX style \input command ("\input foo" with no
+          # braces) we need to read the whole filename, but parser will have
+          # read only one char. So read in the rest of the filename before
+          # printing the '}'.
+          if (/^EndArgsToken$/) {
+              $printstr = $outstr; # = ''
+
+              unless ($last_eaten->print eq "\}") {
+                  my $s = $eaten->base_token;
+                  if ($s->print eq "\\input") {
+                      my $t = $txt->lookAheadToken;
+                      # For one-char filename (a.tex) do nothing
+                      if ($t =~ /^[\w.\-]/) {
+                          my $u = $txt->eatMultiToken;
+                          $t = $u->print;
+                          $t =~ s/\s+//g;
+                          $printstr .= $t;
+                       }
+                       # TeX \input always adds .tex ending
+                       $printstr .= ".tex";
+                   }
+
+                  $printstr .= '}';
+               }
+
+              # Don't bother eating optional args coming after the last
+              # required arg: they'll just be copied as text
+              last SWITCH;
+          }
+          
+          # Handle opening groups, like '{' and '$'.
+          if (/Begin::Group$/) {
+              $printstr = &translate($outstr,\%begtranstbl);
+              last SWITCH;
+          }
+          
+          # Handle closing groups, like '}' and '$'.
+          if (/End::Group$/) {
+              $printstr = &translate($outstr, \%endtranstbl);
+              last SWITCH;
+          }
+
+          if (/Begin::Group::Args/) {
+              my $env = $eaten->environment;
+              $printstr = $outstr;
+              if ($env eq "verbatim" || $env eq "reLyXskip") {
+                  # copy everything up to "\end{foo}"
+                  $printstr .= &Verbatim::copy_verbatim($txt, $eaten);
+              }
+              last SWITCH;
+          }
+          
+          if  (/End::Group::Args/) {
+              $printstr = $outstr;
+              last SWITCH;
+          }
+
+          if (/Text/) {
+              $printstr = $outstr;
+              last SWITCH;
+          }
+
+          # The default action - print the string.
+          $printstr = $outstr;
+    } # end SWITCH:for ($type)
+    
+    # Actually print the string
+    if (defined $printstr) { 
+       print OUTFILE $printstr;
+       $last_eaten = $eaten; #save for next time
+    } else {warn "Undefined printstr";}
+
+} # end sub clean_tex
+
+####################   TRANSLATOR SUBROUTINES    ###############################
+sub translate {
+# Replace a string (possibly with whitespace around it) with another
+# Arg0 is a string, Arg1 is a reference to a hash containing translations
+# If a token not in the table is passed in, do nothing
+# If Arg2 is defined AND the token is known, then remove whitespace from
+#     the end of the translated token. This is a HACK to do '\em ' -> '\emph{'
+# Return the string, possibly modified
+    my ($tokstr, $transref) = (shift, shift);
+    my $remove_ws = shift;
+    my %transtable = %$transref;
+
+    # remove whitespace from the string (since transtable doesn't have it)
+    my $stripstr = $tokstr;
+    $stripstr =~ s/^\s*(\S+)\s*$/$1/ or warn "couldn't strip token";
+    if ( exists $transtable{$stripstr} ) {
+         # use \Q or \, (, $, and [ will be misinterpreted
+        $tokstr =~ s/\Q$stripstr\E/$transtable{$stripstr}/;
+
+       # remove whitespace?
+       if (defined $remove_ws) {
+           $tokstr =~ s/\s*$//;
+       }
+    }
+
+    return $tokstr;
+}
+
+sub handle_opt_args {
+# read and concatenate OR IGNORE optional arguments
+# Arg0 is a BegArgsToken or ArgToken
+    my ($eaten,$fileobject) = (shift,shift);
+    my $outstr = "";
+
+    # If at end of paragraph, don't bother looking for optArgs
+    return "" unless $fileobject->lookAheadToken;
+
+    # Get the next argument(s) expected for this token == /^o*[rR]?$/
+    # If there are no args expected, just return
+    my $curr_args = $eaten->next_args($fileobject) or return "";
+
+    # Now print or ignore any optional arguments
+    # If there's an 'r' in curr_args, we're done for now
+    my $foo;
+    my $token_name = $eaten->token_name; # (needed for EndArgsToken, e.g.)
+    while ($curr_args =~ s/^o//) {
+        my $opt = $fileobject->eatOptionalArgument;
+       # Print any initial space before the optional argument
+        if ($foo = $opt->exact_print) {
+           if ($foo =~ /^(\s+)/) {
+               $outstr .= $1;
+           }
+       }
+
+       # Print the argument or ignore it
+        if ($opt->print) {
+           if (grep /^\Q$token_name\E$/, @DeleteOptArg) {
+               print "Optional argument '",$opt->print,
+                      "' to macro $token_name ignored\n";
+           } else {
+               $outstr .= "[" . $opt->print . "]";
+           }
+        } # Was an optional argument found?
+    }
+
+    return $outstr;
+} # end sub handle_opt_args
+
+1; # return true value to calling program
diff --git a/lib/reLyX/LastLyX.pm b/lib/reLyX/LastLyX.pm
new file mode 100644 (file)
index 0000000..261009f
--- /dev/null
@@ -0,0 +1,130 @@
+# This file is part of reLyX
+# Copyright (c) 1998-9 Amir Karger karger@post.harvard.edu
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+
+package LastLyX;
+# This package is the last step in creating a LyX file. It:
+#  - rejoins the lyx preamble to the rest of the file
+#  - adds some information (see below)
+#  - determines whether reLyX needs to translate any other files (e.g.,
+#    files included in an \include command)
+#  - creates a '.lyx' file
+#
+# reLyX may not have enough information during the previous pass. In that case,
+# it puts a "marker" in the temporary file it writes, and stores the missing
+# information---when it does come upon it---in a global variable.
+# So during this pass, if we see any such markers, we replace them with the
+# necessary information. Examples of this include:
+# - header information for tables
+# - name of the bibliography style file to use
+
+use strict;
+use RelyxTable; # handle LaTeX tables
+use File::Basename;
+
+my $debug_on; # was -d option given?
+
+sub last_lyx {
+# Arg0 is input file name
+# Arg1 is output file name (foo.lyx)
+# Arg2 is a string containing the entire preamble
+
+    my ($InFileName, $OutFileName, $LyXPreamble) = (shift, shift, shift);
+    $debug_on = (defined($main::opt_d) && $main::opt_d);
+    my $zzz=$debug_on ? " LyX file ($InFileName --> $OutFileName)\n" :"... ";
+    print STDERR "Writing$zzz";
+    open (INFILE, "<$InFileName") or die "problem opening $InFileName: $!\n";
+    open (OUTFILE,">$OutFileName") or die "problem opening $OutFileName: $!\n";
+
+    # Print the preamble
+    print OUTFILE $LyXPreamble;
+
+    # Now print out the rest of the LyX file
+    # Some lines have to be changed somewhat
+    # Otherwise just print all lines as they appear.
+    #    TODO In the future, we could buffer text, and then get rid of extra
+    # '\latex default \latex latex' or '\end_deeper \begin_deeper' pieces
+    # created by the translator
+    while (<INFILE>) {
+       if (/$RelyxTable::TableBeginString/o) {
+           # Write out the header information for the table
+           $_ = &print_table;
+
+       } elsif (/$BasicLyX::bibstyle_insert_string/o) {
+           # Replace the "insert bibstyle file here" with the actual file name
+           
+           my $ins = $BasicLyX::bibstyle_insert_string;
+           my $fil = $BasicLyX::bibstyle_file;
+           if ($fil) {
+               s/$ins/$fil/;
+           } else {
+               warn("Don't know which bibliographystyle file to use!\n".
+                "Replace '$ins' in the LyX file with the bibstyle file\n");
+           }
+
+       } elsif (/^\Q$BasicLyX::Begin_Inset_Include\E/o) {
+           # tell main:: we need to translate an included (or inputted) file
+           m/\{(.*)\}\s*$/ or warn "weird Include command $_";
+           my $fil = $1;
+           # Change relative path to absolute path if necessary
+           my $abs_fil = &main::abs_file_name($fil);
+           print "Adding $abs_fil to file list\n" if $debug_on;
+           push @main::File_List, $abs_fil;
+
+           # include file.lyx, not file.tex!
+           my ($basename, $path, $suffix)=fileparse($fil, @main::Suffix_List);
+           $suffix = "" unless defined $suffix;
+           $path .= '/' unless $path =~ /\/$/;
+           my $newfile;
+           if ($main::opt_o) { # all files go to outputdir; no path nec.
+               $newfile = "$basename.lyx";
+           } else { # keep relative path, e.g. Just change suffix
+               ($newfile = $fil) =~ s/$suffix/.lyx/;
+           }
+           s/\Q{$fil}\E/{$newfile}/;
+       } # end special if for table, bibstyle, include
+
+       print OUTFILE $_;
+    }
+
+    close INFILE; close OUTFILE;
+    #warn "Done writing LyX file!\n";
+} # end sub last_lyx
+
+sub print_table {
+# Print a table, from TableBeginString to TableEndString
+# Also (kind of a hack) remove the last \newline in a table, if any,
+#    since it causes LyX to seg fault.
+    my $to_print=""; # string to collect the table in
+    my $thistable = shift(@RelyxTable::table_array);
+
+    # Collect the whole table in $to_print
+    my $line;
+    while (($line = <INFILE>) !~ /$RelyxTable::TableEndString/o) {
+        $to_print .= $line;
+    }
+
+    # Remove the last \newline, if it was created by a \\ \hline
+    # at the end of a table. (Note: according to Lamport, \\ at the end of
+    # a table is *illegal* unless followed by an \hline)
+    #    If it was created due to an empty cell at the end of the table, though
+    # (latex table "a & b \\ c &", e.g.) then we need to keep it!
+    # HACK HACK HACK. If it's a one-column table, then we couldn't
+    # know while reading the table that the last row was empty, so we
+    # couldn't pop the last row then. So do it now. Yuck.
+    if ($thistable->numcols==1) {
+       $to_print =~ s/\\newline(?=\s*$)// && pop @{$thistable->{"rows"}} 
+    } elsif ($thistable->{"rows"}[$thistable->numrows -1]->{"bottom_line"}) {
+       $to_print =~ s/\\newline(?=\s*$)//;
+    }
+
+    # Put the header information at the top
+    # We have to do this *after* reading the table because of the
+    # one-column table hack. Yuck.
+    $to_print = $thistable->print_info . $to_print;
+
+    return $to_print;
+} # end sub print_table
+
+1; # return true to main package
diff --git a/lib/reLyX/MANIFEST b/lib/reLyX/MANIFEST
new file mode 100644 (file)
index 0000000..66a160e
--- /dev/null
@@ -0,0 +1,42 @@
+******* Files of general interest
+README           - General info, pointer to man page
+MANIFEST         - this file (hopefully)
+CHANGES          - changes from various versions
+BUGS             - bugs (note that some larger bugs are in the man page)
+syntax.default   - file describing LaTeX syntax
+reLyX.man        - man page for using reLyX
+TODO             - future plans
+
+******* Files of interest to developers (maybe)
+reLyXmain.pl     - Executable Perl script to translate LaTeX to LyX
+reLyX.in         - input file to generate wrapper script 'reLyX', which gets
+                  installed in user's path, e.g., /usr/local/bin
+                  reLyX calls reLyXmain.pl
+noweb2lyx.in     - input file to generate noweb2lyx, for converting noweb
+                  file to LyX. noweb2lyx calls reLyX. Alternatively (but
+                  not recursively) reLyX -n calls noweb2lyx
+
+test.ltx         - test tex file
+test.lyx         - LyX file created by running 'reLyX.pl test.ltx'
+
+reLyX.pod        - documentation. Used to generate man page
+                  (could be used to make HTML or text, too!)
+
+*.pm are files containing subroutines (aka modules) which reLyX.pl calls
+MakePreamble.pm  - split off and translate the LaTeX preamble
+CleanTeX.pm      - "Clean" the TeX file
+BasicLyX.pm      - main translation pass
+LastLyX.pm       - final pass: create the LyX file
+ReadCommands.pm  - subs to read and use a file containing LaTeX syntax
+RelyxFigure.pm   - classes & methods for handling LaTeX figures
+RelyxTable.pm    - classes & methods for handling LaTeX tables
+Verbatim.pm      - subs to copy stuff exactly (e.g, \verb or unknown commands)
+
+Text/TeX.pm      - Text::TeX package which contains the TeX parser
+                   ./Text/TeX.pm was originally copied from 
+                  Text-TeX-0.01/Text/TeX.pm, but has been changed.
+Text/manpage.3pm   original manpage for Text::TeX
+
+Text::TeX v0.01 was originally obtained from CPAN, but it has been
+changed rather significantly.  The original package was written by Ilya
+Zakharevich (ilya@math.ohio-state.edu)
diff --git a/lib/reLyX/MakePreamble.pm b/lib/reLyX/MakePreamble.pm
new file mode 100644 (file)
index 0000000..7a5d6b0
--- /dev/null
@@ -0,0 +1,229 @@
+# This file is part of reLyX. 
+# Copyright (c) 1998-9 Amir Karger karger@post.harvard.edu
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+
+package MakePreamble;
+# This package reads a LaTeX preamble (everything before \begin{document}
+#    and translates it to LaTeX.
+
+use strict;
+
+my $debug_on; # package-wide variable set if -d option is given
+my $true_class; # which textclass to use (if -c option is given)
+
+sub split_preamble {
+# Split the file into two files, one with just the preamble
+# Simply copy stuff verbatim, saving translation for later
+# Skip the LyX-generated portion of the preamble, if any. (Otherwise,
+#     when you try to "view dvi" in LyX, there will be two copies of the
+#     preamble matter, which will break LyX.
+    my ($InFileName, $PreambleName, $OutFileName) = (shift, shift, shift);
+    my ($a, $b, $c);
+    my $forget=0;
+
+    # Was -d option given?
+    $debug_on = (defined($main::opt_d) && $main::opt_d);
+    # -c option?
+    $true_class = defined($main::opt_c) ? $main::opt_c : "";
+    my $zzz = $debug_on 
+        ? " from LaTeX file $InFileName into $PreambleName and $OutFileName" 
+       : "";
+    warn "Splitting Preamble$zzz\n";
+
+    open (INFILE, "<$InFileName") or die "problem opening $InFileName: $!\n";
+    open (PREAMBLE, ">$PreambleName") or
+                die "problem opening $PreambleName: $!\n";
+    open (OUTFILE, ">$OutFileName") or die "problem opening $OutFileName: $!\n";
+
+    # Copy everything up to "\begin{document}" into the preamble
+    while (<INFILE>) {
+        if (s/\Q\begin{document}\E//) {
+           ($a, $b, $c) = ($`, $&, $'); # save for later
+           last;
+       }
+       # In real life, there should never be Textclass specific stuff unless
+       # there is also LyX specific. But it can't hurt to test for both.
+        $forget=1 if m/%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific/ ||
+                     m/%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific/;
+        print PREAMBLE $_ unless $forget;
+        $forget=0 if m/%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified/;
+    }
+    die "Didn't find \\begin{document} command!" unless defined $b;
+    # There *could* be a preamble command on the same line as \begin{doc}!
+    print PREAMBLE $a;
+    print "Put preamble into file $PreambleName\n" if $debug_on;
+
+    # Copy everything else into another file
+    # Ignore anything after '\end{document}
+    print OUTFILE $b, $c; #'\begin{document}' plus anything else on the line
+    while (<INFILE>) {
+        print OUTFILE $_;
+       last if $_ =~ /^[^%]*\Q\end{document}\E/;
+    }
+
+    print "Put rest of file into $OutFileName\n" if $debug_on;
+    close INFILE; close OUTFILE; close PREAMBLE;
+    #warn "Done splitting preamble\n";
+} #end sub split_preamble
+
+
+
+# Actually translate a LaTeX preamble (in a file) into a LyX preamble.
+# Input:
+# First argument is the name of the file containing *only* the preamble
+# Second argument is the LyX format (e.g., "2.15")
+#
+# Output: document class, LyX Preamble, LaTeX preamble
+#    LyX premable contains the LyX options etc.
+#    LaTeX preamble is stuff that doesn't translate into LyX options)
+#
+sub translate_preamble {
+    my $PreambleName = shift;
+    my $Format = shift;
+    $debug_on = (defined($main::opt_d) && $main::opt_d);
+    my $zzz=$debug_on ? " from $PreambleName" :"";
+    warn "Creating LyX preamble$zzz\n";
+    open (PREAMBLE, "<$PreambleName");
+
+    # Translate optional args to \documentclass to LyX preamble statements
+    my %Option_Trans_Table = (
+        "10pt"           => "\\paperfontsize 10",
+        "11pt"           => "\\paperfontsize 11",
+        "12pt"           => "\\paperfontsize 12",
+
+       "letterpaper"    => "\\papersize letterpaper",
+       "legalpaper"     => "\\papersize legalpaper",
+       "executivepaper" => "\\papersize executivepaper",
+       "a4paper"        => "\\papersize a4paper",
+       "a5paper"        => "\\papersize a5paper",
+       "b5paper"        => "\\papersize b5paper",
+
+       "twoside"        => "\\papersides 2",
+       "oneside"        => "\\papersides 1",
+
+       "landscape"      => "\\paperorientation landscape",
+
+       "onecolumn"      => "\\papercolumns 1",
+       "twocolumn"      => "\\papercolumns 2",
+    );
+
+    # This is the string in which we're concatenating everything we translate
+    my $LyX_Preamble = "";
+
+# It would be nice to read the defaults.lyx file but for now we don't bother
+#my $default_dir = "templates/";
+#my $default_name = "defaults.lyx";
+#my $default_file = $dot_lyxdir . $default_dir . $default_name;
+#if (-e $default_file) {
+#    print "Going to open default LyX file $default_file\n";
+#    open (DEFAULT_LYX,$default_file) or warn "can't find default lyx file!";
+#      if ($fmt =~ /^\s*\\lyxformat [0-9.]+/) {
+#          print $fmt
+#      } else {
+#          die "Need \\lyxformat command in first line of default lyx file!";
+#      }
+#       AFTER printing the preamble, we'd print other commands from defaults.lyx
+#      while (($line = <DEFAULT_LYX>) !~ /^.*\\layout/) {
+#          if ($line !~ /^\s*(\#|\\textclass\W)/) { #already printed this line
+#              print OUTFILE $line;
+#          }
+#      }
+#}
+
+    # Write first two lines of the lyx file
+    my ($nm, $dt);
+    # whoami is needed on Win32, because getlong/getpwuid aren't implemented
+    # I'd rather use internal Perl functions when possible, though
+    $nm = (eval {getlogin || getpwuid($<)}) || `whoami`;
+    $dt = localtime;
+    $LyX_Preamble .= "\#This file was created by <$nm> $dt\n";
+    $LyX_Preamble .= "\#LyX 1.0 (C) 1995-1999 Matthias Ettrich " .
+                    "and the LyX Team\n";
+
+    # Print \lyxformat.
+    $LyX_Preamble .= "\\lyxformat $Format\n";
+
+    # Ignore everything up to the \documentclass
+    my $ignore = "";
+    while (<PREAMBLE>) {
+        next if /^\s*$/ || /^\s*%/; # skip whitespace or comment
+       # could just allow 'documentclass' and not support 2.09
+       last if s/^\s*\\document(style|class)//;
+       $ignore .= $_; # concatenate the ignored text
+    } # end while
+    warn "Uncommented text before \\documentclass command ignored!\n"if $ignore;
+    print "Ignored text was\n------\n$ignore------\n" if $debug_on && $ignore;
+
+    # concatenate all the extra options until the required argument to 
+    # \documentclass, which will be in braces
+    until (eof(PREAMBLE) || /\{/) {
+        my $instr = <PREAMBLE>;
+       $instr =~ s/\s*%.*$//; # get rid of comments
+       chomp; # remove the \n on $_ prior to concatenating
+       $_ .= $instr;
+    } # end loop; check the now longer $_ for a brace
+
+    # Read optional arguments, which are now guaranteed to be on one line
+    # (They're read here, but printed AFTER the \\textclass command)
+    #    Note: the below pattern match is *always* successful, so $& is always
+    # set, but it will be '' if there are no optional arguments. $1 will be
+    # whatever was inside the brackets (i.e., not including the [])
+    my $extra_options;
+    if (defined($_)) {
+       s/^\s*//; # there might be space before args
+       s/$Text::TeX::optionalArgument//;
+       $extra_options = $1 if $&;
+    }
+
+    # Read the document class, in braces, then convert it to a textclass
+    # However, if the user input a different class with the -c option, use that
+    s/\s*\{(\w+)\}//;
+    my $class = $1;
+    $class = $true_class if $true_class; # override from -c option
+    die "no document class in file, no -c option given\n" unless $class;
+    $LyX_Preamble .= "\\textclass $class\n";
+    print "document class is $class\n" if $debug_on;
+
+    # Analyze the extra options, and remove those we know about
+    if ($extra_options) {
+       my $op;
+       foreach $op (keys %Option_Trans_Table) {
+           $extra_options =~ s/\b$op\b// && do {
+               $LyX_Preamble .= "$Option_Trans_Table{$op}\n";
+               print "Document option $op\n" if $debug_on;
+           }
+       }
+       $extra_options =~ s/^,+|,+(?=,)|,+$//g; # extra commas
+    }
+    # Convert any remaining options to an \options command
+    if ($extra_options) {
+       $LyX_Preamble .= "\\options $extra_options\n";
+       print "extra options: $extra_options\n" if $debug_on;
+    }
+
+    # Now copy the whole preamble into the preamble of the LyX document
+    #     (unless there is no preamble)
+    # Everything until the end of filehandle PREAMBLE is preamble matter
+    my $Latex_Preamble = $_; # there COULD be a preamble command on same line
+    my $write_preamble = (! /^\s*$/ && ! /^\s*%/);
+    while (<PREAMBLE>) {
+       $Latex_Preamble .= $_;
+       # write an official preamble if we find anything that's not comment
+       $write_preamble ||= (! /^\s*$/ && ! /^\s*%/);
+    }
+
+    if ($write_preamble) {
+       $Latex_Preamble =~ s/^\s*//;
+       print "LaTeX preamble, consists of:\n$Latex_Preamble" if $debug_on;
+       $Latex_Preamble = "\\begin_preamble\n$Latex_Preamble\\end_preamble\n";
+       print "End of LaTeX preamble\n" if $debug_on;
+    } else {
+        $Latex_Preamble = ""; #just comments, whitespace. Ignore them
+    }
+
+    #warn "Done creating LyX Preamble\n";
+    return ($class, $LyX_Preamble, $Latex_Preamble);
+}
+
+1; # return true value to calling program
diff --git a/lib/reLyX/Makefile.am b/lib/reLyX/Makefile.am
new file mode 100644 (file)
index 0000000..af58792
--- /dev/null
@@ -0,0 +1,27 @@
+AUTOMAKE_OPTIONS = foreign
+DISTCLEANFILES= *.orig *.rej *~ *.bak reLyX reLyX.1
+MAINTAINERCLEANFILES = Makefile.in
+bin_SCRIPTS = reLyX
+LYXDATADIRS = reLyX reLyX/Text
+LYXDISTDIRS = Text
+man_MANS = reLyX.1
+EXTRA_DIST = BUGS BasicLyX.pm CHANGES CleanTeX.pm LastLyX.pm MANIFEST \
+       MakePreamble.pm ReadCommands.pm RelyxTable.pm reLyX.pod \
+       reLyXmain.pl syntax.default test.ltx test.lyx reLyX.man \
+       $(LYXDISTDIRS)
+
+LIBINSTFILES = *.pm *.pl README BUGS CHANGES reLyX.pod syntax.default Text/*.pm
+
+reLyX.1:
+       cp -p $(srcdir)/reLyX.man reLyX.1
+
+libinstalldirs:
+       for dir in $(LYXDATADIRS) ; do \
+         $(mkinstalldirs) $(pkgdatadir)/$$dir ; \
+       done
+
+install-data-local:  libinstalldirs
+       files=`cd ${srcdir} ; echo $(LIBINSTFILES)` ; \
+       for i in $${files} ; do \
+          $(INSTALL_DATA) ${srcdir}/$$i $(pkgdatadir)/reLyX/$$i ; \
+       done
diff --git a/lib/reLyX/README b/lib/reLyX/README
new file mode 100644 (file)
index 0000000..915c81c
--- /dev/null
@@ -0,0 +1,25 @@
+********************************************************************************
+*                      reLyX -- a LaTeX to LyX translator                     *
+********************************************************************************
+
+The purpose of reLyX is to translate *well-behaved* LaTeX into LyX.
+
+Its main goals are:
+    1) Get through a well-behaved LaTeX2e file without crashing
+    2) Translate a lot of that file.
+    3) Localize the parts that can't be translated and copy them in TeX mode
+It seems to achieve these main goals pretty well on most files.
+
+reLyX is in its early stages, so it still has some bugs and lacking features.
+There are many improvements that can and will be made to reLyX in the
+near future. However, we wanted to get reLyX out there early on, to make
+it easier for new LyX users who want to translate their existing LaTeX files.
+
+reLyX uses a modified version of the Perl TeX parser Text::TeX package written
+by Ilya Zakharevich (ilya@math.ohio-state.edu). The original Text::TeX is
+available on CPAN.
+
+There are lots more details in the man pages, so try 'man reLyX'
+
+Amir Karger
+karger@post.harvard.edu
diff --git a/lib/reLyX/ReadCommands.pm b/lib/reLyX/ReadCommands.pm
new file mode 100644 (file)
index 0000000..4bb6f9c
--- /dev/null
@@ -0,0 +1,428 @@
+# This file is part of reLyX
+# Copyright (c) 1998-9 Amir Karger karger@post.harvard.edu
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+
+package ReadCommands;
+# Read a file containing LaTeX commands and their syntax
+# Also, read a file containing LyX layouts and their LaTeX equivalents
+
+use strict; 
+
+# Variables needed by other modules
+# ToLayout is a ref to a hash which contains LyX layouts & LaTeX equivalents
+# regular_env is a list of environments that have "reLyXable" LaTeX in them
+# math_trans is a hash of math commands and what they're translated to
+use vars qw($ToLayout @regular_env %math_trans);
+
+#    CommandHash is the hash of LaTeX commands and their syntaxes which
+# this package builds.
+my %CommandHash;
+
+# Name of the environment containing names of regular environments :)
+my $regenv_name = "reLyXre";
+# Name of environment containing translations of math commands
+my $math_trans_name = "reLyXmt";
+# Variables set when in the above environments
+my ($in_regular_env, $in_math_trans);
+my @Environments = qw($regenv_name $math_trans_name);
+
+# This word in a command's argument (in the syntax file) means that reLyX
+# should translate that argument as regular LaTeX
+my $Translate_Word = "translate";
+
+#########################  READ COMMAND SYNTAX  ################################
+sub read_syntax_files {
+# This subroutine calls the TeX parser & translator to read LaTeX syntax file(s)
+#    It sets the list of "regular" environments, environments which aren't known
+# by reLyX, but which contain text that reLyX can translate.
+#    It also reads math commands which should be translated (e.g., \sp -> ^)
+#
+# @_ contains the syntax file(s) to read
+
+    my @syntaxfiles = @_;
+
+# Before anything else, set the package-wide variables based on the
+#    user-given flags
+    # opt_d is set to 1 if '-d' option given, else (probably) undefined
+    my $debug_on = (defined($main::opt_d) && $main::opt_d);
+
+    # opt_r is a group of environments to copy like regular text
+    # If opt_r wasn't given, then there are no such special environments
+    @regular_env = (defined $main::opt_r ? (split(/,/, $main::opt_r)) : () );
+
+    # The only important commands to pass are \begin and \end, so that the
+    # parser realizes they start/end environments, as opposed to being
+    # regular old tokens.
+    my %MyTokens = ( '{' => $Text::TeX::Tokens{'{'},
+                     '}' => $Text::TeX::Tokens{'}'},
+                     '\begin' => $Text::TeX::Tokens{'\begin'},
+                     '\end' => $Text::TeX::Tokens{'\end'},
+    );
+    
+    my $InFileName;
+    foreach $InFileName (@syntaxfiles) {
+       die "could not find syntax file $InFileName" unless -e $InFileName;
+       my $zzz=$debug_on ? "from $InFileName " :"";
+       warn "Reading LaTeX command syntax $zzz\n";
+
+       # Open the file to turn into LyX.
+       my $infile = new Text::TeX::OpenFile $InFileName,
+           'defaultact' => \&read_commands,
+           'tokens' => \%MyTokens;
+
+       # When we start (each file), we're not reading regular environments yet
+       $in_regular_env = 0;
+
+       # Process the file
+       $infile->process;
+    }
+
+    if ($debug_on) {
+       print "Regular environments: @regular_env\n";
+       my @mathkeys = keys(%math_trans);
+       print "     Math command     |  translation\n" if @mathkeys;
+       foreach (@mathkeys) { printf("%20s       %s\n",$_,$math_trans{$_}) }
+    }
+
+    #warn "Done reading commands\n";
+    return;
+} # end subroutine call_parser
+
+sub read_commands {
+# This subroutine is called by Text::TeX::process
+# Arg0 is the token we just ate
+# Arg1 is the file object we're reading from
+#
+#    We create a hash, where each command is a key. The value is just a string
+# of zero or more 'o' and 'r' characters. Each 'o' stands for an optional
+# argument, 'r' stands for a required argument. 'R' stands for a required
+# argument whose text will be regular LaTeX, e.g., the argument to \mbox{}
+#    In addition, the $regenv_name environment contains
+# regular environments, like those input with the -r option.
+#    Note that if a command is found more than once, then it wil be overwritten.
+# This is a feature. This way, a user-defined syntax file can overwrite the
+# argument list found in the default syntax file.
+    my ($token,$fileobject) = (shift,shift);
+
+    my $type = ref($token);
+    $type =~ s/^Text::TeX::// or die "unknown token type $type from Text::TeX";
+    #print $token->exact_print, unless $type eq "Paragraph";
+    #print $token->comment if $token->comment;
+
+    # Because there's no token list, ALL tokens will be
+    #    Paragraph, Text, or Token
+    SWITCH: for ($type) {
+       # Handle blank lines.
+        if (/Paragraph/) {
+           # don't do anything
+           last SWITCH;
+
+        } elsif (/^Token/) {
+           # Comment in its own paragraph... skip
+           last SWITCH unless defined($token->print);
+
+           if ($in_math_trans) { # read translations of math commands
+               my $key = $token->print;
+               # Translation is whatever's in the argument to the token
+               # (There might be multiple tokens in there)
+               my @vals = $fileobject->eatBalanced->contents;
+               my $val = join ("", map {$_->exact_print} @vals);
+               $math_trans{$key} = $val;
+           
+           } else { # regular portion of syntax file
+               my ($dum2);
+               my $args = "";
+               # read while there are arguments
+               while (($dum2 = $fileobject->lookAheadToken) &&
+                      ($dum2 =~ /^[[{]$/)) {
+                   if ($dum2 eq '[') { #eat optional argument - assumed simple
+                       $fileobject->eatOptionalArgument;
+                       $args .= "o";
+                   } else {
+                       my $tok = $fileobject->eatBalanced or warn "bad group";
+                       if ($tok->exact_print eq $Translate_Word) {
+                           $args .= "R";
+                       } else {
+                           $args .= "r";
+                       }
+                   } # end if $dummy = [{
+               } # done reading command
+               $CommandHash{$token->print} = $args;
+           } # in math trans env or regular token?
+
+           last SWITCH;
+
+        } elsif (/^Begin::Group::Args/) {
+           my $env = $token->environment;
+           CASE: {
+               $in_regular_env = 1, last CASE if $env eq $regenv_name;
+               $in_math_trans = 1,  last CASE if $env eq $math_trans_name;
+               warn "Unknown environment $env in syntax file";
+           }
+
+        } elsif (/^End::Group::Args/) {
+           my $env = $token->environment;
+           CASE: {
+               $in_regular_env = 0, last CASE if $env eq $regenv_name;
+               $in_math_trans = 0,  last CASE if $env eq $math_trans_name;
+               warn "Unknown environment $env in syntax file";
+           }
+
+        } elsif (/^Text/) {
+           # don't do anything unless we're reading environments
+           if ($in_regular_env) {
+               my @new_envs = (split(/\s+/, $token->print));
+               @new_envs = grep ($_, @new_envs); # remove empty elements
+               push @regular_env,@new_envs;
+           }
+           last SWITCH;
+        } else {
+           die "unexpected token type $type";
+       }
+
+    } # end SWITCH
+
+} # end sub read_commands
+
+sub Merge {
+#    This sub creates a token list (which could be used to call a Text::TeX
+# parser) from %CommandHash, and merges it with the input token list
+#    If a command takes any required arguments, it will be a report_args,
+# but if it just takes an optional argument, it can stay a regular old token.
+# In either case, we insert a new field, "relyx_args", into the token list,
+# which is the expected order of arguments for that command. Even if there
+# are no args, we insert an empty relyx_args, so that we can differentiate
+# between a truly unknown token and a known token which takes no args.
+#
+# We don't allow a new command to override a command that already exists in
+# OldHash, i.e., one that was defined explicitly in the calling sub.
+#
+# Arg0 is a (reference to an) existing token list
+    my $OldHashRef = shift;
+
+    foreach (keys %CommandHash) {
+       my $val = $CommandHash{$_};
+       my ($entry, $count, @foo);
+        if (!exists $OldHashRef->{$_}) {
+           if ($count = scalar(@foo = ($val =~ /r/gi))) {
+               # TeX.pm will make this a TT::BegArgsToken and $count-1
+               #    TT::ArgTokens, followed by a TT::EndArgsToken
+               $OldHashRef->{$_} = {"Type" => 'report_args',
+                                    "count" => $count,
+                                    "relyx_args" => $val};
+           } else { # only non-required args
+               # Make it a regular TT::Token, but write relyx_args
+               #    (even if $val is "")
+               $OldHashRef->{$_} = {"relyx_args" => $val};
+           }
+       }
+    } # end foreach
+
+} # end sub Merge
+
+############################  READ LAYOUTS  ####################################
+sub read_layout_files {
+# This subroutine reads a textclass-specific layout file and all files
+# included in that file.
+#    It sets up the layout hash table. For each environment, it describes which
+# layout that environment refers to. It does the same for macros which
+# begin LyX layouts (e.g., \section)
+#    If we read a command that's not already in CommandHash, it means that this
+# layout has some commands that aren't in syntax.default. If so, we ASSUME
+# that the command takes just one required argument, and put it in
+# CommandHash, so that &Merge will eventually put these commands into the
+# token lists.
+#
+# TODO: we actually need to allow more sophisticated stuff. E.g. \foilhead
+# is converted to Foilhead or ShortFoilHead (foils.layout) depending on whether
+# the command has "r" or "or" arguments. Reading LatexParam (if it exists)
+# can help us with this.
+# Default is "r". Just unshift other args as you read them, since latexparam
+# is put in between macro & the argument
+# TODO: We need to store ToLayout s.t. we can have > 1 layout per command.
+# Maybe by default just have one layout, but if (ref(layout)) then read
+# more args & thereby figure out which layout?
+# 
+# Arg0 is the name of the documentclass
+    use FileHandle;
+    use File::Basename;
+    my $doc_class = shift;
+    my @filestack;
+    my $fh;
+    my $line;
+    # ToLayout{latexname} stores layout; so ReversHash{layout} = latexname
+    my %ReverseHash;
+    my $debug_on = (defined($main::opt_d) && $main::opt_d);
+
+    # look for layout file in $HOME/.lyx first, then system layouts directory
+    my $searchname = "$doc_class.layout";
+    my @searchdirs = ();
+    my $personal_layout = "$main::dot_lyxdir/layouts";
+    push(@searchdirs,$personal_layout) if -e $personal_layout;
+    my $system_layout = "$main::lyxdir/layouts";
+    # I guess this won't exist if running reLyX without installing...
+    # Of course, in that case, this will probably break
+    push(@searchdirs,$system_layout) if -e $system_layout;
+    my @foundfiles = grep(-e "$_/$searchname", @searchdirs) or
+          die "Cannot find layout file $searchname in dir(s) @searchdirs";
+    my $LayoutFileName = "$foundfiles[0]/$searchname"; # take first one we found
+
+    $fh = new FileHandle;
+    $fh->open ("<$LayoutFileName");
+    my $zzz=$debug_on ? "$LayoutFileName" :"";
+    warn "Reading layout file $zzz\n";
+    push @filestack, $fh;
+
+    # Read the layout file!
+    my ($lyxname, $latexname, $latextype, $latexparam, $keepempty);
+    my $fname;
+    while() {
+       # Read a line. If eof, pop the filestack to return to the file
+       #    that included this file *or* finish if the stack's empty
+        unless (defined ($line = <$fh>)) {
+           $fh->close;
+           pop @filestack;
+           last unless ($#filestack+1); # finish when stack is empty
+           $fh = $filestack[-1];
+           next; # read another line from the "calling" file
+       }
+
+       # Skip blank lines
+       next if $line =~ /^\s*$/;
+
+       # Split the line. Use limit 2 since there may be whitespace in 2nd term
+       my ($field_name, $field_stuff) = split(' ', $line, 2);
+       $field_name = lc($field_name); # LyX is case insensitive for fields
+       if (defined($field_stuff)) {
+           $field_stuff =~ s/^\"(.*)\"/$1/;
+           chomp ($field_stuff);
+           # Since split is limited to 2 fields, there may be extra whitespace
+           # at end. LyX breaks on a "\layout Abstract " command!
+           $field_stuff =~ s/\s*$//;
+       }
+
+       # This set of ifs deals with lines outside a style definition
+       if ($field_name eq "style") { # start a style definition
+           $lyxname = $field_stuff;
+           # Styles in LyX have spaces, but _ in layout files
+           $lyxname =~ s/_/ /g;
+           $latexname  = ""; # make sure these variables are unset
+           $latextype  = "";
+           $latexparam = "";
+           $keepempty = 0;
+       } elsif ($field_name eq "input") { #include a file
+           $searchname = $field_stuff;
+           @foundfiles = grep(-e "$_/$searchname", @searchdirs) or
+             die "Cannot find layout file $searchname in dir(s) @searchdirs";
+           $fname = "$foundfiles[0]/$searchname"; # take first one we found
+           $fh = new FileHandle;
+           push @filestack, $fh;
+           $fh->open("<$fname");
+           print "Reading included layout file $fname\n" if $debug_on;
+       }
+
+       next unless $lyxname; # not w/in style definition
+
+       # This set of ifs deals with lines within a Style definition
+       if ($field_name eq "latexname") {
+           $latexname = $field_stuff;
+           next;
+       } elsif ($field_name eq "latexparam") {
+           #$dum = $field_stuff;
+           $latexparam = $field_stuff;
+           next;
+       } elsif ($field_name eq "latextype") {
+           $latextype = $field_stuff;
+           next;
+       } elsif ($field_name eq "keepempty") {
+           $keepempty = $field_stuff;
+           next;
+       } elsif ($field_name eq "copystyle") { # copy an existing style
+           # "if" is necessary in case someone tries "CopyStyle Standard"
+           if (exists $ReverseHash{$field_stuff}) {
+               my $layref = $ReverseHash{$field_stuff};
+               $latexname  = $layref->{"name"};
+               $latextype  = $layref->{"type"};
+               $latexparam = $layref->{"param"};
+               $keepempty = $layref->{"keepempty"};
+           }
+
+       # When you get to the end of a definition, create hash table entries
+       #    (if you've found the right information)
+       } elsif ($field_name eq "end") {
+
+           if ($latextype and $latexname) {
+               # Create reverse hash entry (needed for CopyStyle)
+               # Do it before making modifications to $latexname, e.g.
+               $ReverseHash{$lyxname} = {"name"  => $latexname,
+                                         "type"  => $latextype,
+                                         "param" => $latexparam,
+                                         "keepempty" => $keepempty,
+                                         };
+
+               my ($nest, $skip) = (0,0);
+               for ($latextype) { # make $_=$latextype
+                   if (/^Command/) {
+                       # Macros need a '\' before them. Environments don't
+                       $latexname = '\\' . $latexname;
+
+                       # Create the command if it wasn't in syntax.default
+                       unless (exists $CommandHash{$latexname}) {
+                           $CommandHash{$latexname} = "r";
+                       }
+
+                   } elsif (/^Environment/) {
+                       $nest = 1;
+                   } elsif (/Item_Environment/i || /List_Environment/) {
+                       $nest = 1;
+
+                   # layout Standard has LatexType Paragraph. It shouldn't
+                   #    have any hash entry at all
+                   } elsif (/^Paragraph$/) {
+                       $skip = 1;
+                   } else {
+                       warn "unknown LatexType $latextype" . 
+                            "for $latexname (layout $lyxname)!\n";
+                   }
+           # Handle latexparam, if any
+#          if ($dum =~ s/^"(.*)"/$1/) { # newer layout file syntax
+#              while ($dum =~ /^[[{]/) {
+#                  $dum =~ s/\[.*?\]// && ($latexargs = "o$latexargs") or
+#                  $dum =~ s/\{.*?\}// && ($latexargs = "r$latexargs");
+#              }
+#              warn "leftover LatexParam stuff $dum" if $dum;
+#          } else { # 0.12.0
+#              if ($latextype eq "Command") {optarg}
+#              else {req. arg}
+#          }
+               } #end for
+
+               # Create the hash entry
+               unless ($skip) {
+                   $ToLayout->{$latexname} = {"layout" => $lyxname,
+                                               "nestable" => $nest,
+                                               "keepempty" => $keepempty};
+               }
+
+               # Now that we've finished the style, unset $lyxname so that
+               #     we'll skip lines until the next style definition
+               $lyxname = "";
+           } # end if ($latextype and $latexname)
+       } # end if on $line
+           
+    } #end while
+
+## Print every known layout
+#    print "     LatexName            Layout        Keepempty?\n";
+#    foreach (sort keys %$ToLayout) {
+#        printf "%20s%15s     %1d\n",$_,$ToLayout->{$_}{'layout'},
+#            $ToLayout->{$_}{'keepempty'};
+#    };
+    #warn "Done reading layout files\n";
+    return;
+} # end sub read_layout_files
+
+
+
+1; # return TRUE to calling routine
diff --git a/lib/reLyX/RelyxFigure.pm b/lib/reLyX/RelyxFigure.pm
new file mode 100644 (file)
index 0000000..0ca8354
--- /dev/null
@@ -0,0 +1,291 @@
+# This file is part of reLyX
+# Copyright (c) 1998-9 Amir Karger karger@post.harvard.edu
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+
+package RelyxFigure;
+
+# This is a package to read LaTeX figures and print out LyX figures
+
+
+# We declare here the sub-packages found in this package.
+# This allows the parser to understand "indirect object" form of subroutines
+#{
+#package RelyxTable::Table;
+#package RelyxTable::Column;
+#package RelyxTable::Row;
+#}
+
+use strict;
+
+# Variables used by other packages
+use vars qw($EpsfYsize $EpsfXsize %HW_types);
+
+# Debugging on?
+my $debug_on;
+
+# This means "display in monochrome" and "do translations", but who cares?
+# It's just here because this is the default that LyX outputs.
+my $Default_Flags = 9;
+
+# Names for width_type & height_type fields.
+%HW_types = (
+    "def"     => 0,
+    "cm"     => 1,
+    "in"     => 2,
+    "per_page" => 3,  # percent of the page
+    "per_col"  => 4,  # percent of a column (illegal for height_type)
+);
+
+# Parse \epsfxsize or \epsfysize command
+# Return 0 if we can't convert the length (in which case we have to type
+# the \epsf[xy]size command in tex mode).
+sub parse_epsfsize {
+    # Command & length have already been "stringified" (they're not tokens)
+    my ($command, $length) = (shift,shift);
+    if ($command eq '\\epsfxsize') {
+        $EpsfXsize = $length;
+       my @dummy = &convert_length($EpsfXsize) || return 0;
+    } elsif ($command eq '\\epsfysize') {
+        $EpsfYsize = $length;
+       my @dummy = &convert_length($EpsfXsize) || return 0;
+    }
+
+    return 1;
+} # end sub RelyxFIgure::Figure::parse_epsfig
+
+sub convert_length {
+    # test if it's a valid LyX width/height.
+    # (But assume a person won't try to set width to \textheight,
+    # and that they won't have negative or otherwise weird lengths)
+    # Then convert to width & width_type (or height/height_type)
+    # Return empty list on error
+    my $size = shift;
+
+    # A length can be (optional plus followed by) (num)(unit) where 
+    # num is a float number (possibly with European command) and unit
+    # is a size unit, either in,cm,pt etc. or \textwidth etc.
+    my %unit_convert = (  # 1 inch = 25.4 mm
+        "mm" => 25.4, "pt" => 72.27, "bp" => 72, "pc" => 72.27/12,
+       "dd" => 72.27*1157/1238, "cc" => 72.27*1157/(1238*12),
+    );
+    my ($number, $type);
+    if ($size =~ /^\+?([\d.,]+)(cm|in)$/) {
+        ($number, $type) = ($1, $2);
+       $number =~ s/,/./; # Allow european numbers!
+       # print "length is $number '$type'";
+    } elsif ($size =~ /^\+?([\d.,]+)(mm|pt|bp|pc|dd|cc)$/) {
+        ($number, $type) = ($1, $2);
+       $number =~ s/,/./;
+       $number = $number / $unit_convert{$type};
+       $type = "in";
+    } elsif ($size =~ /^\+?([\d.,]*)\s*\\text(height|width)$/) {
+        $number = $1 || 1;
+       $number =~ s/,/./;
+       $number *= 100;
+       $type = "per_page";
+    } elsif ($size =~ /^\+?([\d.,]*)\s*\\columnwidth$/) {
+        $number = $1 || 1;
+       $number =~ s/,/./;
+       $number *= 100;
+       $type = "per_col";
+    } else {
+       print "\ncannot translate length '$size' in Figure; ",
+             "copying in TeX mode\n" if $debug_on;
+    }
+
+    if ($number) {
+        return ($number, $type);
+    } else {
+       return ();
+    }
+} # end sub convert_length
+
+sub parse_keyval {
+# Parse a string containing comma-separated "key=value" pairs
+# Compare the keys with a list of known keys.
+# If we know all keys, return a hash containing keys/values
+# Else return undef.
+    my ($string, @known_keys) = @_;
+    my @fields = split(/\s*,\s*/,$string);
+    my %fighash;
+    foreach (@fields) { # split "key=val" into fighash{key}=val
+       my ($key,$val) = split(/\s*=\s*/,$_);
+       $val = "" unless defined $val; # e.g., 'clip='
+       $fighash{$key} = $val;
+
+       unless (grep /^$key$/, @known_keys)  {
+           print "\nUntranslatable key '$key' to figure;",
+                 " copying in TeX mode\n" if $debug_on;
+           return undef;
+       }
+    }
+
+    return \%fighash;
+} # end sub parse_keyval
+
+
+
+{
+    package RelyxFigure::Figure;
+    # reLyX figure class
+    # Fields:
+    #    file        - file name
+    #    width       - width
+    #    height      - height
+    #    width_type  - is width in cm, % of pagewidth, etc.?
+    #    height_type - is height in cm, % of pagewidth, etc.?
+    #    angle       - rotate fig through angle
+    #    flags       - various flags for LyX display. Not important
+
+    sub new {
+        my $class = shift;
+       my $thisfig;
+       $thisfig->{'file'} = "";
+       $thisfig->{'width'} = 0;
+       $thisfig->{'height'} = 0;
+       $thisfig->{'width_type'} = "def";
+       $thisfig->{'height_type'} = "def";
+       $thisfig->{'angle'} = 0;
+       $thisfig->{'flags'} = $Default_Flags;
+        # This seems like a convenient place to declare this...
+        $debug_on= (defined($main::opt_d) && $main::opt_d);
+
+       bless $thisfig, $class;
+    } # end sub RelyxFigure::Figure::new
+
+
+    sub parse_pscommand {
+    # this sub is given the various arguments to a command & adds that
+    # information to the figure object.
+    # Return 0 if it can't read the command, or if LyX can't handle it. Else 1.
+    #
+    # command is the name of the postscript command
+    # optargs are optional arguments (TT:Tokens). For many of the commands,
+    #    only one optarg is allowed. And of course, they may be empty tokens.
+    # reqarg is usually the filename (for (e)psfig, it's more)
+    #
+    # Currently, LyX can't handle bounding box, so we always return 0 if one
+    # is given.
+        my ($self, $command, $optarg1, $optarg2, $reqarg) = @_;
+       my (@known_keys, $filename, $keyval_string, %fighash);
+
+       for ($command) {
+            if (/^\\epsf(file|box)?$/) {
+               # syntax: \epsffile[bounding box]{filename.eps}
+               # epsffile is an older version of epsfbox
+               return 0 if $optarg1->print; # bounding box was given. Panic!
+               $filename = &recursive_print($reqarg);
+               # fighash key shouldn't exist if no size was given
+               $fighash{'height'} = $RelyxFigure::EpsfYsize 
+                   if $RelyxFigure::EpsfYsize;
+               $fighash{'width'} = $RelyxFigure::EpsfXsize
+                   if $RelyxFigure::EpsfXsize;
+               # Once you use \epsf[xy]size, they get reset
+               $RelyxFigure::EpsfXsize = $RelyxFigure::EpsfYsize = "";
+               $keyval_string = ""; # no key/value pairs for this command
+
+           } elsif (/^\\e?psfig$/) {
+               # "silent" key doesn't do anything
+               @known_keys = qw(file figure rotate angle height width silent);
+               $keyval_string = &recursive_print($reqarg);
+               my $fighashref = 
+                       &RelyxFigure::parse_keyval($keyval_string, @known_keys);
+               return 0 unless defined $fighashref; # found unknown key...
+               %fighash = %$fighashref;
+
+               $filename = $fighash{'file'} || $fighash{'figure'} || warn
+                   "no filename found in figure argument '$keyval_string'";
+
+           } elsif (/^\\includegraphics$/) {
+               # 0 optargs can be either graphics or graphicx. Doesn't
+               # matter, matter, it's just the filename.
+               #    1 optarg can either be graphicx (if arg contains '=') or
+               # graphics (optarg is upper right; lower left is 0,0).
+               #    2 optargs is graphics with bounding box.
+
+               # Optional arguments are always returned as single tokens,
+               # not groups. So we can use the print method instead of
+               # recursive_print.
+               $keyval_string = $optarg1->print;
+               if ($keyval_string) {
+                   if ($keyval_string =~ /=/) { # graphicx form
+                       $keyval_string =~ s/\[(.*)\]/$1/; # remove '[' and ']'
+                       @known_keys = qw(rotate angle height width);
+                       my $fighashref = &RelyxFigure::parse_keyval(
+                                       $keyval_string, @known_keys);
+                       return 0 unless defined $fighashref; # found unknown key
+                       %fighash = %$fighashref;
+
+                   } else { # graphics form with bounding box
+                       print "\nLyX cannot support bounding box; ",
+                             "copying Figure in TeX mode\n" if $debug_on;
+                       return 0;
+                   }
+               }
+
+               $filename = &recursive_print($reqarg);
+
+           }
+       } # end switch on command name
+
+       # Now set fields in the Figure object
+       $self->{'file'} = $filename;
+       $self->{'angle'} = $fighash{'rotate'} if exists $fighash{'rotate'};
+       $self->{'angle'} = $fighash{'angle'} if exists $fighash{'angle'};
+       if (exists $fighash{'height'}) {
+           my @heights = &RelyxFigure::convert_length($fighash{'height'});
+           return 0 unless @heights; # unconvertable length!
+           ($self->{'height'},$self->{'height_type'}) = @heights;
+       }
+       if (exists $fighash{'width'}) {
+           my @widths = &RelyxFigure::convert_length($fighash{'width'});
+           return 0 unless @widths; # unconvertable length!
+           ($self->{'width'},$self->{'width_type'}) = @widths;
+       }
+
+       return 1; # if we got here, we parsed correctly and LyX can handle it.
+    } # end sub RelyxFigure::Figure::parse_pscommand
+
+    sub recursive_print {
+       # if arg is a group, print its contents (i.e., ignore '{' and '}')
+       # otherwise, print arg
+       my $tok = shift;
+       my $filename = "";
+       my $type = ref($tok);
+       $type =~ s/Text::TeX::// or warn "weird group";
+       if ($type eq 'Group') {
+           foreach ($tok->contents) {$filename .= &recursive_print($_)}
+       } else {
+           $filename .= $tok->exact_print
+       }
+       return $filename;
+    }
+
+    sub print_info {
+        # LyX figure command -- return what to print; don't actually print it
+        my $self = shift;
+
+       my $to_print = "\n\\begin_inset Figure\n";
+       # (LyX fig. command has eps size here. But we don't know that, so
+       # we dont print it out.)
+
+       $to_print .= "file $self->{'file'}\n";
+       my ($size, $type) = ("","");
+       ($size, $type) = ($self->{'width'}, 
+                         $RelyxFigure::HW_types{$self->{'width_type'}});
+       $to_print .= "width $type $size\n" if $size;
+       ($size, $type) = ("","");
+       ($size, $type) = ($self->{'height'}, 
+                         $RelyxFigure::HW_types{$self->{'height_type'}});
+       $to_print .= "height $type $size\n" if $size;
+       $to_print .= "angle $self->{'angle'}\n" if $self->{'angle'};
+       $to_print .= "flags $self->{'flags'}\n";
+
+       $to_print .= "\n\\end_inset \n\n";
+        
+    } # end sub RelyxFigure::Figure::print
+
+} # end of package RelyxFigure::Figure
+
+1; # return true to calling package
diff --git a/lib/reLyX/RelyxTable.pm b/lib/reLyX/RelyxTable.pm
new file mode 100644 (file)
index 0000000..3bf797b
--- /dev/null
@@ -0,0 +1,596 @@
+# This file is part of reLyX
+# Copyright (c) 1998-9 Amir Karger karger@post.harvard.edu
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+
+package RelyxTable;
+
+# This is a package to read LaTeX tables and print out LyX tables
+
+
+# We declare here the sub-packages found in this package.
+# This allows the parser to understand "indirect object" form of subroutines
+{
+package RelyxTable::Table;
+package RelyxTable::Column;
+package RelyxTable::Row;
+}
+
+use strict;
+
+# Variables used by other packages
+use vars qw(@table_array $TableBeginString $TableEndString);
+# @table_array is the list of all arrays
+# $TableBeginString is a string to write during one pass so that a later
+#     pass knows to put the table info there
+# $TableEndString is written at the end of the table so that we know
+#     the table is done
+$TableBeginString = '%%%%%Insert reLyX table here!';
+$TableEndString =   '%%%%%End of reLyX table!';
+
+# Debugging on?
+my $debug_on;
+
+# Are we currently inside a table?
+# If we are, return the table
+sub in_table {
+    return "" unless defined(@table_array); # no tables exist
+    my $thistable = $table_array[-1];
+    if ($thistable->{"active"}) {
+        return (bless $thistable, "RelyxTable::Table");
+    } else {
+        return "";
+    }
+}
+
+
+# Global variables###############
+# LyX' enums corresponding to table alignments
+my %TableAlignments = ("l" => 2, "r" => 4, "c" => 8);
+# LyX' enums corresponding to multicol types
+#    normal (non-multicol) cell, beginning of a multicol, part of a multicol
+my %MulticolumnTypes = ("normal" => 0, "begin" => 1, "part" => 2);
+
+# Subroutines used by tables and rows, e.g.
+sub parse_cols {
+# parse a table's columns' description
+# Returns an array where each element is one column description
+# arg0 is the description -- a Text::TeX::Group
+    my $groupref = shift;
+    my (@cols, @new_cols);
+    my ($tok, $description, $i);
+
+    # tokens in the group, not including '{' and '}'
+    my @group = $groupref->contents;
+
+    # Loop over the token(s) in the group
+    my $first = ""; my $tempfirst;
+    while (@group) {
+
+       $tok = shift(@group);
+       # Each $tok will consist of /^[clr|]*[p*@]?$/
+       # (Except first may have | and/or @ expressions before it)
+       # p*@ will end the $tok since after it comes a group in braces
+       # @ will be a TT::Token, everything else will be in TT::Text
+       $description = $tok->print;
+
+       # Chop off left lines for first column if any
+       ($tempfirst = $description) =~ s/(\|*).*/$1/;
+       if ($#cols == -1) { # |'s before any column description
+           $first .= $tempfirst;
+       } else {
+           $cols[-1] .= $tempfirst; # add it to end of current col
+       }
+
+       # Greedy searches, so only 0th column can possibly have left line
+       @new_cols = ($description =~ /[clr]\|*/g);
+       push @cols, @new_cols;
+
+       # parse a p or * or @ if necessary
+       # use exact_print in case there's weird stuff in the @ descriptions
+       $description = substr($description,-1);
+       if ($description eq 'p') {
+           $tok = shift(@group);
+           my $pdes = $description . $tok->exact_print; # "p{foo}"
+           push @cols, $pdes;
+
+       } elsif ($description eq '@') {
+           $tok = shift(@group);
+           my $atdes = $description . $tok->exact_print;
+           if ($#cols == -1) { # it's an @ before any column description
+               $first .= $atdes;
+           } else {
+               $cols[-1] .= $atdes; # add it to end of current col
+           }
+
+       } elsif ($description eq '*') {
+
+           $tok = shift(@group); # TT::Group with number of repeats in it
+           my $rep = $tok->contents->print;
+           $tok = shift(@group); # Group to repeat $rep times
+           @new_cols = &parse_cols($tok);
+           foreach $i (1 .. $rep) {
+               push @cols, @new_cols;
+           }
+       }
+    } # end loop over description tokens
+
+    # this handles description like {|*{3}{c}}
+    $cols[0] = $first . $cols[0];
+
+    return @cols;
+} # end sub parse_cols
+
+################################################################################
+# This package handles tables for reLyX
+
+{
+    package RelyxTable::Table;
+    # Table class
+    # Fields:
+    #    columns - array containing references to RelyxTable::Columns
+    #    rows    - array containing references to RelyxTable::Rows
+    #    active  - are we currently reading this table?
+    # Fields for printout
+    #   is_long_table
+    #   rotate
+    #   endhead
+    #   end_first_head
+    #   endfoot
+    #   end_last_foot
+
+
+# Subroutines to read and create the table
+    sub new {
+    # 'new' takes an argument containing the LaTeX table description string,
+    #    which is a Text::TeX::Group token
+
+       my $class = shift; # should be "table"
+       my $description = shift;
+       my $thistable;
+       # This seems like a convenient place to declare this...
+       $debug_on= (defined($main::opt_d) && $main::opt_d);
+
+       # Initialize fields - including ones we don't support yet
+       $thistable->{"is_long_table"} = 0;
+       $thistable->{"rotate"} = 0;
+       $thistable->{"endhead"} = 0;
+       $thistable->{"end_first_head"} = 0;
+       $thistable->{"endfoot"} = 0;
+       $thistable->{"end_last_foot"} = 0;
+       $thistable->{"active"} = 1;
+
+       bless $thistable, $class;
+
+       # Parse the column descriptions: return an array, where each
+       #    element is a (regular text) single column description
+       my @cols = &RelyxTable::parse_cols($description);
+       my $colref;
+       my $col_description;
+       foreach $col_description (@cols) {
+           $colref = new RelyxTable::Column $col_description;
+           push @{$thistable->{"columns"}}, $colref;
+       }
+       # put the table into the table array
+       push @RelyxTable::table_array, $thistable;
+
+
+       # Now that it's blessed, put the 0th row into the table 
+       $thistable->addrow;
+
+       return $thistable;
+    } # end sub new
+
+    sub addrow {
+    # add a row to the table
+    # Since we're starting the row, we're in the 0th column
+       my $thistable = shift;
+       my $row = new RelyxTable::Row;
+       push (@{$thistable->{"rows"}}, $row);
+
+       # Also initialize the cells for this row
+       my $col;
+       foreach $col (@{$thistable->{"columns"}}) {
+           push (@{$row->{"cells"}}, RelyxTable::Cell->new($row, $col));
+       }
+    } # end sub addrow
+
+    sub nextcol {
+    # Go to next column - this just involves calling RT::Row->nextcol
+    #    on the current row
+       my $thistable = shift;
+       my $row = $thistable->current_row;
+       $row->nextcol;
+    } # end of sub nextcol
+
+    sub hcline {
+    # interpret an '\hline' or '\cline' command
+    # (It's cline if there's an arg1)
+    # hline:
+    # Add a bottom line to the row *before* the current row, unless it's
+    #    the top row. In that case, add a top line to the current (top) row
+    # Change the row and all the cells that make up the row
+    # cline:
+    # Change the cells from the row in the range given in arg1
+       my $thistable = shift;
+       my $range = shift;
+       my $is_cline = defined($range);
+       my ($rownum, $line_str, $lastrow, $cell);
+
+       if ($lastrow = $thistable->numrows - 1) { # not top row
+           $rownum = $lastrow - 1;
+           $line_str = "bottom_line";
+       } else {
+           $rownum = $lastrow;
+           $line_str = "top_line";
+       }
+
+       my $row = $thistable->{"rows"}[$rownum];
+       # Add a row line (only) if it's a \hline command
+       unless ($is_cline) {
+           $row->{"$line_str"} +=1;
+           if (defined($main::opt_d) && $row->{"$line_str"} == 2) {
+               print "\nToo many \\hline's";
+           }
+       }
+
+       # Figure out which rows to change
+       my ($r1, $r2);
+       if ($is_cline) {
+           $range =~ /(\d+)-(\d+)/ or warn "weird \\cline range";
+           # LaTeX numbers columns from 1, we number from 0
+           ($r1, $r2) = ($1 - 1, $2 - 1);
+       } else {
+           $r1 = 0;
+           $r2 = $thistable->numcols - 1;
+       }
+
+       my $i;
+       foreach $i ($r1 .. $r2) {
+           $cell = $row->{"cells"}[$i];
+           $cell->{"$line_str"} +=1; # change the cells in the row
+       }
+    } # end sub hline
+
+    sub multicolumn {
+    # interpret a \multicolumn command
+    # This really just needs to call RT::Row->multicolumn for the correct row
+       my $thistable = shift;
+        my $row = $thistable->current_row;
+       $row->multicolumn(@_);
+    } # end sub multicolumn
+
+    sub done_reading {
+    # Finished reading a table
+        my $thistable = shift;
+       # If we just had \hlines at the end, it's not a real row
+       # But if numcols==1, curr_col *has* to be zero!
+       # HACK HACK HACK. If numcols==1 but we need to subtract a row, we
+       # won't know until LastLyX. At that point, we'll subtract a row.
+        my $row = $thistable->current_row;
+       if ($thistable->numcols > 1 && $row->{"curr_col"} == 0) {
+           pop @{$thistable->{"rows"}}
+       }
+
+       # We're no longer reading this table
+       $thistable->{"active"} = 0;
+
+       if ($debug_on) {
+           print "\nDone with table ",$#RelyxTable::table_array,", which has ",
+               $thistable->numrows," rows and ",
+               $thistable->numcols," columns";
+           print"\nNumber of rows may be 1 too high" if $thistable->numcols==1;
+       }
+    } # end sub done_reading
+
+# Subroutines to print out the table once it's created
+    sub print_info {
+        # print the header information for this table
+       my $thistable = shift;
+        my $to_print = "";
+       $to_print .= "\n\\LyXTable\nmulticol5\n";
+       my @arr = ($thistable->numrows,
+                   $thistable->numcols,
+                   $thistable->{"is_long_table"},
+                   $thistable->{"rotate"},
+                   $thistable->{"endhead"},
+                   $thistable->{"end_first_head"},
+                   $thistable->{"endfoot"},
+                   $thistable->{"end_last_foot"}
+                 );
+       $to_print .= join(" ",@arr);
+       $to_print .= "\n";
+
+       # Print row info
+       my $row;
+       foreach $row (@{$thistable->{"rows"}}) {
+           $to_print .= $row->print_info;
+       }
+
+       # Print column info
+       my $col;
+       foreach $col (@{$thistable->{"columns"}}) {
+           $to_print .= $col->print_info;
+       }
+                  
+       # Print cell info
+       my $cell;
+       foreach $row (@{$thistable->{"rows"}}) {
+           my $count = 0;
+           foreach $col (@{$thistable->{"columns"}}) {
+               $cell = $row->{"cells"}[$count];
+               $count++;
+               $to_print .= $cell->print_info;
+           }
+       }
+
+       $to_print .= "\n";
+
+       return $to_print;
+    } # end sub print_info
+
+# Convenient subroutines
+    sub numrows {
+       my $thistable = shift;
+        return $#{$thistable->{"rows"}} + 1;
+    } # end sub numrows
+
+    sub numcols {
+       my $thistable = shift;
+        return $#{$thistable->{"columns"}} + 1;
+    } # end sub numrows
+
+    sub current_row {
+    # Return the current row blessed as an RT::Row
+        my $thistable = shift;
+       my $row = $thistable->{"rows"}[-1];
+       bless $row, "RelyxTable::Row"; #... and return it
+    } # end sub current_row
+
+} # end package RelyxTable::Table
+
+################################################################################
+
+{
+# Column class
+package RelyxTable::Column;
+
+# Fields:
+#    alignment - left, right, or center (l, r, or c)
+#    right_line- How many lines this column has to its right
+#    left_line - How many lines this column has to its left
+#                (only first column can have left lines!)
+#    pwidth    - width argument to a 'p' alignment command -- e.g., 10cm
+#    special   - special column description that lyx can't handle
+
+    sub new {
+       my $class = shift;
+       my $description = shift;
+       my $col;
+
+       # Initially zero everything, since we set different 
+       # fields for @ and non-@ columns
+       $col->{"alignment"} = "c";  # default
+       $col->{"left_line"} = 0;
+       $col->{"right_line"} = 0;
+       $col->{"pwidth"} = "";
+       $col->{"special"} = "";
+
+       # Any special (@) column should be handled differently
+       if ($description =~ /\@/) {
+          # Just put the whole description in "special" field --- this
+          # corresponds the the "extra" field in LyX table popup
+          # Note that LyX ignores alignment, r/l lines for a special column
+          $col->{"special"} = $description;
+          print "\n'$description' column won't display WYSIWYG in LyX\n"
+                                                           if $debug_on;
+
+       # It's not a special @ column
+       } else {
+
+           # left line?
+           $description =~ s/^\|*//;
+           $col->{"left_line"} = length($&);
+
+           # main column description
+           $description =~ s/^[clrp]//;
+           if ($& eq "p") {
+               $description =~ s/^\{(.+)\}//; # eat the width
+               $col->{"pwidth"} = $1; # width without braces
+               # note: alignment is not applicable for 'p' columns
+           } else {
+               $col->{"alignment"} = $&;
+           }
+
+           # right line?
+           $description =~ s/^\|*//;
+           $col->{"right_line"} = length($&);
+       }
+
+       bless $col, $class; #... and return it
+    } # end sub new
+
+    sub print_info {
+    # print out header information for this column
+    # Note that we need to put "" around pwidth and special for multicol5 format
+       my $col = shift;
+        my $to_print = "";
+       my @arr = ($TableAlignments{$col->{"alignment"}},
+                     $col->{"left_line"},
+                     $col->{"right_line"},
+                     '"' . $col->{"pwidth"} . '"',
+                     '"' . $col->{"special"} . '"'
+                   );
+       $to_print .= join(" ",@arr);
+       $to_print .= "\n";
+                  
+       return $to_print;
+    }
+} # end package RelyxTable::Column
+
+################################################################################
+
+{
+package RelyxTable::Row;
+# Fields:
+#    top_line    - does this row have a top line?
+#    bottom_line - does this row have a bottom line?
+#    curr_col    - which column we're currently dealing with
+#    cells       - array containing references to this row's cells
+
+    sub new {
+       my $class = shift;
+       my $row;
+       $row->{"top_line"} = 0;
+       $row->{"bottom_line"} = 0;
+       $row->{"is_cont_row"} = 0;
+       $row->{"newpage"} = 0;
+       $row->{"curr_col"} = 0;
+
+       bless $row, $class;
+    } # end sub new
+
+    sub nextcol {
+    # Go to next column on the current row
+       my $row = shift;
+       my $i = $row->{"curr_col"};
+       $i++;
+
+       # What if it was a multicolumn?
+       $i++ while ${$row->{"cells"}}[$i]->{"multicolumn"} eq "part";
+
+       $row->{"curr_col"} = $i;
+    } # end of sub nextcol
+
+    sub multicolumn {
+    # interpret a \multicolumn command
+    # Arg0 is the row that the multicolumn is in
+    # Arg 1 is the first argument to \multicolumn, simply a number (no braces)
+    # Arg 2 is the second argument, which is a TT::Group column specification
+        my $row = shift;
+       my ($num_cols, $coldes) = (shift, shift);
+
+       # parse_cols warns about @{} expressions, which aren't WYSIWYG
+       # and turns the description into a simple string
+       my @dum = &RelyxTable::parse_cols($coldes);
+       # LaTeX multicolumn description can only describe one column...
+       warn "Strange multicolumn description $coldes" if $#dum;
+       my $description = $dum[0];
+
+       # Set the first cell
+       my $firstcell = $row->{"curr_col"};
+       my $cell = $row->{"cells"}[$firstcell];
+       $cell->{"multicolumn"} = "begin";
+       # Simple descriptions use alignment field, others use special
+       #    Special isn't WYSIWYG in LyX -- currently, LyX can't display
+       #    '|' or @{} stuff in multicolumns
+       if ($description =~ /^[clr]$/) {
+           $cell->{"alignment"} = $description;
+       } else {
+           $cell->{"special"} = $description;
+           print "\n'$description' multicolumn won't display WYSIWYG in LyX\n"
+                                                        if $debug_on;
+       }
+
+       # Set other cells
+       my $i;
+       foreach $i (1 .. $num_cols-1) {
+           $cell = $row->{"cells"}[$firstcell + $i];
+           $cell->{"multicolumn"} = "part";
+       }
+
+    } # end sub multicolumn
+
+    sub print_info {
+    # print information for this column
+       my $row = shift;
+        my $to_print = "";
+       my @arr = ($row->{"top_line"},
+                       $row->{"bottom_line"},
+                       $row->{"is_cont_row"},
+                       $row->{"newpage"}
+                   );
+       $to_print .= join(" ",@arr);
+       $to_print .= "\n";
+                  
+       return $to_print;
+    } # end sub print_info
+
+} # end package RelyxTable::Row
+
+################################################################################
+
+{
+package RelyxTable::Cell;
+# Fields:
+#    multicolumn - 0 (regular cell), 1 (beg. of multicol), 2 (part of multicol)
+#    alignment   - alignment of this cell
+#    top_line    - does the cell have a line on the top?
+#    bottom_line - does the cell have a line on the bottom?
+#    has_cont_row- 
+#    rotate      - rotate cell?
+#    line_breaks - cell has line breaks in it (???)
+#    special     - does this multicol have a special description (@ commands?)
+#    pwidth      - pwidth of this cell for a parbox command (for linebreaks)
+
+    sub new {
+    # args 1 and 2 are the parent row and column of this cell
+       my $class = shift;
+       my ($parent_row, $parent_col) = (shift, shift);
+       my $cell;
+       $cell->{"multicolumn"} = "normal"; # by default, it isn't a multicol
+       $cell->{"alignment"} = "l"; # doesn't really matter: will be reset soon
+       $cell->{"top_line"} = 0;
+       $cell->{"bottom_line"} = 0;
+       $cell->{"has_cont_row"} = 0;
+       $cell->{"rotate"} = 0;
+       $cell->{"line_breaks"} = 0;
+       $cell->{"special"} = "";
+       $cell->{"pwidth"} = "";
+
+       # Have to bless $cell here, so that we can call methods on it
+        bless $cell, $class;
+
+       # The cell should inherit characteristics from its parent row & col
+       $cell->row_inherit($parent_row);
+       $cell->col_inherit($parent_col);
+
+       return $cell;
+    } # end sub new
+
+    sub row_inherit {
+    # Inherit fields from parent row
+        my ($cell, $row) = (shift, shift);
+       $cell->{"top_line"} = $row->{"top_line"};
+       $cell->{"bottom_line"} = $row->{"bottom_line"};
+    } # end sub row_inherit
+
+    sub col_inherit {
+    # Inherit field(s) from parent column
+        my ($cell, $col) = (shift, shift);
+       $cell->{"alignment"} = $col->{"alignment"};
+    }
+
+    sub print_info {
+    # print information for this cell
+    # Note that we need to put "" around pwidth and special for multicol5 format
+       my $cell = shift;
+        my $to_print = "";
+       my @arr = ($MulticolumnTypes{$cell->{"multicolumn"}},
+                       $TableAlignments{$cell->{"alignment"}},
+                       $cell->{"top_line"},
+                       $cell->{"bottom_line"},
+                       $cell->{"has_cont_row"},
+                       $cell->{"rotate"},
+                       $cell->{"line_breaks"},
+                     '"' . $cell->{"special"} . '"',
+                     '"' . $cell->{"pwidth"} . '"',
+                   );
+       $to_print .= join(" ",@arr);
+       $to_print .= "\n";
+                  
+       return $to_print;
+    }
+} # end package RelyxTable::Cell
+
+1; # return "true" to calling routine
diff --git a/lib/reLyX/TODO b/lib/reLyX/TODO
new file mode 100644 (file)
index 0000000..8a19c7f
--- /dev/null
@@ -0,0 +1,27 @@
+TODO file for reLyX
+
+SHORT TERM:
+- Bug fixes
+- translate common options from preamble (some \usepackage commands)
+- copy all unknown environments exactly, not just reLyXskip and verbatim
+- \url, especially \url||
+
+MEDIUM TERM:
+- support more stuff from preamble, like \newtheorem
+- full table support (i.e., longtable and sideways environment in tables)
+- minipages
+- list environments (like minipage) in syntax.default, along with the
+  number of arguments they take.
+- better understanding of when we're in math mode. Will (finally!) fix the
+  underscore bugs, allow macro translation and perhaps environment translation,
+  as well as translating \bf in math mode correctly.
+
+LONGER TERM:
+- graphicx? (in LyX 1.1 and later)
+- other LaTeX packages
+- "sloppy" and "fussy" translations. User chooses either to translate as much
+  as possible, which may cause incorrect translations, or to guarantee that
+  (dvi) output will be exactly the same as the TeX file, which may leave
+  more untranslated TeX (ERT).
+- macro expansion using "tme, a TeX macro expander" by Jonathan Thornburg
+- better handling of spaces and comments (involves fixing the parser)
diff --git a/lib/reLyX/Text/TeX.pm b/lib/reLyX/Text/TeX.pm
new file mode 100644 (file)
index 0000000..a9d2021
--- /dev/null
@@ -0,0 +1,1460 @@
+package Text::TeX;
+
+# This file is copyright (c) 1997-8 Ilya Zakharevich
+# Modifications for reLyX by Amir Karger
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+
+#
+#use strict;
+#use vars qw($VERSION @ISA @EXPORT);
+
+#require Exporter;
+#require # AutoLoader; # To quiet AutoSplit.
+
+# @ISA = qw
+# (Exporter AutoLoader);
+# Items to export into callers namespace by default. Note: do not export
+# names by default without a very good reason. Use EXPORT_OK instead.
+# Do not simply export all your public functions/methods/constants.
+@EXPORT = qw(
+       
+);
+$VERSION = '0.01';
+
+
+# Preloaded methods go here.
+
+# Does not deal with verbatims
+# Spaces are treated bad.
+
+#####################      GENERAL NOTES      ##################################
+# Each package describes a different sort of token.
+# Packages:
+#    Chunk        - default, just used as an ISA
+#    Text         - plain text, made up of TT::$usualtokenclass stuff
+#    Paragraph    - new paragraph starting (cuz you got \n\n in a latex file)
+#    Token        - simple token, like ~ or \blah
+#    EndLocal     - pseudotoken meaning that the scope of a local command (like
+#                   '\large') has ended
+#    BegArgsToken - pseudotoken which takes one or more arguments, like \section
+#    ArgToken     - pseudotoken returned in between arguments to a BegArgsToken
+#    EndArgsToken - pseudotoken returned after we finish getting arguments
+#                   to a BegArgsToken
+#    LookAhead    - a special kind of EndArgsToken when you want to look ahead
+#    BegArgsTokenLookedAhead - special kind of BegArgsToken (see man page)
+#    Begin::Group - Beginning of a group, i.e., '{'
+#    End::Group   - End of a group, i.e., '}'
+#    Begin::Group::Args - begin group but get args first, i.e., '\begin'
+#    End::Group::Args   - end group but get args first, i.e., '\end'
+#    SelfMatch    - e.g., '$'. Matches itself, but otherwise like a Begin::Group
+#    Separator    - e.g., '&' (not used in reLyX)
+#    Comment      - (not used in reLyX)
+# 
+# The main package is TT::OpenFile. It contains the subroutines that do
+#    most of the parsing work. TT::GetParagraph does some stuff too, but
+#    it's not a token you'd expect the code to return
+#
+# Package subroutines (other than 'new'):
+#    refine - takes a token to a more specific kind of token type
+#               e.g., '{' goes from TT::Token to TT::Begin::Group
+#    digest - extra actions to do once you've eaten the token.
+#               e.g., eating arguments of \begin, or popping various
+#               stacks when you get to an End::Group
+#    print  - how to print the token (e.g., the text making up the token)
+#    exact_print - print the token exactly as it appeared in the file.
+#               Usually involves adding whitespace
+#
+# Token and pseudotokens have some more subs:
+#    base_token   - the token this token is created from. It's the token
+#                   itself for a Token, but not for pseudotokens
+#    token_name   - the name of the base_token
+#
+# Token structure:
+# $tok->[0] will usually be the word (e.g., '\blah') the parser read
+#      For pseudotokens, it's something more complicated
+#      (some tokens, like Paragraph have nothing there, though)
+# $tok->[1] will be any comment (usually ignored)
+# $tok->[2] will be the exact thing the parser read (usu. [0] plus whitespace)
+# $tok->[3] stores arguments for Begin::Group::Args and End::Group::Args
+# $tok->[4] stores pointer to beginning token for End::Group::Args
+#    A TT::Group is a reference to an array of tokens. Often (but not always),
+# the first and last groups are Begin::Group and End::Group tokens respectively.
+
+# Pseudotokens are objects, one of whose fields is a reference to the token
+# that created the pseudotoken
+# BegArgToken, ArgToken, EndArgToken pseudotokens:
+# $tok->[0][0] - token (e.g. a TT::Token) that begins this group
+# $tok->[0][1] - number of arguments that that token takes
+# $tok->[0][2] - (found only in ArgToken) number of arguments to the token
+#                that have been read so far
+################################################################################
+
+########################   GLOBAL VARIABLES   ##################################
+# Sorts of text you find in a LaTeX file. For matching
+$notusualtoks = "\\\\" . '\${}^_~&@%'; # Why \\\\? double interpretation!
+$notusualtokenclass = "[$notusualtoks]";
+$usualtokenclass = "[^$notusualtoks]";
+
+# Original $macro wouldn't recognize, e.g., '\section*'. Added '\*?' - Ak
+# (Had to add it for \section and \\ separately.)
+#    \" or \frac, e.g. Note that it eats whitespace AFTER the token. This is
+# correct LaTeX behavior, but if text follows such a macro, and you just
+# print out the macro & then the text, they will run together.
+$macro = '\\\\(?:[^a-zA-Z]\*?|([a-zA-Z]+\*?)\s*)'; # Has one level of grouping
+#$macro = '\\\\(?:[^a-zA-Z]|([a-zA-Z]+)\s*)'; # Contains one level of grouping
+
+# active is a backslashed macro or $$ (same as \[) or ^^ followed by a char
+#    (^^A means ASCII(1), e.g. See the TeXbook) or a special character like ~
+$active = "$macro|\\\$\\\$|\\^\\^.|$notusualtokenclass"; # 1 level of grouping
+
+# In TeX, ^joe is equivalent to ^{j}oe, so sometimes we use tokenpattern
+#     instead of multitokenpattern to get just one character
+$tokenpattern = "($usualtokenclass)|$active"; # Two levels of grouping
+$multitokenpattern = "($usualtokenclass+)|$active"; # Two levels of grouping
+
+# Note: In original (CPAN) version, $commentpattern had "". It needs ''
+# or otherwise '\s' gets translated to 's'
+$commentpattern = '(?:%.*\n\s*)+'; #one or more comment lines
+$whitespaceAndComment = '\s*(%.*\n[ \t]*)+';
+
+# matches either nothing OR an argument in brackets ($1 doesn't include [])
+$optionalArgument = "(?:\\[([^]]*)\\])?"; # Contains one level of grouping
+
+# These tokens are built from other tokens, so they're pseudotokens
+#    (except BegArgsToken actually does have text!?)
+for (qw(Text::TeX::ArgToken Text::TeX::BegArgsToken Text::TeX::EndArgsToken )) {
+  $pseudo{$_} = 1;
+}
+
+# More global variables can be found at the end of the file
+# E.g., the main Tokens hash
+
+#######################   Token Packages   #####################################
+{
+  package Text::TeX::Comment;
+  $ignore = 1;
+}
+
+{
+  package Text::TeX::Chunk;
+  sub refine {}
+  sub digest {}
+  sub collect {$_[0]->[0]}
+  sub new {
+    my $class = shift;
+    bless [@_], $class;
+  }
+  sub print {$_[0]->[0]}
+  # exact_print prints the *exact* text read, including whitespace
+  #     (but not including comments...)
+  sub exact_print {$_[0]->[2]}
+  # print the comment that came before a token
+  sub comment {$_[0]->[1]}
+
+}
+
+{
+  package Text::TeX::Token;
+  @ISA = ('Text::TeX::Chunk');
+
+  sub refine {
+    my $self = shift;
+    return undef unless defined $self->[0];
+    my $txt = shift;
+    my $type;
+    if (defined ($tok = $txt->{tokens}->{$self->[0]}) 
+       and defined $tok->{class}) {
+      bless $self, $tok->{class};
+    }
+  } # end sub refine
+
+  # Name of the token. Same as print for Token, but ArgToken and
+  # EndArgsToken, e.g., print nothing!
+  sub token_name {
+      my $tok = shift->base_token;
+      return $tok->print;
+  }
+
+  sub base_token {
+  # For pseudotokens, this sub is more complicated, but a token is just a token.
+      return shift;
+  }
+
+  # return the syntax argument created by reLyX
+  # Return "" if relyx_args is empty, i.e., if the token takes no args
+  # Return undef if relyx_args doesn't exist, i.e., if the token is unknown
+  sub relyx_args {
+      warn "not enough args to Text::TeX::relyx_args" unless @_==2;
+      my ($tok,$object) = (shift, shift);
+      my $name;
+
+      # Test copied from TT::OpenFile::eat
+      if (defined ($name = $tok->token_name)) {
+         #print "$name is defined\n";
+         if (defined ($entry = $object->{"tokens"}->{$name})) {
+             #print "Entry in MyTokens is defined\n";
+             if (exists ($entry->{"relyx_args"})) { # even if it's empty...
+                 #print "the args are '",$entry->{"relyx_args"},"'\n";
+                 return $entry->{"relyx_args"}
+             }
+         }
+      }
+
+      # else...
+      #print "did not exist";
+      return undef;
+  } # end sub relyx_args
+
+  sub next_args {
+  # Return the next argument(s) expected by this token.
+  # For regular Tokens: /^o*$/. 
+  # For BegArgsTokens and ArgTokens: /^o*[rR]$/
+  # For EndArgsTokens: /^o*/. (in case opt args come after last required arg)
+    my ($eaten,$fileobject) = (shift,shift);
+
+    # Get the number & type of arguments of this token == /^[or]*$/
+    # If it takes no args, just return
+    # Will also return if curr_args is called for plain Text for some reason
+    my $syntax = $eaten->relyx_args($fileobject) or return "";
+
+    # If it takes just optional args, return them (it's a plain Token)
+    return $syntax if $syntax =~ /^o+$/;
+
+    # Number of arguments we've already read (== 0 for BegArgsToken)
+    # Note that we only get here for Beg/EndArgsToken or ArgToken
+    my $arg_num = $eaten->args_done;
+
+    # Split args into single "argument sets", each of which is 0 or more
+    # optional arguments followed by 0 or 1 required argument.
+    @args = ($syntax =~ /o*[rR]?/g);
+    push (@args,""); # necessary for EndArgsToken if $syntax ends with "r"
+
+    # Now return the n'th argument set
+    #    e.g., if 0 args have been eaten, return the 0th element of @args,
+    # which is the first argument
+    return $args[$arg_num];
+  } # end sub curr_args
+} # end package Text::TeX::Token
+
+{
+  package Text::TeX::BegArgsToken;
+  @ISA = ('Text::TeX::Token');
+  sub print {
+      my $tok = shift->base_token; # Token this pseudotoken was made from
+      return $tok->print;
+  }
+
+  sub exact_print {
+      my $tok = shift->base_token;
+      return $tok->exact_print;
+  }
+  
+  # How many arguments we've read already.
+  # Obviously zero before we've begun to read the arguments
+  sub args_done {return 0}
+
+  sub base_token { return shift->[0]->[0] }
+  sub comment { return shift->base_token->comment }
+}
+
+{
+  package Text::TeX::ArgToken;
+  @ISA = ('Text::TeX::Token');
+  # This token isn't made from actual text, so it prints nothing
+  sub print {return ''}
+  sub exact_print {return ''}
+
+  # How many arguments we've read already.
+  # Luckily, this number is stored in the ArgToken token
+  sub args_done { return shift->[0]->[2] }
+
+  sub base_token { return shift->[0]->[0] }
+}
+
+{
+  package Text::TeX::EndArgsToken;
+  @ISA = ('Text::TeX::Token');
+  # This token isn't made because of real text, so it prints nothing
+  sub print {return ''}
+  sub exact_print {return ''}
+
+  # How many arguments we've read already.
+  # Obviously the total number of arguments, since we're done
+  sub args_done {return shift->[0]->[1]}
+  sub base_token { return shift->[0]->[0] }
+}
+
+{
+  package Text::TeX::EndLocal;
+  @ISA = ('Text::TeX::Token');
+  # No text in this token
+  sub print {return ''}
+  sub exact_print {return ''}
+  sub base_token { return shift->[0] }
+}
+
+{
+  package Text::TeX::Group;
+  sub new {shift; my $in = shift; bless $in}
+  sub print {
+    local @arr; #arr becomes global for called subroutines
+    foreach (@{ $_[0] }) {
+      push(@arr, $_->print);
+    }
+    "`" . join("',`", @arr) . "'";
+  }
+
+  # exact_print prints w/out the quotes
+  sub exact_print {
+    local @arr; #arr becomes global for called subroutines
+    foreach (@{ $_[0] }) {
+      push(@arr, $_->exact_print);
+    }
+    join("", @arr); # ... and return it
+  }
+
+  # Not created straight from LaTeX, so it'll never have a comment
+  # (although comments can be in the subtokens in the group)
+  sub comment {undef}
+
+  # Return what's in the group, i.e. strip out the '{' and '}' tokens
+  # if they exist. Return an array of tokens or just one token
+  sub contents {
+      #strip off TT::Begin::Group and TT::End::Group from beginning and end
+      # if they exist. eatBalanced will return Tokens, so don't worry about
+      # stripping too much from a group like {{foo} bar}. And eatGroup
+      # will return Begin::Group, Group, End::Group, so after stripping one,
+      # don't have to worry about stripping another.
+      $group = shift;
+      if (ref($group->[0] ) eq "Text::TeX::Begin::Group" and
+          ref($group->[-1]) eq "Text::TeX::End::Group")
+      {
+         shift @$group;
+         pop @$group;
+      }
+
+      if (wantarray) {
+          return @$group;
+      } elsif (!@$group) { # group was '{}'
+          return new Text::TeX::Token '','',''; # send back an empty token
+      } else {
+          warn "Text::TeX -- more than one token in group!" if $#$group > 1;
+          return $$group[0];
+      }
+  }
+}
+
+{
+  package Text::TeX::End::Group;
+  @ISA = ('Text::TeX::Chunk');
+  sub new {shift; my $in = shift; bless \$in}
+  sub digest {                 # 0: the token, 1: text object
+    # If there are any EndLocal tokens in $txt->{presynthetic}, do them first
+    # See TT::OpenFile::check_presynthetic for details
+    return if $_[1]->check_presynthetic($_[0]);        # May change $_[0]
+    my $wa = $_[1]->curwaitforaction;
+    my $w = $_[1]->popwait;
+    warn "Expecting `$w', got `$_[0][0]'=`$_[0][0][0]' in `$ {$_[1]->{paragraph}}'" 
+      if $w ne $_[0]->[0];
+    &$wa if defined $wa; # i.e., do $txt->{waitforactions}[-1] if it exists
+  }
+}
+
+{
+  package Text::TeX::End::Group::Args;
+  @ISA = ('Text::TeX::End::Group');
+
+  sub digest {                 # 0: the token, 1: text object
+    # If there are any EndLocal tokens in $txt->{presynthetic}, do them first
+    #    (Lamport p. 27 says \em is ended by '\end{blah}', not just '}')
+    # check_presynthetic will put the End::Group::Args token into pending_in
+    #    so it'll be read on the next pass through eat. Since sub digest will
+    #    be called again on this token, don't read the argument to \end{}
+    #    on the first call to sub digest
+    # See TT::OpenFile::check_presynthetic for details
+    return if $_[1]->check_presynthetic($_[0]);        # May change $_[0]
+
+    my $Token = $_[1]->{tokens}->{$_[0]->[0]};
+    my $count = $Token->{eatargs};
+    my ($tok, @arr);
+    # Read environment you're ending (just like in Begin::Group::Args)
+    while ($count--) {
+      $tok = $_[1]->eatGroup(1);
+      if (@$tok == 3 and $tok->[0]->[0] eq '{') { # Special case for {\a}
+       $tok = $tok->[1];
+      }
+      push(@arr,$tok);
+    }
+    #$_[0]->[0] .= ' ' . join ' ', map $_->[0], @arr;
+    $_[0]->[3] = \@arr;
+    my $s = $_[1]->starttoken;
+
+    # like TT::End::Group
+    my $wa = $_[1]->curwaitforaction;
+    my $w = $_[1]->popwait;
+    # If you got '}' when you wanted '\end'
+    warn "Expecting `$w', got $_[0]->[0] in `$ {$_[1]->{paragraph}}'" 
+      if $w ne $_[0]->[0];
+    # If you got \end{foo} when you wanted \end{bar}
+    if ($Token->{selfmatch} and $s->environment ne $_[0]->environment) {
+      warn "Expecting `$w" , "{", $s->environment,"}', got $_[0]->[0]",
+       "{", $_[0]->environment , "} in `$ {$_[1]->{paragraph}}'";
+    }
+
+    # If there was a waitforaction then do it now
+    &$wa if defined $wa;
+    $_[0]->[4] = $s;           # Put the start data into the token
+  }
+
+  sub print { # need special print to print name of environment
+      my $obj = $_[0];
+      my $env = $obj->environment; # assume we've already digested it
+      # Use the method for printing a regular old token, but append env. name
+      return $obj->SUPER::print . "{$env}";
+  }
+
+  sub exact_print {
+      my $obj = $_[0];
+      my $env = $obj->environment; # assume we've already digested it
+      # Use the method for printing a regular old token, but append env. name
+      return $obj->SUPER::exact_print . "{$env}";
+  }
+
+  sub environment {
+  # this group's environment
+      return $_[0]->[3]->[0]->[0];
+  }
+} # end package TT::End::Group::Args
+
+{
+  package Text::TeX::Begin::Group::Args;
+  @ISA = ('Text::TeX::Begin::Group');
+
+  sub digest {                 # 0: the token, 1: text object
+    my $Token = $_[1]->{tokens}->{$_[0]->[0]};
+    my $count = $Token->{eatargs};
+    my ($tok, @arr);
+    # Read the arguments, e.g., read "{blah}" for "\begin{blah}"
+    while ($count--) {
+      $tok = $_[1]->eatGroup(1);
+      if (@$tok == 3 and $tok->[0]->[0] eq '{') { # Special case for {\a}
+       $tok = $tok->[1];
+      }
+      push(@arr,$tok);
+    }
+    # $_[0]->[0] .= ' ' . join ' ', map $_->[0], @arr;
+    $_[0]->[3] = \@arr;
+    $_[0]->SUPER::digest($_[1]); # i.e. do Begin::Group stuff (pushwait)
+  }
+
+  sub print { # need special print to print name of environment
+      my $obj = $_[0];
+      my $env = $obj->environment; # assume we've already digested it
+      # Use the method for printing a regular old token, but append env. name
+      return $obj->SUPER::print . "{$env}";
+  }
+
+  sub exact_print {
+      my $obj = $_[0];
+      my $env = $obj->environment; # assume we've already digested it
+      # Use the method for printing a regular old token, but append env. name
+      return $obj->SUPER::exact_print . "{$env}";
+  }
+
+  sub environment {
+  # this group's environment
+      return $_[0]->[3]->[0]->[0];
+  }
+} # end package TT::Begin::Group::Args
+
+{
+  package Text::TeX::Begin::Group;
+  @ISA = ('Text::TeX::Chunk');
+  # 0: the token, 1: text object
+  sub digest {
+      my ($tok, $txt) = (shift, shift);
+      # $dummy = the anonymous hash associated with this token in the %Tokens
+      my $dummy = $txt->{tokens}->{$tok->[0]};
+
+      # see if this group requires different actions
+      my $newaction; # action to do while parsing this group
+      my $waitaction; # action to do when you hit the matching End::Group
+      undef $waitaction; undef $newaction;
+      if (defined $dummy) {
+          if (exists $dummy->{newaction}) {
+             $newaction = $dummy->{newaction};
+         }
+         if (exists $dummy->{waitaction}) {
+             $waitaction = $dummy->{waitaction};
+         }
+      }
+
+      # push stuff onto stacks for this group
+      $txt->pushwait($tok, $newaction, $waitaction);
+  }
+}
+
+{
+  package Text::TeX::SelfMatch;
+  @ISA = ('Text::TeX::Chunk');
+  sub refine {
+  # This subroutine is never used. See sub digest below
+    if ($_[1]->curwait eq $_[0]->[0]) {  #if you match what you're waiting for
+      bless $_[0], Text::TeX::End::Group;
+    } else { #you need to BE matched
+      bless $_[0], Text::TeX::Begin::Group;
+    }
+  }
+  # 0: the token, 1: text object
+  # Unfortunately, this sub IS necessary, because originally, a '$' (e.g.)
+  #    is type TT::Token. Calling refine calls Chunk::refine, which blesses
+  #    it to SelfMatch, but then SelfMatch::refine is never called! -Ak
+  sub digest {                 # XXXX Should not be needed?
+    # curwait returns undefined if not waiting for anything
+    if (defined ($cwt = $_[1]->curwait) && $cwt eq $_[0]->[0]) { 
+      bless $_[0], Text::TeX::End::Group;
+      $_[0]->Text::TeX::End::Group::digest($_[1]);
+    } else {
+      bless $_[0], Text::TeX::Begin::Group;
+      $_[1]->pushwait($_[0]);
+    }
+  }
+}
+
+@Text::TeX::Text::ISA = ('Text::TeX::Chunk');
+@Text::TeX::Paragraph::ISA = ('Text::TeX::Chunk');
+@Text::TeX::BegArgsTokenLookedAhead::ISA = ('Text::TeX::BegArgsToken');
+@Text::TeX::LookAhead::ISA = ('Text::TeX::EndArgsToken');
+@Text::TeX::Separator::ISA = ('Text::TeX::Chunk');
+
+########################   MAIN CODE   #########################################
+{
+  package Text::TeX::GetParagraph;
+  # Get a new paragraph from the LaTeX file
+  # Get stuff until a non-empty line which follows an empty line
+  sub new {
+    shift; 
+    my $file = shift;
+    my $fh;
+    $fh = $ {$file->{fhs}}[-1] if @{$file->{fhs}};
+    return undef if (not defined $fh or eof($fh)) and $file->{readahead} eq "";
+
+    # See below: every time we call GetParagraph, we read one extra (non-empty)
+    #    line, which we store in readahead for next time
+    my $string = $file->{readahead};
+    $file->{readahead} = ""; #default in case eof($fh) or !defined($fh)
+
+    if (defined $fh) { # i.e., if eof($fh) just return readahead from last time
+      # Read until an empty line (or eof)
+      while (defined ($in = <$fh>)  && ($in =~ /\S/)) { # $in undefined at eof
+       $string .= $in;
+      }
+      # $in has the empty line we just read in. Add it for verbatim copying
+      $string .= $in if defined $in; # add whitespace
+
+      # Now read until NON-empty line (or eof)
+      while (defined ($in = <$fh>) && ($in !~ /\S/)) {
+       $string .= $in;
+      }
+
+      # Next time, the paragraph will begin with the non-empty line we just read
+      $file->{readahead} = $in if defined $in; # readahead stays "" at eof
+    }
+
+    bless \$string; # ... and return it
+  }
+}
+
+
+{
+  package Text::TeX::OpenFile;
+
+  $refgen = "TeXOpenFile0000";
+
+  sub new {
+# Description of OpenFile object:
+# readahead - every time we read a paragraph we read one extra token. This 
+#             token goes into 'readahead' and is prepended to the next paragraph
+#             we read
+# paragraph - stores the paragraph we're currently parsing
+# actions   - what to do. TT::OpenFile->process calls the function pointed
+#             to by actions on each token it eats
+# tokens    - reference to a hash describing all tokens that the parser
+#             should recognize
+# presynthetic - holds pseudotokens to deliver before a block ends.
+#             Specifically, it holds EndLocal tokens, so that we know to end
+#             a command like \em just before the '}' which ends a group
+# synthetic - holds pseudotokens to deliver after block ends - specifically,
+#             it holds ArgToken (and EndArgsToken) tokens, which it returns
+#             in between arguments (and after all arguments) to a command.
+#             (also holds LookAhead tokens, which are like EndArgsTokens)
+# pending_in - pseudotokens for input. Stuff is put here from synthetic or
+#             from pending_out, and if there's something in pending_in, sub
+#             eat doesn't bother eating a new token
+# pending_out - pseudotokens for output -- stuff put here from presynthetic
+#             If there's anything in pending_out it gets returned or put into
+#             pending_in, and sub eat doesn't bother eating a new token
+    shift; my $file = shift; my %opt = @_;
+    if (defined $file) {
+       ++$refgen;
+       open("::$refgen",$file) || die "Cannot open $file: $!";
+       die "End of file `$file' during opening" if eof("::$refgen");
+    }
+    my $fhs = defined $file ? ["::$refgen"] : [];
+    bless {  fhs => $fhs, 
+            readahead => ($opt{string} || ""), 
+            files => [$file],
+            "paragraph" => undef, 
+            "tokens" => ($opt{tokens} || \%Text::TeX::Tokens),
+            waitfors => [], options => \%opt,
+            waitforactions => [],
+            defaultacts => [$opt{defaultact}], # The last element is
+                                                # the default action
+                                                # for next deeper
+                                                # level
+            actions => [defined $opt{action} ? 
+                        $opt{action} : 
+                        $opt{defaultact}],
+            waitargcounts => [0],
+            pending_out => [],
+            pending_in => [],
+            synthetic => [[]],
+            presynthetic => [[]],
+          };
+  }
+  sub DESTROY {
+    my $in = shift; my $i = 0;
+    for (@{$in->{fhs}}) {
+      close($_)
+       || die "Cannot close $ {$in->{files}}[$i]: $!";
+      $i++;
+    }
+  }
+
+# Return the paragraph we're currently reading
+#    If called with an argument, get a new paragraph at end of par, otherwise
+# don't. (Useful for looking ahead without affecting the file we're reading)
+# Either way, return nothing at end of par.
+  sub paragraph {
+    my $in = shift;
+    my $get_paragraph = defined(shift);
+    #print "ep.in=$in\n";
+
+    # Return something if not at end of par
+    if ($in->{"paragraph"} and $ {$in->{"paragraph"}} ne "") {
+      $in->{"paragraph"};
+    # Done with all files and readahead?
+    } elsif (@{$in->{fhs}} and eof($ {$in->{fhs}}[-1]) and !$in->{readahead}) {
+      undef;
+    # No files and done with readahead?
+    } elsif (!@{$in->{fhs}} and $in->{readahead} eq '') {
+      undef;
+    } else {
+      if ($get_paragraph) {
+         #warn "getting new\n";
+         $in->{"paragraph"} = new Text::TeX::GetParagraph $in;
+      }
+      return "";
+    }
+  }
+
+# pushwait means don't do stuff you've got waiting (like EndLocal tokens)
+#    until you're done with something else
+# If Arg2 exists, then the upcoming group will have it as its action
+# If Arg3 exists, then we'll do it when we get to the end of the upcoming group
+  sub pushwait {               # 0: text object, 1: token, 2: ????
+    push(@{ $_[0]->{starttoken} }, $_[1]);
+    push(@{ $_[0]->{waitfors} }, $_[0]->{tokens}{$_[1]->[0]}{waitfor});
+    push(@{ $_[0]->{actions} }, 
+        defined $_[2] ? $_[2] : $_[0]->{defaultacts}[-1]);
+    push(@{ $_[0]->{waitforactions} }, $_[3]);
+    push(@{ $_[0]->{synthetic} }, []);
+    push(@{ $_[0]->{presynthetic} }, []); # so that a local argument won't
+                                 # finish at end of the nested group
+  }
+
+# You've finished a group, so pop all the stuff pushwait pushed on
+  sub popwait {
+    if ($#{ $_[0]->{waitfors} } < 0) {
+      warn "Got negative depth"; return;
+    }
+    my $rest = pop(@{ $_[0]->{synthetic} });
+    warn "Not enough arguments" if @$rest;
+    $rest = pop(@{ $_[0]->{presynthetic} });
+    warn "Presynthetic events remaining" if @$rest;
+    pop(@{ $_[0]->{starttoken} });
+    pop(@{ $_[0]->{actions} });
+    pop(@{ $_[0]->{waitforactions} });
+    pop(@{ $_[0]->{waitfors} });
+  }
+
+# If there's anything in synthetic, pop it, reverse it, push it onto pending_out
+  sub popsynthetic {
+    my $rest = $ { $_[0]->{synthetic} }[-1];
+    if (@$rest) {
+      push @{ $_[0]->{pending_out} }, reverse @{ pop @$rest };
+    } 
+  }
+
+  sub pushsynthetic {          # Add new list of events to do *after* the
+                                # next end of group.
+    my $rest = $ { shift->{synthetic} }[-1];
+    push @$rest, [@_];
+  }
+
+  sub addpresynthetic {                # Add to the list of events to do *before*
+                                # the next end of group $uplevel above.
+    my ($txt) = (shift);
+    my $rest = $ { $txt->{presynthetic} }[-1];
+    push @$rest, @_;
+#    if (@$rest) {
+#      push @{ @$rest->[-1] }, @_;
+#    } else {
+#      push @$rest, [@_];
+#    }
+  }
+
+# If anything exists in presynthetic[-1], pop it and CHANGE $_[1] to that.
+#    Push $_[1] AND (reverse of) anything else in presynthetic[-1] onto
+#    pending_in so that we do it before any more tokens are read.
+# Otherwise, just return false.
+# BUG?! I don't understand why we do reverse. It makes stuff come out FIFO!
+  sub check_presynthetic {     # 0: text, 1: end token. Returns true on success
+    if (@{ $_[0]->{presynthetic}[-1] }) {
+      my $rest = $_[0]->{presynthetic}[-1];
+      my $next = pop @$rest;
+      push @{ $_[0]->{pending_in} }, $_[1], (reverse @$rest);
+      $#$rest = -1;            # Delete them
+      $_[1] = $next;
+      return 1;
+    }
+  }
+  
+
+  sub curwait {
+  # return what we're currently waiting for. Returns undef if not waiting
+    my $ref = $_[0]->{waitfors}; $$ref[-1];
+  }
+
+  sub curwaitforaction {
+    my $ref = $_[0]->{waitforactions}; $$ref[-1];
+  }
+
+  sub starttoken {
+    my $ref = $_[0]->{starttoken}; $$ref[-1];
+  }
+
+  # These are default bindings. You probably should override it.
+
+# Eat '[blah]' or nothing. Brackets aren't returned in token's [0]
+#    but they are returned in [2], so exact_print will print them.
+  sub eatOptionalArgument {
+    # Call with no arg. Don't get new paragraph if at end of par
+    my $in = shift->paragraph;
+    return undef unless defined $in;
+    my $comment = ( $$in =~ s/^\s*($Text::TeX::commentpattern)//o );
+    if ($$in =~ s/^\s*$Text::TeX::optionalArgument//o) {
+      new Text::TeX::Token $1, $comment, $&;
+    } else {
+      warn "No optional argument found";
+      if ($comment) {new Text::TeX::Token undef, $comment}
+      else {undef}
+    } 
+  }
+
+# eat {blah} when it's an argument to a BegArgsToken.
+# Returns a TT::Group of refined tokens
+#    This sub calls popsynthetic, so an ArgToken or EndArgsToken will be
+# popped from synthetic into pending_in. This means that the ArgToken or
+# EndArgsToken will be the next token returned by sub eat!
+  sub eatRequiredArgument {
+      my $txt = shift;
+      my $group = $txt->eatGroup(@_);
+      $txt->popsynthetic;
+      return $group;
+  }
+
+  sub eatFixedString {
+    # Call with no arg. Don't get new paragraph if at end of par
+    my $in = shift->paragraph;
+    return undef unless defined $in;
+    my $str = shift;
+    my ($comment) = ( $$in =~ s/^\s*($Text::TeX::commentpattern)//o );
+    if ($$in =~ s/^\s*$str//) {new Text::TeX::Token $&, $comment, $&}
+    else {
+      warn "String `$str' expected, not found";
+      if ($comment) {new Text::TeX::Token undef, $comment}
+      else {undef}
+    } 
+  }
+
+# Eat '{blah}'. Braces aren't returned. Stuff is returned as a Group,
+#   where each member is an (unrefined) TT::Text or Token
+  sub eatBalanced {
+    my $txt = shift;
+    my ($in);
+    warn "Did not get `{' when expected", return undef
+      unless defined ($in = $txt->eatFixedString('{')) && defined ($in->[0]);
+    $txt->eatBalancedRest;
+  }
+
+# Eat 'blah}'
+  sub eatBalancedRest {
+    my $txt = shift;
+    my ($count,$in,@in) = (1);
+  EAT:
+    {
+      warn "Unfinished balanced next", last EAT 
+       unless defined ($in = $txt->eatMultiToken) && defined $in->[0];
+      push(@in,$in);
+      $count++,redo if $in->[0] eq '{';
+      $count-- if $in->[0] eq '}';
+      # if !$count, remove '}' you just read and exit, else keep going
+      pop(@in), last EAT unless $count;
+      redo EAT;
+    }
+    bless \@in, 'Text::TeX::Group';
+  }
+
+# Eat stuff, either a token or a group (within {})
+#    Tokens will be refined.
+#    Braces ARE in the group
+  sub eatGroup {               # If arg2==1 will eat exactly one
+                                # group, otherwise a group or a
+                                # multitoken.
+    my $txt = shift;
+    local ($in,$r,@in); #Note, this is a stupid way to name variables -Ak
+    if (defined ($in[0] = $txt->eatMultiToken(shift)) and defined $in[0]->[0]) {
+      $in[0]->refine($txt);
+      if (ref $in[0] ne 'Text::TeX::Begin::Group') {
+       return $in[0];
+      } else { #it is the beginning of a group. So recurse until End::Group
+       while (defined ($r=ref($in = $txt->eatGroup)) # Eat many groups
+              && $r ne 'Text::TeX::End::Group') {
+         push(@in,$in);
+       }
+       if (defined $r) {push(@in,$in)}
+       else {warn "Uncompleted group"}
+      } # end if Begin::Group
+    } else {
+      warn "Got nothing when argument expected";
+      return undef;
+    }
+    bless \@in, 'Text::TeX::Group';
+  }
+
+  sub eatUntil {               # We suppose that the text to match
+                               # fits in a paragraph 
+    my $txt = shift;
+    my $m = shift;
+    my ($in,@in);
+    while ( (!defined $txt->{'paragraph'} || $ {$txt->{'paragraph'}} !~ /$m/)
+          && defined ($in = $txt->eatGroup(1))) {
+      push(@in,@$in);
+    }
+    ($ {$txt->{'paragraph'}} =~ s/$m//) || warn "Delimiter `$m' not found";
+    bless \@in, 'Text::TeX::Group';
+  }
+
+# return next token without eating it. Return '' if end of paragraph
+  sub lookAheadToken {         # If arg2, will eat one token - WHY!? -Ak
+    my $txt = shift;
+    # Call paragraph with no argument to say we're "just looking"
+    my $in = $txt->paragraph;
+    return '' unless $in;      # To be able to match without warnings
+    my $comment = undef;
+    if ($$in =~ 
+       /^(?:\s*)(?:$Text::TeX::commentpattern)?($Text::TeX::tokenpattern)/o) {
+      if (defined $2) {return $1} #if 1 usualtokenclass char, return it ($1==$2)
+      elsif (defined $3) {return "\\$3"} # Multiletter (\[a-zA-Z]+)
+      elsif (defined $1) {return $1} # \" or notusualtokenclass
+    }
+    return '';
+  }
+  
+# This is the main subroutine for eating a token.
+# It returns a token as either TT::Text or TT::Token.
+# Or it returns TT::Paragraph if it had to read a new paragraph in the TeX file.
+  sub eatMultiToken {          # If arg2, will eat one token
+    my $txt = shift;
+    # call paragraph with an arg so it gets new paragraph if necessary
+    my $in = $txt->paragraph(1);
+    return undef unless defined $in;
+    return new Text::TeX::Paragraph unless $in; #i.e., if it's a new paragraph
+    my $comment = undef;
+    # eat a comment that comes before the token we're about to read
+    $comment = $2 if $$in =~ s/^(\s*)($Text::TeX::commentpattern)/$1/o;
+    my $nomulti = shift; #if arg2, eat one token
+    # Eat text or a token
+    # Cannot use if () BLOCK, because $& is local.
+    $got = $$in =~ s/^\s*($Text::TeX::tokenpattern)//o if $nomulti;
+    $got = $$in =~ s/^\s*($Text::TeX::multitokenpattern)//o    unless $nomulti;
+    # $1 = \[^a-zA-Z] or special char like ~
+    # $2 = regular text. Return $& to include leading space!
+    # $3 = [a-zA-Z]+ which followed a backslash, i.e., a 'multiletter' command
+    if ($got and defined $2) {new Text::TeX::Text $&, $comment, $&}
+    elsif ($got and defined $3) {new Text::TeX::Token "\\$3", $comment, $&}
+    elsif ($got and defined $1) {new Text::TeX::Token $1, $comment, $&}
+    elsif ($comment) {new Text::TeX::Token undef, $comment, ""}
+    else {undef}
+  }
+
+# This is the main subroutine for eating the file.
+# It eats tokens and returns them. Sometimes it also returns pseudotokens.
+# Basic rundown:
+#  - if there's stuff in pending_out, return it
+#  - otherwise get stuff from pending_in OR eat a new token
+#  - refine the token, then digest it
+# (- pop stuff from synthetic into pending_out for next time UNLESS
+#      you read a new command that takes arguments. E.g. x^\sqrt)
+#  - return the token unless it's special & has a 'type'
+#  - based on the type, set up one or more tokens to be handled later
+#    so that, e.g., type 'report_args' returns BegArgsToken, followed
+#    later by some number of ArgToken's, followed by an EndArgsToken
+#
+#    LookAhead tokens can be used for _^. If you have x^a_b, the EndArgsToken
+# for the ^ will be changed to a LookAhead, which notes that a _ is next.
+# The _ has a BegArgsLookedAhead token instead of BegArgsToken. If anything
+# other than _ or ^ follows the argument to the LookAhead token (for example,
+# x^2+b, a regular old EndArgsToken is returned for the ^. reLyX doesn't use
+# the LookAhead functionality. (phew!)
+  sub eat {
+    my $txt = shift;
+    if ( @{ $txt->{pending_out} } ) {
+      my $out = pop @{ $txt->{pending_out} };
+      # E.g., if you have x^\sqrt2 -- when you pop and return the \sqrt
+      # EndArgsToken, you need to make sure the ^ EndArgsToken falls out next.
+      #    But if pending_out is an ArgToken, *don't* pop the next thing 
+      # (next ArgToken or EndArgsToken) out of synthetic yet
+      # Most often, synthetic will be empty, so popsynthetic will do nothing
+      $txt->popsynthetic if ref($out) eq 'Text::TeX::EndArgsToken';
+      if (ref $out eq 'Text::TeX::LookAhead') {
+       my $in = $txt->lookAheadToken;
+       if (defined ($res = $out->[0][2]{$in})) {
+         push @{$out->[0]}, $in, $res;
+         # actually eat what you looked ahead
+         $in = $txt->eatMultiToken(1); # XXXX may be wrong if next
+                                        # token needs to be eaten in
+                                        # the style `multi', like \left.
+         # Put it at beginning of pending_in so we do E.g., EndLocals first
+         splice @{ $txt->{pending_in} }, 
+           0, 0, (bless \$in, 'Text::TeX::LookedAhead');
+         return $out;
+       } else {
+         return bless $out, 'Text::TeX::EndArgsToken';
+       }
+      } else {
+       return $out;
+      }
+    } # end if pending_out
+
+    # We didn't get & return stuff from pending_out. So try to get stuff
+    #    from pending_in. If there's nothing there, eat a new token.
+    my $in = pop @{ $txt->{pending_in} };
+    my $after_lookahead;
+    if (defined $in) {
+      # after_lookahead is true if we got a LookedAhead token from pending_out
+      #    because we looked ahead when there was a LookAhead token
+      $in = $$in, $after_lookahead = 1 
+       if ref $in eq 'Text::TeX::LookedAhead';
+    } else {
+      my $one;
+      # This will happen if we did pushsynthetic on the last token.
+      # That happened for report_args tokens, i.e., things that require
+      #     arguments. \frac, e.g., will read either a character or
+      #     a token *or* the '{' that begins a group, then popsynthetic below.
+      # \frac puts *two* tokens in {synthetic} so $one will be set TWICE
+      $one = 1 if @{ $txt->{synthetic}[-1] }; # Need to eat a group.
+      $in = $txt->eatMultiToken($one);
+    }
+    return undef unless defined $in;
+    $in->refine($txt);
+    $in->digest($txt);
+    my ($Token, $type, @arr);
+    unless (defined $in
+            && defined $in->[0] 
+           && $in->[0] =~ /$Text::TeX::active/o
+           && defined ( $Token = $txt->{tokens}->{$in->[0]} )
+           && exists ($Token->{"Type"})
+           ) {
+       $txt->popsynthetic;
+       return $in;
+    }
+    $type = $Token->{Type};
+    $txt->popsynthetic unless $type eq 'report_args';
+
+    # If the token is special enough that it's got a 'type', do more stuff
+    my $out = $in;
+    if ($type eq 'action') {
+#      return &{$Token->{sub}}($in);
+      return &{$Token->{'sub'}}($in); #Without 's it breaks strict refs -Ak
+    } elsif ($type eq 'argmask') {
+      # eatWithMask;           # ????
+    } elsif ($type eq 'args') {
+      # Args eaten already
+    } elsif ($type eq 'local') {
+      $txt->addpresynthetic(new Text::TeX::EndLocal $in);
+    } elsif ($type eq 'report_args') {
+      my $count = $Token->{count};
+      my $ordinal = $count;
+      my $res;
+      if ($res = $Token->{lookahead}) {
+       $txt->pushsynthetic(new Text::TeX::LookAhead [$in, $count, $res]);
+      } else {
+       # This will fall out after we read all the args this token needs
+       $txt->pushsynthetic(new Text::TeX::EndArgsToken [$in, $count]); 
+      }
+      # One of these tokens will fall out after we finish each arg (except last)
+      # Push on 3,2,1, so that when we *popsynthetic*, 1 will come off first
+      # followed by 2, 3
+      # ArgToken->[0][2] will then be the number of args read so far for
+      # the token held in ArgToken->[0][0]
+      while (--$ordinal) {
+       $txt->pushsynthetic(new Text::TeX::ArgToken [$in, $count, $ordinal]);
+      }
+      if ($after_lookahead) {
+       $out = new Text::TeX::BegArgsTokenLookedAhead [$in, $count];
+      } else {
+       $out = new Text::TeX::BegArgsToken [$in, $count];
+      }
+    } else {
+      warn "Format of token data unknown for `", $in->[0], "'"; 
+    }
+    return $out;
+  }
+  
+  sub report_arg {
+    my $n = shift;
+    my $max = shift;
+    my $act = shift;
+    my $lastact = shift;
+    if ($n == $max) {
+      &$lastact($n);
+    } else {
+      &$act($n,$max);
+    }
+  }
+
+  sub eatDefine {
+    my $txt = shift;
+    my ($args, $body);
+    warn "No `{' found after defin", return undef 
+      unless $args = $txt->eatUntil('{');
+    warn "Argument list @$args too complicated", return undef 
+      unless @$args == 1 && $$args[0] =~ /^(\ \#\d)*$/;
+    warn "No `}' found after defin", return undef 
+      unless $body = $txt->eatBalancedRest;
+    #my @args=split(/(\#[\d\#])/,$$);       # lipa
+  }
+  
+# This is the main subroutine called by parsing programs. Basically, it
+#     keeps eating tokens, then calling $txt->actions on that token
+  sub process {
+    my ($txt, $eaten, $act) = (shift);
+    while (defined ($eaten = $txt->eat)) {
+      if (defined ($act = $txt->{actions}[-1])) {
+       &$act($eaten,$txt);
+      }
+    }
+  }
+} #END Text::TeX::OpenFile
+
+#####################    MORE GLOBAL STUFF    ##################################
+%super_sub_lookahead = qw( ^ 1 _ 0 \\sb 0 \\sp 1 \\Sp 1 \\Sb 0 );
+
+# class => 'where to bless to', Type => how to process
+# eatargs => how many args to swallow before digesting
+
+%Tokens = (
+  '{' => {'class' => 'Text::TeX::Begin::Group', 'waitfor' => '}'},
+  '}' => {'class' => 'Text::TeX::End::Group'},
+  "\$" => {'class' => 'Text::TeX::SelfMatch', waitfor => "\$"},
+  '$$' => {'class' => 'Text::TeX::SelfMatch', waitfor => '$$'},
+  '\begin' => {class => 'Text::TeX::Begin::Group::Args', 
+              eatargs => 1, 'waitfor' => '\end', selfmatch => 1},
+  '\end' => {class => 'Text::TeX::End::Group::Args', eatargs => 1, selfmatch => 1},
+  '\left' => {class => 'Text::TeX::Begin::Group::Args', 
+              eatargs => 1, 'waitfor' => '\right'},
+  '\right' => {class => 'Text::TeX::End::Group::Args', eatargs => 1},
+  '\frac' => {Type => 'report_args', count => 2},
+  '\sqrt' => {Type => 'report_args', count => 1},
+  '\text' => {Type => 'report_args', count => 1},
+  '\operatorname' => {Type => 'report_args', count => 1},
+  '\operatornamewithlimits' => {Type => 'report_args', count => 1},
+  '^' => {Type => 'report_args', count => 1, 
+         lookahead => \%super_sub_lookahead },
+  '_' => {Type => 'report_args', count => 1, 
+         lookahead => \%super_sub_lookahead },
+  '\em' => {Type => 'local'},
+  '\bold' => {Type => 'local'},
+  '\it' => {Type => 'local'},
+  '\rm' => {Type => 'local'},
+  '\mathcal' => {Type => 'local'},
+  '\mathfrak' => {Type => 'local'},
+  '\mathbb' => {Type => 'local'},
+  '\\\\' => {'class' => 'Text::TeX::Separator'},
+  '&' => {'class' => 'Text::TeX::Separator'},
+);
+
+##############   I NEVER USE ANYTHING BELOW THIS LINE!! -Ak   ##################
+{
+  my $i = 0;
+  @symbol = (
+       (undef) x 8,            # 1st row
+       (undef) x 8,
+       (undef) x 8,            # 2nd row
+       (undef) x 8,
+       undef, undef, '\forall', undef, '\exists', undef, undef, '\???', # 3rd: symbols
+       (undef) x 8,
+       (undef) x 8,     # 4th: numbers and symbols
+       (undef) x 8,
+       '\???', ( map {"\\$_"} 
+                qw(Alpha Beta Chi Delta Epsilon Phi Gamma 
+                Eta Iota vartheta Kappa Lambda Mu Nu Omicron 
+                Pi Theta Rho Sigma Tau Ypsilon varsigma Omega
+                Xi Psi Zeta)), undef, '\therefore', undef, '\perp', undef,
+       undef, ( map {"\\$_"} 
+               qw(alpha beta chi delta varepsilon phi gamma
+                  eta iota varphi kappa lambda mu nu omicron
+                  pi theta rho sigma tau ypsilon varpi omega
+                  xi psi zeta)), undef, undef, undef, undef, undef,
+       (undef) x 8,            # 9st row
+       (undef) x 8,
+       (undef) x 8,            # 10nd row
+       (undef) x 8,
+       undef, undef, undef, '\leq', undef, '\infty', undef, undef, # 11th row
+       undef, undef, undef, undef, '\from', undef, '\to', undef,
+       '\circ', '\pm', undef, '\geq', '\times', undef, '\partial', '\bullet', # 12th row
+       undef, '\neq', '\equiv', '\approx', '\dots', '\mid', '\hline', undef,
+       '\Aleph', undef, undef, undef, '\otimes', '\oplus', '\empty', '\cap', # 13th row
+       '\cup', undef, undef, undef, undef, undef, '\in', '\notin',
+       undef, '\nabla', undef, undef, undef, '\prod', undef, '\cdot', # 14th row
+       undef, '\wedge', '\vee', undef, undef, undef, undef, undef,
+       undef, '\<', undef, undef, undef, '\sum', undef, undef, # 15th row
+       (undef) x 8,
+       undef, '\>', '\int', (undef) x 5, # 16th row
+       (undef) x 8,
+      );
+  for (@symbol) {
+    $xfont{$_} = ['symbol', chr($i)] if defined $_;
+    $i++;
+  }
+}
+
+# This list was autogenerated by the following script:
+# Some handediting is required since MSSYMB.TEX is obsolete.
+
+## Usage is like:
+##             extract_texchar.pl  PLAIN.TEX MSSYMB.TEX
+##$family = shift;
+
+#%fonts = (2 => "cmsy", 3 => "cmex", '\\msx@' => msam, '\\msy@' => msbm, );
+
+#while (defined ($_ = <ARGV>)) {
+#  $list{$fonts{$2}}[hex $3] = $1
+#    if /^\s*\\mathchardef(\\\w+)=\"\d([23]|\\ms[xy]\@)([\da-fA-F]+)\s+/o;
+#}
+
+#for $font (keys %list) {
+#  print "\@$font = (\n  ";
+#  for $i (0 .. $#{$list{$font}}/8) {
+#    print join ', ', map {packit($_)} @{$list{$font}}[ 8*$i .. 8*$i+7 ];
+#    print ",\n  ";
+#  }
+#  print ");\n\n";
+#}
+
+#sub packit {
+#  my $cs = shift;
+#  if (defined $cs) {
+#    #$cs =~ s/\\\\/\\\\\\\\/g;
+#    "'$cs'";
+#  } else {
+#    'undef';
+#  }
+#}
+
+@cmsy = (
+  undef, '\cdotp', '\times', '\ast', '\div', '\diamond', '\pm', '\mp',
+  '\oplus', '\ominus', '\otimes', '\oslash', '\odot', '\bigcirc', '\circ', '\bullet',
+  '\asymp', '\equiv', '\subseteq', '\supseteq', '\leq', '\geq', '\preceq', '\succeq',
+  '\sim', '\approx', '\subset', '\supset', '\ll', '\gg', '\prec', '\succ',
+  '\leftarrow', '\rightarrow', '\uparrow', '\downarrow', '\leftrightarrow', '\nearrow', '\searrow', '\simeq',
+  '\Leftarrow', '\Rightarrow', '\Uparrow', '\Downarrow', '\Leftrightarrow', '\nwarrow', '\swarrow', '\propto',
+  '\prime', '\infty', '\in', '\ni', '\bigtriangleup', '\bigtriangledown', '\not', '\mapstochar',
+  '\forall', '\exists', '\neg', '\emptyset', '\Re', '\Im', '\top', '\perp',
+  '\aleph', undef, undef, undef, undef, undef, undef, undef,
+  undef, undef, undef, undef, undef, undef, undef, undef,
+  undef, undef, undef, undef, undef, undef, undef, undef,
+  undef, undef, undef, '\cup', '\cap', '\uplus', '\wedge', '\vee',
+  '\vdash', '\dashv', undef, undef, undef, undef, undef, undef,
+  '\langle', '\rangle', '\mid', '\parallel', undef, undef, '\setminus', '\wr',
+  undef, '\amalg', '\nabla', '\smallint', '\sqcup', '\sqcap', '\sqsubseteq', '\sqsupseteq',
+  undef, '\dagger', '\ddagger', undef, '\clubsuit', '\diamondsuit', '\heartsuit', '\spadesuit',
+  );
+
+@cmex = (
+  undef, undef, undef, undef, undef, undef, undef, undef, # 0-7
+  undef, undef, undef, undef, undef, undef, undef, undef, # 8-15
+  undef, undef, undef, undef, undef, undef, undef, undef, # 16-23
+  undef, undef, undef, undef, undef, undef, undef, undef, # 24-31
+  undef, undef, undef, undef, undef, undef, undef, undef, # 32-39
+  undef, undef, undef, undef, undef, undef, undef, undef, # 40-47
+  undef, undef, undef, undef, undef, undef, undef, undef, # 48-55
+  undef, undef, undef, undef, undef, undef, undef, undef, # 56-64
+  undef, undef, undef, undef, undef, undef, '\bigsqcup', undef,        # 64-71
+  '\ointop', undef, '\bigodot', undef, '\bigoplus', undef, '\bigotimes', undef,        # 72-79
+  '\sum', '\prod', '\intop', '\bigcup', '\bigcap', '\biguplus', '\bigwedge', '\bigvee',        # 80-87
+  undef, undef, undef, undef, undef, undef, undef, undef,
+  '\coprod', undef, undef, undef, undef, undef, undef, undef,
+  );
+
+@msam = (
+  '\boxdot', '\boxplus', '\boxtimes', '\square', '\blacksquare', '\centerdot', '\lozenge', '\blacklozenge',
+  '\circlearrowright', '\circlearrowleft', '\rightleftharpoons', '\leftrightharpoons', '\boxminus', '\Vdash', '\Vvdash', '\vDash',
+  '\twoheadrightarrow', '\twoheadleftarrow', '\leftleftarrows', '\rightrightarrows', '\upuparrows', '\downdownarrows', '\upharpoonright', '\downharpoonright',
+  '\upharpoonleft', '\downharpoonleft', '\rightarrowtail', '\leftarrowtail', '\leftrightarrows', '\rightleftarrows', '\Lsh', '\Rsh',
+  '\rightsquigarrow', '\leftrightsquigarrow', '\looparrowleft', '\looparrowright', '\circeq', '\succsim', '\gtrsim', '\gtrapprox',
+  '\multimap', '\therefore', '\because', '\doteqdot', '\triangleq', '\precsim', '\lesssim', '\lessapprox',
+  '\eqslantless', '\eqslantgtr', '\curlyeqprec', '\curlyeqsucc', '\preccurlyeq', '\leqq', '\leqslant', '\lessgtr',
+  '\backprime', undef, '\risingdotseq', '\fallingdotseq', '\succcurlyeq', '\geqq', '\geqslant', '\gtrless',
+  '\sqsubset', '\sqsupset', '\vartriangleright', '\vartriangleleft', '\trianglerighteq', '\trianglelefteq', '\bigstar', '\between',
+  '\blacktriangledown', '\blacktriangleright', '\blacktriangleleft', undef, undef, '\vartriangle', '\blacktriangle', '\triangledown',
+  '\eqcirc', '\lesseqgtr', '\gtreqless', '\lesseqqgtr', '\gtreqqless', '\yen', '\Rrightarrow', '\Lleftarrow',
+  '\checkmark', '\veebar', '\barwedge', '\doublebarwedge', '\angle', '\measuredangle', '\sphericalangle', '\varpropto',
+  '\smallsmile', '\smallfrown', '\Subset', '\Supset', '\Cup', '\Cap', '\curlywedge', '\curlyvee',
+  '\leftthreetimes', '\rightthreetimes', '\subseteqq', '\supseteqq', '\bumpeq', '\Bumpeq', '\lll', '\ggg',
+  '\ulcorner', '\urcorner', '\circledR', '\circledS', '\pitchfork', '\dotplus', '\backsim', '\backsimeq',
+  '\llcorner', '\lrcorner', '\maltese', '\complement', '\intercal', '\circledcirc', '\circledast', '\circleddash',
+  );
+
+@msbm = (
+  '\lvertneqq', '\gvertneqq', '\nleq', '\ngeq', '\nless', '\ngtr', '\nprec', '\nsucc',
+  '\lneqq', '\gneqq', '\nleqslant', '\ngeqslant', '\lneq', '\gneq', '\npreceq', '\nsucceq',
+  '\precnsim', '\succnsim', '\lnsim', '\gnsim', '\nleqq', '\ngeqq', '\precneqq', '\succneqq',
+  '\precnapprox', '\succnapprox', '\lnapprox', '\gnapprox', '\nsim', '\ncong', undef, undef,
+  '\varsubsetneq', '\varsupsetneq', '\nsubseteqq', '\nsupseteqq', '\subsetneqq', '\supsetneqq', '\varsubsetneqq', '\varsupsetneqq',
+  '\subsetneq', '\supsetneq', '\nsubseteq', '\nsupseteq', '\nparallel', '\nmid', '\nshortmid', '\nshortparallel',
+  '\nvdash', '\nVdash', '\nvDash', '\nVDash', '\ntrianglerighteq', '\ntrianglelefteq', '\ntriangleleft', '\ntriangleright',
+  '\nleftarrow', '\nrightarrow', '\nLeftarrow', '\nRightarrow', '\nLeftrightarrow', '\nleftrightarrow', '\divideontimes', '\varnothing',
+  '\nexists', undef, undef, undef, undef, undef, undef, undef,
+  undef, undef, undef, undef, undef, undef, undef, undef,
+  undef, undef, undef, undef, undef, undef, undef, undef,
+  undef, undef, undef, undef, undef, undef, undef, undef,
+  undef, undef, undef, undef, undef, undef, '\mho', '\eth',
+  '\eqsim', '\beth', '\gimel', '\daleth', '\lessdot', '\gtrdot', '\ltimes', '\rtimes',
+  '\shortmid', '\shortparallel', '\smallsetminus', '\thicksim', '\thickapprox', '\approxeq', '\succapprox', '\precapprox',
+  '\curvearrowleft', '\curvearrowright', '\digamma', '\varkappa', undef, '\hslash', '\hbar', '\backepsilon',
+  );
+
+# Temporary workaround against Tk's \n (only cmsy contains often-used \otimes):
+
+$cmsy[ord "\n"] = undef;
+
+for $font (qw(cmsy cmex msam msbm)) {
+  for $num (0 .. $#{$font}) {
+    $xfont{$$font[$num]} = [$font, chr($num)] if defined $$font[$num];
+  }
+}
+
+%aliases = qw(
+             \int \intop \oint \ointop \restriction \upharpoonright
+             \Doteq \doteqdot \doublecup \Cup \doublecap \Cap
+             \llless \lll \gggtr \ggg \lnot \neg \land \wedge
+             \lor \vee \le \leq \ge \geq \owns \ni \gets \leftarrow
+             \to \rightarrow \< \langle \> \rangle \| \parallel
+            );
+
+for $from (keys %aliases) {
+  $xfont{$from} = $xfont{$aliases{$from}} if exists $xfont{$aliases{$from}};
+}
+
+
+# Autoload methods go after =cut, and are processed by the autosplit program.
+
+1;
+__END__
+
+=head1 NAME
+
+Text::TeX -- Perl module for parsing of C<TeX>.
+
+=head1 SYNOPSIS
+
+  use Text::TeX;
+
+  sub report {
+    my($eaten,$txt) = (shift,shift);
+    print "Comment: `", $eaten->[1], "'\n" if defined $eaten->[1];
+    print "@{$txt->{waitfors}} ", ref $eaten, ": `", $eaten->[0], "'";
+    if (defined $eaten->[3]) {
+      my @arr = @{ $eaten->[3] };
+      foreach (@arr) {
+       print " ", $_->print;
+      }
+    }
+    print "\n";
+  }
+
+  my $file = new Text::TeX::OpenFile 'test.tex',
+    'defaultact' => \&report;
+  $file->process;
+
+=head1 DESCRIPTION
+
+A new C<TeX> parser is created by
+
+  $file = new Text::TeX::OpenFile $filename, attr1 => $val1, ...;
+
+$filename may be C<undef>, in this case the text to parse may be
+specified in the attribute C<string>.
+
+Recognized attributes are:
+
+=over 12
+
+=item C<string>
+
+contains the text to parse before parsing $filename.
+
+=item C<defaultact>
+
+denotes a procedure to submit C<output tokens> to.
+
+=item C<tokens>
+
+gives a hash of C<descriptors> for C<input token>. A sane default is
+provided.
+
+=back
+
+A call to the method C<process> launches the parser.
+
+=head2 Tokenizer
+
+When the parser is running, it processes input stream by splitting it
+into C<input tokens> using some I<heuristics> similar to the actual
+rules of TeX tokenizer. However, since it does not use I<the exact
+rules>, the resulting tokens may be wrong if some advanced TeX command
+are used, say, the character classes are changed.
+
+This should not be of any concern if the stream in question is a
+"user" file, but is important for "packages".
+
+=head2 Digester
+
+The processed C<input tokens> are handled to the digester, which
+handles them according to the provided C<tokens> attribute.
+
+=head2 C<tokens> attribute
+
+This is a hash reference which describes how the C<input tokens>
+should be handled. A key to this hash is a literal like C<^> or
+C<\fraction>. A value should be another hash reference, with the
+following keys recognized:
+
+=over 7
+
+=item class
+
+Into which class to bless the token. Several predefined classes are
+provided. The default is C<Text::TeX::Token>.
+
+=item Type
+
+What kind of special processing to do with the input after the
+C<class> methods are called. Recognized C<Type>s are:
+
+=over 10
+
+=item report_args
+
+When the token of this C<Type> is encountered, it is converted into
+C<Text::Tex::BegArgsToken>. Then the arguments are processed as usual,
+and an C<output token> of type C<Text::Tex::ArgToken> is inserted
+between them. Finally, after all the arguments are processed, an
+C<output token> C<Text::Tex::EndArgsToken> is inserted.
+
+The first element of these simulated C<output tokens> is an array
+reference with the first element being the initial C<output token>
+which generated this sequence. The second element of the internal
+array is the number of arguments required by the C<input token>. The
+C<Text::Tex::ArgToken> token has a third element, which is the ordinal
+of the argument which ends immediately before this token.
+
+If requested, a token C<Text::Tex::LookAhead> may be returned instead
+of C<Text::Tex::EndArgsToken>. The additional elements of
+C<$token->[0]> are: the reference to the corresponding C<lookahead>
+attribute, the relevant key (text of following token) and the
+corresponding value.
+
+In such a case the input token which was looked-ahead would generate
+an output token of type C<Text::Tex::BegArgsTokenLookedAhead> (if it
+usually generates C<Text::Tex::BegArgsToken>).
+
+=item local
+
+Means that these macro introduces a local change, which should be
+undone at the end of enclosing block. At the end of the block an
+output event C<Text::TeX::EndLocal> is delivered, with C<$token->[0]>
+being the output token for the I<local> event starting.
+
+Useful for font switching. 
+
+=back
+
+=back
+
+Some additional keys may be recognized by the code for the particular
+C<class>.
+
+=over 12
+
+=item C<count>
+
+number of arguments to the macro.
+
+=item C<waitfor>
+
+gives the matching token for a I<starting delimiter> token.
+
+=item C<eatargs>
+
+number of tokens to swallow literally and put into the relevant slot
+of the C<output token>. The surrounding braces are stripped.
+
+=item C<selfmatch>
+
+is used with C<eatargs==1>. Denotes that the matching token is also
+C<eatargs==1>, and the swallowed tokens should coinside (like with
+C<\begin{blah} ... \end{blah}>).
+
+=item C<lookahead>
+
+is a hash with keys being texts of tokens which need to be treated
+specially after the end of arguments for the current token. If the
+corresponding text follows the token indeed, a token
+C<Text::Tex::LookAhead> is returned instead of
+C<Text::Tex::EndArgsToken>.
+
+=back
+
+=head2 Symbol font table
+
+The hash %Text::TeX::xfont contains the translation table from TeX
+tokens into the corresponding font elements. The values are array
+references of the form C<[fontname, char]>, Currently the only font
+supported is C<symbol>.
+
+=cut
+
+=head1 AUTHOR
+
+Ilya Zakharevich, ilya@math.ohio-state.edu
+
+=head1 SEE ALSO
+
+perl(1).
+
+=cut
diff --git a/lib/reLyX/Text/manpage.3pm b/lib/reLyX/Text/manpage.3pm
new file mode 100644 (file)
index 0000000..1db0b32
--- /dev/null
@@ -0,0 +1,339 @@
+.rn '' }`
+''' $RCSfile: manpage.3pm,v $$Revision: 1.1 $$Date: 1999/09/27 18:44:35 $
+'''
+''' $Log: manpage.3pm,v $
+''' Revision 1.1  1999/09/27 18:44:35  larsbj
+''' Initial revision
+'''
+''' Revision 1.1.1.1  1998/04/20 21:14:36  larsbj
+''' repository moved due to corrupted repository on other machine
+'''
+''' Revision 1.1.2.1  1998/03/02 16:12:47  larsbj
+''' two patches added to 0.12.1pre2
+'''
+''' Revision 1.1.2.1  1998/02/07 02:27:30  larsbj
+''' patch from jean-marc, and a fix to libdir detection by lgb
+'''
+''' Revision 1.1  1997/10/26 10:22:04  larsbj
+''' lots of small changes
+'''
+''' Revision 1.1  1997/10/17 16:52:21  larsbj
+''' changes
+'''
+'''
+.de Sh
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp
+.if t .sp .5v
+.if n .sp
+..
+.de Ip
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.de Vb
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve
+.ft R
+
+.fi
+..
+'''
+'''
+'''     Set up \*(-- to give an unbreakable dash;
+'''     string Tr holds user defined translation string.
+'''     Bell System Logo is used as a dummy character.
+'''
+.tr \(*W-|\(bv\*(Tr
+.ie n \{\
+.ds -- \(*W-
+.ds PI pi
+.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+.ds L" ""
+.ds R" ""
+.ds L' '
+.ds R' '
+'br\}
+.el\{\
+.ds -- \(em\|
+.tr \*(Tr
+.ds L" ``
+.ds R" ''
+.ds L' `
+.ds R' '
+.ds PI \(*p
+'br\}
+.\"    If the F register is turned on, we'll generate
+.\"    index entries out stderr for the following things:
+.\"            TH      Title 
+.\"            SH      Header
+.\"            Sh      Subsection 
+.\"            Ip      Item
+.\"            X<>     Xref  (embedded
+.\"    Of course, you have to process the output yourself
+.\"    in some meaninful fashion.
+.if \nF \{
+.de IX
+.tm Index:\\$1\t\\n%\t"\\$2"
+..
+.nr % 0
+.rr F
+.\}
+.TH TEX 1 "perl 5.003, patch 07" "30/Oct/96" "User Contributed Perl Documentation"
+.IX Title "TEX 1"
+.UC
+.IX Name "Text::TeX - Perl module for parsing of C<TeX>."
+.if n .hy 0
+.if n .na
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.de CQ          \" put $1 in typewriter font
+.ft CW
+'if n "\c
+'if t \\&\\$1\c
+'if n \\&\\$1\c
+'if n \&"
+\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
+'.ft R
+..
+.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
+.      \" AM - accent mark definitions
+.bd B 3
+.      \" fudge factors for nroff and troff
+.if n \{\
+.      ds #H 0
+.      ds #V .8m
+.      ds #F .3m
+.      ds #[ \f1
+.      ds #] \fP
+.\}
+.if t \{\
+.      ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.      ds #V .6m
+.      ds #F 0
+.      ds #[ \&
+.      ds #] \&
+.\}
+.      \" simple accents for nroff and troff
+.if n \{\
+.      ds ' \&
+.      ds ` \&
+.      ds ^ \&
+.      ds , \&
+.      ds ~ ~
+.      ds ? ?
+.      ds ! !
+.      ds /
+.      ds q
+.\}
+.if t \{\
+.      ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.      ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.      ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.      ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.      ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.      ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
+.      ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
+.      ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.      ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+.\}
+.      \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
+.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
+.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
+.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.ds oe o\h'-(\w'o'u*4/10)'e
+.ds Oe O\h'-(\w'O'u*4/10)'E
+.      \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.      \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.      ds : e
+.      ds 8 ss
+.      ds v \h'-1'\o'\(aa\(ga'
+.      ds _ \h'-1'^
+.      ds . \h'-1'.
+.      ds 3 3
+.      ds o a
+.      ds d- d\h'-1'\(ga
+.      ds D- D\h'-1'\(hy
+.      ds th \o'bp'
+.      ds Th \o'LP'
+.      ds ae ae
+.      ds Ae AE
+.      ds oe oe
+.      ds Oe OE
+.\}
+.rm #[ #] #H #V #F C
+.SH "NAME"
+.IX Header "NAME"
+Text::TeX -- Perl module for parsing of \f(CWTeX\fR.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.PP
+.Vb 1
+\&  use Text::TeX;
+.Ve
+.Vb 12
+\&  sub report {
+\&    my($eaten,$txt) = (shift,shift);
+\&    print "Comment: `", $eaten->[1], "'\en" if defined $eaten->[1];
+\&    print "@{$txt->{waitfors}} ", ref $eaten, ": `", $eaten->[0], "'";
+\&    if (defined $eaten->[3]) {
+\&      my @arr = @{ $eaten->[3] };
+\&      foreach (@arr) {
+\&        print " ", $_->print;
+\&      }
+\&    }
+\&    print "\en";
+\&  }
+.Ve
+.Vb 3
+\&  my $file = new Text::TeX::OpenFile 'test.tex',
+\&    'defaultact' => \e&report;
+\&  $file->process;
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+A new \f(CWTeX\fR parser is created by
+.PP
+.Vb 1
+\&  $file = new Text::TeX::OpenFile $filename, attr1 => $val1, ...;
+.Ve
+$filename may be \f(CWundef\fR, in this case the text to parse may be
+specified in the attribute \f(CWstring\fR.
+.PP
+Recognized attributes are:
+.Ip "\f(CWstring\fR" 12
+.IX Item "\f(CWstring\fR"
+contains the text to parse before parsing \f(CW$filename\fR.
+.Ip "\f(CWdefaultact\fR" 12
+.IX Item "\f(CWdefaultact\fR"
+denotes a procedure to submit \f(CWoutput tokens\fR to.
+.Ip "\f(CWtokens\fR" 12
+.IX Item "\f(CWtokens\fR"
+gives a hash of \f(CWdescriptors\fR for \f(CWinput token\fR. A sane default is
+provided.
+.PP
+A call to the method \f(CWprocess\fR launches the parser.
+.Sh "Tokenizer"
+.IX Subsection "Tokenizer"
+When the parser is running, it processes input stream by splitting it
+into \f(CWinput tokens\fR using some \fIheuristics\fR similar to the actual
+rules of TeX tokenizer. However, since it does not use \fIthe exact
+rules\fR, the resulting tokens may be wrong if some advanced TeX command
+are used, say, the character classes are changed.
+.PP
+This should not be of any concern if the stream in question is a
+\*(L"user\*(R" file, but is important for \*(L"packages\*(R".
+.Sh "Digester"
+.IX Subsection "Digester"
+The processed \f(CWinput tokens\fR are handled to the digester, which
+handles them according to the provided \f(CWtokens\fR attribute.
+.Sh "\f(CWtokens\fR attribute"
+.IX Subsection "\f(CWtokens\fR attribute"
+This is a hash reference which describes how the \f(CWinput tokens\fR
+should be handled. A key to this hash is a literal like \f(CW^\fR or
+\f(CW\efraction\fR. A value should be another hash reference, with the
+following keys recognized:
+.Ip "class" 7
+.IX Item "class"
+Into which class to bless the token. Several predefined classes are
+provided. The default is \f(CWText::TeX::Token\fR.
+.Ip "Type" 7
+.IX Item "Type"
+What kind of special processing to do with the input after the
+\f(CWclass\fR methods are called. Recognized \f(CWType\fRs are:
+.Ip "report_args" 17
+.IX Item "report_args"
+When the token of this \f(CWType\fR is encountered, it is converted into
+\f(CWText::Tex::BegArgsToken\fR. Then the arguments are processed as usual,
+and an \f(CWoutput token\fR of type \f(CWText::Tex::ArgToken\fR is inserted
+between them. Finally, after all the arguments are processed, an
+\f(CWoutput token\fR \f(CWText::Tex::EndArgsToken\fR is inserted.
+.Sp
+The first element of these simulated \f(CWoutput tokens\fR is an array
+reference with the first element being the initial \f(CWoutput token\fR
+which generated this sequence. The second element of the internal
+array is the number of arguments required by the \f(CWinput token\fR. The
+\f(CWText::Tex::ArgToken\fR token has a third element, which is the ordinal
+of the argument which ends immediately before this token.
+.Sp
+If requested, a token \f(CWText::Tex::LookAhead\fR may be returned instead
+of \f(CWText::Tex::EndArgsToken\fR. The additional elements of
+\f(CW$token-\fR[0]> are: the reference to the corresponding \f(CWlookahead\fR
+attribute, the relevant key (text of following token) and the
+corresponding value.
+.Sp
+In such a case the input token which was looked-ahead would generate
+an output token of type \f(CWText::Tex::BegArgsTokenLookedAhead\fR (if it
+usually generates \f(CWText::Tex::BegArgsToken\fR).
+.Ip "local" 17
+.IX Item "local"
+Means that these macro introduces a local change, which should be
+undone at the end of enclosing block. At the end of the block an
+output event \f(CWText::TeX::EndLocal\fR is delivered, with \f(CW$token-\fR[0]>
+being the output token for the \fIlocal\fR event starting.
+.Sp
+Useful for font switching. 
+.PP
+Some additional keys may be recognized by the code for the particular
+\f(CWclass\fR.
+.Ip "\f(CWcount\fR" 12
+.IX Item "\f(CWcount\fR"
+number of arguments to the macro.
+.Ip "\f(CWwaitfor\fR" 12
+.IX Item "\f(CWwaitfor\fR"
+gives the matching token for a \fIstarting delimiter\fR token.
+.Ip "\f(CWeatargs\fR" 12
+.IX Item "\f(CWeatargs\fR"
+number of tokens to swallow literally and put into the relevant slot
+of the \f(CWoutput token\fR. The surrounding braces are stripped.
+.Ip "\f(CWselfmatch\fR" 12
+.IX Item "\f(CWselfmatch\fR"
+is used with \f(CWeatargs==1\fR. Denotes that the matching token is also
+\f(CWeatargs==1\fR, and the swallowed tokens should coinside (like with
+\f(CW\ebegin{blah} ... \eend{blah}\fR).
+.Ip "\f(CWlookahead\fR" 12
+.IX Item "\f(CWlookahead\fR"
+is a hash with keys being texts of tokens which need to be treated
+specially after the end of arguments for the current token. If the
+corresponding text follows the token indeed, a token
+\f(CWText::Tex::LookAhead\fR is returned instead of
+\f(CWText::Tex::EndArgsToken\fR.
+.Sh "Symbol font table"
+.IX Subsection "Symbol font table"
+The hash \f(CW%Text::TeX::xfont\fR contains the translation table from TeX
+tokens into the corresponding font elements. The values are array
+references of the form \f(CW[fontname, char]\fR, Currently the only font
+supported is \f(CWsymbol\fR.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Ilya Zakharevich, ilya@math.ohio-state.edu
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\fIperl\fR\|(1).
+
+.rn }` ''
diff --git a/lib/reLyX/Verbatim.pm b/lib/reLyX/Verbatim.pm
new file mode 100644 (file)
index 0000000..c03770f
--- /dev/null
@@ -0,0 +1,121 @@
+#######################  VERBATIM COPYING SUBROUTINES  ########################
+# This file is part of reLyX. 
+# Copyright (c) 1998-9 Amir Karger karger@post.harvard.edu
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+#
+# Subs for copying stuff verbatim from a TeX file instead of parsing it.
+# These subs use the rather low-level TT:OpenFile::paragraph method, because
+# the higher level methods assume you've parsed, and verbatim stuff might be
+# parsed normally.
+
+package Verbatim;
+use strict;
+
+sub copy_verb {
+# This subroutine handles a \verb token. Text is guaranteed to be on one line.
+# \verb must be followed by a non-letter, then copy anything until the next
+# occurrence of that character.
+    my ($fileobject, $token) = @_;
+    my $verb = $token->exact_print; # "\verb" or "\verb*"
+    my $textref = $fileobject->paragraph;
+    # eat e.g., !text $\% text!
+    if ($$textref =~ s/^([^A-Za-z*]).*?\1//) {
+        $verb .= $&;
+    } else { warn "unable to parse \\verb"; $verb .="||" }
+    return $verb;
+}
+
+sub copy_verbatim {
+# This subroutine eats text verbatim until a certain text is reached
+# The end text itself is not eaten; this is necessary so that
+#    environments are properly nested (otherwise, TeX.pm complains)
+# It returns a string containing the text
+#
+# Arg 0 is the Text::TeX::OpenFile file object, arg 1 is the beginning token
+    my $fileobject = shift;
+    my $begin_token = shift;
+    my %endtokentbl = (  '\(' => '\)' , '\[' => '\]'  );
+
+    my $type = ref($begin_token);
+    $type =~ s/^Text::TeX:://o or die "unknown token type $type?!";
+
+# Figure out beginning & end text of this token or environment
+# Beginning text so we know if you have an environment nested within itself
+# End text so we know when to finish copying OR when to 'pop' a level
+#    if an environment is nested within itself
+# Because the searches will generally be matching expressions with backslashes
+#    and other meta-characters, we put \Q\E around (pieces of) the expressions
+    my ($begin_text, $end_text);
+    if ($type =~ /^Token$/) {  # \( or \[
+       $begin_text = $begin_token->print; # e.g., '\('
+        die "unknown begin_text" unless exists $endtokentbl{$begin_text};
+       $end_text = "\Q$endtokentbl{$begin_text}\E";
+       # actually, begin_text shouldn't be nec. since you can't nest math
+       $begin_text = "\Q$begin_text\E"; # quote slashes, etc.
+
+    } elsif (/^Begin::Group::Args$/) {    # \begin{foo}
+       # \s* to allow, e.g., '\begin {foo}'
+       $begin_text = $begin_token->print;
+       $begin_text = "\Q$begin_text\E";
+       $begin_text =~ s/begin/begin\\s*/;
+        ($end_text = $begin_text) =~ s/begin/end/;
+
+    } else {
+        die "copy_verbatim called with unknown token type $type!";
+    }
+    #print "\nsub copy_verbatim going to copy until $end_text\n" if $debug_on;
+
+# Actual copying
+    my $textref; # reference to stuff we read in to print
+    my $to_print = ""; #text to print
+    # we're automatically "nested" once since we had the original \begin
+    my $nest_count = 1;
+
+    # (Eat and) Print out paragraphs until you find $end_text
+    # paragraph returns "" if it's time to get a new paragraph -- if that
+    # happens, we want to continue, but we can't dereference $textref
+    #    Call paragraph with an argument so that it gets a new paragraph if
+    # it gets to the end of a paragraph
+    #    Allow nesting of this environment!
+    while (defined ($textref = $fileobject->paragraph(1))) {
+       next unless $textref; # new paragraph; keep going
+
+       # If we match begin or end text, eat everything up to it
+       # Make sure to handle (nested) begin & end texts in order, so we can
+       #    differentiate \begin \begin \end \end from \begin \end \begin \end
+       if ($$textref =~ /$end_text/ && $` !~ /$begin_text/) {
+           # Note that $` will be from the last *successful* match,
+           #    namely the end_text match
+           --$nest_count;
+           $to_print .= $`; # print until the \end command
+           if ($nest_count) {
+               $to_print .= $&; # print the end text too
+               $$textref = $'; # leave the rest in the paragraph
+           } else {
+               # Leave end text (and anything after it) for TeX.pm
+               $$textref = $& . $';
+               last; # done copying since there's no more nesting
+           }
+
+       # If we match beginning text, we have a nested environment
+       } elsif ($$textref =~ /$begin_text/ && $` !~ /$end_text/) {
+           $to_print .= $`; # print up to and
+           $to_print .= $&; # INCLUDING the begin text
+           $$textref = $'; # leave the rest in the paragraph
+           ++$nest_count;
+
+       # If we didn't match begin OR end text, just eat the whole paragraph
+       } else {
+           $to_print .= $$textref;
+           $$textref = "";
+        } # end if $$textref
+    } #end while
+    die "eof without finding matching text $end_text" if (!defined $textref);
+
+    # return the string
+    #print "Exiting sub copy_verbatim\n" if $debug_on;
+    return $to_print;
+} # end copy_verbatim
+
+1; # return true to calling routine
diff --git a/lib/reLyX/acinclude.m4 b/lib/reLyX/acinclude.m4
new file mode 100644 (file)
index 0000000..c694681
--- /dev/null
@@ -0,0 +1,99 @@
+dnl Usage: RELYX_WARNING(message)  Displays the warning "message" and sets
+the
+dnl flag lyx_warning to yes.
+AC_DEFUN(RELYX_WARNING,[
+relyx_warning_txt="$relyx_warning_txt
+== $1
+"
+relyx_warning=yes])
+
+
+dnl RELYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
+dnl             
+define(RELYX_SEARCH_PROG,[dnl
+for ac_prog in $2 ; do
+# Extract the first word of "$ac_prog", so it can be a program name with
+# args.
+  set dummy $ac_prog ; ac_word=$[2]
+  if test ! -n "[$]$1"; then
+    IFS="${IFS=         }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+    for ac_dir in $PATH; do
+      test -z "$ac_dir" && ac_dir=.
+      if test -f [$ac_dir/$ac_word]; then
+        $1="$ac_prog"
+        break
+      fi
+    done
+    IFS="$ac_save_ifs"
+  fi
+
+  if test -n "[$]$1"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  ifelse($3,,,[$3])
+  test -n "[$]$1" && break
+done
+])
+
+
+dnl Usage RELYX_PROG_PERL_OK
+AC_DEFUN(RELYX_PROG_PERL_OK,[
+if echo 'require 5.002;exit' | $ac_dir/$ac_prog 2>&5
+then
+  PERL=$ac_dir/$ac_prog
+else
+  PERL=
+fi])
+
+dnl Usage RELYX_CHECK_PERL
+AC_DEFUN(RELYX_CHECK_PERL,[
+AC_MSG_CHECKING([for perl >= 5.002])
+RELYX_SEARCH_PROG(PERL, perl perl5 perl5.002 perl5.003 perl5.004,
+RELYX_PROG_PERL_OK
+)
+if test -n "$PERL" ; then
+  AC_MSG_RESULT($PERL)
+else
+  PERL="/bin/echo reLyX has been disabled because perl version 5.002 has
+not \
+been found.\nTo reenable it, edit "
+  AC_MSG_RESULT(no)
+  RELYX_WARNING(dnl
+Configure has not been able to find a version 5.002 or better of Perl.
+   reLyX has been setup to only display a warning message.
+   Set variable PERL to some value to install a working reLyX.)
+fi
+AC_SUBST(PERL)])
+
+dnl Usage: RELYX_CHECK_ERRORS  Displays a warning message if a RELYX_ERROR
+dnl   has occured previously. 
+AC_DEFUN(RELYX_CHECK_ERRORS,[
+if test x$relyx_error = xyes; then
+cat <<EOF
+**** The following problems have been detected by configure. 
+**** Please check the messages below before running 'make'.
+**** (see the section 'Problems' in the INSTALL file)
+$relyx_error_txt
+$relyx_warning_txt
+deleting cache $cache_file
+EOF
+  rm -f $cache_file
+else
+
+if test x$relyx_warning = xyes; then
+cat <<EOF
+=== The following minor problems have been detected by configure. 
+=== Please check the messages below before running 'make'.
+=== (see the section 'Problems' in the INSTALL file)
+$relyx_warning_txt
+EOF
+fi
+cat <<EOF
+Configuration of LyX was successful.  
+Type 'make' to compile the program, 
+and then 'make install' to install it.
+EOF
+fi])
+
diff --git a/lib/reLyX/aclocal.m4 b/lib/reLyX/aclocal.m4
new file mode 100644 (file)
index 0000000..4c4ca4e
--- /dev/null
@@ -0,0 +1,206 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4a
+
+dnl Copyright (C) 1994, 1995-8, 1999 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 This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+dnl Usage: RELYX_WARNING(message)  Displays the warning "message" and sets
+the
+dnl flag lyx_warning to yes.
+AC_DEFUN(RELYX_WARNING,[
+relyx_warning_txt="$relyx_warning_txt
+== $1
+"
+relyx_warning=yes])
+
+
+dnl RELYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
+dnl             
+define(RELYX_SEARCH_PROG,[dnl
+for ac_prog in $2 ; do
+# Extract the first word of "$ac_prog", so it can be a program name with
+# args.
+  set dummy $ac_prog ; ac_word=$[2]
+  if test ! -n "[$]$1"; then
+    IFS="${IFS=         }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+    for ac_dir in $PATH; do
+      test -z "$ac_dir" && ac_dir=.
+      if test -f [$ac_dir/$ac_word]; then
+        $1="$ac_prog"
+        break
+      fi
+    done
+    IFS="$ac_save_ifs"
+  fi
+
+  if test -n "[$]$1"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  ifelse($3,,,[$3])
+  test -n "[$]$1" && break
+done
+])
+
+
+dnl Usage RELYX_PROG_PERL_OK
+AC_DEFUN(RELYX_PROG_PERL_OK,[
+if echo 'require 5.002;exit' | $ac_dir/$ac_prog 2>&5
+then
+  PERL=$ac_dir/$ac_prog
+else
+  PERL=
+fi])
+
+dnl Usage RELYX_CHECK_PERL
+AC_DEFUN(RELYX_CHECK_PERL,[
+AC_MSG_CHECKING([for perl >= 5.002])
+RELYX_SEARCH_PROG(PERL, perl perl5 perl5.002 perl5.003 perl5.004,
+RELYX_PROG_PERL_OK
+)
+if test -n "$PERL" ; then
+  AC_MSG_RESULT($PERL)
+else
+  PERL="/bin/echo reLyX has been disabled because perl version 5.002 has
+not \
+been found.\nTo reenable it, edit "
+  AC_MSG_RESULT(no)
+  RELYX_WARNING(dnl
+Configure has not been able to find a version 5.002 or better of Perl.
+   reLyX has been setup to only display a warning message.
+   Set variable PERL to some value to install a working reLyX.)
+fi
+AC_SUBST(PERL)])
+
+dnl Usage: RELYX_CHECK_ERRORS  Displays a warning message if a RELYX_ERROR
+dnl   has occured previously. 
+AC_DEFUN(RELYX_CHECK_ERRORS,[
+if test x$relyx_error = xyes; then
+cat <<EOF
+**** The following problems have been detected by configure. 
+**** Please check the messages below before running 'make'.
+**** (see the section 'Problems' in the INSTALL file)
+$relyx_error_txt
+$relyx_warning_txt
+deleting cache $cache_file
+EOF
+  rm -f $cache_file
+else
+
+if test x$relyx_warning = xyes; then
+cat <<EOF
+=== The following minor problems have been detected by configure. 
+=== Please check the messages below before running 'make'.
+=== (see the section 'Problems' in the INSTALL file)
+$relyx_warning_txt
+EOF
+fi
+cat <<EOF
+Configuration of LyX was successful.  
+Type 'make' to compile the program, 
+and then 'make install' to install it.
+EOF
+fi])
+
+
+# Do all the work for Automake.  This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AC_PROG_INSTALL])
+dnl We require 2.13 because we rely on SHELL being computed by configure.
+AC_PREREQ([2.13])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "[$]*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "[$]*" != "X $srcdir/configure conftestfile" \
+      && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "[$]2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+   $1=$2
+   AC_MSG_RESULT(found)
+else
+   $1="$3/missing $2"
+   AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
diff --git a/lib/reLyX/configure b/lib/reLyX/configure
new file mode 100755 (executable)
index 0000000..39b4426
--- /dev/null
@@ -0,0 +1,1197 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.13"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=reLyX.in
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+PACKAGE=reLyX
+VERSION=2.0
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# 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 $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:559: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
+echo "configure:612: checking whether build environment is sane" >&5
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "$*" != "X $srcdir/configure conftestfile" \
+      && test "$*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { echo "configure: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" 1>&2; exit 1; }
+   fi
+
+   test "$2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   { echo "configure: error: newly created file is older than distributed files!
+Check your system clock" 1>&2; exit 1; }
+fi
+rm -f conftest*
+echo "$ac_t""yes" 1>&6
+if test "$program_transform_name" = s,x,x,; then
+  program_transform_name=
+else
+  # Double any \ or $.  echo might interpret backslashes.
+  cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+  program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+  rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:669: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftestmake <<\EOF
+all:
+       @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  SET_MAKE=
+else
+  echo "$ac_t""no" 1>&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+
+PACKAGE=$PACKAGE
+
+VERSION=$VERSION
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
+fi
+cat >> confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >> confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
+echo "configure:716: checking for working aclocal" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+   ACLOCAL=aclocal
+   echo "$ac_t""found" 1>&6
+else
+   ACLOCAL="$missing_dir/missing aclocal"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
+echo "configure:729: checking for working autoconf" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+   AUTOCONF=autoconf
+   echo "$ac_t""found" 1>&6
+else
+   AUTOCONF="$missing_dir/missing autoconf"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working automake""... $ac_c" 1>&6
+echo "configure:742: checking for working automake" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+   AUTOMAKE=automake
+   echo "$ac_t""found" 1>&6
+else
+   AUTOMAKE="$missing_dir/missing automake"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
+echo "configure:755: checking for working autoheader" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+   AUTOHEADER=autoheader
+   echo "$ac_t""found" 1>&6
+else
+   AUTOHEADER="$missing_dir/missing autoheader"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
+echo "configure:768: checking for working makeinfo" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+   MAKEINFO=makeinfo
+   echo "$ac_t""found" 1>&6
+else
+   MAKEINFO="$missing_dir/missing makeinfo"
+   echo "$ac_t""missing" 1>&6
+fi
+
+
+
+# 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
+# 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 $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:794: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+echo $ac_n "checking for perl >= 5.002""... $ac_c" 1>&6
+echo "configure:848: checking for perl >= 5.002" >&5
+for ac_prog in perl perl5 perl5.002 perl5.003 perl5.004 ; do
+# Extract the first word of "$ac_prog", so it can be a program name with
+# args.
+  set dummy $ac_prog ; ac_word=$2
+  if test ! -n "$PERL"; then
+    IFS="${IFS=         }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+    for ac_dir in $PATH; do
+      test -z "$ac_dir" && ac_dir=.
+      if test -f $ac_dir/$ac_word; then
+        PERL="$ac_prog"
+        break
+      fi
+    done
+    IFS="$ac_save_ifs"
+  fi
+
+  if test -n "$PERL"; then
+    ac_result=yes
+  else
+    ac_result=no
+  fi
+  
+if echo 'require 5.002;exit' | $ac_dir/$ac_prog 2>&5
+then
+  PERL=$ac_dir/$ac_prog
+else
+  PERL=
+fi
+
+  test -n "$PERL" && break
+done
+
+if test -n "$PERL" ; then
+  echo "$ac_t""$PERL" 1>&6
+else
+  PERL="/bin/echo reLyX has been disabled because perl version 5.002 has
+not \
+been found.\nTo reenable it, edit "
+  echo "$ac_t""no" 1>&6
+  
+relyx_warning_txt="$relyx_warning_txt
+== Configure has not been able to find a version 5.002 or better of Perl.
+   reLyX has been setup to only display a warning message.
+   Set variable PERL to some value to install a working reLyX.
+"
+relyx_warning=yes
+fi
+
+
+
+
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | 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 \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[    `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
+
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile reLyX" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@ACLOCAL@%$ACLOCAL%g
+s%@AUTOCONF@%$AUTOCONF%g
+s%@AUTOMAKE@%$AUTOMAKE%g
+s%@AUTOHEADER@%$AUTOHEADER%g
+s%@MAKEINFO@%$MAKEINFO%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@PERL@%$PERL%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile reLyX"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+chmod 755 reLyX
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+
+
+if test x$relyx_error = xyes; then
+cat <<EOF
+**** The following problems have been detected by configure. 
+**** Please check the messages below before running 'make'.
+**** (see the section 'Problems' in the INSTALL file)
+$relyx_error_txt
+$relyx_warning_txt
+deleting cache $cache_file
+EOF
+  rm -f $cache_file
+else
+
+if test x$relyx_warning = xyes; then
+cat <<EOF
+=== The following minor problems have been detected by configure. 
+=== Please check the messages below before running 'make'.
+=== (see the section 'Problems' in the INSTALL file)
+$relyx_warning_txt
+EOF
+fi
+cat <<EOF
+Configuration of LyX was successful.  
+Type 'make' to compile the program, 
+and then 'make install' to install it.
+EOF
+fi
diff --git a/lib/reLyX/configure.in b/lib/reLyX/configure.in
new file mode 100644 (file)
index 0000000..8bc3ebd
--- /dev/null
@@ -0,0 +1,28 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(reLyX.in)
+AC_PREREQ(2.13) dnl We want to use autoconf 2.13
+
+PACKAGE=reLyX
+VERSION=2.0
+dnl must make a macro that gets the reLyX version
+AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
+
+dnl Checks for programs.
+AC_PROG_INSTALL
+RELYX_CHECK_PERL
+
+dnl Checks for libraries.
+dnl Replace `main' with a function in -lXpm:
+dnl AC_CHECK_LIB(Xpm, main)
+dnl Replace `main' with a function in -lforms:
+dnl AC_CHECK_LIB(forms, main)
+
+dnl Checks for header files.
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+
+dnl Checks for library functions.
+
+AC_OUTPUT(Makefile reLyX, chmod 755 reLyX)
+
+RELYX_CHECK_ERRORS
diff --git a/lib/reLyX/install-sh b/lib/reLyX/install-sh
new file mode 100755 (executable)
index 0000000..e9de238
--- /dev/null
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd="$stripprog"
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+else
+       true
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+       
+       if [ -d $dst ]; then
+               instcmd=:
+               chmodcmd=""
+       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/lib/reLyX/missing b/lib/reLyX/missing
new file mode 100755 (executable)
index 0000000..7789652
--- /dev/null
@@ -0,0 +1,190 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997 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
+
+case "$1" in
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing - GNU libit 0.0"
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+  aclocal)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acinclude.m4' or \`configure.in'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`configure.in'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acconfig.h' or \`configure.in'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in`
+    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.in'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.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/lib/reLyX/mkinstalldirs b/lib/reLyX/mkinstalldirs
new file mode 100755 (executable)
index 0000000..408351f
--- /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: mkinstalldirs,v 1.1 1999/09/27 18:44:35 larsbj Exp $
+
+errstatus=0
+
+for file
+do
+   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+   shift
+
+   pathcomp=
+   for d
+   do
+     pathcomp="$pathcomp$d"
+     case "$pathcomp" in
+       -* ) pathcomp=./$pathcomp ;;
+     esac
+
+     if test ! -d "$pathcomp"; then
+        echo "mkdir $pathcomp"
+
+        mkdir "$pathcomp" || lasterr=$?
+
+        if test ! -d "$pathcomp"; then
+         errstatus=$lasterr
+        fi
+     fi
+
+     pathcomp="$pathcomp/"
+   done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/lib/reLyX/noweb2lyx.in b/lib/reLyX/noweb2lyx.in
new file mode 100644 (file)
index 0000000..9e9081f
--- /dev/null
@@ -0,0 +1,130 @@
+#!@PERL@
+# 
+# Copyright (C) 1999 Kayvan A. Sylvan <kayvan@sylvan.com>
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+#
+# Written with assistance from:
+#   Edmar Wienskoski Jr. <edmar-w-jr@technologist.com>
+#   Amir Karger <karger@post.harvard.edu>
+#
+# $Id: noweb2lyx.in,v 1.1 1999/09/27 18:44:34 larsbj Exp $
+#
+# NOTE: This file was automatically generated from noweb2lyx.lyx using noweb.
+#
+&usage() if ($#ARGV < 1); # zero or one argument 
+if ($ARGV[0] eq "-pre") {
+  &usage unless ($#ARGV == 2);
+  $input_file = $ARGV[1]; $output_file = $ARGV[2]; $pre_only = 1;
+} elsif ($ARGV[0] eq "-post") {
+  &usage unless ($#ARGV == 2);
+  $input_file = $ARGV[1]; $output_file = $ARGV[2]; $post_only = 1;
+} else {
+  &usage unless ($#ARGV == 1);
+  $input_file = $ARGV[0]; $output_file = $ARGV[1];
+  $pre_only = 0; $post_only = 0;
+}
+sub setup_files {
+  my($in, $out) = @_;
+  open(INPUT, "<$in") || die "Can not read $in: $!\n";
+  open(OUTPUT, ">$out") || die "Can not write $out: $!\n";
+}
+sub usage() {
+  print "Usage: noweb2lyx [-pre | -post] input-file output-file
+
+If -pre is specified, only pre-processes the input-file for reLyX.
+Similarly, in the case of -post, post-processes reLyX output.
+In case of bugs, Email Kayvan Sylvan <kayvan\@sylvan.com>.\n";
+  exit;
+}
+if (!$post_only) {
+  if ($pre_only) {
+    &setup_files($input_file, $output_file);
+  } else {
+    $relyx_file = "temp$$";
+    &setup_files($input_file, $relyx_file);
+  }
+  inputline: while(<INPUT>)
+  {
+    if (/^\s*\<\<.*\>\>=/) { # Beginning of a noweb scrap
+      $savedScrap = $_;
+      $endLine = "";
+      scrapline: while (<INPUT>) {
+        last scrapline if /^@\s+/;
+        $savedScrap .= $_;
+      };
+      switch: {
+        if (/^@\s+$/) {$savedScrap .= $_; last switch; }
+        if (/^@\s+%def.*$/) {$savedScrap .= $_; last switch; }
+        if (/^@\s+(.*)$/) {$savedScrap .= "@\n"; $endLine = "$1\n"; }
+      }
+      print OUTPUT "\\begin{reLyXskip}\n";
+      print OUTPUT $savedScrap;
+      print OUTPUT "\\end{reLyXskip}\n\n";
+      print OUTPUT "$endLine";
+    } elsif (/^@\s+(.*)/) { # Beginning of a documentation chunk
+      print OUTPUT $1; # We do not need the ``@'' part
+    } elsif (/\[\[.+\]\]/) { # noweb quoted code
+      s/\[\[.+?\]{2,}/{$&}/g;
+      print OUTPUT;
+    } else {
+      print OUTPUT; # Just let the line pass through
+    }
+  }
+  close(INPUT);
+  close(OUTPUT);
+}
+if ((!$pre_only) && (!$post_only)) {
+  open(INPUT, "<$relyx_file") ||
+    die "Can not read $relyx_file: $!\n";
+  $class = "article"; # default if none found
+  parse: while(<INPUT>) {
+    if (/\\docu[m]entclass{(.*)}/) {
+      $class = $1;
+      last parse;
+    }
+  }
+  close(INPUT);
+  $doc_class = "literate-" . $class;
+  die "reLyX returned non-zero: $!\n"
+    if (system("reLyX -c $doc_class $relyx_file"));
+}
+if (!$pre_only) {
+  if ($post_only) {
+    &setup_files("$input_file", "$output_file");
+  } else {
+    &setup_files("$relyx_file.lyx", "$output_file");
+  }
+  line: while(<INPUT>)
+  {
+    if (/\\latex latex/) { # Beginning of some latex code
+      if (($line = <INPUT>) =~ /^\s*<</) { # code scrap
+        $savedScrap = "\\layout Scrap\n\n$line";
+        codeline: while (<INPUT>) {
+          $savedScrap .= $_;
+          last codeline if /^@\s+/;
+        };
+        print OUTPUT $savedScrap;
+        slurp: while (<INPUT>) {
+          last slurp if /\\latex /;
+          next slurp if /\\newline/;
+          next slurp if /^\s*$/;
+          warn "confused by line: $_";
+        }
+      } else {
+        # print the \latex latex line + next line
+        print OUTPUT "$_$line";
+      }
+      next line;
+    }
+    if (/\[\[.+\]\]/) { # special code for [[var]]
+      s/\[\[.+?\]{2,}/\n\\latex latex\n$&\n\\latex default\n/g;
+      print OUTPUT;
+      next line;
+    }
+    print OUTPUT; # default
+  } 
+  close(INPUT);
+  close(OUTPUT);
+}
+system("rm -f $relyx_file*") unless ($post_only || $pre_only);
diff --git a/lib/reLyX/reLyX.in b/lib/reLyX/reLyX.in
new file mode 100644 (file)
index 0000000..38e7160
--- /dev/null
@@ -0,0 +1,55 @@
+#!@PERL@
+# This file is part of reLyX
+# Copyright (c) 1998-9 Amir Karger karger@post.harvard.edu
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+
+############################# reLyX wrapper
+use strict;
+use File::Basename;
+$^W = 1; # same as 'perl -w'
+
+# Variables to make global, so subroutines can use them
+use vars qw($lyxdir $lyxname);
+
+my (@maybe_dir);
+my $mainscript = "reLyXmain.pl"; 
+
+# Do this in a BEGIN block so it's done before the 'use lib' below
+BEGIN{
+# This points to LyX library dir, e.g. /usr/local/share/lyx
+$lyxdir = "@LYX_DIR@";
+# This is just "." if you compiled from the source directory
+my $srcdir = "@srcdir@";
+# This is the name of the program, usually just "lyx"
+$lyxname = "@PACKAGE@";
+# The name under which reLyX was invoked
+my $name = $0;
+# resolve any links to dirname
+while (defined (readlink($name))) {$name = readlink($name)};
+my $dir = &dirname($name);
+
+# Create a list of possible directories to look in. Non-existent directories
+#    are OK, but empty or undefined values will make 'use lib' complain
+my $i = 0;
+# case 1: for developers, e.g. - reLyX and $mainscript in same directory
+$maybe_dir[$i++] = ".";
+# case 2: environment variable LYX_DIR_12 has been set
+if (exists $ENV{LYX_DIR_10x}) { $maybe_dir[$i++] = "$ENV{LYX_DIR_10x}/reLyX"};
+# case 3: ran make but not make install.
+$maybe_dir[$i++] = "$dir/$srcdir";
+# case 4: e.g., reLyX in /opt/bin, $mainscript in /opt/share/lyx/reLyX
+$maybe_dir[$i++] = "$dir/../share/$lyxname/reLyX"; # case 4
+# case 5: configure figured out where $mainscript is
+$maybe_dir[$i++] = "$lyxdir/reLyX";
+} # end BEGIN block
+
+# Now put those directories into @INC
+use lib @maybe_dir;
+
+# Now run the script. Perl will look in @INC to find the script (and
+#     other modules that $mainscript calls)
+require $mainscript; # require includes and runs the code...
+
+exit;
+############################ end reLyX wrapper
diff --git a/lib/reLyX/reLyX.man b/lib/reLyX/reLyX.man
new file mode 100644 (file)
index 0000000..884465e
--- /dev/null
@@ -0,0 +1,884 @@
+.rn '' }`
+''' $RCSfile: reLyX.man,v $$Revision: 1.1 $$Date: 1999/09/27 18:44:34 $
+'''
+''' $Log: reLyX.man,v $
+''' Revision 1.1  1999/09/27 18:44:34  larsbj
+''' Initial revision
+'''
+'''
+.de Sh
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp
+.if t .sp .5v
+.if n .sp
+..
+.de Ip
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.de Vb
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve
+.ft R
+
+.fi
+..
+'''
+'''
+'''     Set up \*(-- to give an unbreakable dash;
+'''     string Tr holds user defined translation string.
+'''     Bell System Logo is used as a dummy character.
+'''
+.tr \(*W-|\(bv\*(Tr
+.ie n \{\
+.ds -- \(*W-
+.ds PI pi
+.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+.ds L" ""
+.ds R" ""
+'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
+'''   \*(L" and \*(R", except that they are used on ".xx" lines,
+'''   such as .IP and .SH, which do another additional levels of
+'''   double-quote interpretation
+.ds M" """
+.ds S" """
+.ds N" """""
+.ds T" """""
+.ds L' '
+.ds R' '
+.ds M' '
+.ds S' '
+.ds N' '
+.ds T' '
+'br\}
+.el\{\
+.ds -- \(em\|
+.tr \*(Tr
+.ds L" ``
+.ds R" ''
+.ds M" ``
+.ds S" ''
+.ds N" ``
+.ds T" ''
+.ds L' `
+.ds R' '
+.ds M' `
+.ds S' '
+.ds N' `
+.ds T' '
+.ds PI \(*p
+'br\}
+.\"    If the F register is turned on, we'll generate
+.\"    index entries out stderr for the following things:
+.\"            TH      Title 
+.\"            SH      Header
+.\"            Sh      Subsection 
+.\"            Ip      Item
+.\"            X<>     Xref  (embedded
+.\"    Of course, you have to process the output yourself
+.\"    in some meaninful fashion.
+.if \nF \{
+.de IX
+.tm Index:\\$1\t\\n%\t"\\$2"
+..
+.nr % 0
+.rr F
+.\}
+.TH RELYX 1 "Version 2.9.2.1" "2/May/99" "User Contributed Perl Documentation"
+.UC
+.if n .hy 0
+.if n .na
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.de CQ          \" put $1 in typewriter font
+.ft CW
+'if n "\c
+'if t \\&\\$1\c
+'if n \\&\\$1\c
+'if n \&"
+\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
+'.ft R
+..
+.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
+.      \" AM - accent mark definitions
+.bd B 3
+.      \" fudge factors for nroff and troff
+.if n \{\
+.      ds #H 0
+.      ds #V .8m
+.      ds #F .3m
+.      ds #[ \f1
+.      ds #] \fP
+.\}
+.if t \{\
+.      ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.      ds #V .6m
+.      ds #F 0
+.      ds #[ \&
+.      ds #] \&
+.\}
+.      \" simple accents for nroff and troff
+.if n \{\
+.      ds ' \&
+.      ds ` \&
+.      ds ^ \&
+.      ds , \&
+.      ds ~ ~
+.      ds ? ?
+.      ds ! !
+.      ds /
+.      ds q
+.\}
+.if t \{\
+.      ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.      ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.      ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.      ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.      ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.      ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
+.      ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
+.      ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.      ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
+.\}
+.      \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
+.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
+.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
+.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.ds oe o\h'-(\w'o'u*4/10)'e
+.ds Oe O\h'-(\w'O'u*4/10)'E
+.      \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.      \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.      ds : e
+.      ds 8 ss
+.      ds v \h'-1'\o'\(aa\(ga'
+.      ds _ \h'-1'^
+.      ds . \h'-1'.
+.      ds 3 3
+.      ds o a
+.      ds d- d\h'-1'\(ga
+.      ds D- D\h'-1'\(hy
+.      ds th \o'bp'
+.      ds Th \o'LP'
+.      ds ae ae
+.      ds Ae AE
+.      ds oe oe
+.      ds Oe OE
+.\}
+.rm #[ #] #H #V #F C
+.SH "NAME"
+\fBreLyX\fR \- translate well-behaved LaTeX into LyX
+.SH "SYNOPSIS"
+The simplest way to use \fBreLyX\fR is via the File->Import command in LyX. (This
+option is available starting with version 1.0.0.) That runs \fBreLyX\fR on
+the given file and loads the resulting file into LyX. You should try that
+first, and call it from the command line only if you need to use more
+complicated options.
+.PP
+\fBreLyX\fR [ \fB\-c\fR \fItextclass\fR ] [ \fB\-df\fR ] [ \fB\-o\fR \fIoutputdir\fR ] [\fB\-n\fR]
+[\ \fB\-r\fR\ \fIrenv1\fR[,\fIrenv2\fR...]] [\ \fB\-s\fR\ \fIsfile1\fR[,\fIsfile2\fR...]]
+\fIinputfile\fR
+.PP
+\fBreLyX\fR \fB\-p\fR \fB\-c\fR \fItextclass\fR [ \fB\-df\fR ] [ \fB\-o\fR \fIoutputdir\fR ]
+[\ \fB\-r\fR\ \fIrenv1\fR[,\fIrenv2\fR...]] [\ \fB\-s\fR\ \fIsfile1\fR[,\fIsfile2\fR...]]
+\fIinputfiles\fR
+.PP
+\fBreLyX\fR \fB\-h\fR
+.SH "OPTIONS"
+.Ip "\fB\-c\fR" 4
+Class. By default, when \fBreLyX\fR sees a \f(CW\edocumentclass{foo}\fR command, it
+creates a file of textclass \*(L"foo\*(R" and reads the LyX layout file for that class
+(something like /usr/local/share/lyx/layouts/foo.layout \s-1OR\s0
+\fB\s-1HOME\s0\fR/.lyx/layouts/foo.layout).  Use \fB\-c\fR to declare a different textclass
+(and read a different layout file).
+.Ip "\fB\-d\fR" 4
+Debug. By default, \fBreLyX\fR gives sparse output and deletes the temporary files
+which were created during translation. Using the \fB\-d\fR flag will create much
+more output (both to stdout and stderr) and leave the temporary files around.
+.Ip "\fB\-f\fR" 4
+Force. \fBreLyX\fR will not run if the .lyx file it would generate already exists
+Use the \fB\-f\fR option (carefully) to clobber any existing files.
+.Ip "\fB\-h\fR" 4
+Help. Print out usage information and quit.
+.Ip "\fB\-n\fR" 4
+Noweb. Translate a noweb (aka literate programming) file. This should be
+(almost?) equivalent to running \*(L"noweb2lyx foo.tex foo.lyx\*(R". This option
+requires the \fB\-c\fR option.
+.Ip "\fB\-o\fR" 4
+Output directory. With this option, all temporary files and LyX output files
+(for the given input file, for any included files, or for any file fragments
+given with the \fB\-p\fR option) will be put into \fIoutputdir\fR. Otherwise, for
+each file \fIdir/foo.tex\fR, the temporary files and the LyX output file will be
+created in \fIdir\fR. This can be useful if a file includes files from other
+directories which you want to consolidate in one directory, or if you don't
+have write permission on the directory the LaTeX files are in.
+.Ip "\fB\-p\fR" 4
+Partial file. The input files are LaTeX fragments, with no preamble matter or
+\f(CW\ebegin{document}\fR commands. This option requires the \fB\-c\fR option, since there
+are no \f(CW\edocumentclass\fR commands in the files \fBreLyX\fR is translating. When
+using this option, you can translate more than one file, as long as all files
+are the same class. The LyX file created by \fBreLyX\fR can be included in an
+existing LyX file using the \*(L"Include LyX File\*(R" command from LyX's Insert menu.
+.Ip "\fB\-r\fR" 4
+Regular environments (see the section on \fISyntax Files\fR).  If you give more than one
+environment, separate them with commas (not spaces). You'll probably need to
+quote the environment list, especially if it has asterisk environments (foo*)
+in it. If you use this command often, considering creating a personal syntax
+file.
+.Ip "\fB\-s\fR" 4
+Syntax files. Input (one or more quoted, comma-separated) syntax files to read
+in addition to the default. (see the section on \fISyntax Files\fR for details).
+.SH "DESCRIPTION"
+.Sh "Introduction"
+\fBreLyX\fR will create a LyX file \fIdir/foo.lyx\fR from the LaTeX file
+\fIdir/foo.tex\fR (unless the \fB\-o\fR option is used).
+.PP
+Suffixes .tex, .ltx and .latex are supported. If \fIinputfile\fR
+does not exist and does not have one of these suffixes, \fBreLyX\fR will try to
+translate \fIinputfile.tex\fR. (This is similar to the behavior of LaTeX.)
+.PP
+The purpose of \fBreLyX\fR is to translate \fIwell-behaved\fR LaTeX2e into LyX. If
+your LaTeX file doesn't compile---or if you do weird things, like redefining
+standard LaTex commands---it may choke. LaTeX209 will often be translated
+correctly, but it's not guaranteed.
+.PP
+\fBreLyX\fR has some bugs and lacks a few features. However, its main goals are:
+.Ip "\(bu" 4
+Get through a well-behaved LaTeX2e file without crashing
+.Ip "\(bu" 4
+Translate a lot of that file.
+.Ip "\(bu" 4
+Localize the parts that can't be translated and copy them in TeX mode
+.PP
+It achieves these main goals pretty well on most files.
+.PP
+There are many improvements that can and will be made to \fBreLyX\fR in the
+future. However, we wanted to get \fBreLyX\fR out there early on, to make
+it easier for new LyX users to read in their existing LaTeX files.
+.Sh "Usage"
+Here's a more lengthy description of what you should do to translate a LaTeX
+document into LyX.
+.Ip "\(bu" 4
+Run \fBreLyX\fR.
+.Sp
+\fBreLyX\fR will inform you of its progress and give any warnings to stderr, so if
+you don't want any output at all, try (in csh) \*(L'reLyX foo.tex >& /dev/null\*(R'.
+You should \s-1NOT\s0 redirect standard output to \fIfoo.lyx\fR. 
+.Ip "\(bu" 4
+Run LyX (version 0.12 or 1.0 or later) on the resulting .lyx file.
+.Sp
+In theory, most of the file will have been translated, and anything that's
+untranslatable will be highlighted in red (TeX mode). In theory, LyX will be
+able to read in the file, and to create printed documents from it, because all
+that untranslated red stuff will be passed directly back to LaTeX, which LyX 
+uses as a backend. Unfortunately, reality doesn't always reflect theory. If
+\fBreLyX\fR crashes, or LyX cannot read the generated LyX file, see the \f(CWBUGS\fR entry elsewhere in this documentor the \fI\s-1BUGS\s0\fR file.
+.Ip "\(bu" 4
+Change things that are highlighted in red (TeX mode) by hand in LyX.
+.Sp
+As mentioned above, you should be able to print out the LyX file even without
+doing this. However, changing a command in TeX mode to the corresponding LyX
+object will allow you to take advantage of LyX's \s-1WYSIWYM\s0 editing.
+.Sp
+\fBreLyX\fR is not guaranteed to create a LyX file which generates exactly the same
+output as the LaTeX file, but it should come close. \fBrelyX\fR will generally err
+on the side of translating less to ensure that dvi or ps files are accurate,
+even though this leads to more \*(L"evil red text\*(R" and less \s-1WYSIWYM\s0.
+.Ip "\(bu" 4
+\s-1PROOFREAD\s0 \s-1THE\s0 \s-1DOCUMENT\s0!!
+.Sp
+I'm sure you were planning on doing this anyway, but it's particularly
+important after translating a LaTeX document. \fBreLyX\fR is, at least now, better
+at \*(L"macro-translating\*(R" (translating the whole document) than
+\*(L"micro-translating\*(R" (translating every little detail). For example, you may see
+extra spaces or deleted spaces. Space handling has improved, but it's
+not perfect.
+.Sh "What reLyX Can Handle"
+\fBreLyX\fR understands many LaTeX commands. It will translate:
+.Ip "\(bu" 4
+regular text, including mini-commands like ~, \*(L'\*(R', \f(CW\e@\fR, \f(CW\eTeX\fR, as well as
+accented characters like \f(CW\e'{a}\fR, and the special cases ?` and !`
+.Ip "\(bu" 4
+title commands like \f(CW\eauthor\fR, \f(CW\edate\fR, \f(CW\etitle\fR, \f(CW\ethanks\fR and the
+abstract environment
+.Ip "\(bu" 4
+heading commands like \f(CW\esection\fR including starred commands (\f(CW\esection*\fR)
+.Ip "\(bu" 4
+Environments: quote, quotation, and verse; center, flushright, and flushleft
+.Ip "\(bu" 4
+itemize, enumerate, and description environments, and their \f(CW\eitem\fR commands.
+Also, well-behaved nested lists
+.Ip "\(bu" 4
+cross-referencing commands: \f(CW\eref\fR, \f(CW\epageref\fR, \f(CW\elabel\fR, and \f(CW\ecite\fR
+.Ip "\(bu" 4
+\f(CW\efootnote\fR and \f(CW\emargin\fR
+.Ip "\(bu" 4
+font-changing commands including \f(CW\eem\fR, \f(CW\eemph\fR, \f(CW\etextit\fR, and
+corresponding commands to change family, size, series, and shape
+.Ip "\(bu " 4
+\f(CW\einput{foo}\fR (or \f(CW\einput{foo.blah}\fR) and \f(CW\einclude{foo}\fR. Plain TeX
+\f(CW\einput\fR command \*(L"\f(CW\einput foo.tex\fR\*(R" is also supported.
+.Ip "\(bu" 4
+tabular environment, and commands that go inside it like \f(CW\ehline\fR, \f(CW\ecline\fR,
+and \f(CW\emulticolumn\fR (but see below)
+.Ip "\(bu" 4
+float environments table and table*, as well as \f(CW\ecaption\fR commands within
+them
+.Ip "\(bu" 4
+float environments figure and figure*, as well as graphics inclusion commands
+\eepsf, \eepsffile, \eepsfbox, \eepsfxsize, \eepsfig, \epsfig, and \eincludegraphics.
+Both the graphics and graphicx forms of \eincludegraphics are supported.
+Note, however, that many figures will not be translatable into LyX. See
+the section on \*(L"What LyX Can't Handle\*(R" below.
+.Ip "\(bu" 4
+thebibliography environment and \f(CW\ebibitem\fR command, as well as BibTeX's
+\f(CW\ebibliography\fR and \f(CW\ebibliographystyle\fR commands
+.Ip "\(bu" 4
+miscellaneous commands: \f(CW\ehfill\fR, \f(CW\e\fR\f(CW\e\fR, \f(CW\enoindent\fR, \f(CW\eldots\fR...
+.Ip "\(bu" 4
+documentclass-specific environments (and some commands) which can be 
+translated to LyX layouts
+.Ip "\(bu" 4
+arguments to certain untranslatable commands (e.g. \f(CW\embox\fR)
+.PP
+Some of this support may not be 100% yet. See below for details
+.PP
+\fBreLyX\fR copies math (almost) verbatim from your LaTeX file. Luckily, LyX reads 
+in LaTeX math, so (almost) any math which is supported by LyX should work just
+fine. A few math commands which are not supported by LyX will be replaced with
+their equivalents, e.g., \f(CW\eto\fR is converted to \f(CW\erightarrow\fR. See
+the section on \fISyntax Files\fR for more details.
+.PP
+\fBreLyX\fR will also copy any preamble commands (i.e., anything before
+\f(CW\ebegin{document}\fR) verbatim, so fancy stuff you've got in your preamble
+should be conserved in dvi and printed documents, although it will not of
+course show up in the LyX window. Check Layout->LaTeX Preamble to make sure.
+.Sh "What reLyX Can't Handle --- But it's \s-1OK\s0"
+.Ip "\(bu" 4
+tabular* tables
+.Ip "\(bu" 4
+minipages
+.Ip "\(bu" 4
+spacing commands (\f(CW\evspace\fR, \f(CW\epagebreak\fR, \f(CW\epar\fR, ...)
+.Ip "\(bu" 4
+\f(CW\ecentering\fR, \f(CW\eraggedleft\fR, \f(CW\eraggedright\fR
+.Ip "\(bu" 4
+\f(CW\everb\fR and verbatim environment. \fBreLyX\fR is careful to copy \fIexactly\fR in
+this case, including comments and whitespace.
+.Ip "\(bu" 4
+some unknown (e.g., user-defined) environments and commands
+.PP
+\fBreLyX\fR copies unknown commands, along with their arguments, verbatim into the
+LyX file. Also, if it sees a \f(CW\ebegin{foo}\fR where it doesn't recognize the
+\*(L"foo\*(R" environment, it will copy verbatim until it sees \f(CW\eend{foo}\fR (unless
+you use the \fB\-r\fR option). Hopefully, then, most of these unknown commands
+won't cause \fBreLyX\fR to break; they'll merely require you to do some editing
+once you've loaded the file up in LyX.  That should be less painful than
+editing either the .tex or the .lyx file using a text editor.
+.Sh "What reLyX Handles Badly --- aka \s-1BUGS\s0"
+Since \fBreLyX\fR is relatively new, it's got a number of problems.  As it
+matures, these bugs will be squished.
+.PP
+If \fBreLyX\fR is choking on something, or LyX can't read it after \fBreLyX\fR
+translates it, the best thing to do is to put \f(CW\ebegin{reLyXskip}\fR before the
+offending text, and \f(CW\eend{reLyXskip}\fR after it. I call this a \*(L"skip\*(R" block.
+\fBreLyX\fR will copy this block exactly, in TeX mode. Then edit the resulting
+LyX file, and translate the unknown stuff by hand. The reLyXskip environment
+is magical; the \f(CW\ebegin\fR and \f(CW\eend\fR commands will not be put into the LyX
+file.
+.Ip "\(bu" 4
+\*(L"Exact\*(R" copying of unknown environments and commands isn't quite exact.
+Specifically, newlines and comments may be lost. This will yield ugly LyX, but
+in almost all cases the output will be the same. However, certain parts of the
+file will be copied perfectly, including whitespace and comments. This
+includes: the LaTeX preamble, verbatim environments and \f(CW\everb\fR commands, and
+skip blocks.
+.Ip "\(bu" 4
+\fBreLyX\fR translates only a few options to the \f(CW\edocumentclass\fR command.
+(Specifically 1[012]pt, [letter|legal|executive|a4|a5|b5]paper,
+[one|two]side, landscape, and [one|two]column.) Other options are placed in
+the \*(L"options\*(R" field in the Layout->Document popup.
+.Sp
+More importantly, \fBreLyX\fR doesn't translate \f(CW\eusepackage\fR commands, margin 
+commands, \f(CW\enewcommands\fR, or, in fact, anything else from the preamble. It
+simply copies them into the LaTeX preamble. If you have margin commands in
+your preamble, then the LyX file will generate the right margins. However,
+these margins will override any margins you set in the LyX Layout->Paper
+popup. So you should remove the options from the preamble
+(Layout->Latex Preamble) to be safe. The same goes for setting your language
+with babel, \f(CW\einputencoding\fR, \f(CW\epagestyle\fR, etc.
+.Ip "\(bu" 4
+The foil class has a couple bugs. \fBreLyX\fR may do weird things with optional
+arguments to \f(CW\efoilhead\fR commands. Also, it may handle \f(CW\ebegin{dinglist}\fR
+incorrectly (although the stuff in the environment should translate normally).
+.PP
+Less significant bugs can be found in the \fI\s-1BUGS\s0\fR file.
+.PP
+\fBreLyX\fR is hopefully rather robust. As mentioned above, it may not translate
+your file perfectly, but it shouldn't crash. If it does crash---and the
+problem is not one of those mentioned above or in the \fI\s-1BUGS\s0\fR file---see
+the section on \fIBug Reports\fR.
+.Sh "What LyX Can't Handle"
+LyX itself is missing a couple features, such that even if \fBreLyX\fR translates
+things perfectly, LyX may still have trouble reading it. If you really need
+these features, you can export your final document as LaTeX, and put them
+back in. See \fI\s-1BUGS\s0\fR for more details on these bugs.
+.Ip "\(bu" 4
+For a number of commands, LyX does not support the optional argument. Examples
+include \f(CW\echapter\fR (and other sectioning commands), and \f(CW\e\e\fR.
+\fBreLyX\fR will automatically discard the optional arguments with a warning to
+stdout.  LyX also ignores the width argument for the thebibliography
+environment.
+.Ip "\(bu" 4
+Centering (or right or left justifying) works on full paragraphs.
+.Ip "\(bu" 4
+LyX support for tables isn't perfect. For complicated tables, use a \*(L"skip\*(R"
+block, so that they will be copied in TeX mode.
+.Ip "\(bu" 4
+The LyX math editor can't handle the \s-1AMS\s0\-LaTeX math environments align, split,
+etc. So those environments will be copied in TeX mode. You can change
+equation* environments to the exactly equivalent displaymath, and then they
+will be translated correctly.
+.Ip "\(bu" 4
+Lyx does not support clipping or bounding boxes for included graphics files.
+Therefore, many graphics inclusion commands will be untranslatable, and
+copied in TeX mode. In certain cases, you might be able to translate the
+command by hand within LyX---for example, if you included a bounding box but
+the bounding box is already in the .eps file.
+.Sp
+LyX only allows figures to have sizes in in,cm, or percentages of \etextwidth
+or \etextheight (or \ecolumnwidth). \fBreLyX\fR will translate from other units, like
+pt or mm, but it cannot translate other lengths (e.g. if you wanted to scale a
+figure to size \etopmargin for some reason). \fBreLyX\fR will copy figures with
+untranslatable sizes in TeX mode. Again, you might be able to fix that within
+LyX.
+.Sh "The Future of reLyX"
+In the future, more commands and environments will be supported by \fBreLyX\fR.
+Bugs will be eradicated.
+.PP
+See the \s-1TODO\s0 file for details.
+.SH "EXAMPLES"
+reLyX \fB\-df\fR \fB\-o\fR \*(L"my/dir\*(R" \fB\-r\fR \*(L"myenv\*(R" foo.tex > foo.debug
+.PP
+The above will create a file my/dir/foo.lyx from foo.tex, overwriting if
+necessary.  When it finds a \f(CW\ebegin{myenv} ... \eend{myenv}\fR block, it will
+translate the stuff within the block, but copy the \f(CW\ebegin\fR and \f(CW\eend\fR
+commands in TeX mode.  Finally, I'm going to keep the temporary files around
+(they will also be in my/dir/) and output lots of debugging information into
+the file foo.debug.
+.PP
+reLyX \fB\-n\fR \fB\-c\fR \*(L"literate-article\*(R" foo.tex
+.PP
+The above will change a noweb document into a LyX literate-article
+document. A user would do this if the noweb document had documentclass
+article.
+.SH "NOTES"
+.Sh "Bug Reports"
+If \fBreLyX\fR is crashing or otherwise acting strangely---in ways
+other than those described in the section on \fI\s-1BUGS\s0\fR or the \fI\s-1BUGS\s0\fR file---then please run
+\fBreLyX \-d\fR.  That will allow you to figure out where in the reLyXing process
+it crashed. That, in turn, will allow you to write a better bug report, which
+will allow the developers to fix it more quickly and easily.
+.PP
+Bug reports should be sent to the LyX developers\*(R' mailing list. Its address
+is currently lyx-devel@lists.lyx.org, but you can check the LyX home page,
+http://www.lyx.org if that bounces. If you are running \fBreLyX\fR on a huge file,
+please do not send all of the output in your bug report. Just include the last
+ten or twenty lines of output, along with the piece of the LaTeX file it
+crashed on.  Or, even better, attach a small but complete file which causes
+the same problem as your original file.
+.Sh "Implementation Details:"
+\fBreLyX\fR makes several \*(L"passes\*(R" in order to translate a TeX file. On each pass,
+it creates one or two files.
+.Ip "Pass 0" 4
+Before doing anything, read the syntax file (or files).
+.Ip "Pass 1a" 4
+Split preamble (anything before a \f(CW\ebegin{document}\fR command) off the rest
+of the file. It saves the two pieces in separate files. This is necessary
+because there may be very strange stuff in a preamble. It also ignores
+anything after the \f(CW\eend{document}\fR, on the assumption that it isn't LaTeX.
+.Ip "Pass 1b" 4
+Translate the preamble. Currently, that just means translating the
+\f(CW\edocumentclass\fR command and copying the rest exactly into the LyX preamble.
+.Sp
+Once you know what class the document is, read the LyX layout file for that
+class.
+.Ip "Pass 2" 4
+\*(L"Clean\*(R" the TeX file, generating slightly stricter LaTeX. This includes:
+.Ip "\(bu" 12
+Change, e.g., x^2 to the equivalent but clearer x^{2}
+.Ip "\(bu" 12
+Removing optional arguments that LyX can't handle (e.g., from \f(CW\echapter\fR)
+.Ip "\(bu" 12
+Changing \f(CW{\eem foo}\fR to \f(CW\eemph{foo}\fR, etc. This is necessary because LyX
+always writes out the non-local forms anyway. This should very rarely make a
+difference.
+.Ip "Pass 3" 4
+Translate LaTeX text, commands, and environments to LyX.
+.Ip "Pass 4" 4
+Put the two pieces back together, and do some final tweaking, to generate the
+LyX file
+.PP
+If there are any \f(CW\einput\fR or \f(CW\einclude\fR commands, \fBreLyX\fR will loop back to
+the beginning and translate those. It assumes that the included files are the
+same class as the main file, and that they have no preamble matter. (If you
+have an \f(CW\einput\fR command in the preamble of a file, the command will be
+copied exactly into the LaTeX preamble portion of the LyX file, so the
+included file won't be translated.) So when translating included files, it
+skips passes 0 and 1.
+.PP
+If \fBreLyX\fR doesn't find a file you wanted to include, it will give a warning,
+but will continue to translate any files it does find.
+.Sh "Layout Files"
+\fBreLyX\fR reads a LyX layout file to know how to handle LaTeX environments and
+commands which get translated to LyX layouts. This file will include all
+\*(L"normal\*(R" non-math environments (i.e., including quote and itemize, but not
+tabular, minipage, and some other fancy environments), and commands like
+\f(CW\esection\fR and \f(CW\etitle\fR. If you want to reLyX a class that doesn't have an
+existing layout file, then you'll have to create a layout file. But you have
+to do this anyway, in order to LyX the file, since LyX depends on layout files
+to know how to display and process its files. Check the LyX documentation for
+help with this task (which can be hard or easy, depending on the class you
+want to create a layout file for.) If your class is quite similar to a class
+that has a layout file, then consider using the \fB\-c\fR option.
+.Sh "Syntax Files"
+\fBreLyX\fR always reads at least one syntax file, called the default syntax file.
+\fBreLyX\fR will read your personal syntax file if it exists; otherwise it will
+read the system-wide file. \fBreLyX\fR will read additional syntax files if you
+specify them with the \fB\-s\fR option. (These extra files should have the same
+format as the default file, but will tend to be shorter, since they only have
+to specify extra commands not found in the default file.) A syntax file tells
+\fBreLyX\fR a few things.
+.PP
+First, it describes the syntax of each command, that is, how many required
+arguments and how many optional arguments the command takes. Knowing this
+makes it easier for \fBreLyX\fR to copy (in TeX mode) commands that it doesn't
+know how to translate. The syntax file simply has a command, followed by
+braces or brackets describing its arguments in the correct order. For example,
+a syntax file entry \f(CW\ebibitem[]{}\fR means that the \f(CW\ebibitem\fR command takes
+an optional argument followed by a required one, while the entry \f(CW\ebf\fR
+means that the \f(CW\ebf\fR command takes no arguments at all.  When \fBreLyX\fR
+encounters a token that it doesn't know how to translate into LyX, it will
+copy the token---along with the correct number of arguments---exactly.  If the
+token is not in the syntax file, then \fBreLyX\fR just copies as many arguments
+as it finds.  This means that it may copy too much. But since the user can
+specify additional syntax files, that shouldn't happen often.
+.PP
+Some commands that cannot be translated to LyX, like \f(CW\embox\fR, have as one of
+their arguments regular LaTeX text. If the string \*(L"translate\*(R" is put into an
+argument of an (untranslatable) command in the syntax file, then \fBreLyX\fR will
+translate that argument instead of copying it verbatim. So, for example, the
+default syntax file has \f(CW\eraisebox{}[][]{translate}\fR. This means that the
+\f(CW\eraisebox\fR command and the first argument (and optional arguments if they
+exist) are copied in TeX mode, but the last argument (which may contain math,
+complicated LaTeX, other untranslatable commands, etc.) will be translated
+into LyX. You can't use \*(L"translate\*(R" on optional arguments.
+.PP
+User-defined syntax files are allowed to define new commands and
+their syntax, or override the number of arguments for a command given in the
+default syntax file. (E.g., if you're using a style that gives an extra
+argument to some command...) However, this will only be useful for commands
+copied in TeX mode. Commands which are actually translated by \fBreLyX\fR (like
+\f(CW\eitem\fR) have their argument syntax hard-coded. The hard-coded commands are
+identified in the default syntax file.
+.PP
+Second, the syntax file describes any \*(L"regular environments\*(R".  Usually, an
+entire unknown environment will be copied in TeX mode. If you define a regular
+environment \*(L"foo\*(R", though, then only the \f(CW\ebegin{foo}\fR and \f(CW\eend{foo}\fR
+commands will be copied in TeX mode; the text within the environment will be
+treated (i.e., translated) by \fBreLyX\fR as regular LaTeX, rather than being
+copied into TeX mode. Don't try to declare \*(L"tabbing\*(R" and \*(L"picture\*(R" as regular
+environments, as the text within those environments will confuse \fBreLyX\fR; use
+this capability for new environments you create that have plain text or math
+or simple commands in them. You also can't declare unknown math environments
+(like equation*) as regular environments, either, since the LyX math editor
+won't understand them. The names of regular environments appear,
+whitespace-separated, between \f(CW\ebegin{reLyXre}\fR and \f(CW\eend{reLyXre}\fR
+statements in the syntax file. (If you have a regular environment which you
+won't use very often, you can use the \fB\-r\fR option rather than writing a
+syntax file.)
+.PP
+Third, the syntax file describes a math translation table. The LyX math editor
+doesn't support a few commands. For example, \f(CW_\fR is supported, but the
+equivalent \f(CW\esb\fR is not. Put any commands you'd like translate between
+\f(CW\ebegin{reLyXmt}\fR and \f(CW\eend{reLyXmt}\fR statements. The statement
+\*(L"\f(CW\e| {\eVert}\fR\*(R" means that any \f(CW\e|\fR in math mode will be converted to
+\*(L"\f(CW\eVert \fR\*(R" (in cases where a token made up of a backslash and a non-letter is
+translated to something with letters at the end, a space is added by \fBreLyX\fR.
+That way, \*(L"\f(CW\e|a\fR\*(R" is correctly translated to \*(L"\f(CW\eVert a\fR").
+.Sh "Miscellaneous"
+You need Perl version 5.002 or later to run \fBreLyX\fR. <plug> If you don't have
+Perl, you should get it anyway (at http://www.perl.com), because it's a really
+useful tool for pretty much anything. </plug>
+.SH "DIAGNOSTICS"
+\fBreLyX\fR should always explain why it crashes, if it crashes. Some diagnostics
+may be very technical, though, if they come from the guts of the code.
+\fBreLyX\fR gives much more information while running if you use the \fB\-d\fR option,
+but you shouldn't need that unless something goes wrong.
+.PP
+When it's finished, \fBreLyX\fR will tell you if it finished successfully or
+died due to some error.
+.SH "WARNINGS"
+Always keep a copy of your original LaTeX files either under a different
+name or in a different directory. There are a couple ways in which using LyX
+could lead to overwriting the original LaTeX file.
+.PP
+If you import foo.tex to create foo.lyx, then edit foo.lyx and want to
+re-export it, note that it will overwrite the original foo.tex. (LyX will ask
+you if you want to overwrite it.)
+.PP
+If you have the \euse_tempdir variable set to false in your lyxrc, then LyX
+will create its temporary files in your current directory, which means your
+LaTeX original may be overwritten (without a warning from LyX) when you \*(L"view
+dvi\*(R" or print the LyX document.
+.SH "FILES"
+.Ip "\fI\s-1MY_LYXDIR\s0\fR/layouts/*.layout" 4
+User's personal layout files for document classes
+.Ip "\fI\s-1MY_LYXDIR\s0\fR/reLyX/syntax.default" 4
+User's personal syntax file
+.Ip "\fI\s-1LIBDIR\s0\fR/layouts/*.layout" 4
+System-wide layout files for document classes
+.Ip "\fI\s-1LIBDIR\s0\fR/reLyX/syntax.default" 4
+System-wide LaTeX syntax file
+.PP
+\fI\s-1LIBDIR\s0\fR is the system-wide LyX directory, usually something like
+/usr/local/share/lyx/. \fI\s-1MY_LYXDIR\s0\fR is your personal LyX directory, something
+like .lyx/ in your home directory.
+.SH "SEE ALSO"
+\fIlyx\fR\|(1), \fIlatex\fR\|(1)
+.SH "AUTHORS"
+Copyright (c) 1998-9 Amir Karger (karger@post.harvard.edu)
+.PP
+Code contributors:
+.Ip "\(bu" 4
+John Weiss wrote the original CleanTeX pass.
+.Ip "\(bu" 4
+Etienne Grossmann
+.Ip "\(bu" 4
+Jose\*' Abi\*'lio Oliveira Matos
+.Ip "\(bu" 4
+David Suarez de Lis
+.Ip "\(bu" 4
+Kayvan Aghaiepour Sylvan added noweb stuff and wrote noweb2lyx
+.PP
+Other contributors:
+.Ip "\(bu" 4
+Jean-Marc Lasgouttes worked on the wrapper script and offered lots of bug
+reports, advice, and feature suggestions.
+.Ip "\(bu" 4
+Asger K. Alstrup Nielsen and Marc Pavese provided advice.
+.Ip "\(bu" 4
+Various members of the LyX developers\*(R' and users\*(R' lists provided bug reports
+and feature suggestions.
+.PP
+\fBreLyX\fR uses a modified version the Perl TeX parser Text::TeX package written
+by Ilya Zakharevich (ilya@math.ohio-state.edu), available on \s-1CPAN\s0.
+
+.rn }` ''
+.IX Title "RELYX 1"
+.IX Name "B<reLyX> - translate well-behaved LaTeX into LyX"
+
+.IX Header "NAME"
+
+.IX Header "SYNOPSIS"
+
+.IX Header "OPTIONS"
+
+.IX Item "\fB\-c\fR"
+
+.IX Item "\fB\-d\fR"
+
+.IX Item "\fB\-f\fR"
+
+.IX Item "\fB\-h\fR"
+
+.IX Item "\fB\-n\fR"
+
+.IX Item "\fB\-o\fR"
+
+.IX Item "\fB\-p\fR"
+
+.IX Item "\fB\-r\fR"
+
+.IX Item "\fB\-s\fR"
+
+.IX Header "DESCRIPTION"
+
+.IX Subsection "Introduction"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Subsection "Usage"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Subsection "What reLyX Can Handle"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu "
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Subsection "What reLyX Can't Handle --- But it's \s-1OK\s0"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Subsection "What reLyX Handles Badly --- aka \s-1BUGS\s0"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Subsection "What LyX Can't Handle"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Subsection "The Future of reLyX"
+
+.IX Header "EXAMPLES"
+
+.IX Header "NOTES"
+
+.IX Subsection "Bug Reports"
+
+.IX Subsection "Implementation Details:"
+
+.IX Item "Pass 0"
+
+.IX Item "Pass 1a"
+
+.IX Item "Pass 1b"
+
+.IX Item "Pass 2"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "Pass 3"
+
+.IX Item "Pass 4"
+
+.IX Subsection "Layout Files"
+
+.IX Subsection "Syntax Files"
+
+.IX Subsection "Miscellaneous"
+
+.IX Header "DIAGNOSTICS"
+
+.IX Header "WARNINGS"
+
+.IX Header "FILES"
+
+.IX Item "\fI\s-1MY_LYXDIR\s0\fR/layouts/*.layout"
+
+.IX Item "\fI\s-1MY_LYXDIR\s0\fR/reLyX/syntax.default"
+
+.IX Item "\fI\s-1LIBDIR\s0\fR/layouts/*.layout"
+
+.IX Item "\fI\s-1LIBDIR\s0\fR/reLyX/syntax.default"
+
+.IX Header "SEE ALSO"
+
+.IX Header "AUTHORS"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
+.IX Item "\(bu"
+
diff --git a/lib/reLyX/reLyX.pod b/lib/reLyX/reLyX.pod
new file mode 100644 (file)
index 0000000..7814b5b
--- /dev/null
@@ -0,0 +1,732 @@
+=head1 NAME
+
+B<reLyX> - translate well-behaved LaTeX into LyX
+
+=head1 SYNOPSIS
+
+The simplest way to use B<reLyX> is via the File->Import command in LyX. (This
+option is available starting with version 1.0.0.) That runs B<reLyX> on
+the given file and loads the resulting file into LyX. You should try that
+first, and call it from the command line only if you need to use more
+complicated options.
+
+B<reLyX> [ B<-c> I<textclass> ] [ B<-df> ] [ B<-o> I<outputdir> ] [B<-n>]
+S<[ B<-r> I<renv1>[,I<renv2>...]]> S<[ B<-s> I<sfile1>[,I<sfile2>...]]>
+F<inputfile>
+
+B<reLyX> B<-p> B<-c> I<textclass> [ B<-df> ] [ B<-o> I<outputdir> ]
+S<[ B<-r> I<renv1>[,I<renv2>...]]> S<[ B<-s> I<sfile1>[,I<sfile2>...]]>
+F<inputfiles>
+
+B<reLyX> B<-h>
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-c>
+
+Class. By default, when B<reLyX> sees a C<\documentclass{foo}> command, it
+creates a file of textclass "foo" and reads the LyX layout file for that class
+(something like /usr/local/share/lyx/layouts/foo.layout OR
+B<HOME>/.lyx/layouts/foo.layout).  Use B<-c> to declare a different textclass
+(and read a different layout file).
+
+=item B<-d>
+
+Debug. By default, B<reLyX> gives sparse output and deletes the temporary files
+which were created during translation. Using the B<-d> flag will create much
+more output (both to stdout and stderr) and leave the temporary files around.
+
+=item B<-f>
+
+Force. B<reLyX> will not run if the .lyx file it would generate already exists
+Use the B<-f> option (carefully) to clobber any existing files.
+
+=item B<-h>
+
+Help. Print out usage information and quit.
+
+=item B<-n>
+
+Noweb. Translate a noweb (aka literate programming) file. This should be
+(almost?) equivalent to running "noweb2lyx foo.tex foo.lyx". This option
+requires the B<-c> option.
+
+=item B<-o>
+
+Output directory. With this option, all temporary files and LyX output files
+(for the given input file, for any included files, or for any file fragments
+given with the B<-p> option) will be put into I<outputdir>. Otherwise, for
+each file F<dir/foo.tex>, the temporary files and the LyX output file will be
+created in F<dir>. This can be useful if a file includes files from other
+directories which you want to consolidate in one directory, or if you don't
+have write permission on the directory the LaTeX files are in.
+
+=item B<-p>
+
+Partial file. The input files are LaTeX fragments, with no preamble matter or
+C<\begin{document}> commands. This option requires the B<-c> option, since there
+are no C<\documentclass> commands in the files B<reLyX> is translating. When
+using this option, you can translate more than one file, as long as all files
+are the same class. The LyX file created by B<reLyX> can be included in an
+existing LyX file using the "Include LyX File" command from LyX's Insert menu.
+
+=item B<-r>
+
+Regular environments (see L<"Syntax Files">).  If you give more than one
+environment, separate them with commas (not spaces). You'll probably need to
+quote the environment list, especially if it has asterisk environments (foo*)
+in it. If you use this command often, considering creating a personal syntax
+file.
+
+=item B<-s>
+
+Syntax files. Input (one or more quoted, comma-separated) syntax files to read
+in addition to the default. (see L<"Syntax Files"> for details).
+
+=back
+
+=head1 DESCRIPTION
+
+=head2 Introduction
+
+B<reLyX> will create a LyX file F<dir/foo.lyx> from the LaTeX file
+F<dir/foo.tex> (unless the B<-o> option is used).
+
+Suffixes .tex, .ltx and .latex are supported. If F<inputfile>
+does not exist and does not have one of these suffixes, B<reLyX> will try to
+translate F<inputfile.tex>. (This is similar to the behavior of LaTeX.)
+
+The purpose of B<reLyX> is to translate I<well-behaved> LaTeX2e into LyX. If
+your LaTeX file doesn't compile---or if you do weird things, like redefining
+standard LaTex commands---it may choke. LaTeX209 will often be translated
+correctly, but it's not guaranteed.
+
+B<reLyX> has some bugs and lacks a few features. However, its main goals are:
+
+=over 4
+
+=item *
+
+Get through a well-behaved LaTeX2e file without crashing
+
+=item *
+
+Translate a lot of that file.
+
+=item *
+
+Localize the parts that can't be translated and copy them in TeX mode
+
+=back 4
+
+It achieves these main goals pretty well on most files.
+
+There are many improvements that can and will be made to B<reLyX> in the
+future. However, we wanted to get B<reLyX> out there early on, to make
+it easier for new LyX users to read in their existing LaTeX files.
+
+=head2 Usage
+
+Here's a more lengthy description of what you should do to translate a LaTeX
+document into LyX.
+
+=over 4
+
+=item *
+
+Run B<reLyX>.
+
+B<reLyX> will inform you of its progress and give any warnings to stderr, so if
+you don't want any output at all, try (in csh) 'reLyX foo.tex >& /dev/null'.
+You should NOT redirect standard output to F<foo.lyx>. 
+
+=item *
+
+Run LyX (version 0.12 or 1.0 or later) on the resulting .lyx file.
+
+In theory, most of the file will have been translated, and anything that's
+untranslatable will be highlighted in red (TeX mode). In theory, LyX will be
+able to read in the file, and to create printed documents from it, because all
+that untranslated red stuff will be passed directly back to LaTeX, which LyX 
+uses as a backend. Unfortunately, reality doesn't always reflect theory. If
+B<reLyX> crashes, or LyX cannot read the generated LyX file, see L</BUGS>,
+or the F<BUGS> file.
+
+=item *
+
+Change things that are highlighted in red (TeX mode) by hand in LyX.
+
+As mentioned above, you should be able to print out the LyX file even without
+doing this. However, changing a command in TeX mode to the corresponding LyX
+object will allow you to take advantage of LyX's WYSIWYM editing.
+
+B<reLyX> is not guaranteed to create a LyX file which generates exactly the same
+output as the LaTeX file, but it should come close. B<relyX> will generally err
+on the side of translating less to ensure that dvi or ps files are accurate,
+even though this leads to more "evil red text" and less WYSIWYM.
+
+=item *
+
+PROOFREAD THE DOCUMENT!!
+
+I'm sure you were planning on doing this anyway, but it's particularly
+important after translating a LaTeX document. B<reLyX> is, at least now, better
+at "macro-translating" (translating the whole document) than
+"micro-translating" (translating every little detail). For example, you may see
+extra spaces or deleted spaces. Space handling has improved, but it's
+not perfect.
+
+=back
+
+=head2 What reLyX Can Handle
+
+B<reLyX> understands many LaTeX commands. It will translate:
+
+=over 4
+
+=item *
+
+regular text, including mini-commands like ~, '', C<\@>, C<\TeX>, as well as
+accented characters like C<\'{a}>, and the special cases ?` and !`
+
+=item *
+
+title commands like C<\author>, C<\date>, C<\title>, C<\thanks> and the
+abstract environment
+
+=item *
+
+heading commands like C<\section> including starred commands (C<\section*>)
+
+=item *
+
+Environments: quote, quotation, and verse; center, flushright, and flushleft
+
+=item *
+
+itemize, enumerate, and description environments, and their C<\item> commands.
+Also, well-behaved nested lists
+
+=item *
+
+cross-referencing commands: C<\ref>, C<\pageref>, C<\label>, and C<\cite>
+
+=item *
+
+C<\footnote> and C<\margin>
+
+=item *
+
+font-changing commands including C<\em>, C<\emph>, C<\textit>, and
+corresponding commands to change family, size, series, and shape
+
+=item * 
+
+C<\input{foo}> (or C<\input{foo.blah}>) and C<\include{foo}>. Plain TeX
+C<\input> command "C<\input foo.tex>" is also supported.
+
+=item *
+
+tabular environment, and commands that go inside it like C<\hline>, C<\cline>,
+and C<\multicolumn> (but see below)
+
+=item *
+
+float environments table and table*, as well as C<\caption> commands within
+them
+
+=item *
+
+float environments figure and figure*, as well as graphics inclusion commands
+\epsf, \epsffile, \epsfbox, \epsfxsize, \epsfig, \psfig, and \includegraphics.
+Both the graphics and graphicx forms of \includegraphics are supported.
+Note, however, that many figures will not be translatable into LyX. See
+the section on "What LyX Can't Handle" below.
+
+=item *
+
+thebibliography environment and C<\bibitem> command, as well as BibTeX's
+C<\bibliography> and C<\bibliographystyle> commands
+
+=item *
+
+miscellaneous commands: C<\hfill>, C<\>C<\>, C<\noindent>, C<\ldots>...
+
+=item *
+
+documentclass-specific environments (and some commands) which can be 
+translated to LyX layouts
+
+=item *
+
+arguments to certain untranslatable commands (e.g. C<\mbox>)
+
+=back
+
+Some of this support may not be 100% yet. See below for details
+
+B<reLyX> copies math (almost) verbatim from your LaTeX file. Luckily, LyX reads 
+in LaTeX math, so (almost) any math which is supported by LyX should work just
+fine. A few math commands which are not supported by LyX will be replaced with
+their equivalents, e.g., C<\to> is converted to C<\rightarrow>. See
+L<"Syntax Files"> for more details.
+
+B<reLyX> will also copy any preamble commands (i.e., anything before
+C<\begin{document}>) verbatim, so fancy stuff you've got in your preamble
+should be conserved in dvi and printed documents, although it will not of
+course show up in the LyX window. Check Layout->LaTeX Preamble to make sure.
+
+=head2 What reLyX Can't Handle --- But it's OK
+
+=over 4
+
+=item *
+
+tabular* tables
+
+=item *
+
+minipages
+
+=item *
+
+spacing commands (C<\vspace>, C<\pagebreak>, C<\par>, ...)
+
+=item *
+
+C<\centering>, C<\raggedleft>, C<\raggedright>
+
+=item *
+
+C<\verb> and verbatim environment. B<reLyX> is careful to copy I<exactly> in
+this case, including comments and whitespace.
+
+=item *
+
+some unknown (e.g., user-defined) environments and commands
+
+=back
+
+B<reLyX> copies unknown commands, along with their arguments, verbatim into the
+LyX file. Also, if it sees a C<\begin{foo}> where it doesn't recognize the
+"foo" environment, it will copy verbatim until it sees C<\end{foo}> (unless
+you use the B<-r> option). Hopefully, then, most of these unknown commands
+won't cause B<reLyX> to break; they'll merely require you to do some editing
+once you've loaded the file up in LyX.  That should be less painful than
+editing either the .tex or the .lyx file using a text editor.
+
+=head2 What reLyX Handles Badly --- aka BUGS
+
+Since B<reLyX> is relatively new, it's got a number of problems.  As it
+matures, these bugs will be squished.
+
+If B<reLyX> is choking on something, or LyX can't read it after B<reLyX>
+translates it, the best thing to do is to put C<\begin{reLyXskip}> before the
+offending text, and C<\end{reLyXskip}> after it. I call this a "skip" block.
+B<reLyX> will copy this block exactly, in TeX mode. Then edit the resulting
+LyX file, and translate the unknown stuff by hand. The reLyXskip environment
+is magical; the C<\begin> and C<\end> commands will not be put into the LyX
+file.
+
+=over 4
+
+=item *
+
+"Exact" copying of unknown environments and commands isn't quite exact.
+Specifically, newlines and comments may be lost. This will yield ugly LyX, but
+in almost all cases the output will be the same. However, certain parts of the
+file will be copied perfectly, including whitespace and comments. This
+includes: the LaTeX preamble, verbatim environments and C<\verb> commands, and
+skip blocks.
+
+=item *
+
+B<reLyX> translates only a few options to the C<\documentclass> command.
+(Specifically 1[012]pt, [letter|legal|executive|a4|a5|b5]paper,
+[one|two]side, landscape, and [one|two]column.) Other options are placed in
+the "options" field in the Layout->Document popup.
+
+More importantly, B<reLyX> doesn't translate C<\usepackage> commands, margin 
+commands, C<\newcommands>, or, in fact, anything else from the preamble. It
+simply copies them into the LaTeX preamble. If you have margin commands in
+your preamble, then the LyX file will generate the right margins. However,
+these margins will override any margins you set in the LyX Layout->Paper
+popup. So you should remove the options from the preamble
+(Layout->Latex Preamble) to be safe. The same goes for setting your language
+with babel, C<\inputencoding>, C<\pagestyle>, etc.
+
+=item *
+
+The foil class has a couple bugs. B<reLyX> may do weird things with optional
+arguments to C<\foilhead> commands. Also, it may handle C<\begin{dinglist}>
+incorrectly (although the stuff in the environment should translate normally).
+
+=back
+
+Less significant bugs can be found in the F<BUGS> file.
+
+B<reLyX> is hopefully rather robust. As mentioned above, it may not translate
+your file perfectly, but it shouldn't crash. If it does crash---and the
+problem is not one of those mentioned above or in the F<BUGS> file---see
+L<"Bug Reports">.
+
+=head2 What LyX Can't Handle
+
+LyX itself is missing a couple features, such that even if B<reLyX> translates
+things perfectly, LyX may still have trouble reading it. If you really need
+these features, you can export your final document as LaTeX, and put them
+back in. See F<BUGS> for more details on these bugs.
+
+=over 4
+
+=item *
+
+For a number of commands, LyX does not support the optional argument. Examples
+include C<\chapter> (and other sectioning commands), and C<\\>.
+B<reLyX> will automatically discard the optional arguments with a warning to
+stdout.  LyX also ignores the width argument for the thebibliography
+environment.
+
+=item *
+
+Centering (or right or left justifying) works on full paragraphs.
+
+=item *
+
+LyX support for tables isn't perfect. For complicated tables, use a "skip"
+block, so that they will be copied in TeX mode.
+
+=item *
+
+The LyX math editor can't handle the AMS-LaTeX math environments align, split,
+etc. So those environments will be copied in TeX mode. You can change
+equation* environments to the exactly equivalent displaymath, and then they
+will be translated correctly.
+
+=item *
+
+Lyx does not support clipping or bounding boxes for included graphics files.
+Therefore, many graphics inclusion commands will be untranslatable, and
+copied in TeX mode. In certain cases, you might be able to translate the
+command by hand within LyX---for example, if you included a bounding box but
+the bounding box is already in the .eps file.
+
+LyX only allows figures to have sizes in in,cm, or percentages of \textwidth
+or \textheight (or \columnwidth). B<reLyX> will translate from other units, like
+pt or mm, but it cannot translate other lengths (e.g. if you wanted to scale a
+figure to size \topmargin for some reason). B<reLyX> will copy figures with
+untranslatable sizes in TeX mode. Again, you might be able to fix that within
+LyX.
+
+=back
+
+=head2 The Future of reLyX
+
+In the future, more commands and environments will be supported by B<reLyX>.
+Bugs will be eradicated.
+
+See the TODO file for details.
+
+=head1 EXAMPLES
+
+reLyX B<-df> B<-o> "my/dir" B<-r> "myenv" foo.tex > foo.debug
+
+The above will create a file my/dir/foo.lyx from foo.tex, overwriting if
+necessary.  When it finds a C<\begin{myenv} ... \end{myenv}> block, it will
+translate the stuff within the block, but copy the C<\begin> and C<\end>
+commands in TeX mode.  Finally, I'm going to keep the temporary files around
+(they will also be in my/dir/) and output lots of debugging information into
+the file foo.debug.
+
+reLyX B<-n> B<-c> "literate-article" foo.tex
+
+The above will change a noweb document into a LyX literate-article
+document. A user would do this if the noweb document had documentclass
+article.
+
+=head1 NOTES
+
+=head2 Bug Reports
+
+If B<reLyX> is crashing or otherwise acting strangely---in ways
+other than those described in L<"BUGS"> or the F<BUGS> file---then please run
+B<reLyX -d>.  That will allow you to figure out where in the reLyXing process
+it crashed. That, in turn, will allow you to write a better bug report, which
+will allow the developers to fix it more quickly and easily.
+
+Bug reports should be sent to the LyX developers' mailing list. Its address
+is currently lyx-devel@lists.lyx.org, but you can check the LyX home page,
+http://www.lyx.org if that bounces. If you are running B<reLyX> on a huge file,
+please do not send all of the output in your bug report. Just include the last
+ten or twenty lines of output, along with the piece of the LaTeX file it
+crashed on.  Or, even better, attach a small but complete file which causes
+the same problem as your original file.
+
+=head2 Implementation Details:
+
+B<reLyX> makes several "passes" in order to translate a TeX file. On each pass,
+it creates one or two files.
+
+=over 4
+
+=item Pass 0
+
+Before doing anything, read the syntax file (or files).
+
+=item Pass 1a
+
+Split preamble (anything before a C<\begin{document}> command) off the rest
+of the file. It saves the two pieces in separate files. This is necessary
+because there may be very strange stuff in a preamble. It also ignores
+anything after the C<\end{document}>, on the assumption that it isn't LaTeX.
+
+=item Pass 1b
+
+Translate the preamble. Currently, that just means translating the
+C<\documentclass> command and copying the rest exactly into the LyX preamble.
+
+Once you know what class the document is, read the LyX layout file for that
+class.
+
+=item Pass 2
+
+"Clean" the TeX file, generating slightly stricter LaTeX. This includes:
+
+=over 8
+
+=item *
+
+Change, e.g., x^2 to the equivalent but clearer x^{2}
+
+=item *
+
+Removing optional arguments that LyX can't handle (e.g., from C<\chapter>)
+
+=item *
+
+Changing C<{\em foo}> to C<\emph{foo}>, etc. This is necessary because LyX
+always writes out the non-local forms anyway. This should very rarely make a
+difference.
+
+=back
+
+=item Pass 3
+
+Translate LaTeX text, commands, and environments to LyX.
+
+=item Pass 4
+
+Put the two pieces back together, and do some final tweaking, to generate the
+LyX file
+
+=back
+
+If there are any C<\input> or C<\include> commands, B<reLyX> will loop back to
+the beginning and translate those. It assumes that the included files are the
+same class as the main file, and that they have no preamble matter. (If you
+have an C<\input> command in the preamble of a file, the command will be
+copied exactly into the LaTeX preamble portion of the LyX file, so the
+included file won't be translated.) So when translating included files, it
+skips passes 0 and 1.
+
+If B<reLyX> doesn't find a file you wanted to include, it will give a warning,
+but will continue to translate any files it does find.
+
+=head2 Layout Files
+
+B<reLyX> reads a LyX layout file to know how to handle LaTeX environments and
+commands which get translated to LyX layouts. This file will include all
+"normal" non-math environments (i.e., including quote and itemize, but not
+tabular, minipage, and some other fancy environments), and commands like
+C<\section> and C<\title>. If you want to reLyX a class that doesn't have an
+existing layout file, then you'll have to create a layout file. But you have
+to do this anyway, in order to LyX the file, since LyX depends on layout files
+to know how to display and process its files. Check the LyX documentation for
+help with this task (which can be hard or easy, depending on the class you
+want to create a layout file for.) If your class is quite similar to a class
+that has a layout file, then consider using the B<-c> option.
+
+=head2 Syntax Files
+
+B<reLyX> always reads at least one syntax file, called the default syntax file.
+B<reLyX> will read your personal syntax file if it exists; otherwise it will
+read the system-wide file. B<reLyX> will read additional syntax files if you
+specify them with the B<-s> option. (These extra files should have the same
+format as the default file, but will tend to be shorter, since they only have
+to specify extra commands not found in the default file.) A syntax file tells
+B<reLyX> a few things.
+
+First, it describes the syntax of each command, that is, how many required
+arguments and how many optional arguments the command takes. Knowing this
+makes it easier for B<reLyX> to copy (in TeX mode) commands that it doesn't
+know how to translate. The syntax file simply has a command, followed by
+braces or brackets describing its arguments in the correct order. For example,
+a syntax file entry C<\bibitem[]{}> means that the C<\bibitem> command takes
+an optional argument followed by a required one, while the entry C<\bf>
+means that the C<\bf> command takes no arguments at all.  When B<reLyX>
+encounters a token that it doesn't know how to translate into LyX, it will
+copy the token---along with the correct number of arguments---exactly.  If the
+token is not in the syntax file, then B<reLyX> just copies as many arguments
+as it finds.  This means that it may copy too much. But since the user can
+specify additional syntax files, that shouldn't happen often.
+
+Some commands that cannot be translated to LyX, like C<\mbox>, have as one of
+their arguments regular LaTeX text. If the string "translate" is put into an
+argument of an (untranslatable) command in the syntax file, then B<reLyX> will
+translate that argument instead of copying it verbatim. So, for example, the
+default syntax file has C<\raisebox{}[][]{translate}>. This means that the
+C<\raisebox> command and the first argument (and optional arguments if they
+exist) are copied in TeX mode, but the last argument (which may contain math,
+complicated LaTeX, other untranslatable commands, etc.) will be translated
+into LyX. You can't use "translate" on optional arguments.
+
+User-defined syntax files are allowed to define new commands and
+their syntax, or override the number of arguments for a command given in the
+default syntax file. (E.g., if you're using a style that gives an extra
+argument to some command...) However, this will only be useful for commands
+copied in TeX mode. Commands which are actually translated by B<reLyX> (like
+C<\item>) have their argument syntax hard-coded. The hard-coded commands are
+identified in the default syntax file.
+
+Second, the syntax file describes any "regular environments".  Usually, an
+entire unknown environment will be copied in TeX mode. If you define a regular
+environment "foo", though, then only the C<\begin{foo}> and C<\end{foo}>
+commands will be copied in TeX mode; the text within the environment will be
+treated (i.e., translated) by B<reLyX> as regular LaTeX, rather than being
+copied into TeX mode. Don't try to declare "tabbing" and "picture" as regular
+environments, as the text within those environments will confuse B<reLyX>; use
+this capability for new environments you create that have plain text or math
+or simple commands in them. You also can't declare unknown math environments
+(like equation*) as regular environments, either, since the LyX math editor
+won't understand them. The names of regular environments appear,
+whitespace-separated, between C<\begin{reLyXre}> and C<\end{reLyXre}>
+statements in the syntax file. (If you have a regular environment which you
+won't use very often, you can use the B<-r> option rather than writing a
+syntax file.)
+
+Third, the syntax file describes a math translation table. The LyX math editor
+doesn't support a few commands. For example, C<_> is supported, but the
+equivalent C<\sb> is not. Put any commands you'd like translate between
+C<\begin{reLyXmt}> and C<\end{reLyXmt}> statements. The statement
+"C<\| {\Vert}>" means that any C<\|> in math mode will be converted to
+"C<\Vert >" (in cases where a token made up of a backslash and a non-letter is
+translated to something with letters at the end, a space is added by B<reLyX>.
+That way, "C<\|a>" is correctly translated to "C<\Vert a>").
+
+=head2 Miscellaneous
+
+You need Perl version 5.002 or later to run B<reLyX>. <plug> If you don't have
+Perl, you should get it anyway (at http://www.perl.com), because it's a really
+useful tool for pretty much anything. </plug>
+
+=head1 DIAGNOSTICS
+
+B<reLyX> should always explain why it crashes, if it crashes. Some diagnostics
+may be very technical, though, if they come from the guts of the code.
+B<reLyX> gives much more information while running if you use the B<-d> option,
+but you shouldn't need that unless something goes wrong.
+
+When it's finished, B<reLyX> will tell you if it finished successfully or
+died due to some error.
+
+=head1 WARNINGS
+
+Always keep a copy of your original LaTeX files either under a different
+name or in a different directory. There are a couple ways in which using LyX
+could lead to overwriting the original LaTeX file.
+
+If you import foo.tex to create foo.lyx, then edit foo.lyx and want to
+re-export it, note that it will overwrite the original foo.tex. (LyX will ask
+you if you want to overwrite it.)
+
+If you have the \use_tempdir variable set to false in your lyxrc, then LyX
+will create its temporary files in your current directory, which means your
+LaTeX original may be overwritten (without a warning from LyX) when you "view
+dvi" or print the LyX document.
+
+=head1 FILES
+
+=over 4
+
+=item F<MY_LYXDIR>/layouts/*.layout
+
+User's personal layout files for document classes
+
+=item F<MY_LYXDIR>/reLyX/syntax.default
+
+User's personal syntax file
+
+=item F<LIBDIR>/layouts/*.layout
+
+System-wide layout files for document classes
+
+=item F<LIBDIR>/reLyX/syntax.default
+
+System-wide LaTeX syntax file
+
+=back
+
+
+F<LIBDIR> is the system-wide LyX directory, usually something like
+/usr/local/share/lyx/. F<MY_LYXDIR> is your personal LyX directory, something
+like .lyx/ in your home directory.
+
+=head1 SEE ALSO
+
+lyx(1), latex(1)
+
+=head1 AUTHORS
+
+Copyright (c) 1998-9 Amir Karger (karger@post.harvard.edu)
+
+Code contributors:
+
+=over 4
+
+=item *
+
+John Weiss wrote the original CleanTeX pass.
+
+=item *
+
+Etienne Grossmann
+
+=item *
+
+JosE<eacute> AbE<iacute>lio Oliveira Matos
+
+=item *
+
+David Suarez de Lis
+
+=item *
+
+Kayvan Aghaiepour Sylvan added noweb stuff and wrote noweb2lyx
+
+=back
+
+Other contributors:
+
+=over 4
+
+=item *
+
+Jean-Marc Lasgouttes worked on the wrapper script and offered lots of bug
+reports, advice, and feature suggestions.
+
+=item *
+
+Asger K. Alstrup Nielsen and Marc Pavese provided advice.
+
+=item *
+
+Various members of the LyX developers' and users' lists provided bug reports
+and feature suggestions.
+
+=back
+
+B<reLyX> uses a modified version the Perl TeX parser Text::TeX package written
+by Ilya Zakharevich (ilya@math.ohio-state.edu), available on CPAN.
+
diff --git a/lib/reLyX/reLyXmain.pl b/lib/reLyX/reLyXmain.pl
new file mode 100644 (file)
index 0000000..f2ff40b
--- /dev/null
@@ -0,0 +1,358 @@
+#!/usr/bin/perl -w
+#
+# Main code for reLyX - the LaTeX to LyX translator
+#
+# reLyX is Copyright (c) 1998-9 Amir Karger karger@post.harvard.edu
+# You are free to use and modify this code under the terms of
+# the GNU General Public Licence version 2 or later.
+#
+# This code usually gets called by the reLyX wrapper executable
+#
+# $Id: reLyXmain.pl,v 1.1 1999/09/27 18:44:35 larsbj Exp $
+#
+
+require 5.002; # Perl 5.001 doesn't work. Perl 4 REALLY doesn't work.
+
+# Standard Perl Library modules
+use strict; # must define all variables, no barewords, no hard references
+
+# Variables from other files, like Getopt::Std, OR vars that need to be global
+# $opt_f etc. - command line options set by Getop::Std::getopts
+# $dot_lyxdir - the user's personal .lyx directory
+# $Success    - keep track of whether reLyX finished successfully or died
+# @File_List  - the list of files to translate. Initially this is just
+#               the file input by the user, but \input or \include commands
+#               will add to it.
+use vars qw($opt_c $opt_d $opt_f $opt_h $opt_n $opt_o $opt_p $opt_r $opt_s
+            $dot_lyxdir
+            $Success
+            @File_List
+          );
+use Cwd; # getcwd etc.
+use Getopt::Std; # read in command-line options
+use File::Basename; # &basename and &dirname
+
+# Modules containing subroutines for reLyX
+# Note that @INC must include the directory that these modules are in. The
+# reLyX wrapper takes care of that.
+use Text::TeX; # TeX parser package
+use ReadCommands; # package to read LaTeX commands' syntax from a file
+use MakePreamble; # package to split off LaTeX preamble & translate it to LyX
+use CleanTeX; # package to clean TeX file for Lyxifying
+use BasicLyX; # package to translate clean TeX to Basic LyX
+use LastLyX; # package to print out LyX file once all translation is done
+
+
+# Hack to allow running reLyX without the wrapper
+if (!defined($lyxdir)) {$lyxdir = "/usr/local/share/lyx"}
+if (!defined($lyxname)) {$lyxname = "lyx"}
+# there's a use vars in the wrapper, so we only need these if running w/out it
+use vars qw($lyxdir $lyxname);
+# variables that a user might want to change
+my @Suffix_List = '\.(ltx|latex|tex)'; # allowed suffixes for LaTeX file
+my $LyXFormat = "2.15"; #What to print in \lyxformat command in .lyx file
+my $syntaxname = "syntax.default"; # name of the default syntax file
+$dot_lyxdir = $ENV{'HOME'} . "/.$lyxname"; # personal .lyx directory
+
+# This variable tells us if the program died or exited happily
+BEGIN{$Success = 0}
+
+##############################################################################
+# MAIN
+#
+
+# Print welcome message including version info
+my $version_info = '$Date: 1999/09/27 18:44:35 $'; # RCS puts checkin date here
+$version_info =~ s&.*?(\d+/\d+/\d+).*&$1&; # take out just the date info
+warn "reLyX, the LaTeX to LyX translator. Revision date $version_info\n\n";
+
+# Usage information
+my $Usage_Short = <<"ENDSHORTUSAGE";
+
+
+USAGE:
+$0 [ -c textclass ] [ -fd ] [ -o outputdir ]
+         [ -r renv1[,renv2...]] [ -s sfile1[,sfile2...]] inputfile
+
+$0 -p -c textclass [ -fd ] [ -o outputdir ]
+         [ -r renv1[,renv2...]] [ -s sfile1[,sfile2...]] inputfile(s)
+
+$0 -h   (to get more usage information)
+
+ENDSHORTUSAGE
+
+my $Usage_Long = $Usage_Short . <<"ENDLONGUSAGE";
+    -c    which textclass this file is (required with -p)
+             Overrides \\documentclass command, if one exists
+    -d    print lots of debug information & save temporary files
+    -f    force destruction of existing lyx file or temporary files
+    -h    print this message and quit
+    -n    convert a noweb file to a literate document (requires -c)
+    -o    output all LyX files to directory "outputdir"
+             Otherwise, LyX file is created in directory the LaTeX file is in
+    -p    translate LaTeX fragments or include files (requires -c)
+             I.e., files without \documentclass commands
+    -r    give reLyX a (list of) regular environment(s)
+    -s    give reLyX a (list of) additional syntax file(s) to read
+
+man reLyX for lots of usage information
+
+
+
+ENDLONGUSAGE
+
+# Read command line
+# Get Options: set $opt_f etc. based on command line options
+getopts('c:dfhno:pr:s:') or die "Illegal option!$Usage_Short";
+if ($opt_h) {print $Usage_Long; $Success=1; exit}
+die "No LaTeX file was input on the command line$Usage_Short" unless @ARGV;
+
+# Make each file in the file list an absolute file name (e.g., staring with '/')
+@File_List = map {&abs_file_name($_)} @ARGV;
+
+# If noweb files, then we need to pre-process each file
+if (defined $opt_n) {
+    die "-n option requires -c!$Usage_Short" unless defined $opt_c;
+    foreach (@File_List) {
+        system("noweb2lyx", "-pre", "$_", "$_.pre$$");
+        $_ .= ".pre$$";
+    }
+}
+
+# -p option allows multiple input files
+if (defined $opt_p) {
+    die "-p option requires -c!$Usage_Short" unless defined $opt_c;
+} else {
+    die "Only one input file allowed unless using -p option$Usage_Short"
+                    unless @ARGV == 1;
+}
+
+# Make sure outputdir given with -o option is valid
+# Make it an absolute path, too!
+if (defined($opt_o)) {
+    die "directory $opt_o doesn't exist!\n$Usage_Short"
+                                 unless defined(-d $opt_o);
+    die "$opt_o isn't a directory!\n$Usage_Short" unless -d $opt_o;
+    $opt_o = &my_fast_abs_path($opt_o);
+    # may not have trailing slash.
+    $opt_o .= '/' unless $opt_o =~ /\/$/;
+}
+
+# Read file(s) containing LaTeX commands and their syntax
+# Read personal syntax.default, or system-wide if there isn't a personal one
+# Then read other syntax files, given by the -s option
+my $default_file = "$dot_lyxdir/reLyX/$syntaxname";
+if (! -e $default_file) {
+    $default_file = "$lyxdir/reLyX/$syntaxname";
+    die "cannot find default syntax file $default_file" unless -e $default_file;
+}
+my @syntaxfiles = ($default_file);
+push (@syntaxfiles, (split(/,/,$opt_s))) if defined $opt_s;
+&ReadCommands::read_syntax_files(@syntaxfiles);
+
+########### Main loop over files (include files will be added to @File_List)
+my $count=0; #number of files we've done
+my @deletelist = (); # files to delete when we're done (if no '-d' flag)
+my $Doc_Class; # LaTeX documentclass
+my $LyX_Preamble = "";   # LyX Preamble not including Latex preamble part
+my $Latex_Preamble = "";
+my $File;
+while ($File = shift(@File_List)) {
+    # TODO we should always die (or something) if temp files exist & !opt_f
+    my $OutFileName;
+    my $filenum = 0; #numbering for temporary files
+
+    # May need to add ".tex" to input file name.
+    #    PathBase is the output file name without ".lyx". It's used for building
+    # temporary files' file names, too.
+    #    Finally, make sure the file is valid, directory is writable, etc.
+    # Sub returns (undef, undef, undef) if something goes wrong.
+    my ($InFileDir, $InFileName, $PathBase) = &test_file($File);
+
+    # Change to the input file's directory, so that if the input file has an
+    # \include{../foo} in it, we'll find the included file.
+    # Did something go wrong?
+    unless (defined($InFileDir) && chdir($InFileDir)) {
+       # main file must be ok; for included files or file fragments, just warn
+       next if ($count || $opt_p);
+       die "\n"; # printed error already
+    }
+
+    # OK. Start parsing the file!
+    print STDERR "In Directory $InFileDir\n" if $opt_d;
+    print STDERR "($InFileName: ";
+
+    # Read preamble and calculate document class if necessary
+    # (It's necessary when we're doing the first file.)
+    unless ($count) {
+
+       if ($opt_p) { # it's a partial file
+           $Doc_Class = $opt_c;
+       } else {
+           # Split the preamble off of the rest of the file
+           my $PreambleName = $PathBase . ".relyx" . ++$filenum;
+           $OutFileName = $PathBase . ".relyx" . ++$filenum;
+           push @deletelist, $OutFileName, $PreambleName;
+           &MakePreamble::split_preamble($InFileName,
+                                   $PreambleName, $OutFileName);
+           $InFileName = $OutFileName;
+
+           # Now read and translate the LaTeX preamble into LyX
+           # Return document's class so we know which layout file(s) to read
+           # Also return LyX preamble in a string, for later
+           ($Doc_Class, $LyX_Preamble, $Latex_Preamble) =
+                &MakePreamble::translate_preamble($PreambleName, $LyXFormat);
+
+       } # end partial file if
+
+       # Read file(s) containing the valid LyX layouts for this documentclass
+       # and their LaTeX command/environment equivalents
+       &ReadCommands::read_layout_files($Doc_Class);
+    }
+
+    # Clean the TeX file (not including its preamble)
+    $OutFileName = $PathBase . ".relyx" . ++$filenum;
+    push @deletelist, $OutFileName;
+    &CleanTeX::call_parser($InFileName, $OutFileName);
+
+    # Now convert basic constructs in the cleaned TeX file to LyX constructs
+    $InFileName = $OutFileName;
+    $OutFileName = $PathBase . ".relyx" . ++$filenum;
+    push @deletelist, $OutFileName;
+    &BasicLyX::call_parser($InFileName, $OutFileName);
+
+    # Final cleanup step for noweb files
+    if (defined $opt_n) {
+        $InFileName = $OutFileName;
+        $OutFileName = $PathBase . ".relyx" . ++$filenum;
+        push @deletelist, $OutFileName;
+        system("noweb2lyx", "-post", $InFileName, $OutFileName);
+    }
+
+    # Finally, print out the actual LyX file including the preamble
+    # For the *first* file, print out the LaTeX preamble too
+    $InFileName = $OutFileName;
+    if (defined $opt_n) {
+        push @deletelist, $PathBase;
+        $PathBase =~ s/.pre$$//;
+    }
+    $OutFileName = $PathBase . ".lyx";
+    my $preamble = $count ? $LyX_Preamble : $LyX_Preamble . $Latex_Preamble;
+    &LastLyX::last_lyx($InFileName, $OutFileName, $preamble);
+
+    warn ")\n";
+
+} continue {
+    $count++;
+
+} # END MAIN WHILE LOOP
+
+# Cleanup
+unless ($opt_d) {
+    warn "Deleting temp files\n";
+    unlink @deletelist;
+}
+
+$Success = 1;
+exit;
+
+# If we "die", output a sad message
+END{
+    if ($Success) {
+       warn "Finished successfully!\n";
+    } else {
+       warn "Exited due to fatal Error!\n";
+    }
+}
+
+##################### SUBROUTINES  ###########################################
+# Input: File (including absolute path)
+# Output: input file directory (absolute path)
+#         input file name (".tex" added if necessary) without path
+#         PathBase, the output file name (including path) without ".lyx" ending
+# Returns (undef, undef, undef) if something breaks
+#
+# Only allow certain suffixes
+#    Test for things, like writability of output directory, existence of
+# .lyx file we would be creating...
+sub test_file {
+    my $File = shift;
+    my @return_error = (undef, undef, undef);
+
+    # Get file names, set up for making different temporary files
+    # fileparse_set_fstype("MSDOS") for DOS support!
+    my ($in_basename, $in_path, $suffix) = fileparse($File, @Suffix_List);
+    #$path .= '/' unless $path =~ /\/$/; # fix BUG in perl5.002 fileparse!
+
+    # Try adding .tex to filename if you can't find the file the user input
+    unless (-e $File) {
+        if (! $suffix) { # didn't have a valid suffix. Try adding one
+           if (-e "$File.tex") {
+               $suffix = ".tex";
+           } else {
+               warn "\nCan't find input file $File or $File.tex\n";
+               return @return_error;
+           }
+       } else { # it had a valid suffix, but the file doesn't exist
+           warn "\nCan't find input file $File\n";
+           return @return_error;
+       }
+    }
+    my $in_filename = $in_basename . $suffix;
+
+    # Make sure directory is valid
+    #    Note that we chdir to an input file's directory before translating it.
+    # Therefore, unless the -o option is given, we want to output files in '.'
+    #
+    # TODO if file foo.tex includes a/bar.tex and b/bar.tex, then with the
+    # -o option things will get ugly. We could test for that and create a name
+    # (like relyx-1-12345-bar.tex) for the second (and later!) bar.tex file(s)
+    my $out_path = defined $opt_o ? $opt_o : "./";
+    unless (-w $out_path) { # Note: "" isn't writable!
+       warn "\nDirectory $out_path isn't writable!\n";
+       return @return_error;
+    }
+    $out_path =~ s(^./)(); # "foo" is more readable than "./foo"
+    # This will be used for creating LyX file as well as temp files
+    my $PathBase = $out_path . $in_basename;
+
+    # Check for files that already exist
+    my $lname = $PathBase . ".lyx";
+    if (-e $lname) {
+       if ($opt_f) {
+           warn "Will overwrite file $lname\n" if $opt_d;
+       } else {
+           warn "\nLyX file $lname already exists. Use -f to overwrite\n";
+           return @return_error;
+       }
+    }
+
+    return ($in_path, $in_filename, $PathBase);
+} # end sub test_file
+
+
+sub abs_file_name {
+    my $File = shift;
+    my ($basename, $path, $suffix) = fileparse($File, @Suffix_List);
+    my $realpath = &my_fast_abs_path($path);
+    # add / at end
+    $realpath .= '/' unless $realpath =~ /\/$/; 
+    my $name = "$realpath$basename$suffix";
+    return $name;
+}
+
+
+# Stole this from Cwd.pm. Can't use the Cwd:: function cuz it's not in 5.003
+# I could test $] >5.004 or something, but why bother?
+sub my_fast_abs_path {
+    my $cwd = fastcwd();
+    my $path = shift || '.';
+    chdir($path) || die "Cannot chdir to $path:$!";
+    my $realpath = fastcwd();
+    chdir($cwd)  || die "Cannot chdir back to $cwd:$!";
+    $realpath;
+}
+
+
+1; # return "true" to the wrapper
diff --git a/lib/reLyX/syntax.default b/lib/reLyX/syntax.default
new file mode 100644 (file)
index 0000000..a9baa62
--- /dev/null
@@ -0,0 +1,936 @@
+% This is the default list of commands for reLyX to read
+%    It tells reLyX many arguments each command takes, and which of them
+% (if any) are optional.
+%    It is taken from the list of commands written by John Weiss 970311
+% plus the math commands from math_hash.C
+%
+% Also had to add textrm etc. commands and many size commands (like \small)
+%
+%    I left in things like units of measure (\depth) because reLyX will think
+% that they're commands, and this way it will know they don't take any
+% arguments...
+%
+%    There are almost certainly commands in here we don't need -- but that
+% shouldn't matter
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% The first thing listed here is commands that are hard-coded into reLyX.
+% Redefining these commands in a new syntax file will probably not help%
+% and may break things. 
+\#
+\$
+\%
+\&
+\@
+\_
+\{
+\}
+~
+
+\hfill
+\i
+\j
+\L
+\l
+\LaTeX
+\LaTeXe
+\LyX
+\ldots
+\TeX
+
+\"{}
+$$
+\'{}
+\(
+\)
+\-
+\.{}
+\={}
+\[
+\]
+\\[]
+\\*[]
+\^{}
+\`{}
+\~{}
+\b{}
+% \begin{}[]   %reLyX will get confused if \begin is found in this file!
+%\begin{}[]{} % All of these show the different variations of \begin (jpw)
+%\begin{}{}   % reLyX can only handle \begin{}
+%\begin{}{}{}
+%\begin{}[][][]{}
+%\begin{}(,)
+%\begin{}(,)(,)
+%\begin{}{}[]{}
+\bf
+\bibitem[]{}
+\bibliography{}
+\bibliographystyle{}
+\c{}
+\cite[]{}
+\cline{ - }
+\d{}
+\documentclass[]{}[]
+\documentstyle[]{}
+\em
+\emph{}
+% \end{}   %reLyX will get confused if \end is found in this file!
+\epsf{}
+\epsfbox{}
+\epsffile{}
+\epsfig{}
+\epsfxsize
+\epsfysize
+\footnote[]{}
+\footnotesize
+\H{}
+\hline
+\huge
+\Huge
+\include{}
+\includegraphics[,][,]{} % btw, LyX doesn't support graphicx, just graphics
+\input{}
+\it
+\item[]  % Has two variants (jpw) Other variant is unsupported (adk)
+\label{}
+\large
+\Large
+\LARGE
+\marginpar[]{}
+\multicolumn{}{}{}
+\newline
+\noindent
+\normalsize
+\noun{}    % LyX style for nouns (appears in lyx-generated files)
+\pageref{}
+\psfig{}
+\ref{}
+\rm
+\sc
+\sf
+\sl
+\t{ }
+\textmd{}   % I had to add these (adk)
+\textbf{}   %         :
+\textrm{}   %         :
+\textsf{}   %         :
+\texttt{}   %         :
+\textup{}   %         :
+\textit{}   %         :
+\textsl{}   %         :
+\textsc{}   %         :
+\textbar
+\textbackslash
+\textgreater
+\textless
+\scriptsize
+\small
+\tiny
+\tt
+\u{}
+\underbar{}  % LyX generated files use underbar instead of underline
+\underline{}
+\v{}
+
+
+
+% Units of measure.  These get used only within the arguments of
+% commands that take some length quantity.
+
+\depth
+\fill
+\height
+\totalheight
+\width
+
+%
+% Length variables
+%
+
+\abovedisplay
+\abovedisplayshortskip
+\arraycolsep
+\arrayrulewidth
+\arraystretch
+\baselineskip
+\baselinestretch
+\belowdisplayskip
+\belowdisplayshortskip
+\bigskipamount
+\columnsep
+\columnseprule
+\dblfloatsep
+\dbltextfloatsep
+\doublerulesep
+\evensidemargin
+\fboxrule
+\fboxsep
+\floatsep
+\footnotesep
+\footskip
+\headheight
+\headsep
+\hoffset
+\intextsep
+\itemindent
+\itemsep
+\jot
+\labelsep
+\labelwidth
+\leftmargin
+\leftmargini
+\leftmarginii
+\leftmarginiii
+\leftmarginiv
+\leftmarginv
+\leftmarginvi
+\listparindent
+\marginpush
+\marginparsep
+\marginparwidth
+\mathindent
+\medskipamount
+\oddsidemargin
+\paperheight
+\paperwidth
+\parindent
+\parsep
+\parskip
+\partopsep
+\rightmargin
+\smallskipamount
+\tabbingsep
+\tabcolsep
+\textfloatsep
+\textheight
+\textwidth
+\topmargin
+\topsep
+\topskip
+\unitlength
+\voffset
+
+%
+% Commands that act like single characters and insert something.  This
+% excludes the commands that place accents on characters, since they
+% require arguments, whereas these don't.  Also excluded are commands
+% that insert a specified amount of space [again, that requires
+% arguments] and those that insert lists, since a list isn't a single
+% object.
+%
+% I had to remove things that TeX.pm doesn't recognize as a token, and hardcode
+%   those into reLyX. This included !' ?' -- --- and maybe some other things
+
+\ % A "\" followed by a space.
+\,
+\/
+\AA
+\aa
+\AE
+\ae
+\bigskip
+\copyright
+\dag
+\ddag
+\DH
+\dh
+\DJ
+\dj
+\dotfill
+\dots
+\guillemotleft
+\guillemotright
+\guilsinglleft
+\guilsinglright
+\hrulefill
+\lq
+\medskip
+\NG
+\ng
+\O
+\o
+\OE
+\oe
+\P
+\pounds
+\quad
+\qquad
+\quotedblbase
+\quotesinglebase
+\rq
+\S
+\SS
+\smallskip
+\ss
+\textbullet
+\textemdash
+\textendash
+\textexclamdown
+\textperiodcenter
+\textquestiondown
+\textquotedblleft
+\textquotedblright
+\textquoteleft
+\textquoteright
+\textvisiblespace
+\textcompwordmark
+\textquotedbl
+\TH
+\th
+\thechapter
+\theenumi
+\theenumii
+\theenumiii
+\theenumiv
+\theequation
+\thefigure
+\thefootnote
+\thempfootnote
+\thepage
+\theparagraph
+\thepart
+\thesection
+\thesubsection
+\thesubsubsection
+\thesubparagraph
+\thetable
+\vfill
+
+
+%
+% The LaTeX commands.  As per Alejandro's request, I've omitted all of
+% the math commands he appears to support in Mathed.  I'm also
+% omitting commands used primarily for defining new class and style
+% files. (jpw)
+%
+% For some reason, John didn't write {} after \" and some of the other
+%    accent commands (adk)
+% He also didn't include the \textsc{} equivalent to {\sc}
+% Because any commands with arguments in parentheses (rather than braces or
+%    brackets) appear in a picture environment, which reLyX doesn't support,
+%    we can comment those out.
+%
+% These are the commands you're mostly likely to want to redefine in your own
+% syntax files
+%
+% Arguments whose text is "translate" will have regular LaTeX in them (as
+% opposed to commands with special syntax) which should be translated by
+% reLyX like regular LaTeX. \mbox{} is an obvious example. LyX doesn't
+% support it, but only the "\mbox{" and the "}" need to be in TeX mode.
+
+\abstractname
+\addcontentsline{}{}{translate}
+\address{}
+\addtime{}
+\addtocontents{}{translate}  % one argument was missing here (JMarc)
+\addtocounter{}{}
+\addtolength{}{}
+\addvspace{}
+\Alph{}
+\alph{}
+\alsoname
+\and
+\appendix % had to add this -Ak
+\appendixname
+\arabic{}
+\author{}
+\backmatter
+%\bezier{}(,)(,)(,)    % picture
+\bfdefault
+\bibname
+\botfigrule
+\bottomfraction
+\caption[]{}
+\cc{}
+\ccname
+\centering
+\centerline{translate}
+\chapter[]{}
+\chapter*{}
+\chaptername
+\check{}
+%\circle{}    % picture environment (JMarc)
+%\circle*{}
+\cleardoublepage
+\clearpage
+\closing{}
+\color[]{,,}  % Two variants of this command and the next (jpw)
+% \color{}    %  This variant doesn't matter to reLyX (adk)
+\colorspec[]{,,}{}
+%\colorspec{}{}    %  This variant doesn't matter to reLyX (adk)
+%\contentsline{}{\numberline{}  }{}     % Appears only in .toc file (JMarc)
+\contentsname
+% \dashbox{}(,)[]{}   %picture
+\date{}
+\dblfigrule
+\dblfloatpagefraction
+\dbltopfraction
+\definecolor{}{}{,,}
+\discretionary{}{}{}
+\encl{}
+\enclname
+\enlargethispage{}
+\enlargethispage*{}
+\ensuremath{}
+\extracolsep{}
+\fbox{translate}
+\fcolorbox[]{,,}{,,}{}  % Two variants of this command
+%\fcolorbox{}{}{}    %  This variant doesn't matter to reLyX (adk)
+\figurename
+\floatpagefraction
+\flushbottom
+\fnsymbol{}
+\fontfamily{}
+\fontseries{}
+\fontshape{}
+\fontsize{}{}
+\footnotemark[]
+\footnoterule
+\footnotetext[]{translate}
+\frame{translate}
+\framebox[][]{translate} % Two variants of this command
+%\framebox(,)[]{}    %  picture variant
+\frenchspacing
+\frontmatter
+\fussy
+\glossary{translate}
+\glossaryentry{}{}       %only in .glo file (JMarc)
+% \graphpaper[](,)(,)    %picture
+\headtoname
+\hspace{}
+\hspace*{}
+\hyphenation{}
+\iflanguage{}{}{}
+\ifthenelse
+\includegraphics*[,][,]{} % LyX 1.0 doesn't support clipping figures
+\indent
+\index{}
+\indexentry{}{}        % only in .idx files (JMarc)
+\indexname
+\indexspace
+\invisible
+\itdefault
+% This variant of \item might break reLyX!
+%  \item{}   % Only appears in unsupported theindex environment
+\k{}
+\kill
+\labelnumi
+\labelnumii
+\labelnumiii
+\labelnumiv
+\labelitemi
+\labelitemii
+\labelitemiii
+\labelitemiv
+\language{}
+% \line(,){}    %picture
+\linebreak[]
+\linethickness{}
+\listfigurename
+\listofalgorithms %AMStex?
+\listoffigures
+\listoftables
+\listtablename
+\location{}
+\mainmatter
+\makebox[][]{translate}
+%  \makebox(,)[]{}     %picture variant
+\makeglossary
+\makeindex
+\makelabel{translate}
+\makelabels
+\maketitle
+\markboth{}{translate}
+\markright{translate}
+\mathversion{}
+\mbox{translate}
+\mddefault
+% \multiput(,)(,){}{}     %picture
+\name{}
+\newboolean{}
+\newcommand{}[][]{}
+\newcommand*{}[][]{}
+%\newcommand{}[]{}    % reLyX doesn't care about missing optarg
+\newcounter{}[]
+\newenvironment{}[][]{}{}
+\newenvironment*{}[][]{}{}
+% \newenvironment{}[]{}{}    % reLyX doesn't care about missing optarg
+\newfont{}{ scaled }
+\newlength{}
+\newpage
+\newsavebox{}
+\newtheorem{}[]{translate}[]
+\nocite{}
+\nocorr
+\nolinebreak[]
+\nonfrenchspacing
+\nopagebreak[]
+\normalcolor
+\normalfont
+\normalmarginpar
+\notesname
+\numberline{}{}
+\onecolumn
+\onlynotes{}
+\onlyslides{}
+\opening{}
+% \oval(,)[]   %picture
+\pagebreak[]
+\pagecolor[]{,,}
+% \pagecolor{}    % reLyX doesn't care about this version
+\pagename
+\pagenumbering{}
+\par
+\paragraph[]{}
+\paragraph*{}
+%\parbox[]{}{}            % reLyX treats next line same as this one (adk)
+\parbox[][][]{}{translate}
+\part[]{}
+\part*{}
+\partname
+\poptabs
+\prefacename
+\printindex
+\protect
+\providecommand{}[][]{}
+\providecommand*{}[][]{}
+\ps
+\pushtabs
+% \put(,){}     %picture
+% \qbezier[](,)(,)(,)     %picture
+\r{}
+\raggedbottom
+\raggedleft
+\raggedright
+\raisebox{}[][]{translate}
+\reflectbox{translate}
+\refname
+\refstepcounter{}
+\renewcommand{}[][]{}
+\renewcommand*{}[][]{}
+% \renewcommand{}[]{}   %reLyX doesn't care about variants
+\renewenvironment{}[][]{}{}
+\renewenvironment*{}[][]{}{}
+% \renewenvironment{}[]{}{}
+\resizebox{}{}{translate}
+\resizebox*{}{}{translate}
+\reversemarginpar
+\rmdefault
+\Roman{}
+\roman{}
+\rotatebox{}{translate}
+\rule[]{}{}
+\samepage
+\savebox{}[][]{}
+% \savebox{}(,)[]{}   %picture
+\sbox{}{}
+\scalebox{}[]{translate}
+\scdefault
+\section[]{}
+\section*{}
+\see
+\seename
+\selectfont
+\selectlanguage{}
+\setboolean{}{}
+\setcounter{}{}
+\setlength{}{}
+\settime{}
+\settodepth{}{}
+\settoheight{}{}
+\settowidth{}{}
+\sfdefault
+\shortstack[]{translate}
+\showhyphens{}
+\signature{}
+\sldefault
+\sloppy
+\stepcounter{}
+\stretch{}
+%\subitem{}   % unsupported theindex environment
+\subjectname
+\subparagraph[]{}  % These "sub" versions of the sectioning commands weren't
+\subparagraph*{}   % in the original commandlist for some reason (adk)
+\subsection[]{}    %
+\subsection*{}     %
+\subsubsection[]{} %
+\subsubsection*{}  %
+%\subsubitem{}   % unsupported theindex environment
+\suppressfloats[]
+\symbol{}
+\tablename
+\tableofcontents
+\tabularnewline[]
+\telephone{translate}
+\textcircled{translate}
+\textcolor[]{,,}{translate}
+%\textcolor{}{}      % reLyX doesn't care about this version
+\textnormal{translate}
+\textfraction
+\thanks{}
+\thicklines
+\thinlines
+\thispagestyle{}
+\title{}
+\today
+\topfigrule
+\topfraction
+\ttdefault
+\twocolumn[]
+\updefault
+\usebox{}
+\usecounter{}
+\usefont{}{}{}{}
+\usepackage[]{}[]
+\value{}
+% \vector(,){}   %picture
+% \verb||     % reLyX needs \verb to be hardcoded
+% \verb*||
+\visible
+\vline
+\vspace{}
+\vspace*{}
+\whiledo{}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% MATH COMMANDS
+% This includes some AMSmath commands
+
+% characters (not in math_hash.C)
+^{}
+_{}
+&
+
+% Math space (not in math_hash.C)
+\:
+\;
+\!
+
+% Greek letters
+
+\alpha
+\beta
+\gamma
+\delta
+\epsilon
+\varepsilon
+\zeta
+\eta
+\theta
+\vartheta
+\iota
+\kappa
+\lambda
+\mu
+\nu
+\xi
+\pi
+\varpi
+\rho
+% \varrho isn't supported
+\sigma
+\varsigma
+\tau
+\upsilon
+\phi
+\varphi
+\chi
+\psi
+\omega
+
+\Delta
+\Omega
+\Upsilon
+\Theta
+\Lambda
+\Sigma
+\Gamma
+\Pi
+\Phi
+\Psi
+\Xi
+
+% Other stuff
+%\setminus
+%\ldots    % already in non-math
+\limits
+\stackrel{}{}
+%\ll
+%\label  % already in non-math
+\lceil
+\aleph
+\sqrt[]{}
+\times
+\subset
+\supset
+\spadesuit
+\Re
+\left   % kind of takes an argument...
+\smile
+\exists
+\Vert
+\uplus
+\ell
+\langle
+\arccos
+\sup
+\sharp
+\sqcup
+\sqcap
+\approx
+\triangleleft
+\triangleright
+\tilde{}
+\emptyset
+\triangle
+\limsup
+\partial
+\parallel
+\infty
+\leftharpoonup
+\searrow
+\swarrow
+\top
+\Rightarrow
+% \underline   % already in non-Math list
+\underbrace{}
+\acute{}
+\angle
+\exp
+\leftarrow
+\prime
+\int
+\longleftarrow
+\leftrightarrow
+\longrightarrow
+\longleftrightarrow
+\widehat{}
+\sin
+\asymp
+\nolimits
+\perp
+\wedge
+\ln
+\widetilde{}
+\natural
+\uparrow
+\updownarrow
+\star
+\leftharpoondown
+\wp
+\not
+\tan
+\rceil
+\lfloor
+\rightleftharpoons
+\cos
+\sec
+\succ
+\cdots
+\ker
+\forall
+\liminf
+\Uparrow
+\right
+\Updownarrow
+\Pr
+\nabla
+\arcsin
+\arctan
+\flat
+\check{}
+\rangle
+\cot
+\cdot
+\clubsuit
+\in
+\ni
+\Downarrow
+\sb{}   % equivalent to _
+\sp{}   % equivalent to ^
+\sim
+\sum
+\models
+\nearrow
+\nwarrow
+\max
+\Im
+\lim
+\rightharpoonup
+\cap
+\cup
+\prec
+\wr
+\inf
+\bigoplus
+\biguplus
+\bigotimes
+\rightarrow
+% \textrm    % already in nonmath
+\simeq
+\succeq
+\notin
+\subseteq
+\supseteq
+\sqsubseteq
+\sqsupseteq
+\leq
+\surd
+\ddots
+\bot
+\bullet
+\bigodot
+\sinh
+\jmath
+\mp
+\pm
+\nonumber
+\breve{}
+\bigvee
+\bowtie
+\bigwedge
+\frown
+\rightharpoondown
+\det
+\dot{}
+\ddot{}
+\lg
+\log
+\oplus
+\ominus
+\otimes
+\diamondsuit
+\rfloor
+% \end  % already exist in non-Math part -Ak
+\hat{}
+\tanh
+\vdots
+\bigcap
+\bigcup
+\bigsqcup
+\heartsuit
+\longmapsto
+\bigtriangleup
+\preceq
+\odot
+\oint
+\grave{}
+\pmod{}
+\prod
+\frac{}{}
+\csc
+\circ
+\min
+\overline{}
+\arg
+\overbrace{}
+\amalg
+\vee
+\equiv
+\downarrow
+\imath
+\propto
+% \begin      % already in non-Math list
+\neq
+\hookleftarrow
+\hookrightarrow
+\bigtriangledown
+\bar{}
+% \newcommand   % already in non-Math list
+\overleftarrow
+\overrightarrow
+\Leftarrow
+\Longleftarrow
+\Leftrightarrow
+\Longrightarrow
+\neg
+\bigcirc
+\Longleftrightarrow
+\dagger
+\ddagger
+\hbar
+\coprod
+\cosh
+\coth
+\cong
+\vec{}
+\dim
+\mid
+\hom
+\bmod
+\quad
+\doteq
+\qquad
+\mapsto
+\backslash
+\diamond
+\geq
+\deg
+\gcd
+\gg
+\div
+\dashv
+\oslash
+\vdash
+
+% Font changes
+\mathbf{}
+\mathsf{}
+\mathcal{}
+\boldmath     % This command's actually given in text mode
+\unboldmath   % This command's actually given in text mode
+\mathrm{}
+\mathtt{}
+\mathit{}
+\mathnormal{}  %not in lamport, but it should be safe
+\scriptstyle
+\scriptscriptstyle
+\textstyle
+\displaystyle
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% There are some environments which reLyX doesn't have an equivalent for.
+% However, *within* that environment, simple translatable LaTeX appears.
+% (E.g., this doesn't include something like "picture" because the TeX
+% parser can't (yet?) understand the parentheses as being delimiters of
+% coordinates rather than plain text.)
+%    The environment names are placed in a "reLyXre" environment.
+%    There aren't very many of these; the idea is that the user can add
+% user-defined environments in personal syntax files
+
+\begin{reLyXre}
+% filecontents can only appear before \documentclass command, so not worth it
+fussypar
+sloppypar
+% slide only appears in the slides class, but if we don't put this in, then
+% the whole document will be copied in TeX mode!
+slide
+titlepage
+\end{reLyXre}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% There are some math commands which LyX doesn't support. If there's an
+% equivalent command that it *does* support, then we might as well
+% translate it.
+%    While copying things in math mode, reLyX will replace anything of the
+% following commands with (exactly) whatever text is in braces, so, e.g.,
+% $x\sb{a}$ will be converted to $x_{a}$ in the LyX file.
+%    In most cases, this simply avoids "evil red text" in math mode, but
+% in a couple cases, it actually fixes things (e.g. '\ ')
+%    Tokens to replace should be "normal" tokens, backslash followed by a
+% nonletter or one or more letters. (Token may also have * at the end.)
+
+\begin{reLyXmt}
+\sb    {_}
+\sp    {^}
+\|     {\Vert}
+\vert  {|}
+\      {\,\,}    % That's '\ ', same length (6/18 quad) as two '\,' tokens
+\to    {\rightarrow}
+\gets  {\leftarrow}
+\le    {\leq}
+\ge    {\geq}
+\ensuremath   {}  % If it's in math mode, \ensuremath is unnec.
+\end{reLyXmt}
diff --git a/lib/reLyX/test.ltx b/lib/reLyX/test.ltx
new file mode 100644 (file)
index 0000000..1da5c0a
--- /dev/null
@@ -0,0 +1,82 @@
+% This is a test document for reLyX.pl
+\documentclass[11pt]{article} %some comments
+
+%comments
+\def\blah{\blahblah}
+% And more comments
+
+%more comments
+\begin{document}
+
+\title{Test Document}
+\maketitle
+\tableofcontents
+
+\section{First Section}
+This {\large a {\small b \tiny c} \huge d} is some text. %Midline comment
+\framebox[3in][s]{What are you doing \ldots Dave}. This is more text.
+
+\section*{MySection}
+\label{sec:mysection}This is some ``quoted'' text in a new section.
+I {\em am\footnote{This is a great footnote because:
+\begin{itemize}
+\item The footnote is not \emph{emphasized}.
+\item The text is
+\end{itemize}
+
+How cool is that!?} emphasizing ``text.
+
+I keep'' emphasizing}. This ~ is text in a new par\-agraph.\\ It has \ldots
+an $ \alpha $ in it, which is OK\@. I can type special
+characters\footnote{i.e., characters which must be escaped}
+like \& and \#.
+
+\_ is a neat token.
+% This line won't print!
+
+Now I \textsf{want \texttt{to} write} some math in a displayed equation.
+\begin{eqnarray*}
+q^{(i)}_O & = & q^{water}_{O}+dq_{O}\times (P_{deg}^{(i-1)}-P_{deg}^{(i)})\\
+q_{H}^{(i)} & = & q^{water}_{H}+dq_{H}\times (P_{deg}^{(i-1)}-P_{deg}^{(i)})\\
+q_{p}^{(i)} & = & q^{water}_{H}+dq_{H}\times (P_{deg}^{(i-1)}-P^{(i+1)}_{deg})
+\end{eqnarray*}
+
+Here's an itemized list
+\begin{itemize}
+\item this is an item
+\begin{enumerate}
+\item this is a numbered item
+
+But now I want to write some text.
+\item this is another numbered item
+
+More text
+\end{enumerate}
+Yet more text
+
+\item this is another unnumbered item
+
+Final text
+\end{itemize}
+
+\section[hi]{New Section}
+Here's a {\em quotation:
+\begin{quotation}
+Hello there how are you?
+
+I am fine. Thanks
+\end{quotation}
+
+This} is a reference to section \ref{sec:mysection} on page
+\pageref{sec:mysection}.
+
+\begin{tabular}{ll}
+foo & bar \\
+bar & foo
+\end{tabular}
+
+Final Text.
+\end{document}
+
+
+
diff --git a/lib/reLyX/test.lyx b/lib/reLyX/test.lyx
new file mode 100644 (file)
index 0000000..f58fd3e
--- /dev/null
@@ -0,0 +1,262 @@
+#This file was created by <karger> Wed May 12 10:56:40 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass article
+\paperfontsize 11
+\begin_preamble
+%some comments
+
+%comments
+\def\blah{\blahblah}
+% And more comments
+
+%more comments
+\end_preamble
+
+\layout Title
+
+Test Document
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents
+
+\end_inset 
+
+
+\layout Section
+
+First Section
+\layout Standard
+
+This 
+\size large 
+a 
+\size small 
+b 
+\size tiny 
+c
+\size small
+
+\size large
+\size huge 
+d
+\size large
+
+\size default
+ is some text. 
+\latex latex 
+
+\backslash framebox[3in][s]{
+\latex default 
+What are you doing 
+\SpecialChar \ldots{}
+Dave
+\latex latex 
+}
+\latex default 
+.
+ This is more text.
+\layout Section*
+
+MySection
+\layout Standard
+
+
+\begin_inset LatexCommand \label{sec:mysection}
+
+\end_inset 
+
+This is some 
+\begin_inset Quotes eld
+\end_inset 
+
+quoted
+\begin_inset Quotes erd
+\end_inset 
+
+ text in a new section.
+ I 
+\emph on 
+am
+\begin_float footnote 
+
+\layout Standard
+
+This is a great footnote because: 
+\layout Itemize
+
+The footnote is not 
+\emph on 
+emphasized
+\emph default 
+. 
+\layout Itemize
+
+The text is 
+\layout Standard
+
+How cool is that!?
+\end_float 
+
+
+\emph on 
+ emphasizing 
+\begin_inset Quotes eld
+\end_inset 
+
+text.
+\layout Standard
+
+
+\emph on 
+I keep
+\begin_inset Quotes erd
+\end_inset 
+
+ emphasizing
+\emph default 
+.
+ This 
+\protected_separator 
+ is text in a new par\SpecialChar \-
+agraph.
+\newline 
+ It has 
+\SpecialChar \ldots{}
+an 
+\begin_inset Formula \(  \alpha \)
+\end_inset 
+
+ in it, which is OK\SpecialChar \@.
+ I can type special characters
+\begin_float footnote 
+
+\layout Standard
+
+i.e., characters which must be escaped
+\end_float 
+
+ like & and #.
+\layout Standard
+
+_ is a neat token.
+ Now I 
+\family sans 
+want 
+\family typewriter 
+to
+\family sans 
+ write
+\family default 
+ some math in a displayed equation. 
+\begin_inset Formula \begin{eqnarray*} 
+q^{(i)}_{O} & = & q^{water}_{O}+dq_{O}\times (P_{deg}^{(i-1)}-P_{deg}^{(i)})\\
+q_{H}^{(i)} & = & q^{water}_{H}+dq_{H}\times (P_{deg}^{(i-1)}-P_{deg}^{(i)})\\
+q_{p}^{(i)} & = & q^{water}_{H}+dq_{H}\times (P_{deg}^{(i-1)}-P^{(i+1)}_{deg})
+\end{eqnarray*}
+\end_inset 
+
+
+\layout Standard
+
+Here's an itemized list 
+\layout Itemize
+
+this is an item 
+\begin_deeper 
+\layout Enumerate
+
+this is a numbered item
+\begin_deeper 
+\layout Standard
+
+But now I want to write some text. 
+\end_deeper 
+\layout Enumerate
+
+this is another numbered item
+\begin_deeper 
+\layout Standard
+
+More text 
+\end_deeper 
+\end_deeper 
+\begin_deeper 
+\layout Standard
+
+Yet more text
+\end_deeper 
+\layout Itemize
+
+this is another unnumbered item
+\begin_deeper 
+\layout Standard
+
+Final text 
+\end_deeper 
+\layout Section
+
+New Section
+\layout Standard
+
+Here's a 
+\emph on 
+quotation: 
+\layout Quotation
+
+
+\emph on 
+Hello there how are you?
+\layout Quotation
+
+
+\emph on 
+I am fine.
+ Thanks 
+\layout Standard
+
+
+\emph on 
+This
+\emph default 
+ is a reference to section 
+\begin_inset LatexCommand \ref{sec:mysection}
+
+\end_inset 
+
+ on page 
+\begin_inset LatexCommand \pageref{sec:mysection}
+
+\end_inset 
+
+.
+\layout Standard
+
+
+
+\LyXTable
+multicol5
+2 2 0 0 0 0 0 0
+0 0 0 0
+0 0 0 0
+2 0 0 "" ""
+2 0 0 "" ""
+0 2 0 0 0 0 0 "" ""
+0 2 0 0 0 0 0 "" ""
+0 2 0 0 0 0 0 "" ""
+0 2 0 0 0 0 0 "" ""
+
+ foo 
+\newline 
+ bar 
+\newline 
+ bar 
+\newline 
+ foo 
+
+\layout Standard
+
+Final Text. 
+\the_end
diff --git a/lib/templates/README.new_templates b/lib/templates/README.new_templates
new file mode 100644 (file)
index 0000000..9118a9f
--- /dev/null
@@ -0,0 +1,38 @@
+HOW TO CREATE A NEW TEMPLATE
+============================
+
+Templates are almost usual LyX file that are saved by LyX itself.
+The strength is on "almost".
+
+LyX stores some properties in a file, for example:
+
+        \textclass dinbrief
+        \language german
+        \inputencoding default
+        \fontscheme default
+        \epsfig dvips
+        \papersize a4paper 
+        \paperfontsize 12 
+        \baselinestretch 1.00 
+        \secnumdepth 3 
+        \tocdepth 3 
+        \paragraph_separation skip 
+        \quotes_language german 
+        \quotes_times 2 
+        \paperorientation portrait 
+        \papercolumns 9 
+        \papersides 1 
+        \paperpagestyle plain 
+
+Some of these may be very reasonable for a certain template. In the
+case of a dinbrief-template this might be the papersize, the language
+and the quotes-settings, since it is a german-only template.  But it
+wouldn't make much sense to set the fontscheme or the inputencoding,
+since a user might have customized this already like he/she wanted it
+to be.
+
+So please delete all the lines of a new template with your favorite
+text editor (for example ed, ex or vi) that you don't want to set
+explicit for this template. LyX will use the user's default-values
+(defined in lyxrc) if a property isn't defined in the file itself.
+
diff --git a/lib/templates/aapaper.lyx b/lib/templates/aapaper.lyx
new file mode 100644 (file)
index 0000000..ac370cb
--- /dev/null
@@ -0,0 +1,89 @@
+#This file was created by <pit> Mon Nov 24 23:26:21 1997
+#LyX 0.11 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass aapaper
+\language default
+\fontscheme times
+\graphics default
+\paperfontsize default
+\spacing single 
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Thesaurus
+
+Put the Thesaurus codes here
+\layout Title
+
+This is your Title
+\layout Subtitle
+
+your subtitle
+\layout Author
+
+Me
+\latex latex 
+
+\backslash 
+inst{
+\latex default 
+1
+\latex latex 
+}
+\backslash 
+and 
+\latex default 
+You
+\latex latex 
+
+\backslash 
+inst{
+\latex default 
+2
+\latex latex 
+}
+\layout Address
+
+Here 
+\latex latex 
+
+\backslash 
+and
+\latex default 
+ There
+\layout Offprint
+
+Me
+\layout Email
+
+Me
+\layout Date
+
+Received / Accepted
+\layout Abstract
+
+Short abstract
+\layout Abstract
+
+
+\latex latex 
+
+\backslash 
+keywords{
+\latex default 
+keywords
+\latex latex 
+}
+\layout Section
+
+Introduction
+\the_end
diff --git a/lib/templates/aastex.lyx b/lib/templates/aastex.lyx
new file mode 100644 (file)
index 0000000..7b45bc7
--- /dev/null
@@ -0,0 +1,183 @@
+#This file was created by <mike> Wed Jun  9 13:29:15 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass aastex
+\begin_preamble
+\slugcomment{}
+\shorttitle{}
+\shortauthors{}
+\end_preamble
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+<Paper Title>
+\layout Author
+
+<Author 1>
+\latex latex 
+
+\backslash 
+altaffilmark{1}
+\layout Affiliation
+
+<Institution and Address>
+\layout Email
+
+<email@address>
+\layout Author
+
+<Author 2>
+\latex latex 
+
+\backslash 
+altaffilmark{2,3}
+\layout Affiliation
+
+<Institution and Address>
+\layout And
+
+\layout Author
+
+<Author 3>
+\latex latex 
+
+\backslash 
+altaffilmark{3}
+\layout Affiliation
+
+<Institution and Address>
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+altaffiltext{1}{Visiting Astronomer, etc.}
+\latex default 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+altaffiltext{2}{Current Address, etc.}
+\latex default 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+altaffiltext{3}{Visiting Astronomer, etc.}
+\latex default 
+\layout Abstract
+
+<Abstract text>
+\layout Keywords
+
+<Journal approved keywords>
+\layout Section
+
+Introduction
+\layout Standard
+
+<intro text>
+\layout Section
+
+Observations
+\layout Standard
+
+<observations text>
+\layout Section
+
+Results
+\layout Standard
+
+<results text; refer to Figure 
+\begin_inset LatexCommand \ref{fig1}
+
+\end_inset 
+
+ and to 
+\latex latex 
+
+\backslash 
+citet{ref1}
+\latex default 
+> 
+\layout Section
+
+Discussion
+\layout Standard
+
+<discussion text> 
+\layout Section
+
+Conclusions
+\layout Standard
+
+<conclusions text>
+\layout Acknowledgements
+
+\layout Standard
+
+<acknowledgment text>
+\layout Appendix
+
+\layout Section
+
+Appendix
+\layout References
+\bibitem [Author(1982)]{ref1}
+
+Author, A., 
+\latex latex 
+
+\backslash 
+apj
+\latex default 
+, 109, 301 
+\layout Standard
+
+
+\latex latex 
+
+\backslash 
+clearpage
+\layout FigCaption
+
+
+\latex latex 
+
+\begin_inset LatexCommand \label{fig1}
+
+\end_inset 
+
+
+\latex default 
+This is the first figure.
+\the_end
diff --git a/lib/templates/dinbrief.lyx b/lib/templates/dinbrief.lyx
new file mode 100644 (file)
index 0000000..8b19b12
--- /dev/null
@@ -0,0 +1,73 @@
+#This file was created by <jug> Sun Jun  8 12:01:39 1997
+#LyX 0.11 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass dinbrief
+\language german
+\inputencoding latin1
+\fontscheme default
+\graphics default
+\paperfontsize 12
+\spacing single 
+\papersize a4paper
+\paperpackage a4
+\use_geometry 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation skip
+\defskip medskip
+\quotes_language german
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle empty
+
+\layout My Address
+
+<Mein Name>
+\newline 
+<Meine Straße>
+\newline 
+<Meine Stadt>
+\layout Send To Address
+
+<Dein Name> 
+\newline 
+<Deine Straße>
+\newline 
+<Deine Stadt>
+\layout Stadt
+\cursor 17 
+<Stadt für Datum>
+\layout Datum
+
+08.
+ Juni 1997
+\layout Signature
+
+<Meine Unterschrift>
+\layout Betreff
+
+<Mein Betreff>
+\layout Opening
+
+<Anrede>
+\layout Standard
+
+<Hierher kommt der Text>
+\layout Standard
+
+<Auch in mehreren Absätzen>
+\layout Closing
+
+Mit freundlichen Grüßen
+\layout ps
+
+<Postscript.>
+\layout cc
+
+<Verteiler>
+\layout encl
+
+<Anlagen>
+\the_end
diff --git a/lib/templates/docbook_template.lyx b/lib/templates/docbook_template.lyx
new file mode 100644 (file)
index 0000000..47cd6ff
--- /dev/null
@@ -0,0 +1,54 @@
+#This file was created by <jamatos> Fri Sep 24 13:10:52 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass docbook
+\begin_preamble
+<!entity header system "header.sgml">
+\end_preamble
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+\added_space_top vfill \added_space_bottom vfill 
+Title
+\layout Date
+
+Date 
+\layout Author
+
+
+\latex latex 
+<firstname>
+\latex default 
+Joe
+\latex latex 
+</firstname><surname>
+\latex default 
+Doe
+\latex latex 
+</surname>
+\layout Abstract
+
+Abstract
+\layout Section
+
+First Section
+\the_end
diff --git a/lib/templates/g-brief-de.lyx b/lib/templates/g-brief-de.lyx
new file mode 100644 (file)
index 0000000..d327949
--- /dev/null
@@ -0,0 +1,113 @@
+#This file was created by <hartkens> Mon Jun 14 11:33:03 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass g-brief-de
+\begin_preamble
+%%\lochermarke
+\faltmarken
+\fenstermarken
+\trennlinien
+%% \klassisch
+\end_preamble
+\language german
+\inputencoding latin2
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language polish
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Name
+
+Thomas Hartkens
+\layout Unterschrift
+
+Thomas Hartkens
+\layout Strasse
+
+Edmund-Siemers-Allee 25
+\layout Zusatz
+
+\layout Ort
+
+20434 Hamburg
+\layout Land
+
+\layout RetourAdresse
+
+\layout Telefon
+
++49 40 3333333
+\layout Telefax
+
+\layout Telex
+
+\layout EMail
+
+hartkens@informatik.uni-hamburg.de
+\layout HTTP
+
+www.informatik.uni-hamburg.de/~hartkens
+\layout Bank
+
+\layout BLZ
+
+\layout Konto
+
+\layout Adresse
+
+Hans Beispiel
+\newline 
+Teststrasse 34
+\newline 
+26871 Musterberg
+\layout Betreff
+
+Musterbrief
+\layout Postvermerk
+
+EINSCHREIBEN
+\layout MeinZeichen
+
+\layout IhrZeichen
+
+TH
+\layout IhrSchreiben
+
+\layout Anlagen
+
+\layout Verteiler
+
+\layout Datum
+
+
+\latex latex 
+
+\backslash 
+today
+\layout Anrede
+
+Sehr geehrter Herr Beispiel,
+\layout Gruss
+
+Mit freunlichen Grüßen,
+\layout Brieftext
+
+seit der siebten Mieterhöhung im laufenden Jahr konnte ich keinen Zahlungseingan
+g von Ihnen mehr verbuchen.
+ Ich bitte Sie Ihren Verpflichtungen schnellstens nachzukommen, da ich mich
+ sonst gezwungen sehe, Ihre Miete ein weiteres mal anzuheben.
+\the_end
diff --git a/lib/templates/g-brief-en.lyx b/lib/templates/g-brief-en.lyx
new file mode 100644 (file)
index 0000000..0bb3f6d
--- /dev/null
@@ -0,0 +1,116 @@
+#This file was created by <hartkens> Mon Jun 14 11:15:11 1999
+#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass g-brief-en
+\begin_preamble
+%%\lochermarke
+\faltmarken
+\fenstermarken
+\trennlinien
+%% \klassisch
+\end_preamble
+\language english
+\inputencoding latin2
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language polish
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Name
+
+Thomas Hartkens
+\layout Signature
+
+Thomas Hartkens
+\layout Street
+
+Edmund-Siemers-Allee 25
+\layout Addition
+
+\layout Town
+
+22761 Hamburg
+\layout State
+
+Germany
+\layout ReturnAddress
+
+\layout Phone
+
++49 40 3333333
+\layout Telefax
+
+\layout Telex
+
+\layout EMail
+
+hartkens@informatik.uni-hamburg.de
+\layout HTTP
+
+www.informatik.uni-hamburg.de/~hartkens
+\layout Bank
+
+\layout BankCode
+
+\layout BankAccount
+
+\layout Address
+
+Hans Beispiel
+\newline 
+Teststrasse 34
+\newline 
+26871 Musterberg
+\layout Reference
+
+Musterbrief
+\layout PostalCommend
+
+REGISTERED LETTER
+\layout MyRef
+
+TH
+\layout YourRef
+
+\layout YourMail
+
+\layout Encl.
+
+\layout cc
+
+\layout Date
+
+
+\latex latex 
+
+\backslash 
+today
+\layout Opening
+
+Dear Mr.
+ Beispiel,
+\layout Closing
+
+Yours sincerely,
+\layout Letter
+
+I am writing to ask whether you could send me any information about possibility
+ of ...
+\layout Letter
+
+I would be very pleased if you could send me these informations.
+\the_end
diff --git a/lib/templates/hollywood.lyx b/lib/templates/hollywood.lyx
new file mode 100644 (file)
index 0000000..8404db4
--- /dev/null
@@ -0,0 +1,64 @@
+#This file was created by <garst> Fri Jan  8 16:22:26 1999
+#LyX 1.0 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass hollywood
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize 12
+\spacing single 
+\papersize letterpaper
+\paperpackage a4
+\use_geometry 1
+\use_amsmath 0
+\paperorientation portrait
+\leftmargin 1.6in
+\topmargin 0.5in
+\rightmargin 0.75in
+\bottommargin 0.75in
+\headheight 0.5in
+\headsep 12bp
+\footskip 0.5in
+\secnumdepth 2
+\tocdepth 2
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+<your title>
+\layout Author
+\added_space_bottom vfill 
+<your name>
+\layout Right Address
+
+<your address>
+\newline 
+<continued>
+\layout Narrative
+\pagebreak_top 
+Delete this text.
+\layout Standard
+
+Don't date your script
+\layout Standard
+
+Use a three hole punch.
+\layout Standard
+
+Bind it in plain vanilla with no text on the binding.
+\layout Standard
+
+Use two 1.5in brass brads and hammer them down.
+\layout Standard
+
+Remember---nothing goes in a script that you cannot see or hear!! 1 page
+ per minute.
+ 120 pages max.
+\the_end
diff --git a/lib/templates/iletter.lyx b/lib/templates/iletter.lyx
new file mode 100644 (file)
index 0000000..c1bd615
--- /dev/null
@@ -0,0 +1,67 @@
+#This file was created by <jug> Mon Jan 12 11:44:48 1998
+#LyX 0.12 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass iletter
+\language italian
+\inputencoding latin1
+\fontscheme default
+\graphics default
+\paperfontsize 12
+\spacing single 
+\papersize a4paper
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation skip
+\defskip medskip
+\quotes_language german
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle empty
+
+\layout My Address
+
+<Il mio Nome> 
+\newline 
+<La mia Via> 
+\newline 
+<La mia citta>
+\layout Send To Address
+
+<Il tuo nome> 
+\newline 
+<La tua via> 
+\newline 
+<La tua citta>
+\layout Citta
+
+<Citta per la data>
+\layout Signature
+
+<La mia firma>
+\layout Oggetto
+
+<L'oggetto>
+\layout Opening
+
+Egregio ...
+\layout Standard
+
+<Qui c'e il testo.>
+\layout Standard
+
+<Anche in piu paragrafi>
+\layout Closing
+
+Cordiali saluti
+\layout cc
+
+<cc>
+\layout encl
+
+<Allegati>
+\the_end
diff --git a/lib/templates/latex8.lyx b/lib/templates/latex8.lyx
new file mode 100644 (file)
index 0000000..d3f65db
--- /dev/null
@@ -0,0 +1,79 @@
+#This file was created by <rae> Wed Sep 16 09:48:15 1998
+#LyX 0.12 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass latex8
+\language english
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize 10
+\spacing single 
+\papersize Default
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 2
+\tocdepth 2
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 2
+\papersides 1
+\paperpagestyle empty
+
+\layout Title
+
+Put your title here
+\layout Author
+
+First Author
+\newline 
+Dept.
+ of Doing Stuff
+\newline 
+Institution 
+\newline 
+
+\latex latex 
+
+\backslash 
+and
+\newline 
+
+\latex default 
+Second Author
+\newline 
+Dept.
+ of Something
+\newline 
+Another Institution
+\layout LaTeX
+
+
+\backslash 
+thispagestyle{empty}
+\layout Abstract
+
+A short description of about 60 words.
+\layout Section
+
+Introduction
+\begin_inset Info rae Sat Jun 20 18:39:35 1998
+Section number will appear correctly on paper.
+That is, "1." instead of just "1"
+\end_inset 
+
+
+\layout Section
+
+Conclusions
+\layout Comment
+
+
+\begin_inset LatexCommand \BibTeX[latex8]{yourbibfile}
+
+\end_inset 
+
+
+\the_end
diff --git a/lib/templates/letter.lyx b/lib/templates/letter.lyx
new file mode 100644 (file)
index 0000000..1db1d0c
--- /dev/null
@@ -0,0 +1,53 @@
+#This file was created by <karger> Sun Nov 15 16:55:13 1998
+#LyX 1.0 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass letter
+
+\layout My Address
+
+<My Name>
+\newline 
+<My Street>
+\newline 
+<My Town>
+\layout Send To Address
+
+<Send To Name> 
+\newline 
+<Send To Street> 
+\newline 
+<Send To Town>
+\layout Signature
+
+<Your signature
+\begin_inset Info This field MUST come before the "Opening" field!
+
+\end_inset 
+
+>
+\layout Opening
+
+<Dear ...>
+\layout Standard
+
+<Text of Your Letter.
+ To create a real letter, just replace erase all the text in <> (including
+ the 
+\begin_inset Quotes eld
+\end_inset 
+
+<>
+\begin_inset Quotes erd
+\end_inset 
+
+ characters) with the desired text.> 
+\layout Closing
+
+<Yours sincerely,>
+\layout cc
+
+<cc>
+\layout encl
+
+<encl>
+\the_end
diff --git a/lib/templates/linuxdoctemplate.lyx b/lib/templates/linuxdoctemplate.lyx
new file mode 100644 (file)
index 0000000..9d080b4
--- /dev/null
@@ -0,0 +1,48 @@
+#This file was created by <iselborn> Fri Jun 27 07:10:39 1997
+#LyX 0.11 (C) 1995-1997 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass linuxdoc
+\language default
+\inputencoding default
+\fontscheme default
+\graphics default
+\paperfontsize 10
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+\added_space_top vfill \added_space_bottom vfill 
+TITLE
+\layout Author
+
+AUTHOR 
+\layout Date
+
+DATE
+\layout Abstract
+
+ABSTRACT
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents
+
+\end_inset 
+
+
+\layout Section
+\cursor 0 
+First Section
+\the_end
diff --git a/lib/templates/revtex.lyx b/lib/templates/revtex.lyx
new file mode 100644 (file)
index 0000000..50f51c2
--- /dev/null
@@ -0,0 +1,130 @@
+#This file was created by <karger> Tue Jan 26 17:48:36 1999
+#LyX 1.0 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass revtex
+\options aps,manuscript
+
+\layout Title
+
+Insert your Title Here
+\layout Author
+
+Author1
+\begin_float footnote 
+\layout Standard
+
+Author to whom correspondence should be addressed
+\end_float 
+ and Author2
+\layout Address
+
+Insert the name of your university, company, or institute here.
+\layout Standard
+
+
+\begin_inset Info You don't have to write \maketitle.. LyX does this by itself.
+\end_inset 
+
+
+\layout Abstract
+
+Insert your abstract here.
+\layout Section
+
+Introduction
+\layout Standard
+
+Introduction goes here.
+\layout Standard
+
+By the way, any of the style options, like 
+\family typewriter 
+prl
+\family default 
+ or 
+\family typewriter 
+preprint
+\family default 
+ should go in the 
+\family sans 
+Extra
+\protected_separator 
+Options
+\family default 
+ field in the 
+\family sans 
+Document
+\protected_separator 
+Layout
+\family default 
+ popup (accessed from the 
+\family sans 
+Layout
+\family default 
+ menu).
+\layout Section
+
+Insert section title here
+\layout Standard
+
+Section 2 text goes here.
+\layout Standard
+
+Special REVTeX 3.1 macros must be typed in TeX mode, so typing 
+\family typewriter 
+
+\backslash 
+openone
+\family default 
+ in TeX mode yields 
+\latex latex 
+
+\backslash 
+openone{}
+\latex default 
+.
+ (See the REVTeX manual for other macros.) REVTeX macros can also be used
+ freely in the math editor, so you can type 
+\begin_inset Formula \( \sqrt{\overstar {a}}>\overcirc {b} \)
+\end_inset 
+
+.
+\layout Standard
+
+You can do a bibliography by hand, as shown below, or erase that, and use
+ BibTeX.
+ If you use BibTeX, don't forget to use a REVTeX bibliography style file,
+ such as 
+\family typewriter 
+prsty.bst
+\family default 
+.
+ With either method, you can cite references with the LyX citation commands
+\begin_inset LatexCommand \cite{mycitation}
+
+\end_inset 
+
+.
+\begin_inset Info If you get question marks instead of numbers in your references,
+re-run LaTeX (File->update dvi)
+\end_inset 
+
+
+\layout Bibliography
+\bibitem {mycitation}
+
+Author, 
+\begin_inset Quotes eld
+\end_inset 
+
+Title
+\begin_inset Quotes erd
+\end_inset 
+
+, Journal 
+\series bold 
+Volume
+\series default 
+, page--numbers (year).
+\the_end
diff --git a/lib/templates/slides.lyx b/lib/templates/slides.lyx
new file mode 100644 (file)
index 0000000..f4a59d4
--- /dev/null
@@ -0,0 +1,88 @@
+#This file was created by <candide> Tue Dec 22 07:58:14 1998
+#LyX 1.0 (C) 1995-1998 Matthias Ettrich and the LyX Team
+\lyxformat 2.15
+\textclass slides
+\begin_preamble
+% Uncomment to print out only slides and overlays
+%
+%\onlyslides{\slides}
+
+% Uncomment to print out only notes
+%
+%\onlynotes{\notes}
+\end_preamble
+\language default
+\inputencoding default
+\fontscheme default
+\graphics dvips
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Slide
+
+\layout Standard
+
+Test slide.
+\layout InvisibleText
+
+\layout Standard
+
+Text visible only in an overlay.
+\layout VisibleText
+
+\layout Standard
+
+Text visible in the main slide.
+\layout Overlay
+
+\layout Standard
+
+Test overlay.
+\layout VisibleText
+
+\layout Standard
+
+Text visible only in an overlay.
+\layout InvisibleText
+
+\layout Standard
+
+Text visible in the main slide.
+\layout VisibleText
+
+\layout Note
+
+\layout Standard
+
+Test note.
+\layout Standard
+
+A time marker: 
+\latex latex 
+
+\backslash 
+settime{60}
+\layout Standard
+
+Don't talk more than 
+\latex latex 
+
+\backslash 
+addtime{200}
+\latex default 
+.
+\the_end
diff --git a/lib/tex/broadway.cls b/lib/tex/broadway.cls
new file mode 100644 (file)
index 0000000..bd223a8
--- /dev/null
@@ -0,0 +1,233 @@
+%% Author: Garst R. Reese  reese@isn.net
+%% This is file `broadway.cls', which provides the current
+%% preferred format for submission of "spec" scripts
+%% It is a pretty dull and uninteresting format, but it sells
+%% Derived from report.cls. There is probably still a lot of stuff
+%% that could be deleted. 
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{broadway} [1999/02/09 v1.0 uses broadway.layout]
+\newcounter{act}
+%\newcounter{scene}[act]
+\renewcommand{\ref}[1]{#1}
+\renewcommand{\theact}{\Roman{act}}
+%\renewcommand{\thescene}{SCENE\arabic{scene}}
+\newcommand\@ptsize{}
+\newif\if@restonecol
+\newif\if@titlepage
+\@titlepagetrue
+\newif\if@openright
+\DeclareOption{letterpaper}
+   {\setlength\paperheight {11in}%
+    \setlength\paperwidth  {8.5in}}
+\DeclareOption{12pt}{\renewcommand\@ptsize{0}}
+\DeclareOption{12pt}{\renewcommand\@ptsize{1}}
+\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
+\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
+\DeclareOption{twoside}{\@twosidetrue  \@mparswitchtrue}
+\DeclareOption{draft}{\setlength\overfullrule{5pt}}
+\DeclareOption{final}{\setlength\overfullrule{0pt}}
+\DeclareOption{titlepage}{\@titlepagetrue}
+\DeclareOption{notitlepage}{\@titlepagefalse}
+\DeclareOption{openright}{\@openrighttrue}
+\DeclareOption{openany}{\@openrightfalse}
+\DeclareOption{onecolumn}{\@twocolumnfalse}
+\ExecuteOptions{letterpaper,12pt,oneside,onecolumn,final,openany}
+\ProcessOptions
+\input{size1\@ptsize.clo}
+\setlength\lineskip{1\p@}
+\setlength\normallineskip{1\p@}
+\renewcommand\baselinestretch{}
+\setlength\parskip{0\p@ \@plus \p@}
+\@lowpenalty   51
+\@medpenalty  151
+\@highpenalty 301
+\setcounter{topnumber}{2}
+\renewcommand\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\renewcommand\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\renewcommand\textfraction{.2}
+\renewcommand\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\renewcommand\dbltopfraction{.7}
+\renewcommand\dblfloatpagefraction{.5}
+  \def\ps@headings{%
+    \let\@oddfoot\@empty
+    \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+    \let\@mkboth\markboth
+}
+\def\ps@myheadings{%
+    \let\@oddfoot\@empty\let\@evenfoot\@empty
+    \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+    \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+    \let\@mkboth\@gobbletwo
+    }
+  \if@titlepage
+\newcommand{\address}{\renewcommand{\@address}}
+\newcommand{\@address}{}
+  \newcommand\maketitle{\begin{titlepage}%
+  \let\footnotesize\small
+  \let\footnoterule\relax
+  \let \footnote \thanks
+  \null\vfil
+  \vskip 60\p@
+  \begin{center}%
+    { \underline{\@title} \par}%
+    \vskip 3em%
+    {\lineskip .75em%
+      \begin{tabular}[t]{c}%
+        \@author
+      \end{tabular}\par}%
+      \vskip 1.5em%
+  \end{center}\par
+\raggedleft
+\vfill
+\begin{tabular}{l}%
+\ignorespaces
+\@address
+\end{tabular}\par%
+  \@thanks
+%  \vfil\null
+  \end{titlepage}%
+  \setcounter{footnote}{0}%
+  \global\let\thanks\relax
+  \global\let\maketitle\relax
+% \global\let\@address\@empty
+  \global\let\@thanks\@empty
+  \global\let\@author\@empty
+  \global\let\@date\@empty
+  \global\let\@title\@empty
+% \global\let\address\relax
+  \global\let\title\relax
+  \global\let\author\relax
+  \global\let\date\relax
+  \global\let\and\relax
+}
+\fi
+  \setlength\leftmargini  {2.5em}
+\leftmargin  \leftmargini
+\setlength  \labelsep  {.1em}
+\setlength  \labelwidth{\leftmargini}
+\addtolength\labelwidth{-\labelsep}
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty   -\@lowpenalty
+\@itempenalty     -\@lowpenalty
+%\renewcommand\theenumi{\@arabic\c@enumi}
+%\newcommand\labelenumi{SCENE\theenumi.}
+%\renewcommand\p@enumii{\theenumi}
+%\newcommand\labelitemi{\textbullet}
+\newenvironment{titlepage}
+    {%
+      \if@twocolumn
+        \@restonecoltrue\onecolumn
+      \else
+        \@restonecolfalse\newpage
+      \fi
+      \thispagestyle{empty}%
+      \setcounter{page}\@ne
+    }%
+    {\if@restonecol\twocolumn \else \newpage \fi
+     \if@twoside\else
+        \setcounter{page}\@ne
+     \fi
+    }
+\setlength\tabbingsep{\labelsep}
+\skip\@mpfootins = \skip\footins
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\newcommand\@pnumwidth{1.55em}
+\newcommand\@tocrmarg{2.55em}
+\newcommand\@dotsep{4.5}
+\setcounter{tocdepth}{2}
+\setlength\columnsep{10\p@}
+\setlength\columnseprule{0\p@}
+\pagestyle{plain}
+\pagenumbering{arabic}
+\if@twoside
+\else
+  \raggedbottom
+\fi
+\if@twocolumn
+  \twocolumn
+  \sloppy
+  \flushbottom
+\else
+  \onecolumn
+\fi
+
+\newenvironment{atrise}%
+{\begin{list}{}{%
+\leftmargin \rightmargin}
+\item[]AT RISE:\ignorespaces}
+{\unskip \end{list}}
+
+\newenvironment{scene}%
+{
+%\stepcounter{scene}
+\begin{center}{}{%
+\center}
+\item[]SCENE \ignorespaces}
+{\unskip \end{center}}
+
+\newenvironment{act}%
+{
+\stepcounter{act}
+%\setcounter{scene}{0}
+\begin{center}{}{%
+\center}
+\item[]ACT \theact \ignorespaces}
+{\unskip \end{center}}
+
+\newenvironment{dialogue}%
+{\raggedright
+\begin{list}{}{%
+       \setlength{\leftmargin}{.5in}
+       \setlength{\rightmargin}{.5in}
+\setlength{\parsep}{0mm}
+\setlength{\topsep}{0mm}}
+\item[] \ignorespaces}
+{\unskip \end{list}}
+
+\newenvironment{narrative}%
+{\raggedright
+\fontshape{it}\selectfont{}
+\begin{list}{}{%
+       \setlength{\leftmargin}{0in}
+       \setlength{\rightmargin}{0in}
+\setlength{\parsep}{2mm}
+\setlength{\topsep}{2mm}}
+\item[] \ignorespaces}
+{\unskip \end{list}}
+
+\newenvironment{speaker}%
+{\begin{center}{}{%
+\center
+\setlength{\parsep}{0mm}
+\setlength{\topsep}{2mm}}
+\item[] \ignorespaces}
+{\unskip \end{center}}
+
+\newenvironment{parenthetical}%
+{\fontshape{it}\selectfont{}
+\begin{center}{}{%
+\center
+\setlength{\parsep}{0mm}
+\setlength{\topsep}{0mm}}
+       \item[](\ignorespaces}
+{\unskip)\end{center}}
+
+\endinput
+%%
+%% End of file `broadway.cls'.
diff --git a/lib/tex/ejour2.cls b/lib/tex/ejour2.cls
new file mode 100644 (file)
index 0000000..27232d8
--- /dev/null
@@ -0,0 +1,1574 @@
+%
+%-------------------------------- NEW ---------------------------------
+% ejour2.cls   
+% ==========
+%
+% class definition file for LaTeX2e
+% two-column journal articles
+%
+% Martin Vermeer, June 1997
+% =========================
+% Lyx 10 version
+%
+% MV and Jean-Marc Lasgouttes, March 1998
+% =======================================
+% Lyx 12 version, fixes for reference list and author/year ref format
+%
+% Call either with 
+%   \documentstyle (2.09 compatibility mode)
+% or with
+%   \documentclass (2e native mode, preferred)
+% 
+% To be used with LaTeX2e and NFSS.
+%
+% No promises, no lies (from the GPL, freely interpreted)
+% mail address for possible help:
+%
+%    mv@fgi.fi
+%
+%--------------------------------- OLD -------------------------------
+% LaTeX package LJour2 1.0: main style file
+% Springer-Verlag HD
+%
+% This file has been modified from ljour2.mac, 
+% version 1.0 as of 6-May-94
+% from Springer-Verlag
+%
+% LaTeX support of two column journals
+%
+%% It is for use with: LATEX VERSION 2.09 <25 March 1992>
+%% and the NFSS from F. Mittelbach and R. Schoepf
+%
+% Please report all errors via e-mail to SPRINGER@vax.ntp.springer.de
+% or to the address mentioned on page 2 of the documentation
+%---------------------------------------------------------------------
+%
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesClass{ejour2}
+          [1997/06/17 (Martin Vermeer)]
+%
+% All this is new, 2e-like (MV)
+\newif\if@draft
+\newif\if@bibay
+\newif\if@numart
+\newif\if@english
+\newif\if@francais
+\newif\if@deutsch
+\newif\if@footinfo
+\newif\if@JG           % Is this Journal of Geodesy?
+
+% Assume english  (MV)
+\@englishtrue
+\@francaisfalse
+\@deutschfalse
+
+%
+% All new... -- MV June 1997
+%
+\DeclareOption{amssymb}{\relax}
+\DeclareOption{draft}{\@drafttrue}
+\DeclareOption{makeidx}{\relax}
+\DeclareOption{script}{\relax}
+\DeclareOption{footinfo}{\@footinfotrue}
+\DeclareOption{twoside}{\relax}
+\DeclareOption{referee}{\@drafttrue}
+\DeclareOption{vecmath}{\relax}
+\DeclareOption{vecphys}{\relax}
+\DeclareOption{numart}{\@numarttrue}
+\DeclareOption{fleqn}{\relax}
+\DeclareOption{leqno}{\relax}
+\DeclareOption{array}{\relax}
+\DeclareOption{bibay}{\@bibaytrue}
+%
+\DeclareOption{deutsch}{\@deutschtrue\@englishfalse}
+\DeclareOption{francais}{\@francaistrue\@englishfalse}
+\DeclareOption{german}{\@deutschtrue\@englishfalse}
+%
+\DeclareOption{cropmark}{\relax}
+\DeclareOption{psfig}{\relax}
+\DeclareOption{JG}{\@JGtrue\@bibaytrue
+  \@englishtrue\@francaisfalse\@deutschfalse}
+
+%% 
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+\ProcessOptions
+\LoadClass[fleqn]{article}
+%%
+
+%  This was added to make equations always flush left
+% Martin Vermeer 27/06/1997
+%
+\AtBeginDocument{\mathindent\z@}
+%
+%
+\if@draft\@twocolumnfalse\@twosidefalse
+\else\@twocolumntrue\@twosidetrue
+\fi
+
+%
+% This is sprbegch.tex
+% changes to LaTeX for Springer styles begin herewith
+%
+\makeatletter
+%
+% Added (cannibalized from compatibility mode code):
+% Martin Vermeer 19/06/1997
+%
+\if@compatibility\else
+% We are in native mode:
+% Make 2e understand these old constructs:
+  \def\@footnotemark{%
+    \leavevmode
+    \ifhmode\edef\@x@sf{\the\spacefactor}\fi
+    \@makefnmark
+    \ifhmode\spacefactor\@x@sf\fi
+     \relax}
+  \def\@textsuperscript#1{$\m@th{\@gobble#1}$}
+  \def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}}
+\fi
+%
+\def\@optiondef#1{\expandafter\def\csname sp@#1\endcsname{}}
+%
+\def\@springererr#1#2{%
+\edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+\typeout{Springer Style error.  \space See documentation for
+ explanation.^^J \space\@spaces\@spaces\@spaces Type \space H <return>
+ \space for immediate help.}\errmessage{#1}}
+%
+\def\@springerwarn#1#2{%
+\edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+\typeout{Springer Style Warning. \space See documentation for
+ explanation.^^J \space\@spaces\@spaces\@spaces Type \space H <return>
+ \space for immediate help.}\errmessage{#1}}
+\def\springerstylefile{ejour2}
+%
+% This is document.tex
+% checks whether style specified in \documentstyle and style used as
+% formatfile are the same
+\def\@documentstyle[#1]#2{\makeatletter
+  \def\@tempx{#2}
+  \def\@optionlist{#1}\gdef\@optionfiles{}%
+  \@ifundefined{springerstylefile}{\input \@tempx.sty\relax}%
+    {\ifx\@tempx\springerstylefile\relax
+     \typeout{This is \springerstylefile.}%
+    \else
+    \@springererr{Style '\springerstylefile' is preloaded}{Please
+     check your input.}\fi
+     \@options}
+    \let\@elt\input \@optionfiles \let\@elt\relax
+    \def\normalsize{\@normalsize}%
+    \normalsize\rm
+    \mark{{}{}}}
+%
+% Checks whether options specified to \documentstyle are allowed with
+% current style (e.g. are listed in the dataset options.tex)
+\def\@options{\let\@elt\relax
+  \@for\@tempa:=\@optionlist\do{
+     \@ifundefined{sp@\@tempa}%
+         {\@springerwarn{Option '\@tempa' not tested with
+                        \springerstylefile, this may not work}%
+                       {Press return to continue, but keep your
+                        fingers crossed.}}%
+     {}%
+     \@ifundefined{ds@\@tempa}{\xdef\@optionfiles{\@optionfiles
+     \@elt \@tempa.sty\relax}}{\csname ds@\@tempa\endcsname}%
+  }%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is misc.xxx
+%
+% It defines various commands not available in "plain LaTeX"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\ts}{\thinspace{}}
+\newcommand{\sq}{\hbox{\rlap{$\sqcap$}$\sqcup$}}
+\newcommand{\qed}{\ifmmode\sq\else{\unskip\nobreak\hfil
+  \penalty50\hskip1em\null\nobreak\hfil\sq
+  \parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi{}}
+\def\D{{\rm d}}
+\def\E{{\rm e}}
+\let\eul=\E
+\def\I{{\rm i}}
+\let\imag=\I
+\def\strich{\vskip0.5cm\hrule\vskip3ptplus12pt\null}
+% Frame for paste-in figures or tables
+\def\mpicplace#1#2{%#1 = width   #2 = height
+\vbox{\@tempdima=#2\advance\@tempdima by-2\fboxrule
+\hrule\@height \fboxrule\@width #1
+\hbox to #1{\vrule\@width \fboxrule\@height\@tempdima\hfil
+\vrule\@width \fboxrule\@height\@tempdima}\hrule\@height
+\fboxrule\@width #1}}
+\def\picplace#1{\mpicplace{\hsize}{#1}}
+% Ragged bottom for the actual page
+\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil
+\global\let\@textbottom\relax}}
+\flushbottom
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is referee.tex
+%
+% It defines the style option "referee" = "draft"
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\if@draft
+ \typeout{A referee's copy will be produced.}%
+ \def\baselinestretch{2}\small
+ \normalsize\rm
+ \newbox\refereebox
+ \setbox\refereebox=\vbox to0pt{\vskip0.5cm%
+   \hbox to\textwidth{\normalsize\tt\hrulefill\lower0.5ex
+         \hbox{\kern5pt referee's copy\kern5pt}\hrulefill}\vss}%
+ \def\@oddfoot{\copy\refereebox}\let\@evenfoot=\@oddfoot
+\fi
+%
+% This is ucgreek
+% the definition of versal greek characters
+\mathchardef\Gamma="0100
+\mathchardef\Delta="0101
+\mathchardef\Theta="0102
+\mathchardef\Lambda="0103
+\mathchardef\Xi="0104
+\mathchardef\Pi="0105
+\mathchardef\Sigma="0106
+\mathchardef\Upsilon="0107
+\mathchardef\Phi="0108
+\mathchardef\Psi="0109
+\mathchardef\Omega="010A
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is vector.tex
+%
+% It redefines the plain TeX \vec command
+% and adds a \tens command for tensors
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\vec@style{\bf}  % hook to change style of vector
+                     % default yields mathstyle i.e. boldface upright
+
+\def\vec#1{\relax\ifmmode\mathchoice
+{\mbox{\boldmath$\vec@style\displaystyle#1$}}
+{\mbox{\boldmath$\vec@style\textstyle#1$}}
+{\mbox{\boldmath$\vec@style\scriptstyle#1$}}
+{\mbox{\boldmath$\vec@style\scriptscriptstyle#1$}}\else
+\hbox{\boldmath$\vec@style\textstyle#1$}\fi}
+
+\def\tens#1{\relax\ifmmode\mathchoice{\mbox{$\sf\displaystyle#1$}}
+{\mbox{$\sf\textstyle#1$}}
+{\mbox{$\sf\scriptstyle#1$}}
+{\mbox{$\sf\scriptscriptstyle#1$}}\else
+\hbox{$\sf\textstyle#1$}\fi}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is layout.lj2
+%
+% It defines various sizes and settings for journals
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\hoffset=-1cm
+\voffset=-1.5cm  % changed from -2.5 cm MV
+%
+\topmargin=0cm
+\textwidth=39.5cc
+\textheight=640dd
+\columnsep=1.5cc
+\oddsidemargin=0cm
+\evensidemargin=0cm
+\headsep=16.74dd
+\newdimen\headerboxheight
+\headerboxheight=202.23pt % 20 10.5dd-lines - 2\baselineskip
+%
+\baselineskip=10.5dd
+\parindent=15pt
+\parskip=0pt plus 1pt
+\hfuzz=2pt
+\frenchspacing
+%
+\renewcommand{\topfraction}{.9}
+\renewcommand{\bottomfraction}{.9}
+\renewcommand{\textfraction}{.1}
+\renewcommand{\floatpagefraction}{.9}
+\renewcommand{\dbltopfraction}{.9}
+\renewcommand{\dblfloatpagefraction}{.9}
+%
+\tolerance=500
+%
+\abovedisplayskip=3 mm plus6pt minus 4pt
+\belowdisplayskip=3 mm plus6pt minus 4pt
+\abovedisplayshortskip=0.0 mm plus6pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+%
+\predisplaypenalty=0
+\clubpenalty=20000
+\widowpenalty=20000
+%
+\arraycolsep=1.5pt
+%
+\newdimen\betweenumberspace          % dimension for space between
+\betweenumberspace=3.33pt            % number and text of titles.
+\newdimen\aftertext                  % dimension for space after
+\aftertext=5pt                       % text of title.
+\newdimen\headlineindent             % dimension for space between
+\headlineindent=1.166cm              % number and text of headings.
+%
+%
+% Figures and tables are processed in small print
+%
+\if@compatibility
+  % in 2.09 compat mode:   (mv 27/06/97 )
+  \def\figure{\small\rm\@float{figure}}
+  \@namedef{figure*}{\small\rm\@dblfloat{figure}}
+  \def\table{\small\rm\@float{table}}
+  \@namedef{table*}{\small\rm\@dblfloat{table}}
+\else
+  % 2e native mode; I added this (MV)
+  \renewenvironment{figure}
+                 {\@float{figure}\small}
+                 {\end@float}
+  \renewenvironment{figure*}
+                 {\@dblfloat{figure}\small}
+                 {\end@dblfloat}
+  \renewenvironment{table}
+                 {\@float{table}\small}
+                 {\end@float}
+  \renewenvironment{table*}
+                 {\@dblfloat{table}\small}
+                 {\end@dblfloat}
+\fi
+%
+\def\fps@figure{htbp}
+\def\fps@table{htbp}
+%
+\labelsep=5pt                        % measures for lists
+\leftmargini=\parindent
+\labelwidth\leftmargini\advance\labelwidth-\labelsep
+\leftmarginii=\parindent
+\parsep=\parskip
+%
+\def\@listI{\leftmargin\leftmargini
+        \parsep=\parskip
+        \topsep=\medskipamount
+        \itemsep=\parskip \advance\itemsep by -\parsep}
+\let\@listi\@listI
+\@listi
+%
+\def\@listii{\leftmargin\leftmarginii
+        \labelwidth\leftmarginii\advance\labelwidth by -\labelsep
+        \parsep=\parskip
+        \topsep=\z@
+        \itemsep=\parskip \advance\itemsep by -\parsep}
+%
+\def\@normalsize{\@setsize\normalsize{10.5dd}\xpt\@xpt
+\abovedisplayskip=3 mm plus6pt minus 4pt
+\belowdisplayskip=3 mm plus6pt minus 4pt
+\abovedisplayshortskip=0.0 mm plus6pt
+\belowdisplayshortskip=2 mm plus4pt minus 4pt
+\let\@listi\@listI}
+%
+\def\small{\@setsize\small{9dd}\viiipt\@viiipt
+\abovedisplayskip 8.5pt plus 3pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus2pt%
+\belowdisplayshortskip 4pt plus2pt minus 2pt
+\def\@listi{\leftmargin\leftmargini
+\topsep 4pt plus 2pt minus 2pt\parsep\parskip
+\itemsep\parskip}}
+%
+\def\petit{\par\addvspace{6pt}\small}
+\def\endpetit{\par\addvspace{6pt}}
+%
+\def\footnotesize{\@setsize\footnotesize{9dd}\viiipt\@viiipt
+\abovedisplayskip 6pt plus 2pt minus 4pt%
+\belowdisplayskip \abovedisplayskip
+\abovedisplayshortskip \z@ plus 1pt%
+\belowdisplayshortskip 3pt plus 1pt minus 2pt
+\def\@listi{\leftmargin\leftmargini
+\topsep 3pt plus 1pt minus 1pt\parsep\parskip
+\itemsep\parskip}}
+%
+\def\scriptsize{\@setsize\scriptsize{8pt}\viipt\@viipt}
+\def\tiny{\@setsize\tiny{6pt}\vpt\@vpt}
+\def\large{\@setsize\large{13dd}\xiipt\@xiipt}
+\def\Large{\@setsize\Large{17dd}\xviipt\@xviipt}
+\def\LARGE{\@setsize\LARGE{17dd}\xviipt\@xviipt}
+\def\huge{\@setsize\huge{25pt}\xxpt\@xxpt}
+\def\Huge{\@setsize\Huge{30pt}\xxvpt\@xxvpt}
+% This is texte.tex
+% it defines various texts and their translations
+% called up with documentclass options
+\if@english
+\typeout{In English.}
+\def\abstractname{Abstract.}
+\def\ackname{Acknowledgements.}
+\def\andname{and}
+\def\lastandname{, and}
+\def\appendixname{Appendix}
+\def\chaptername{Chapter}
+\def\claimname{Claim}
+\def\conjecturename{Conjecture}
+\def\contentsname{Table of Contents}
+\def\corollaryname{Corollary}
+\def\definitionname{Definition}
+\def\examplename{Example}
+\def\exercisename{Exercise}
+\def\figurename{Fig.}
+\def\keywordname{{\bf Key words:}}
+\def\indexname{Index}
+\def\lemmaname{Lemma}
+\def\contriblistname{List of Contributors}
+\def\listfigurename{List of Figures}
+\def\listtablename{List of Tables}
+\def\mailname{{\it Correspondence to\/}:}
+\def\noteaddname{Note added in proof}
+\def\notename{Note}
+\def\partname{Part}
+\def\problemname{Problem}
+\def\proofname{Proof}
+\def\propertyname{Property}
+\def\propositionname{Proposition}
+\def\questionname{Question}
+\def\refname{References}
+\def\remarkname{Remark}
+\def\seename{see}
+\def\solutionname{Solution}
+\def\subclassname{{\it Subject Classifications\/}:}
+\def\tablename{Table}
+\def\theoremname{Theorem}
+\fi
+% Names of theorem like environments are already defined
+% but must be translated if another language is chosen
+%
+% French section
+%
+\if@francais
+ \typeout{On parle francais.}%
+ \def\abstractname{R\'esum\'e.}%
+ \def\ackname{Remerciements.}%
+ \def\andname{et}%
+ \def\lastandname{ et}%
+ \def\appendixname{Appendice}
+ \def\chaptername{Chapitre}%
+ \def\claimname{Pr\'etention}%
+ \def\conjecturename{Hypoth\`ese}%
+ \def\contentsname{Table des mati\`eres}%
+ \def\corollaryname{Corrolaire}%
+ \def\definitionname{D\'efinition}%
+ \def\examplename{Exemple}%
+ \def\exercisename{Exercice}%
+ \def\figurename{Fig.}%
+ \def\keywordname{{\bf Mots-cl\'e:}}
+ \def\indexname{Index}
+ \def\lemmaname{Lemme}%
+ \def\contriblistname{Liste des contributeurs}
+ \def\listfigurename{Liste des figures}%
+ \def\listtablename{Liste des tables}%
+ \def\mailname{{\it Correspondence to\/}:}
+ \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}%
+ \def\notename{Remarque}%
+ \def\partname{Partie}%
+ \def\problemname{Probl\`eme}%
+ \def\proofname{\'Epreuve}%
+ \def\propertyname{Caract\'eristique}%
+%\def\propositionname{Proposition}%
+ \def\questionname{Question}%
+ \def\refname{R\'ef\'erences}
+ \def\remarkname{Remarque}%
+ \def\seename{see}
+ \def\solutionname{Solution}%
+ \def\subclassname{{\it Subject Classifications\/}:}
+ \def\tablename{Tableau}%
+ \def\theoremname{Th\'eor\`eme}%
+\fi
+%
+% German section
+\if@deutsch
+ \typeout{Man spricht Deutsch.}
+ \def\abstractname{Zusammenfassung.}%
+ \def\ackname{Danksagung.}%
+ \def\andname{und}%
+ \def\lastandname{ und}%
+ \def\appendixname{Anhang}%
+ \def\chaptername{Kapitel}%
+ \def\claimname{Behauptung}%
+ \def\conjecturename{Hypothese}%
+ \def\contentsname{Inhaltsverzeichnis}%
+ \def\corollaryname{Korollar}%
+%\def\definitionname{Definition}%
+ \def\examplename{Beispiel}%
+ \def\exercisename{\"Ubung}%
+ \def\figurename{Abb.}%
+ \def\keywordname{{\bf Schl\"usselw\"orter:}}
+ \def\indexname{Index}
+%\def\lemmaname{Lemma}%
+ \def\contriblistname{Mitarbeiter}
+ \def\listfigurename{Abbildungsverzeichnis}%
+ \def\listtablename{Tabellenverzeichnis}%
+ \def\mailname{{\it Correspondence to\/}:}
+ \def\noteaddname{Nachtrag}%
+ \def\notename{Anmerkung}%
+ \def\partname{Teil}%
+%\def\problemname{Problem}%
+ \def\proofname{Beweis}%
+ \def\propertyname{Eigenschaft}%
+%\def\propositionname{Proposition}%
+ \def\questionname{Frage}%
+ \def\refname{Literatur} % Meine zufugung (MV)
+ \def\remarkname{Anmerkung}%
+ \def\seename{see}
+ \def\solutionname{L\"osung}%
+ \def\subclassname{{\it Subject Classifications\/}:}
+ \def\tablename{Tab.}%
+%\def\theoremname{Theorem}%
+\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is headjour.tex
+%
+% Titles for journals are redefined
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\setcounter{secnumdepth}{3}          % depth (3) of the highest-level
+                                      % sectioning command
+\def\thesection{\arabic{section}}
+\def\thesubsection{\thesection.\arabic{subsection}}
+\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+%
+%  definition of \chapter
+%  not allowed with this springer style
+\def\chapter#1{\@springererr{Command \string\chapter \space
+                        is not allowed with this Style File}%
+                       {Please remove command \string\chapter.}%
+                       \relax}
+%
+\def\sectcounterend{.}
+\def\sec@hangfrom#1{\setbox\@tempboxa\hbox{#1}%
+      \hangindent \z@\noindent\box\@tempboxa}
+%
+\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
+   \let\@svsec\@empty\else
+   \refstepcounter{#1}\edef\@svsec{\csname the#1%
+   \endcsname\sectcounterend\hskip\betweenumberspace\ignorespaces}\fi
+   \@tempskipa #5\relax
+    \ifdim \@tempskipa>\z@
+      \begingroup #6\relax
+        \sec@hangfrom{\hskip #3\relax\@svsec}{%
+        \raggedright
+        \hyphenpenalty \@M%
+        \interlinepenalty \@M #8\par}%
+      \endgroup
+     \csname #1mark\endcsname{#7}
+     \addcontentsline
+       {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+                    \protect\numberline{\csname the#1\endcsname}\fi
+                  #7}
+% debugging - MV
+%                 \typeout{added a line to TOC:}
+%                 \typeout{toc}
+%                 \typeout{\protect\numberline{\csname the#1\endcsname}}
+%                 \typeout{#1}
+     \else
+     \def\@svsechd{#6\hskip #3\relax
+                \@svsec #8\hskip\aftertext\ignorespaces
+                    \csname #1mark\endcsname
+                    {#7}
+                    \addcontentsline
+                         {toc}{#1}{\ifnum #2>\c@secnumdepth \else
+                           \protect\numberline{\csname the#1\endcsname}\fi
+                     #7}
+%                   \typeout{added another line to TOC}
+                                  }
+     \fi
+   \@xsect{#5}}
+%
+%
+% measures and setting of sections
+%
+\def\section{\@startsection{section}{1}{\z@}%
+    {-21dd plus-4pt minus-4pt}{10.5dd plus 4pt
+     minus4pt}{\normalsize\bf\boldmath}}
+\def\subsection{\@startsection{subsection}{2}{\z@}%
+    {-21dd plus-4pt minus-4pt}{10.5dd plus 4pt
+     minus4pt}{\normalsize\it}}
+\def\subsubsection{\@startsection{subsubsection}{3}{\z@}%
+    {-21dd plus-4pt minus-4pt}{10.5dd plus 4pt
+     minus4pt}{\normalsize}}
+\def\paragraph{\@startsection{subsubsection}{4}{\z@}%
+    {-21dd plus-4pt minus-4pt}{-1pt}{\normalsize\it}}
+%  definition of \subparagraph
+%  not allowed with springer styles
+\def\subsubparagraph#1{\@springererr{Command \string\subparagraph \space
+                        is not allowed with this Style File}%
+                       {Please remove command \string\subparagraph.}%
+                       \relax}
+%  definition of \part
+%  not allowed with springer styles
+\def\part#1{\@springererr{Command \string\part \space
+                        is not allowed with this Style File}%
+                       {Please remove command \string\part.}%
+                       \relax}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is toc.xxx
+%
+% it modifies the appearence of the table of contents
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tableofcontents{
+ \@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn\fi
+%  \Chapter*{\contentsname \@mkboth{{\contentsname}}{{\contentsname}}}
+ \section*{\contentsname \@mkboth{{\contentsname}}{{\contentsname}}}
+ \@starttoc{toc}
+ \if@restonecol\twocolumn\fi
+                    }
+
+\setcounter{tocdepth}{3}
+
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+   \addvspace{2em plus\p@}%  % space above part line
+   \begingroup
+     \parindent \z@
+     \rightskip \z@ plus 5em
+     \hrule\vskip5pt
+     \bf\boldmath        % set line in boldface
+     \leavevmode          % TeX command to enter horizontal mode.
+     #1\par
+     \vskip5pt
+     \hrule
+     \vskip1pt
+     \nobreak             % Never break after part entry
+   \endgroup}
+
+\def\@dotsep{2}
+
+\def\l@chapter#1#2{\addpenalty{-\@highpenalty}
+ \vskip 1.0em plus 1pt \@tempdima \tocchpnum \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip
+ {\bf\boldmath#1}\nobreak
+ \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern
+ \@dotsep mu$}\hfill
+ \nobreak\hbox to\@pnumwidth{\hss #2}\par
+ \penalty\@highpenalty \endgroup}
+
+\newdimen\tocchpnum
+\newdimen\tocsecnum
+\newdimen\tocsectotal
+\newdimen\tocsubsecnum
+\newdimen\tocsubsectotal
+\newdimen\tocsubsubsecnum
+\newdimen\tocsubsubsectotal
+\newdimen\tocparanum
+\newdimen\tocparatotal
+\newdimen\tocsubparanum
+\tocchpnum=20\p@            % chapter {\bf 88.} plus 5.3pt
+\tocsecnum=22.5\p@          % section 88.8. plus 4.722pt
+\tocsubsecnum=30.5\p@       % subsection 88.8.8 plus 4.944pt
+\tocsubsubsecnum=38\p@      % subsubsection 88.8.8.8 plus 4.666pt
+\tocparanum=45\p@           % paragraph 88.8.8.8.8 plus 3.888pt
+\tocsubparanum=53\p@        % subparagraph 88.8.8.8.8.8 plus 4.11pt
+\def\calctocindent{%
+\tocsectotal=\tocchpnum
+\advance\tocsectotal by\tocsecnum
+\tocsubsectotal=\tocsectotal
+\advance\tocsubsectotal by\tocsubsecnum
+\tocsubsubsectotal=\tocsubsectotal
+\advance\tocsubsubsectotal by\tocsubsubsecnum
+\tocparatotal=\tocsubsubsectotal
+\advance\tocparatotal by\tocparanum}
+\calctocindent
+
+\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}}
+\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}}
+\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}}
+\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}}
+\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}}
+
+\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}}
+ \@starttoc{lof}\if@restonecol\twocolumn\fi}
+\def\l@figure{\@dottedtocline{1}{0em}{\tocsecnum}}
+
+\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
+ \fi\chapter*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}}
+ \@starttoc{lot}\if@restonecol\twocolumn\fi}
+\let\l@table\l@figure
+
+%
+%
+% This is kopf2.xxx
+% it does the whole head of a contribution for two-column journals
+% extending the \maketitle command.
+% LaTeX does not provide a command to enter the authors institute
+% addresses. The \institute command is defined here.
+
+\newcounter{inst}
+\newcounter{auth}
+\newdimen\instindent
+\newbox\authrun
+\newtoks\authorrunning
+\newbox\titrun
+\newtoks\titlerunning
+
+\def\journalname#1{\gdef\@journalname{#1}}
+
+\def\headnote#1{\gdef\@headnote{#1}}
+\def\@headnote{}
+
+\def\dedication#1{\gdef\@dedic{#1}}
+\def\@dedic{}
+
+\def\institute#1{\gdef\@institute{#1}}
+
+\def\institutename{\par
+ \begingroup
+ \parindent=0pt
+ \parskip=0pt
+ \setcounter{inst}{1}%
+ \def\and{\par\stepcounter{inst}%
+ \noindent
+ \hbox to\instindent{\hss$^{\theinst}$\enspace}\ignorespaces}%
+ \setbox0=\vbox{\def\thanks##1{}\@institute}  % !!!
+ \ifnum\value{inst}>9\relax\setbox0=\hbox{$^{88}$\enspace}%
+                 \else\setbox0=\hbox{$^{8}$\enspace}\fi
+ \instindent=\wd0\relax
+ \ifnum\value{inst}=1\relax
+ \else
+   \setcounter{inst}{1}%
+   \noindent
+   \hbox to\instindent{\hss$^{\theinst}$\enspace}\ignorespaces
+ \fi
+ \small
+ \ignorespaces
+ \@institute\par
+ \endgroup}
+
+%\def\mail#1{\begingroup
+%\def\protect{\noexpand\protect\noexpand}\xdef\@thanks{%
+%\protect\footnotetext[0]{\kern-\parindent\mailname\
+%\ignorespaces#1}\@thanks}\endgroup\ignorespaces}
+\def\mail#1{\gdef\@mail{#1}}
+\def\@mail{}
+
+\def\@thanks{}
+
+\def\@fnsymbol#1{\ifcase#1\or\star\or{\star\star}\or{\star\star\star}%
+   \or \dagger\or \ddagger\or
+   \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
+   \or \ddagger\ddagger \else\@ctrerr\fi\relax}
+
+\def\inst#1{\unskip$^{#1}$}
+\def\fnmsep{\unskip$^,$}
+
+\def\subtitle#1{\gdef\@subtitle{#1}}
+\def\@subtitle{}
+
+%\def\thesaurus#1{\gdef\@thesaurus{#1}}
+
+\def\ch@ckobl#1#2{\@ifundefined{@#1}
+       {\typeout{Missing \expandafter\string\csname#1\endcsname}%
+        \csname #1\endcsname{#2}}
+       {}}
+
+\newif\if@normhead \@normheadtrue
+\def\hugehead{\@normheadfalse
+\onecolumn
+\let\thanks=\footnote
+\long\def\@makefntext##1{\parindent 15pt
+     \columnwidth\textwidth\advance\columnwidth -\columnsep
+     \divide\columnwidth\tw@\hsize\columnwidth \linewidth\columnwidth
+     \noindent\hbox to15pt{\hss$\m@th^{\@thefnmark}$ }
+     ##1}%
+}
+
+\def\maketitle{\par
+%\ch@ckobl{thesaurus}{missing; you have not inserted them}
+%
+% Added for Journal of Geodesy (Martin Vermeer, June 1997)
+%
+\if@JG\journalname{Journal of Geodesy}\fi
+%
+%
+\ch@ckobl{journalname}{Noname}
+\ch@ckobl{date}{the date of receipt and acceptance should be inserted
+later}
+\ch@ckobl{title}{A title should be given}
+\ch@ckobl{author}{Name(s) and initial(s) of author(s) should be given}
+\ch@ckobl{institute}{Address(es) of author(s) should be given}
+ \begingroup
+ \def\thefootnote{\fnsymbol{footnote}}
+ \def\lastand{\ifnum\value{inst}=2\relax
+                 \unskip{} \andname\
+              \else
+                 \unskip, \andname\
+              \fi}%
+ \def\and{\stepcounter{auth}\relax
+          \ifnum\value{auth}=\value{inst}%
+             \lastand
+          \else
+             \unskip,
+          \fi}%
+ \thispagestyle{empty}
+ \if@twocolumn
+   \twocolumn[\@maketitle]
+ \else
+   \newpage \@maketitle
+ \fi
+ \global\@topnum\z@
+ \if@normhead
+    \@thanks
+ \else
+    \if@draft
+      \onecolumn[\vspace{\@tempdima}]  % !!!
+    \else
+      \twocolumn[\vspace{\@tempdima}] 
+    \fi
+    \addtocounter{page}{-1}
+    \if!\the\authorrunning!
+       \authorrunning{ }%
+    \fi
+ \fi
+ \if!\@mail!\else
+    \footnotetext[0]{\kern-\parindent\mailname\
+    \ignorespaces\@mail}%
+ \fi
+ \def\\{ }\def\inst##1{\unskip}\def\thanks##1{\unskip}%
+ \def\fnmsep{\unskip}%
+ \if!\the\authorrunning!
+   \value{inst}=\value{auth}%
+   \setcounter{auth}{1}%
+ \else
+   \edef\@author{\the\authorrunning}%
+ \fi
+ \global\setbox\authrun=\hbox{\small\rm\unboldmath\@author\unskip}%
+ \instindent=\textwidth
+ \advance\instindent by-\headlineindent
+ \ifdim\wd\authrun>\instindent
+    \typeout{Names of authors too long for running head. Please supply}%
+    \typeout{a shorter form with \string\authorrunning\space prior to
+             \string\maketitle}%
+    \global\setbox\authrun=\hbox{\small\rm
+    Authors suppressed due to excessive length}%
+ \fi
+ \xdef\@author{\copy\authrun}%
+ \if!\the\titlerunning!\else
+   \edef\@title{\the\titlerunning}%
+ \fi
+ \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}%
+ \ifdim\wd\titrun>\instindent
+    \typeout{Title too long for running head. Please supply}%
+    \typeout{a shorter form with \string\titlerunning\space prior to
+             \string\maketitle}%
+    \global\setbox\titrun=\hbox{\small\rm
+    Title suppressed due to excessive length}%
+ \fi
+ \xdef\@title{\copy\titrun}%
+ \markboth{\@author}{\@title}
+ \endgroup
+ \setcounter{footnote}{0}
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\gdef\@subtitle{}%
+ \let\thanks\relax}
+
+\def\makeheadbox{{%
+\hbox to0pt{\vbox{\baselineskip=10dd\hrule\hbox
+to\hsize{\vrule\kern3pt\vbox{\kern3pt
+\hbox{\bf\@journalname\ Manuscript-Nr.}
+\hbox{(will be inserted by hand later)}
+\kern3pt}\hfil\kern3pt\vrule}\hrule}%
+\hss}}}
+\def\@maketitle{\newpage
+ \rm
+ \vbox to0pt{\vskip-40pt
+ \nointerlineskip
+ \makeheadbox
+ \vss}\nointerlineskip
+ \if@normhead
+    \setbox\authrun=\vbox\bgroup
+ \fi
+ {\Large \bf\boldmath
+  \pretolerance=10000
+  \rightskip=0pt plus 4cm
+ \if!\@headnote!\else
+   \noindent
+   {\em\ignorespaces\@headnote\par}\vskip 3.5mm
+ \fi
+  \noindent\ignorespaces
+  \@title \par}\vskip 11.24pt\relax
+ \bf
+ \if!\@subtitle!\else
+   {\large\bf\boldmath
+   \pretolerance=10000
+   \rightskip=0pt plus 3cm
+   \noindent\ignorespaces\@subtitle \par}\vskip 11.24pt
+ \fi
+ \lineskip .5em
+ \setbox0=\vbox{\setcounter{auth}{1}\def\and{\stepcounter{auth} }%
+                \hfuzz=2\textwidth\def\thanks##1{}\@author}%
+ \value{inst}=\value{auth}%
+ \setcounter{auth}{1}%
+ \rightskip=0pt plus 2cm
+ \noindent\ignorespaces\@author\vskip7.23pt
+ \rightskip=0pt\relax
+ \small\rm
+ \institutename
+ \vskip 12.85pt \noindent\@date
+ \if!\@dedic!\else
+    \par
+    \normalsize\it
+    \addvspace\baselineskip
+    \noindent\@dedic
+ \fi
+ \if@normhead
+    \egroup % end of header box
+    \@tempdima=\headerboxheight
+    \advance\@tempdima by-\ht\authrun
+    \advance\@tempdima by-\pagetotal
+    \ifdim\@tempdima>0pt
+       \vskip\@tempdima
+    \fi
+    \unvbox\authrun
+    \global\@minipagetrue
+    \global\everypar{\global\@minipagefalse\global\everypar{}}
+ \else
+    \typeout{\the\c@auth\space author names and}
+    \typeout{\the\c@inst\space institutes processed}
+    \global\@tempdima=\pagetotal
+    \global\advance\@tempdima by22.47pt
+ \fi
+ \vskip22.47pt
+}
+
+% Define `abstract' environment
+\def\abstract{\topsep=0pt\partopsep=0pt\parsep=0pt\itemsep=0pt\relax
+\trivlist\item[\hskip\labelsep
+{\bf\abstractname}]\if!\abstractname!\hskip-\labelsep\fi}
+\let\endabstract=\endtrivlist
+
+% Define `transsummary' environment
+\def\transsummary{\trivlist\item[\hskip\labelsep
+{\bf Summary.}]}
+\let\endtranssummary=\endtrivlist
+
+% Define \transtitle, (\trans-)\keywords, \subclass, and \PACS
+\def\transtitle#1{\par\addvspace\baselineskip\noindent
+{\bf\ignorespaces#1}\par}
+\def\transkey#1{\par\addvspace\baselineskip\noindent
+{\bf Key words: }\ignorespaces#1\par}
+\def\keywords{\par\addvspace\baselineskip\noindent\keywordname\
+\ignorespaces}
+\def\subclass{\par\addvspace\baselineskip\noindent\subclassname\
+\ignorespaces}
+\def\PACS{\par\addvspace\baselineskip\noindent{\bf PACS: }\ignorespaces}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is runnhead.j
+%
+% It redefines the headings of a text. There are two
+% pagestyles possible: "\pagestyle{headings}" and
+% "\pagestyle{myheadings}". The later is the default.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\if@twoside
+\def\ps@headings{\let\@mkboth\markboth
+   \def\@oddfoot{}\def\@evenfoot{}
+   \def\@evenhead{\rm\thepage\hskip\headlineindent\leftmark\hfil}
+   \def\@oddhead{\hfil\rightmark\hskip\headlineindent\rm\thepage}
+   \let\chaptermark\@gobble
+   \def\sectionmark##1{\markright{{\ifnum\c@secnumdepth>\z@
+      \thesection.\hskip\betweenumberspace\fi ##1}}}}
+\else \def\ps@headings{\let\@mkboth\markboth
+   \def\@oddfoot{}\def\@evenfoot{}
+   \def\@oddhead{\hfil\rightmark\hskip\headlineindent\rm\thepage}
+   \let\chaptermark\@gobble
+   \def\sectionmark##1{\markright{{\ifnum\c@secnumdepth>\z@
+      \thesection.\hskip\betweenumberspace\fi ##1}}}}
+\fi
+\def\ps@myheadings{\let\@mkboth\@gobbletwo
+   \def\@oddfoot{}\def\@evenfoot{}
+   \def\@evenhead{\small\rm\thepage\hfil\leftmark}
+   \def\@oddhead{\small\rm\rightmark\hfil\thepage}
+   \def\chaptermark##1{}
+   \def\sectionmark##1{}%
+   \def\subsectionmark##1{}}
+\ps@myheadings
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is theorem.xxx
+%
+% It redefines the "\newtheorem" command.
+%
+% Usage now:
+%
+%     \newtheorem{env_nam}{caption}[within]{cap_font}{body_font}
+% or  \newtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font}
+% or  \newtheorem*{env_nam}{caption}{cap_font}{body_font}
+%
+% New is "cap_font" and "body_font". It stands for
+% fontdefinition of the caption and the text itself.
+%
+% "\newtheorem*" gives a theorem without number.
+%
+% A defined newthoerem environment is used as described
+% by Lamport.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\@thmcounterend{.}
+
+\def\newtheorem{\@ifstar{\@sthm}{\@Sthm}}
+
+% definition of \newtheorem with number
+
+\def\@Sthm#1{\@ifnextchar[{\@othm{#1}}{\@nthm{#1}}}
+
+\def\@xnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname
+   {\@definecounter{#1}\@addtoreset{#1}{#3}%
+   \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand
+     \csname the#3\endcsname \@thmcountersep \@thmcounter{#1}}%
+   \expandafter\xdef\csname #1name\endcsname{#2}%
+   \global\@namedef{#1}{\@thm{#1}{\csname #1name\endcsname}{#4}{#5}}%
+                              \global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
+   {\@definecounter{#1}%
+   \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+   \expandafter\xdef\csname #1name\endcsname{#2}%
+   \global\@namedef{#1}{\@thm{#1}{\csname #1name\endcsname}{#3}{#4}}%
+                               \global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@othm#1[#2]#3#4#5{%
+  \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}%
+  {\expandafter\@ifdefinable\csname #1\endcsname
+  {\global\@namedef{the#1}{\@nameuse{the#2}}%
+  \expandafter\xdef\csname #1name\endcsname{#3}%
+  \global\@namedef{#1}{\@thm{#2}{\csname #1name\endcsname}{#4}{#5}}%
+  \global\@namedef{end#1}{\@endtheorem}}}}
+
+\def\@thm#1#2#3#4{\refstepcounter
+    {#1}\@ifnextchar[{\@ythm{#1}{#2}{#3}{#4}}{\@xthm{#1}{#2}{#3}{#4}}}
+
+\def\@xthm#1#2#3#4{\@begintheorem{#2}{\csname the#1\endcsname}{#3}{#4}%
+                    \ignorespaces}
+
+\def\@ythm#1#2#3#4[#5]{\@opargbegintheorem{#2}{\csname
+       the#1\endcsname}{#5}{#3}{#4}\ignorespaces}
+
+\def\@begintheorem#1#2#3#4{\trivlist
+                 \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4}
+
+\def\@opargbegintheorem#1#2#3#4#5{\trivlist
+      \item[\hskip\labelsep{#4#1\ #2\ (#3)\@thmcounterend}]#5}
+
+% definition of \newtheorem* without number
+
+\def\@sthm#1#2{\@Ynthm{#1}{#2}}
+
+\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname
+   {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}%
+    \expandafter\xdef\csname #1name\endcsname{#2}%
+    \global\@namedef{end#1}{\@endtheorem}}}
+
+\def\@Thm#1#2#3{\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}}
+
+\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces}
+
+\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1}
+       {#4}{#2}{#3}\ignorespaces}
+
+\def\@Begintheorem#1#2#3{#3\trivlist
+                           \item[\hskip\labelsep{#2#1\@thmcounterend}]}
+
+\def\@Opargbegintheorem#1#2#3#4{#4\trivlist
+      \item[\hskip\labelsep{#3#1\ (#2)\@thmcounterend}]}
+
+% definition of divers theorem environments
+
+\newtheorem*{claim}{Claim}{\it}{\rm}
+\newtheorem{conjecture}{Conjecture}{\it}{\rm}
+\newtheorem{corollary}{Corollary}{\bf}{\it}
+\newtheorem{definition}{Definition}{\bf}{\it}
+\newtheorem{example}{Example}{\it}{\rm}
+\newtheorem{exercise}{Exercise}{\bf}{\rm}
+\newtheorem{lemma}{Lemma}{\bf}{\it}
+\newtheorem{note}{Note}{\it}{\rm}
+\newtheorem{problem}{Problem}{\bf}{\rm}
+\newtheorem{property}{Property}{\it}{\rm}
+\newtheorem{proposition}{Proposition}{\bf}{\it}
+\newtheorem{question}{Question}{\it}{\rm}
+\newtheorem{solution}{Solution}{\bf}{\rm}
+\newtheorem{theorem}{Theorem}{\bf}{\it}
+\newtheorem*{proof}{Proof}{\it}{\rm}
+\newtheorem{remark}{Remark}{\it}{\rm}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is figure.neu
+%
+% It redefines the captions for "figure" and "table"
+% environments.
+%
+% There are three new kind of captions: "\firstcaption"
+% and "\secondcaption" for captions set side by side.
+% Usage for those two commands: like "\caption".
+%
+% "\sidecaption" with two parms: #1 width of picture
+%                                #2 height of picture
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
+  ext@#1\endcsname}{#1}{\protect\numberline{\csname
+  the#1\endcsname}{\ignorespaces #2}}\begingroup
+    \@parboxrestore
+    \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+  \endgroup}
+
+\def\firstcaption{\refstepcounter\@captype\@dblarg%
+            {\@firstcaption\@captype}}
+
+\def\secondcaption{\refstepcounter\@captype\@dblarg%
+            {\@secondcaption\@captype}}
+
+\long\def\@firstcaption#1[#2]#3{\addcontentsline{\csname
+  ext@#1\endcsname}{#1}{\protect\numberline{\csname
+  the#1\endcsname}{\ignorespaces #2}}\begingroup
+    \@parboxrestore
+    \vskip3pt
+    \@maketwocaptions{\csname fnum@#1\endcsname}{\ignorespaces #3}%
+    \ignorespaces\hspace{.073\textwidth}\hfil%
+  \endgroup}
+
+\long\def\@secondcaption#1[#2]#3{\addcontentsline{\csname
+  ext@#1\endcsname}{#1}{\protect\numberline{\csname
+  the#1\endcsname}{\ignorespaces #2}}\begingroup
+    \@parboxrestore
+    \@maketwocaptions{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+  \endgroup}
+
+\long\def\@maketwocaptions#1#2{%
+   \parbox[t]{.46\textwidth}{{\bf #1.} #2}}
+
+\newdimen\figgap\figgap=18pt
+
+\def\sidecaption#1\caption{%
+\setbox\@tempboxa=\hbox{#1\unskip}%
+\if@twocolumn
+ \ifdim\hsize<\textwidth\else
+   \ifdim\wd\@tempboxa<\columnwidth
+      \typeout{Double column float fits into single column -
+            ^^Jyou'd better switch the environment. }%
+   \fi
+ \fi
+\fi
+\@tempdima=\hsize
+\advance\@tempdima by-\figgap
+\advance\@tempdima by-\wd\@tempboxa
+\ifdim\@tempdima<3cm
+    \typeout{\string\sidecaption: No sufficient room for the legend;
+             using normal \string\caption. }%
+   \unhbox\@tempboxa
+   \let\@capcommand=\@caption
+\else
+   \let\@capcommand=\@sidecaption
+   \leavevmode
+   \unhbox\@tempboxa
+   \hfill
+\fi
+\refstepcounter\@captype
+\@dblarg{\@capcommand\@captype}}
+
+\long\def\@sidecaption#1[#2]#3{\addcontentsline{\csname
+  ext@#1\endcsname}{#1}{\protect\numberline{\csname
+  the#1\endcsname}{\ignorespaces #2}}\begingroup
+    \@parboxrestore
+    \@makesidecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+  \endgroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\fig@type{figure}
+
+\def\leftlegendglue{\hfil}
+
+\long\def\@makecaption#1#2{%
+ \ifx\@captype\fig@type
+   \vskip 3pt
+   \setbox\@tempboxa\hbox{{\bf #1.} #2}%
+   \ifdim \wd\@tempboxa >\hsize
+     {\bf #1.} #2\par
+   \else
+     \hbox to\hsize{\leftlegendglue\unhbox\@tempboxa\hfil}%
+   \fi
+ \else
+   {\bf #1.} #2\par
+   \vskip5.5pt
+ \fi}
+
+\long\def\@makesidecaption#1#2{%
+   \parbox[b]{\@tempdima}{{\bf #1.} #2}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is bibjour.xxx
+%
+% It redefines the "bibliography" environment.
+%
+% Usage: \begin{thebibliography}[label]{title}
+%
+%        where "title" is the text of the title which will be
+%        typeset, e.g. "References" or "Bibliography". It must
+%        be given.
+%
+%        together with "bibay" style option (e.g.
+%          \documentstyle[bibay]{article}):
+%
+%        \bibitem{label}{key}{referenced text}
+%             for author-year-citation
+%
+%        without style option (as described by Lamport):
+%
+%        \bibitem[label]{key}
+%        \bibitem{key}
+%
+%        \cite{key}  (as described by Lamport)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% definition of \begin{thebibliography}
+
+\def\thebibliography{\@ifnextchar[{\@lThebibliography}%
+                                  {\@Thebibliography}}
+
+\def\@lThebibliography[#1]#2{\section*{#2\@mkboth{#2}{#2}}%
+   \small\rm
+   \list{\arabic{enumiv}.}{\settowidth\labelwidth{[#1]}
+      \leftmargin\labelwidth
+      \advance\leftmargin\labelsep
+      \usecounter{enumiv}%
+      \let\p@enumiv\@empty
+      \def\theenumiv{\arabic{enumiv}}}%
+   \def\newblock{\hskip .11em plus .33em minus .07em}
+   \sloppy\clubpenalty4000\widowpenalty4000
+   \sfcode`\.=1000\relax}
+
+\def\@Thebibliography#1{\section*{#1\@mkboth{#1}{#1}}
+   \small\rm
+   \list{\arabic{enumiv}.}%
+   {\settowidth\labelwidth{\hspace\parindent\hskip-\labelsep}%
+      \usecounter{enumiv}%
+      \let\p@enumiv\@empty
+      \def\theenumiv{\arabic{enumiv}}%
+      \leftmargin\labelwidth
+      \advance\leftmargin\labelsep}
+   \def\newblock{\hskip .11em plus .33em minus .07em}
+   \sloppy\clubpenalty4000\widowpenalty4000
+   \sfcode`\.=1000\relax}
+
+\let\endthebibliography=\endlist
+
+% definition of \bibitem and \cite
+%
+% Put in the if-else-fi to choose or not author-year type
+% reference list (e.g. for Journal of Geodesy)
+% Martin Vermeer, June 1997
+%
+\if@bibay
+    \typeout{Author, year style bibliography chosen}
+    \def\bibitem{\@bibitem}%
+    \def\@bibitem#1#2#3{\ifx!#1\item[]\hskip-\labelwidth
+        \hskip-\labelsep\else\item[\@biblabel{#1}]\fi#3
+        \if@filesw
+           {\def\protect##1{\string ##1\space}\immediate
+           \write\@auxout{\string\bibcite{#2}{#3}}}%
+        \fi\ignorespaces}%
+%
+    \def\cite{\@ifnextchar[{\@tempswatrue\@citex}%
+                           {\@tempswafalse\@citex[]}}%
+%
+    \def\@citex[#1]#2{%
+        \if@filesw
+           \immediate\write\@auxout{\string\citation{#2}}%
+%
+%          \typeout{\string\citation{#2}}
+%
+        \fi
+        \def\@citea{}%
+        \@cite{\@for\@citeb:=#2\do
+           {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+           {b@\@citeb}{{\bf ?}\@warning
+           {Citation `\@citeb' on page \thepage \space undefined}}%
+           \hbox{\csname b@\@citeb\endcsname}}}%
+        {#1}}%
+%
+    \def\@cite#1#2{{#1\if@tempswa , #2\fi}}%
+    \def\@biblabel#1{#1\hfill}
+
+% }
+\else
+%
+\@bibayfalse
+\def\bibitem{\@ifnextchar[{\@lbibitem}{\@bibitem}}
+\def\@lbibitem[#1]#2{\itemindent\z@
+    \item[\@biblabel{#1}]\if@filesw
+       {\def\protect##1{\string ##1\space}\immediate
+       \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+%
+\def\@bibitem#1{\item\if@filesw \immediate\write\@auxout
+       {\string\bibcite{#1}{\the\c@enumiv}}\fi\ignorespaces}
+%
+\def\cite{\@ifnextchar[{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+%
+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi
+    \def\@citea{}%
+    \@cite{\@for\@citeb:=#2\do
+       {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined
+       {b@\@citeb}{{\bf ?}\@warning
+       {Citation `\@citeb' on page \thepage \space undefined}}%
+       \hbox{\csname b@\@citeb\endcsname}}}%
+    {#1}}
+\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]}
+\def\@biblabel#1{[#1]\hfill}
+\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is biograph.xxx
+%
+% Usage: \begin{biography}{Author's name}
+%        Text of biography
+%        \end{biography}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\biography#1{%
+\begingroup
+\endgraf
+\skip0=0pt plus2cm
+\advance\skip0 by2\bigskipamount\relax
+\vskip\skip0
+\small
+\setbox0=\vbox\bgroup\def\par{\hfil\break}%
+               \sloppy
+               \noindent
+               \hangindent=113pt
+               \hangafter=-16\relax
+               \smash{\raise 6.5pt
+               \llap{\vbox to0pt{\hrule
+                                 \hbox to3.6cm{\vrule height5cm\hfil
+                                       \vrule height5cm}
+                                 \hrule\vss}\kern11pt}}%
+               \vrule height\topskip width0pt
+               \if!#1!\else{\sc\ignorespaces#1\/} \fi
+               \ignorespaces}
+%
+\def\endbiography{\egroup
+\dimen0=\ht0\advance\dimen0 by\dp0
+\ifdim\dimen0<5cm
+   \vtop to5cm{\box0\vss}
+\else
+   {\splittopskip=0pt
+   \splitmaxdepth=\maxdepth
+   \vbadness=10000
+   \setbox1=\vsplit0 to 139.153dd
+   \vtop{\box1}%
+   \vskip-\prevdepth
+   \unvbox0
+   \endgraf}
+\fi
+\endgroup}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is fonotej.xxx
+%
+% It redefines how footnotes will be typeset.
+%
+% Usage like described by Lamport.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\footnoterulewidth
+  \footnoterulewidth=4cc
+
+\def\footnoterule{\kern-3\p@
+ \hrule width\footnoterulewidth
+ \kern 2.6\p@}
+
+\long\def\@makefntext#1{\parindent 15pt\noindent
+            \hbox to15pt{\hss$\m@th^{\@thefnmark}$ }#1}
+%
+%\long\def\@makefntext#1{\@setpar{\@@par\@tempdima \hsize
+%         \advance\@tempdima-15pt\parshape \@ne 15pt \@tempdima}\par
+%         \parindent 15pt\noindent \hbox to \z@{%
+%         \hss\hss$^{\@thefnmark}$ }#1}
+% This is footinfo.tex
+% it provides an informatory line on every page
+%
+\def\SpringerMacroPackageNameA{\springerstylefile}
+% \thetime, \thedate and \timstamp are macros to include
+% time, date (or both) of the TeX run in the document
+\def\maketimestamp{\count255=\time
+\divide\count255 by 60\relax
+\edef\thetime{\the\count255:}%
+\multiply\count255 by-60\relax
+\advance\count255 by\time
+\edef\thetime{\thetime\ifnum\count255<10 0\fi\the\count255}
+\edef\thedate{\number\day-\ifcase\month\or Jan\or Feb\or Mar\or
+             Apr\or May\or Jun\or Jul\or Aug\or Sep\or Oct\or
+             Nov\or Dec\fi-\number\year}
+\def\timstamp{\hbox to\hsize{\tt\hfil\thedate\hfil\thetime\hfil}}}
+\maketimestamp
+%
+% \footinfo generates a info footline on every page containing
+% pagenumber, jobname, macroname, and timestamp
+% \def\ds@footinfo{
+\if@footinfo 
+   \typeout{You ordered a foot-info line. }
+   \maketimestamp
+   \def\@oddfoot{\footnotesize\tt Page: \thepage\hfil job: \jobname\hfil
+                 macro: \SpringerMacroPackageNameA\hfil
+                 date/time: \thedate/\thetime}%
+   \let\@evenfoot=\@oddfoot
+\def\footinfo{\maketimestamp
+   \ds@footinfo
+   \typeout{You ordered a foot-info line (2). }}
+\else
+\def\nofootinfo{%
+   \def\@oddfoot{}\def\@evenfoot{}%
+   \typeout{Foot-info has been disabled. }}
+\fi
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is environ.xxx
+%
+% It defines the environment for acknowledgements.
+%                            and noteadd
+%
+% Usage e.g.: \begin{acknowledgement}
+%                Text
+%             \end{acknowledgement}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define `abstract' environment
+\def\acknowledgement{\par\addvspace{17pt}\small\rm
+\trivlist\item[\hskip\labelsep
+{\it\ackname}]}
+\def\endacknowledgement{\endtrivlist\addvspace{6pt}}
+% Define `noteadd' environment
+\def\noteadd{\par\addvspace{17pt}\small\rm
+\trivlist\item[\hskip\labelsep
+{\it\noteaddname}]}
+\def\endnoteadd{\endtrivlist\addvspace{6pt}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is item.xxx
+%
+% It redefines the kind of label for "itemize", "enumerate"
+% and "description" environment. The last is extended by
+% an optional parameter. Its length is used for overall
+% indentation.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% labels of enumerate
+
+\def\labelenumi{\theenumi.}
+\def\labelenumii{\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+
+% labels of itemize
+
+\def\labelitemi{\bf --}
+\def\labelitemii{\bf --}
+\def\labelitemiii{$\bullet$}
+\def\labelitemiv{$\cdot$}
+
+% labels of description
+\def\descriptionlabel#1{\hspace\labelsep #1\hfil}
+
+% make indentations changeable
+
+\def\setitemindent#1{\settowidth{\labelwidth}{#1}%
+        \leftmargini\labelwidth
+        \advance\leftmargini\labelsep
+   \def\@listi{\leftmargin\leftmargini
+        \labelwidth\leftmargini\advance\labelwidth by -\labelsep
+        \parsep=\parskip
+        \topsep=\medskipamount
+        \itemsep=\parskip \advance\itemsep by -\parsep}}
+\def\setitemitemindent#1{\settowidth{\labelwidth}{#1}%
+        \leftmarginii\labelwidth
+        \advance\leftmarginii\labelsep
+\def\@listii{\leftmargin\leftmarginii
+        \labelwidth\leftmarginii\advance\labelwidth by -\labelsep
+        \parsep=\parskip
+        \topsep=\z@
+        \itemsep=\parskip \advance\itemsep by -\parsep}}
+%
+% adjusted environment "description"
+% if an optional parameter (at the first two levels of lists)
+% is present, its width is considered to be the widest mark
+% throughout the current list.
+\def\description{\@ifnextchar[{\@describe}{\list{}{\labelwidth\z@
+          \itemindent-\leftmargin \let\makelabel\descriptionlabel}}}
+%
+\def\describelabel#1{#1\hfil}
+\def\@describe[#1]{\relax\ifnum\@listdepth=0
+\setitemindent{#1}\else\ifnum\@listdepth=1
+\setitemitemindent{#1}\fi\fi
+\list{--}{\let\makelabel\describelabel}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is typeset.xxx
+%
+% It defines last text of every article.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\def\typeset{\small\noindent This article was authored in \LyX\ and typeset
+           by \LaTeX, using the \LaTeXe{}\ class file {\it\springerstylefile\/}
+             from Springer-Verlag.\par}
+
+\def\enddocument{\par\vspace{2\bigskipamount}\typeset
+  \@checkend{document}\clearpage\begingroup
+  \if@filesw \immediate\closeout\@mainaux
+  \def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
+ \def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
+  \if@tempswa \@@warning{Label(s) may have changed.  Rerun to get
+  cross-references right}\fi\fi\endgroup\deadcycles\z@\@@end}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is numberj.xxx
+%
+% It redefines the kind of numeration for figures,
+% tables and equations like they should appear in
+% journals.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\let\ds@numart=\relax
+%
+\def\thefigure{\@arabic\c@figure}
+\def\thetable{\@arabic\c@table}
+\def\theequation{\arabic{equation}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%             This is mods.lj2
+%
+% It changes various sizes and settings from one
+% to two column journals
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\if@twocolumn\twocolumn\else\onecolumn\fi
+\let\sectcounterend\relax
+\let\leftlegendglue\relax
+\def\endabstract{\endtrivlist}
+\def\fps@figure{tbp}
+\def\fps@table{tbp}
+\headerboxheight=180.83146pt % 20 9.5dd-lines - 2\baselineskip
+%%
+%% END added: (MV)
+%%
+\endinput
+.
+
diff --git a/lib/tex/hollywood.cls b/lib/tex/hollywood.cls
new file mode 100644 (file)
index 0000000..a907349
--- /dev/null
@@ -0,0 +1,217 @@
+%% Author: Garst R. Reese  reese@isn.net
+%% This is file `hollywood.cls', which provides the current
+%% preferred format for submission of "spec" scripts
+%% It is a pretty dull and uninteresting format, but it sells
+%% Derived from report.cls. There is probably still a lot of stuff
+%% that could be deleted. 
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{hollywood} [1998/10/27 v1.0 uses hollywood.layout]
+\renewcommand{\ref}[1]{#1}
+\newcommand\@ptsize{}
+\newif\if@restonecol
+\newif\if@titlepage
+\@titlepagetrue
+\newif\if@openright
+\DeclareOption{letterpaper}
+   {\setlength\paperheight {11in}%
+    \setlength\paperwidth  {8.5in}}
+\DeclareOption{12pt}{\renewcommand\@ptsize{0}}
+\DeclareOption{12pt}{\renewcommand\@ptsize{1}}
+\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
+\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
+\DeclareOption{twoside}{\@twosidetrue  \@mparswitchtrue}
+\DeclareOption{draft}{\setlength\overfullrule{5pt}}
+\DeclareOption{final}{\setlength\overfullrule{0pt}}
+\DeclareOption{titlepage}{\@titlepagetrue}
+\DeclareOption{notitlepage}{\@titlepagefalse}
+\DeclareOption{openright}{\@openrighttrue}
+\DeclareOption{openany}{\@openrightfalse}
+\DeclareOption{onecolumn}{\@twocolumnfalse}
+\ExecuteOptions{letterpaper,12pt,oneside,onecolumn,final,openany}
+\ProcessOptions
+\input{size1\@ptsize.clo}
+\setlength\lineskip{1\p@}
+\setlength\normallineskip{1\p@}
+\renewcommand\baselinestretch{}
+\setlength\parskip{0\p@ \@plus \p@}
+\@lowpenalty   51
+\@medpenalty  151
+\@highpenalty 301
+\setcounter{topnumber}{2}
+% \renewcommand{\headrulewidth}{0pt}
+\renewcommand\topfraction{.7}
+\setcounter{bottomnumber}{1}
+\renewcommand\bottomfraction{.3}
+\setcounter{totalnumber}{3}
+\renewcommand\textfraction{.2}
+\renewcommand\floatpagefraction{.5}
+\setcounter{dbltopnumber}{2}
+\renewcommand\dbltopfraction{.7}
+\renewcommand\dblfloatpagefraction{.5}
+  \def\ps@headings{%
+    \let\@oddfoot\@empty
+    \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+    \let\@mkboth\markboth
+}
+\def\ps@myheadings{%
+    \let\@oddfoot\@empty\let\@evenfoot\@empty
+    \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+    \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+    \let\@mkboth\@gobbletwo
+    }
+  \if@titlepage
+\newcommand{\address}{\renewcommand{\@address}}
+\newcommand{\@address}{}
+  \newcommand\maketitle{\begin{titlepage}%
+  \let\footnotesize\small
+  \let\footnoterule\relax
+  \let \footnote \thanks
+  \null\vfil
+  \vskip 60\p@
+  \begin{center}%
+    { \underline{\@title} \par}%
+    \vskip 3em%
+    {\lineskip .75em%
+      \begin{tabular}[t]{c}%
+        \@author
+      \end{tabular}\par}%
+      \vskip 1.5em%
+  \end{center}\par
+\raggedleft
+\vfill
+\begin{tabular}{l}%
+\ignorespaces
+\@address
+\end{tabular}\par%
+  \@thanks
+%  \vfil\null
+  \end{titlepage}%
+  \setcounter{footnote}{0}%
+  \global\let\thanks\relax
+  \global\let\maketitle\relax
+% \global\let\@address\@empty
+  \global\let\@thanks\@empty
+  \global\let\@author\@empty
+  \global\let\@date\@empty
+  \global\let\@title\@empty
+% \global\let\address\relax
+  \global\let\title\relax
+  \global\let\author\relax
+  \global\let\date\relax
+  \global\let\and\relax
+}
+\fi
+  \setlength\leftmargini  {2.5em}
+\leftmargin  \leftmargini
+\setlength  \labelsep  {.5em}
+\setlength  \labelwidth{\leftmargini}
+\addtolength\labelwidth{-\labelsep}
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty   -\@lowpenalty
+\@itempenalty     -\@lowpenalty
+\renewcommand\theenumi{\@arabic\c@enumi}
+\newcommand\labelenumi{\theenumi.}
+\renewcommand\p@enumii{\theenumi}
+\newcommand\labelitemi{\textbullet}
+\newenvironment{titlepage}
+    {%
+      \if@twocolumn
+        \@restonecoltrue\onecolumn
+      \else
+        \@restonecolfalse\newpage
+      \fi
+      \thispagestyle{empty}%
+      \setcounter{page}\@ne
+    }%
+    {\if@restonecol\twocolumn \else \newpage \fi
+     \if@twoside\else
+        \setcounter{page}\@ne
+     \fi
+    }
+\setlength\tabbingsep{\labelsep}
+\skip\@mpfootins = \skip\footins
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\sl}{\normalfont\ttfamily}{\mathtt}
+\newcommand\@pnumwidth{1.55em}
+\newcommand\@tocrmarg{2.55em}
+\newcommand\@dotsep{4.5}
+\setcounter{tocdepth}{2}
+\setlength\columnsep{10\p@}
+\setlength\columnseprule{0\p@}
+\pagestyle{plain}
+\pagenumbering{arabic}
+\if@twoside
+\else
+  \raggedbottom
+\fi
+\if@twocolumn
+  \twocolumn
+  \sloppy
+  \flushbottom
+\else
+  \onecolumn
+\fi
+\newenvironment{fadein}%
+{\begin{list}{}{%
+\leftmargin \rightmargin}
+\item[]FADE IN:\ignorespaces}
+{\unskip \end{list}}
+
+\newenvironment{interior}%
+{\begin{list}{}{%
+\leftmargin \rightmargin}
+\item[]INT. \ignorespaces}
+{\unskip \end{list}}
+
+\newenvironment{exterior}%
+{\begin{list}{}{%
+\leftmargin \rightmargin}
+\item[]EXT. \ignorespaces}
+{\unskip \end{list}}
+
+\newenvironment{dialogue}%
+{\raggedright
+\begin{list}{}{%
+       \setlength{\leftmargin}{1.2in}
+       \setlength{\rightmargin}{1.2in}
+\setlength{\parsep}{0mm}
+\setlength{\topsep}{0mm}}
+\item[] \ignorespaces}
+{\unskip \end{list}}
+
+\newenvironment{narrative}%
+{\raggedright
+\begin{list}{}{%
+\leftmargin \rightmargin
+\setlength{\parsep}{2mm}
+\setlength{\topsep}{2mm}}
+\item[] \ignorespaces}
+{\unskip \end{list}}
+
+\newenvironment{speaker}%
+{\begin{list}{}{%
+       \setlength{\leftmargin}{2.5in}
+\setlength{\partopsep}{4mm}
+\setlength{\parsep}{0mm}
+\setlength{\topsep}{0mm}}
+\item[] \ignorespaces}
+{\unskip \end{list}}
+
+\newenvironment{parenthetical}%
+{\begin{list}{}{%
+       \setlength{\leftmargin}{2in}
+\setlength{\parsep}{0mm}
+\setlength{\topsep}{0mm}}
+       \item[](\ignorespaces}
+{\unskip)\end{list}}
+
+\newenvironment{fadeout}%
+{\begin{list}{}{%
+\leftmargin \rightmargin}
+\item[]FADE OUT: \ignorespaces}
+{\unskip \end{list}}
+
+
+\endinput
+%%
+%% End of file `hollywood.cls'.
diff --git a/lib/tex/iletter.cls b/lib/tex/iletter.cls
new file mode 100644 (file)
index 0000000..31695e7
--- /dev/null
@@ -0,0 +1,68 @@
+%
+% Author: Juergen Vigna (jug@sad.it)
+%
+% Defining some modifications and some new Commands for an
+% italian version to write letters.
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{iletter}[1997/06/04 v1.0 Italian Style Letter]
+\LoadClassWithOptions{letter}
+\setlength\topmargin{-1cm}
+\setlength\oddsidemargin{-1cm}
+%Grundzeilenabstand 1/6in = 4,23mm (DIN 2107,2142)
+\newdimen\GZA
+\GZA=1in
+\divide\GZA by 6
+\newcommand*{\data}[1]{\def\mydata{#1}}
+\newcommand*{\citta}[1]{\def\mycitta{#1}}
+\newcommand*{\oggetto}[1]{\def\myoggetto{#1}}
+\data{}
+\citta{}
+\oggetto{}
+%Nuova definizione del commando opening
+\renewcommand*{\opening}[1]{%
+%%    \thispagestyle{plain}
+    \unitlength1mm
+    \begin{picture}(0,0)
+        %Absenderadresse und Datum
+        \put(0,12.69){\parbox[t]{1\textwidth}{\parbox[t]{3in}{\fromaddress}}}
+        %Empfaengeradresse
+%%        \put(90,-21.15){\parbox[t]{3in}{\mbox{}\par\toname \\ \toaddress}}
+        \put(90,-15.15){\parbox[t]{3in}{\mbox{}\par\toname \\ \toaddress}}
+    \end{picture}%
+    \mbox{}\par
+    \vspace{-1\parskip}
+    \vspace{14\GZA}
+    \ifx\mydata\@empty\relax
+        \ifx\mycitta\@empty\relax\else\mycitta, \@date\fi
+    \else\relax
+        \ifx\mycitta\@empty\relax\mydata\else\mycitta, \mydata\fi
+    \fi
+    \mbox{} \par
+    %Anpassung wegen der verschiedenen Grundzeilenabstaende
+    \ifcase\@ptsize\vspace{0.045pt}\or\vspace{-1.555pt}\or\vspace{-2.955pt}\or\fi
+    \ifx\myoggetto\@empty\relax\else Oggetto: \myoggetto\fi
+    \mbox{} \par
+    \vspace{-1\parskip}
+    \vspace{2\GZA}
+    %Anpassung wegen der verschiedenen Grundzeilenabstaende
+    \ifcase\@ptsize\vspace{0.045pt}\or\vspace{-1.555pt}\or\vspace{-2.955pt}\or\fi
+    \newcommand{\Apertura}{#1}
+    \ifx\Apertura\empty \else #1\par\fi\nobreak
+}
+
+% Redefinizione del commando closing
+\renewcommand{\closing}[1]{\par\nobreak\vspace{\parskip}%
+    \stopbreaks
+    \noindent
+    \ignorespaces #1\\[6\medskipamount]%
+%%    \ifx\@empty\fromaddress\else
+    \hspace*{\longindentation}% \fi
+    \parbox{\indentedwidth}{%
+        \raggedright
+        \ifx\@empty\fromsig
+             \fromname
+        \else \fromsig \fi\strut
+    }%
+    \par
+}
diff --git a/lib/tex/revtex.cls b/lib/tex/revtex.cls
new file mode 100644 (file)
index 0000000..30bbecf
--- /dev/null
@@ -0,0 +1,98 @@
+%%%%  Start of file revtex.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% This file allows REVTeX v3.1 to function correctly under
+%% the 12/94 release of LaTeX 2e. Put this file wherever
+%% revtex.sty is. Continue to use \documentstyle{revtex}
+%% (with the correct options) and REVTeX will run normally
+%% in compatibility mode. Thanks to David Carlisle for
+%% pointing out this fix. 
+                 
+\ifx\every@math@size\undefined\else             
+  \let\old@expast\@expast
+  \def\@expast#1{\old@expast{#1}\let\@tempa\reserved@a}
+\fi
+\typeout{Marc's revtex class file}
+\ProvidesPackage{revtex}
+\if@compatibility\else\input{latex209.def}\fi
+\DeclareOption{10pt}{
+       \PackageWarning{revtex}{Ignoring LaTeX option \CurrentOption}
+}
+\DeclareOption{12pt}{
+       \PackageWarning{revtex}{Ignoring LaTeX option \CurrentOption}
+}
+\DeclareOption{letterpaper}{
+       \PackageWarning{revtex}{Ignoring LaTeX option \CurrentOption}
+}
+\DeclareOption{a4paper}{
+       \PackageWarning{revtex}{Ignoring LaTeX option \CurrentOption}
+}
+\DeclareOption{oneside}{
+       \PackageWarning{revtex}{Ignoring LaTeX option \CurrentOption}
+}
+\DeclareOption{twoside}{
+       \PackageWarning{revtex}{Ignoring LaTeX option \CurrentOption}
+}
+\DeclareOption{onecolumn}{
+       \PackageWarning{revtex}{Ignoring LaTeX option \CurrentOption}
+}
+\DeclareOption{aps}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{osa}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{aip}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{pra}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{prb}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{prc}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{prd}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{pre}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{prl}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{rmp}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{seg}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{manuscript}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{eqsecnum}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{preprint}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{tighten}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{amsfonts}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{amssymb}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{floats}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\DeclareOption{twocolumn}{
+       \PassOptionsToPackage{\CurrentOption}{revtex}
+}
+\ProcessOptions\relax
+\RequirePackage{revtex}
+\renewcommand{\usepackage}{\RequirePackage}
+%%%%  End of file revtex.cls
diff --git a/lyx.man b/lyx.man
new file mode 100644 (file)
index 0000000..a58b057
--- /dev/null
+++ b/lyx.man
@@ -0,0 +1,235 @@
+.\" Man page for LyX.
+.\" Use the following command to view man page:
+.\"
+.\"  tbl lyx.1 | nroff -man | less
+.\"
+.TH LYX 1 "October 1998" "Version 1.0" "LyX 1.0"
+.SH NAME
+lyx \- A Document Processor
+.\"
+.\" setup
+.de Cr
+.ie n (c)
+.el \(co
+..
+.SH SYNOPSIS
+\fBlyx\fR [ \fIcommand-line switches\fR] [\fIname.lyx ...\fR ]
+.br
+.SH DESCRIPTION
+\fBLyX\fR is too complex to be described completely in the "man" page
+format. If your system is properly configured, you can access the full
+documentation within \fBLyX\fR under the Help menu.
+
+\fBLyX\fR is a modern approach of writing documents with a computer
+which breaks with the tradition of the obsolete typewriter concept. It
+is designed for people who want a professional output with a minimum
+of time effort, without becoming specialists in typesetting. Compared
+to common word processors, \fBLyX\fR will increase the productivity a
+lot, since most of the typesetting will be done by the computer, not
+the author. With \fBLyX\fR the author can concentrate on the contents
+of his writing, since the computer will take care of the look. Read more 
+about this concept in the online documentation under the Help menu.
+
+Currently, \fBLyX\fR uses the XForms library as a toolkit. \fBLyX\fR
+should run everywhere, where XForms runs. This is on all major Unix
+platforms as well as some PC platforms, including Sun, SGI, HP, DEC
+Alpha/OSF, IBM RS6000, Convex, Cray, i386/Linux, Alpha/Linux,
+i386/FreeBSD, i386/NetBSD, DecSystem(mips)/Ultrix, OS/2 with XFree or 
+PMX and others. 
+
+.SH OPTIONS
+\fBLyX\fR supports the following command-line switches, which can also
+be specified as X resources (e. g. in .Xdefaults) with class
+name \fBLyX\fR:
+.TP 6
+.BI \-help
+summarizes LyX usage
+.TP
+.BI \-sysdir " directory"
+sets system directory. Normally not needed.
+.TP
+.BI \-width " x"
+the width of the main window in \fBLyX\fR.
+.TP
+.BI \-height " y"
+the height of the main window in \fBLyX\fR.
+.TP
+.BI \-xpos " x"
+the x position of the main window in \fBLyX\fR.
+.TP
+.BI \-ypos " y"
+the y position of the main window in \fBLyX\fR.
+Notice, you have to specify both 
+.BI \-xpos 
+and 
+.BI \-ypos 
+to obtain the
+desired effect. Negative positions are ignored. If no valid position
+is given, the main window is centered.
+.TP
+.BI \-dbg " debug-level"
+where debug-level is a sum of debugging options.
+Use "\fBlyx -dbg 65535 -help\fR" to see the different flags.
+.TP
+.BI \-Reverse
+swaps foreground and background colors.
+.TP
+.BI \-Mono
+runs \fBLyX\fR in black and white mode.
+.TP
+.BI \-FastSelection
+uses a fast black and white drawing routine for selections. If you use
+this, the switches BackgroundColor and SelectionColor are ignored.
+.PP
+The following options can be used to define the colors to use for
+different things:
+.TP
+.BI \-MathColor " color"
+.TP
+.BI \-MathFrameColor " color"
+.TP
+.BI \-FootColor " color"
+.TP
+.BI \-LabelColor " color"
+.TP
+.BI \-FillColor " color"
+.TP
+.BI \-NewLineColor " color"
+.TP
+.BI \-OnOffLineColor " color"
+.TP
+.BI \-LatexColor " color"
+.TP
+.BI \-NoteColor " color"
+.TP
+.BI \-LightedColor " color"
+.TP
+.BI \-BackgroundColor " color"
+.TP
+.BI \-SelectionColor " color"
+.PP
+Furthermore, \fBLyX\fR understands the following generic command line options 
+from the \fBForms Library\fR:
+.TP 6
+.BI \-display " host:display"
+specifies the server to connect to.
+.TP
+.BI \-bw " borderwidth"
+specifies the border width to use to built-in objects. 
+.TP
+.BI \-visual " visualName"
+requests a visual by name such as TrueColor etc. By default the
+.B Forms Library
+always selects the visual that has the most depth.
+.TP
+.BI \-depth " depth"
+requests a specific depth. Try "\fB-depth\fR best" or "\fB-depth\fR
+8" if you get a bad match.
+.TP
+.BI \-debug " level"
+generates some info about the state of the
+.B XForms. 
+where 
+.I level
+is an integer between 1-5 and controls the amount of
+information to output. Depending on the options used
+when the
+.B Forms Library
+was built, a level more than 3 might not be available.
+.TP
+.B \-sync
+runs the application in synchronous mode with debug level set to 4. 
+.TP
+.B \-private
+requests a private colormap for the application.
+.TP
+.B \-shared
+requests a shared colormap even if the application needs more
+colors than available. For those colors that can't be allocated
+in the shared colormap, substitutions are made so the closest
+matching color is used.
+.TP
+.B \-stdcmap
+requests a standard colormap.
+.TP
+.B \-name " newname"
+specifies the application name under which resources are to be
+obtained, rather than the default executable file name. 
+.SH ENVIRONMENT
+.TP
+.B LYX_DIR_10x
+can be used to specify which system directory to use.
+.PP
+The system directory is determined by searching for the file
+"chkconfig.ltx". Directories are searched in this order:
+.br
+1) -sysdir command line parameter
+.br
+2) LYX_DIR_10x environment variable
+.br
+3) Maybe <path of binary>/TOP_SRCDIR/lib
+.br
+4) <path of binary>/../share/<name of binary>/ 
+.br
+5) hardcoded lyx_dir (usually /usr/local/share/lyx on UNIX and %X11ROOT%\\XFree86\\lib\\X11\\lyx on OS/2 with XFree)
+
+.TP
+.B LYX_LOCALEDIR
+can be used to tell LyX where to look for the translations of its GUI
+strings in other languages.
+
+.SH FILES
+.nf
+.ta \w'\fILIBDIR\fR/lyxrc.in  'u
+~/.lyx/lyxrc      Personal configuration file
+\fILIBDIR\fR/lyxrc      System wide configuration file
+\fILIBDIR\fR/lyxrc.example System wide configuration file template
+\fILIBDIR\fR/configure  Updates \fBLyX\fR if config has changed
+\fILIBDIR\fR/bind/      Keybindings
+\fILIBDIR\fR/clipart/   Clipart pictures
+\fILIBDIR\fR/doc/       Documentation in \fBLyX\fR format.
+\fILIBDIR\fR/examples/  Example documents
+\fILIBDIR\fR/images/    Images used as icons or in popups
+\fILIBDIR\fR/kbd/       Keyboard mappings
+\fILIBDIR\fR/layouts/   Layout descriptions
+\fILIBDIR\fR/templates/ Templates for documents
+\fILIBDIR\fR/tex/       Extra TeX files
+.Sp
+.fi
+
+.I LIBDIR
+is the system directory. This is usually /usr/local/share/lyx on UNIX and %X11ROOT%\\XFree86\\lib\\X11\\lyx on OS/2 with XFree.
+
+.SH SEE ALSO
+reLyX(1), latex(1), xforms(5).
+
+Full documentation in either native \fBLyX\fR or postscript format.
+.SH BUGS/LIMITATIONS
+There are probably still some bugs in \fBLyX\fR. Please report them to
+lyx-devel@lists.lyx.org with detailed info, including which version of \fBLyX\fR
+you use.  Consult the "Known Bugs" item under the Help menu first if possible.
+
+\fBLaTeX\fR import is still not perfect and may produce buggy *.lyx files. Consult the \fBreLyX\fR documentation.
+
+XFree on OS/2 currently does not support PC codepages. If you use \fBemTeX\fR to preview/print with cp850, etc., this might lead to strange \fBemTeX\fR error messages.
+.B Remedy:
+  1) In filenames use only A-Z, a-z, 1-9.
+  2) Install a recent \fBLaTeX\fR package inputenc.sty. Select Layout->Document->encoding:latin1, so that \fBreLyX\fR adds the \fBLaTeX\fR command '\\usepackage[latin1]{inputenc}'.
+
+\fBLyX\fR server has some limitations under OS/2: See Help->Customization for details. 
+
+Preview of inline images in rare cases does not show the image. If you want to preview the image, just click on it and choose fullscreen preview. 
+
+If you have performance problems, please go through the \fBlyxrc\fR 
+configuration file.  It contains settings that can be used to improve 
+performance on slow systems.
+
+
+.SH AUTHOR
+Copyright
+.Cr
+1995, 1996, 1997, 1998 by Matthias Ettrich (ettrich@informatik.uni-tuebingen.de)
+and the rest of the \fBLyX Team\fR (See Credits under the Help menu
+item).
+\1a
\ No newline at end of file
diff --git a/po/.cvsignore b/po/.cvsignore
new file mode 100644 (file)
index 0000000..4b005af
--- /dev/null
@@ -0,0 +1,8 @@
+Makefile
+Makefile.in
+POTFILES
+*.gmo
+*.mo
+cat-id-tbl.c
+stamp-cat-id
+lyx.pot
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644 (file)
index 0000000..b2fe7e6
--- /dev/null
@@ -0,0 +1,4 @@
+1999-09-22  Lars Gullik Bjønnes  <larsbj@lyx.org>
+
+       * Added this file. Needed by the dist targets.
+
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644 (file)
index 0000000..3b77898
--- /dev/null
@@ -0,0 +1,259 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = $(prefix)/@DATADIRNAME@
+localedir = $(datadir)/locale
+gnulocaledir = $(prefix)/share/locale
+gettextsrcdir = $(prefix)/share/gettext/po
+subdir = po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@
+
+CC = @CC@
+GENCAT = @GENCAT@
+GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
+MSGMERGE = PATH=../src:$$PATH msgmerge
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I../src -I$(top_srcdir)/intl
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+SOURCES = cat-id-tbl.c
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
+stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+INSTOBJEXT = @INSTOBJEXT@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
+
+.c.o:
+       $(COMPILE) $<
+
+.po.pox:
+       $(MAKE) $(PACKAGE).pot
+       $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
+
+.po.mo:
+       $(MSGFMT) -o $@ $<
+
+.po.gmo:
+       file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+       && case "$(GMSGFMT)" in \
+       */msgfmt) rm -f $$file && $(GMSGFMT) -o $$file $<;; \
+              *) touch $$file ;; \
+       esac
+
+.po.cat:
+       sed -f ../intl/po2msg.sed < $< > $*.msg \
+         && rm -f $@ && $(GENCAT) $@ $*.msg
+
+
+all: all-@USE_NLS@
+
+all-yes: $(srcdir)/cat-id-tbl.c $(CATALOGS)
+all-no:
+
+$(srcdir)/$(PACKAGE).pot: $(POTFILES)
+       $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
+         --add-comments --keyword=_ --keyword=N_ \
+         --files-from=$(srcdir)/POTFILES.in
+       rm -f $(srcdir)/$(PACKAGE).pot
+       mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot
+
+$(srcdir)/cat-id-tbl.c: $(srcdir)/stamp-cat-id; @:
+$(srcdir)/stamp-cat-id: $(srcdir)/$(PACKAGE).pot
+       rm -f cat-id-tbl.tmp
+       sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
+               | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
+       if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
+         rm cat-id-tbl.tmp; \
+       else \
+         echo cat-id-tbl.c changed; \
+         rm -f $(srcdir)/cat-id-tbl.c; \
+         mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
+       fi
+       cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+       if test -r $(MKINSTALLDIRS); then \
+         $(MKINSTALLDIRS) $(datadir); \
+       else \
+         $(top_srcdir)/mkinstalldirs $(datadir); \
+       fi
+       @catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         case "$$cat" in \
+           *.gmo) destdir=$(gnulocaledir);; \
+           *)     destdir=$(localedir);; \
+         esac; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         dir=$$destdir/$$lang/LC_MESSAGES; \
+         if test -r $(MKINSTALLDIRS); then \
+           $(MKINSTALLDIRS) $$dir; \
+         else \
+           $(top_srcdir)/mkinstalldirs $$dir; \
+         fi; \
+         if test -r $$cat; then \
+           $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+           echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+         else \
+           $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+           echo "installing $(srcdir)/$$cat as" \
+                "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+         fi; \
+         if test -r $$cat.m; then \
+           $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+           echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+         else \
+           if test -r $(srcdir)/$$cat.m ; then \
+             $(INSTALL_DATA) $(srcdir)/$$cat.m \
+               $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+             echo "installing $(srcdir)/$$cat as" \
+                  "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+           else \
+             true; \
+           fi; \
+         fi; \
+       done
+       if test "$(PACKAGE)" = "gettext"; then \
+         if test -r $(MKINSTALLDIRS); then \
+           $(MKINSTALLDIRS) $(gettextsrcdir); \
+         else \
+           $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
+         fi; \
+         $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+                         $(gettextsrcdir)/Makefile.in.in; \
+       else \
+         : ; \
+       fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+         rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+         rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+         rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+       done
+       rm -f $(gettextsrcdir)/po-Makefile.in.in
+
+check: all
+
+cat-id-tbl.o: ../intl/libgettext.h
+
+dvi info tags TAGS ID:
+
+mostlyclean:
+       rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
+       rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+       rm -f $(GMOFILES)
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: update-po $(DISTFILES)
+       dists="$(DISTFILES)"; \
+       for file in $$dists; do \
+         ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+           || cp -p $(srcdir)/$$file $(distdir); \
+       done
+
+update-po: Makefile
+       $(MAKE) $(PACKAGE).pot
+       PATH=`pwd`/../src:$$PATH; \
+       cd $(srcdir); \
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         mv $$lang.po $$lang.old.po; \
+         echo "$$lang:"; \
+         if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
+           rm -f $$lang.old.po; \
+         else \
+           echo "msgmerge for $$cat failed!"; \
+           rm -f $$lang.po; \
+           mv $$lang.old.po $$lang.po; \
+         fi; \
+       done
+
+POTFILES: POTFILES.in
+       ( if test 'x$(srcdir)' != 'x.'; then \
+           posrcprefix='$(top_srcdir)/'; \
+         else \
+           posrcprefix="../"; \
+         fi; \
+         rm -f $@-t $@ \
+           && (sed -e '/^#/d' -e '/^[  ]*$$/d' \
+                   -e "s@.*@   $$posrcprefix& \\\\@" < $(srcdir)/$@.in \
+               | sed -e '$$s/\\$$//') > $@-t \
+           && chmod a-w $@-t \
+           && mv $@-t $@ )
+
+Makefile: Makefile.in.in ../config.status POTFILES
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+              $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..3fef6c9
--- /dev/null
@@ -0,0 +1,83 @@
+#
+# I used this to extract the files from the sources:
+#
+# grep -E "_\(\".*\"\)" `find src -name \*.[hHC] | \
+# awk  'BEGIN {FS = ":"}{print $1}' | sort | uniq
+#
+# This must be done when standing in lyx/
+#
+
+# This is all the files that contains internationalization strings.
+src/BufferView.C
+src/Chktex.C
+src/FontLoader.C
+src/LaTeX.C
+src/LaTeXLog.C
+src/Literate.C
+src/LyXAction.C
+src/LyXSendto.C
+src/LyXView.C
+src/PaperLayout.C
+src/ParagraphExtra.C
+src/TableLayout.C
+src/buffer.C
+src/bufferlist.C
+src/bullet_forms.C
+src/bullet_forms_cb.C
+src/combox.C
+src/credits.C
+src/credits_form.C
+src/filedlg.C
+src/filetools.C
+src/form1.C
+src/gettext.h
+src/insets/figinset.C
+src/insets/insetbib.C
+src/insets/inseterror.C
+src/insets/inseterror.h
+src/insets/insetinclude.C
+src/insets/insetindex.C
+src/insets/insetinfo.C
+src/insets/insetloa.h
+src/insets/insetlof.h
+src/insets/insetlot.h
+src/insets/insetparent.h
+src/insets/insetref.C
+src/insets/insettoc.h
+src/insets/inseturl.C
+src/insets/lyxinset.h
+src/intl.C
+src/kbmap.C
+src/latexoptions.C
+src/layout.C
+src/layout_forms.C
+src/lyx.C
+src/lyx_cb.C
+src/lyx_gui.C
+src/lyx_gui_misc.C
+src/lyx_main.C
+src/lyx_sendfax.C
+src/lyx_sendfax_main.C
+src/lyxfont.C
+src/lyxfr0.C
+src/lyxfr1.C
+src/lyxfunc.C
+src/lyxlib.h
+src/lyxvc.C
+src/mathed/formula.C
+src/mathed/formula.h
+src/mathed/formulamacro.C
+src/mathed/math_forms.C
+src/mathed/math_panel.C
+src/menus.C
+src/minibuffer.C
+src/minibuffer.h
+src/paragraph.C
+src/pathstack.C
+src/print_form.C
+src/sp_form.C
+src/spellchecker.C
+src/text.C
+src/text2.C
+
+
diff --git a/po/README b/po/README
new file mode 100644 (file)
index 0000000..bf63c71
--- /dev/null
+++ b/po/README
@@ -0,0 +1,105 @@
+This file is intended to provide information about the status of the
+different translation files. Please help us out to keep them up to date.
+
+If you want to make one for your language, please read "Help->Customization" 
+for more information, and the information below.
+
+Status
+------
+
+The intention here is to provide information about the status of the
+different translation files.
+
+   1998-02-03: no.po for Norwegian by Lars G. Bjønnes (larsbj@ifi.uio.no)
+       Pretty much done except for some keyboard-shortcuts, and a few
+       things that I don't know how to translate yet.
+       Updated for 0.12.0
+
+   1998-01-23: es.po, Spanish by Daniel Manrique and Alejandro Aguilar
+        Sierra. Advanced but not yet complete. Send comments about this
+       translation to (lyxesp@modelos1.atmosfcu.unam.mx) and get the 
+       latest version from http://www.linux.org.mx/lyx/es.html.
+
+   1999-04-30: da.po for Danish by Asger Alstrup (alstrup@diku.dk):
+       Pretty much done for 1.0.2, except for some keyboard shortcuts.
+
+   1998-07-27: Updated sv.po, Swedish by Joacim Persson (sp2joap1@ida.his.se)
+       Complete, in the sense that it works. (except some shortcuts in a
+       few hard-to-crack dialogs)
+       
+   1998-02-01: de.po, German by Peter Metternich and Peter Sütterlin
+        Complete as of pre8, allthough some translations could be nicer.
+        Shortcuts do work, allthough some are missing (not enough
+        unique letters...).  Additional shortcut definition file 
+        menus_de.bind available.
+
+   1998-02-11: hu.po, Hungarian by Peter Kremer & Andras Kadar
+        Menus and some simple dialog box are done. Additional shortcut
+       definition file menus_hu.bind available.
+
+   1998-11-27: fr.po, by Emmanuel Gureghian <gureghia@spi.lip6.fr>, with
+        *slight* changes by Jean-Marc Lasgouttes. All strings are basically
+        translated, but the keyboard shortcuts have not been updated and
+       the translation could really be improved. Feel free to contact 
+       Emmanuel if you want to help.
+
+   1998-12-02: ru.po, by Victor Lavrenko <lyx@lavrenko.pp.ru>. Last updated
+        on 1999-01-29. 
+
+The status of the other files is unknown at this point in time, but
+most should be pretty good.
+
+How can I update an existing po file?
+-------------------------------------
+
+It requires a bit of work to get started, but once you are set up,
+the procedure should be relatively easy:
+
+1) Getting ready
+
+Get and install gettext (available from ftp://alpha.gnu.org). Read the
+documentation for gettext. Then get the latest LyX distribution including 
+patches, and unpack it in your home directory. Read README in the LyX
+distribution. Read the files in development/Code_rules/.
+Check the mailing list archives to learn what is going on at the moment. 
+Consider subscribing to the developer's mailing list.
+
+2) Preparing a patch
+
+Now do (if you want to update the no.po file):
+
+        cp -R lyx-*.*.* lyx.new
+               (which makes a copy of the source distribution for 
+                you to change)
+       cd lyx.new/po/
+
+        msgmerge no.po lyx.pot > no.pox
+               (use no.pox as a temporary)
+        emacs no.pox                           
+               (using po-mode.)
+               (finish editing no.pox, save)
+        msgfmt no.pox
+        mv messages no.gmo
+        mv no.pox no.po
+        rm no.pox~
+
+       (update the status list in this README file)
+
+       cd ..
+
+       (update CHANGES and maybe also lib/CREDITS)
+
+       lyx.new/development/tools/makepatch lyx-*.*.* lyx.new
+               (which will create a patch file)
+
+3) Submitting the patch
+
+       zcat *.patch.gz | less
+               (to check that the patch is ok)
+
+       Mail the patch along with an announcement mail to 
+       lyx-devel@lists.lyx.org)
+
+Thanks!
+
+The LyX Team.
diff --git a/po/ca.po b/po/ca.po
new file mode 100644 (file)
index 0000000..0e3bf31
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,4825 @@
+# Traducció de LyX en Català
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Francesc Burrull i Mestres <fburrull@mat.upc.es>, 1999.
+#
+# Aquesta traducció l'he feta bastant ràpid, i és el primer pas.
+# El que ara cal són suggeriments per anar depurant la traducció
+# en succesives passades.
+#
+# Tots els suggeriments són benvinguts ;-)
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: LyX 1.0.0pre2\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:44+02:00\n"
+"Last-Translator:  Francesc Burrull i Mestres <fburrull@mat.upc.es>\n"
+"Language-Team: Catalan <ca@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Donant format al document..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "No hi ha més errors"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "Avís de ChkTeX número "
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Carregant font al servidor X..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Número d'execució: "
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "Execució LaTeX número "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Executant MakeIndex."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Executant BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "Fitxer log de LaTeX inexistent!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr ""
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "Fitxer log de LaTeX"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Descriure comana"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Seleccionar caràcter anterior"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Insertar BibTeX"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Arxivat automàtic"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Anar al principi del document"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Seleccionar des del principi del document"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Tancar"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Anar al final del document"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Seleccionar fins al final del document"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Faxsímil"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Document nou"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Document nou basat en model"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Obrir"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Canviar a document previ"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Revertir a document salvat"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Actualitzar DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Actualitzar PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Visualitzar DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Visualitzar PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr ""
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Verificar TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Salvar"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Salvar com"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Cancel.lar"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Retrocedir un caràcter"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Avançar un caràcter"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Inserir cita"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Executar comana"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Tallar"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Reduir la profunditat de l'entorn"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Incrementar la profunditat de l'entorn"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Canviar la profunditat de l'entorn"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Canviar les opcions de les marques d'enumeració"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Anar avall"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Seleccionar la línia següent"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Triar l'entorn de paràgraf"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Anar al següent error"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Inserir figura"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Buscar i Substituir"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "(Des)Activar que el cursor segueixi la barra de scroll"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Negreta si/no"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Codi si/no"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Estil de font per defecte"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Cursiva Sí/No"
+
+# Je  suis pas sur d'italique
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Estil de l'usuari Sí/No"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Majúscules petites Sí/No"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "(Des)Activar font d'estil romà"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "(Des)Activar font d'estil sans sérif"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Fixar tamany de font"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Mostrar estat de la font"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "(Des)Activar el subratllat"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Inserir nota a peu de pàgina"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Seleccionar caràcter següent"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Inserir espai? horitzontal"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Inserir punt de separació"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Inserir punts suspensius"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Inserir un punt i apart"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Desactivar el mapa de teclat"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Utilitzar el mapa de teclat primari"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Utilitzar el mapa de teclat secondari"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "(Des)Activar el mapa de teclat"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Inserir etiqueta"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Copiar el tipus d'entorn de paràgraf"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Enganxar el tipus d'entorn de paràgraf"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Especificar la mida del paper i els marges"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Anar al principi de la línia"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Seleccionar des del principi de línia"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Anar al final de la línia"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Seleccionar fins al final de la línia"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Sortir"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Inserir nota al marge"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Lletres -matemàtiques- Gregues"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Mode Matemàtic"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Anar al següent paràgraf"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Seleccionar següent paràgraf"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Anar al paràgraf anterior"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Seleccionar paràgraf anterior"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Enganxar"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Inserir espai protegit"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Inserir cita"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Reconfigurar"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Refer"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Inserir referència creuada"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Inserir Taula"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "Passar a mode TeX"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Desfer"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Incloure"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Importar document"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Eliminar tots els missatges d'error"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Inserir un punt i apart"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Descripció no disponible !"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Enviar document a comanda"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr "(Modificat)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr "(Només lectura)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Document de només lectura. Els canvis de format no són permesos"
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Format del paper"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Fixar el format del paper"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Avís: Longitut invàlida (exemple correcte: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Format de paràgrafExtra"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Fixar el format de paràgrafExtra"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Avís: Percentatge incorrecte (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Paràmetres opcionals de la taula"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Format Taula"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Avís: Posició del cursor errònia, finestra actualitzada"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Confirmació: Prem Suprimir de nou"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Error!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Impossible obrir el fitxer especificat"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Error en la càrrega de la classe de document"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Impossible de carregar la classe de document"
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- valor per defecte substituit "
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr ""
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Avís: Cal el format de lyx %.2f i s'ha trobat el %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "ERROR: Cal el format de lyx %.2f i s'ha trobat el %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Avís!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Lectura incompleta del document"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Potser el document està truncat"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "ERROR!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr ""
+"S'ha trobat un format de fitxers LyX antic. Cal que utilitzeu LyX 0.10.7"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "No és un fitxer LyX"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Impossible llegir el fitxer"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Error! Document de només lectura"
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Error! Impossible escriure el fitxer: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Error! Impossible tancar el fitxer correctament: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Error! Impossible escriure el fitxer"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Error! Impossible obrir el fitxer temporal"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Error! Impossible tancar el fitxer correctament: "
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "ERROR LYX:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Impossible escriure el fitxer"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Error : Profunditat errònia per la comanda LatexType\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "Executant LaTeX..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX no ha funcionat!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "No s'ha trobat el fitxer de registre:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Fet"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Executant LaTeX..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "LaTeX no ha funcionat!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Construint programa..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "LaTeX no ha funcionat!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Executant chktex..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex no ha funcionat!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Impossible executar amb el fitxer:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Impossible obrir el fitxer temporal"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Error! Impossible obrir el fitxer temporal"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Error executant *roff en la taula"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Operació Impossible"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Impossible inserir una taula o una llista dins d'una taula"
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Ho sento."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Canvis al document:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Vols salvar el document?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Alguns documents no s'han salvat"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Realment vols sortir?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Salvant el document"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Document salvat com a"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Impossible esborrar el fitxer de auto-salvat!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "No s'ha salvat!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "No hi ha documents oberts!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Intentant salvar el document"
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " com a..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "Sembla que s'ha salvat exitosament, Bufa!"
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "  No s'ha salvat! Intentant..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr " No s'ha salvat! El document s'ha perdut."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Existeix una còpia de seguretat del document !"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Intentar-lo carregar ?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "El fitxer de auto-salvat és més nou."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Carregar-lo ?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Impossible obrir el model"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Impossible convertir el fitxer"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "El document ja és obert :"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Voleu recarregar aquest document?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "El fitxer `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' és de només lectura."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Crear un document nom amb aquest nom?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Tamany|#z"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "D'acord"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Aplicar|#A"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Anul.la|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr ""
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr ""
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr ""
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr ""
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr ""
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Profunditat de les marques d'enumeració"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Estàndard"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matemàtic"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr ""
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr ""
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr ""
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr ""
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Ho sento, la vostra llibreria XPM és massa vella."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Cal la llibreria XPM versió xpm-4.7 (coneguda per 3.4g) o posterior."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Intenteu executar lyx en mode monocrom (lyx  -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Seleccionar les marques d'enumeració"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "ERROR: LyX no ha pogut llegir el fitxer de CRÈDITS"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Instal.leu-lo correctament, si us plau."
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "Tota aquesta gent, amb el seu treball, han contribuit al projete LyX"
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Crèdits"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Llicència i Garanties"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr ""
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Toutes ces personnes ont travaillées sur el projet LyX. Merci,"
+
+#: src/credits_form.C:50
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX és Copyright (C) 1995 de Matthias Ettrich,\n"
+"1995-1998 Equip LyX"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Aquest programa és software lliure; es permet la seva redis-\n"
+"tribució i/o modificació sota els termes de la\n"
+"Llicència Pública General (GPL) GNU tal com s'ha \n"
+"publicat per part de la Free Software Foundation; tant la\n"
+" versió 2 de la Llicència com (opcionalment) qualsevol\n"
+"versió posterior."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX es distribueix amb l'esperança de que sigui\n"
+"útil, però SENSE GARANTIES; ni tant sols\n"
+"la garantia implicada de POSSIBILITAT DE COMERCIALITZAR\n"
+" o SER APTE PER A ALGUN PROPÒSIT PARTICULAR.\n"
+"Vegeu la Llicència Pública General GNU per més detalls.\n"
+"Debeu haber rebut una còpia de la Llicència \n"
+"Pública General GNU amb aquest programa;\n"
+"Si no la heu rebut, escriviu a:\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[error d'interpretació]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[interpretant....]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[no hi ha fitxer]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[no mostrat]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[no hi ha ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[error desconegut]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Figura"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "Trajectòria de la figura buida"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr ""
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr ""
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "Figura EPS"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "El nom del fitxer no pot incloure cap d'aquests caràcters:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "espai, '#', '~', '$' o '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Avís! Impossible obrir el directori."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "Error intern del Lyx!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Impossible verificar si es permet l'escriptura al directori."
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Impossible obrir el fitxer test de directori"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Fitxer de test creat, però impossible d'esborrar ?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Error! Impossible obrir el directori:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Error! Impossible esborrar el fitxer:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Error! Impossible crear el directori temporal:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Error! Impossible esborrar el directori temporal:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Error intern!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "crida a  createDirectory amb un nom invàlid"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Error! Impossible crear el directori:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Triar joc de caràcters|#C"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "No s'ha trobat el joc de caràcters!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Error:\n"
+"\n"
+"No s'ha trobat el\n"
+"mapa de teclat"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Joc de caràcters:|#H"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Altre...|#O"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Altre...|#T"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Idioma"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Mapeig"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Mapa de teclat primari|#r"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Sense mapeig de teclat|#N"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Mapa de teclat secundari|#e"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Secundari"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Primari"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "Fitxer EPS|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Visualització en Pantalla Completa|#v"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Examinar..."
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Mostrar marc|#F"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Traduir"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Opcions"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr ""
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% de la Pàgina|#"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Par Defecte|#t"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr ""
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "polzades|#h"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Mostra"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Alçada"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Amplada"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Rotació"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Mostrar en color|#D"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "No mostrar aquesta figura|#y"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Mostrar en escala de grisos|#i"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Mostrar en monocrom|#s"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Per Defecte|#U"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr ""
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "polzades|#n"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% de la Pàgina|#"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% de columnna|#"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr ""
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Sub-figura|#k"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Directori:|#D"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Plantilla:|#P"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Nom del fitxer:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Rellegir|#R#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr ""
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Usuari1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Usuari2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Columnes"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Files"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Buscar|#n"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Substituir amb|#W"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Substituir|#R#r"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Tancar|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Distingeix majúscules de minúscules|#s#S"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Coincidència exacta|#M#m"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Substituir-ho tot|#R#r"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Mode matemàtic grec actiu"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Teclat matemàtic grec actiu"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Mode matemàtic grec inactiu"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "mode TeX"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "No número"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Número"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Introduiu la nova etiqueta a inserir:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "Mode text matemàtic"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Acció invàlida en mode matemàtic!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Mode editor matemàtic"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr ""
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Tecla:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Remarca:|#R"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Codi:|#K"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Etiqueta:|#L"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Cita"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Entrada bibliogràfica"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Referències generades per BibTeX"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Base de dades:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Estil:  "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr ""
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr ""
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "Error LaTeX"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Error obert (no solucionat)"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Examinar|#B"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "No tipografieu|#D"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Carregar|#L"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Nom del fitxer:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Espai visible|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Textual|#T"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Utilitzar entrada|#i"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Utilitzar inclou|#i"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Documents"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Seleccionar document fill"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Inclou"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Entrada"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Entrada textual"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Paraula clau:|#K"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Índex"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Índex"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Imprimir Index"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Nota"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Tancar|#C^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Llista d'algorismes"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Llista de figures"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Llista de taules"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Pare:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Tipus de referència"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Anar a l'etiqueta"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Canviar l'etiqueta"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Número de pàgina"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Referència"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Pàgina: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr ""
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Taula de continguts"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr ""
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Nom Destinatari:|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Tancar|#C^["
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "tipus d' HTML"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Inserir URL"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr ""
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr ""
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "Altre..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Mapeig de tecles"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   opcions: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Permetre accentuar TOTS els caràcters|#w"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Actualitzar|#Uu"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX no ha trobat les descriptions de formats de documents!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Verifiqueu que el fitxer \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "estigui instal.lat correctament. Ho sento :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX no ha pogut trobar cap descripció de formats de documents!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Verifiqueu que el fitxer \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Ho sento. Finalitzo :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Separació"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Sagnat|#S"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Saltar|#S"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Classe:|#C"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Estil de pàgina:|#P"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr ""
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Tamany de font:|#O"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Posició dels flotants"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "Programa de control PS:|#S"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Codificació:|#D"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Un|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Dos|#T"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Costats"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Un|#e"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Dos|#w"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Opcions extra"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Idioma:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Salt de línia per defecte:|#u"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Profunditat de números de secció"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Profunditat de la taula de continguts"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Espaiament|#g"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Forma de les marques d'enumeració|#B"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "Utilitzar AMS Matemàtic|#M"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Família:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Sèries:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Forma:|#H"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Tamany:|#Z"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Miscel.lania:|#M"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Color:|#C"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Alternar en tots|#A"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Aquests paramètres mai es modifiquen"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Aquests paramètres sempre es modifiquen"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Tamany d'Etiqueta:|#d"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Sagnat"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Abans|#b"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Després|#E"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Abans|#o"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Després|#l"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Sense sagnat|#I"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Dreta|#R"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Esquerra|#f"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Bloc|#c"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Centrar|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Abans:|#v"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Després:|#w"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Salt de Pàgina"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Línies"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Aliniació"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Espais verticals"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Opcions extra|#X"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Conserva|#K"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Conserva|#p"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "D'acord|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Tipus:|#T"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Simple|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Doble|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr ""
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Especial:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Marges"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Marges de capçalera i peu de pàgina"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Orientació"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Retrat"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Apaisat"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Mides:|#P"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Tamany Personalitzat"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Utilitzar el paquet de geometria|#U"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Amplada:|#W"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Alçada:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Dalt:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Baix:|#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Esquerra:|#e"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Dreta:|#R"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Alçada capç.:|#i"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Sep. capçalera:|#d"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Separació peu:|#F"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Vores, contorns"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Dalt|#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Baix|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Esquerra|#L"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Cel.la especial"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Multicolumnes|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Afegir Columna|#A"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Suprimir Columna|#O"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Afegir Fila|#p"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Suprimir Fila|#w"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Suprimir Taula|#D"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Columna"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Fila"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Activar Contorns|#S"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Desactivar Contorns|#U"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Taula llarga"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Rotar 90%|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Salt de línia|#N"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Spec. Taula"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Primera cel.la"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Capçalera"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Peu de pàg."
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Últim peu de pàg."
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Pagina nova"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Rotar 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr ""
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Esquerra|#e"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Dreta|#i"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Centrar|||#C"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Opcions Extra"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Llargada|#L"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "o %|#o"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Mig|#d"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "HFill entre els paràgrafs de minipàgina|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Començar una nova minipàgina|#S"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Paràgrafs Indentats|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minipàgina|#M"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr ""
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Aliniació Especial en Multi-Columnes"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Aliniació Especial de Columnes"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "PostScript Encapsulat (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "EPS Incorporat (*.eps, *.ps)|#I"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Tipus"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Font Romana|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Font Sans Serif|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Font Màq. d'Escriure|#T"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Font Normal|#N"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Zoom de Font|#Z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Actualitzar|Uu#u"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Actualitzar|#U"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Inserir Referència|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Inserir Numéro de Pàgina|#P"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Anar a la Referència||#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "No s'ha pogut salvar. Renombrar i intentar-ho de nou ?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Sinó el document no es salvarà)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Plantilles"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Introduiu el nom amb què es guardarà el fitxer"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Cancel.lat"
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "El document ja tenia aquest nom:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Salvar-lo, tot i això ?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Hi ha un altre document obert amb aquest nom !"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Substituir amb el document actual ?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Document renombrat com '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', però sense salvar..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "El Document ja existeix"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Substituir el fitxer ?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Ho sento, no ho puc fer mentre es carreguen les imatges."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Espereu uns instants abans de reintentar-ho."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(o manualment mateu els processos 'gs' i reintenteu.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Ho sento, impossible durant la correcció orthogràfica"
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Abans atureu el corrector"
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Detectat un error"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "L'haurieu de corregir"
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " errors detectats"
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Els haurieu de corregir"
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "LaTeX ha generat errors"
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Anar al final del document"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr ""
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "LaTeX ha generat errors"
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex no funciona amb LinuxDoc"
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "No hi ha hagut avisos"
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Hi ha hagut un avís"
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Utilitzeu 'Editar->Anar a l'error' per trobar-lo."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " avisos."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Utilitzeu 'Editar->Anar a l'error' per trobar-los"
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex no ha trobat cap error"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Chktex no ha funcionat."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Executant la comanda:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "El fitxer ja existeix:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Voleu sobreescriure el document?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Cancel.lat"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Fitxer LaTeX perfecte salvat com"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "La classe del document ha de ser linuxdoc"
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Creant el fitxer SGML LinuxDoc `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "Fitxer LinuxDoc SGML salvat com"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "La classe del document ha de ser linuxdoc"
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Creant el fitxer SGML LinuxDoc `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "Fitxer LinuxDoc SGML salvat com"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Fitxer Ascii salvat com"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Autosalvat del document actual..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Ha fallat l'Autosalvat!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Fitxer a inserir"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Error! Impossible obrir el fitxer especificat:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Taula de continguts"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Inserir Referència"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Inserir Nota a peu de pàgina..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Important Fitxer LinuxDoc SGML `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Convertint el fitxer LinuxDoc SGML a fitxer TeX...."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Convertint el fitxer LinuxDoc SGML a fitxer DVI..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Convertint el fitxer LinuxDoc SGML a fitxer DVI..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Estil de caràcter"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Entorn de paràgraf"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Format del document"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Cometes"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "Preamble LaTeX"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Voleu salvar els paramètres actuals"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "Per a Caràcter, Document, Paper i Cometes"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "com a paràmetres per defecte pels nous documents?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Obrir/Tancar"
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "No hi ha més informació per desfer"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "'Refer' no disponible en mode matemàtic"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "No hi ha més informació per Refer"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr ""
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Profunditat: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Inserció d'una nota al marge..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "S'ha copiat el tipus d'entorn de paràgraf"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Tipus d'entorn de paràgraf modificat"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Profunditat d'entorn modificada (dins del possible, potser no)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Format de paràgraf modificat"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Cal que modifiqui "
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "per fer-los paràmetres per defecte d'aquesta classe de documents?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Errors de Conversió!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Impossible canviar a la nova classe de documents."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Tornant a la classe de document original."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Convertint el document a la nova classe..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Un paràgraf no s'ha pogut convertir"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " paràgrafs no s'han pogut convertir"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "a la classe escollida"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Possibles Formats de Document"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "No hi ha més notes"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Possibles Cometes"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "Possibles Preambles LaTeX"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Impossible inserir un taula en una taula"
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Inserint taula..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Taula inserida"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "Impossible imprimir"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr ""
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr ""
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr ""
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Impossible imprimir"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Verifiqueu que els paràmetres són correctes"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Inserint figura..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Figura inserida"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Opcions de pantalla"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "Opcions de LaTeX"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Reconfigurant..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Carregant la configuració..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "El sistema s'ha reconfigurat"
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Cal reinicialitzar LyX per utilitzar qualsevol"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "especificació de classe de document actualitzada"
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Impossible trobar aquesta etiqueta"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "en el document actual"
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** No hi ha Document ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** No s'han trobat etiquetes en el document ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr "Cap | Defecte | Petit  | Mitjà | Gran | VFill | Llargada "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr "Idem %l| Romana | Sans Serif | Màquina d'Escriure %l| Reiniciar "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr "Idem %l| Mig | Negreta %l| Reiniciar"
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr "Idem %l| Recta | Itàlica | Inclinada | Maj. petites %l| Reiniciar "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+"Idem %l| Petit(4) | Petit(3) |  Petit(2) |  Petit(1) | Normal | Gran (1) | "
+"Gran (2) | Gran (3) | Gran (4) | Gran (5) | <- Augmentar -> | -> Disminuir "
+"<- | Reiniciar"
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr "Idem %l| Itàlica | Subratllat | Noms | mode LaTeX %l | Reiniciar "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+"Idem %l| Sense color | Negre | Blanc | Vermell | Verd | Blau | Cyan | "
+"Magenta | Groc %l | Reiniciar"
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr "Simple | Un i mig | Doble | Altre "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr "Espai Petit | Espai Mitjà | Espai Gran | Llargada "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+"Per defecte | Personalitzada | Carta US | Legal US | Executiu US | A3 | A4 | "
+"A5 | B3 | B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+"Cap | A4 marges petits (només retrat) | A4 marges molt petits (només retrat) "
+"| A4 marges molt grans (només retrat) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "Bandera de LyX"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Descartar"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Sí|Ss#s"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "No|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Buida"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Tots els canvis s'ignoraran"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "El document és de només lectura"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Avís: Impossible trobar el camí del binari."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "En cas de problemes, executeu LyX amb el camí complet."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "La variable d'entorn LYX_DIR_10x no és vàlida"
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "El directori de sistema és: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Avís LyX: Impossible determinar el directori de sistema."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "A la línia  de comandes, proveu d'utilitzar el paràmetre '-sysdir' o"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "fixeu la variable d'entorn LYX_DIR_10x al directori"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "que contingui el fitxer  `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Utilitzant els paràmetres per defecte."
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " ara bé, prepareu-vos per problemes"
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Prepareu-vos per problemes"
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "No teniu un directori personal LyX."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "És necessari per la vostra pròpia configuració."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Ho faig per vós (es recomana)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Funcionant sense directori personal"
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Creant el directori "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " i reconfigurant..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Ha fallat. S'utilitzarà "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr " enlloc."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Fet!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "Avís LyX!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Error llegint "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Utilitzant valors per defecte."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Nivell de depuració:"
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr ""
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Utilització: lyx [ paràmetres] [fitxer.lyx...]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Opcions de línia de comandes (es distingeix majúscules de minúscules):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help          Resum de les instruccions d'ús de LyX"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x      x serà el directori de sistema"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "  -width x        fixar l'amplada de la finestra"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y      fixar l'alçada de la finestra"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr " -xpos x        fixa la coordenada x de la finestra principal"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y          fixa la coordenada y de la finestra principal"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          on n és el grau d'informació de les opcions de depurat. "
+"Proveu -dbg 65535 -help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        intercanvia els colors de primer pla i fons"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           executa LyX en Blanc i Negre"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  utilitza rutina ràpida per veure seleccions\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Cosulteu el manual (man lyx) per més opcions."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Falta el paràmetre de la opció -dbg!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Falta el paràmetre de la opció -sysdir!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Número de Fax:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Destinatari:|#N"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Empresa:|#E"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Llistí Telefònic"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Seleccionar desde|#S"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Afegir a|#t"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Esborrar de|#D"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Salvar"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Destí:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Comentari:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Fitxer Fax: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Llistí telefònic buit"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Salvar (necessari)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Impossible obrir el llistí telefònic"
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "FITXER DE REGISTRE BUIT O INEXISTENT"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Finestra de Missatges"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cLlistí Telefònic Buit"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Llistí Telefònic"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Romana"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Sans Serif"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Màquina d'Escriure"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Symbol"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Heredar"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Mig"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Negreta"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Dreta"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Itàlica"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Inclinada"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Majúscules Petites"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr " Petita (4)"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "  Petita (3)"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "   Petita (2)"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "    Petita (1)"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "     Normal"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "    Gran (1)"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "   Gran (2)"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "  Gran (3)"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr " Gran (4)"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Gran (5)"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "<- Augmentar ->"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "-> Disminuir <-"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr " petita (4)"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "  petita (3)"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "   petita (2)"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "    petita (1)"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "     normal"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "    gran (1)"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "   gran (2)"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "  gran (3)"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr " gran (4)"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "gran (5)"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "<- augmentar ->"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "-> disminuir <-"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "Heredar"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "Ignorar"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Aturat"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "en Marxa"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "(Des)Activar"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Cap"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Negre"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Blanc"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Vermell"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Verd"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Blau"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr ""
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr ""
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Groc"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Matemàtic"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr ""
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Èmfasi"
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Subratllat"
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Petites Majúscules"
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr ""
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Per defecte"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Seqüència Desconeguda:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Acció Desconeguda"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Commanda no autoritzada sense documents oberts"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Document de només lectura"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Mode Text"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "No sé exportar a aquest tipus: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "No sé importar des d'aquest tipus: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Format"
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " desconegut"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr " Pas de referència croisée a (dés)activer"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Marque enlevée"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Marque posée"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Marque Désactivée"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Marque Activée"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "La barre d'outils nécessite un nombre d'arguments > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Usage:  toolbar-add-to <commande LyX>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Argument manquant"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Ceci n'est autorisé qu'en mode matemàtic!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Ouverture del document fils"
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Type de note de bas de page desconegut"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "El Document és de només lectura"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Introduiu el nom de fitxer del document nou"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "fitxerNou"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Voleu tancar el document ara?\n"
+"(si responeu 'No' continuarà l'edició)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Voleu obrir el document?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Ouverture del document en cours"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "ouvert."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Choisissez el patron"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Exemples"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Seleccioneu el document a obrir"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Impossible obrir el document"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Sélectionne el fitxer ASCII a importer"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Un document possède el même nom"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "Écraser?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Importation del fitxer ASCII en cours..."
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "fitxer ASCII"
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "importé"
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Seleccionar el fitxer LaTeX a importer"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Seleccionar el fitxer LaTeX a importer"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Importation del fitxer LaTeX en cours..."
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Importation del fitxer LaTeX en cours..."
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "fitxer LaTeX "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "fitxer LaTeX "
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "Impossible obrir el fitxer LaTeX"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Impossible obrir el fitxer LaTeX"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Seleccionar el document a inserir"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Insertion del document en cours"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "inséré"
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Impossible inserir el document"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "inset ouvert"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "desconegut"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Salvar Document ?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: Descripció Inicial"
+
+#: src/lyxvc.C:184
+msgid "(no initial description)"
+msgstr "LyX VC: Descripció Inicial"
+
+#: src/lyxvc.C:187
+msgid "Info"
+msgstr "Ignorar"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr ""
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Missatge del Registre (Log)"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Ignorar les modificacions i passar a comprovar (check out) ?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Si volques la versió precedent, perdreu totes les modificacions fetes"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "al document després de l'última comprovació (check-in)"
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Encara ho vols fer ?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "No hi ha historial RCS"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "Historial RCS"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Tancar "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funcions"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Grec"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr ""
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr ""
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr ""
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr ""
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Miscelània"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "D'acord  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Columnes"
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Aliniació Vertical|#V"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Aliniació Horizontal|#H"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "D'Acord"
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Prim|#T"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Mig|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Gruixut|#H"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negatiu"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Quadratin||#Q"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "2Quadratin||#2"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Delimitador"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Decoració"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Espaiat"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matriu"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Dalt | Centre | Baix"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Panell Matemàtic"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Fitxer"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Editar"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Format"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Inserir"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Ajuda"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr ""
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr ""
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr ""
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr ""
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr ""
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr ""
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr ""
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr ""
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Opcions de pantalla"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Importar%t|LaTeX...%x30|Text Ascii com a línies...%x31|Text Ascii com a "
+"Paràgrafs%x32"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Exportar%t|en LaTeX...%x40|en DVI...%x41|en PostScript...%x42|en Text Ascii "
+"...%x43|Personalitzada...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportar%t|en LinuxDoc...%x40|en DVI...%x41|en PostScript...%x42|en Text "
+"Ascii...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportar%t|en LinuxDoc...%x40|en DVI...%x41|en PostScript...%x42|en Text "
+"Ascii...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr ""
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Nou...|Nou a partir d'un model...|Obrir...%l|Tancar|Salvar|Salvar "
+"com...|Recarregar %l|Visualitzar DVI|Visualitzar PostScript|Actualitzar "
+"DVI|Actualitzar PostScript|Construir programa%l|Imprimir...|Enviar per Fax..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr ""
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr ""
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr ""
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importar%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Exportar%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Sortir%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Importar%t|LaTeX...%x15|Text Ascii com a línies...%x16|Text Ascii com a "
+"Paràgrafs..%x17"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Nou...|Nou a partir d'un model...|Obrir...%l|Importar%m%l|Sortir%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Flotants i Separadors%t|Obrir/Tancar%x21|Incorporar%x22|Obrir totes les "
+"notes%x23|Tancar totes les notes%x24|Obrir totes les "
+"Figures/Taules%x25|Tancar totes les  Figures/Taules%x26%l|Eliminar tots els "
+"missatges d'error%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Taula%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Multicolumna%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Multicolumna%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Primera Filae%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Primera Fila%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Última Fila%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Última Fila%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Fila Esquerra%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Fila Esquerra%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Fila Dreta%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Fila Dreta%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Aliniar a l'Esquerra%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Aliniar a l'Esquerra%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr ""
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Aliniar a la Dreta%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Aliniar a la Dreta%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr ""
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Centrar%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Centrar%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Afegir Columna%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr ""
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Afegir Columna%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr ""
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Suprimir Columna%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr ""
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Suprimir Columna%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr ""
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Suprimir Taula%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Inserir Taula%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Control de Versions%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Registrar%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Verifiqueu Modificacions%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Verificat per edició%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Verifiqueu Modificacions%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Verificat per edició%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Recarregar la versió precedent%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Desfer última verificació%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Mostrar Historial%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Salvar%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr ""
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Desfer|Refer%l|Tallar|Copiar|Enganxar%l|Buscar i Substituir...|Anar a "
+"Error|Anar a Nota|Flotants & Separadors%m|Taula%m|Corrector "
+"Ortogràfic....|Verificació TeX|Taula de Continguts...%l|Control de "
+"Versions%m%l|Examinar el Registre (log) de LaTeX log%l|Copiar Selecció com a "
+"Línies|Copiar Selecció com a Paràgrafs"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr ""
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr ""
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Caràcter...|Paràgraf...|Document...|Paper...|Taula...|Cometes....%l|Èmfasi%b|"
+"Majuscules%b|Negreta%b|Estil TeX%b|Canviar Profunditat d'entorn|Preamble "
+"LaTeX...%l|Salvar com a Format Per Defecte"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr ""
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr ""
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr ""
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr ""
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr ""
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Importar fitxer ASCII%t|Com a Línies%x41|Com a  Paràgrafs%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Llistes & TDC%t|Taula de Continguts%x21|Taula de Figures%x22|Llista de "
+"Taules%x23|Llista d'Algorismes%x24|Index%x25|Referència BibTeX%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Flotants%t|Figura Flotant%x71|Taula Flotant%x72|Figura gran "
+"Flotant%x73|Taula Gran Flotant%l%x74|Algorisme Flotant%x75"
+
+#. }
+#: src/menus.C:1204
+msgid "IMF|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr ""
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Caràcter Especial%t|HFill%x31|Guionet%x32|Blanc protegit%x33|Salt de "
+"línia%x34|Punts suspensius (...)%x35|Punt i apart%x36|Cita ordinària (\")%x37"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr ""
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Figura...|Taula...%l|Incloure Fitxer...|Importar Fitxer ASCII%m|Inserir "
+"Fitxer LyX...%l|Nota a peu de pàgina|Nota al marge|Flotant%m%l|Llistes & "
+"Taules%m%l|Caràcter Especial%m%l|Nota|Etiqueta...|Referència "
+"Creuada...|Referència a una Cita|Entrada d'Index"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr ""
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr ""
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr ""
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr ""
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr ""
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr ""
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Fracció|Arrel Quadrada|Exponent|Index|Suma|Integral%l|Mode "
+"Matemàtic|Mostrar%l|Panel matemàtic..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr ""
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Fonts de pantalla...|Opcions  "
+"d'ortografia...|Teclat...|LaTeX...%l|Reconfigurar"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr ""
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Introducció|Tutorial|Manual d'Usuari|Opcions "
+"Avançades|Personalització|Manual de referència|Errors Coneguts |Configuració "
+"LaTeX%l|Copyright i Garantia...|Crèdits...|Versió..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr ""
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr ""
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr ""
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr ""
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr ""
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr ""
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr ""
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr ""
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "Versió LyX"
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " de "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Directori de Llibreries :"
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Directori d'Usuari :"
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Obrint el fitxer d'ajuda"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Executant:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Cap document obert *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Benvingut a LyX !"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "No té sentit amb aquest format !"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Error: Impossible canviar de directori"
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "Error Intern LyX"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr ""
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Imprimir a"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Impressora|#P"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Fitxer|#F"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Totes les pàgines|#G"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Pàgines Imparells|#O"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Pàgines parells|#E"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Ordre Normal|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Ordre Invers|#R"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Ordre"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Pàgina: "
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Copiar"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Comentari:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Desactivar Contorns|#U"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Tipus de Fitxer"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Commanda:|#C"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr ""
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr ""
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr ""
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr ""
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr ""
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Utilitzar l'idioma del document|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Utilitzar idioma alternatiu|#U"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr ""
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Codificació canviada per ISpell|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Utilitzar un diccionari personal|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Caràcters especials permesos en paraules|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Diccionari"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Substituir"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Opcions Corrector Ortogràfic...|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Començar la correcció d'ortogràfica|#S"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Inserir al diccionari personal|#I"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignorar el mot|#g"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Acceptar el mot en aquesta sessió|#A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Aturar la correcció ortogràfica|#T"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Finalitzar la correcció ortogràfica|#C^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr ""
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr ""
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Substituir el mot|#R"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Opcions del Corrector Ortogràfic"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Corrector Ortogràfic"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"El procés i-spell ha mort per alguna causa. *Una* possible causa\n"
+"és que no teniu el fitxer diccionari\n"
+"per l'idioma del document\n"
+"Verifiqueu /usr/lib/ispell o escolliu un altre\n"
+"diccionari dins del menú Opcions-> Diccionari."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " mots verificats"
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " mot verificat"
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Correcció Ortogràfica Finalitzada"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"El procés i-spell ha mort per alguna raó.\n"
+"Potser l'han matat."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Les multicolumnes han de ser horitzontals"
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Operació Impossible"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Impossible inserir un flotant en un flotant!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Impossible inserir un flotant en un flotant!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "No es pot tallar la taula."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Un flotant inclouria un flotant!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "flotant obert"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "flotant tancat"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Res a fer"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr "Canvi de font no definit. Utilitzeu Format->Caràcter per definir-lo"
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "No sé com tractar un mig flotant."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "Ho sento"
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "No sé com tractar mitjes taules."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Impossible enganxar un flotant en un flotant!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Les cel.les d'una taula no poden incloure més d'un paràgraf!"
diff --git a/po/cs.po b/po/cs.po
new file mode 100644 (file)
index 0000000..c3de87f
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,4825 @@
+# Czech translations for LyX
+# Copyright (C) 1999 Ludek Brukner
+# Ludek Brukner <ludek.brukner@regionet.cz> 1998
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: LyX 1.0.2\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:46+02:00\n"
+"Last-Translator: Ludek Brukner <ludek.brukner@regionet.cz>\n"
+"Language-Team: Czech <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Formátuji dokument..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "®ádné dal¹í chyby"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "Varování ChkTeXu #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Nahrávám písma do X-Serveru..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Bìh #"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "Èíslo bìhu LaTeXu "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Bì¾í MakeIndex."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Bì¾í BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "SOUBOR S HLÁ©ENÍMI LATEXU NEEXISTUJE"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "Vytváøím log"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "Zprávy LaTeXu"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Popis pøikazu"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Výbìr pøedchozího znaku"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Vlo¾ení bibtexu"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Automatické ulo¾ení"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Pøechod na zaèátek dokumentu"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Vyber do zaèátku dokumentu"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Zavøít"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Jdi na konec dokumentu"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Vyber do konce dokumentu"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Fax"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Nový dokument"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Nový dokument podle ¹ablony"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Otevøít"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Pøepnutí na pøedchozí dokument"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Tisk"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Obnovení ulo¾ené verze"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Obnovení DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Obnovení PostScriptu"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Prohlí¾ení DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Prohlí¾ení PostScriptu"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "Vytváøím program"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Kontrola TeXu"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Ulo¾it"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Ulo¾it jako"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Zru¹it"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Pøechod o znak zpìt"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Pøechod o znak dopøedu"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Vlo¾ení citace"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Provedení pøíkazu"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Kopíruj"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Vystøihni"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Sní¾ení hloubky zanoøení"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Zvy¹ení hloubky zanoøení"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Zmìna hloubky zanoøení"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Zmìna nastavení znaèek výètù"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Posun dolù"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Výbìr následujícího øádku"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Výbìr prostøedí odstavce"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Pøechod na dal¹í chybu"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Vlo¾ení obrázku"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Hledání a zámìna"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Pøepnutí kurzoru ne/kopíruje posuvník"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Pøepnutí tuènì"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Pøepnutí stylu kód"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Implicitní typ písma"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Pøepnutí zvýraznìní"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Pøepnutí u¾ivatelem definovaného stylu"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Pøepnutí stylu jméno"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Pøepnutí patkového písma"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Pøepnutí bezpatkového písma"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Nastavení velikosti písma"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Informace o nastavení písma"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Pøepnutí podtr¾ení"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Vlo¾ení poznámky pod èarou"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Vybrání následujícího znaku"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Vlo¾ení horizontálního výplòku"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Vlo¾ení místa dìlení slova"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Vlo¾ení ... teèek"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Vlo¾ení teèky na koci vìty"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Vypnutí mapy klávesnice"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Pou¾ití primární klávesnice"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Pou¾ití sekundární klávesnice"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Pøepnutí mapy klávesnice"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Vlo¾ení znaèky"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Zkopírování prostøedí odstavce"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Vlo¾ení prostøedí odstavce"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Nastavení rozmìru papíru a okrajù"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Pøechod na zaèátek øádku"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Výbìr do zaèátku øádku"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Pøechod na konec øádku"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Výbìr do konce øádku"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Ukonèení"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Vlo¾ení poznámky na okraji"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Øecká písmena"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Matematický re¾im"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Pøesun o odstavec dolù"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Výbìr následujícího odstavce"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Pøesun o odstavec nahoru"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Vybìr pøedchozího odstavce"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Vlo¾it"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Vlo¾ení pevné mezery"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Vlo¾ení uvozovky"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Rekonfigurace"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Opakovat"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Vlo¾ení odkazu"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Vlo¾ení tabulky"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "Pøepnutí stylu TeX"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Zpìt"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Spojeno"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Vkládám dokument"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Odstranìní v¹ech chybových hlá¹ení"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Vlo¾te oddìlovaè nabídky"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "®ádný popis není k dispozici!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Pøedej dokument pøíkazu"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr "(zmìneno)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr "(pouze ke ètení)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Dokument je pouze ke ètení. Nejsou povoleny ¾ádné zmìny formátu."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Formát stránky"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Formát stránky nastaven"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Varování: Neplatná délka (platný pøíklad: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Dal¹í volby odstavce"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Speciálních vlastnosti odstavce nastaveny"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Varování: Neplatná procentní hodnota (1-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Dal¹í formuláø pro tabulku"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Formát tabulky"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Varování: ¹patná poloha kurzoru, obnovené okno"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Potvrzení: stisknìte znovu klávesu Delete"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Chyba!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Nemohu otevøít soubor:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Chyba pøi nahrávání textové tøídy"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Nemohu naèíst textovou tøídu"
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- nahrazuji implicitní hodnotou"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Varování: Ignoruji starý objekt"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Varování: potøebuji formát LyXu %.2f, ale nalezl jsem %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "CHYBA: potøebuji formát LyXu %.2f, ale nalezl jsem %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Varování!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Dokument nebyl pøeèten úplný"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Je mo¾né, ¾e dokument byl zkrácen"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "CHYBA!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "Nalezen starý formát LyXu. Naètìte jej LyXem 0.10.x!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Toto není soubor ve formátu LyXu!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Nemohu èíst soubor!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Chyba! Dokument je pouze ke ètení: "
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Chyba! Nemohu zapsat soubor: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Chyba! Nemohu správnì uzavøít soubor: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Chyba! Nemohu zapsat soubor: "
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Chyba! Nemohu pøeèíst doèasný soubor: "
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Chyba! Nemonu strávnì uzavøít soubor:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "CHYBA LYXU:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Nemohu zapsat soubor"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Chyba: Nesprávné zanoøení pøíkazù LaTeXu.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "Pracuje LaTeX..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX nefunguje!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Chybí soubor hlá¹ení:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Hotovo"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Pracuje Literate..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "Pøíkaz Literate nefunguje!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Vytváøím program..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "Vytvoøení nefungovalo!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Pracuje chktex..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex nefunguje!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Nemohu pracovat se souborem:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Nemohu otevøít doèasný soubor:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Chyba! Nemohu otevøít doèasný soubor:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Chyba pøi provádìní pøíkazu *roff v tabulce"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Nemo¾ná operace!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Nemohu vlo¾it tabulku/seznam do tabulky."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Lituji."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Zmìny v dokumentu:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Ulo¾it dokument?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Nìkteré dokumenty nebyly ulo¾eny:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Pøesto ukonèit?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Ukládám dokument"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Dokument byl ulo¾en jako"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Nemohu vymazat zálo¾ní soubor!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Nepodaøilo se ulo¾it!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Nejsou otevøeny ¾ádné dokumenty!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Zkou¹ím ulo¾it dokument "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr "jako..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "  Zdá se, ¾e se ulo¾il správnì. Vida."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "Ukládání neprobìhlo správnì! Zkou¹ím..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "Ukládání neprobìhlo správnì!. Oj. Dokument je ztracen."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Existuje zálo¾ní kopie tohoto dokumentu!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Chcete ji pou¾ít?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Zálo¾ní kopie je novìj¹í."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Chcete ji pou¾ít?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Nemohu otevøít ¹ablonu"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Nemohu zkonvertovat soubor"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Dokument je u¾ otevøen:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Opravdu ho chcete otevøít znovu?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Soubor `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' je pouze ke ètení."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Vytvoøit nový dokument s tímto jménem?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Velikost|#z"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Proveï|#P"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Zru¹it|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Hloubka znaèek"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standardní"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matematické"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Dal¹í 2"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Dal¹í 3"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Dal¹í 4"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Dal¹í 1"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Lituji, ale va¹e knihovna Xpm je pøíli¹ stará."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Tato vlastnost vy¾aduje xpm-4.7 (neboli 3.4g) nebo novìj¹í."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Zkuste spustit LyX v monochromatickém re¾imu (lyx -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" implicitní | drobné | index | poznámka | malé | normální | velké | vìt¹í | "
+"nejvìt¹í | obrovské | obrovité"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Výbìr znaèek výètù"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "CHYBA: LyX nemù¾e naèíst soubor CREDITS"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "je správnì nainstalován. Lituji, musím konèit :-("
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "V¹ichni tito lidé se podíleli na projektu KLyX. Dík,"
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Kredit"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Copyright a záruka"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "V¹ichni tito lidé se podíleli na projektu KLyX. Dík,"
+
+#: src/credits_form.C:50
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX je Copyright (C) 1995 Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Toto je volnì ¹iøitelný program; mù¾ete ho ¹íøit\n"
+"a/nebo modifikovat podle GNU General\n"
+"Public Licence jak byla zveøejnìna Free Software\n"
+"Foundation; a» u¾ verze 2 této licence, nebo\n"
+"(pokud chcete) libovolné star¹í verze."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX je ¹íøen v nadìji, ¾e bude u¾iteèný,\n"
+"ale BEZ JAKÉKOLIV ZÁRUKY;\n"
+"dokonce bez jakékoli OBCHODNÍ ZÁRUKY\n"
+"nebo VHODNOSTI K DANÉMU POU®ITÍ.\n"
+"Podrobnosti viz GNU General Public Licence.\n"
+"Kopii této licence byste mìl dostat\n"
+"spolu s tímto programem; pokud ne, napi¹te na\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA.\n"
+"Èeský pøeklad najdete na\n"
+"http://www.freesoft.cz/"
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[chyba vykreslování]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[vykresluji ... ]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[¾ádný soubor]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[nezobrazeno]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[chybí ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[neznámá chyba]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Obrázek"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "prázdná cesta k obrázku"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Clipart"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Dokument"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "Obrázek EPS"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Jméno souboru nesmí obsahovat tyto znaky:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "mezera, '#', '~', '$' a '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Varování! Nemohu otevøít adresáø."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "Vnitøní chyba LyXu!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Nelze otestovat jestli je do adresáøe povolen zápis"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Nemohu otevøít testovací soubor"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Testovací soubor byl vytvoøen, ale nelze ho zru¹it?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Chyba! Nemohu otevøít adresáø:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Chyba! Nemohu odstranit soubor:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Chyba! Nemohu vytvoøit doèasný adresáø:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Chyba! Nemohu smazat doèasný adresáø:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Vnitøní chyba!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Volání 'createDirectory' s neplatným jménem"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Chyba! Nemohu vytvoøit adresáø:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Nastav|#N"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Znaková sada nenalezena!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Chyba:\n"
+"\n"
+"Mapa klávesnice\n"
+"nenalezena"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Znaková sada:|#Z"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Jiný..."
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Jiný..."
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Jazyk"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Mapování"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Primární klávesnice"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "®ádné mapování"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Sekundární klávesnice"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Sekundární"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Primární"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "Soubor EPS"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Celostránkový náhled"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Proch."
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Zobraz rámeèek"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Proveï transformace"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Nastavení"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Úhel"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% strany"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Implicitní"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#c"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "palce|#p"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Zobrazit"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Vý¹ka"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "©íøka"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Natoèení"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Barevnì"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Nezobrazovat"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "V odstínech ¹edi"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Èernobíle"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Implicitní"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "palce"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% stránky"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% sloupce"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Popiska"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Podobrázek"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Adresáø:"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Maska:"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Soubor:"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Obnov"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Domù"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "U¾ivatel1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "U¾ivatel2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Sloupce"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Øádky"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Hledat|#H"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Nahradit èím|#N"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr " >|#F"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr " <|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Nahraï"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Zavøít"
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "velikost písma|#v"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "celá slova|#c"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Nahraï v¹e|#A#a"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Je aktivován re¾im øeckých písmen"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Je aktivován re¾im øecké klávesnice"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Re¾im øecké klávesnice je deaktivován"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "Re¾im TeXu"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Toto není èíslo"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Èíslo"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Zadej novou znaèku"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "matematický re¾im textu"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Tato akce je v matematickém re¾imu neplatná!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Re¾im matematického editoru"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Makro: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Klíè:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Poznámka:"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Klíè:"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Znaèka:"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Citace"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Polo¾ka literatury"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Citace generované BibTeXem"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Databáze:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Styl:"
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Chyba"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "Chyba LaTeXu"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Otevøená chyba"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Proch."
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Nesázet"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Nahrát"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Soubor:"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Viditelná mezera"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Pøesnì|#V"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Pou¾ij vstup|#i"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Zru¹ okraje"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Dokumenty"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Výbìr podøízeného dokumentu"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Vlo¾ení"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Vstup"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Pøesný vstup"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Klíè:|#K"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Rejstøík"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Rejstøík"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Tisk rejstøíku"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Komentáø"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Zavøít"
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Seznam algoritmù"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Seznam obrázkù"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Seznam tabulek"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Rodiè:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Typ odkazu"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Jdi na znaèku"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Zmìna znaèky"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Èíslo stránky"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Odkaz"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Strana: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Odkaz: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Obsah"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "Url|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Jméno cíle|#J"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Zavøít|#Z^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "HTML typ|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Vlo¾ení Url"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtmlUrl: "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Url: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "jiný..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Mapování klávesnice"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   volby: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Povolení interpunce na V©EMI znaky"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Obnov"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX nena¹el popisy formátù!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Zkontrolujte, ¾e soubor \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "je správnì nainstalován. Lituji, musím konèit :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX nena¹el popisy formátù!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Zkontrolujte, ¾e soubor \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "je správnì nainstalován. Lituji, musím konèit :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Zaè. odstavce"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Odsazení|#O"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Mezera|#M"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Tøída:|#T"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Styl strany:"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Písma:"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Vel. písma:"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Umístìní objektù:"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "PostScript:"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Kódování:"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Jedna"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Dvì"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Strany"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Jeden"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Dva"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Dal¹í volby:"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Jazyk:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Std. Mezera:"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Hloubka zanoøení sekcí"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Hloubka zanoøení obsahu"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Øádkování:"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Znaèky"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "Pou¾ij AMS matematiku"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Rodina:|#R"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Váha|#V"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Tvar|#T"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Velikost:|#e"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Dal¹í:|#D"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Barva:|#B"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Pøepnutí stylu jméno|#P"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Tyto nejsou nikdy zapnuty"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Tyto nejsou nikdy vypnuty"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "©íøka znaèky"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Odsazení"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Nad"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Pod"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Nad"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Pod"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Bez odsazení"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Vpravo"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Vlevo"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Do bloku"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Na støed"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Nad"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Pod"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Zlom strany"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Linky"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Zarovnání"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Vertikální mezery"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Dal¹í volby"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Nechat"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Nechat"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Typ"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Jednod.|#J"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Dvojité|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Text"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Speciál:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Okraje"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Hlavièka/Patièka"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Orientace"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Portrét|#P"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Nale¾ato|#N"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Papír:"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Atypický rozmìr"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Pou¾ít balík Geometry"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "©íøka:"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Vý¹ka:"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Nahoøe:"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Dole:"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Vlevo:"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Vpravo:"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Vý¹ka hlavièky:|#i"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Vý¹ka oddìlovaèe:|#d"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Mezera patièky:|#F"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Okraje"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Nahoøe|#N"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Dole|#D"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Vlevo|#l"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Zvlá¹tní buòka"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Vícesloupcová"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Pøidání sloupce"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Vymazání sloupce"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Pøídání øádku"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Vymazání øádku"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Vymazání tabulky"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Sloupcù"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Øádkù"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Nastav okraje"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Zru¹ okraje"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Dlouhá tab."
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Otoè o 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Oddìlovaèe øádkù|#N"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Spec. tabulka"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "První hlav."
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Hlavièka"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Patièka"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Posl. pata"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Nová strana"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Otoè o 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Dal¹í volby|#D"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Vlevo|#l"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Vpravo|#p"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Na støed|#s"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Dal¹í volby"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Rozmìr"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "nebo %"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Na støed"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "Pru¾ný výplnìk mezi jednotlivými minipage"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Zaèni novou minipage"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Odsazený odstavec"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minipage"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Floatflt"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Speciální zarovnání pro více sloupcù"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Zvlá¹tní zarovnání bunìk"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Encapsulated Postscript (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Vlo¾ený EPS (*.eps, *.ps)|#I"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Typ"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Patkové písmo|#P"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Bezpatkové písmo|#B"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Psací stroj|#s"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Kódování|#K"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Zvìt¹ení|#Z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Obnovit"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Obnovit"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Vlo¾ odkaz na znaèku|#V^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Vlo¾ èíslo strany|#S"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Jdi na znaèku"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Soubor se nepodaøilo ulo¾it. Pøejmenovat a zkusit znovu?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Pokud ne, dokument není ulo¾en.)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "©ablony"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Zadejte jméno pod kterým má být dokument ulo¾en"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Zru¹eno."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Stejné jméno jako dokument u¾ má:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Pøesto ulo¾it?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Je otevøen jiný dokument stejného jména!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Nahradit aktuálním?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Dokument pøejmenován na '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', ale neulo¾en..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Dokument u¾ existuje:"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Nahradit soubor?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Lituji. Toto nemù¾ete dìlat bìhem vykreslování obrázku."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Prosím poèkejte nìkolik sekund ne¾ skonèí a zkuste to znovu."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(nebo zru¹te proces gs ruènì a zkuste to znovu.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Toto nelze udìlat, pokud probíhá kontrola pravopisu."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Nejprve zastavte korektor."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Nalezena jedna chyba"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Mìl byste se ji pokusit opravit."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " chyb nalezeno."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Mìl byste se pokusit je opravit."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "Bìhem zpracování LaTeXem se vyskytly chyby."
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "©patný typ dokumentu"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "Operace není povolena na tomto dokumentu"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "Bìhem zpracování LaTeXem se vyskytly chyby."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex se nedá pou¾ít pro LinuxDoc."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Bez varování."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Vyskytlo se jedno varování."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Pou¾ijte 'Úpravy->Jdi na chybu', abyste je na¹el."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " varování."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Pou¾ijte 'Úpravy->Jdi na chybu', abyste je na¹el."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex probìhl v poøádku."
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Zdá se, ¾e chktex nefunguje."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Provádím pøíkaz:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Soubor u¾ existuje:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Chcete pøepsat obsah souboru?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Zru¹eno."
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Pøehledný soubor LaTeXu byl ulo¾en jako"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Tøída dokumentu musí být linuxdoc."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Vytváøím LinuxDoc SGML soubor `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "LinuxDoc SGML soubor ulo¾ jako"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "Tøída dokumentu musí být linuxdoc."
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Vytváøím LinuxDoc SGML soubor `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "LinuxDoc SGML soubor ulo¾ jako"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Ascii soubor ulo¾en jako"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Automatické ukládání dokumentu..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Automatické ulo¾ení se nepovedlo!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Soubor pro vlo¾ení"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Chyba! Nemohu otevøít specifikovaný soubor:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Obsah"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Vlo¾ odkaz na znaèku"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Vkládám poznámku pod èarou..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Importuji soubor ve formátu LinuxDoc SGML `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Konvertuji LinuxDoc do formátu LaTeX..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Konvertuji LinuxDoc do formátu dvi..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Konvertuji LinuxDoc do formátu dvi..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Písmo"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Nastavení odstavce"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Formát dokumentu"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Uvozovky"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "Preambule LaTeXu"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Chcete ulo¾it souèasná nastavení"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "písma, dokumentu, formátu stránky a uvozovek"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "jako implicitní?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Otevøení/zavøení..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Není k dispozici dal¹í informace pro funkci Zpìt"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "Vrácení funkce zpìt je¹tì není v matematickém re¾imu podporováno."
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Není k dispozici dal¹í informace pro vrácení funkce Zpìt."
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Písmo: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Hloubka: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Vkládám poznámku na okraji..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Parametry odstavce zkopírovány"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Parametry odstavce nastaveny"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Hloubka zanoøení zmìnìna (v mo¾ném rozsahu)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Formát odstavce nastaven."
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Mám nìkteré parametry nastavit na"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "inplicitní hodnoty této tøídy dokumentù?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Chyby konverze!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Neleze pøepnout do vybrané tøídy dokumentu"
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Zpìt do pùvodní tøídy dokumentu"
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Pøevádím dokument do nové tøídy dokumentù..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Jeden odstavec se nepodaøilo zkonvertovat"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " odstavce se nepodaøilo zkonvertovat"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "do vybrané tøídy dokumentu"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Formát dokumentu nastaven"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "®ádné dal¹í poznámky"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Typ uvozovek nastaven"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "Preambule LaTeXu nastavena"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Není mo¾né vlo¾it tabulku do tabulky."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Vkládám tabulku..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tabulka vlo¾ena"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "CHYBA! Nemohu tisknout"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Zkontroluje 'rozsah stran'!"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Zkontrolujte 'poèet kopií'!"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Chyba:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Nemohu tisknout"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Zkontrolujte, zda jsou va¹e parametry správnì"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Vkládám obrázek..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Obrázek vlo¾en"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Parametry obrazovky nastaveny"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "Volby LaTeXu"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Bì¾í configure..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Nové naètení konfigurace..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Systém je pøekonfigurován."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Musíte LyX spustit znovu, aby jste mohl pou¾ívat"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "upravené tøídy dokumentù."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Nemohu tuto znaèku"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "v aktuálním dokumentu nalézt."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** ®ádný dokument ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** V dokumentu nebyly nalezeny ¾ádné znaèky ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr "¾ádná | implicitní | malá | støední | velká | výplnìk | délka "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr "Beze zmìny %l | Patkové | Bezpatkové | Psací stroj %l | Pùvodní "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr "Beze zmìny %l| Normální | Tuèné %l| Pùvodní "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr "Beze zmìny %l| Vzpøímené | Kurzíva | Sklonìné | Kapitálky %l| Pùvodní "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+"Beze zmìny %l| Drobné | Nejmen¹í | Men¹í | Malé | Normální | Velké | Vìt¹í | "
+"Nejvìt¹í | Obrovské | Obrovité %l| Vìt¹í | Men¹í | Pùvodní "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr "Beze zmìny %l| Zvýraznìné | Podtr¾ené | Jméno | LaTeX %l| Pùvodní "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+"Beze zmìny %l| ®ádná | Èerná | Bílá | Èervená | Zelená | Modrá | Azurová | "
+"Purpurová | ®lutá %l| Pùvodní "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr "Jeden | Jeden a pùl | Dva | Jiné "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr "Malá | Støední | Velká | Jiná "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+"Implicitní | Atypický | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 "
+"| B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+"Nic | A4 malé okraje (jen portrét) | A4 velmi malé okraje (jen portrét) | A4 "
+"velmi ¹iroké okraje (jen portrét) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "Znak LyXu"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Zmiz"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Ano|Aa#a"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Ne|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Smazat|#a"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "V¹echny zmìny se budou ignorovat"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Dokument je pouze ke ètení:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Varování: nemohu najít cestu k binárnímu souboru."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Jestli¾e máte tyto problémy, zkuste startoval LyX s absolutní cestou."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "Promìnná prostøedí LYX_DIR_10x není dobøe nastavena"
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Systémový adresáø nastaven na: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Varování! Nemohu otevøít systémový adresáø."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Pou¾ijte pøepínaè -sysdir nebo"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "nastavte promìnnou prostøedí LYX_DIR_10x na adresáø s LyXem"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "obsahujícím soubor `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Pou¾ijí se implicitní hodnoty."
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " ale oèekávejte problémy."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Oèekávejte problémy."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Nemáte vytvoøen osobní adresáø LyXu."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Potøebujete ho pro uchování va¹eho nastavení."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Mám ho pro vás vytvoøit (doporuèeno)"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Nemáte vytvoøen osobní adresáø LyXu."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Vytváøím adresáø "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " a spou¹tím konfiguraci..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Ukonèenou chybou. Místo toho bude pou¾it "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr "."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Hotovo!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "Varování LyXu!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Chyba pøi ètení "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Pou¾ijí se implicitní hodnoty."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Nastavují debug level na "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Pou¾ití: lyx [ pøepínaèe ] [ jméno.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Pøepínaèe na pøíkazové øádce (rozli¹ujte malá a velká písmena):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           popis pou¾ití LyXu"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       nastav systémový adresáø na x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x        nastav ¹íøku hlavního okna"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y        nastav vý¹ku hlavního okna"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x        nastav x souøadnici hlavního okna"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y        nastav y souøadnici hlavního okna"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          kde n je souèet ladících hodnot. Vyzkou¹ejte -dbg 65535 "
+"-help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        prohodí barvu pozadí a popøedí"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           spustí LyX v èernobílém re¾imu"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr ""
+"   -FastSelection  pou¾ije rychlou rutinu pro vykreslení oznaèeného textu\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Dal¹í pøepínaèe najdete na manuálové stránce LyXu."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Chybí èíslo pro pøepínaè -dbg!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Chybí adresáø pro pøepínaè -switch!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Fax è.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Jméno cíle|#J"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Spoleènost|#S"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Adresáø"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Vyber z|#V"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Pøidej k|#P"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Vyma¾ z|#m"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Ulo¾|#U"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Cíl:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Komentáø:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Faxový soubor:"
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Prázdný telefonní seznam"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Ulo¾it (nutné)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Není mo¾no otevøít tel. seznam: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "®ádný nebo prázdný soubor hlá¹ení!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Okno hlá¹ení"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cPrázdný tel. seznam"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Telefonní seznam"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Patkové"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Bezpatkové"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Psací stroj"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Symbol"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Zdìdìné"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ingorováno"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Støední"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Tuèné"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Vzpøímené"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Kurzíva"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Sklonìné"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Kapitálky"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Drobné"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Nejmen¹í"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Men¹í"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Malé"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normální"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Velké"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Vìt¹í"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Nejvìt¹í"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Obrovské"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Obrovité"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Vìt¹í"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Men¹í"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "drobné"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "mejmen¹í"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "men¹í"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "malé"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normální"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "velké"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "vìt¹í"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "nejvìt¹í"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "obrovské"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "obrovité"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "vìt¹í"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "men¹í"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "zdìdìné"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ignoruj"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Vyp"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "Zap"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Pøepnout"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "®ádná"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Èerná"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Bílá"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Èervvená"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Zelená"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Modrá"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Azurová"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Purpurová"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "®lutá"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Matematika"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Objekt"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Zvýraznìní "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Podtr¾ení "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Slovo "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "LaTeX "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Implicitní "
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Neznámá sekvence:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Neznámá akce"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Pøíkaz není povolen pokud není otevøen dokument"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Dokument je pouze ke ètení"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Textový re¾im"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Neznámý typ exportu: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Neznámý typ importu: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Formát "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " není znám"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Nejsou k dispozici odkazy pro pøepnutí"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Znaèka odstranìna"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Znaèka nastavena"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Znaèka vypnuta"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Znaèka zapnuta"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "Push-toolbar potøebuje parametr > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Pou¾ití: toolbar-add-to <pøíkaz LyXu>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Chybìjící parametr"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Toto je povoleno pouze v matematickém re¾imu!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Otvírám podøízený dokument "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Neznámý typ poznámky pod èarou"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Dokument je pouze ke ètení"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Zadejte jméno nového dokumentu"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "novy"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Chcete teï uzavøít tento dokument?\n"
+"('Ne' pouze pøepne do otevøené verze)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Chcete otevøít dokument?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Vkládám dokument"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "otevøen."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Vyberte ¹ablonu"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Pøíklady"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Vyberte dokument, který chcete naèíst"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Nemohu otevøít dokument"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Zvolte ASCII soubor pro import"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Je otevøen jiný dokument stejného jména!"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "Pøepsat?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Importuji ASCII soubor"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "soubor ASCII "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "vlo¾en."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Zvolte soubor Noweb pro import"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Zvolte soubor LaTeX pro import"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Importuji LaTeX soubor"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Importuji Noweb soubor"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Soubor Noweb"
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "Soubor LaTeX"
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "Nemohu naèíst soubor Nowebu"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Nemohu naèíst soubor LaTeXu"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Vyberte dokument, který chcete vlo¾it"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Vkládám dokument"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "vlo¾en."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Nemohu vlo¾it dokument"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Otevøený objekt"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "neznámý"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Ulo¾it dokument a pokraèovat?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: Poèáteèní popis"
+
+#: src/lyxvc.C:184
+msgid "(no initial description)"
+msgstr "(Poèáteèní popis chybí)"
+
+#: src/lyxvc.C:187
+msgid "Info"
+msgstr "Info"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr "Tento dokument NEBYL registrován"
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Zpráva"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Ignorovat zmìny a pokraèovat?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr ""
+"Pokud se vrátíte zpìt ztratíte v¹echny zmìny, které byly v dokumentu "
+"provedeny od posledního záznamu."
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr ""
+"Pokud se vrátíte zpìt ztratíte v¹echny zmìny, které byly v dokumentu "
+"provedeny od posledního záznamu."
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Stále to chcete udìlat?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "®ádná historie RCS!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "RCS historie"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Zavøít "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funkce"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Øeètina"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr " Û"
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr "± ´"
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr "£ @"
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr "S  ò"
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Dal¹í"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "OK  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Sloupce"
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Vertikální zarovnání"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Horizontální zarovnání"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "OK "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Úzká"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Støední"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "©iroká"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Záporná"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Ètverèík"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "2 ètverèíky"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Oddìlovaè"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Svorky"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Mezery"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matice"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Nahoøe | Uprostøed | Dole"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Matematický panel"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Soubor"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Úpravy"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Formát"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Vlo¾ení"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Nápovìda"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#S"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#p"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#F"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#V"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#a"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#N"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Parametry obrazovky"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Import%t|LaTeX...%x30|Ascii text po øádcích...%x31|Ascii text po "
+"odstavcích%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "FIM|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FIM|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIM|Pp#p#P"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Export%t|jako LaTeX...%x40|jako DVI...%x41|jako PostScript...%x42|jako Ascii "
+"text...%x43|Nastavitelný...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Export%t|jako LinuxDoc...%x40|jako DVI...%x41|jako PostScript...%x42|jako "
+"Ascii text...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Export%t|jako LinuxDoc...%x40|jako DVI...%x41|jako PostScript...%x42|jako "
+"Ascii text...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Tt#t#T"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|mM#m#M"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Nový...|Nový podle ¹ablony...|Otevøít...%l|Zavøít|Ulo¾it|Ulo¾it "
+"jako...|Obnov ulo¾enou verzi%l|Náhled dvi|Náhled PostScript|Obnov dvi|Obnov "
+"PostScript%l|Vytvoø program%l|Tisk...|Fax..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|tT#t#T"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|Oo#o#O"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|Cc#c#C"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Ss#s#S"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|Aa#a#A"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|Rr#r#R"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|wW#w#W"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|vV#v#V"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|Uu#u#U"
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr "FM|Bb#b#B"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|Ff#f#F"
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Import%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Export%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Konec%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|Ii#i#I"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|Ee#e#E"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Import%t|LaTeX...%x15|Ascii text po øádcích...%x16|Ascii text po "
+"odstavcích...%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Nový...|Nový podle ¹ablony...|Otevøít...%l|Importovat%m%l|Ukonèit%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Plovoucí objekty%t|Otevøení/Uzavøení%x21|Spojení%x22|Otevøení v¹ech "
+"poznámek%x23|Uzavøení v¹ech poznámek%x24|Otevøení v¹ech objektù%x25|Uzavøení "
+"v¹ech objektù%x26%l|Odstranìní v¹ech chybových hlá¹ení%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|Oo#o#O"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|Mm#m#M"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|Aa#a#A"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|Cc#c#C"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|Ff#f#F"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|Tt#t#T"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|Rr#r#R"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabulka%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Vícesloupcový%B%44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Vícesloupcový%b%44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|Mm#m#M"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Linka nahoøe%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Linka nahoøe%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|Tt#t#T"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Linka dole%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Linka dole%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|Bb#b#B"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Linka vlevo%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Linka vlevo%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Ll#l#L"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Linka vpravo%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Linka vpravo%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|Rr#r#R"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Zarovnání vlevo%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Zarovnání vlevo%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Zarovnání vpravo%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Zarovnání vpravo%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Zarovnání na støed%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Zarovnání na støed%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|Cc#c#C"
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Pøidání øádku%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|oO#o#O"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Pøidání sloupce%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|uU#u#U"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Vymazání øádku%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|wW#w#W"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Vymazání sloupce%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Vymazání tabulky%x31"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|Dd#d#D"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Vlo¾ení tabulky%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|Ii#i#I"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Správa verzí%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Registrace%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Zapi¹ zmìny%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Vyjmi pro editaci%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Zapi¹ zmìny%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Vyjmi pro editaci%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Návrat k poslední verzi%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Zru¹ení posledního zápisu%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Uka¾ historii%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Registrace%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Rr#r#R"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|Ii#i#I"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|Oo#o#O"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|lL#l#l"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|Uu#u#U"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|Hh#h#H"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Zpìt|Opakovat %l|Vystøihni|Kopíruj|Vlo¾%l|Hledání a nahrazení...|Jdi na "
+"chybu|Jdi na komentáø|Plovoucí objekty%m|Tabulka%m|Kontrola "
+"pravopisu...|Kontrola TeXu|Struktura dokumentu...%l|Správa "
+"verzí%m%l|Zobrazení zpráv LaTeXu%l|Vlo¾ vybraný text jako øádky|Vlo¾ vybraný "
+"text jako odstavce"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Uu#u#U"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|Rr#r#R"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Cc#c#C"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|oO#o#O"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|Pp#p#P"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|Ff#f#F"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|Ee#e#E"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|Nn#n#N"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|Ii#i#I"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|Tt#t#T"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|Ss#s#S"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|hH#h#H"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|aA#a#A"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Vv#v#V"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|wW#w#W"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|Ll#l#L"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|gG#g#G"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Písmo...|Odstavec...|Dokument...|Stránka...|Tabulka...|Uvozovky...%l|Zvýraznì"
+"ní%b|Jméno%b|Tuènì%b|TeX%b|Zmìò hloubku zanoøení|Preambule LaTeXu...%l|Ulo¾ "
+"nastavení jako implicitní"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|Cc#c#C"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|Pp#p#P"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|Dd#d#D"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|aA#a#A"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|eE#e#E"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|Qq#q#Q"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|mM#m#M"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|Nn#n#N"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Bb#b#B"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Tt#t#T"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|vV#v#V"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|Ll#l#L"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|Ss#s#S"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Vlo¾ ASCII soubor%t|Jako øádky%x41|Jako Odstavce%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|Ll#l#L"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|Pp#p#P"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Seznamy a obsah%t|Obsah%x21|Seznam obrázkù%x22|Seznam tabulek%x23|Seznam "
+"algoritmù%x24|Rejstøík%x25|Citace z BibTeXu...%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|Cc#c#C"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|Ff#f#F"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|Tt#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|Aa#a#A"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|Ii#i#I"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|Bb#b#B"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Objekty%t|Plovoucí obrázek%x71|Plovoucí tabulka%x72|©iroký plovoucí "
+"obrázek%x73|©iroká plovoucí tabulka%l%x74|Plovoucí algoritmus%x75"
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|Tt#t#T"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|Ww#w#W"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|iI#i#I"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|Aa#a#A"
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Speciální znak%t|Výplnìk%x31|Dìlení slova%x32|Pevná mezera%x33|Zlom "
+"øádku%x34|Tøi teèky (...)%x35|Teèka na konci vìty%x36|Znaèka palce "
+"(\")%x37||Oddìlovaè nabídky %x38"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|Hh#h#H"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|Pp#p#P"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|Bb#b#B"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|Ll#l#L"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|iI#i#I"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|Ee#e#E"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|Qq#q#Q"
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr "IMS|Mm#m#M"
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Obrázek...|Tabulka...%l|Pøipoj soubor...|Vlo¾ ASCII soubor%m|Vlo¾ soubor "
+"LyXu...%l|Poznámka pod èarou|Poznámka na okraji|Plovoucí objekty%m%l|Seznamy "
+"a obsah%m%l|Speciální znak%m%l|Komentáø...|Znaèka...|Odkaz...|Citace "
+"Reference...|Polo¾ka rejstøíku...|Polo¾ka rejstøíku pro poslední slovo"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|bB#b#B"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|cC#c#C"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|Aa#a#A"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|Xx#x#X"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|Ff#f#F"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|Mm#m#M"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|oO#o#O"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|Tt#t#T"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|Ss#s#S"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|Nn#n#N"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Ll#l#L"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|rR#r#R"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|iI#i#I"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|dD#d#D"
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "IM|wW#w#W"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr "IM|Uu#u#U"
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Zlomek|Odmocnina|Exponent|Index|Suma|Integrál%l|Mat. re¾im|Rovnice%l|Panel..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Ff#f#F"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|Ss#s#S"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Ee#e#E"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|xX#x#X"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|uU#u#U"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#i#I"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#m#M"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|Dd#d#D"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|Pp#p#P"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Písma obrazovky...|Kontrola "
+"pravopisu...|KLávesnice...|LaTeX...%l|Pøekonfiguruj"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|Ff#f#F"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Ss#s#S"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Kk#k#K"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#l#L"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|Rr#r#R"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Úvod|Prùvodce|U¾ivatelská pøíruèka|Pokroèilá editace|Nastavování|Referenèní "
+"pøíruèka|Známé chyby|Konfigurace LaTeXu%l|Copyright a "
+"Záruka...|Zásluhy...|Verze..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr "HM|Ii#I#i"
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|Tt#T#t"
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "HM|Uu#U#u"
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr "HM|xX#x#X"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Cc#C#c"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|Kk#K#k"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "HM|Ll#L#l"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|oO#o#O"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|eE#e#E"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr "HM|Vv#v#V"
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "LyX verze "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " z "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Adresáø knihoven: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Adresáø u¾ivatele: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Otevírám soubor s nápovìdou"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Provádím:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Není otevøen ¾ádný dokument *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Vítejte v LyXu!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Toto je v tomto formátu nesmyslné!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Chyba: Nemodu pøejít do adresáøe: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "Vnitøní chyba LyXu:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Podteèení zásobníku cesty."
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Tisk do"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Tisk.|#T"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Souboru|#S"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "V¹ech stran|#V"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Jen lichých stran|#l"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Jen sudých stran|#s"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Normální|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Pozpátku|#P"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Poøadí"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Strany: "
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Kopie"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Poèet:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Netøídìnì"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Typ souboru"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Pøíkaz:|#P"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "PostScript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#A"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Pou¾ij jazyk dokumentu"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Pou¾ij jiný jazyk:"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Slo¾ená slova jsou povolena"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Pøepni vstupní kódování ispellu"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Pou¾ij alternativní osovní slovník"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Zvlá¹tní znaky povolené ve slovech:|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Slovník"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Zamìnit"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Podobná\n"
+"slova"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Nastavení kontroloru..."
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Spustit kontrolu|#S"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Vlo¾it do osobního slovníku|#V"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignoruj slovo|#I"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Pro tentokrát akceptuj|#a"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Zastav kontrolu|#Z"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Ukonèit kontrolor|#U^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Nahraï slovo|#N"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Nastavení kontroly pravopisu"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Kontrola pravopisu"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Kontrolor pravopisu havaroval. *Jedna* z mo¾ných pøíèin\n"
+"mù¾e být v tom, ¾e nemáte nainstalovaný slovník\n"
+"pro jazyk tohoto dokumentu. Zkontrolujte\n"
+"/usr/lib/ispell nebo nastavte jiný slovník\n"
+"v menu Nastavení kontroly pravopisu."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " slov zkontrolováno."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " slovo zkontrováno"
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Kontrola pravopisu ukonèena!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Korektor pravopisu pøestal pracovat.\n"
+"Mo¾ná byl zru¹en (kill)."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Vícesloupcové buòky mohou být pouze horizontálnì."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr "Nemù¾ete takto napsat dvì mezery. Pøeètìte si Prùvodce."
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr "Nemù¾ete napsat mezeru na zaèátku odstavce. Pøeètìte si Prùvodce."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Nemo¾ná operace"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Nemù¾ete vlo¾it jeden objekt do jiného!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Nemù¾ete vlo¾it poznámku na okraji do prostøedí minipage!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Nelze rozdìlit tabulku."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Objekt by obsahoval objekt!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Otevøený objekt"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Uzavøený objekt"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Nic na práci"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr "Není nastavena ¾ádná zmìna písma. Nastavte ji v menu Formát/písmo."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Nevím co dìlat s polovinou objektu."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "lituji."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Nevím co dìlat s polovinou tabulky."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Nemohu vlo¾it objekt do objektu!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Buòka tabulky nemù¾e obsahovat víc ne¾ jeden odstavec!"
diff --git a/po/da.po b/po/da.po
new file mode 100644 (file)
index 0000000..1be8342
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,4859 @@
+# Dansk oversættelse af LyX
+# Copyright (C) 1997-1999 LyX Team
+# Asger Alstrup <alstrup@diku.dk>, 1997-1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lyx 1.0.2\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:46+02:00\n"
+"Last-Translator: Asger Alstrup <alstrup@diku.dk>\n"
+"Language-Team: dansk <da@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+# Inset = indsættelse
+# Float = flyder
+# Paragraph = afsnit
+# Paragraph environment = typografi
+# Environment depth = omgivelsesdybde
+# Bullet = Punktliste
+# Horizontal/Vertical fill = udfylder
+# Keymap = Tastaturomdefinition
+# Label = referencebogmærke
+# Margin note = marginnotat
+# Note = notat
+# Document class = tekstklasse
+# Protected space = hårdt mellemrum
+# Error box = fejlbesked
+# Paper layout = papirindstillinger
+# Layout = layout
+# Minipage = miniside
+# Build program = dan program
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Formatterer dokument..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Ikke flere fejl"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "ChkTeX advarsel id #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Henter skrifttype ind i X-serveren..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Kørsel #"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "LaTeX kørsel # "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Kører MakeIndex."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Kører BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "INGEN LATEX LOG FIL!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "Log efter dannelse af program"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "LaTeX Log"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Beskriv kommando"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Markér forrige bogstav"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Indsæt BibTeX"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Autogemmer"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Gå til begyndelsen af dokumentet"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Markér til begyndelsen af dokumentet"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Luk"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Gå til slutningen af dokumentet"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Markér til slutningen af dokumentet"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Fax"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Nyt dokument"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Nyt dokument fra skabelon"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Åben"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Skift til forrige dokument"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Udskriv"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Gendan sidst gemte"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Opdatér DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Opdatér PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Se DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Se PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "Dan program"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Check TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Gem"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Gem som"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Annullér"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Gå et bogstav tilbage"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Gå et bogstav fremad"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Indsæt citat"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Udfør kommando"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Kopiér"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Klip"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Formindsk omgivelsedybde"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Forøg omgivelsedybde"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Ændr omgivelsedybde"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Redigér punktliste-indstillinger"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Gå ned"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Markér næste linie"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Vælg typografi"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Gå til næste fejl"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Indsæt figur"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Søg & Erstat"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Skift markør følger/følger ikke scrollbar"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Fed til/fra"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Programstil til/fra"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Standard skrift"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Fremhævet til/fra"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Brugerdefineret stil til/fra"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Navnestil til/fra"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Ordinær skrift til/fra"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Grotesk skrift til/fra"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Sæt skriftstørrelse"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Vis skriftstatus"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Understregning til/fra"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Indsæt fodnote"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Markér næste bogstav"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Indsæt horisontal udfylder"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Indsæt orddelingspunkt"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Indsæt ellipse (...)"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Indsæt sætningsafsluttende punktum"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Slå tastaturomdefinition fra"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Brug primær tastaturomdefinition"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Brug sekundær tastaturomdefinition"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Tastaturomdefinition til/fra"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Indsæt referencebogmærke"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Kopiér typografi"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Indsæt typografi"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Indstil papirstørrelse og marginer"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Gå til begyndelsen af linien"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Markér til begyndelsen af linien"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Gå til slutningen af linien"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Markér til slutningen af linien"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Afslut"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Indsæt marginnotat"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Græske bogstaver"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Formel"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Gå et afsnit ned"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Markér næste afsnit"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Gå et afsnit op"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Markér forrige afsnit"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Indsæt"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Indsæt hårdt mellemrum"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Indsæt citationstegn"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Genkonfigurér"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Gendan"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Indsæt krydsreference"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Indsæt tabel"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "TeX til/fra"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Fortryd"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Smelt"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Importér dokument"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Fjern alle fejlbeskeder"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Indsæt menuadskiller"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Mangler beskrivelse!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Send dokumentet til kommando"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Ændret)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (skrivebeskyttet)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Dokumentet er skrivebeskyttet. Ændringer er ikke tilladt."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Papirindstillinger"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Papirindstillinger defineret"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Advarsel: Ugyldig længde (gyldigt eksempel: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Ekstra afsnitsindstillinger"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Ekstra afsnitsindstillinger defineret"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Advarsel: Ugyldig procent værdi (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Ekstra tabelindstillinger"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Tabelindstillinger"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Advarsel: Forkert markørposition, vindue opdateret"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Bekræftelse: Tryk slet-knap igen"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Fejl!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Kan ikke åbne den valgte fil:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Fejl under hentning af tekstklasse"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Kan ikke hente tekstklasse "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- erstatter standard"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Advarsel: Ignorerer gammel indsættelse"
+
+# , c-format
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Advarsel: lyxformat %.2f kræves, men %.2f fundet\n"
+
+# , c-format
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "Fejl: lyxformat %.2f kræves, men %.2f fundet\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Advarsel!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Indlæsning af dokumentet er ikke fuldstændig"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Dokumentet er måske forkortet"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "FEJL!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "Gammelt LyX filformat fundet. Brug LyX 0.10.x for at læse dette!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Ikke en LyX fil!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Kan ikke læse filen!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Fejl! Dokumentet er skrivebeskyttet: "
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Fejl! Kan ikke skrive til fil: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Fejl! Filen blev ikke lukket korrekt: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Fejl: Kan ikke skrive fil:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Kan ikke åbne midlertidig fil:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Fejl: Filen blev ikke lukket korrekt:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "LYX_FEJL:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Kan ikke skrive fil"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Fejl: Forkert dybde for LatexType kommando.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "Kører LaTeX..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX virkede ikke!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Mangler logfil:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Færdig"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Kører Literate..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "Literate virkede ikke!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Danner program"
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "Kunne ikke danne program!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Kører chktex..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex virkede ikke!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Kunne ikke køre med filen:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Kan ikke åbne midlertidig fil:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Fejl! Kan ikke åbne midlertidig fil:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Fejl under udførelse af *roff kommando på tabel"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Umulig funktion!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Kan ikke indsætte tabel/liste i tabel."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Beklager."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Dokumentet er ændret:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Gem dokument?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Nogle dokumenter er ikke gemt:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Vil du afslutte alligevel?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Gemmer dokument"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Dokument gemt som"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Kunne ikke slette autolagret fil!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Lagring virkede ikke!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Ingen dokumenter åbne!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Forsøger at gemme dokument "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " som..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "  Lagring syntes at lykkedes. Puha."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "  Lagring virkede ikke! Forsøger..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  Lagring virkede ikke! Surt. Dokumentet er tabt."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "En nødlagring af dette dokumentet findes!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Skal vi forsøge at åbne denne i stedet?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Autolagret fil er nyere."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Skal vi åbne denne i stedet?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Kan ikke åbne skabelon"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Kunne ikke konvertere filen"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Dokumentet er allerede åbent:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Ønsker du at genåbne dokumentet?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Filen `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' er skrivebeskyttet."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Skal der oprettes et nyt dokument med dette navn?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Størrelse|#S"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Anvend|#A"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Annullér|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Punktdybde"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standard|#t"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matematik|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Beklager, dit libXpm bibliotek er for gammelt."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Denne funktion kræver xpm-4.7 (alias 3.4g) eller nyere."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Prøv at kører LyX i monokrom (lyx -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" standard | bette | skriveskrift | fodnote | lille | normal | stor | større "
+"| størst | kæmpe | enorm"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Punktpriksvalg"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "Fejl: LyX kunne ikke læse CREDITS filen"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Vær venlig at installere filen korrekt for at værdsætte"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "det store stykke arbejde, frivillige har lagt i LyX projektet."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Rulletekster"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Copyright og garanti"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Alle disse mennesker har bidraget til LyX projektet. Tak,"
+
+#: src/credits_form.C:50
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX.  Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Dette program er fri software; du kan redistribuere det\n"
+"og/eller modificere det efter krav fastsat i \"GNU General\n"
+"Public License\" som den er udgivet af \"Free Software\n"
+"Foundation\"; enten version 2 af licensen, eller\n"
+"(hvis du ønsker det) en nyere version."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX distribueres i håbet om at det er\n"
+"brugbart, men uden nogen form for garanti.\n"
+"Du burde have modtaget en kopi af\n"
+"\"GNU General Public License\" sammen\n"
+"med dette program. Hvis ikke du har,\n"
+"så skriv til:\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[fejl i fremvisning]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[beregner...]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[ingen fil]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[ikke vist]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[ingen ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[ukendt fejl]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Figur"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "tom sti til figur"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Udklipsbilleder"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Dokument"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "EPS billede"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Filnavn kan ikke indeholde nogen af disse tegn:"
+
+# , c-format
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "mellemrum, '#', '~', '$' eller '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Advarsel! Kunne ikke åbne bibliotek."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "LyX intern fejl!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Kunne ikke afgøre om biblioteket er skrivebeskyttet"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Kan ikke åbne testfil i bibliotek"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Gemte testfil, men kan ikke slette den?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Fejl! Kan ikke åbne bibliotek:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Fejl: Kunne ikke slette fil:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Fejl: Kunne ikke oprette midlertidigt bibliotek:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Fejl: Kunne ikke slette midlertidigt bibliotek:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Intern fejl!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Kald af createDirectory med ugyldigt navn"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Fejl! Kunne ikke oprette bibliotek:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Sæt tegnsæt|#t"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Tegnsæt ikke fundet!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Fejl:\n"
+"Tastaturomdefinition\n"
+"ikke fundet"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Tegnsæt:|#s"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Andet...|#A"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Andet...|#T"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Sprog"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Tastaturomdefinition"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Primær tastaturomdefinition|#r"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Ingen tastaturomdefinition|#g"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Sekundær tastaturomdefinition|#k"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Sekundær"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Primær"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "EPS fil|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Fuldskærmsvisning|#F"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Gennemse...|#G"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Vis ramme|#r"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Udfør translationer|#U"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Indstillinger"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Vinkel:|#V"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% af siden|#s"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Standard|#n"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "tommer|#o"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Vis"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Højde"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Bredde"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Rotation"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Vis i farver|#f"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Vis ikke dette billede|#i"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Vis i gråtoner|#g"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Vis i sort/hvid|#h"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Standard|#S"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#c"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "tommer|#t"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% af siden|#s"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% af kolonne|#o"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Billedtekst|#B"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Underfigur|#U"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Bibliotek:|#B"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Mønster:|#M"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Filnavn:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Opdatér"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Hjem"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Bruger1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Bruger2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Kolonner"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Rækker"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Find|#F"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Erstat med|#m"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr "@<|#T"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Erstat|#E"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Luk|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Forskel på store/små bogstaver|#b"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Hele ord|#o"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Erstat alle|#a"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Græsk formel tilstand"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Græsk formel tastatur aktiveret"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Græsk formel tastatur deaktiveret"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "TeX stil"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Ingen nummerering"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Nummerering"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Navngiv referencebogmærke som skal indsættes:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "Tekststil i formel"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Ugyldig funktion i formel!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Formeleditor"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Makro: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Nøgle:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Bemærkning:|#B"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Nøgle:|#N"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Markat:|#M"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Citation"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Reference"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "BibTeX genererede referencer"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Database:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Stil:   "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Fejl"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "LaTeX Fejl"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Fejlbesked åbnet"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Gennemse|#G"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Undlad sætning|#U"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Indlæs|#I"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Filnavn:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Synlig mellemrum|#S"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Ordret|#O"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Brug 'input'|#B"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Brug 'include'|#c"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Dokumenter"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Vælg underdokument"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Inkludér"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Input"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Indsæt ordret"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Nøgleord|#N"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Indeks"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Indeks"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Udskriv indeks"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Notat"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Luk|#L^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Liste over algoritmer"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Figurliste"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Liste over tabeller"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Hoveddokument:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Referencestil"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Gå til bogmærke"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Ændr referencebogmærke"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Sidetal"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Afsnitsreference"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Side: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Ref: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Indholdsfortegnelse"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "Url|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Navn:|#M"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Luk|#L^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "HTML stil:|#l"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Indsæt URL"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtmlUrl: "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Url: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "Andet..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Tastaturomdefinition"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   indstillinger: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Tillad accenter på ALLE bogstaver"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Opdatér|#O"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX kunne ikke finde sine typografibeskrivelser!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Undersøg om filen \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "er installeret korrekt. Beklager, kan ikke fortsætte :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX kunne ikke finde sine typografibeskrivelser!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Undersøg om filen \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "er installeret korrekt. Beklager, kan ikke fortsætte :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Adskillelse"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Indrykning|#I"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Afstand|#f"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Klasse:|#K"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Papirstil:|#P"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Skrifttyper:|#S"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Skrift størrelse:|#r"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Placering af flydere:|#c"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "PS driver:|#d"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Koding:|#o"
+
+# n
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "En|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "To|#T"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Sider"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "En|#E"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "To|#w"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Ekstra indstillinger:|#x"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Sprog:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Standard afstand:|#u"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Afsnitsnummerdybde"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Indholdsfortegnelsesdybde"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Mellemrum|#M"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Punktformer|#f"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "Brug AMS matematik|#m"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Familie:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Serie:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Form:|#o"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Størrelse|#t"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Diverse:|#D"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Farve:|#v"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Skal disse omskifte?|#t"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Disse omskifter ikke"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Disse omskrifter"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Markatbredde:|#b"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Indrykning"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Over|#v"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Under|#n"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Over|#O"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Under|#U"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Ingen indrykning|#I"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Højre|#H"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Venstre|#V"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Blok|#B"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Centrér|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Over|#e"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Under|#r"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Sideskift"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Linier"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Justering"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Vertikal afstand"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Ekstra valg"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Hold|#H"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Hold|#d"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Slags:|#l"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Enkel:|#E"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Dobbel|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Tekst"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Speciel:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Marginer"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Top- og bundmarginer"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Orientering"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Højformat|#H"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Breddeformat|#B"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Papirstørrelse|#P"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Egen papirstørrelse"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Brug \"Geometry\" pakken|#B"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Bredde:|#B"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Højde:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Top:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Bund:|#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Venstre:|#e"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Højre:|#H"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Hovedehøjde:|#o"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Hovedeadskillelse:|#d"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Bundadskillelse:|#u"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Kanter"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Top|#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Bund|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Venstre|#V"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Speciel celle"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Flerkolonne|#F"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Tilføj kolonne|#k"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Slet kolonne|#S"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Tilføj række|#r"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Slet række|#l"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Slet tabel|#t"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Kolonne"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Række"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Set kanter|#n"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Fjern kanter|#j"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Lang tabel"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Rotér 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Linieskift|#n"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Speciel tabel"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Første hovede"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Hovede"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Bund"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Sidste fod"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Ny side"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Rotér 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Ekstra|#k"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Venstre|#e"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Højre|#r"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Centrér"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Ekstra indstillinger"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Længde|#L"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "eller %|#e"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Midten|#d"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "Horisontal udfyldning mellem minisideafsnit|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Start ny miniside|#S"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Indrykket afsnit|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Miniside|#M"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Flydende flt"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Speciel justering for multikolonne"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Speciel justering for kolonne"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Indkapslet Postscript (*.eps, *.ps)"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Indlejret EPS (*.eps, *.ps)"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Type"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Ordinær skrift|#O"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Grotest skrift|#G"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Skrivemaskineskrift|#S"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Skiftnorm|#n"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Skriftzoom|#z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Opdatér|#p"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Opdatér|#U"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Indsæt reference"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Indsæt sidetal"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Gå til krydsreference|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Lagring fejlede. Vil du omdøbe og prøve igen?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Hvis ikke, bliver dokumentet ikke gemt)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Skabeloner"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Skriv filnavnet som dokumentet skal gemmes som"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Annulleret."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Samme navn som dokumentet allerede har:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Gem alligevel?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Et andet dokument med samme navn er åbent!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Erstat med aktuelle dokument?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Dokument omdøbt til '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', men ikke gemt..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Dokumentet findes allerede."
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Erstat fil?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Beklager, kan ikke gøre det mens billeder bliver beregnet."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Vent nogle få sekunder for at dette skal afslutte; prøv så igen."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(Eller dræb løbske gs processer manuelt og prøv igen.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Kan ikke gøre dette mens stavekontrollen kører."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Afslut stavekontrollen først."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "En fejl detekteret"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Du burde rette den."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " fejl detekteret."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Du burde rette dem."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "Der blev rapporteret fejl under kørslen af LaTeX."
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Forkert dokumentklasse"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "Det er ikke tilladt at danne et program af dette dokument"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "Der blev rapporteret fejl under dannelsen af programmet."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex fungerer ikke for LinuxDoc."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Ingen advarsler fundet."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "En advarsel fundet."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Brug 'Redigér->Gå til fejl' for at finde den."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " advarsler fundet."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Brug 'Redigér->Gå til fejl' for at finde dem."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex kørt med succes"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Det virker som om chktex ikke virkede."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Udfører kommando:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Filen findes allerede:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Ønsker du at overskrive dokumentet?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Annulleret"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Lækker LaTeX fil gemt som"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Tekstklassen skal være linuxdoc."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Gemmer LinuxDox SGML fil `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "LinuxDoc SGML fil gemt som"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "Tekstklassen skal være linuxdoc."
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Gemmer LinuxDox SGML fil `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "LinuxDoc SGML fil gemt som"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Ascii fil gemt som"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Autolagrer aktuelle dokument..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Autolagring virkede ikke!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Fil som skal indsættes"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Fejl! Kan ikke åbne den angivne fil:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Indholdsfortegnelse"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Indsæt reference"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Indsætter fodnote..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Importerer LinuxDoc SGML fil `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Konverterer LinuxDox SGML fil til TeX fil..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Konverterer LinuxDoc SGML fil til dvi fil..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Konverterer LinuxDoc SGML fil til dvi fil..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Tegnstil"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Typografi"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Dokument"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Citationstegn"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "LaTeX preamble"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Ønsker du at gemme de nuværende indstillinger"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "som standardværdier for nye dokumenter?"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr ""
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Åben/Luk..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Kan ikke fortryde mere"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "\"Gendan\" virker ikke i formler endnu"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Kan ikke gendanne mere"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Skrift: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", dybde: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Indsætter marginnotat..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Typografi kopieret"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Typografi indsat"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Ændrede omgivelsesdybde (måske, måske ikke)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Typografi sat"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Skal jeg sætte en række indstillinger til"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "standardværdierne for denne tekstklasse?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Konverteringsfejl!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Kunne ikke skifte til ny tekstklasse."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Vender tilbage til original tekstklasse."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Konverterer dokument til ny tekstklasse..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Et afsnit kunne ikke konverteres"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " afsnit kunne ikke konverteres"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "til valgte tekstklasse"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Dokumentindstillinger sat"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Ingen flere notater"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Citationstegnstype sat"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "LaTeX preamble sat"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Kan ikke indsætte tabel i tabel."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Indsætter tabel..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tabel indsat"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "Fejl! Kan ikke udskrive!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Kontroller 'sidevalg'!"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Kontroller 'antal kopier'!"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Fejl:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Kan ikke udskrive"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Kontrollér at parametrene er korrekte"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Indsætter figur..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Figur indsat"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Skærmvalg sat"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "LaTeX indstillinger"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Kører \"configure\"..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Indlæser konfiguration igen..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Systemet er blevet rekonfigureret."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Du skal genstarte LyX for at kunne bruge de"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "opdaterede tekstklassespecifikationer."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Kunne ikke finde dette referencebogmærke"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "i dette dokument."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Intet dokument ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Ingen referencebogmærker fundet i dokumentet ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr " Ingen | Standard | Lille | Medium | Stor | V-udfyld | Længde "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr " Ingen ændring %l| Ordinær | Grotesk | Skrivemaskine %l| Nulstil "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Ingen ændring %l| Medium | Fed %l| Nulstil "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr ""
+" Ingen ændring %l| Stående | Kursiv | Skråtstillet | Kapitæler %l| Nulstil "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Ingen ændring %l| Lillebitte | Mindst | Mindre | Lille | Normal | Stor | "
+"Større | Størst | Enorm | Kæmpeenorm %l| Forøg | Formindsk | Nulstil "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr "Ingen ændring %l| Fremhævet | Understreget | Navn | LaTeX %l| Nulstil "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+"Ingen ændring %l| Ingen farve | Sort | Hvid | Rød | Grøn | Blå | Lyseblå | "
+"Lilla | Gul %l| Nulstil "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Enkel | Halvanden | Dobbel | Andet "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Lille | Medium | Stor | Længde "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Standard | Egen definition | USletter | USlegal | USexecutive | A3 | A4 | "
+"A5 | B3 | B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+"Ingen | A4 smalle marginer (kun som højformat) | A4 vældigt smalle marginer "
+"(kun som højformat) | A4 vældigt bredde marginer (kun som højformat) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr ""
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "LyX Banner"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Luk"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Ja|Jj#j#y"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Nej|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Slet|#e"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Ændringer vil blive ignoreret"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Dokumentet er skrivebeskyttet:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Advarsel: Kunne ikke bestemme stien til lyx."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Hvis du har problemer, så prøv at starte LyX med en absolut sti."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "LYX_DIR_10x shell-variabel er kaput."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "System-bibliotek sæt til: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Advarsel! Kunne ikke bestemme system-biblioteket."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Prøv '-sysdir' kommandolinieparametren eller"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "sæt shell-variable LYX_DIR_10x til LyX system-biblioteket"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "som indeholder filen `chkconfgi.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Bruger indbyggede standard-værdier"
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " men forvent problemer."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Forvent problemer."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Du har ikke et personligt LyX-bibliotek."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Det behøves for at tage vare på din personlige opsætning."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Skal jeg prøve at sætte det op for dig (anbefales)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Kører uden personligt LyX bibliotek."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Opretter bibliotek "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " og kører \"configure\"..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Mislykkedes. Vil bruge"
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr " i stedet."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Færdig!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "LyX advarsel!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Fejl under læsning "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Bruger indbyggede standarder."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Sætter fejlretnings-niveau til "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Brug: lyx [ kommandolinieparametre ] [ navn.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Kommandolinieparametre (der er forskel på store og små bogstaver)"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           resumé af brug af LyX"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       forsøg at sætte systembibliotek til x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x        bredden på vinduet"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       højden på vinduet"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         x-positionen på vinduet"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         y-positionen på vinduet"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr "   -dbg n          hvor n er en sum af tal. Prøv -dbg 65535 -help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        ombytter forgrund- & baggrundsfarverne"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           kører LyX i sort og hvid"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  brug en hurtig metode til at tegne markeringer\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Check LyX manualsiden for flere parametre."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Mangler tal til -dbg parameter!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Mangler bibliotek til -sysdir parameter!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Fax no.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Modtager navn:|#M"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Firma:|#F"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Telefonliste"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Vælg"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Tilføj"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Slet"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Gem"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Modtager:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Kommentar:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Faxfil: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Tom telefonliste"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Lagring (behøves)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Kan ikke åbne telefonliste: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "INGEN ELLER TOM LOGFIL!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Beskeder"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cTom telefonliste"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Telefonliste"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Ordinær"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Grotesk"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Skrivemaskine"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Symbol"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Arv"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignorér"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Medium"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Fed"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Stående"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Kursiv"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Skråtstillet"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Kapitæler"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Lillebitte"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Mindst"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Mindre"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Lille"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normal"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Stor"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Større"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Størst"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Enorm"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Kæmpeenorm"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Forøg"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Formindsk"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "lillebitte"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "mindst"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "mindre"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "mindst"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normal"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "stor"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "større"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "størst"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "enorm"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "kæmpeenorm"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "forøg"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "formindsk"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "arv"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ignorér"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Fra"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "Til"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Skift"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Ingen"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Sort"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Hvid"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Rød"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Grøn"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Blå"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Lyseblå"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Lilla"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Gul"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Formel"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Indsættelse"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Fremhævet "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Understreget "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Kapitæler "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "LaTeX "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Standard"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Ukendt sekvens:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Ukendt funktion"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Kommandoen er ikke brugbar uden åbne dokumenter"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Dokumentet er skrivebeskyttet."
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Tekstmode"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Ukendt eksporttype: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Ukendt importtype: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Typografi "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " ukendt"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Ingen krydsreferencer at skifte!"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Mærke fjernet"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Mærke sat"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Mærke slået fra"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Mærke slået til"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "\"push-toolbar\" behøver argument > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Brug: toolbar-add-to <LyX kommando> <parameter>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Mangler parameter"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Dette er kun tilladt i formler!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Åbner underdokument "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Ukendt fodnotetype"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Dokumentet er skrivebeskyttet"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Skriv filnavn til nyt dokument"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "nyfil"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Ønsker du at lukke det dokument nu?\n"
+"('Nej' vil bare skifte til den åbne version)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Ønsker du at åbne dokumentet?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Åbner dokument"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "åbnet"
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Vælg skabelon"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Eksempler"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Vælg dokument som skal åbnes"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Kunne ikke åbne dokumentet"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Vælg ASCII fil at importere"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Et andet dokument med navn "
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "findes allerede. Overskriv?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Importerer ASCII fil"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "ASCII fil "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "importeret."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Vælg Noweb fil at importere"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Vælg LaTeX fil at importere"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Importerer LaTeX fil"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Importerer Noweb fil"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Noweb fil "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "LaTeX fil "
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "Kunne ikke importere Noweb fil"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Kunne ikke importere LaTeX fil"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Vælg dokument som skal indsættes"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Indsætter dokument"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "indsat."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Kunne ikke indsætte dokumentet"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Indsættelse åbnet"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "ukendt"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Gem dokument og fortsæt?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: Beskrivelse"
+
+#: src/lyxvc.C:184
+msgid "(no initial description)"
+msgstr "(ingen beskrivelse)"
+
+#: src/lyxvc.C:187
+msgid "Info"
+msgstr "Info"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr "Dette dokument er ikke registeret."
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Beskrivelse til log"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Ignorér ændringer og fortsæt med check ud?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Når du gendanner vil du miste alle ændringer"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "som er gjort i dokumentet siden sidste check ind."
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Ønsker du fortsat at gøre det?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "Ingen RCS-historie!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "RCS-historie"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Luk "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funktioner"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Græsk"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr ""
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr ""
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr ""
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr ""
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Div."
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "OK  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Kolonner "
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Justér vertikalt|#v"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Justér horisontalt|#h"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "OK "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Smal"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Medium"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Bred"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negativ"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Firdobbel"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "2Firdobbel"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Skilletegn"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Dekorering"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Mellemrum"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matrice"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Top | Center | Bund"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Formelpanel"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Fil"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Redigér"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Layout"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Indsæt"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Hjælp"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#F"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#R"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#L"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#I"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#o"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#n"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#H"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Skærmindstillinger"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Importér%t|LaTeX...%x30|Ascii tekst som linier...%x31|Ascii tekst som "
+"afsnit%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "FIM|Xx#x#X"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FIM|Ll#l#L"
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIM|Aa#a#A"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Eksportér%t|som LaTeX...%x40|som DVI...%x41|som PostScript...%x42|som ascii "
+"tekst...%x43|brugerdefineret...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Eksportér%t|som LinuxDoc...%x40|som DVI...%x41|som PostScript...%x42|som "
+"ascii tekst...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Eksportér%t|som LinuxDoc...%x40|som DVI...%x41|som PostScript...%x42|som "
+"ascii tekst...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|tT#t#T"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|Ee#E#e"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Ny...|Ny fra skabelon...|Åben...%l|Luk|Gem|Gem som...|Gendan sidst "
+"gemte%l|Se dvi|Se PostScript|Opdatér dvi|Opdatér PostScript%l|Dan "
+"program%l|Udskriv...|Fax..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|sS#s#S"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|bB#b#B"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|uU#u#U"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Gg#g#G"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|mM#m#M"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|Gg#g#G"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|Oo#O#o"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|cC#c#C"
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|Ss#s#S"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|Ff#f#F"
+
+# , c-format
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importér%m"
+
+# , c-format
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Eksportér%m%l"
+
+# , c-format
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Afslut%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|Ee#e#E"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|Aa#A#a"
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Importér%t|LaTeX...%x15|Ascii tekst som linier...%x16|Ascii tekst som "
+"afsnit%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Ny...|Ny fra skabelon...|Åben...%l|Importer%m%l|Afslut%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Flydere & Indsættelser%t|Åben/luk%x21|Smelt%x22|Åben alle "
+"fodnoter/marginnotater%x23|Luk alle fodnoter/marginnotater%x24|Åben alle "
+"figurer/tabeller%x25|Luk alle figurer/tabeller%x26%l|Fjern alle "
+"fejlbeskeder%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|pP#p#P"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|Ss#S#s"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|aA#a#A"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|Ll#L#l"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|fF#f#F"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|tT#t#T"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|bB#b#B"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabel%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Multikolonne%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Multikolonne%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|Mm#M#m"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Toplinie%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Toplinie%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|Tt#T#t"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Bundlinie%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Bundlinie%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|Bb#B#b"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Venstrelinie%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Venstrelinie%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Vv#V#V"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Højrelinie%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Højrelinie%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|Hh#H#h"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Venstrejustering%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Venstrejustering%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Højrejustering%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Højrejustering%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|yY#y#Y"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Centrér%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "Centrér%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|Ss#S#s"
+
+# , c-format
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Tilføj række%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|rR#r#R"
+
+# , c-format
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Tilføj kolonne%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|kK#k#K"
+
+# , c-format
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Slet række%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|dD#d#D"
+
+# , c-format
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Slet kolonne%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|nN#n#N"
+
+# , c-format
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Slet tabel%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|Ss#S#s"
+
+# , c-format
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Indsæt tabel%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|Ss#S#s"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Versionsstyring%t"
+
+# , c-format
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Registrér%d%x51"
+
+# , c-format
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Check ændringer ind%d%x52"
+
+# , c-format
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Check ud for redigering%x53"
+
+# , c-format
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Check ændringer ind%x52"
+
+# , c-format
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Check ud for redigering%d%x53"
+
+# , c-format
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Gendan sidste version%x54"
+
+# , c-format
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Fortryd sidste check-ind%x55"
+
+# , c-format
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Vis historie%x56"
+
+# , c-format
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Registrér%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Rr#R#r"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|iI#i#I"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|uU#u#U"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|Tt#T#t"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|Aa#A#a"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|Hh#H#h"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Fortryd|Gendan%l|Klip|Kopiér|Indsæt%l|Søg & Erstat...|Gå til fejl|Gå til "
+"notat|Flydere & Indsættelser%m|Tabel%m|Stavekontrol...|Check "
+"TeX||Indholdsfortegnelse...%l|Versionsstyring%m%l|Se LaTeX logfil%l|Indsæt "
+"primærmarkering som linier|Indsæt primærmarkering som afsnit"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Aa#a#A"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|Gg#g#G"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Kk#K#k"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|oO#o#O"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|Ll#L#l"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|Ee#E#e"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|Ff#F#f"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|Nn#N#n"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|Ii#I#i"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|Tt#T#t"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|Ss#S#s"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|Xx#X#x"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|hH#h#H"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Vv#V#v"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|pP#p#P"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Tegn...|Afsnit...|Dokument...|Papir...|Tabel...|Citationstegn...%l|Fremhævet%"
+"b|Kapitæler%b|Fed%b|TeX%b|Ændr omgivelsesdybde|LaTeX preamble...%l|Gem "
+"layout som standard"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|Bb#B#b"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|Aa#A#a"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|Dd#D#d"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|rR#r#R"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|Tt#T#t"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|Ss#S#s"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|Uu#U#u"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|nN#n#N"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Ff#F#f"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Xx#X#x"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM§Ee#E#e"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|Ll#L#l"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|gG#g#G"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Importér ASCII fil%t|Som linier%x41|Som afsnit%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|lL#l#L"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|aA#a#A"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Lister & Indholdsfortegnelse%t|Indholdsfortegnelse%x21|Figurliste%x22|Liste "
+"over tabeller%x23|Liste over algoritmer%x24|Indeks%x25|BibTeX-referencer%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|Ii#I#i"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|fF#f#F"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|Tt#T#t"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|aA#a#A"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|Rr#R#r"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|fF#f#F"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Flydere%t|Figurflyder%x71|Tabelflyder%l%x72|Bred figurflyder%x73|Bred "
+"tabelflyder%l%x74|Algoritmeflyder%x75"
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|Ff#F#f"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|Tt#T#t"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|bB#b#B"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IM|fF#f#F"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|gG#g#G"
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Specialtegn%t|H-udfylder%x31|Orddelingspunkt%x32|Hårdt "
+"mellemrum%x33|Linieskift%x34|Ellipsis (...)%x35|Sætningsafsluttende "
+"punktum%x36|Normale citationstegn (\")%x37|Menuadskiller %x38"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|Hh#H#h"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|Oo#O#o"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|mM#m#M"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|Ll#L#l"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|Ee#E#e"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|Aa#A#a"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|Vv#V#v"
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Figurer...|Tabeller...%l|Inkludér fil...|Importér ASCII fil%m|Indsæt LyX "
+"fil...%l|Fodnote|Margennotat|Flyder%m%l|Lister & Indeks%m%l|Specielle "
+"tegn%m%l|Notat...|Bogmærke...|Krydsreference...|Citatreference|Indeksord|Inde"
+"ksér sidste ord"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|Ff#F#f"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|Tt#T#t"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|Ii#I#i"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|Aa#A#a"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|Xx#X#x"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|nN#n#N"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|Mm#M#m"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|oO#o#O"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|Ll#L#l"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|Ss#S#s"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|eE#e#E"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Rr#r#R"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|Kk#K#k"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|fF#f#F"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr ""
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr "IM|Uu#U#u"
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Brøk|Kvadratrod|Eksponent|Indeks|Sum|Integrale%l|Formel|Stor%l|Formelpanel..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Bb#B#b"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|Kk#K#k"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Ee#E#e"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|nN#n#N"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|Ss#S#s"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#I#i"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#M#m"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|Dd#D#d"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|pP#p#P"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Skærmskrifter...|Indstillinger til "
+"stavekontrol...|Tastatur...|LaTeX...%l|Genkonfigurér"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|Ss#S#s"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Oo#O#o"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Tt#T#t"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#L#l"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|Rr#R#r"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr ""
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr ""
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr ""
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr ""
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr ""
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr ""
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr ""
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr ""
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "LyX version "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " af "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Systembibliotek: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Brugerbibliotek: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Åbner hjælpefil"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Udfører:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Ingen dokumenter åbne *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Velkommen til LyX!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Meningsløs med denne typografi!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Fejl: Kunne ikke skifte til bibliotek: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "LyX intern fejl:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Path Stack underflow."
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Udskriv til"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Printer"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Fil"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Alle sider"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Kun ulige sider"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Kun lige sider"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Normal rækkefølge"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Omvendt rækkefølge"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Rækkefølge"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Sider:"
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Kopier"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Antal:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Usorteret|#U"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Filtype"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Kommando:|#K"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "PostScript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#s"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Brug sprog fra dokumentet"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Brug alternativt sprog:"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Acceptér sammensatte ord som lovlige"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "'Input encoding' parameter til ispell|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Brug alternativ personlig ordliste:"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Ekstra specialtegn tilladt i ord:"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Ordliste"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Erstat"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Næsten\n"
+"samme"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Indstilllinger til stavekontrol"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Begynd stavekontrol"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Indsæt i personlig ordliste"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignorér ord"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Acceptér ordet i denne session"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Afbryd stavekontrol"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Luk stavekontrollen"
+
+# , c-format
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+# , c-format
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Erstat ord?"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Indstillinger til stavekontrol"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Stavekontrol"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Ispell processen er død af en eller anden grund. *En* mulig grund\n"
+"kan være at du ikke har en ordlistefil\n"
+"for dokumentetssproget indstalleret.\n"
+"Undersøg /usr/lib/ispell eller brug en anden\n"
+"ordliste i Indstillinger for stavekontrol."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " ord kontrolleret."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " ord kontrolleret."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Stavekontrol fuldført!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Ispell processen er død af en eller anden grund.\n"
+"Måske er den blevet dræbt."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Flerkolonner kan kun være horisontale."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+"Du kan ikke indtaste to mellemrum på denne måde. Læs venligst Tutorial."
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+"Du kan ikke indsætte et mellemrum i begyndelsen af et afsnit. Læs venligst "
+"Tutorial."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Umulig operation"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Du kan ikke indsætte en flyder i en flyder!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Do kan ikke indsætte et marginnotat i en miniside!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Kan ikke klippe tabel."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Flyder ville inkludere flyder!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Flyder åbnet"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Flyder lukket"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Ingenting at gøre"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Ingen skriftændring er defineret. Brug Tegn under Layout-menuen til at "
+"definere skriftændring."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Ved ikke hvad der skal gøres med halve flydere."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "beklager."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Ved ikke hvad der skal gøres med halve tabeller."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Kan ikke indsætte en flyder i en flyder!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "En tabelcelle kan ikke inkludere mere end et afsnit!"
diff --git a/po/de.po b/po/de.po
new file mode 100644 (file)
index 0000000..277ebdf
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,4850 @@
+# Deutsche Übersetzung für LyX
+# Copyright (C) 1997, The LyX team.
+# Peter Metternich <Peter.Metternich@Post.RWTH-Aachen.DE>, 1997.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: LyX 1.0.4\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:46+02:00\n"
+"Last-Translator: Peter Sütterlin <P.Suetterlin@astro.uu.nl>\n"
+"Language-Team: German <de@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Formatieren des Dokuments..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Keine weiteren Fehler"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "ChkTeX Warnung Nr. "
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Zeichensatz wird in den X-Server geladen..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Durchlauf Nr. "
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "LaTeX Durchlauf Nr. "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Starte MakeIndex."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Starte BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "KEINE LATEX LOG-DATEI VORHANDEN!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "Build Protokoll"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "LaTeX Protokoll"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Befehl erklären"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Vorheriges Zeichen auswählen"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "BibTeX einfügen"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Automatisch speichern"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Zum Anfang des Dokuments"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Auswählen bis zum Anfang des Dokuments"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Schließen"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Zum Ende des Dokuments"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Auswählen bis zum Ende des Dokuments"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Fax"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Neues Dokument"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Neues Dokument (von einer Vorlage)"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Öffnen"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Zum vorherigen Dokument wechseln"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Drucken"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Gespeicherte Version wiederherstellen"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "DVI neu erzeugen"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "PostScript neu erzeugen"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "DVI anzeigen"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "PostScript anzeigen"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "Starte Build"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "TeX-Befehle überprüfen"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Speichern"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Speichern unter"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Abbruch"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Ein Zeichen zurück"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Ein Zeichen vorwärts"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Zitat einfügen"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Befehl ausführen"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Kopieren"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Umgebungstiefe verringern"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Umgebungstiefe erhöhen"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Umgebungstiefe ändern"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Einstellungen für Aufzählungen ändern"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Abwärts bewegen"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Nächste Zeile auswählen"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Umgebung für diesen Absatz auswählen"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Gehe zum nächsten Fehler"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Abbildung einfügen"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Suchen & Ersetzen"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Cursor folgt dem Rollbalken an/aus"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Fett an/aus"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Stil Code an/aus"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Standardschriftart"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Hervorheben an/aus"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Selbstdefiniertes Format an/aus"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Kapitälchen an/aus"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Schriftart Roman an/aus"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Schriftart Sans Serif an/aus"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Zeichengröße festlegen"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Zeichensatzstatus anzeigen"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Unterstreichen an/aus"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Fußnote einfügen"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Nächstes Zeichen auswählen"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Variablen Leerraum (hor.) einfügen"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Trennmöglichkeit einfügen"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Fortsetzungspunkte (...) einfügen"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Punkt für das Satzende (.) einfügen"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Tastaturtabelle abschalten"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Primäre Tastaturtabelle benutzen"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Sekundäre Tastaturtabelle benutzen"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Tastaturtabelle umschalten"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Marke einfügen"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Umgebungseinstellung des Absatzes kopieren"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Umgebungseinstellung des Absatzes übernehmen"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Papiergröße und Seitenränder einstellen"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Zum Anfang der Zeile"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Auswählen bis zum Anfang der Zeile"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Zum Ende der Zeile"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Auswählen bis zum Ende der Zeile"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Beenden"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Randnotiz einfügen"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Griechische Zeichen"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Formeleditor"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Einen Absatz vorwärts"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Nächsten Absatz auswählen"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Einen Absatz zurück"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Vorherigen Absatz auswählen"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Einfügen"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Geschütztes Leerzeichen einfügen"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Anführungszeichen einfügen"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Neu konfigurieren"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Wiederholen"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Querverweis einfügen"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Tabelle einfügen"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "TeX Modus an/aus"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Rückgängig"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Verbinden"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Dokument einfügen"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Alle Fehlermarken entfernen"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Trennlinie für Menü einfügen"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Keine Beschreibung vorhanden!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Dokument an Shell-Befehl senden"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Geändert)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (schreibgeschützt)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Schreibgeschütztes Dokument, keine Änderung möglich."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Seiten-Layout"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Seiten-Layout eingestellt"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Ungültige Längenangabe (gültiges Beispiel: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Besondere Absatzformate"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Erweitertes Absatzformat eingestellt"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Achtung: Ungültige Prozentangabe (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Tabellen Sonderformate"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Tabellen-Layout"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Achtung: Falsche Cursorposition, Fenster aktualisiert"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Zum Bestätigen nochmals \"Entfernen\" drücken"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Fehler!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Die angegebene Datei kann nicht geöffnet werden:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Fehler beim Laden der Textklasse!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Kann Textklasse nicht laden: "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- verwende stattdessen Standard"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Achtung: Ignoriere alten Inset"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Achtung: Benötige LyX-Format %.2f, die gewählte Datei enthält %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "FEHLER: Benötige LyX-Format %.2f, die gewählte Datei enthält %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Achtung!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Das Dokument wurde nicht vollständig eingelesen"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Möglicherweise ist die Datei beschädigt"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "FEHLER!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr ""
+"Altes LyX-Dateiformat. Bitte benutzen Sie LyX 0.10.x, um diese Datei zu "
+"lesen!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Dies ist keine LyX-Datei!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Die Datei kann nicht gelesen werden!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Fehler! Das Dokument ist schreibgeschützt: "
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Fehler! Die Datei kann nicht geschrieben werden: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Fehler! Die Datei konnte nicht ordnungsgemäß geschlossen werden: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Fehler! Die Datei kann nicht geschrieben werden werden: "
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Fehler: Temporäre Datei kann nicht angelegt werden: "
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Fehler! Die Datei konnte nicht ordnungsgemäß geschlossen werden: "
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "LYX_FEHLER:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Die Datei kann nicht geschrieben werden"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Fehler: Falsche Umgebungstiefe für den Befehl LatexType.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "LaTeX wird ausgeführt..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX nicht erfolgreich!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Fehlende Protokoll-Datei: "
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Fertig"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Literate wird ausgeführt..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "Literate war nicht erfolgreich!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Starte Build..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "Build war nicht erfolgreich!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "ChkTeX wird ausgeführt..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "ChkTeX war nicht erfolgreich!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Fehler bei der Ausführung mit der Datei: "
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Temporäre Datei kann nicht angelegt werden: "
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Fehler: Temporäre Datei kann nicht angelegt werden: "
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Fehler beim Ausführen des *roff Befehls für eine Tabelle"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Dieser Vorgang ist nicht möglich!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Eine Tabelle/Liste kann nicht in eine Tabelle eingefügt werden."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Sorry."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Änderungen im Dokument:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Dokument speichern?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Einige Dokumente wurden nicht gespeichert:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Trotzdem beenden?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Dokument wird gespeichert"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Dokument gespeichert als"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Die automatische Sicherungsdatei konnte nicht gelöscht werden!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Speichern fehlgeschlagen!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Keine Dokumente geöffnet!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "LyX: Versuche Speichern des Dokuments "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " als..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "  Speichern scheint gelungen zu sein. Glück gehabt!"
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "  Speichern ist fehlgeschlagen! Versuche erneut..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  Speichern ist endgültig fehlgeschlagen. Das Dokument ist verloren!"
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Von dieser Datei existiert eine Notspeicherung!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Möchten Sie diese stattdessen öffnen?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Die automatische Sicherungsdatei ist neuer."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Möchten Sie diese stattdessen öffnen?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Die Vorlage kann nicht geöffnet werden"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Die Datei konnte nicht umgewandelt werden"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Das Dokument ist bereits geöffnet:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Möchten Sie das Dokument neu laden?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Die Datei `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' ist schreibgeschützt."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Möchten Sie ein neues Dokument mit diesem Namen anlegen?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Größe|#G"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Übernehmen|#b"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Abbrechen|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Aufzählungsebene"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standard|#S"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Mathe|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Sorry, aber ihre libXpm ist zu alt."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Hierfür benötigen Sie Xpm-4.7 (heißt auch 3.4g) oder neuer."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Versuchen Sie, LyX im Monochrom-Modus zu starten (lyx -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" Standard | winzig | skript | Fußnote | klein | normal | groß | groß 2 | "
+"groß 3 | riesig | riesig 2"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Auswahl des Aufzählungszeichens"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "Fehler: LyX konnte die Datei CREDITS nicht öffen"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Bitte installieren Sie diese Datei, um die große Menge"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "an Arbeit abschätzen zu können, die andere in LyX gesteckt haben."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Ruhm & Ehre"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Copyright und Gewährleistung..."
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "All diese Menschen haben zum LyX-Projekt beigetragen. Danke,"
+
+#: src/credits_form.C:50
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX --- Copyright (C) 1995 Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Bei diesem Programm handelt es sich um freie Software;\n"
+"Sie dürfen sie entsprechend der Bestimmungen der GNU\n"
+"General Public License weitergeben und/oder verändern.\n"
+"Entweder Version 2, oder (nach ihrer Entscheidung) jede\n"
+"spätere Version der Lizenz ist verbindlich."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX wird in der Hoffnung weitergegeben, daß es nützlich\n"
+"ist, jedoch ohne irgendeine Art von Garantie, insbeson-\n"
+"dere auch keine Garantie im Hinblick auf Markttauglichkeit\n"
+"oder Tauglichkeit für einen bestimmten Zweck. Eine Kopie der\n"
+"GNU General Public License sollte Bestandteil dieser Software\n"
+"sein.  Ist dies nicht der Fall, schreiben Sie bitte an die\n"
+"\n"
+"Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[Fehler bei der Bildberechnung]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[Bildberechnung läuft]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[keine Datei]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[nicht angezeigt]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[kein Ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[unbekannter Fehler]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Abbildung"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "Der Pfad für die Abbildung ist leer!"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Clipart"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Dokument"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "EPS Abbildung"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Der Dateiname darf keines der folgenden Zeichen enthalten:"
+
+# , c-format
+# , c-format
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "Leerzeichen, '#', '~', '$' oder '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Achtung: Das Verzeichnis konnte nicht gelesen werden."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "Interner LyX Fehler!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Konnte nicht ermitteln, ob das Verzeichnis beschreibbar ist"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Konnte Testdatei für Verzeichnis nicht öffnen"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Testdatei wurde angelegt, kann aber nicht mehr entfernt werden?!"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Fehler! Verzeichnis kann nicht gelesen werden:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Fehler! Datei konnte nicht gelöscht werden:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Fehler: Temporäres Verzeichnis konnte nicht angelegt werden: "
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Fehler: Temporäres Verzeichnis konnte nicht gelöscht werden: "
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Interner Fehler!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr ""
+"Die Funktion 'createDirectory' wurde mit einem ungültigen Namen aufgerufen"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Fehler: Verzeichnis konnte nicht angelegt werden: "
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Zeichensatz auswählen|#Z"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Der Zeichensatz wurde nicht gefunden!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Fehler:\n"
+"\n"
+"Tastaturtabelle\n"
+"nicht gefunden"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Zeichensatz:|#Z"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Andere...|#A"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Andere...|#N"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Sprache"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Belegung"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Primäre Tastaturtabelle|#P"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Keine Tastaturtabelle|#K"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Sekundäre Tastaturtabelle|#S"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Sekundäre"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Primäre"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "EPS Datei|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Seitenansicht|#a"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Durchsuchen...|#D"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Rahmen anzeigen|#R"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Translationen durchführen|#T"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Optionen"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Winkel:|#W"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% der Seite|#%"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Standard"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "Zoll|#Z"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Darstellung"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Höhe"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Breite"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Drehung"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Farbig anzeigen|#F"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Nicht anzeigen|#N"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "In Grautönen anzeigen|#G"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Einfarbig anzeigen"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Standard"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#c"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "Zoll|#l"
+
+# , c-format
+# , c-format
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% der Seite|#S"
+
+# , c-format
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% der Spalte|#p"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Titel|#h"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Teilabb.|#i"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Verzeichnis:|#V"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Filter:|#F"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Dateiname:|#D"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Neu lesen|#N"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Heimatverz.|#H"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Benutzer1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Benutzer2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Spalten"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Zeilen"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Suchen|#S"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Ersetzen durch|#d"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr "@>|#V#v"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr "@<|#Z#z"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Ersetzen|#E#e"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Schließen|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr ""
+"Groß/klein\n"
+" beachten|#G#g"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Wort|#W#w"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Alles Ersetzen|#A#a"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Griechisch (Mathe) an"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Griechische Tastatur (Mathe) an"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Griechische Tastatur (Mathe) aus"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "TeX-Modus"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Keine Formelnummer"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Formelnummer"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Name der einzufügenden Marke:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "'Text-in-Formel' Modus"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Dieser Vorgang ist im Formelmodus nicht möglich!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Mathematik Modus"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Makro: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Eintrag:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Bemerkung:|#k"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Eintrag:|#E"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Marke:|#M"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Zitat"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Literatureintrag"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Von BibTeX erstellte Verweise"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Datenbank:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Format: "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Fehler"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "LaTeX Fehler"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Zeige Fehlermeldung"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Durchsuchen|#s"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Nicht setzen|#N"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Öffnen|#Ö#O"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Dateiname:|#D"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Leerzeichen sichtbar|#L"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Unformatiert|#U"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Mit \\input einfügen|#p"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Mit \\include einfügen|#c"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Dokumente"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Dokument zum Einfügen"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Include"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Input"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Unformatiert"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Eintrag:|#E"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Index"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Index"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Indexliste"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Notiz"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Schließen|^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Liste der Algorithmen"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Liste der Abbildungen"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Liste der Tabellen"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Hauptdokument:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Referenztyp"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Gehe zu Marke"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Marke ändern"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Seitennummer"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Referenz"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Seite: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Ref: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Inhaltsverzeichnis"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "Url|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Name:|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Schließen|^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "HTML-Typ|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Url einfügen"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtmlUrl: "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Url: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "weitere..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Tastaturtabellen"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   Optionen: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Akzente auf allen Zeichen erlauben|#A"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Aktualisieren|#A"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX konnte die Layouts nicht finden!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Überprüfen Sie bitte, ob die Datei \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "korrekt installiert ist. LyX muß leider beendet werden!"
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX konnte keinerlei Layouts finden!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Überprüfen Sie bitte den Inhalt der Datei"
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "\"textclass.lst\". LyX muß leider beendet werden!"
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Absatztrennung"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Einzug|#u"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Vert. Abstand|#A"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Klasse:|#K"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Seitenformat:|#S"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Zeichensatz:|#Z"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Zeichengröße:|#g"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Plazierung v. Floats:|#F"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "PS Treiber:|#P"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Kodierung:|#d"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Einseitig|#E"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Zweiseitig|#w"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Format"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "1-spaltig|#1"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "2-spaltig|#2"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Weitere Optionen:|#O"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Sprache:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Normalabstand:|#N"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Max. Unterabschnitt"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Tiefe d. Inhaltsverzeichnisses"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Zeilenabstand|#t"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Aufzählungszeichen|#l"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "AMS Math benutzen|#h"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Familie:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Serie:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Form:|#o"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Größe:|#G"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Sonstiges:|#S"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Farbe|#a"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Umschalten ein|#U"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Kein Umschalten"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Immer Umschalten"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Titelbreite:|#T"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Einzug"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Über|#e"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Unter|#U"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Vorher|#V"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Nachher|#N"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Kein Einzug|#K"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Rechts|#R"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Links|#L"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Blocksatz|#o"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Zentriert|#Z"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Über"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Unter"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Seitenumbruch"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Linien"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Ausrichtung"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Vertikale Abstände"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Mehr...|#M"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr ""
+"Beibe-\n"
+" halten|#i"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr ""
+"Beibe-\n"
+" halten|#h"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Art:|#A"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Einfach|#E"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Doppelt|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Beispieltext"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Extras:|#E"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Ränder"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Kopf/Fußzeilenränder"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Orientierung"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Hochformat|#c"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Querformat|#Q"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Format:|#F"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Eigene Papiergröße"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Verwende Paket Geometry|#G"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Breite:|#t"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Höhe:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Oben:|#O"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Unten:|#U"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Links|#L"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Rechts|#R"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Kopfzeilenhöhe:|#K"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Abst. zu Kopf:|#A"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Abst. zu Fuß:|#z"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Ränder"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Oben:|#O"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Unten|#U"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Links|#L"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Sonderformat"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Mehrspaltig|#p"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Spalte anfügen|#S"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Spalte löschen|#c"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Zeile anfügen|#Z"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Zeile löschen|#h"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Tabelle löschen"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Spalte"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Zeile"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Rahmen ein|#a"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Rahmen aus|#n"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Lange Tabelle"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "90° drehen|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Zeilenumbrüche|#b"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Spezialtabellen"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Erster Kopf"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Kopfzeile"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Fußzeile"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Letzter Fuß"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Neue Seite"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "90° drehen"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Extra|#X"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Links|#i"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Rechts|#e"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Mitte|#M"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Weitere Optionen"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Länge|#L"
+
+# , c-format
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "oder %|#d"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Mitte|#M"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "HFill zwischen Minipage Absätzen|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Neue Minipage beginnen|#N"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Absatz einrücken|#A"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minipage|#p"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Floatflt|#F"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Bes. Format f. Mehfach-Spalten"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Besonderes Spaltenformat"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Encapsulated Postscript (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Inlined EPS (*.eps, *.ps)|#I"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Art"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Schrift Roman|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Schrift Sans Serif|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Schrift Schreibmaschine|#m"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Schrift Normal|#N"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Vergrößerung|#V"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Aktualisieren|#A"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Aktualisieren|#A"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Referenz einfügen|#R^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Seitennummer einfügen|#S"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Gehe zu Referenz|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Das Speichern ist fehlgeschlagen. Mit einem anderen Namen versuchen?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Das Dokument wird bei 'Nein' nicht gespeichert!)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Vorlagen"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Geben Sie einen Dateinamen für das Dokument an"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Abgebrochen."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Diesen Namen hat das Dokument bereits:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Trotzdem speichern?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Es ist bereits ein Dokument mit diesem Namen geöffnet!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Mit dem aktuellen Dokument ersetzen?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Document umbenannt in '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', aber nicht gespeichert..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Dokument existiert bereits:"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Datei ersetzen?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr ""
+"Diese Operation ist nicht möglich,\n"
+"solange noch Bilder berechnet werden"
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr ""
+"Bitte warten Sie ein paar Sekunden bis dies beendet ist und ver-\n"
+"suchen Sie es dann erneut. (oder beenden Sie die gs-Prozesse"
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "von Hand und versuchen es dann noch einmal.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Dies ist während der Rechtschreibprüfung nicht möglich."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Beenden Sie zuerst die Rechtschreibprüfung."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Ein Fehler ist aufgetreten"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Sie sollten versuchen, ihn zu beheben."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " Fehler sind aufgetreten."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Sie sollten versuchen, sie zu beheben."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "Es sind Fehler beim LaTeX-Lauf aufgetreten."
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Falscher Dokumententyp"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "In diesem Dokument ist die Funktion \"Build\" nicht erlaubt"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "Es sind Fehler beim Build-Lauf aufgetreten."
+
+#: src/lyx_cb.C:520
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex funktioniert nicht für SGML-basierte Dokumente."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Keine Warnungen im Dokument."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Eine Warnung im Dokument."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Benutzen Sie 'Bearbeiten->Gehe zu Fehler' um ihn zu finden"
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " Warnungen im Dokument."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Benutzen Sie 'Bearbeiten->Gehe zu Fehler' um sie zu finden"
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex erfolreich beendet"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Scheinbar funktioniert Chktex nicht!"
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Befehl wird ausgeführt:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Die Datei existiert bereits:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Soll die Datei überschrieben werden?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Abgebrochen."
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr "Für DocBook gibt es keine LaTeX-Ausgabe"
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "LaTeX-Datei gespeichert als"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Sie müssen die Dokumentenklasse LinuxDoc verwenden."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Erzeuge LinuxDoc SGML-Datei `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "LinuxDoc SGML-Datei gespeichert als"
+
+#: src/lyx_cb.C:912
+msgid "Document class must be docbook."
+msgstr "Sie müssen die Dokumentenklasse DocBook verwenden."
+
+#: src/lyx_cb.C:929
+msgid "Building DocBook SGML file `"
+msgstr "Erzeuge DocBook SGML-Datei `"
+
+#: src/lyx_cb.C:934
+msgid "DocBook SGML file save as"
+msgstr "DocBook SGML-Datei gespeichert als"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Ascii-Datei gespeichert unter"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Automatisches Speichern des aktuellen Dokumentes..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Automatisches Speichern ist fehlgeschlagen!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Einzufügende Datei"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Fehler! Die angegebene Datei kann nicht geöffnet werden:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Inhaltsverzeichnis"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Querverweis einfügen"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Fußnote einfügen..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Importieren der LinuxDoc SGML-Datei `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Konvertiere LinuxDoc SGML in eine TeX-Datei..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Konvertiere LinuxDoc SGML in eine DVI-Datei..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Konvertiere DocBook SGML in eine DVI-Datei..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Zeichensatzattribute"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Absatz Format"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Layout Dokument"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Anführungszeichen"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "LaTeX-Vorspann"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Möchten Sie, daß die aktuellen Einstellungen für "
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "Zeichensatz, Dokument, Seite und Anführungen als "
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "Standard für neue Dokumente verwendet werden?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Öffnen/Schließen..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Keine weiteren 'Rückgängig' Informationen"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "Wiederholen wird im Mathe-Modus noch nicht unterstützt"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Nichts mehr zu wiederholen"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Zeichensatz:"
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Tiefe: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Randnotiz einfügen..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Absatzumgebung kopiert"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Absatzumgebung eingestellt"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Umgebungstiefe geändert (im erlaubten Rahmen)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Absatzlayout gespeichert"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Sollen Parameter auf die Standardwerte"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "dieser Dokumentklasse eingestellt werden?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Fehler bei der Anpassung"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Es kann nicht in die gewählte Dokumentklasse gewechselt werden!"
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Bleibe bei der bisherigen Dokumentklasse!"
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Dokument wird an die neue Dokumentklasse angepaßt..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Ein Absatz konnte nicht angepaßt werden"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " Absätze konnten nicht an die gewählte"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr " Dokumentklasse angepaßt werden!"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Layout für Dokument eingestellt"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Keine weiteren Notizen"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Format für Anführungszeichen eingestellt"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "LaTeX-Vorspann gespeichert"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "In eine Tabelle kann keine weitere Tabelle eingefügt werden."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Tabelle wird eingefügt..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tabelle wurde eingefügt"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "FEHLER! Es konnte nicht gedruckt werden!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Prüfen Sie den Eintrag für die zu druckenden Seiten!"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Prüfen Sie den Eintrag für die Anzahl der Kopien!"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Fehler:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Es konnte nicht gedruckt werden!"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Stellen Sie sicher, daß die eingegebenen Parameter korrekt sind"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Abbildung wird eingefügt..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Abbildung wurde eingefügt"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Bildschirmoptionen gespeichert"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "LaTeX Optionen"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Neukonfiguration wird durchgeführt..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Konfiguration wird neu geladen..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Neukonfiguration wurde durchgeführt."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Sie müssen LyX neu starten, um geänderte"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "Dokumentklassen zu benutzen."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Diese Marke wurde im "
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "aktuellen Dokument nicht gefunden."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Kein Dokument ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Keine Marken im Dokument ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr " Keine | Standard | Smallskip | Medskip | Bigskip | VFill | Länge "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr ""
+" Keine Änderung %l| Roman | Sans Serif | Schreibmaschnie %l| Zurücksetzen "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Keine Änderung %l| Mittel | Fett %l| Zurücksetzen "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr ""
+" Keine Änderung %l| Standard | Kursiv | Geneigt | Kapitälchen %l| "
+"Zurücksetzen "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Keine Änderung %l| Winzig | Klein 3 | Klein 2 | Klein | Normal | Groß | "
+"Groß 2 | Groß 3 | Riesig | Riesig 2 %l| Vergrößern | Verkleinern | "
+"Zurücksetzen "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+" Keine Änderung %l| Hervorheben | Unterstreichen | Kapitälchen | LaTeX Modus "
+"%l| Zurücksetzen "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+" Keine Änderung %l| Standardfarbe | Schwarz | Weiß | Rot | Grün | Blau | "
+"Cyan | Magenta | Gelb %l| Zurücksetzen "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Einfach | Anderthalb | Doppelt | Andere "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Klein | Mittel | Groß | Länge "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Standard | Benutzer | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 "
+"| B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" Keine | A4 schmale Ränder (nur Hochformat) | A4 sehr schmale Ränder (nur "
+"Hochformat) | A4 sehr breite Ränder (nur Hochformat) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "LyX Startlogo"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Verwerfen"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Ja|Jj#J"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Nein|Nn#N"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Löschen|#l"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Alle Änderungen werden ignoriert"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Das Dokument ist schreibgeschützt:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Achtung: Der volle Pfad des Programmes konnte nicht ermittelt werden."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr ""
+"Falls Probleme auftreten, starten Sie LyX unter angabe des vollen Pfades."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "Die Umgebungsvariable LYX_DIR_10x ist unbrauchbar."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Nutzerverzeichnis: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Achtung: Das Systemverzeichnis konnte nicht gefunden werden."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Verwenden Sie die Kommandozeilenoption `-sysdir' oder setzen"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "Sie die Umgebungsvariable LYX_DIR_10x auf das LyX Systemverzeichnis,"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "in dem sich die Datei `chkconfig.ltx' befindet."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Benutze Standardwert "
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr "aber es können Probleme auftreten."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Rechnen Sie mit Problemen."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Sie haben kein persönliches LyX-Verzeichnis."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Es wird zum Speichern Ihrer Konfiguration benötigt."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Möchten Sie eines eingerichtet bekommen (empfohlen)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Starte ohne persönliches LyX-Verzeichnis."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Verzeichnis anlegen "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " und konfigurieren..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Fehlgeschlagen. Verwende stattdessen "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr "."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Fertig!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "LyX Warnung!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Fehler beim Lesen von "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Benutze Standardwerte."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Setze Debug-Level auf "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Aufruf: lyx [Kommandooptionen] [name.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Kommandooptionen (groß/klein beachten):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           Beschreibe LyX Aufruf"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       Versuche, x als Systemverzeichnis zu nutzen"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x        Lege Breite des Hauptfensters fest"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       Lege Höhe des Hauptfensters fest"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         Lege Position (X) des Fensters fest"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         Lege Position (Y) des Fensters fest"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          n ist eine Summe von Debug Optionen. Mehr: -dbg 65535 "
+"-help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        Vertausche Voder- und Hintergrundfarben"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           Starte LyX im Schwarzweiß Modus"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr ""
+"   -FastSelection  Benutzt eine schnelle Methode, Auswahl zu markieren\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Weitere Hilfe erhalten Sie mit `man lyx'."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Die Option -dbg benötigt eine Zahl!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Die Option -sysdir benötigt ein Verzeichnis!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Faxnummer:|#n"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Empfänger:|#E"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Firma:|#F"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Adressbuch"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Auswählen|#A"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Hinzufügen|#H"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Löschen|#L"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Speichern|#S"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Ziel:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Kommentar:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Faxdatei: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Adressbuch ist leer"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Speichern (notwendig)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Adressbuch kann nicht geöffnet werden: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "LOGDATEI IST NICHT VORHANDEN ODER LEER!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Nachricht"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cLeeres Adressbuch"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Adressbuch"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Roman"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Sans Serif"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Schreibmaschine"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Symbole"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Übernehmen"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignorieren"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Mittel"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Fett"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Normal"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Kursiv"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Geneigt"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Kapitälchen"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Winzig"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Klein 3"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Klein 2"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Klein"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normal"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Groß"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Groß 2"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Groß 3"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Riesig"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Riesig 2"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Größer"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Kleiner"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "winzig"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "klein 3"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "klein 2"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "klein"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normal"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "groß"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "groß 2"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "groß 3"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "riesig"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "riesig 2"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "größer"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "kleiner"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "übernehmen"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ignorieren"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Aus"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "An"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "An/Aus"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Keine"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Schwarz"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Weiß"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Rot"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Grün"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Blau"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Cyan"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Magenta"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Gelb"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Mathematik"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Einfügung"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Hervorgehoben "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Unterstrichen "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Kapitälchen "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "Latex "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Standard"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Unbekannte Sequenz:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Unbekannte Aktion"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Dieser Befehl ist nur bei geöffnetem Dokument möglich"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Dokument ist schreibgeschützt"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Textmodus"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Unbekannter Export-Typ: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Unbekannter Import-Typ: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Layout "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " unbekannt"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Kein Querverweis zum wechseln!"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Marke gelöscht"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Marke gesetzt"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Marke aus"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Marke ein"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "Befehl 'Push-toolbar' benötigt ein Argument > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Verwendung: toolbar-add-to <LyX-Befehl>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Fehlendes Argument"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Dies ist nur im Mathematik-Modus möglich!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Öffne Unterdokument "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Unbekannte Fußnotenart"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Dokument ist schreibgeschützt"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Dateiname für das neue Dokument"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "unbenannt"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Möchten Sie das Dokument jetzt schließen?\n"
+"('Nein' wechselt zur geöffneten Version)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Möchten Sie das Dokument öffnen?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Öffne Dokument"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "wurde geladen."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Wählen Sie eine Vorlage"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Beispiele"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Wählen Sie das zu öffnende Dokument"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Das Dokument konnte nicht geöffnet werden"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Auswahl ASCII-Datei"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Ein Dokument mit dem Namen"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "existiert bereits. Überschreiben?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Einfügen der ASCII-Datei"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "ASCII-Datei "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "wurde eingefügt."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Auswahl Noweb-Datei"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Auswahl LaTeX-Datei"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Einfügen der LaTeX-Datei"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Einfügen der Noweb-Datei"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Noweb-Datei "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "LaTeX-Datei "
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "Die Noweb-Datei konnte nicht eingefügt werden"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Die LaTeX-Datei konnte nicht eingefügt werden"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Wählen Sie das einzufügende Dokument"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Füge Dokument ein"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "wurde eingefügt."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Das Dokument konnte nicht eingefügt werden"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Einfügung geöffnet"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "unbekannt"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+#, fuzzy
+msgid "Save document and proceed?"
+msgstr "Dokument speichern?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr ""
+
+#: src/lyxvc.C:184
+msgid "(no initial description)"
+msgstr ""
+
+#: src/lyxvc.C:187
+#, fuzzy
+msgid "Info"
+msgstr "Ignorieren"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr ""
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr ""
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr ""
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr ""
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr ""
+
+#: src/lyxvc.C:251
+#, fuzzy
+msgid "Do you still want to do it?"
+msgstr "Möchten Sie das Dokument öffnen?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr ""
+
+#: src/lyxvc.C:348
+#, fuzzy
+msgid "RCS History"
+msgstr "|Entwicklung anzeigen%x56"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Schließen "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funktionen"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Greek"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr "­ Û"
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr "± ´"
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr "£ @"
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr "S  ò"
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Diverses"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "OK  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Spalten "
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Vert. Ausrichtung|#V"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Hor. Ausrichtung|#H"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "OK "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Schmal|#S"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Mittel|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Breit|#r"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negativ|#N"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Quadratin|#Q"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "2Quadratin|#2"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Klammern & Co"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Dekoration"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Abstände"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matrizen"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr " Oben | Mitte | Unten"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Mathematische Symbole"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Datei"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Layout"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Einfügen"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Hilfe"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#D"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#B"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#L"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#E"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#O"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#k"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#H"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Bildschirmoptionen"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Einfügen%t|LaTeX...%x30|Ascii Text als Zeilen...%x31|Ascii Text als "
+"Absätze%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "FIM|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FIM|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FM|Tt#t#T"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Exportieren%t|als LaTeX...%x40|als DVI...%x41|als PostScript...%x42|als "
+"Ascii Text...%x43|Benutzerdefiniert...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportieren%t|als LinuxDoc...%x40|als DVI...%x41|als PostScript...%x42|als "
+"Ascii Text...%x43"
+
+#: src/menus.C:440
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportieren%t|als DocBook...%x40|als DVI...%x41|als PostScript...%x42|als "
+"Ascii Text...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Tt#t#T"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|Bb#b#B"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Neu...|Neu von Vorlage...|Öffnen...%l|Schließen|Speichern|Speichern "
+"unter...|Wiederherstellen%l|DVI anzeigen|PostScript anzeigen|DVI "
+"aktualisieren|PostScript aktualisieren|Programm "
+"erstellen%l|Drucken...|Faxen..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|Vv#v#V"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|Öö#o#O"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|cC#c#C"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Ss#s#S"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|uU#u#U"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|Ww#w#W"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|aA#a#A"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|Ii#i#I"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|kK#k#K"
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr "FM|eE#e#E"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|Dd#d#D"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|Ff#f#F"
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importieren%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Exportieren%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Beenden%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|mM#m#M"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|Ee#e#E"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|Bb#b#B"
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Import%t|LaTeX...%x15|Ascii Text als Zeilen...%x16|Ascii Text als "
+"Absätze...%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Neu...|Neu von Vorlage...|Öffnen...%l|Importieren%m%l|Beenden%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Float & Einfügungen%t|Öffnen/Schließen%x21|Verbinden%x22|Alle "
+"Fußnoten/Randnotizen öffnen%x23|Alle Fußnoten/Randnotizen schließen%x24|Alle "
+"Abbildungen/Tabellen öffnen%x25|Alle Abbildungen/Tabellen "
+"schließen%x26%l|Alle Fehlermarken löschen%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|Oo#o#O"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|Vv#v#V"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|Rr#r#R"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|Cc#c#C"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|Tt#t#T"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|hH#h#H"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|Ff#f#F"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabelle%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Mehrspaltig%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Mehrspaltig%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|Mm#m#M"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Linie oben%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Linie oben%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|oO#o#O"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Linie unten%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Linie unten%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|uU#u#U"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Linie links%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Linie links%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Ll#l#L"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Linie rechts%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Linie rechts%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|Rr#r#R"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Linksbündig%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Linksbündig%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Rechtsbündig%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Rechtsbündig%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Zentrieren%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Zentrieren%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|Zz#z#Z"
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Zeile anfügen%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Spalte anfügen%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|tT#t#T"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Zeile löschen%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Spalte löschen%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|sS#s#S"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Tabelle löschen%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|Öö#ö#Ö"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Tabelle einfügen%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|Ee#e#E"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Versionskontrolle%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Registrieren%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Änderungen an VK übergeben%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Arbeitskopie erzeugen%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Änderungen an VK übergeben%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Arbeitskopie erzeugen%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Letzte Version wiederherstellen%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Letzte Version wiederrufen%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Entwicklung anzeigen%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Registrieren%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Rr#r#R"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|Ii#i#I"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|Oo#o#O"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|Ll#l#L"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|Uu#u#U"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|hH#h#H"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Rückgängig|Wiederholen %l|Ausschneiden|Kopieren|Einfügen%l|Suchen & "
+"Ersetzen...|Gehe zu Fehler|Gehe zu Notiz|Float & "
+"Einfügungen%m|Tabellen%m|Rechtschreibprüfung....|Prüfe "
+"TeX|Inhaltsverzeichnis...%l|Versionskontrolle%m%l|Zeige LaTeX "
+"Protokoll%l|Einfügen als Zeilen|Einfügen als Absätze"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Rr#r#R"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|Ww#w#W"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Aa#a#A"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|Kk#k#K"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|Ee#e#E"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|Ss#s#S"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|Gg#g#G"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|Nn#n#N"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EMV|Ff#f#F"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|Tt#t#T"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|pP#p#P"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|Xx#x#X"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|Ii#i#I"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Vv#v#V"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EMT|Ll#l#L"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|Zz#z#Z"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|bB#b#B"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Zeichensätze...|Absatzformat...|Dokument...|Seite...|Tabelle...|Anführungszei"
+"chen...%l|Hervorhebung%b|Kapitälchen%b|Fettdruck%b|TeX Stil%b|Umgebungstiefe "
+"ändern|LaTeX Vorspann...%l|Layout als Standard speichern"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|Zz#z#Z"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|Aa#a#A"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|Dd#d#D"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|Ss#s#S"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|Tt#t#T"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|rR#r#R"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|Hh#h#H"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|Kk#k#K"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Ff#f#F"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Xx#x#X"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|Uu#u#U"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|Vv#v#V"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|Ll#l#L"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "ASCII-Datei importieren%t|Als Zeilen%x41|Als Absätze%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|Zz#z#Z"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|Aa#a#A"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Listen & Inhalt%t|Inhaltsverzeichnis%x21|Liste der Abbildungen%x22|Liste der "
+"Tabellen%x23|Liste der Algorithmen%x24|Index Liste%x25|BibTeX Referenz%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|Ii#i#I"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|Aa#a#A"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|Tt#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|gG#g#G"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|Ll#l#L"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|Bb#b#B"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Floats%t|Abbildung%x71|Tabelle%x72|Abbildung (breit)%x73|Tabelle (breit) "
+"%l%x74|Algorithmus%x75"
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|Aa#a#A"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|Tt#t#T"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|bB#b#B"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|eE#e#E"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|gG#g#G"
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Sonderzeichen%t|HFill%x31|Trennmöglichkeit%x32|Geschütztes "
+"Leerzeichen%x33|Zeilenumbruch%x34|Fortsetzungspunkte "
+"(...)%x35|Satzende-Punkt%x36|Normales Anführungszeichen (\")%x37|Menü "
+"Trenner %x38"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|Hh#h#H"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|Tt#t#T"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|Ll#l#L"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|Zz#z#Z"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|Ff#f#F"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|Pp#p#P"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|Aa#a#A"
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr "IMS|Mm#m#M"
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Abbildung...|Tabelle...%l|Datei einbinden...|ASCII Datei einfügen%m|LyX "
+"Datei einfügen...%l|Fußnote|Randnotiz|Floats%m%l|Listen & "
+"Inhalt%m%l|Sonderzeichen%m%l|Notiz...|Marke...|Querverweis...|Zitat...|Index "
+"Eintrag...|Index Eintrag letztes Wort"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|Aa#a#A"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|Tt#t#T"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|Dd#d#D"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|Cc#c#C"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|Ll#l#L"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|Ff#f#F"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|Rr#r#R"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|oO#o#O"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IMF|Ii#i#I"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|Ss#s#S"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|Nn#n#N"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Mm#m#M"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|Qq#q#Q"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|Zz#z#Z"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|xX#x#X"
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "IM|Ww#w#W"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr "IM|Uu#u#U"
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Bruch|Quadratwurzel|Exponent|Index|Summe|Integral%l|Mathematik "
+"Modus|Abgesetzte Formel%l|Symbole..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Bb#b#B"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|Qq#q#Q"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Ee#e#E"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|nN#n#N"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|Ss#s#S"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#i#I"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#m#M"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|Aa#a#A"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|yY#y#Y"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Zeichensätze Bildschirm...|Optionen f. "
+"Rechtschreibprüfung...|Tastatur...|LaTeX...%l|Neu Konfigurieren"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|Zz#z#Z"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Rr#r#R"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Tt#t#T"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#l#L"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|Kk#k#K"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Einführung|Tutorium|Benutzerhandbuch|Profi-Tips|Anpassung|Referenzhandbuch|Be"
+"kannte Fehler|LaTeX Konfiguration%l|Copyright und Gewährleistung...|Ruhm & "
+"Ehre...|Version..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr "HM|Ee#E#e"
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|Tt#T#t"
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "HM|Bb#B#b"
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr "HM|Pp#p#P"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Aa#a#A"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|Ff#F#f"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "HM|Ll#L#l"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|Cc#c#C"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|hH#h#H"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr "HM|Vv#v#V"
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "LyX Version "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " vom "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Bibliotheksverzeichnis: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Nutzerverzeichnis: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Öffne Hilfe-Datei"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Ausführen:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Kein Dokument geöffnet *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Willkommen bei LyX!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Unnötig mit diesem Layout!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Fehler: Konnte nicht in das Verzeichnis wechseln: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "LyX Interner Fehler:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Pfadstapel leer (Path Stack underflow)."
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Medium"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Drucker|#D"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Datei|#t"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Alle Seiten|#A"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Nur ungerade Seiten|#u"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Nur gerade Seiten|#g"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Normale Reihenfolge|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Letzte Seite zuerst|#L"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Ausgabe"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Seiten:"
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Anzahl"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Anzahl:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Unsortiert|#s"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Dateityp"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Befehl:|#B"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "Postscript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#A"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Sprache des Dokuments verwenden|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Andere Sprache verwenden|#A"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Zusammengeschriebene Worte erlauben|#Z"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Input Encoding für ispell|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Persönliches Wörterbuch verwenden:|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "In Wörtern erlaubte Sonderzeichen:|#S"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Wörterbuch"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Ersetzen"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr "Vorschläge"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Optionen f. Rechtschreibprüfung..|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Rechtschreibprüfung starten|#R"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "In pers. Wörterbuch einfügen|#W"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Wort ignorieren|#I"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Wort in diesem Text akzeptieren|#A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Unterbrechen|#U"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Rechtschreibprüfung beenden|#b^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Wort ersetzen|#e"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Optionen f. Rechtschreibprüfung"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Rechtschreibprüfung"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Die Rechtschreibprüfung wurde durch einen Fehler beendet. \n"
+"Möglicherweise ist kein Wörterbuch für die Sprache des Dokuments\n"
+"installiert.  Siehe hierzu das Verzeichnis /usr/lib/ispell, oder\n"
+"bestimmen Sie ein anderes Wörterbuch im Optionen-Menü."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " Worte wurden geprüft."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " Wort geprüft."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Rechtschreibprüfung beendet!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Das Programm ispell wurde unplanmäßig beendet.\n"
+"Möglicherweise wurde es durch ein 'kill' beendet?"
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Mehrfachspalten sind nur horizontal möglich."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+"Es ist so nicht möglich, zwei Leerzeichen einzugeben.  Bitte lesen Sie das "
+"Tutorium."
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+"Am Anfang eines Absatzes kann kein Leerzeichen gesetzt werden.  Bitte lesen "
+"Sie das Tutorium."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Dieser Vorgang ist nicht möglich"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "In einem Float Objekt kann kein weiteres eingefügt werden!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "In einer Minipage kann kein Randabschnitt eingefügt werden!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Die Tabelle kann nicht ausgeschnitten werden."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Float Objekt würde ein weiteres enthalten!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Float Objekt geöffnet"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Float Objekt geschlossen"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Fertig!"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Es wurde kein eigener Zeichensatz definiert. Benutzen Sie dafür das Menue "
+"Layout->Zeichensätze"
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Was tun mit einem halben Gleitobjekt."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "sorry."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Halbe Tabellen können nicht verarbeitet werden."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Ein Float Objekt kann nicht in ein anderes eingefügt werden!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Ein Tabelleneintrag kann nur einen Absatz enthalten!"
diff --git a/po/es.po b/po/es.po
new file mode 100644 (file)
index 0000000..31f69a2
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,4858 @@
+# Mensajes en español para LyX.
+# Copyright (C) 1997-1999 LyX Team.
+# Alejandro Aguilar Sierra <asierra@servidor.unam.mx>, 1997.
+# David Suárez de lis <fafefito@usc.es>, 1999
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lyx-1.0.0\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:47+02:00\n"
+"Last-Translator: David Suárez de lis <fafefito@usc.es>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Dando formato al documento..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "No hay más errores"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "Aviso de ChkTeX número "
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Cargando tipo de letra en servidor X..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Compilación nº"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "Compilación LaTeX nº "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Ejecutando MakeIndex..."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Ejecutando BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "NO HAY ARCHIVO DE REGISTRO DE LATEX!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr ""
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "Archivo de registro de LaTeX"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Describir comando"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Seleccionar carácter anterior"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Insertar bibtex"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Guardado automático"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Ir al principio del documento"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Seleccionar hasta el principio del documento"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Cerrar"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Ir al final del documento"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Seleccionar hasta el final del documento"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Fax"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Nuevo documento"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Nuevo documento basado en modelo"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Abrir"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Cambiar a documento previo"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Volver al documento guardado"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Actualizar DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Actualizar PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Ver DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Ver PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr ""
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Verificar TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Guardar"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Guardar Como"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Retroceder un carácter"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Avanzar un carácter"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Insertar cita"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Ejecutar comando"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Cortar"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Reducir profundidad de entorno"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Incrementar profundidad de entorno"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Cambiar profundidad de entorno"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Cambiar opciones de bolos de listas"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Ir hacia abajo"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Seleccionar línea siguiente"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Seleccionar entorno de párrafo"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Ir al siguiente error"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Insertar figura"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Buscar y Reemplazar"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Alternar si el cursor sigue o no a la barra de desplazamiento"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Alternar negritas"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Alternar estilo de código"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Estilo de fuente por omisión"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Alternar énfasis"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Alternar estilo definido por usuario"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Alternar estilo de nombres"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Alternar estilo de tipo romano"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Alternar estilo de tipo sans"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Fijar tamaño del tipo"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Mostrar estado de tipos"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Alternar subrayado"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Insertar Nota a pie"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Seleccionar carácter siguiente"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Insertar relleno horizontal"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Insertar punto de guionado"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Insertar puntos suspensivos "
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Insertar punto y seguido"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Desactivar mapa de teclado"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Utilizar mapa de teclado primario"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Utilizar mapa de teclado secundario"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Alternar mapa de teclado"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Insertar etiqueta"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Copiar tipo de entorno de párrafo"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Pegar tipo de entorno de párrafo"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Especificar tamaño de papel y márgenes"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Ir al principio de la línea"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Seleccionar hasta el principio de la línea"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Ir al final de la línea"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Seleccionar hasta el final de la línea"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Salir"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Insertar Nota al margen"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Griego en fórmulas"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Modo de fórmulas"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Avanzar un párrafo"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Seleccionar párrafo siguiente"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Retroceder un párrafo"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Seleccionar párrafo anterior"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Pegar"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Insertar espacio protegido"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Insertar cita"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Reconfigurar"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Rehacer"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Insertar referencia cruzada"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Insertar tabla"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "Alternar estilo TeX"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Deshacer"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Fundir con el texto"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Importar documento"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Eliminar todos los mensajes de error"
+
+#: src/LyXAction.C:680
+#, fuzzy
+msgid "Insert menu separator"
+msgstr "Insertar punto y seguido"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "¡No se dispone de descripción!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Enviar documento a comando"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Cambiado)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (sólo lectura)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "El documento es de sólo lectura. No se permiten cambios al formato."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Formato del papel"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Formato de papel"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Aviso: Longitud Inválida (ejemplo válido: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Formato párrafo (más)"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Fijar formato párrafo (más)"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Aviso: Valor de porcentaje inválido (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Opciones extra para tablas"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Formato de tabla"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Aviso: Posición de cursor errónea, ventana actualizada"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Confirmación: Presione Suprimir nuevamente"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "¡Error!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "No se puede abrir el archivo especificado:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "¡Error cargando la clase de documento!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "No se puede cargar la clase "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- sustituyendo la clase por defecto"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Aviso: Ignorando inset viejo"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Advertencia: se requiere formato de LyX %.2f pero se encontró %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "ERROR: se requiere formato de LyX %.2f pero se encontró %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "¡Atención!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "No se completó la lectura del documento"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Es posible que el documento esté truncado"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "¡ERROR!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr ""
+"Se encontró formato de archivos de LyX antiguo. ¡Use LyX 0.10.x para leer "
+"esto!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "¡No es un archivo de LyX!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "¡No se puede leer el archivo!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "¡Error! El documento es de sólo lectura: "
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "¡Error! No se puede escribir archivo: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "¡Error! No se pudo cerrar el archivo correctamente: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Error: No se puede escribir archivo:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Error: No se puede abrir archivo temporal:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "¡Error! No se puede cerrar el archivo correctamente:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "LYX_ERROR:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "No se puede escribir archivo"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Error: profundidad incorrecta para el comando LaTeXType.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "Ejecutando LaTeX..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "¡LaTeX no funcionó!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "No se encuentra archivo de registro:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Listo"
+
+#. path to Literate file
+#: src/buffer.C:3174
+#, fuzzy
+msgid "Running Literate..."
+msgstr "Ejecutando LaTeX..."
+
+#: src/buffer.C:3194
+#, fuzzy
+msgid "Literate command did not work!"
+msgstr "¡LaTeX no funcionó!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr ""
+
+#: src/buffer.C:3263
+#, fuzzy
+msgid "Build did not work!"
+msgstr "¡LaTeX no funcionó!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Ejecutando chktex..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "¡chktex no funcionó!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "No se pudo ejecutar con archivo:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "No se puede abrir archivo temporal:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "¡Error! No se puede abrir archivo temporal:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Error ejecutando comando *roff en tabla"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "¡Operación imposible!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "No se puede insertar tabla/lista en tabla."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Lo siento."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Cambios en documento:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "¿Guardar documento?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Algunos documentos no han sido guardados:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "¿Salir de todas formas?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Guardando documento"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Documento guardado como"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "¡No se pudo eliminar archivo de auto-guardado!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "¡Guardar ha fallado!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "¡No hay documentos abiertos!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Intentando guardar documento"
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr "como..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "  Parece ser que se consiguió guardar. Uff..."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "  ¡Guardar ha fallado! Intentando..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  ¡Guardar ha fallado! Lástima. El documento se ha perdido."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "¡Existe una copia de emergencia de este documento!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "¿Intentar cargarla en vez de este?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Archivo de auto-guardado es más reciente."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "¿Cargar archivo de auto-guardado en vez de este?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "No se puede abrir modelo"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Imposible convertir archivo"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "El documento ya está abierto:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "¿Desea volver a cargar el documento?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Archivo `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' es de sólo lectura."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "¿Crear nuevo documento con este nombre?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Tamaño|#T"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Aplicar|#A"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Cancelar|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Prof. de bolos"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Estándard|#S"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Fórmulas|#F"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Lo siento, tu libXpm es demasiado vieja."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Esta característica necesita xpm-4.7 (alias 3.4g) o posterior."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Intente ejecutar LyX en modo monocromo (lyx -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" por defecto | enano | manual | nota a pie | pequeño | normal | grande | más "
+"grande | muy grande | enorme | gigante"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Selección de marcas de bolos"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "ERROR: LyX no pudo leer el archivo CREDITS (créditos)"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Por favor instálelo correctamente para apreciar la gran"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "cantidad de trabajo que otros han hecho por el proyecto LyX."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Títulos de crédito"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Copyright y Garantía"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Todas estas personas han contribuido al proyecto LyX. Gracias,"
+
+#: src/credits_form.C:50
+#, fuzzy
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX es Copyright (C) 1995 por Matthias Ettrich,\n"
+"1995-1998 Equipo LyX"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Este programa es software libre; se permite su redis-\n"
+"tribución y/o modificación bajo los términos de la\n"
+"Licencia Pública General (GPL) del GNU según ha \n"
+"publicado la Free Software Foundation; ya sea la\n"
+" versión 2 de la Licencia, u (opcionalmente) cualquier\n"
+"versión posterior."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX se distribuye con la esperanza de que será\n"
+"útil, pero SIN NINGUNA GARANTÍA;\n"
+"sin incluso la garantía implícita de MERCABILIDAD\n"
+"o ADECUACIÓN PARA UN USO PARTICULAR.\n"
+"Ver la Licencia Pública Genreal del GNU para más\n"
+"detalles. Usted debería haber recibido una copia de\n"
+"la Licencia Pública General del GNU\n"
+"junto con este programa; si no es así, escriba a\n"
+"la Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[error al mostrar]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[mostrando...]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[no hay archivo]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[no mostrado]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[no hay ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[error desconocido]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Figura"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "ruta de la figura está vacía"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Librería"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Documento"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "Figura EPS"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "El nombre del archivo no puede contener los caracteres:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "espacio, '#', '~', '$' o '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "¡Atención! No se pudo crear directorio."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "¡Error interno en LyX!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "No se pudo verificar si se puede escribir en el directorio"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "No se puede abrir archivo de prueba del directorio"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Creado archivo de prueba, pero ¿no se puede eliminar?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "¡Error! No se puede abrir directorio:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "¡Error! No se pudo eliminar archivo:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "¡Error! No se pudo crear directorio temporal:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "¡Error! No se pudo eliminar directorio temporal:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "¡Error interno!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Llamada a createDirectory con nombre no válido"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "¡Error! No se pudo crear directorio:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Fijar juego de caracteres|#c"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "¡No se encontró juego de caracteres!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Error:\n"
+"\n"
+"Mapa de teclado\n"
+"no encontrado"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Juego de caracteres:|#J"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Otro...|#O"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Otro...|#t"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Lenguaje"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Mapas caract."
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Mapa caracteres prim.|#p"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Sin mapa de caracteres|#S"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Mapa caracteres sec.|#e"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Secundario"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Primario"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "Archivo EPS|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Ver a pantalla completa|#v"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "ocalizar...|#B"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Mostrar marco|#F"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Realizar traducciones|#r"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Opciones"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Ángulo|#L"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% de pág.|#g"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Por defecto|#t"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "pulgadas|#p"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Mostrar"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Altura"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Anchura"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Rotación"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Mostrar en color|#o"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "No mostrar esta figura|#n"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Mostrar en grises|#g"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Mostrar en monocromo|#m"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Por defecto|#d"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#c"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "pulgadas|#u"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% de pág.|#P"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% de col.|#c"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Pie|#i"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Subfigura|#b"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Directorio:|#D"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Patrón:|#P"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Archivo:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Releer|#R#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Home|#H#h"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Usuario1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Usuario2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Columnas"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Líneas"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Buscar|#B"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Reemplazar con|#R"
+
+#: src/form1.C:331
+#, fuzzy
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+#, fuzzy
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Reemplazar|#R#r"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Cerrar|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Mayúsculas/minúsculas|#M"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "palabra completa|#P"
+
+#: src/form1.C:351
+#, fuzzy
+msgid "Replace All|#A#a"
+msgstr "Reemplazar|#R#r"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Activado modo de griego en fórmulas"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Activado teclado de griego en fórmulas"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Desactivado teclado de griego en fórmulas"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "Modo TeX"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Sin número"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Número"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Introduzca la etiqueta a insertar:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "modo fórmulas en texto"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "¡Acción inválida en modo fórmulas!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Modo de edición de fórmulas"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Macro: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Tecla:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Comentario:|#R"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Clave:|3K"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Etiqueta:|#L"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Cita"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Elemento de bibliografía"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Referencias generadas por BibTeX"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Base datos:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Estilo:  "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Error"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "Error de LaTeX"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Error de apertura"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Buscar archivo|#B"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "No tipografíe|#N"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Cargar|#C"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Nombre de archivo:|#A"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Espacio visible|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Literal|#T"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Usar entrada|#e"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Usar incluido|#i"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Documentos"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Seleccionar documento hijo"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Incluir"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Entrada"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Entrada literal"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Clave:|#K"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Índice"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Índice"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Imprimir índice alfabético"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Nota"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Cerrar|#C^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Lista de Algoritmos"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Lista de Figuras"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Lista de Tablas"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Padre:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Tipo de Referencia"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Ir a Etiqueta"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Cambiar Etiqueta"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Número de Página"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Referencia"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Página: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Ref: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Índice General"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "URI|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Nombre|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Cerrar|#C^["
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "Tipo HTML|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Insertar URI"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtmlUri: "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Uri: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "otro..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Mapeo de teclas"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   opciones: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Permitir acentos en TODOS los caracteres|#a"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Actualizar|#c"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "¡LyX no pudo encontrar sus descripciones de formato!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Verifique que el archivo \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "está instalado correctamente. Lo siento, tengo que salir :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "¡LyX no pudo encontrar ninguna descripción de formato!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Verifique el contenido del archivo \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Lo siento, tengo que salir :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Separación"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Indentar|#I"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Saltar|#l"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Clase:|#C"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Estilo de página:|#P"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Tipos:|#T"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Tamaño del tipo:|#O"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Posición de flotantes:|#L"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "Driver PS:|#S"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Codificación:|#D"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Uno|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Dos|#s"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Lados"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Una|#e"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Dos|#w"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Opciones extra:|#X"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Lenguaje:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Salto por defecto:|#u"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Profundidad de sección"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Profundidad de índice gral."
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Espaciado|#d"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Formas de bolos|#B"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "Usar bolos tipo AMS|#M"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Familia:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Serie:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Forma:|#R"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Tamaño:|#T"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Varios:|#V"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Color:|#C"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Alternar todos estos|#T"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Estos nunca se alternan"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Estos siempre se alternan"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Etiquetas|#t"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Indentar"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Por encima|#b"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Por debajo|#E"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Por encima|#o"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Por debajo|#l"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Sin indentado|#i"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Dcha.|#D"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Izquierda|#I"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Bloque|#q"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Centro|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Sobre|#v"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Debajo|#w"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Saltos página"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Líneas"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Alineación"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Espacios verticales"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Opc. extra|#O"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Seguir|#K"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Seguir|#p"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Tipo:|#T"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Sencillas|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Dobles|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Texto"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Especial:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Márgenes"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Márgenes cabeceras/pies"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Orientación"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Retrato|#o"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Apaisado|#L"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Tamaño:|#P"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Tamaño personalizado"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Usar paquete Geometry|#U"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Anchura:|#W"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Altura:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Alto:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Fondo:|#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Izq.:|#e"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Dcha.:|#R"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Altura cabecera:|#i"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Separación:|#d"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Dist. notas a pie:|#F"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Bordes"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Alto|#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Fondo|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Izq.|#L"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Celda especial"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Multicolumna|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Añadir columna|#A"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Borrar columna|#O"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Añadir fila|#p"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Borrar fila|#w"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Borrar tabla|#D"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Columna"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Fila"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Fijar bordes|#S"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Liberar bordes|#U"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Tabla larga"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Girar 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Saltos linea|#N"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Tabla espec."
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "1º celda"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Cabecera"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Pie"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Último pie"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Nueva pág."
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Girar 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Opciones extra|#Oo"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Izq.|#e"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Dcha.|#i"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Centro|#C"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Opciones Extra"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Logitud|#L"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "o %|#o"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Medio|#d"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "HFill entre párrafos de minipáginas|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Comenzar nueva minipágina|#S"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Párrafo indentado|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minipágina|#M"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Tipos:|#F"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr ""
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Celda especial"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Postscript Encapsulado (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "EPS en el renglón (*.eps, *.ps)|#I"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Tipo"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Tipo romano|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Tipo ``sans serif''|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Tipo de ``máquina''|#T"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Norma del tipo|#N"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Zoom del tipo|#Z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Actualizar|Uu#u"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Actualizar|#U"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Insertar referencia|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Insertar número de página|#P"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Ir a referencia|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "No se pudo guardar. ¿Renombrar e intentar de nuevo?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(de otro modo, el documento no se guardará.)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Modelos"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Introduzca nombre de archivo para guardar documento"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Cancelado."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Tiene el mimo nombre que el documento:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "¿Guardar de todas maneras?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "¡Ya hay abierto otro documento con el mismo nombre!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "¿Reemplazar con el documento actual?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Documento renombrado como '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', pero no ha sido guardado..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "El documento ya existe:"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Reemplazar archivo:"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Lo siento, no puedo hacer eso mientras cargo imágenes"
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Por favor espere unos segundos hasta que termine e intente de nuevo."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(o elimine manualmente los procesos gs fugitivos e intente de nuevo.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr ""
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Dejar de verificar|#D"
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Se detectó un error"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Debería corregirlo."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " errores detectados."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Debería corregirlos."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "Se presentaron errores al ejecutar LaTeX."
+
+#: src/lyx_cb.C:492
+#, fuzzy
+msgid "Wrong type of document"
+msgstr "Ir al final del documento"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr ""
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+#, fuzzy
+msgid "There were errors during the Build process."
+msgstr "Se presentaron errores al ejecutar LaTeX."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex no funciona con LinuxDoc."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "No se hallaron advertencias."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Se halló una advertencia."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Use 'Editar->Ir a error' para encontrarlo."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr "Se hallaron advertencias."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Use 'Editar->Ir a error' para encontrarlas."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Se ejecutó Chktex con éxito"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Aparentemente Chktex no funciona."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Ejecutando comando:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Archivo ya existe:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "¿Quiere abrir el documento?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Cancelado."
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Perfecto archivo LaTeX guardado como"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "La clase de documento debe ser linuxdoc."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Creando archivo SGML LinuxDoc `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "Archivo SGML LinuxDoc"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "La clase de documento debe ser linuxdoc."
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Creando archivo SGML LinuxDoc `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "Archivo SGML LinuxDoc"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Archivo Ascii guardado como"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Auto-guardando documento actual..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "¡Auto-guardado falló!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Archivo a insertar"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "¡Error! No se puede abrir archivo especificado:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Índice General"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Insertar referencia"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Insertando nota al pie..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Importar archivo SGML LinuxDoc `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Convirtiendo SGML LinuxDoc a archivo TeX..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Convirtiendo SGML LinuxDoc a archivo DVI..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Convirtiendo SGML LinuxDoc a archivo DVI..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Estilo de carácter"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Entorno de párrafo"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Formato del documento"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Comillas"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "Preámbulo LaTeX"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "¿Desea guardar las opciones actuales"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr ""
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "valores por defecto de esta clase de documento?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Abrir/Cerrar..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "No hay más información de deshacer"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr ""
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "No hay más información de rehacer"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Tipo: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Profundidad: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Insertando nota al margen..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Copiado tipo de entorno de párrafo"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Fijar tipo de entorno de párrafo"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Cambiada profundidad de entorno (en el rango posible, quizás no)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Fijar formato de párrafo"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "¿Debería fijar algunos parámetros a los"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "valores por defecto de esta clase de documento?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "¡Errores de conversión!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "en la clase de documento elegida"
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "en la clase de documento elegida"
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Convirtiendo documento a la nueva clase..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Un párrafo no pudo ser convertido"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr "párrafos no pudieron ser convertidos"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "en la clase de documento elegida"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Posibles formatos de documento"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "No hay más notas"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Posibles tipos de comillas"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "preámbulo de LaTeX"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "No se puede insertar tabla en tabla."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Insertando tabla..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tabla insertada"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+#, fuzzy
+msgid "ERROR!  Unable to print!"
+msgstr "Imposible leer archivo!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr ""
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr ""
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Error"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Imposible leer archivo!"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr ""
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Insertando figura..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Figura insertada"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Opciones de pantalla"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "Opciones de LaTeX"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Ejecutando configurar..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Re-cargando configuración..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "El sistema ha sido reconfigurado."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Tiene que reiniciar LyX para poder usar cualquier"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "especificación de clase de documento actualizada"
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "No se pudo encontrar esta etiqueta"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "en el documento actual."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** No hay Documento ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** No se hallaron etiquetas en documento ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr ""
+" Ninguno | Separación definida | Separación pequeña | Separación mediana | "
+"Separación grande | VFill | Longitud "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr ""
+" Sin cambios %l| Romana | Sans Serif | Máquina de escribir %l| Reponer "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Sin cambios %l| Medio | Negrita %l| Reponer "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr " Sin cambios %l| Recto | Itálica | Inclinado | Versales %l| Reponer "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Sin cambios | Diminuto | El más pequeño | Más pequeño| Pequeño | Normal | "
+"Grande | Más grande | Enorme | Gigante %l| Aumentar | Reducir | Reponer "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+" Sin cambios %l| Énfasis | Subrayado | Nombres | modo LaTeX %l| Reponer"
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+" Sin cambios %l| Sin color | Negro | Blanco | Rojo | Verde | Azul | Cian | "
+"Magenta | Amarillo %l| Reponer "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr "Sencillo | Uno y medio | Doble | Otro "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Dist. pequeña | Dist. mediana | Dist. grande | Longitud "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Por defecto | Personalizado | LegalUS | EjecutivoUS | A3 | A4 | A5 | B3 |  "
+"B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" Ninguno | A4 márgenes pequeñas (sólo retrato) | A4 mágenes muy pequeños "
+"(sólo retrato) | A4 márgenes muy anchos (sólo márgenes) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``texto'' | ''texto'' | ,,texto`` | ,,texto'' | «texto» | »texto« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "¡Aviso de LyX!"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Deshechar"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Sí|Ss#s"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "No|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr ""
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Los cambios serán ignorados"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "El documento es de sólo lectura:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Aviso: no se pudo determinar el camino del binario."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Si tiene problemas, prueba a ejecutar LyX con un camino absoluto."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "Variable de entorno LYX_DIR_10x no vale."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Directorio del sistema puesto a: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "¡Error! No se pudo eliminar directorio temporal:"
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Use el parámetro de la línea de comandos -sysdir o"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr ""
+"asigne la variable de entorno LYX_DIR_10x al directorio del sistema de LyX"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "que contenga el archivo `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Utilizando valores por defecto"
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " pero prepárese para tener problemas."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Prepárese a que haya problemas."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "No tiene un directorio LyX personal."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Se necesita para mantener su propia configuración."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "¿Desea que intente configurarlo por usted (recomendado)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "No tiene un directorio LyX personal."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Creando directorio "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " y ejecutando configuración..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr ""
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr "insertado."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "¡Listo!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "¡Aviso de LyX!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Error leyendo "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Utilizando valores por defecto."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Colocando el nivel de corrección de errores a "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Uso: lyx [ opciones de línea de comando ] [ nombre.lyx ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Opciones de línea de comando (distinguen mayúsculas de minúsculas):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           breve explicación del uso de LyX"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       intentar asignar el directorio del sistema a x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -wisth x        fija la anchura de la ventana principal"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       fija la altura de la ventana principal"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         fija la posición x de la ventana principal"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         fija la posición y de la ventana principal"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          donde n es la suma de las opciones de correción de "
+"errores. Pruebe -dbg 65536 -help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        intercambia los colores del fondo y del frente"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           ejecuta LyX en modo blanco y negro"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr ""
+"   -Fastselection  utiliza una rutina rápida para dibujar selecciones\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Mire la página del manual de LyX para más opciones."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "¡Falta el número para la opción -dbg!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "¡Falta el directorio para la opción -sysdir!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Núm. Fax:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Nombre destino:|#D"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Empresa:|#E"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Listín telefónico"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Selecionar desde|#S"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Añadir a:|#t"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Borrar de|#D"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Guardar|#V"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Destinatario:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Commentarios:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Archivo de Fax: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Listín vacío"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Guardar (necesario)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "No se puede abriri el listín telefónico: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "¡NO HAY ARCHIVO DE REGISTRO O ESTÁ VACÍO!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Ventana de mensajes"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cListín vacío"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Listín telefónico"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Romana"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Tipo ``sans serif''|#S"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Tipo de ``máquina''|#T"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr ""
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Insertar"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignorar palabra|#g"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Medio|#M"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Negritas"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Altura"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Itálica"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Inclinada"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Versalitas"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Diminuta"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Muy pequeña"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Bastante pequeña"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Pequeña"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normal"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Grande"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Más grande"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Muy grande"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Enorme"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Gigante"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Aumentar"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Disminuir"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "diminuto"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "muy pequeño"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "bastante pequeño"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "pequeño"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normal"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "grande"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "más grande"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "muy grande"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "enorme"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "gigante"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "aumentar"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "disminuir"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "heredadar"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ignorar"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Desactivado"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "Activado"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Alternar"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Ninguno"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Negro"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Blanco"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Rojo"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Verde"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Azul"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Cian"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Magenta"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Amarillo"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Fórmulas"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Inset"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Énfasis "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Subrayado "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Nombres "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "Latex "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Normal"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Secuencia desconocida:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Acción desconocida"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "No se permite ese comando con un documento abierto"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "El documento es de sólo lectura"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Modo texto"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Tipo de exportación desconocido: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Tipo de exportación desconocido: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Formato "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " desconocido"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "No hay referencias cruzadas que conmutar"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Marca borrada"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Marca colocada"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Marca desactivada"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "marca activada"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "La barra de herramientas necesita un argumento > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Uso: toolbar-add-to <commando LYX>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "No se encuentra argumento"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "¡Sólo se permite en modo de fórmulas!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Abriendo archivo hijo "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Tipo desconocido de nota al pie"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "El documento es de sólo lectura"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Introduzca el nombre de archivo del nuevo documento"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "nuevo-archivo"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"¿Quiere cerrar ese documento ahora?\n"
+"('No' simplemente cambiará a la versión abierta)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "¿Quiere abrir el documento?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Abriendo documento"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "abierto."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Seleccionar modelo"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Ejemplos"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Seleccione el documento a abrir"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "No se pudo abrir el documento"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Selecione archivo ASCII para Importar"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Un documento con nombre"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "ya existe. ¿Sobreescribir?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Importar archivo ASCII "
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "Archivo ASCII "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "importado."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Selecione archivo Noweb para importar"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Selecione archivo LaTeX para importar"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Importando archivo LaTeX"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Importando archivo Noweb"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Archivo Noweb "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "Archivo LaTeX "
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "No se pudo importar archivo Noweb"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "No se pudo importar archivo LaTeX"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Selecione el documento a insertar"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Insertando documento"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "insertado."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "No se pudo insertar el documento"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Inset abierto"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "desconocido"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "¿Guardar documento y proceder?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "CV LyX: descripción inicial"
+
+#: src/lyxvc.C:184
+#, fuzzy
+msgid "(no initial description)"
+msgstr "CV LyX: descripción inicial"
+
+#: src/lyxvc.C:187
+#, fuzzy
+msgid "Info"
+msgstr "Ignorar palabra|#g"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr ""
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "CV LyX: mensage para el archivo de registro"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "¿Ignorar cambios y seguir obteniendo la revisión?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Si revierte perderá todos los cambios hechos "
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "al documento desde la última vez que lo revisó."
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "¿Aún quiere hacerlo?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "¡No hay historial de RCS!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "Historial de RCS"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Cerrar "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funciones"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Griego"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr "- Û"
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr "± ´"
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr "£ @"
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr "S  ò"
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Varios"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "OK  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Columnas "
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Alin. Vertical|#V"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Alin. Horizontal|#H"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "OK "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Delgado|#D"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Medio|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Grueso|#G"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negativo|#N"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Cuadradito|#Q"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "Quadradito2|#2"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Delimitador"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Decoración"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Espaciado"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matriz"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Arriba | Centrado | Abajo"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Panel de Fórmulas"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Archivo"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Edición"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Formato"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Insertar"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Ayuda"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#A"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#E"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#F"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#I"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#O"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#Y"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Opciones de Pantalla"
+
+#: src/menus.C:408
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Importar%t|LaTeX...%x30|Texto Ascii como líneas...%x31|Texto Ascii como "
+"párrafos%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "IM|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FM|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Exportar%t|como LaTeX...%x40|como DVI...%x41|como PostScript...%x42|como "
+"texto Ascii...%x43|Escoger...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportar%t|como LinuxDoc...%x40|como DVI...%x41|como PostScript...%x42|como "
+"texto Ascii...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportar%t|como LinuxDoc...%x40|como DVI...%x41|como PostScript...%x42|como "
+"texto Ascii...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Tt#t#T"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|mM#m#M"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Nuevo...|Nuevo basado en modelo...|Abrir...%l|Cerrar|Guardar|Guardar "
+"Como...|Revertir a guardado%l|Ver DVI|Ver PostScript|Actualizar "
+"DVI|Actualizar PostScript|Construir programa%l|Imprimir...|Enviar por Fax..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|tT#t#T"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|Oo#o#O"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|Cc#c#C"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Ss#s#S"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|Aa#a#A"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|Rr#r#R"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "EM|wW#w#W"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|vV#v#V"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|Uu#u#U"
+
+#: src/menus.C:479
+#, fuzzy
+msgid "FM|Bb#b#B"
+msgstr "LM|Bb#b#B"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|Ff#f#F"
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importar%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Exportar%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Salir%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|iI#i#I"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|Ee#e#E"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Importar%t|LaTeX...%x15|Texto Ascii como líneas...%x16|Texto Ascii como "
+"párrafos%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Nuevo...|Nuevo basado en modelo...|Abrir%l|Importar%m%l|Salir%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Flotantes%t|Abrir/Cerrar%x21|Mezclar%x22|Abrir todas las notas al pie o al "
+"margen%x23|Cerrar todas las notas al pie o al margen%x24|Abrir todas las "
+"figuras/tablas%x25|Cerrar todas las figuras/tablas%x26|Borrar todos los "
+"mensajes de error%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|Oo#o#O"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|Mm#m#M"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|Aa#a#A"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|Cc#c#C"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|Ff#f#F"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|Tt#t#T"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|Rr#r#R"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabla%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Multicolumna%Bx44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Multicolumna%Bx44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|Mm#m#M"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Línea de arriba%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Línea de arriba%B%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|Tt#t#T"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Línea del fondo%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Línea del fondo%B%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|Bb#b#B"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Línea Izquierda%b%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Línea Izquierda%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Ll#l#L"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Línea Derecha%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Línea Derecha%B%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|Rr#r#R"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Alineado a la izq.%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Alineado a la izq.%R%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Alineado a la dcha.%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Alineado a la dcha.%R%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Centrado%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Centrado%R%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|Cc#c#C"
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Añadir fila%x3"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|oO#o#O"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Añadir columna%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|uU#u#U"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Borrar fila%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|wW#w#W"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Borrar columna%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Borrar tabla%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "MT|Dd#d#D"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Insertar tabla%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|Ii#i#I"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Control de Versiones%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Registrar%dx51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Entrar revisión (check-in) de cambios%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Obtener revisión (check-out) para editar%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Entrar revisión (check-in) de cambios%d%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Obtener revisión (check-out) para editar%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Volver a la última versión%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Deshacer última entrada de revisión%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Mostrar Historial%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Registrar%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Rr#r#R"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|Ii#i#I"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|Oo#o#O"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|lL#l#l"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|Uu#u#U"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|hH#h#H"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Deshacer|Rehacer %l|Cortar|Copiar|Pegar%l|Búscar y Reemplazar...|Ir a "
+"Error|Ir a  Nota|Flotantes%m|Tabla%m|Ortografía....|Verificar TeX|Índice "
+"general...%l|Control de Versiones%m%l|Ver archivo de registro de "
+"LaTeX%l|Pegar selección primaria como Líneas|Pegar selección primaria como "
+"Párrafos"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Uu#u#U"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|Rr#r#R"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Cc#c#C"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|oO#o#O"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|Pp#p#P"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|Ff#f#F"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|Ee#e#E"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|Nn#n#N"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|Ii#i#I"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|Tt#t#T"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|Ss#s#S"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|hH#h#H"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|aA#a#A"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Vv#v#V"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|wW#w#W"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|Ll#l#L"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|gG#g#G"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Carácter...|Párrafo...|Documento...|Papel...|Tabla...|Comillas...%l|Estilo  "
+"Énfasis%b|Estilo Nombres%b|Estilo Negritas%b|Estilo TeX%b|Cambiar "
+"Profundidad de Entorno|Preámbulo LaTeX...%l|Guardar formato como el por "
+"defecto"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|Cc#c#C"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|Pp#p#P"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|Dd#d#D"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|aA#a#A"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|eE#e#E"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|Qq#q#Q"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|mM#m#M"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|Nn#n#N"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Bb#b#B"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Tt#t#T"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|vV#v#V"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|Ll#l#L"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|Ss#s#S"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Importar archivo ASCII%t|Como Líneas%x41|Como Párrafos%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|Ll#l#L"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|Pp#p#P"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Listas e Índice gral.%t|Índice general%x21|Lista de Figuras%x22|Lista de "
+"Tablas%x23|Lista de Algoritmos%x24|Índice alfabético%x25|Referencia "
+"BibTeX%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|Cc#c#C"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|Ff#f#F"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|Tt#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|Aa#a#A"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|Ii#i#I"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|Bb#b#B"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Flotantes%t|Flotante de figura%x71|Flotante de tabla%x72|Flotante de figura "
+"ancha%x74|Flotante de tabla ancha%l%x75|Flotante de algoritmo%x73"
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|Tt#t#T"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|Ww#w#W"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IM|iI#i#I"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|Aa#a#A"
+
+#: src/menus.C:1211
+#, fuzzy
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Carácter especial%t|HFill%x31|Guión de Separación%x32|Espacio  "
+"Protegido%x33|Salto de Línea%x34|Puntos Suspensivos (...)%x35|Punto y "
+"Seguido%x36|Comillas Ordinarias (\")%x37"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|Hh#h#H"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|Pp#p#P"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|Bb#b#B"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|Ll#l#L"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|iI#i#I"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|Ee#e#E"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|Qq#q#Q"
+
+#: src/menus.C:1228
+#, fuzzy
+msgid "IMS|Mm#m#M"
+msgstr "IM|Mm#m#M"
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Figura...|Tabla...%l|Incluir Archivo...|Importar Archivo ASCII %m|Insertar "
+"Archivo LyX...%l|Nota al pie|Nota al Margen|Flotantes%m%l|Listas e Índice "
+"gral.%m%l|Carácter Especial%m%l|Nota|Etiqueta...|Referencia "
+"Cruzada...|Referencia a Cita|Entrada de índice|Indexar última palabra"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|bB#b#B"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|cC#c#C"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|Aa#a#A"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|Xx#x#X"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|Ff#f#F"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|Mm#m#M"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|oO#o#O"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|Tt#t#T"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|Ss#s#S"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|Nn#n#N"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Ll#l#L"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|rR#r#R"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|iI#i#I"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "EM|wW#w#W"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr "IM|Uu#u#U"
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Fracción|Raíz Cuadrada|Exponente|Índice|Sumatorio|Integral%l|Modo de "
+"fórmulas|Mostrar%l|Panel de Fórmulas..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Ff#f#F"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|Ss#s#S"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Ee#e#E"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|xX#x#X"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|uU#u#U"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#i#I"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#m#M"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|Dd#d#D"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|Pp#p#P"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Tipos de letra en pantalla...|Opciones de "
+"Ortografía...|Teclado...|LaTeX...%l|Reconfigurar"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|Ff#f#F"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Ss#s#S"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Kk#k#K"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#l#L"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|Rr#r#R"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Introducción|Tutorial|Guía del Usuario|Características "
+"extendidas|Personalización|Manual de referencia|Errores "
+"conocidos|Configuración de LaTeX%l|Copyright y Garantía...|Títulos de "
+"crédito...|Versión..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr "HM|Ii#I#i"
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|Tt#T#t"
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "HM|Uu#U#u"
+
+#: src/menus.C:1566
+#, fuzzy
+msgid "HM|xX#x#X"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Cc#C#c"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|Kk#K#k"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "EM|Ll#l#L"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|oO#o#O"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|eE#e#E"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr "HM|Vv#v#V"
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "LyX Versión "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " de "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Directorio de la biblioteca del sistema: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Directorio del usuario: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Abriendo archivo de ayuda"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Ejecutando:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* No hay documentos abiertos *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "¡Bienvenido a LyX!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "¡No tiene sentido en este formato!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Error: No se pudo cambiar a directorio: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "Error interno de LyX:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Error en la pila de caminos"
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Imprimir en"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Impresora|#P"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Archivo|#A"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Todas las páginas|#T"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Sólo páginas pares|#O"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Sólo páginas impares|#G"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Orden normal|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Orden inverso|#I"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Orden"
+
+#: src/print_form.C:76
+#, fuzzy
+msgid "Pages:"
+msgstr "Página: "
+
+#: src/print_form.C:81
+#, fuzzy
+msgid "Copies"
+msgstr "Copiar"
+
+#: src/print_form.C:85
+#, fuzzy
+msgid "Count:"
+msgstr "Commentarios:"
+
+#: src/print_form.C:88
+#, fuzzy
+msgid "Unsorted|#U"
+msgstr "Liberar bordes|#U"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Tipo de Archivo"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Comando:|#C"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "PostScript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#s"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Usar lenguaje del documento|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Usar lenguaje alternativo:|#D"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Tratar palabras juntas como legales|#T"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Entrar codificación para ispell|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Usar diccionario personal alternativo:|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Caracteres especiales extra permitidos:|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Diccionario"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Reemplazar"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Palabras\n"
+"Parecidas"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Opciones de ortografía...|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Empezar verificar ortografía|#S"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Insertar en diccionario personal|#I"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignorar palabra|#g"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Aceptar la palabra por esta sesión|#A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Dejar de verificar|#D"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Cerrar ortografía|#C^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Reemplazar palabra|#R"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Opciones de Ortografía"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Ortografía"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"El proceso ispell ha muerto por alguna razón *Una* razón posible\n"
+"puede ser la falta de un archivo de diccionario\n"
+"para el lenguaje de este documento.\n"
+"Verifique /usr/lib/ispell o escoja otro\n"
+"diccionario en el menú Opciones de Ortografía."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " palabras verificadas."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " palabra verificada."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "¡Revisión de ortografía terminada!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"El proceso ispell ha muerto por alguna razón.\n"
+"Quizás alguien lo ha matado."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Multicolumnas sólo pueden ser en horizontal."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Operación no permitida"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "¡No se puede insertar un flotante en un flotante!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "¡No se puede asignar margen de párrafo en una minipágina!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "No se puede cortar tabla."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "¡Flotante incluiría un flotante!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Flotante abierto"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Flotante cerrado"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Nada que hacer"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"No se ha definido un cambio de tipo. Use Carácter en el menú Formato para "
+"definir uno."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "No sé qué hacer con medios flotantes."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "perdón."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "No sé qué hacer con medias tablas."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "¡No se puede pegar un flotante en un flotante!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Una celda de tabla no puede incluir más de un párrafo"
diff --git a/po/fi.po b/po/fi.po
new file mode 100644 (file)
index 0000000..65a54cd
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,4840 @@
+# Suomalainen LyX-lokalisointi / Finnish LyX-localization
+# Copyright (C) 1997-1998 The LyX Team
+# Hacked by (haukut osoitetaan:) Martin.Vermeer@fgi.fi
+#
+#
+# HYVIN alustavaa!
+# ================
+# The Finnish LaTeX terminology is probably nonsense. Who corrects?
+# Also, I am not a native Finnish writer, so syntax and vocabulary
+# is weak and possibly silly in places (corrections, PLEASE!) 
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lyx-1.0.0\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:47+02:00\n"
+"Last-Translator: Martin Vermeer mv@fgi.fi\n"
+"Language-Team: Finnish, out-of-team\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Dokumentti formatoidaan..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Ei enää virheitä"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "ChkTeX varoitus n:o #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Lataamassa kirjasintyyppi X-palvelimeen..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Ajo #"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "LaTeX ajonumero "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Ajan MakeIndex."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Ajan BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "LATEX LOKI-TIEDOSTOA EI LÖYDY!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "`Buildin' Ohjelmaloki"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "LaTeX Loki"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Kuvaa komento"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Merkitse edellinen merkki"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Liitä bibtex"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Autotallennus"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Mene dokumentin alkuun"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Merkitse dokumentin alkuun saakka"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Sulje"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Mene dokumentin loppuun"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Merkitse dokumentin loppuun saakka"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Faksi"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Uusi dokumentti"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Uusi dokumentti mallista"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Avaa"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Siirry edelliseen dokumenttiin"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Tulosta"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Ota tallennettu takaisin"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Päivitä DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Päivitä PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Katsele DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Katsele PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "`Build' ohjelma"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Tarkista TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Tallenna"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Tallenna Nimellä"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Peruuta"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Siirry merkin verran taaksepäin"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Siirry merkin verran eteenpäin"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Lisää kirjallisuusviite"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Suorita komento"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Kopioi"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Leikkaa"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Ympäristötaso matalammaksi"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Ympäristötaso syvemmäksi"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Muuta ympäristötasoa"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Muuta luetelmamerkkiasetukset"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Mene alaspäin"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Valitse seuraava rivi"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Valitse kappaleen tyyli"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Siirry seuraavaan virheeseen"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Lisää kuva"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Etsi & korvaa"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Pois/päällä: kohdistin seuraa/ei seura rullauspalkki"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Lihava pois/päällä"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Koodityyli pois/päälle"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Oletusfonttityyli"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Korostus pois/päälle"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Käyttäjän määrittämä tyyli pois/päälle"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Nimityyli pois/päälle"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Antiikva-kirjasintyyppi pois/päälle"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Sans-Serif-kirjasintyyppi pois/päälle"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Aseta kirjasintyypin koko"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Näytä kirjasintyyppi-status"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Alleviivaus pois/päälle"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Lisää alaviite"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Valitse seuraava merkki"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Lisää vaakatäyttö"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Lisää sananjakokohta"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Lisää ellipsis"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Lisää virkkeen lopun piste"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Kytke pois näppäinkartta"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Käytä ensisijainen näppäinkartta"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Käytä toissijainen näppäinkartta"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Näppäinkartta pois/päälle"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Lisää tarra"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Pane muistiin kappaleen tyyli"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Sovella kappaleen tyyli"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Anna paperin koko ja marginaalit"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Siirry rivin alkuun"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Merkitse rivin alkuun saakka"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Siirry rivin loppuun"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Merkitse rivin loppuun saakka"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Lopeta"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Lisää marginaalihuomautus"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Matemattiikka Kreikka"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Matematiikkatila"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Siirry kappaleen verran alaspäin"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Merkitse seuraava kappale"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Siirry kappaleen verran ylöspäin"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Merkitse edellinen kappale"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Liimaa"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Lisää kova välilyönti"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Lisää lainausmerkki"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Konfiguroi uudelleen"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Kelaa eteenpäin"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Lisää viite"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Lisää taulukko"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "TeX-tyyli pois/päälle"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Kelaa takaisin (\"oho!\")"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Sulata"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Tuo dokumentti"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Poista kaikki virhelaatikot"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Laita valikkoerotusmerkki"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Kovausta ei löydy!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Lähetä dokumentti komentoon"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Muuttunut)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (kirjoitussuojattu)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Dokumentti kirjoitussuojattu. Ei saa muuttaa tyyliä."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Paperiformaatti"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Paperiformaatti määritetty"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Varoitus: Laiton pituus (laillinen esim.: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Extra kappaletyyli"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Extra kappaletyyli määritetty"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Varoitus: Laiton prosenttimäärä (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Taulukko lisälomake"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Taulukkoformaatti"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Varoitus: Kohdistin väärässä paikassa, ikkuna päivitettiin"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Vahvista: paina Delete-näppäin uudelleen"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Virhe!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "En osaa avata valittu tiedosto:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Virhe ladatessa tekstiluokka!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "En osa ladata tekstiluokka "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- sijoitetaan oletus"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Varoitus: Unohdan Vanhaa Leikeosaa"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Varoitus: tarvitsen lyxformaatti %.2f mutta löysin %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "VIRHE: tarvitsen lyxformaatti %.2f muuta löysin %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Varoitus!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Dokumentin lukeminen ei ole valmis"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Ehkä dokumentti on typistetty"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "VIRHE!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "Löytyi vanha LyX-formaatti. Lue v. 0.10.x avulla!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Ei ole LyX-tiedosto!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "En osaa lukea tiedostoa!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Virhe! Kirjoitussuojattu dokumentti:"
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Virhe! En osaa kirjoittaa tiedosto:"
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Virhe! En saanut tiedosto kunnolla suljetuksi: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Virhe: En osaa kirjoittaa tiedosto:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Virhe: En osaa avata väliaikaistiedosto:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Virhe! En saanut tiedosto kunnolla suljetuksi:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "LYX_VIRHE:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "En osaa kirjoittaa tiedosto"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Virhe : Väärä sysvyys LatexType Komennoksi.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "LaTeX käynnissä..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX ei toiminnut!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Puuttuva lokitiedosto:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Valmis"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Ajan Literate..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "Literate komento ei toiminnut!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Ohjelman Rakentaminen (Build)..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "`Build' ei toiminnut!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "chktex käynnissä..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex ei toiminnut!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "En voinut ajaa tiedostolla:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "En osaa avata väliaikaistiedosto:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Virhe! En osaa avata väliaikaistiedosto:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Virhe suorittaessa *roff-komento taulukkoon"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Mahdoton toiminta!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "En osaa laittaa taulukku/lista taulukon sisään."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Valitan."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Muutoksia dokumentissa:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Tallennanko dokumentti?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Dokumentteja jäi tallentamatta:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Lopetanko kuitenkin?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Dokumenttia tallennetaan"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Dokumenttia tallennettiin nimellä"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "En osannut poistaa autotallennustiedosto!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Tallennus epäonnistui!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Ei ole avoimia dokumentteja!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Yritän tallentaa dokumentti "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " nimellä..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "Tallennus näyttää onnistuneelta. Hohhoh."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "  Tallennus epäonnistui! Yritän..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  Tallennus epäonnistui! Kävi köpelösti. Dokumentti meni."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Dokumentin hätätallennusversio löytyy!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Ladataanko se mieluummin?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Autotallennusversio on tuoreempi."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Ladataanko se mieluummin?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "En osaa avata mallitiedosto"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "En voinut muuntaa tiedosto"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Dokumentti on jo avoinna:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Haluatko avata tuo dokumentti uudelleen?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Tiedosto `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' on kirjoitussuojattu."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Luodaanko uusi dokumentti tällä nimellä?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Koko|#o"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "a Käytä|#a"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Peruuta|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Taso"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standardi|#S"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matem.|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Valitan, sinulla on ikivanha libXpm."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Tämä ominaisuus vaatii xpm-4.7 (ts. 3.4g) tai tuoreempaa."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Kokeilepas \"lyx -Mono\" -komennolla."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" oletus | pikkuruinen | skripti | alaviite | pieni | normaali | iso | Iso | "
+"ISO | valtava | Valtava"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Luetelmamerkkien valinta"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "VIRHE: LyX ei osannut lukea KIITOKSET tiedosto"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Installoikaa oikein, että voit arvioida kuinka suuri"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "työmäärä muut ihmiset ovat sijoittaneet LyX-projektiin."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Kiitokset"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Tekijänoikeus ja Takuu"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr ""
+"Kaikki nämä ihmiset ovat työskennelleet LyX-projektin hyväksi. Kiitoksia,"
+
+#: src/credits_form.C:50
+#, fuzzy
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX on tekijänoikeussuojauksen alainen ohjelma.\n"
+"Copyright (C) 1995 Mattias Ettrich, 1995-1999 LyX-Tiimi"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Tämä ohjelma on vapaaohjelmistoa; saatte jakella sen jälleen\n"
+"ja/tai muuttaa sitä \"GNU General Public License\":n ehtojen\n"
+"mukaisesti kuten Free Software Foundation (FSF) on ne julkaissut;\n"
+"joko Lisenssin versio 2, tai (oman valinnasi mukaan) joku myöhempi\n"
+"versio."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"EI anneta MITÄÄN takuita eikä MITÄÄN lupauksia!\n"
+"Lue Free Software Foundationin GPL-lisenssiteksti jos kiinnostaa\n"
+"(löytyy World Wide Webiltä).\n"
+"\n"
+"Tämä ohjelma on lokalisoitu FSF:n \"gettext\"-paketin\n"
+"avulla parin, kolmen illan aikana. Ei ollut vaikeata.\n"
+"Lue \"info -f gettext\" ja käännä LyX eestiksi/saameksi/savoksi!!!"
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[piirtämisvirhe]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[piirretään ...]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[ei tiedostoa]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[ei näytetä]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[ghostscript puuttuu]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[tuntematon virhe]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Kuva"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "Kuvien hakupolku tyhjä"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Sekäläisiä kuvia"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Dokumentti"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "EPS-kuva"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Seuraavat merkit ei sallittu tiedostonnimessä:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "välilyönti, '#', '~', '$' tai '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Varoitus! En osannut avata hakemistoa."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "LyXin sisäinen virhe!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "En osannut testata oliko hakemisto kirjoitussuojattu"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "En osaa avata hakemistokoetiedosto"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Loin koetiedosto mutten saa poistetuksi?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Virhe! En osaa avata hakemisto:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Virhe! En osannut poistaa tiedostoa:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Virhe! En osannut luoda väliaikaishakemisto:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Virhe! En osannut poistaa väliaikaishakemistoa:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Sisäinen virhe!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "'createDirectory'-kutsu kelvottomalla nimellä"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Virhe! En voinut luoda hakemisto:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "c Aseta Merkkikoodaus|#C"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Merkkikoodausta ei löydy!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Virhe:\n"
+"\n"
+"Näppäinkartta\n"
+"ei löydy"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "h Merkkikoodaus:|#H"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "o Muu...|#O"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "t Muu...|#T"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Kieli"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Kartta"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "r Ensisijainen kartta|#r"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "n Ei näppäinkarttaa|#N"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "e Toissijainen kartta|#e"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Toissijainen"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Ensisijainen"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "EPS-tiedosto|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "v Täysinäytön esikatselu|#v"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "b Selaa...|#B"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "f Näytä kehys|#F"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "r Muuta mittakaavat|#r"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Optiot"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "l Kulma:|#L"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "g % sivusta|#g"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "t Oletus|#t"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "m cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "h tuumat|#h"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Näytä"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Korkeus"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Leveys"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Rotaatio"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "d Näytä väreillä|#D"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "y Älä näytä tätä kuvaa|#y"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "i Näytä harmaasävyissä|#i"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "s Näytä mustavalkoisena|#s"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "u Oletus|#U"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#c"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "n tuumat|#n"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "p % Sivusta|#P"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "o % Palstasta|#o"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "k Otsikko|#k"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "q Alakuva|#q"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "d Hakemisto:|#D"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "p Suodatin:|#P:"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "f Tiedostonnimi:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "r Virkistä|#R#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "h Kotihak.|#H#h"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Käyttäjä1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Käyttäjä2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Palstoja"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Rivejä"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "n Hakuteksti|#n"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "w Korvaava teksti|#W"
+
+#: src/form1.C:331
+#, fuzzy
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+#, fuzzy
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "r Korvaa|#R#r"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Sulje|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "s Isot/pienet eri|#s#S"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "m Koko sana|#M#m"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Korvaa kAikki|#A#a"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Mat-kreikka-tila päällä"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Mat-kreikka näppis päällä"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Mat-kreikka näppis pois"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "TeX-tila"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Ei numeroa"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Numero"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Kirjoita uusi tarrateksti:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "matematiikka-tekstitila"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Kelvoton toiminta matematiikkatilassa!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Matematiikkaeditoritila"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Makro:"
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Avain:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "r Huomautus:|#R"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "k Avain:|#K"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "l Tarra:|#L"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Viite"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Kirjallisuusviite"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "BibTeXin generoimia viitteitä"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Tietokanta:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Tyyli:  "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Virhe"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "LaTeX-virhe"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Avattiin virhe"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "b Selaa|#B"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "d Älä lado|#d"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Lataa|#L"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "f Tiedostonnimi:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "s Näkyvä välilyönti|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Verbatim|#V"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Käytä input|#i"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "u Käytä include|#u"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Dokumentit"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Valitse alidokumentti"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Include"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Input"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Verbatim-input"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "K Avainsana:|#K"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Hakusana"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Hakusana"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "AsiaHakemisto"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Muistiinpano"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "c Sulje|#C^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Algoritmit"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Kuvat"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Taulukot"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Päädokumentti:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Viitetyyppi"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Siirry Tarraan"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Muuta Tarra"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Sivunnumero"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Viite"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Sivu: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Viite:"
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Sisällys"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "URL|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Nimi:|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "c Sulje|#C^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "HTML Tyyppi:|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Lisää"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtrmUrl: "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Url: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "muu..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Näppäinkartat"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   optiot: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "w Salli aksentit KAIKILLE merkeille|#w"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "u Päivitä|#Uu"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX ei osannut löytää tyylipohjansa!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Tarkista että tiedosto \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "on oikein asennettu. Täytyy valitettavasti lopettaa :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX ei löytänyt mitään layout-kuvaus!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Tarkista tiedoston \"textclass.lst\" :n sisältö"
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Anteeksi, pakko lopettaa :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Väli"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "i Sisennys|#I"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "k Pystyväli|#K"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "c Dok. luokka:|#C"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "p Sivuotsikkotyyli:|#P"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "f Kirjasintyyppi:|#F"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "o Kirjainkoko:|#O"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "l Kelluvien sijoitus:|#L"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "s PS-ajuri:|#s"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "d Koodaus:|#D"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "n Yksi|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "t Kaksi|#T"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "-puolinen"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "e Yksi|#e"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "w Kaksi|#w"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "x Lisäoptiot:|#X"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Kieli:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "u Oletuskapp. väli:|#u"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Otsikkotasojen lkm."
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Sisällysluettelotasojen lkm."
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "g Riviväli|#g"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "b Luetelmamerkit|#B"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "m Käytä AMS Math|#m"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "f Suku:|f"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Sarja:|#s"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "h Muoto:|#h"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "z Koko:|#Z"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "m Sekäl.:|#M"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "c Väri:|#C"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "T Kaikki menevät edestakaisin|#T"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Eivät koskaan mene edestakaisin"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Menevät aina edestakaisin"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "d Tunnusleveys:|#d"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Sisennys"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "b Yläpuolella|#b"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "e Alapuolella|#E"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "o Yläpuolella|#o"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "l Alapuolella|#l"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "i Ei sisennystä|#I"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "r Oikea|#R"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "f Vasen|#f"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "c Blokki|#c"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "n Keskistys|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "v Ylle:|#v"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "w Alle:|#w"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Sivunjaot"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Viivat"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Tasaus"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Pystyvälit"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "x Lisäoptiot|#X"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "k Pidä|#K"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "p Pidä|#p"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Tyyppi:|#t"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "s Yksink.|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "d Kaksink.|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Teksti"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "s Erikois:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Reunukset"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Sivuotsikkotila"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Asento"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "o Potretti|#o"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "l Maisema|#L"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Paperi:|#P"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Oma paperikoko"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "u Käytä \"Geometry\"-pakkaus|#U"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "w Leveys:|#W"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "h Korkeus:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "t Yläreuna:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "b Alareuna:|#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "l Vasen:|#e"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "r Oikea:|#R"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "i Sivuots. kork.:|#i"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "d Sivuots. väli:|#d"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "f Alaviiteväli:|#F"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Reunukset"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "t Yläreuna|#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "b Alareuna|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "l Vasen|#L"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Erikoissolu"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Monipalsta|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "a Lisää palsta|#A"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "o Poista palsta|#O"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "p Lisää rivi|#p"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "w Poista rivi|#w"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "d Poista taulokko|#D"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Palsta"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Rivi"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "s Aseta reunat|#S"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "u Poista reunat|#U"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Pitkä taulukko"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "9 Pyöri 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "n Rivit|#N"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Erikoistaulukko"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Ens. yläotsikko"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Ylätsikko"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Alaotsikko"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Viim. alaotsikko"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Uusi sivu"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Pyöri 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "X Lisäksi|#X"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "e Vasemmalle|#e"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "i Oikealle|#i"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "c Keskellä|#C"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Lisäoptiot"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "l Pituus|#L"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "o tai %|#o"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "d Kesken|#d"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "h Vaakatäyttö Minisivu-kappaleiden väliin|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "s Aloita uusi Minisivu|#S"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "i Sisennetty kappale|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minisivu|#m"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Floatflt|#F"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Erikoinen monipalstajärjestys"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Erikoinen palstajärjestys"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "EPS-tiedosto (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Inlined EPS (*.eps, *.ps)|#i"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Tyyppi"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "r Antiikva -laji|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Sans Serif -laji|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "t Kirjoituskonelaji|#T"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Normaali|#n"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Zoomattu|#z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "u Päivitä|uU#u"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "u Päivitä|#U"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "i Lisää viite|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "p Lisää sivunnumero|#P"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "g Siirry viitteeseen|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Tallennus epäonnistui. Uudestaanko uudella nimellä?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(muuten dokumentti tallentamatta.)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Mallipohjat"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Anna tiedostonnimeä, niin tallenan:"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Peruutettu."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Sama nimi kuin dokumentilla on jo:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Tallennanko sitä huolimatta?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Toinen samanniminen dokumentti avoinna!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Korvaanko tällä dokumentilla?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Nimitin dokumentti uudelleen: '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', mutten tallennettu..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Dokumentti jo olemassa:"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Korvaanko tiedosto?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Valitan, en osaa tehdä tätä kuvien piirtelyn aikana."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Yritä hetken kuluttua uudelleen."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(tai tapa harhailevat gs-prosessit käsin ja yritä uudelleen.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "En osaa tehdä tätä oikeinkirjoitustarkastuksen aikana."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Pysähdä ensin oikeinkirjoitustarkastusta."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Löytyi yksi virhe"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Yritäpä korjata se."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " virhettä löytyi."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Yritäpä korjata ne."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "LaTeX-ajon aikana esiintyi virheitä."
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Väärä dokumenttityyppi"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "Operaatio `Build' ei sallittu tässä dokumentissa"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "`Build' prosessin aikana tapahtui virheita."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex ei käy LinuxDocille."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Ei varoituksia."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Löytyi yksi varoitus."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Käytä 'Muokkaa->Siirry virheeseen' sen löytämiseksi."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " varoitusta löytyi."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Käytä Muokkaa->Siirry virheeseen' niiden löytämiseksi."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex-ajo onnistui"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Chktex ei näytä toimivan."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Suoritan komento:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Tiedosto jo olemassa:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Haluatko kirjoittaa tiedoston päälle?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Peruutettu"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "'Kiva' LaTeX tiedosto tallennettu nimellä"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Dokumenttiluokka oltava linuxdoc."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Rakennan LinuxDoc SGML tiedosto `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "LinuxDoc SGML -tiedosto tallennus nimellä"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "Dokumenttiluokka oltava linuxdoc."
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Rakennan LinuxDoc SGML tiedosto `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "LinuxDoc SGML -tiedosto tallennus nimellä"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Ascii-tiedosto tallennettu nimellä"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Dokumentin autotallennus käynnissä..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Autotallennus epäonnistui!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Lisättävän tiedoston nimi"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Virhe! En osaa avata kyseinen tiedosto:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Sisällysluettelo"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Lisää viite"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Lisään alaviitteen..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Luen sisään LinuxDoc SGML-tiedoston `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Muunnan LinuxDoc SGML TeX-tiedostoksi..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Muunnan LinuxDoc SGML DVI-tiedostoksi..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Muunnan LinuxDoc SGML DVI-tiedostoksi..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Merkkityyli"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Kappaletyyli"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Dokumentin tyylipohja"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Lainausmerkit"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "LaTeXin aloitusosa"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Haluatko tallentaa tämänhetkiset tyyliasetukset"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "merkille, dokumentille, paperille ja lainausmerkeille"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "dokumentin oletusarvoiksi?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Avaa/Sulje..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Ei lisää kelattavana takaisin"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "\"Kelaa eteenpäin\" ei vielä toimi matematiikkatilassa"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Ei lisää kelattavana eteenpäin"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Kirjasinlaji:"
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Syvyys:"
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Lisään reunahuomautus..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Kappaletyyli pantu muistiin"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Kappaletyyli asetettu"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Ympäristötasoa muutettu (mikäli mahd., ehkä ei)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Kappaletyyli asetettu"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Asetanko joitakin parametreja"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "tämän dokumenttiluokan oletusarvoihin?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Muunnosvirheita!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "En voi vaihtua uuteen dokumenttiluokkaan"
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Palaan alkuperäiseen dokumenttiluokkaan."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Muunnan dokumentti toiseen dokumenttiluokkaan..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Yksi kappale en saanut muunnetuksi"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " kapalletta en saanut muunnetuksi"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "valittuun dokumenttiluokkaan"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Dokumenttityyli asetettu"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Ei lisää muistiinpanoja"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Lainausmerkkien tyyli asetettu"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "LaTeXin aloitusosa asetettu"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "En osaa lisätä taulukko taulukon sisään."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Lisään taulukko..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Taulukko lisätty"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "VIRHE!  En voi tulostaa!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Tarkista 'sivujen väli'!"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Tarkista 'kopioiden määrä'"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Virhe:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "En osaa tulostaa"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Tarkista parametrisi oikeellisuutta"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Lisään kuva..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Kuva lisätty"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Näyttöoptiot asetettu"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "LaTeX-optiot"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "\"configure\" käynnissä..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Lataan uudelleen konfigurointitiedot..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Systeemi on uudelleen konfiguroitu."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Jos haluat käyttää uusia dokumenttiluokkakuvauksia,"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "Sinun on käynnistettävä LyX uudelleen."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "En löytänyt tätä tarraa"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "tässä dokumentissa"
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Ei dokumenttia ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Ei tarroja dokumentissa ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr " Ei | Standardi | Pieni | Keski | Iso | Pystytäyttö | Annettu pituus "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr " Ei muutosta %l| Antiikva | Sans Serif | Kirjoituskone %l| Oletus "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Ei muutosta %l| Medium | Lihava %l| Oletus "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr " Ei muutosta %l| Pysty | Kursiivi | Kalteva | Kapiteeli %l| Oletus "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Ei muutosta %l| Pikkuruinen | Pienin | Pienempi | Pieni | Normaali | Iso | "
+"Isompi | Isoin | Valtava | Valtavampi %l| Suurenna | Pienennä | Oletus"
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+" Ei muutosta %l| Korostettu | Alleviiva | Nimityyli | LaTeX-tila %l| Oletus "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+"Ei muutosta %l| Ei väriä | Musta | Punainen | Vihreä | Sininen | Syaani | "
+"Magenta | Keltainen %l| Oletus"
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Yksinkertainen | Puolitoista | Tupla | Muu "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Pieni | Keski | Iso | Annettu pituus "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Oletus | Oma | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" Ei mitään | A4 kapeat marginaalit (vain potretti) | A4 hyvin kapeat "
+"marginaalit (vain potretti) | A4 hyvin leveät marginaalit (vain potretti) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr ""
+" ``teksti'' | ''teksti'' | ,,teksti`` | ,,teksti'' | «teksti» | »teksti« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "LyX-avauskuva"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Kuittaus"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "y Kyllä|yY#y"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "n Ei|nN#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "iso"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Mahd. muutoksia ei oteta huomioon"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Dokumentti on kirjoitussuojattu"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Varoitus: En voinut määrittää binäärin polku."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr ""
+"Jos sinulla on ongelmia, yritä käynnistää LyX täydellisen polun nimellä."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "LYX_DIR_10x ympäristömuuuttaja epäkelpo."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Systeemihakemiston arvo: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "LyX Varoitus! En voinut määrittää systeemihakemisto."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Kokeile '-sysdir' komentoriviparametri, tai"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "laita ympäristömuuttajaan LYX_DIR_10x LyX-systeemihakemiston nimi."
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "Sisältää tiedosto `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Käytän sisäänrakennettu oletus "
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr "mutta odota ongelmia."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Odota ongelmia."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Sinulla ei ole käyttäjän LyX-hakemisto."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Sitä tarvitaan omien asetuksiesi säilyttämiseksi."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Järjestänkö se sinulle (suosittelen)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Ajamassa ilman henkilökohtaista LyX-hakemistoa."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Luon hakemisto "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " ja käynnistän \"configure\"..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Epäonnistui. Käytän "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr "sen tilalle."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Valmis!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "LyX Varoitus!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Virhe lukiessa "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Käytän sisäänrakennetut oletusarvot."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Asetan debug-taso arvoon "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX"
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Käyttötapa: lyx [ komentorivioptiot ] [ nimi.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Komentorivioptiot (ISOT ja pienet erilaisia):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "  -help           LyX käyttötavan yhteenveto"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "  -sysdir x       yritä asettaa systeemihakemisto arvoon x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "  -width x        aseta pääikkonan leveys arvoon x"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "  -height y       aseta pääikkunan korkeus arvoon y"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "  -xpos x         aseta pääikkunan x-sijainti arvoon x"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "  -ypos y         aseta pääikkunan y-sijainti arvoon y"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n         missä n on debuggausoptioiden summa. Kokeile -dbg 65535 "
+"-help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "  -Reverse        vaihtaa keskenään etu- ja taustavärit"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "  -Mono           ajaa LyX mustavalkoisena"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr ""
+"  -Fastselection   käytä nopea rutiini valittujen alueiden merkkaamiseksi\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Lue LyX man sivu lisäoptioita varten."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "-dbg option numero puuttuu!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "-sysdit option hakemisto puuttuu!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Faksi no.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Vast. Nimi:|#N"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "e Yritys:|#E"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Puhelinluettelo"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "s Valitse tästä|#S"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "t Lisää|#t"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "d Poista|#D"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "v Tallenna|#V"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Vastaanottaja:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Huomautus:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Faksitiedosto: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Puh.luettelo tyhjä"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Tallenna (tarpeen)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "En osaa avata puh.luetteloa: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "LOKITIEDOSTO PUUTTUU/TYHJÄ!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Viesti-ikkuna"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cTyhjä puh.luettelo"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Puhelinluettelo"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Antiikva"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Sans serif"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Kirjoituskone"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Symbooli"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Peri"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Unohda"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Medium"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Lihava"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Pysty"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Kursiivi"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Kalteva"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Kapiteeli"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Pikkuruinen"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Pienin"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Pienempi"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Pieni"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normaali"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Iso"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Isompi"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Isoin"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Valtava"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Valtavampi"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Suurenna"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Pienennä"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "pikkuruinen"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "pienin"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "pienempi"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "pieni"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normaali"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "iso"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "isompi"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "isoin"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "valtava"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "valtavampi"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "suurenna"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "pienennä"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "peri"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "unohda"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Pois päältä"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "Päällä"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Pois/päälle"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Ei mitään"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Musta"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Valkoinen"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Punainen"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Vihreä"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Sininen"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Syaani"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Magenta"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Keltainen"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Matematiikka"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Leikeosa"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Korostus "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Alleviiva "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Nimityyli "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "Latex "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Oletus"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Tuntematon jakso:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Tuntematon toiminta"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Komento laiton ilman avoinna oleva dokumentti"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Dokumentti on kirjoitussuojattu"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Tekstitila"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Tuntematon vientityyppi: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "En tunne tätä tuontitiedostotyyppiä: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Tyyli "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " tuntematon"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Ei ole viitettä muuttavana"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Merkintä poistettu"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Merkintä asetettu"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Merkintä pois päältä"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Merkintä päälle"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "\"Push-toolbar\" vaatii argumenttia > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Käyttöohje: toolbar-add-to <LyX-komento>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Argumentti puuttuu"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Vain sallittu matematiikkatilassa!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Avaan aladokumentti"
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Tuntematon alaviitetyyppi"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Kirjoitussuojattu dokumentti"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Anna uuden dokumentin tiedostonnimi"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "uusi"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Haluatko sulkea tuo dokumentti nyt?\n"
+"('Ei' vain siirtyy avoinna olevaan versioon)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Haluatko avata dokumentti?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Avaan dokumentti"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "avattu."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Valitse mallipohja"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Esimerkit"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Valitse avattava dokumentti"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "En osannut avata dokumenttia"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Valitse tuotava ASCII tiedosto"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Senniminen dokumentti"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "on jo olemassa. Kirjoitanko päälle?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Tuon ASCII tiedosto"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "ASCII tiedosto"
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "tuotu."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Valitse tuotava Noweb tiedosto"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Valitse tuotava LaTeX tiedosto"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Tuon LaTeX tiedosto"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Tuon Noweb tiedosto"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Noweb tiedosto"
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "LaTeX tiedosto"
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "En osannut tuoda Noweb tiedosto"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "En osannut tuoda LaTeX tiedosto"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Valitse lisättävä dokumentti"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Lisään dokumentin"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "lisätty."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "En osannut lisätä dokumenttia"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Avasin leikeosan"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "tuntematon"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Tallennanko dokumentti ja jatkanko?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: Alkuperäinen kuvaus"
+
+#: src/lyxvc.C:184
+#, fuzzy
+msgid "(no initial description)"
+msgstr "LyX VC: Alkuperäinen kuvaus"
+
+#: src/lyxvc.C:187
+#, fuzzy
+msgid "Info"
+msgstr "Unohda"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr ""
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Lokiviesti"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Hylkäänkö muutokset ja suoritanko checkout?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Jos palautat edellinen, menetät kaikki tehdyt muutokset"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "dokumentin edellisen check-inin jälkeen."
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Haluatko kuitenkin tehdä se?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "RCS-historiaa ei olemassa!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "RCS-historia"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Sulje "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funktiot"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "abg"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr "­ Û"
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr "± ´"
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr "£ @"
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr "S  ò"
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Sekäl."
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "OK  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Palstat "
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "v Pystytasaus|#V"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "h Vaakatasaus|#H"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "OK "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "t Ohut|#T"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "m Keski|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "h Paksu|#H"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negatiivinen|#N"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Quadratin|#q"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "2Quadratin|#2"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Rajaus"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Koristus"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Erotus"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matriisi"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr " Ylä | Keski | Ala"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Matematiikkapaneli"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "f Tiedosto"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "e Muokkaa"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Tyyli"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Lisää"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Ohje"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#F"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#E"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#L"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#I"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#O"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#H"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Näyttöoptiot"
+
+#: src/menus.C:408
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Tuonti%t|LaTeX...%x30|Ascii Teksti Riveinä...%x31|P Ascii Teksti "
+"Kappaleina%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "FIM|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FIM|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIM|Pp#p#P"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|nN#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Vienti%t|LaTeXina...%x40|DVI:nä...%x41|PostScriptina...%x42|Ascii-Tekstina..."
+"%x43|m Räätälityönä...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Vienti%t|LinuxDoc:na...%x40|DVI:nä...%x41|PostScriptina...%x42|Ascii-Tekstinä"
+" "
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Vienti%t|LinuxDoc:na...%x40|DVI:nä...%x41|PostScriptina...%x42|Ascii-Tekstinä"
+" "
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Tt#t#T"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|mM#m#M"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"n Uusi...|t Uusi sjabloonasta...|o Avaa...%l|c Sulje|s Tallenna|tallenna "
+"nimellä..|r Ota tallennettu takaisin%l|Katso dvi|w Katso PostScript|Päivitä "
+"dvi|u Päivitä Postscript|`Build' ohjelma%l|p Tulosta...|Faksaa..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|nN#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|tT#t#T"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|oO#o#O"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|cC#c#C"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|sS#s#S"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|aA#a#A"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|rR#r#R"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|wW#w#W"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|vV#v#V"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|uU#u#U"
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr "FM|Bb#b#B"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|pP#p#P"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|fF#f#F"
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|i Tuo%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|e Vie%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Lopeta%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|iI#i#I"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|eE#e#E"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Tuo%t|LaTeX...%x15|Ascii Teksti Riveinä...%x16|Ascii Teksti "
+"KaPpaleina...%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr ""
+"n Uusi...|t Uusi, mallipohjaa käyttäen...|o Avaa...%l|i Tuo%m%l|x Lopeta%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Kelluvat & leikeosat%t|o Avaa/Sulje%x21|m Sulata%x22|a Avaa kaikki "
+"alaviitteet/reunahuomautukset%x23|c Sulje kaikki "
+"alaviitteet/reunahuomautukset%x24|f Avaa kaikki kuvat/taulukot%x25|t Sulje "
+"kaikki kuvat/taulukot%x26|r Poista kaikki virhelaatikot%x27\"\""
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|oO#o#O"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|mM#m#M"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|aA#a#A"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|cC#c#C"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|fF#f#F"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|tT#t#T"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|rR#r#R"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Taulukko%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Monipalsta%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Monipalsta%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|mM#m#M"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|t Yläviiva%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|t Yläviiva%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|tT#t#T"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|b Alaviiva%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|b Alaviiva%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|bB#b#B"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|l Vasen viiva%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|l Vasen viiva%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|lL#l#L"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|r Oikea viiva%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|r Oikea viiva%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|rR#r#R"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|e Tasaus vasen%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|e Tasaus vasen%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|i Tasaus oikea%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|i Tasaus oikea%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|c Tasaus kesken%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|c Tasaus kesken%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|cC#c#C"
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|o Lisää rivi%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|oO#o#O"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|u Lisää palsta%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|uU#u#U"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|w Poista rivi%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|wW#w#W"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|n Poista palsta%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|d Poista taulukko%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|dD#d#D"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|i Lisää taulukko%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Versiohallinta%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Rekisteröi%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|i Kirjoita muutokset sisään%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|o Kirjoita ulos muokattavaksi%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|i Kirjoita muutokset sisään%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|o Kirjoita ulos muokattavaksi%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|l Ota edellinen versio takaisin%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|u Peruuta viimeinen sisäänkirjoitus%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Näytä historia%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Rekisteröi%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Rr#r#R"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|iI#i#I"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|oO#o#O"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|Ll#l#L"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|uU#u#U"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|hH#h#H"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"u Kelaa takaisin|r Kelaa eteenpäin%l|c Leikkaa|o Kopioi|p Liimaa%l|f Etsi & "
+"korvaa...|e Siirry virheeseen|n Siirry muistiinpanoon|i Kelluvat & "
+"leikeosat%m|t Taulukko%m|s Oikeinkirjoitus...|h TeX-tarkastus|a "
+"Sisällys...%l|v Versiohallinta%m%l|w Katso LaTeX lokitiedosto%l|l Liimaa "
+"X-merkintä riveinä|g Liimaa X-merkintä kappaleina"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|uU#u#U"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|rR#r#R"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|cC#c#C"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|oO#o#O"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|pP#p#P"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|fF#f#F"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|eE#e#E"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|nN#n#N"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|iI#i#I"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|tT#t#T"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|sS#s#S"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|hH#h#H"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|aA#a#A"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|vV#v#V"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|wW#w#W"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|lL#l#L"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|gG#g#G"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"c Merkki...|p Kappale...|d Dokumentti...|a Paperi...|e Taulukko...|q "
+"Lainausmerkit...%l|m Korostustyyli%b|n Nimityyli%b|b Lihava%b|t "
+"TeX-tyyli%b|v Muuta ympäristösyvyys|l LaTeXin aloitusosa...%l|s Tallenna "
+"tyylistö oletukseksi"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|cC#c#C"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|pP#p#P"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|dD#d#D"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|aA#a#A"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|eE#e#E"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|qQ#q#Q"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|mM#m#M"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|nN#n#N"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|bB#b#B"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|tT#t#T"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|vV#v#V"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|lL#l#L"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|sS#s#S"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "I Tuo ASCII tiedosto%t|l Riveinä%x41|p Kappaleina%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|lL#l#L"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|pP#p#P"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Listat & sisällysluettelot%t|c Sisällysluettelo%x21|f Kuvat%x22|t "
+"Taulukot%x23|Algoritmit%x24|i Hakemisto%x25|BibTeX-viitteet%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|cC#c#C"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|fF#f#F"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|tT#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|Aa#a#A"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|iI#i#I"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|Bb#b#B"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Kelluvat%t|f Kuva%x71|Taulukko%x72|w Leveä kuva%x73|i Leveä "
+"taulukko%l%x74|Algoritmi%x75\""
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|Tt#t#T"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|wW#w#W"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|iI#i#I"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|Aa#a#A"
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Erikoismerkki%t|h Vaakatäyttö%x31|p Tavutuskohta%x32|b Kova välilöynti%x33|l "
+"Rivinsiirto%x34|i Ellipsis(...)%x35|e Virkkeen lopun piste%x36|q "
+"kokonaislainausmerkki(\")%x37|Valikkoerotusmerkki %x38"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|hH#h#H"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|pP#p#P"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|bB#b#B"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|lL#l#L"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|iI#i#I"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|eE#e#E"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|qQ#q#Q"
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr "IMS|mM#m#M"
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"g Kuva...|b Taulukko...%l|c Sisällytä Tiedosto...|Tuo ASCII Tiedosto%m|Lisää "
+"LyX Tiedosto...%l|f Alaviite|m Reunaviite|o Kelluvat%m%l|Listat & "
+"Sis.Luettelot%m%l|s Erikoismerkki%m%l|n Huomautus...|l Tarra...|r "
+"Viite...|Kirjallisuusviite...|d Hakemistoviite...|w Hakemistoviitteen viim. "
+"sana"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|bB#b#B"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|cC#c#C"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|Aa#a#A"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|Xx#x#X"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|fF#f#F"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|mM#m#M"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|oO#o#O"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|tT#t#T"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|sS#s#S"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|nN#n#N"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|lL#l#L"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|rR#r#R"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|iI#i#I"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|dD#d#D"
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "IM|wW#w#W"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr "IM|uU#u#U"
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"f Murtolauseke|s Neliöjuuri|Eksponentti|x Alaindeksi|u "
+"Summa|Integraali%l|Matematiikkatila|d Kaava näytille%l|p "
+"Matematiikkapaneli..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|fF#f#F"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|sS#s#S"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Ee#e#E"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|xX#x#X"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|uU#u#U"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#i#I"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#m#M"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|dD#d#D"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|pP#p#P"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"f Näyttökirjasinlajit...|s Oikeinkirjoitusoptiot...|k "
+"Näppäimistö...|LaTeX...%l|r Konfiguroi uudelleen"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|fF#f#F"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|sS#s#S"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|kK#k#K"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#l#L"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|rR#r#R"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LateX Configuration%l|Tekijänoikeus ja "
+"Takuu|Kiitokset...|Versio..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr "HM|Ii#I#i"
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|Tt#T#t"
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "Hm|Uu#U#u"
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr "HM|xX#x#X"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Cc#C#c"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|Kk#K#k"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "HM|Ll#L#l"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|oO#o#O"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|eE#e#E"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr "HM|Vv#v#V"
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "LyX-versio"
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Kirjastohakemisto:"
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Käyttäjähakemisto:"
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Avaan ohjetiedosto"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Suoritan:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Ei ole avoimia dokumentteja *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Tervetuloa LyXiin!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Järjetöntä tällä kappaletyylillä!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Virhe: En osannut siirtyä hakemistoon: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "LyX sisäinen virhe:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Path Stack underflow."
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Mihin?"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "p Kirj.|#P"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "f Tied.|#F"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "g Kakki sivut|#G"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "o Vain parittomat|#O"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "e Vain parilliset|#E"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "n Oikea järjestys|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "r Käänteinen järj.|#R"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Sivujärj."
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Sivuja:"
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Kopioita:"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Määrä:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "U Lajittelemätön|#U"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Tiedostotyyppi"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "c Komento:|#C"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "Postscript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "t LaTeX|#t"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "s Ascii|#s"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "d Käytä dokumentin kieli|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "u Käytä vaihtoehtoinen kieli|#U"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "t Salli yhdyssanat|#T"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "i Syötä merkkikoodausvalinta ispell'iin|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "p Käytä vaihtoehtoinen käyttäjäsanasto:|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "e Lisää sanoissa sallittuja erikoismerkkejä:|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Sanasto"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Korvaa"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Lähellä\n"
+"olevat"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Oikeinkirjoitusoptiot...|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "s Käynnistä oikeinkirjoitustarkastus|#S"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "i Laita käyttäjäsanastoon|#I"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "g Hyppää sanan yli|#g"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "a Hyväksy sana tässä istunnossa|#A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "t Lopeta oikeinkirjoitus|#T"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "c Sulje oikeinkirjoitusohjelma|#C^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "r Korvaa sana|#R"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Oikeinkirjoitusoptiot"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Oikeinkirjoitus"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"ispell-prosessi kuoli jostain syystä. Olethan installoinut\n"
+"tämän dokumentin kielen sanasto? Tarkista /usr/lib/ispell, tai\n"
+"valitse toinen sanasto Oikeinkirjoitusoptiot-valikosta."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " sanaa tarkastettu."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " sana tarkastettu."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Oikeinkirjoitus tarkastettu!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Ispell-prosessi kuoli jostain syystä.\n"
+"Ehkä se tapettiin."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Monipalsta toimii vain vaakasuuntaan."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+"Tällä tavoin et voi laittaa kaksi perättäistä välilyöntiä. Ks. Tutorial."
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr "Kappaleen alkuun et voi laittaa välilöyntiä. Ks. Tutorial."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Mahdoton toiminta"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Ei voi laittaa kelluvaa kelluvan sisään!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Ei voi laittaa marginpar minisivun sisään!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Ei voi jakaa taulukkoa."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Kelluva sisältäisi kelluvan!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Kelluvaa avattiin"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Kelluvaa suljettiin"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Mitään ei voi tehdä"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Kirjasinlajin muutosta ei määritetty. Määritä kirjasinlajin muutos "
+"Tyyli-valikon Merkki-alivalikon avulla."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "En osaa käsitellä puolinaisia kelluvia."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "Valitan."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "En osaa käsitellä puolinaisia taulukoita."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "En osaa liimata kelluvaa kelluvan sisään!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Taulukon solu ei voi sisältää kuin yksi kappale!"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644 (file)
index 0000000..21a5124
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,4853 @@
+# Traduction française pour LyX
+# Copyright (C) 1998 Free Software Foundation, Inc.
+# Emmanuel GUREGHIAN <gureghia@spi.lip6.fr>, 1998.
+# Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>, 1998 
+# Ben évidemment, y'a intérêt que même la traduction elle est GNU :-)
+#
+# Cette traduction est faite sur un bout de table. Plusieurs problemes
+# sont a corriger :
+#
+# - utilisation du mot impossible pour unable et cannot : cela peut
+#   induire en erreur entre ce que lyx ne PEUT pas faire et ce que lyx ne
+#   VEUT pas faire.
+#
+# - c'est trop verbeux (ci akouze du francousky) 
+#
+# - comment traduire toggle ? (Dés)Activer ?
+#
+# - quotes = guillemet ou apostrophe ? => c'est choisi guillemets
+#
+# - emphasis a parfois été traduit par emphase ou italique. quelle est
+#   la différence ? un expert SVP Réponse : => emphasis=mise en évidence
+#
+# - quelle différence entre noun et small caps ? Réponse : un est style latex l'autre pas
+#
+# - Il y a plein de fautes d'orthographe 
+#
+# - La traduction n'est pas cohérente (le même terme n'est pas
+#   traduit de la même façon)
+#
+# - toute personne de bonne volonté est la bienvenue...
+#
+# -----------------------------------------------------------------------
+# Modifs :
+# - Sauver -> Enregistrer (à la Word)
+#   car sauver c'est la sauvergarde d'urgence
+# - unification keymap = réaffectation clavier 
+# - des blancs ont été ajoutés pour la taille de caractères. Demander si c'est convaincant ou non
+# - Diminuer et augmenter ont de + été munis de <>. Idem ligne précédente
+# - noun = majuscules
+# - Small caps = petites capitales
+msgid ""
+msgstr ""
+"Project-Id-Version: LyX 1.0.0pre2\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:47+02:00\n"
+"Last-Translator:  Emmanuel GUREGHIAN <gureghia@spi.lip6.fr>\n"
+"Language-Team: french <fr@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Formatage du document..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Plus aucune erreur"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "Mise en garde ChkTeX numéro:"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Chargement des polices par le serveur X..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Execution numéro"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "Execution LaTeX numéro"
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Exécution de MakeIndex"
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Exécution de BibTeX"
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "Pas de fichier journal de LaTeX"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "Fichier journal compilation"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "Fichier journal LaTeX"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Décrire commande"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Sélectionner caractère précédent"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Insertion BibTeX"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Sauvegarde automatique"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Aller au début du document"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Sélectionner jusqu'au début du document"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Fermer"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Aller jusqu'à la fin du document"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Sélectionner jusqu'à la fin du document"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Fac Simile"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Nouveau document"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Nouveau document depuis modèle"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Ouvrir"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Recharger la version sur disque"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Imprimer"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Revenir à la précédente sauvegarde"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Mise à jour DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Mise à jour PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Visualisation DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Visualisation PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "Compiler programme"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Vérification TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Enregistrer"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Enregistrer sous"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Annuler"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Caractère précédent"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Caractère suivant"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Insérer citation"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Exécuter commande"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Copier"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Couper"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Décrémenter la profondeur d'environnement"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Incrémenter la profondeur d'environnement"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Changer la profondeur d'environnement"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Changer les paramètres des puces"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Aller en bas"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Sélectionner la ligne suivante"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Choisir l'environnement du paragraphe"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Positionnement sur l'erreur suivante"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Insérer figure"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Rechercher et Remplacer"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "(Dés)activer le suivi de l'ascenceur par le curseur"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Gras/Maigre"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Code/Texte"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Style de police par défaut"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Mettre (ou ne pas mettre) en Évidence"
+
+# Je  suis pas sur d'italique
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "(Dés)activer le style utilisateur"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "(Dés)activer style petites majuscules"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "(Dés)activer le style polices romain"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "(Dés)activer le style polices sans sérif"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Taille de la police"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Paramètres de la police"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "(Dés)activer le soulignement"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Insérer une note de bas de page"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Sélectionner"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Insérer ressort horizontal"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Insérer un point de césure"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Insérer points de suspension"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Insérer un point final"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Désactiver la réaffectation des touches du clavier"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Réaffectation principale"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Réaffectation secondaire"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "(Dés)Activer la réaffectation des touches"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Insérer étiquette"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Copier le type d'environnement paragraphe"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Coller le type d'environnement paragraphe"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Spécifier la taille du papier et les marges"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Aller au début de la ligne"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Sélectionner"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Aller à la fin de la ligne"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Sélectionner"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Quitter"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Insérer note en marge"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Lettres Mathématiques Grecques"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Mode Mathématique"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Descendre d'un paragraphe"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Sélectionner paragraphe suivant"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Remonter d'un paragraphe"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Sélectionner paragraphe précédent"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Coller"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Insérer espace protégé"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Insérer citation"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Reconfigurer"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Recommencer"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Insérer référence croisée"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Insérer Tableau"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "Passer en mode TeX"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Annuler"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Inclure"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Importer Document"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Enlever toutes les marques d'erreur"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Inserer séparateur de menu"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Pas de description disponible"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Envoyer Document vers Commande"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr "(Modifié)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr "(En Lecture Seule)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Document en lecture seule. Modifications de format interdites"
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Mise en Page"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Format de Papier"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Attention : nombre incorrect (exemple correct: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Paramètres optionnels de mise en page"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Type de paramètres optionnels de mise en page"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Attention : pourcentage incorrect"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Paramètres optionnels du tableau"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Format Tableau"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Attention : Mauvaise position du curseur, MAJ fenêtre"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Confirmation: Réappuyer sur le bouton Effacer"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Erreur !"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Impossible d'ouvrir le fichier spécifié"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Erreur de chargement de la classe de document"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Impossible de charger la classe du document"
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- valeur par défaut substituée "
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Attention: Ancien Insert Ignoré"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Attention: Seul le format lyx %.2f peut être lu, pas le %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "ERREUR : Seul le format lyx %.2f peut être lu, pas le %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Attention !"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Lecture du document incomplète"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Sans doute le document est-il tronqué"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "ERREUR !"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr ""
+"Ancien format de fichier utilisé. Utilisez LyX 0.10.7 pour relire ceci!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Pas un fichier LyX"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Impossible de lire le fichier"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Erreur! Document en lecture seule"
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Erreur! Impossible d'écrire le fichier"
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Erreur! Impossible de fermer le fichier correctement: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Erreur! Impossible d'écrire le fichier"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Erreur! Impossible d'ouvrir le fichier temporaire"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Erreur! Impossible de fermer le fichier correctement: "
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr ""
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Impossible d'écrire le fichier"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Erreur : Mauvaise profondeur pour la commande LatexType\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "Exécution de LaTeX..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX n'a pas fonctionné !"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Fichier journal manquant :"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Effectué"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Exécution de l'outil de programmation litteraire..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "L'outil de programmation litteraire n'a pas fonctionné !"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Compilation en cours..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "La compilation n'a pas fonctionné !"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Exécution de chktex..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex n'a pas fonctionné"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Impossible d'exécuter le fichier:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Impossible d'ouvrir le fichier temporaire"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Erreur ! Impossible d'ouvrir le fichier temporaire"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Erreur lors de l'exécution de *roff sur le tableau"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Opération Impossible"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Impossible d'insérer une table ou une liste dans une table"
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Désolé.(Michel Denisot)"
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Modifications du document:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Enregistrement du document?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Certains documents n'ont pas été sauvés"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Vraiment quitter?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Sauvegarde du document"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Document sauvé sous le nom"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Impossible d'effacer le fichier de sauvegarde!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "L'enregistrement a échouée"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Pas de documents ouverts!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Essai de sauvegarde du document"
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " sous...."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "L'enregistrement semble avoir réussi, ouf."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr " L'enregistrement a échoué"
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr " L'enregistrement a échoué! Le document est perdu."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Une copie de sauvegarde du document existe !"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "On la charge à la place?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Le fichier de sauvegarde est plus récent"
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "On le charge à la place?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Impossible d'ouvrir le modèle"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Impossible de convertir le fichier"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Le document est déjà ouvert :"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Voulez-vous recharger ce document?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Le fichier `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' est en lecture seule"
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Créer un nouveau document avec ce nom?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Taille|#z"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr ""
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Appliquer"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Annuler|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr ""
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr ""
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr ""
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr ""
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr ""
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Indentation des puces"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr ""
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr ""
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr ""
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr ""
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr ""
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr ""
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Désolé votre librairie XPM est trop vieille."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Il est nécessaire de disposer de la version xpm-4.7."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Essayez de lancer lyx en monochrome (lyx  -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+"default | petit(4) | scripte(3) | note de bas de page(2)  | petit(1) | "
+"normal | grand(1) | grand(2) | grand(3) | grand(4) | grand(5)"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Sélectionner"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "ERREUR: LyX n'a pas pu lire le fichier Remerciements"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Installez le correctement pour apprécier"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "la somme de travail des gens qui ont travaillé sur le projet LyX"
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Remerciements"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "License et Garantie"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr ""
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Toutes ces personnes ont travaillées sur le projet LyX. Merci,"
+
+#: src/credits_form.C:50
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[erreur d'interprétation]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[interprétation....]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[pas de fichier]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[pas affiché]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[ghostscript absent]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[erreur inconnue]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr ""
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "chemin vers la figure vide"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr ""
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr ""
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "Figure EPS"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Le nom du fichier ne peut contenir aucun de ces caractères :"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "espace, '#', '~', '$' ou '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Attention! Impossible d'ouvrir le répertoire."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "Erreur interne de Lyx!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Impossible de tester si le répertoire est accessible en écriture."
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Impossible d'ouvrir le fichier test"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Fichier test crée mais impossible de le détruire?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Erreur! Impossible d'ouvrir le répertoire:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Erreur! Impossible de supprimer le fichier:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Erreur! Impossible de créer le répertoire temporaire:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Erreur! Impossible de supprimer le répertoire temporaire:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Erreur interne!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Appel à createDirectory avec un nom invalide"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Erreur! Impossible de créer le répertoire:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Pages de caractères|#C"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Page de caractère introuvable!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Erreur:\n"
+"\n"
+"Carte de réaffectation clavier\n"
+"non trouvée"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Table de caractères:|#H"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Autre...|#O"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Autre...|#T"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Langue"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Carte Clavier"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Réaffectation Primaire|#r"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Pas de réaffectation Clavier"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Réaffectation Secondaire|#e"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Secondaire"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Primaire"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "Fichier EPS|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Visualisation plein écran|#v"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Parcourir..."
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Afficher Cadre|#F"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Translater"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Options"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr ""
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% de la Page|#"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Par Défaut|#t"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr ""
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "pouces|#h"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Affichage"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Hauteur"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Largeur"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr ""
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Affichage en couleur|#D"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Ne pas afficher cette figure|#y"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Affichage en niveaux de gris|#i"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Affichage en Monochrome|#s"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Par Défaut|#U"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr ""
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "pouces|#n"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% de la Page|#"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% de colonne|#"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Titre|#k"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "sous-figure|#k"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Répertoire:|#D"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Filtre:|#P"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Nom du fichier:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Rafraîchir|#R#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Base|#H#h"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Utilisateur1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Utilisateur2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Colonnes"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Lignes"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Rechercher|#n"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Remplacer|#W"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Remplacer|#R#r"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Fermer|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Selon la casse|#s#S"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Recherche exacte|#M#m"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Remplacer tout|#R#r"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Mode mathématique grec"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Mode clavier grec"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Mode clavier normal"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "mode TeX"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Pas de chiffre"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Chiffre"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Entrez une nouvelle étiquette à insérer"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "Mode texte mathématique"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Action invalide en mode mathématique"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Mode éditeur mathématique"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr ""
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Clef:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Remarque:|#R"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Clef:|#K"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Étiquette:|#L"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr ""
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Entrée bibliographique"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Références générées par bibtex"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Base de données:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr ""
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr ""
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Erreur"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "Erreur LaTeX"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Erreur ouverte(non résolue)"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Parcourir|#B"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Formatage désactivé|#D"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Charger|#L"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Nom du fichier:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "espace visible|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Mot à mot"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Utiliser input|#i"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Utiliser include|#i"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Documents"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Sélectionner"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Inclusion"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr ""
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Inclusion mot à mot"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Mots clés:|#K"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr ""
+
+#: src/insetindex.C:120
+msgid "Idx"
+msgstr ""
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Imprimer Index"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr ""
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Fermer|#C^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Liste des algorithmes"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Liste des figures"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Liste des tableaux"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr ""
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Type de référence"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Positionnement sur l'étiquette"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Changer l'étiquette"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Page"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Référence"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr ""
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr ""
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Table des matières"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr ""
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Destinataire:|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Fermer|#C^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "type HTML"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Insérer URL"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr ""
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr ""
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "Autre..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Table de réaffectation claviers"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr ""
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Autoriser les accents sur TOUS les caractères|#w"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Mise à jour|#Uu"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX n'a pas pu trouver les descriptions de classes de documents!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Vérifier que le fichier \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "est installé correctement. Désolé... :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX n'a pas pu trouver les descriptions de classes de documents!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Vérifier que le fichier \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Désolé, on doit se quitter... :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Séparation"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Indentation|#I"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Interligne|#K"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Classe:|#C"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Mise en Page:|#P"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Polices:|#F"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Taille Police:|#O"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Placement des flottants"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "Pilote PS:|#S"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Encodage:|#D"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Un|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Deux|#T"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Cotés"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Un|#e"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Deux|#w"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Options supplémentaires"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Langue:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Interligne par défaut:|#u"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Profondeur de la numérotation"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Profondeur de la TDM"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Espacement|#g"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "forme des puces|#B"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "Utiliser AMS Maths|#M"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Famille:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Séries:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Forme:|#H"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Taille:|#Z"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Divers:|#M"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Couleur:|#C"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Activer sur tous|#A"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Paramètres inutiles à changer"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Paramètres utiles à modifier"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Taille Étiquette:|#d"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Indentation"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Avant|#b"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Après|#E"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Avant|#o"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Après|#l"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Pas d'Indentation|#I"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Droite|#R"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Gauche|#f"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Bloc|#c"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Centré|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Avant:|#v"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Après:|#w"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Saut de Page"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Lignes"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Alignement"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Espaces Vertical"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Autres...|#X"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Garder|#K"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Garder|#p"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr ""
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr ""
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Simple|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr ""
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Texte"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Spécial:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Marges"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Marge Pieds de Page"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr ""
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr ""
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Paysage"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Taille Papier:|#P"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Taille Personnalisée"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Utiliser le package Geometry|#U"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Largeur:|#W"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Hauteur:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Haute:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Basse:|#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Gauche:|#e"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Droite:|#R"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Hauteur Entête|#i"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Entête:|#d"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Bas de page|#F"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Bordures"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Haut|#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Bas|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Gauche|#L"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Cellule spécial"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Multicolonnes|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Ajouter Colonne|#A"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Supprimer Colonne|#O"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Ajouter Ligne|#p"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Supprimer Ligne|#w"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Supprimer Tableau|#D"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Colonne"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Ligne"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Activer Bordures|#S"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Désactiver Bordures|#U"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Grand Tableau"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Rotation de 90%|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Passage à la ligne|#N"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Spec. Tableau"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Premier entête"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Entête"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Pied de Page"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Dernier Pied de Page"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Nouvelle Page"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Rotation 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Plus d'options|#X"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Gauche|#e"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Droite|#i"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Centré|||#C"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Options Supplémentaires"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Valeur|#L"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "ou %|#o"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Milieu|#d"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "Ressort horizontal entre les minipages|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Commencer une nouvelle minipage|#S"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Paragraphes Indentés|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr ""
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Floatflt[comment traduire?]|#F"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Alignement Spécial des Multi-Colonnes"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Alignement Spécial des Colonnes"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "PostScript Encapsulé (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Incorporer EPS(*.eps, *.ps)|#I"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr ""
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Police Romane|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Police Sans Sérif|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Police Machine à Écrire|#T"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Police Normale|#N"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Zoom Police|#Z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Mise À Jour|Uu#u"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Mise À Jour|#U"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Insérer Référence|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Insérer Numéro de Page|#P"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Positionnement sur Référence||#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "La sauvegarde a échoué. Renommer le fichier et réessayer?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Sinon le document ne sera pas sauvegardé)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Modèles"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Entrez le nom sous lequel le fichier sera sauvé"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Annulé"
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Le document porte déjà ce nom:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Enregistrer quand même?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Un autre document ouvert porte ce nom !"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Remplacer avec le document courant ?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Document renommé en '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', mais non sauvé..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Le Document existe déjà"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Remplacer le fichier ?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Désolé, Cette action est impossible durant l'interprétation des Images"
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Attendez quelques secondes avant de recommencer."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(ou arrêtez manuellement les processus 'gs' et recommencez.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Désolé, Cette action est impossible durant la correction d'orthographe"
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Arrêtez le correcteur d'abord"
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Une erreur détectée"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Il faut la résoudre d'abord"
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " erreurs détectées"
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Vous devriez les résoudre d'abord"
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "LaTeX a émis des erreurs"
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Mauvais type de document"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "Le compilation n'est pas possible pour ce document"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "Il y a eu des erreurs de compilation"
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex ne fonctionne pas avec les documents crées avec SGML"
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Aucune mise en garde détectée"
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Une mise en garde a été détectée"
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Utilisez 'Éditer->Atteindre Erreur' pour la trouver."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " mise en garde trouvées"
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Utilisez 'Éditer->Atteindre Erreur' pour les trouver."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex n'a trouvé aucune erreur"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Chktex n'a pas marché."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Exécution en cours de la commande :"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Le fichier existe déjà :"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Voulez-vous écraser le document?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Annulé"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr "Il n'y a pas de post-processeur LaTeX pour les documents DocBook"
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Joli fichier LaTeX sauvé sous"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "La classe du document doit être linuxdoc"
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Création du fichier SGML LinuxDoc `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "Fichier LinuxDoc SGML enregistré sous"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "La classe du document doit être docbook"
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Création du fichier SGML DocBook `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "Fichier DocBook SGML enregistré sous"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Fichier Ascii enregistré sous"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Sauvegarde du document courant..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "La sauvegarde automatique a échouée"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Fichier à insérer"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Erreur! Impossible d'ouvrir le fichier spécifié:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Table des matières"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Insérer Référence"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Insérer Note de bas de page..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Importer Fichier LinuxDoc SGML `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Conversion du fichier LinuxDoc SGML en fichier TeX...."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Conversion du fichier LinuxDoc SGML en fichier DVI..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Conversion du fichier DocBook SGML en fichier DVI..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Style Caractère"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Environnement Paragraphe"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Format Document"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Guillemets"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "Préambule LaTeX"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Voulez-vous enregistrer les paramètres actuels"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "Pour Caractère, Document, Papier et Guillemets"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "comme paramètres par défaut pour les nouveaux documents"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Ouvrir/Fermer"
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Pas d'information d'annulation disponible"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "Refaire n'est pas disponible en mode mathématique"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Pas d'information disponible pour Refaire"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Polices"
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Profondeur: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Insertion d'une note en marge..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Le Type de l'environnement du paragraphe a été recopié"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Le Type de l'environnement du paragraphe a été paramétré"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Profondeur de l'environnement modifiée (dans la mesure du possible)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "La Mise en page du Paragraphe a été paramétré"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Dois-je paramétrer moi-même"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "les paramètres par défaut de cette classe de documents"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Erreurs de Conversion!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Impossible de passer à la nouvelle classe de documents."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "On revient donc à la classe originelle."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Conversion du document vers sa nouvelle classe..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Un paragraphe n'a pu être converti"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " paragraphes n'ont pu être convertis"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "dans la classe choisie"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Format Document paramétré"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Pas d'autres notes"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Guillemets paramétrés"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "Préambule LaTeX paramétré"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Impossible d'insérer un tableau dans un autre tableau"
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Insertion tableau"
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tableau inséré"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "ERREUR ! Impossible d'imprimer"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Vérifiez les pages !"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Vérifiez le nombre de copies !"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Erreur:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Impossible d'imprimer"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Vérifiez que les paramètres sont corrects"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Insertion figure"
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Figure insérée"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Options Écran Paramétrées"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "Option LaTeX"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Lancement de configure..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Chargement de la configuration"
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Le système a été reconfiguré"
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Il faut redémarrer LyX pour utiliser"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "les classes modifiées"
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Impossible de trouver cette étiquette"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "dans le document courant"
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Pas de Document ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Pas d´étiquettes dans ce document ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr "Aucun | défaut | Petit | Moyen | Grand | Ressort Vertical | Valeur "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr "Idem %l| Romane | Sans Sérif | Machine à Écrire %l| RAZ "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr "Idem %l| Maigre | Gras %l| RAZ"
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr "Idem %l| Droit | Italique | Inclinée | Petites Capitales %l| RAZ "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+"Idem %l| Petit(4) | Petit(3) | Petit(2) | Petit(1) | Normal | Grand (1) | "
+"Grand (2) | Grand (3) | Grand (4) | Grand (5) | <- Augmenter -> | -> "
+"Diminuer <- | RAZ"
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+"Idem %l| Italique | Souligné | Petites Majuscules| mode LaTeX %l | RAZ "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+"Idem %l| incolore | Noire | Blanc | Rouge | Vert | Bleu | Cyan | Magenta | "
+"Jaune %l | RAZ"
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr "Simple | Un et Demi | Double | Autre "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr "Petit | Moyen | Grand | Valeur "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+"Par défault | Personnalisée | Lettre US | Legal US | Executive US | A3 | A4 "
+"| A5 | B3 | B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+"Aucune | A4 petites marges (portrait seulement) | A4 grandes marges "
+"(portrait seulement) | A4 très grandes marges (portrait seulement) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``texte'' | ''texte'' | ,,texte`` | ,,texte'' | «texte» | »texte« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "Étendard de LyX"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Abandonner"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Oui|Oo#o"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Non|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Effacer"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Toutes les modifications seront ignorées"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Le document est en lecture seule"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Mise en Garde: Impossible de trouver l'emplacement du binaire."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "En cas de pb, lancez LyX avec le chemin complet."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "La variable d'environnement LYX_DIR_10x n'est pas utilisable"
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Le répertoire système est positionné sur: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Mise en Garde LyX: Impossible de déterminer le répertoire système."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Essayez le paramètre de ligne de commande '-sysdir' ou"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "positionnez la variable d'environnement LYX_DIR_10x sur le répertoire"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "contenant le fichier `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Utilisation des paramètres usine."
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " mais attendez vous à des problèmes"
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Attendez vous à des problème"
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Vous ne possédez pas un répertoire LyX personnel"
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Il est indispensable pour personnaliser votre configuration."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Dois-je le créer (recommandé)"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Fonctionnement sans répertoire personnel"
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Création du répertoire "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " et lancement de configure..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Échec. Utilisation de"
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr " à la place"
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Terminé!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "Mise en garde LyX!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Erreur lors de la lecture"
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Utilisation des réglages usine"
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Niveau de débogage:"
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr ""
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Usage: lyx [ paramètres] [fichier.lyx...]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "paramètres (attention à la casse):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr ""
+"   -help          aide locale sur les paramètres de la ligne de commande"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x      positionne le répertoire système sur x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "  -width x        gère la largeur de la fenêtre"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y      gère la hauteur de la fenêtre"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr " -xpos x        positionne la fenêtre à l'abscisse x"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y          positionne la fenêtre à l'ordonnée y"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          où n est le degré d'information des options de débogage. "
+"Essayez -dbg 65535 -help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        échange les couleurs d'avant et d'arrière plan"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono          lance LyX en N&B"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  utilise une routine d'affichage plus rapide\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Reportez vous à la page d'aide pour plus d'options."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Il manque un nombre pour le paramètre -dbg!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Il manque un répertoire pour le paramètre -sysdir!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Fax numéro.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Destinataire:|#N"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Entreprise:|#E"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Répertoire Téléphonique"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Sélectionner depuis|#S"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Ajouter à|#t"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Retirer de|#D"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Enregistrer"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr ""
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Commentaire"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Fichier Fax:"
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Répertoire d'adresse vide"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Sauvegarde (nécessaire)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Impossible d'ouvrir le répertoire d'adresse"
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "LE FICHIER LOG EST SOIT ABSENT SOIT VIDE"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Messages"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "Répertoire Téléphonique Vide"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Répertoire Téléphonique"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Romane"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Sans Sérif"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Machine à écrire"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Symbol"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Hériter"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignorer"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Maigre"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Gras"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Droite"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Italique"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Inclinée"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Petite Capitales"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr " Petite (4)"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "  Petite (3)"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "   Petite (2)"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "    Petite (1)"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "     Normale"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "    Grande (1)"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "   Grande (2)"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "  Grande (3)"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr " Grande (4)"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Grande (5)"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "<- Augmenter ->"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "-> Diminuer <-"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr " petite (4)"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "  petite (3)"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "   petite (2)"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "    petite (1)"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "     normale"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "    grande(1)"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "   grande(2)"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "  grande(3)"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr " grande(4)"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "grande(5)"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "<- augmenter ->"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "-> diminuer <-"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "Hériter"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "Ignorer"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Arrêt"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "Marche"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "(Dés)Activer"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Aucune"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Noir"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Blanc"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Rouge"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Vert"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Bleu"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr ""
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr ""
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Jaune"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Maths"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Insert"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "En Évidence"
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Souligné"
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Petites Majuscules"
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr ""
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Défaut"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Séquence Inconnue:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Action Inconnue"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Commande non autorisée lorsqu'aucun document est ouvert"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Document en lecture seule"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Mode Texte"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Format de sortie inconnu : "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Format en entrée inconnu : "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Format"
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " inconnu"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr " Pas de référence croisée à (dés)activer"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Marque enlevée"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Marque posée"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Marque Désactivée"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Marque Activée"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "'Push-toolbar' nécessite un argument > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Usage : toolbar-add-to <commande LyX>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Argument manquant"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Ceci n'est autorisé qu'en mode mathématique!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Ouverture du document fils"
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Type de note de bas de page inconnu"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Le Document est en lecture seule"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Entrez le nom du fichier du nouveau document"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "Nouveau Fichier"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Voulez-vous fermer le document maintenant?\n"
+"('Non' vous ramènera à la version ouverte)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Voulez-vous ouvrir le document?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Ouverture du document en cours"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "ouvert."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Choisissez le modèle"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Exemples"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Sélectionnez le document à ouvrir"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Impossible d'ouvrir le document"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Sélectionnez le fichier ASCII à importer"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Un document possède le même nom"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "Écraser?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Importation du fichier ASCII en cours..."
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "fichier ASCII"
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "importé"
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Sélectionner le fichier Noweb à importer"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Sélectionner le fichier LaTeX à importer"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Importation du fichier LaTeX en cours..."
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Importation du fichier Noweb en cours..."
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "fichier Noweb "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "fichier LaTeX "
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "Impossible d'ouvrir le fichier Noweb"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Impossible d'ouvrir le fichier LaTeX"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Sélectionner le document à insérer"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Insertion du document en cours"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "inséré"
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Impossible d'insérer le document"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Insert ouvert"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "inconnu"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Enregistrement du document et continuer?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: Description Initiale"
+
+#: src/lyxvc.C:184
+msgid "(no initial description)"
+msgstr "(pas de description initiale)"
+
+#: src/lyxvc.C:187
+msgid "Info"
+msgstr "Information"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr "Ce document n'a pas été enregistré"
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Journal"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Ignorer les modifications et refaire une version d'édition ?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Si vous revenez à la version précédente, vous perdrez toutes vos"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "modifications portées au document dans cette version d'édition"
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Voulez vous toujours le faire?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "Pas d'historique RCS"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "Historique RCS"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Fermer "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Fonctions"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Grec"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr ""
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr ""
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr ""
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr ""
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Divers"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr ""
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Colonnes"
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Alignement Vertical|#V"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Alignement Horizontal|#H"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr ""
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Fin|#T"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Medium|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Gros|#H"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Négatif"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Cadratin||#C"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "2 Cadratins||#2"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Délimiteur"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Décoration"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Espacement"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matrice"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Haut | Centre | Bas"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Palette Mathématique"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Fichier"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Éditer"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Format"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Insérer"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Aide"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr ""
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr ""
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#r"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr ""
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr ""
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr ""
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr ""
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr ""
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Options Affichage"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Importer%t|LaTeX...%x30|Texte Ascii en lignes...%x31|Texte Ascii en "
+"Paragraphes%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "FIT|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FIT|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIT|Pp#p#P"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Exporter%t|en LaTeX...%x40|en DVI...%x41|en PostScript...%x42|en Texte Ascii "
+"...%x43|Personnalisée...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exporter%t|en LinuxDoc...%x40|en DVI...%x41|en PostScript...%x42|en Texte "
+"Ascii...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exporter%t|en DocBook...%x40|en DVI...%x41|en PostScript...%x42|en Texte "
+"Ascii...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr ""
+
+# A comme Ascii
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Aa#a#A"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|sS#s#S"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Nouveau...|Nouveau à partir d'un "
+"modèle...|Ouvrir...%l|Fermer|Enregistrer|Enregistrer sous...|Recharger "
+"%l|Visualiser DVI|Visualiser PostScript|Mise à Jour DVI|Mise à Jour "
+"PostScript|Compiler programme%l|Imprimer...|Envoyer fax..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|mM#m#M"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|Ff#f#F"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Ee#e#E"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|sS#s#S"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|Dd#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|pP#p#P"
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr "FM|Cc#c#C"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|Ii#i#I"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|vV#v#V"
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importer%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Exporter%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Quitter%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|mM#m#M"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|Qq#q#Q"
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Importer%t|LaTeX...%x15|Texte Ascii en lignes...%x16|Texte Ascii en "
+"Paragraphes..%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr ""
+"Nouveau...|Nouveau à partir d'un modèle...|Ouvrir...%l|Importer%m%l|Quitter%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Flottants & Inserts%t|Ouvrir/Fermer%x21|Incorporer%x22|Ouvrir toutes les "
+"notes%x23|Fermer toutes les notes%x24|Ouvrir toutes les "
+"Figures/Tables%x25|Fermer toutes les Figures/Tables%x26%l|Nettoyer les "
+"erreurs%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tableau%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Multicolonne%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Multicolonne%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Ligne Haute%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Ligne Haute%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|Hh#h#H"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Ligne Basse%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Ligne Basse%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Ligne Gauche%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Ligne Gauche%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Gg#g#G"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Ligne Droite%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Ligne Droite%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|Dd#d#D"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Aligner à Gauche%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Aligner à Gauche%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|aA#a#A"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Aligner à Droite%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Aligner à Droite%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|oO#o#O"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Centrer%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Centrer%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Ajouter Ligne%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr ""
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Ajouter Colonne%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr ""
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Supprimer Ligne%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr ""
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Supprimer Colonne%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr ""
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Supprimer Tableau%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Insérer Tableau%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Contrôle Version%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Initialiser%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Figer cette version%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Nouvelle version d'édition%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Figer cette version%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Nouvelle version d'édition%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Recharger la version précédente%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Annuler Figer%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Visualiser Historique%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Initialiser%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Ii#i#I"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|Ff#f#F"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|Nn#n#N"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|Rr#r#R"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|Aa#a#A"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Annuler|Refaire %l|Couper|Copier|Coller%l|Rechercher & "
+"Remplacer...|Atteindre Erreur|Atteindre Note|Flottants & "
+"Inserts%m|Tableau%m|Correcteur Orthographique....|Vérification Syntaxe "
+"TeX|Table des Matières...%l|Contrôle de la Version%m%l|Examiner Journal "
+"LaTeX log%l|Copier Sélection en Lignes|Copier Sélection en Paragraphes"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Aa#a#A"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|uU#u#U"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|pP#p#P"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|lL#l#L"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|Rr#r#R"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|Oo#o#O"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|Xx#x#X"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr ""
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|Jj#j#J"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Caractère...|Paragraphe...|Document...|Papier...|Tableau...|Guillemets....%l|"
+"En Évidence%b|Majuscule%b|Gras%b|TeX%b|Profondeur|Préambule "
+"LaTeX...%l|Enregistrer Formatage par Défaut"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr ""
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|Tt#t#T"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|uU#u#U"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|Ee#e#E"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|Mm#m#M"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Gg#g#G"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|fF#f#F"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|Dd#d#D"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Importer fichier ASCII%t|En Lignes%x41|En Paragraphes%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Listes & Tables%t|Table des Matières%x21|Table des Figures%x22|Liste des "
+"Tableaux%x23|Liste des Algorithmes%x24|Index%x25|Référence BibTeX%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IML|Mm#m#M"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IML|Ff#f#F"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IML|Tt#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IML|Aa#a#A"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IML|Ii#i#I"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IML|Bb#b#B"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Flottants%t|Figure flottante%x71|Tableau flottant%x72|Grande Figure "
+"flottante%x73|Grand Tableau flottant%l%x74|Algorithme Flottant%x75"
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|Ff#f#F"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|tT#t#T"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|Ff#f#F"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|Tt#t#T"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Charactère Spécial%t|Ressort Horizontal%x31|Point de Césure%x32|Blanc "
+"Insécable%x33|Passage à la Ligne%x34|Points de Suspension (...)%x35|Point "
+"Final%x36|Guillemets (\")%x37|Séparateur de Menu%x38"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|Cc#c#C"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|Ss#s#S"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|Pp#p#P"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|Gg#g#G"
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr "IMS|Mm#m#M"
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Figure...|Tableau...%l|Inclure Fichier...|Importer Fichier ASCII%m|Insérer "
+"Fichier LyX...%l|Note de bas de page|Note en marge|Flottant%m%l|Listes & "
+"Tables%m%l|Caractère Spécial%m%l|Note...|Étiquette...|Référence "
+"Croisée...|Citation Bibliographique...|Entrée d'Index...|Index du mot "
+"précédent"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|Ff#f#F"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|Tt#t#T"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr ""
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr ""
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|bB#b#B"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|Ll#l#L"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Éé#é#É"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|Rr#r#R"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|Cc#c#C"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|xX#x#X"
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "IM|dD#d#D"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr ""
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Fraction|Racine Carrée|Puissance|Indice|Somme|Intégrale%l|Mode "
+"Mathématique|Déploiement%l|Palette Mathématique..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr ""
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Polices d'Écran...|Options Correcteur "
+"Orthographique...|Clavier...|LaTeX...%l|Reconfiguration"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr ""
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Introduction|Manuel d'Apprentissage|Manuel Utilisateur|Options "
+"Avancées|Personnalisation|Manuel de référence|Bogues déjà "
+"Répertoriés|Configuration LaTeX%l|Copyright et "
+"Garantie...|Crédits...|Version..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr ""
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr ""
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr ""
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr ""
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr ""
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr ""
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr ""
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr ""
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "Version LyX"
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " de "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Répertoire Librairie :"
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Répertoire Utilisateur :"
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Ouverture du fichier d'aide"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Exécution:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Aucun document ouvert *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Bienvenue sur lyx"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Aucun sens avec cette mise en page"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Erreur: Impossible de changer de répertoire"
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "Erreur Interne LyX"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Pile Répertoire Vide"
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Imprimer vers"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Imprimante|#P"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Fichier|#F"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Toutes les pages|#G"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Pages Impaires|#O"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Pages paires|#E"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Ordre Normal|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Ordre Inverse|#R"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Ordre"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Pages:|#P"
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr ""
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Nombre:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Non triées|#U"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Type de Fichier"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Commande:|#C"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr ""
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr ""
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr ""
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr ""
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr ""
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Utiliser le langage du document|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Utiliser un autre langage|#U"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Traiter les mots collés|#T"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Encodage pour ISpell|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Utiliser un dictionnaire personnel|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Caractères spéciaux autorisés dans les mots|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Dictionnaire"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Remplacer"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Approchés\n"
+"Ratés"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Options Correcteur Orthographique...|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Commencer la correction|#S"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Insérer dans le dictionnaire personnel|#I"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignorer le mot|#g"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Accepter le mot dans cette session|#A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Suspendre la correction|#T"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Terminer la correction|#C^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr ""
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr ""
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Remplacer le mot|#R"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Options Correcteur Orthographique"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Correcteur Orthographique"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Le processus i-spell est mort de sa belle mort. *Une* raison possible\n"
+"est que vous ne possédez pas de fichier dictionnaire\n"
+"pour la langue dans laquelle le document est écrit\n"
+"Vérifiez /usr/lib/ispell ou paramétrez un autre\n"
+"dictionnaire dans le menu Options-> Dictionnaire."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " mots vérifiés"
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " mot vérifié"
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Correction Orthographique Terminée"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Le processus i-spell s'est terminé sans raison.\n"
+"Il a peut-être été terminé."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Les multicolonnes ne peuvent être qu'horizontales"
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+"Vous ne pouvez pas entrer deux espaces ici. Lisez le manuel d'apprentissage"
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+"Vous ne pouvez pas entrer d'espace en début de paragraphe. Lisez le manuel "
+"d'apprentissage"
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Opération Impossible"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Impossible d'insérer un flottant dans un flottant!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Impossible d'insérer un [marginpar] dans une minipage"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Impossible de couper le tableau."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Un flottant inclurait un flottant!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "flottant ouvert"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "flottant fermé"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Rien à faire"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Pas de changement de fonte défini. Utiliser Format->Caractère pour le définir"
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Je ne sais pas manipuler les moitiés de flottants."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "Désolé"
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Je ne sais pas manipuler les moitiés de tableaux."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Impossible de coller un flottant dans un flottant!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Les cellules d'un tableau ne peuvent inclure plus d'un paragraphe"
diff --git a/po/hu.po b/po/hu.po
new file mode 100644 (file)
index 0000000..9377837
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,4842 @@
+# Magyar kiegészítés a LyX-hez.
+# Copyright (C) 1998, The LyX Team.
+#
+# Kadar András <kadara@eik.bme.hu>, 1998.
+# Krémer Péter <kremer@bme-tel.ttt.bme.hu>, 1998.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lyx 0.12.1\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:48+02:00\n"
+"Last-Translator: Krémer Péter <kremer@bme-tel.ttt.bme.hu>\n"
+"Language-Team: hungarian, out-of-team\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Dokumentum formázása..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Nincs több hiba"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "ChkTeX figyelmeztetés #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Betûkészlet betöltése az X-Szerverbe..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Futás #"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "LaTeX futtatás száma "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "MakeIndex futtatása."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "BibTeX futtatása."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "NINCS LATEX NAPLÓ FÁJL!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr ""
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "LaTeX napló"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Parancs leírása"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Elõzõ karakter kiválasztása"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "BibTeX beillesztése"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Automatikus mentés"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Ugrás a dokumentum elejére"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Kijelölés a dokumentum elejéig"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Bezárás"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Ugrás a dokumentum végére"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Kijelölés a dokumentum végéig"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Fax"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Új dokumentum"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Új dokumentum sablon alapján"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Megnyitás"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Váltás az elõzõ dokumentumra"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Nyomtatás"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Az utolsó mentett változat betöltése"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "DVI frissítése"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Postscript frissítése"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "DVI megtekintése"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Postscript megtekintése"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr ""
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "TeX ellenõrzése"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Mentés"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Mentés másként"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Mégsem"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Visszalépés az elõzõ karakterre"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Lépés a következõ karakterre"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Idézet beillesztése"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Parancs végrehajtása"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Másolás"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Kivágás"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Környezet mélységének csökkentése"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Környezet mélységének növelése"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Környezet mélységének megváltoztatása"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Felsorolás szimbólumának beállítása"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Ugrás lefelé"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Következõ sor kiválasztása"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "A bekezdés környezetének kiválasztása"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Ugrás a következõ hibára"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Ábra beillesztése"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Keresés & Csere"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "A kurzor kövesse/ne kövesse a görgetõ sávot"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Félkövér (be/ki)"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Kód stílus (be/ki)"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Alapértelmezett betûtípus"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Dõlt stílus (be/ki)"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Saját stílus (be/ki)"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Kapitális stílus(be/ki)"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Antikva betûtípus (be/ki)"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Groteszk betûtípus (be/ki)"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Betûméret beállítása"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Betûkészlet állapota"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Aláhúzás (be/ki)"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Lábjegyzet beillesztése"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Következõ karakter kijelölése"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Vízszintes kitöltõ beszúrása"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Elválasztási hely beillesztése"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "... beillesztése"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Mondat végét jelzõ pont beillesztése"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Billentyûzetkiosztás kikapcsolása"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Elsõdleges bilentyûzetkiosztás használata"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Másodlagos billentyûzetkiosztás használata"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Billentyûzetkiosztás átkapcsolása"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Címke beillesztése"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Bekezdés stílusának másolása"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Bekezdés stílusának beillesztése"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Papírméret és margók beállítása"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Ugrás a sor elejére"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Kijelölés a sor elejéig"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Ugrás a sor végére"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Kijelölés a sor végéig"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Kilépés"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Széljegyzet beillesztése"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Görög betûk"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Egyenletszerkesztõ"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Ugrás a következõ bekezdésre"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Következõ bekezdés kijelölése"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Ugrás az elõzõ bekezdésre"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Elõzõ bekezdés kijelölése"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Beillsztés"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Védett szóköz beillesztése"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Idézet beillesztése"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Konfiguráció frissítése"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Ismét"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Kereszthivatkozás beillesztése"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Táblázat beillesztése"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "TeX stílus (be/ki)"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Visszavonás"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr ""
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Dokumentum beillesztése"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Hibajelzések törlése"
+
+#: src/LyXAction.C:680
+#, fuzzy
+msgid "Insert menu separator"
+msgstr "Mondat végét jelzõ pont beillesztése"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Leírás nem érhetõ el!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Parancs futtatása a dokumentummal"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Változott)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (csak olvasható)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "A dokumentum csak olvasható. A formátumát nem lehet megváltoztatni."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Oldalbeállítás"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Oldalbeállítás megtörtént"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Figyelem: Érvénytelen méret (helyes pl.: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr ""
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr ""
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Figyelem: Érvénytelen százalék-érték (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr ""
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Táblázat-formátum"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Figyelem: Rossz kurzorpozíció, az ablak frissítve"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Megerõsítés: nyomja még egyszer a Delete gombot"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Hiba!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Nem sikerült megnyitni a megadott fájlt:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Hiba a szövegosztály betöltésénél!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Nem sikerült betölteni a szövegosztályt "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- az alapértelmezettel helyettesítve"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr ""
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Figyelem: A szükséges LyX-formátum %.2f, de a választott fájlé %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "HIBA: A szükséges LyX-formátum %.2f, de a választott fájlé %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Figyelem!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Nem sikerült a dokumentumot teljesen beolvasni"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "A fájl valószínûleg megsérült (tül rövid)"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "HIBA!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr ""
+"A fájl régi LyX-formátumú. Olvasásához használja a LyX 0.10.x-es verzióját"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Nem LyX fájl!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Nem sikerült olvasni a fájlt!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Hiba! A dokumentum csak olvasható: "
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Hiba! Nem sikerült fájlba írni: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Hiba! Nem sikerült a fájlt rendesen bezárni: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Hiba! Nem sikerült a fájlba írni:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Hiba! Nem sikerült az ideiglenes fájlt megnyitni:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Hiba! Nem sikerült a fájlt rendesen bezárni:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "LYX_HIBA"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Nem sikerült a fájlba írni"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr ""
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "LaTeX futtatása..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "Hiba a LaTeX futtatása közben!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Hiányzó napló fájl:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Kész"
+
+#. path to Literate file
+#: src/buffer.C:3174
+#, fuzzy
+msgid "Running Literate..."
+msgstr "LaTeX futtatása..."
+
+#: src/buffer.C:3194
+#, fuzzy
+msgid "Literate command did not work!"
+msgstr "Hiba a LaTeX futtatása közben!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr ""
+
+#: src/buffer.C:3263
+#, fuzzy
+msgid "Build did not work!"
+msgstr "Hiba a LaTeX futtatása közben!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "ChkTeX futtatása..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "Hiba a ChkTeX futtatása közben!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Hiba a fájllal történt futtatáskor:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Nem sikerült az ideiglenes fájlt megnyitni:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Hiba! Nem sikerült az ideiglenes fájlt megnyitni:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Hiba a *roff parancs táblázaton történt futtatása közben"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Nem megengedett mûvelet!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Táblázatba nem lehet táblázatot/listát beszúrni."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Sajnálom."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Változások a dokumentumban:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Kívánja menteni a dokumentumot?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Néhány dokumentumot nem mentett el:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Mégis kilép?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Dokumentum mentése"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Dokumentum új néven elmentve"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Nem sikerült törölni az automatikusan elmentett fájlt!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "A mentés sikertelen!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Nincs megnyitott dokumentum!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Megpróbálja elmenteni a dokumentumot "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " mint..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "  A mentés sikeresnek tûnik. Hû. "
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "  A mentés sikertelen! Megpróbálom..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  A mentés sikertelen! A dokumentum elveszett. Hogy az a @$%^@$!"
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "A dokumentumról létezik egy biztonsági mentés!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Kívánja inkább azt betölteni?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Az automatkusan elmentett fájl újabb."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Kívánja inkább azt megnyitni?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Nem sikerült a sablon betöltése"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Nem sikerült a fájlt konvertáni"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "A dokumentum már nyitva van:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Újból be kívánja tölteni ezt a dokumentumot?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "A(z) '"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' fájl csak olvasható"
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Készít új dokumentumot ezzel a névvel?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Méret|#r"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr ""
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Alkalmaz|#A"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Mégsem|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr ""
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr ""
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr ""
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr ""
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr ""
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Felsorolás behúzása"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Normál|#N"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Képlet|#K"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr ""
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr ""
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr ""
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr ""
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Sajnos a libXpm túl régi."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Ehhez a mûvelethez az xpm-4.7-es (3.4g) vagy újabb verziója szükséges."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Próbálja meg a LyX-et monochrome módban indítani (lyx -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" alapértelmezett | apró | kézírás | lábjegyzet | kicsi | normál |nagy | Nagy "
+"| NAGY | óriási | Óriási"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Felsorolás kiválasztása"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr ""
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr ""
+
+#: src/credits.C:69
+#, fuzzy
+msgid "amount of work other people have done for the LyX project."
+msgstr "Ezek a személyek járultak hozzá a LyX projekthez. Köszönjük,"
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr ""
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr ""
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr ""
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Ezek a személyek járultak hozzá a LyX projekthez. Köszönjük,"
+
+#: src/credits_form.C:50
+#, fuzzy
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX - Copyright (C) 1995 Matthias Ettrich,\n"
+"1995-1998 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Ez egy ingyenes szoftver, terjeszthetõ és/vagy\n"
+"módosítható a GNU General Public License második\n"
+"vagy (választása szerinti) késõbbi verziójában\n"
+"található feltételek szerint."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"A LyX-et abban a reményben terjesztjük,\n"
+"hogy hasznosnak találja, de minden garancia\n"
+"nélkül, mind kereskedelmi, mind más tekintetben.\n"
+"További részletekért olvassa el a\n"
+"GNU General Public License-t.\n"
+"A GNU General Public License szövegét megtalálja\n"
+"e program mellett, ha mégsem, írjon a következõ címre:\n"
+"\n"
+"Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[képfeldolgozási hiba]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[képfeldolgozás ... ]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[nincs fájl]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[nincs megjelenítve]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[nincs ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[ismeretlen hiba]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Ábra"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "az ábra elérési útja üres"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Képek"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Dokumentum"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "EPS ábra"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "A fájlnév nem tartalmazhatja az alábbi karakterek egyikét sem:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "szóköz, '#', '~', '$' vagy '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Figyelem! A könytárat nem sikerült megnyitni."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "LyX belsõ hiba!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Nem sikerült megállapítani, hogy a könyvtár írható-e"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Nem sikerült a könyvtárban tesztfájlt megnyitni"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "A tesztfájlt sikerült létrehozni, de nem lehet törölni!?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Hiba! Nem sikerült a könyvtárba belépni:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Hiba! Nem sikerült a fájlt törölni:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Hiba! Nem sikerült az ideiglenes könyvtárat létrehozni:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Hiba! Nem sikerült az ideiglenes könyvtárat törölni:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Belsõ hiba!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "createDirectory hívása érvénytelen névvel"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Hiba! Nem sikerült a könyvtárat létrehozni:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Betûkészlet kiválasztása|#B"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "A betûkészlet nem található!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Hiba:\n"
+"\n"
+"A kiosztás\n"
+"nem található"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Betûkészlet|#e"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Egyéb...|#g"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Egyéb...|#y"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Nyelv"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Kiosztás"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Elsõdleges kiosztás|#E"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Nincs kiosztás|#N"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Másodlagos kiosztás|#M"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Másodlagos"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Elsõdleges"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "EPS fájl|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Nyomtatási kép#|N"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Tallóz...|#T"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Keret megjelenítése|#K"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Fordítás|#F"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Beállítások"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Szög:|#S"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% az oldalból|#o"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Alapértelmezett|#A"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr ""
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "inch|#i"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Megjelenít"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Magasság"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Szélesség"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Elforgatás"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Színes megjelenítés|#S"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Ne jelenítse meg az ábrát|#N"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Szürkeárnyalatos kép|#z"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Fekete-fehér kép|#F"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Alapértelmezett|#A"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr ""
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "inch|#i"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% az oldalból|#o"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "%-a az oszlopnak|#o"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Fõcím|#F"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Részábra|#R"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Könyvtár:|#K"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Kiterjesztés:|#T"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Fájlnév:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Frissít|#F"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr ""
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Felhasználó1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Felhasználó|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Oszlopok"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Sorok"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Keresés|#K"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Új szöveg|#j"
+
+#: src/form1.C:331
+#, fuzzy
+msgid "@>|#F"
+msgstr "@>|#E"
+
+#: src/form1.C:335
+#, fuzzy
+msgid "@<|#B"
+msgstr "@<|#H"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Csere|#C#c"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Bezárás|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "kisbetû/nagybetû|#i"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Egész szó|#g"
+
+#: src/form1.C:351
+#, fuzzy
+msgid "Replace All|#A#a"
+msgstr "Csere|#C#c"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Görög betûk be"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Görög billentyûzet be"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Görög billenytûzet ki"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "TeX mód"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Nem szám"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Szám"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "A beszúrandó címke:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "matematikai szöveg mód"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Az egyenleszerkesztõben ez a mûvelet nem használható!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Egyenletszerkesztõ mód"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Makró:"
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Kulcs:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Megjegyzés:|#M"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Kulcs:|#K"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Címke:|#C"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Idézet"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Irodalomjegyzék"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "BibTeX által létrehozott hivatkozás"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Adatbázis:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Stílus:  "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr ""
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Hiba"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "LaTeX Hiba"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Hiba a megnyitásnál"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Böngészés|#B"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Ne gépeljen|#N"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Betöltés|#e"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Fájl név:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Látható space|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Idézet|#I"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr ""
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr ""
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Dokumentumok"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr ""
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr ""
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr ""
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr ""
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Kulcs:|#K"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr ""
+
+#: src/insetindex.C:120
+msgid "Idx"
+msgstr ""
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr ""
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Jegyzet"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Bezárás|#B^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Algoritmusok jegyzéke"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Ábrák jegyzéke"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Táblázatok jegyzéke"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Szülõ:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Hivatkozás típusa"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Címkére ugrás"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Címke megváltoztatása"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Oldalszám"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Hivatkozás"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Oldal: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Hiv.: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Tartalomjegyzék"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr ""
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr ""
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Bezárás|#B^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr ""
+
+#: src/inseturl.C:141
+#, fuzzy
+msgid "Insert Url"
+msgstr "Beszúrás"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr ""
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr ""
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "egyéb..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Billentyûzetkiosztás"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr ""
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr ""
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Frissítés|#Ff"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr ""
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr ""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr ""
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr ""
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr ""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr ""
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr ""
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr ""
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr ""
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Osztály:|#O"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Oldal stílusa:|#l"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Betûkészlet:|#k"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Betûméret:|#m"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Lebegõ objektumok:|#L"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "PS meghajtó:|P"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Kódolás:|#K"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Egy|#E"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Kettõ|#e"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Oldalak"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Egy|#g"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Kettõ|#t"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Egyéb beállítások:|#b"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Nyelv:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Kihagyás:|i"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Fejezetek számozási mélysége"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Tartalomjegyzék mélysége"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Sortávolság:|#o"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Felsorolás szimbóluma|#F"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "AMS Math használata|#A"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Család:|#C"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Vastagság:|#V"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Alak:|#A"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Méret:|#M"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Egyéb:|#E"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Szín:|#z"
+
+#: src/layout_forms.C:164
+#, fuzzy
+msgid "Toggle on all these|#T"
+msgstr "Kapitális stílus(be/ki)"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr ""
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr ""
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr ""
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Behúzás"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Felette|#F"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Alatta|#A"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Elõtte|#E"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Utána|#U"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Nincs behúzás|#z"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Jobbra|#J"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Balra|#B"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Blokkba|#l"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Középre|#K"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Felette:|#t"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Alatta:|#l"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Új oldal"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Vonal"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Igazítás"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Függõleges távolság"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr ""
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr ""
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr ""
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr ""
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr ""
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Szimpla|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Dupla|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Szöveg"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Egyéb:|#g"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Margók"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr ""
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Elrendezés"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Álló|#l"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Fekvõ|#F"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Papírméret:|#P"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Egyedi papírméret"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Geometry csomag használata"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Szélesség:|#z"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Magasság:|#M"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Felsõ:|#e"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Alsó:|#s"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Bal:|#B"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Jobb:|#J"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr ""
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr ""
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr ""
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr ""
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr ""
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr ""
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr ""
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr ""
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr ""
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr ""
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr ""
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr ""
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr ""
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr ""
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr ""
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr ""
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr ""
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr ""
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr ""
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr ""
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr ""
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr ""
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr ""
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr ""
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr ""
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr ""
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr ""
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr ""
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Extra|#x"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Bal|#B"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Jobb|#J"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Közép|#K"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Egyéb beállítások"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Hossz|#H"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "vagy %|#v"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Közép|#z"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr ""
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr ""
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr ""
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr ""
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr ""
+
+#: src/layout_forms.C:682
+#, fuzzy
+msgid "Special Multicolumn Alignment"
+msgstr "Speciális Több-oszlopos Elrendezés"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Speciális Oszlopos Elrendezés"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr ""
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr ""
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Típus"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Antikva|#A"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Groteszk|#G"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Írógép|#r"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr ""
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Nagyítás|#N"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Frissítés|Ff#f"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Frissítés|#F"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr ""
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr ""
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr ""
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr ""
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr ""
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Sablonok"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Adja meg a dokumentum új nevét"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Megszakítva."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Ilyen nevû dokumentum már létezik:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Mégis ezen a néven kívánja menteni?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Ilyen nevû dokumentum már nyitva van!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Lecseréli az aktuális dokumentummal?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Dokumentum átnevezve '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "'-re, de nincs elmentve..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr ""
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr ""
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr ""
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr ""
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr ""
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr ""
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr ""
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr ""
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr ""
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr ""
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr ""
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr ""
+
+#: src/lyx_cb.C:492
+#, fuzzy
+msgid "Wrong type of document"
+msgstr "Ugrás a dokumentum végére"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr ""
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr ""
+
+#: src/lyx_cb.C:520
+msgid "Chktex does not work with SGML derived documents."
+msgstr ""
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr ""
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr ""
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr ""
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr ""
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr ""
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr ""
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr ""
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Parancs végrehajtása"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr ""
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+#, fuzzy
+msgid "Do you want to overwrite the file?"
+msgstr "Újból be kívánja tölteni ezt a dokumentumot?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+#, fuzzy
+msgid "Canceled"
+msgstr "Megszakítva."
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "LaTeX fájl elmentve mint"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr ""
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr ""
+
+#: src/lyx_cb.C:901
+#, fuzzy
+msgid "LinuxDoc SGML file save as"
+msgstr "LaTeX fájl elmentve mint"
+
+#: src/lyx_cb.C:912
+msgid "Document class must be docbook."
+msgstr ""
+
+#: src/lyx_cb.C:929
+msgid "Building DocBook SGML file `"
+msgstr ""
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "LaTeX fájl elmentve mint"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Ascii fájl elmentve mint"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Automatikusan elmenti az aktuális dokumentumot..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Az automatikus mentés sikertelen volt!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Beilleszteni kívánt fájl"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr ""
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Tartalomjegyzék"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr ""
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr ""
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr ""
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr ""
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr ""
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+msgid "Converting DocBook SGML to dvi file..."
+msgstr ""
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Betûtípus"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Bekezdés környezete"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr ""
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr ""
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "LaTeX elõtag"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Akarja, hogy a jelenlegi karakterekre, dokumentumra"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "papírméretre, és idézõjelre vonatkozó"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "beállítás legyen az alapértelmezett?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Megnyitás/Bezárás..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr ""
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr ""
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr ""
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr ""
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ""
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr ""
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr ""
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr ""
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr ""
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr ""
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr ""
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr ""
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Konverziós hiba!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Nem lehet az új dokumentum-osztályra váltani."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Visszatérés az eredeti dokumentum-osztályhoz."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr ""
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr ""
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr ""
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr ""
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr ""
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Nincs több megjegyzés"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr ""
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "LaTeX elõtag beállítva"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr ""
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr ""
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr ""
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+#, fuzzy
+msgid "ERROR!  Unable to print!"
+msgstr "Nem sikerült olvasni a fájlt!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr ""
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr ""
+
+#: src/lyx_cb.C:3425
+#, fuzzy
+msgid "Error:"
+msgstr "Hiba:"
+
+#: src/lyx_cb.C:3426
+#, fuzzy
+msgid "Unable to print"
+msgstr "Nem sikerült olvasni a fájlt!"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr ""
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr ""
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr ""
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr ""
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr ""
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr ""
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr ""
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr ""
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr ""
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr ""
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr ""
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr ""
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr ""
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr ""
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr ""
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr "Változatlan %l| Antikva | Groteszk | Írógép %l| Alapállapot "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Változatlan %l | Normál | Félkövér %l| Alapállapot "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr " Változatlan %l| Álló | Dõlt | Döntött | Kiskapitális %l| Alapállapot "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Változatlan %l| Apró | Legkisebb | Kisebb | Kicsi | Normál | Nagy | Nagyobb "
+"| Legnagyobb | Óriási | Óriásibb %l| Növelés | Csökkentés | Alapállapot "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+" Változatlan %l| Kiemelt | Aláhúzott | Kapitális | LaTeX mód %l| Alapállapot "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+" Változatlan %l| Nincs szín | Fekete | Fehér | Piros | Zöld | Kék | Cián | "
+"Lila | Sárga %l| Alapállapot "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Szimpla | Másfeles | Dupla | Egyéb "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr ""
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr ""
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr ""
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr ""
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Igen|Ii#i"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Nem|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr ""
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr ""
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr ""
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr ""
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr ""
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr ""
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "A felhasználó könyvtára: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Figyelem! A könytárat nem sikerült megnyitni."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr ""
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr ""
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr ""
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr ""
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr ""
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr ""
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Önnek nincs személyes LyX könyvtára."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "A saját beállításainak megõrzéséhez szüksége van rá."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Megprópáljam létrehozni önnek (ajánlott)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Futás személyes LyX könyvtár nélkül."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Könyvtár létrehozása"
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " és a konfigurációs program futtatása..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Nem sikerült. Helyette a '"
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr "'-t fogom használni."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Kész!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "LyX figyelmeztetés!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr ""
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr ""
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr ""
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr ""
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Használat: lyx [ kapcsolók ] [ név.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Kapcsolók (kis/nagybetû számít):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           összefoglaló a LyX használatáról"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       a rendszer könyvtárat x-re állítja"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -wodth x        az ablak szélessége"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       az ablak magassága"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         az ablak x koordinátája"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         az ablak y koordinátája"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          ahol n a debug opciók összege. Próbálja a -dbg 65535 "
+"-help kapcsolókat"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        megcseréli a háttér és elõtér színét"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           fekete-fehér mód"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr ""
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr ""
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr ""
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr ""
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr ""
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr ""
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr ""
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr ""
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr ""
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr ""
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr ""
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr ""
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr ""
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr ""
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr ""
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr ""
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr ""
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr ""
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr ""
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr ""
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr ""
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr ""
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr ""
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr ""
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr ""
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr ""
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr ""
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr ""
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr ""
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr ""
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr ""
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr ""
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr ""
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr ""
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr ""
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr ""
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr ""
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr ""
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr ""
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr ""
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr ""
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr ""
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr ""
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr ""
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr ""
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr ""
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr ""
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr ""
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr ""
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr ""
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr ""
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr ""
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr ""
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr ""
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr ""
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr ""
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr ""
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr ""
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr ""
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr ""
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr ""
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr ""
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr ""
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr ""
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr ""
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr ""
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr ""
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr ""
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr ""
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr ""
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr ""
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr ""
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Képlet"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr ""
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr ""
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr ""
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr ""
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr ""
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr ""
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr ""
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr ""
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr ""
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr ""
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr ""
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr ""
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr ""
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr ""
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr ""
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr ""
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr ""
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr ""
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr ""
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr ""
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr ""
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr ""
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr ""
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr ""
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr ""
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr ""
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr ""
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Adja meg az új dokumentum nevét"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr ""
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr ""
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Dokumentum megnyitása"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "megnyitva."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Válassza ki a sablont"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Példák"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Válassza ki a megnyitni kívánt dokumentumot"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "A dokumentumot nem tudom megnyitni"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Válassza ki a beilleszteni kívánt ASCII fájlt."
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+#, fuzzy
+msgid "A document by the name"
+msgstr "Ilyen nevû dokumentum"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "már nyitva van. Felülírjam?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "ASCII fájl beillesztése"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "Az ASCII fájl '"
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "' beillesztve."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Válassza ki a beilleszteni kívánt Noweb fájlt."
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Válassza ki a beilleszteni kívánt LaTeX fájlt."
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "LaTeX fájl beillesztése"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Noweb fájl beillesztése"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "A Noweb fájl '"
+
+#: src/lyxfunc.C:2739
+#, fuzzy
+msgid "LateX file "
+msgstr "A LaTeX fájl '"
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "Nem sikerült a fájlt beilleszteni"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Nem sikerült a fájlt beilleszteni"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Válassza ki a beilleszteni kívánt dokumentumot"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Dokumentum beillesztése"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "beillesztve."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "A dokumentumot nem tudom beilleszteni"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr ""
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr ""
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+#, fuzzy
+msgid "Save document and proceed?"
+msgstr "Kívánja menteni a dokumentumot?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr ""
+
+#: src/lyxvc.C:184
+msgid "(no initial description)"
+msgstr ""
+
+#: src/lyxvc.C:187
+msgid "Info"
+msgstr ""
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr ""
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr ""
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr ""
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr ""
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr ""
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr ""
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr ""
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr ""
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Bezárás "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Függvények"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr ""
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr ""
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr ""
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr ""
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr ""
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr ""
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr ""
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Oszlopok "
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr ""
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr ""
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr ""
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr ""
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr ""
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr ""
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr ""
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr ""
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr ""
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr ""
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr ""
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr ""
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Mátrix"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr ""
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Képlet szerkesztõ"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Fájl"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Szerkesztés"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Formátum"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Beszúrás"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Súgó"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#F"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#z"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#o"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#B"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#K"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#E"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#S"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Megjelenítés"
+
+#: src/menus.C:408
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Beillesztés%t|LaTeX...%x30|Ascii szöveg...%x31|Ascii Paragraphs%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+#, fuzzy
+msgid "FIM|Ll#l#L"
+msgstr "FIM|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+#, fuzzy
+msgid "FIM|Aa#a#A"
+msgstr "FIM|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+#, fuzzy
+msgid "FIM|Pp#p#P"
+msgstr "FIM|Pp#p#P"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Exportálás%t|LaTeX...%x40|DVI...%x41|Postscript...%x42|Ascii "
+"szöveg...%x43|Választható...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportálás%t|LinuxDoc...%x40|DVI...%x41|Postscript...%x42|Ascii szöveg...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportálás%t|LinuxDoc...%x40|DVI...%x41|Postscript...%x42|Ascii szöveg...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Aa#a#A"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|Vv#v#V"
+
+#: src/menus.C:453
+#, fuzzy
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Új...|Új, sablon alapján...|Megnyitás...%l|Bezárás|Mentés|Mentés "
+"másként...|Vissza a mentetthez%l|DVI megtekintése|Postscript "
+"megtekintése|DVI frissítése|Postscript frissítése%l|Nyomtatás...|Fax..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|jJ#j#J"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|aA#a#A"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|nN#n#N"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|zZ#z#Z"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Mm#m#M"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|tT#t#T"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|iI#i#I"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|Dd#d#D"
+
+#: src/menus.C:476
+#, fuzzy
+msgid "FM|wW#w#W"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|Vv#v#V"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|oO#o#O"
+
+#: src/menus.C:479
+#, fuzzy
+msgid "FM|Bb#b#B"
+msgstr "LM|Ff#f#F"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|yY#y#Y"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Beillesztés%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Exportálás%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Kilépés%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|Bb#b#B"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|Kk#k#K"
+
+#: src/menus.C:638
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Beillesztés%t|LaTeX...%x15|Ascii szöveg...%x16|Ascii "
+"Paragraphs...%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Új...|Új, sablon alapján...|Megnyitás...%l|Beillesztés%m%l|Kilépés%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Lebegõ és beágyazott objektumok%t|Megnyitás/Bezárás%x21|Eltüntet%x22|Összes "
+"lábjegyzet/széljegyzet megnyitása%x23|Összes "
+"lábjegyzet/széljegyzetbezárása%x24|Összes ábra/táblázat "
+"megnyitása%x25|Összes ábra/táblázat bezárása%x26%l|Hibák helyének "
+"eltüntetése%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|nN#n#N"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|Ee#e#E"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|lL#l#L"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|bB#b#B"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|rR#r#R"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|aA#a#A"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|Hh#h#H"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Táblázat%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr ""
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr ""
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Felsõ szegély%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Felsõ szegély%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|Ff#f#F"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Alsó szegély%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "Alsó szegély%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|Aa#a#A"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Baloldali szegély%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Baloldali szegély%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Bb#b#B"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Jobboldali szegély%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Jobboldali szegély%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|Jj#j#J"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Balra igazítás%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Balra igazítás%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|lL#l#L"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Jobbra igazítás%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Jobbra igazítás%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|rR#r#R"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Középre igazítás%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Középre igazítás%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|Kk#k#K"
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Sor beszúrása%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|Ss#s#S"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Oszlop beszúrása%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|Oo#o#O"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Sor törlése%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|tT#t#T"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Oszlop törlése%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|pP#p#P"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Táblázat törlése%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|zZ#z#Z"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Táblázat beszúrása%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|aA#a#A"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Példány felügyelet%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Regisztrálás%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr ""
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr ""
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr ""
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr ""
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr ""
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr ""
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr ""
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "Regisztrálás%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr ""
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Visszavonás|Ismét%l|Kivágás|Másolás|Beillesztés%l|Keresés & Csere...|Ugrás a "
+"hibára|Ugrás a megjegyzésre|Lebegõ és beágyazott "
+"objektumok%m|Táblázat%m|Nyelvi ellenõrzés...|TeX "
+"ellenõrzése|Tartalomjegyzék...%l|Példány felügyelet%m%l|LaTeX napló fájl "
+"megtekintése%l|Kiválasztás beillesztése soroknak|Kiválasztás beillesztése "
+"bekezdéseknek"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Vv#v#V"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|Ii#i#I"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Kk#k#K"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|Mm#m#M"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|Bb#b#B"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|eE#e#E"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|hH#h#H"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|gG#g#G"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|oO#o#O"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|Tt#t#T"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|Nn#n#N"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|Xx#x#X"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|aA#a#A"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Pp#p#P"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|Ll#l#L"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|rR#r#R"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|zZ#z#Z"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Betûtípus...|Bekezdés...|Dokumentum...|Oldal...|Táblázat...|Idézet...%l|Dõlt "
+"stílus%b|Kapitális stílus%b|Félkövér stílus%b|TeX stílus%b|Change "
+"Environment Depth|LaTeX elõtag...%l|Jelenlegi mentése alapértelmezettnek"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|Bb#b#B"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|eE#e#E"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|Dd#d#D"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|Oo#o#O"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|Tt#t#T"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|Ii#i#I"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|lL#l#L"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|Kk#k#K"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Ff#f#F"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Xx#x#X"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr ""
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|aA#a#A"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|mM#m#M"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "ASCII fájl beszúrása%t|Soroknak%x41|Bekezdéseknek%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "DMA|rR#r#R"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "DMA|zZ#z#Z"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Tárgymutató és tartalomjegyzék%t|Tartalomjegyzék%x21|Ábrák "
+"jegyzéke%x22|Táblázatok jegyzéke%x23|Algoritmusok "
+"jegyzéke%x24|Tárgymutató%x25|BibTeX irodalomjegyzék%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|aA#a#A"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|bB#b#B"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|Tt#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|lL#l#L"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|rR#r#R"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|iI#i#I"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Lebegõ objektunok%t|Ábra%x71|Táblázat%x72|Széles ábra%x73|Széles "
+"táblázat%l%x74|Algoritmus%x75"
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|bB#b#B"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|Ss#s#S"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|zZ#z#Z"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1211
+#, fuzzy
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Speciális karakterek%t|HFill%x31|Elválasztás helye%x32|Védett "
+"szóköz%x33|Sortörés%x34|Szókihagyás (...)%x35|Mondat végét jelzõ "
+"pont%x36|Hagyományos idézõjel (\")%x37"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|Hh#h#H"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|Ee#e#E"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|Vv#v#V"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|Ss#s#S"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|zZ#z#Z"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|Mm#m#M"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|aA#a#A"
+
+#: src/menus.C:1228
+#, fuzzy
+msgid "IMS|Mm#m#M"
+msgstr "IM|Ss#s#S"
+
+#: src/menus.C:1231
+#, fuzzy
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Ábra...|Táblázat...%l|Fájl beszúrása...|ASCII fájl beszúrása%m|LyX fájl "
+"beszúrása...%l|Lábjegyzet|Széljegyzet|Lebegõ objektumok%m%l|Listák és "
+"jegyzékek%m%l|Speciális "
+"karakterek%m%l|Megjegyzés|Címke...|Kereszthivatkozás...|Idézet "
+"hivatkozás|Tárgymutató"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|bB#b#B"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|Tt#t#T"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|Ff#f#F"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|Aa#a#A"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|Xx#x#X"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|Ll#l#L"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|Ss#s#S"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|eE#e#E"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|jJ#j#J"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|pP#p#P"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|Mm#m#M"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Cc#c#C"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|Kk#k#K"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|Ii#i#I"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|rR#r#R"
+
+#: src/menus.C:1267
+#, fuzzy
+msgid "IM|wW#w#W"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr ""
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Tört|Négyzetgyök|Kitevõ|Index|Szumma|Integrálás%l|Math mode|Display%l|Képlet "
+"szerkesztõ..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Tt#t#T"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|gG#g#G"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Kk#k#K"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|nN#n#N"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|Ss#s#S"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#i#I"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#m#M"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|Dd#d#D"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|zZ#z#Z"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Megjelenített betûtípus...|Nyelvi "
+"ellenõrzés...|Billentyûzet...|LaTeX...%l|Konfiguráció frissítése"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|Mm#m#M"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Nn#n#N"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Bb#b#B"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|Kk#k#K"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Köszönet...|Verzió..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr ""
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr ""
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr ""
+
+#: src/menus.C:1566
+#, fuzzy
+msgid "HM|xX#x#X"
+msgstr "FM|Kk#k#K"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr ""
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr ""
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr ""
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr ""
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|sS#s#S"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "LyX verziószám: "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr ", dátum: "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "A program könyvtára: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "A felhasználó könyvtára: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Súgó megnyitása"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr ""
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Nincs megnyitott dokumentum *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Üdvözöljük a LyX-ben!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr ""
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Hiba: Nem tudok az adott könyvtárra váltani: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "LyX belsõ hiba:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr ""
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Nyomtatás"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Nyomtató|#y"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Fájl|#F"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Minden oldalt|#M"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "A páratlan oldalakat|#T"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "A páros oldalakat|#R"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Normál sorrend|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Fordított sorrend|#O"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Sorrend"
+
+#: src/print_form.C:76
+#, fuzzy
+msgid "Pages:"
+msgstr "Oldal: "
+
+#: src/print_form.C:81
+#, fuzzy
+msgid "Copies"
+msgstr "Másolás"
+
+#: src/print_form.C:85
+#, fuzzy
+msgid "Count:"
+msgstr "Kivágás"
+
+#: src/print_form.C:88
+#, fuzzy
+msgid "Unsorted|#U"
+msgstr "Frissítés|#F"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Fájl típusa"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Parancs:|#P"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr ""
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr ""
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr ""
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr ""
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr ""
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr ""
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr ""
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr ""
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr ""
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr ""
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr ""
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr ""
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr ""
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr ""
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr ""
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr ""
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr ""
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr ""
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr ""
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr ""
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr ""
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr ""
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr ""
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr ""
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr ""
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr ""
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr ""
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr ""
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr ""
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr ""
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr ""
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr ""
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr ""
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr ""
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr ""
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr ""
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr ""
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr ""
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr ""
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr ""
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr ""
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr ""
diff --git a/po/it.po b/po/it.po
new file mode 100644 (file)
index 0000000..0904851
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,4849 @@
+# Italian translation for LyX
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# Fulvio Boggia <muci@freenet.hut.fi>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: LyX 1.0.1\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-05-05 21:12+02:00\n"
+"Last-Translator: Fulvio Boggia <muci@freenet.hut.fi>\n"
+"Language-Team: Italiano <it@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Formattazione del documento..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Nessun altro errore"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "Avviso di ChkTeX n."
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Caricamento del carattere nel Server X"
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Lancio n."
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "Lancio di LaTeX n."
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Esecuzione di MakeIndex."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Esecuzione di BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "NESSUN LOG-FILE DI LATEX!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "Log della costruzione del programma"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "Log di LaTeX"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Descrizione del comando"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Seleziona il carattere precedente"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Inserisci bibtex"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Salvataggio automatico"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Vai all'inizio del documento"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Seleziona fino all'inizio del documento"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Chiudi"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Vai alla fine del documento"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Seleziona fino alla fine del documento"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Fax"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Nuovo documento"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Nuovo documento basato su un modello"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Apri"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Vai al documento precedente"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Stampa"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Ritorna all'ultima versione salvata"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Aggiorna il file DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Aggiorna il file PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Visualizza il file DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Visualizza il file PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "Costruisci il programma"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Controlla TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Salva"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Salva come"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Annulla"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Vai un carattere indietro"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Vai un carattere avanti"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Inserisci una citazione"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Esegui un comando"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Copia"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Taglia"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Diminuisci la profondità del paragrafo"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Aumenta la profondità del paragrafo"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Cambia la profondità del paragrafo"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Modifica i caratteri per gli elenchi"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Vai in basso"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Seleziona la linea successiva"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Scegli l'ambiente del paragrafo"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Vai all'errore seguente"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Inserisci una figura"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Cerca & Sostituisci"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Il cursore segue/non segue la barra di scorrimento"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "(Dis)attiva lo stile grassetto"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "(Dis)attiva lo stile codice"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Stile del font predefinito"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "(Dis)attiva lo stile enfasi"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "(Dis)attiva lo stile definito dall'utente"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "(Dis)attiva lo stile maiuscoletto"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "(Dis)attiva lo stile del font roman"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "(Dis)attiva lo stile del font sans"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Imposta la dimensione del font"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Mostra lo stato del font"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "(Dis)attiva lo stile del font sottolineato"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Inserisci una nota a piè di pagina"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Seleziona il carattere successivo"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Inserisci un riempimento orizzontale"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Inserisci un separatore di sillabe"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Inserisci i punti sospensivi"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Inserisci il punto di fine periodo"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Disabilita la mappa dei tasti"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Usa la mappa dei tasti principale"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Usa la mappa dei tasti secondaria"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Cambia la mappa dei tasti"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Inserisci un'etichetta"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Copia il tipo dell'ambiente del paragrafo"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Incolla il tipo dell'ambiente del paragrafo"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Specifica dimensione e margini della carta"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Vai all'inizio della linea"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Seleziona fino all'inizio della linea"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Vai alla fine della linea"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Seleziona fino alla fine della linea"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Esci"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Inserisci nota a margine"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Greco matematico"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Modalità matematica"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Vai un paragrafo in basso"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Seleziona il paragrafo successivo"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Vai un paragrafo in alto"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Seleziona il paragrafo precedente"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Incolla"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Inserisci uno spazio unificatore"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Inserisci le virgolette standard"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Riconfigura"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Ripristina l'ultima operazione annullata"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Inserisci un riferimento incrociato"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Inserisci una tabella"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "(Dis)attiva l'ambiente di comandi TeX"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Annulla l'ultima operazione"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Fondi"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Importa un documento"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Rimuovi tutte le note d'errore"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Inserisci un separatore di menu"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Nessuna descrizione disponibile!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Invia il documento ad un comando"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Modificato)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (sola lettura)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr ""
+"Il documento è in sola lettura. Non sono permesse modifiche alla sua "
+"struttura"
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Struttura per la carta"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Struttura per la carta impostata"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Attenzione: lunghezza non valida (esempio valido: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Parametri aggiuntivi del paragrafo"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Parametri aggiuntivi del paragrafo impostati"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Attenzione: valore percentuale non valido (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Parametri aggiuntivi della tabella"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Struttura della tabella"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Attenzione: la posizione del cursore è sbagliata!"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Conferma: premi di nuovo il tasto Delete"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Errore!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Non riesco ad aprire il file specificato:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Errore nel caricare la classe del testo!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Non riesco a caricare la classe del testo "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- sto sostituendo quella predefinita"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Attenzione: sto ignorando il vecchio inserto"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Attenzione: ho bisogno del formato lyx %.2f ma ho trovato %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "ERRORE: ho bisogno del formato lyx %.2f ma ho trovato %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Attenzione!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "La lettura del documento non è completa"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Può darsi che il documento sia troncato"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "ERRORE!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr ""
+"Ho trovato il vecchio formato di LyX. Utilizzare LyX 0.10.x per leggerlo!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Questo non è un file di LyX!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Non riesco a leggere il file!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Errore! Il documento è in sola lettura: "
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Errore! Non riesco a scrivere il file: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Errore! Non riesco a chiudere correttamente il file: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Errore: non riesco a scrivere il file:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Errore: non riesco ad aprire il file temporaneo:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Errore! Non riesco a chiudere correttamente il file:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "ERRORE DI LYX:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Non riesco a scrivere il file"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Errore: profondità sbagliata per il comando LatexType.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "Esecuzione di LaTeX..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX non funziona!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Manca il file di log:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Fatto"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Esecuzione di Literate..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "Il comando Literate non funziona!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Costruzione del programma..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "La costruzione non funziona!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Esecuzione di chktex..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex non funziona!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Non riesco a partire col file:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Non riesco ad aprire il file temporaneo:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Errore! Non riesco ad aprire il file temporaneo:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Errore nell'eseguire un comando *roff sulla tabella"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Operazione non permessa!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Non riesco ad inserire la tabella/lista nella tabella."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Spiacente."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Modifiche nel documento:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Salva il documento?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Alcuni documenti non sono stati salvati:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Vuoi uscire comunque?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Salvataggio del documento"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Documento salvato come"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Non riesco a cancellare il file di auto-salvataggio!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Salvataggio fallito!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Nessun documento aperto!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: sto tentando di salvare il documento"
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " come..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "  Il salvataggio sembra aver avuto successo. Uff."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "  Salvataggio fallito! Sto provando..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  Salvataggio fallito! Accidenti. Il documento è perso."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Esiste una copia d'emergenza di questo documento!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Provo a caricare questa?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Il file di auto-salvataggio è più nuovo."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Carico questo?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Non sono in grado di aprire il modello"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Non riesco a convertire il file"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Il documento è già aperto"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Vuoi ricaricare questo documento?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Il file `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' è in sola lettura."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Creo un nuovo documento con questo nome?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Dimensione|#D"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Applica|#A"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Annulla|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Profondità"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standard|#S"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matematici|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Simboli 2|#b"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Simboli 3|#o"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Simboli 4|#l"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Simboli 1|#i"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Spiacente, ma la tua libreria libXpm è troppo vecchia"
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr ""
+"Questa funzione richiede la versione 4.7 (conosciuta anche come 3.4g) o più "
+"nuova di xpm"
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Provo ad eseguire LyX in modalità mono (lyx  -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" predefinita | minuscola | script | piè pagina | piccola | normale | larga | "
+"molto larga | larghissima | enorme | gigante"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Scelta dell'indice degli elenchi"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "ERRORE: LyX non è in grado di leggere il file CREDITS"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Per favore, installare LyX correttamente per avere un'idea dell'"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "enorme lavoro che altre persone hanno fatto per il progetto LyX."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Ringraziamenti"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Diritti di Copia e Garanzia"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Tutte queste persone hanno contribuito al progetto LyX. Grazie."
+
+#: src/credits_form.C:50
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX è Copyright (C) 1995 di Matthias Ettrich,\n"
+"1995-1999 Gruppo LyX"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Questo programma è software libero; potete ridistribuirlo\n"
+"e/o modificarlo nei termini previsti dalla Licenza\n"
+"Pubblica Generale (GPL) della GNU come pubblicato dalla\n"
+"Free Software Foundation; versione 2 della Licenza, o\n"
+"(a vostra discrezione) da qualunque altra versione più recente."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX è distribuito nella speranza di essere utile,\n"
+"ma SENZA NESSUNA GARANZIA, senza nemmeno la garanzia\n"
+"implicita del COMMERCIABILE o dell'ADATTO AD UNO\n"
+"SCOPO PARTICOLARE. Leggete la Licenza Pubblica Generale\n"
+"(GPL) della GNU per ulteriori dettagli. Dovreste aver\n"
+"ricevuto una copia della Licenza Pubblica Generale (GPL)\n"
+"della GNU con questo programma; se non è così, scrivete a\n"
+"Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[errore di visualizzazione]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[visualizzazione ... ]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[nessun file]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[non mostrato]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[non trovo ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[errore sconosciuto]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Figura"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "percorso della figura vuoto"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Galleria"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Documento"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "Figura EPS"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Il nome del file non può contenere nessuno di questi caratteri:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "spazio, '#', '~', '$' or '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Attenzione! Non riesco ad aprire la directory."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "Errore interno di LyX!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Non riesco a determinare se si può scrivere nella directory"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Non riesco ad aprire il file di test della directory"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "E' stato creato il file di test ma non si riesce a rimuovere?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Errore! Non riesco ad aprire la directory:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Errore! Non riesco a rimuovere il file:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Errore! Non riesco a creare la directory temporanea:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Errore! Non riesco a cancellare la directory temporanea:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Errore interno!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Chiamata di createDirectory con un nome non valido"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Errore! Non riesco a creare la directory:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Imposta set dei caratteri|#c"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Set dei caratteri non trovato!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Errore:\n"
+"\n"
+"Mappa dei tasti\n"
+"non trovata"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Insieme dei caratteri:|#I"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Altro...|#l"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Altro...|#t"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Lingua"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Mappa"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Mappa primaria|#p"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Nessuna mappa|#N"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Mappa secondaria|#s"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Secondaria"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Primaria"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "File EPS|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Anteprima della figura|#f"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Cerca...|#C"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Mostra immagine|#n"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Fai traduzioni|#d"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Opzioni"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Angolo:|#l"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% pagina"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Standard"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "pollici"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Mostra"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Altezza"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Largh."
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Rotazione"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Mostra a colori|#m"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Non mostrare la figura|#u"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Mostra in scala di grigi|#g"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Mostra in bianco e nero|#b"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Standard"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "pollici"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% pagina"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% colonna"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Titolo|#t"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Sottofigura|#r"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Directory:|#D"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Selezione:|#z"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Nome del file:|#f"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Aggiorna|#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Dir. Home|#H"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Utente1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Utente2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Colonne"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Righe"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Cerca|#e"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Cambia con|#m"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr "@>|#f"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr "@<|#b"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Cambia|#b"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Chiudi|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Maius/minus|#s"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Parola completa|#p"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Cambia tutto|#t"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Modalità matematica abilitata"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Tastiera per il greco matematico abilitata"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Tastiera per il greco matematico disabilitata"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "Modalità Comandi TeX"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Nessun numero"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Numero"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Nuova etichetta da inserire:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "Modalità testo matematico"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Azione non consentita in modalità matematica!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Modalità matematica"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Macro: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Chiave:|#h"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr ""
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Chiave:|#h"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Etichetta:|#E"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Citazione"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Oggetto bibliografico"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Riferimenti generati da BibTeX"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Database:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Stile:  "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Errore"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "Errore di LaTeX"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Errore aperto"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Cerca|#e"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr ""
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Carica|#C"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Nome del file:|#f"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Spazio visibile|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr ""
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr ""
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr ""
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Documenti"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Scegli documento figlio"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Includi"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr ""
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr ""
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr ""
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr ""
+
+#: src/insetindex.C:120
+msgid "Idx"
+msgstr ""
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr ""
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Nota"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Chiudi|#C^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Lista delle formule"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Lista delle figure"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Lista delle tabelle"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Genitore:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Tipo del riferimento"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Vai all'etichetta"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Cambia etichetta"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Numero della pagina"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Riferimento"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Pagina: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Rif: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Sommario"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "URL|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Nome|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Chiudi|#C^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "Tipo HTML|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Inserisci un URL"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HTML URL:"
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "URL: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "altro..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Mappa dei tasti"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   opzioni: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Permetti gli accenti su TUTTI i caratteri|#m"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Aggiorna|#g"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX non è stato in grado di trovare le descrizioni delle strutture!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Controllare che il file \"textclass.lst\" sia installato"
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "correttamente. Spiacente, ma devo uscire :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX non è stato in grado di trovare nessuna descrizione di struttura!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Controllare il contenuto del file \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Spiacente, ma devo uscire :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Separazione"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Capoverso|#v"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Salto|#S"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Classe:|#l"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Stile della pagina:|#p"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Font:|#F"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Dimensione:|#D"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Posiz. ogg. flottanti:|#z"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "Traduttore PS|#T"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Codifica:|#f"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Uno"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Due"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Lati"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Una"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Due"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Altre Opzioni:|#o"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Lingua:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Salto predefinito:|#t"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Massimo numero di sezioni"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Profondità del sommario"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Interlinea|#e"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Forma degli indici|#g"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "Usa matem. AMS|#M"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Famiglia:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Serie:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Forma|#m"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Dimensione|#D"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Altro:|#t"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Colore|#o"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Abilita tutti|#b"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Questi non sono mai abilitati"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Questi sono sempre abilitati"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Largh. etichetta:|#h"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Capov."
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Sopra|#p"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Sotto|#S"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Sopra|#r"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Sotto|#o"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Nessuno|#u"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Destra|#D"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Sinistra|#n"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Giustif.|#f"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Centrato|#t"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Sopra"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Sotto:"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Inter. pagina"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Linee"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Allineamento"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Spazi verticali"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Altro|#l"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Mantieni"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Mantieni"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Tipo:|#T"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Singole|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Doppie|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Testo"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Speciale:|#p"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Margini"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Intestazione/piè di pagina"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Orientamento"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Verticale (Portrait)|#V"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Orizzontale (Landscape)|#z"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Formato:|#F"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Dimensioni alternative"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Usa il pacchetto Geometry|#y"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Larghezza:|#h"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Altezza:|#l"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Superiore:|#r"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Inferiore:|#I"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Sinistro|#n"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Destro:|#o"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Altezza int.|#t"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Separazione int.|#S"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Salto piè pagina|#g"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Bordi"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Superiore|#p"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Inferiore|#f"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Sin.|#S"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Cella speciale"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Multi colonna|#u"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Aggiungi colonna|#g"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Cancella colonna|#l"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Aggiungi riga|#r"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Cancella riga|#n"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Cancella tabella|#e"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Colonna"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Riga"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Imposta bordi|#o"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Togli bordi|#T"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Tabella lunga"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Ruota di 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Inter. linea"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Tabella speciale"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Primo testa"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Testa"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Coda"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Ultimo coda"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Nuova pag."
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Ruota di 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Altro"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Sinistra"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Destra"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Centro"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Altro"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Lungh.|#h"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "opp. %"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Centrale"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "Riemp. orizz. tra paragrafi Minipage"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Inizia una nuova Minipage"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Paragrafo indentato"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minipagina"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Riquadro"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Allin. speciale multicolonna"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Allin. speciale colonna"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Postscript incapsulato (*.eps, *.ps)|#P"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "EPS sulla linea (*.eps, *.ps)|#E"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Tipo"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Font Roman|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Font Sans Serif|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Font Typewriter|#T"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Font normale|#n"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr ""
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Aggiorna|Gg#g"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Aggiorna|#g"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Inserisci il riferimento|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Inserisci il numero di pagina|#p"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Vai al riferimento|#V"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Salvataggio fallito. Vuoi rinominare il file e riprovare?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Se non vuoi, il documento non sarà salvato.)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Modelli"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Inserisci il nome del file con cui salvare il documento"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Annullato."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Lo stesso nome di documento già esiste:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Salvarlo comunque?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Un altro documento con lo stesso nome è già aperto!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Vuoi sostituirlo con il documento attuale?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Il documento è stato rinominato con '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', ma non è stato salvato..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Il documento già esiste."
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Vuoi sostituire il file?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Mi spiace, ma non posso farlo mentre le immagini vengono visualizzate"
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr ""
+"Per favore, aspetta qualche secondo perché possa finire, quindi riprova."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(o elimina a mano i processi gs in corso e riprova.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Non posso farlo mentre è in esecuzione il correttore."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Ferma prima il correttore."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Ho individuato un errore"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Dovresti tentare di correggerlo."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " errori individuati."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Dovresti tentare di correggerli."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "Ci sono stati degli errori durante l'esecuzione di LaTeX"
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Tipo di documento sbagliato"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "L'operazione di costruzione non è ammessa in questo documento"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "Ci sono stati errori durante il processo di costruzione"
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex non funziona con LinuxDoc"
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Non ho trovato avvisi."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Ho rilevato un avviso"
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Usa 'Modifica->Vai all'errore' per trovarlo."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " avvisi rilevati."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Usa 'Modifica->Vai all'errore' per trovarli."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex è stato eseguito con successo"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Sembra che chktex non funzioni."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Comando in esecuzione:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Il file già esiste:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Vuoi sovrascrivere il file?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Annullato"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Il file Nice LaTeX è stato salvato come"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "La classe del documento dev'essere linuxdoc."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "E' in costruzione il file LinuxDoc SGML `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "Il file LinuxDoc SGML è stato salvato come"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "La classe del documento dev'essere linuxdoc."
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "E' in costruzione il file LinuxDoc SGML `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "Il file LinuxDoc SGML è stato salvato come"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Il file ASCII è stato salvato come"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Sto salvando automaticamente il documento corrente..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "L'autosalvataggio non ha funzionato!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "File da inserire"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Errore! Non riesco a trovare il file indicato."
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Sommario"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Inserisci un riferimento"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Sto inserendo la nota a piè di pagina..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Sto importando il file LinuxDoc SGML `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Sto convertendo a TeX il file LinuxDoc SGML..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Sto convertendo a DVI il file LinuxDoc SGML..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Sto convertendo a DVI il file LinuxDoc SGML..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Stile del carattere"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Ambiente del paragrafo"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Struttura del documento"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Virgolette"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "Preambolo di LaTeX"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Vuoi salvare le impostazioni attuali"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "per il carattere, il documento, la carta e le virgolette"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "come predefinite per i nuovi documenti?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Apri/Chiudi..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Nessun altra operazione da annullare"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "Il ripristino non è stato ancora implementato in modo matematico"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Nessun altra operazione da ripristinare"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Font: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Profondità: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Sto inserendo la nota al margine..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Ho copiato il tipo d'ambiente del paragrafo"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Ho impostato il tipo d'ambiente del paragrafo"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr ""
+"Ho modificato la profondità dell'ambiente (nell'intervallo permesso, o forse "
+"no)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Ho impostato la struttura del paragrafo"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Devo impostare alcuni parametri ai valori"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "predefiniti di questa classe di documenti?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Errori di conversione!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Non sono in grado di passare alla nuova classe del documento."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Ripristino la classe del documento originale."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Sto convertendo il documento alla nuova classe..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Un paragrafo non può essere convertito"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " paragrafi non possono essere convertiti"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "nella classe del documento scelta"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Ho impostato la struttura del documento"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Non ci sono più note"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Ho impostato il tipo di virgolette"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "Ho impostato il preambolo LaTeX"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Non posso inserire una tabella in una tabella."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Sto inserendo la tabella..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Ho inserito la tabella"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "ERRORE! Non riesco a stampare!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Controlla l'`intervallo delle pagine'!"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Controlla il 'numero delle copie'!"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Errore:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Non riesco a stampare"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Controlla che i tuoi parametri siano corretti"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Sto inserendo la figura..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Ho inserito la figura"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Ho impostato le opzioni per lo schermo"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "Opzioni di LaTeX"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Sto eseguendo configure..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Sto caricando di nuovo la configurazione..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Il sistema è stato riconfigurato."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Devi riavviare LyX per poter utilizzare"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "qualunque specifica della classe del documento modificata"
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Non riesco a trovare questa etichetta"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "nell'attuale documento."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Nessun documento ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Non ci sono etichette nel documento ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr ""
+" Nessuno | Predefinito | Piccolo | Medio | Grande | Riemp. Vert. | Lunghezza "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr " Nessuna modifica %l| Roman | Sans Serif | Typewriter %l| Resetta "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Nessuna modifica %l| Media | Grassetto %l| Resetta"
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr ""
+" Nessuna modifica %l| Normale | Italico | Corsivo | Maiuscoletto %l| Resetta "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Nessuna modifica %l| Minuscolo | Piccolissimo | Molto piccolo | Piccolo | "
+"Normale | Grande | Molto grande | Grandissimo | Enorme | Gigante %l| Aumenta "
+"| Diminuisci | Resetta "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+" Nessuna modifica %l| Enfatizzato | Sottolineato | Maiuscoletto | Modalità "
+"comandi LaTeX %l| Resetta "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+" Nessuna modifica %l| Nessun colore | Nero | Bianco | Rosso | Verde | Blu | "
+"Ciano | Magenta | Giallo %l| Resetta "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Singola | Mezza | Doppia | Altro "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Piccolo | Medio | Grande | Lunghezza "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Predefinito | Personalizzato | Lettera US | Legal US | Executive US | A3 | "
+"A4 | A5 | B3 | B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" Nessuno | A4 con margini stretti (solo portrait) | A4 con margini molto "
+"stretti (solo portrait) | A4 con margini molto larghi (solo portrait) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``testo'' | ''testo'' | ,,testo`` | ,,testo'' | «testo» | »testo« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr ""
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr ""
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Sì|Ss#s"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr ""
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Cancella|#e"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Qualunque modifica sarà ignorata"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Il documento è in sola lettura:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Attenzione: non riesco a determinare il percorso degli eseguibili."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Se hai dei problemi, prova ad eseguire LyX con un percorso assoluto."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "La variabile d'ambiente LYX_DIR_10x non è valida."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "La directory di sistema è impostata a:"
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Avviso di LyX! Non riesco a determinare la directory di sistema."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Prova il parametro su linea di comando '-sysdir' o"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr ""
+"imposta la variabile d'ambiente LYX_DIR_10x con la directory di sistema di "
+"LyX"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "che contiene il file `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Sto usando i valori predefiniti alla compilazione "
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " ma mi aspetto dei problemi."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Aspettati dei problemi."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Non hai una directory personale di LyX."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "E' necessaria per contenere la tua configurazione."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Provo ad impostarla io per te (te lo consiglio)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Vado in esecuzione senza una directory personale di LyX."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: sto creando la directory "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " e lanciando configure..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "L'operazione non è riuscita. Userò invece "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr "."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Fatto!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "Avviso di LyX!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Errore durante la lettura di "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Sto usando i valori predefiniti alla compilazione."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Ho impostato il livello di debug a "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Uso: lyx [ opzioni ] [ nome.lyx ...]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Opzioni sulla linea di comando (distingue Maius/minus):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           ricapitola come lanciare LyX"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       prova ad impostare la directory di sistema a x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x        imposta la larghezza della finestra principale"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       imposta l'altezza della finestra principale"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         imposta la posizione x della finestra principale"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         imposta la posizione x della finestra principale"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          dove n è una somma delle opzioni di debug. Prova -dbg "
+"65535 -help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        scambia i colori di primo piano e di sfondo"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           esegue LyX in modalità bianco e nero"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  usa una routine veloce per disegnare le selezioni\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Dà uno sguardo al manuale di LyX per altre opzioni."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Manca il numero per l'opzione -dbg!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Manca la directory per l'opzione -sysdir!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Fax n.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Nome del dest.:|#N"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Impresa:|#e"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Agenda telefonica"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Seleziona fra|#S"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Aggiungi a|#g"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Cancella da|#l"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Salva|#v"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Destinazione:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Commento:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "File del fax: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Agenda telefonica vuota"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Salva (è necessario)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Non riesco ad aprire l'agenda telefonica: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "NESSUN LOGFILE, OPPURE E' VUOTO!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Finestra dei messaggi"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cAgenda telefonica vuota"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Agenda telefonica"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr ""
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr ""
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr ""
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr ""
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Eredita"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignora"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Medio"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Grassetto"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Normale"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Italico"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Corsivo"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Maiuscoletto"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Minuscolo"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Piccolissimo"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Molto piccolo"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Piccolo"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normale"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Grande"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Molto grande"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Grandissimo"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Enorme"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Gigante"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Aumenta"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Diminuisci"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "minuscolo"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "piccolissimo"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "molto piccolo"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "piccolo"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normale"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "grande"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "molto grande"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "grandissimo"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "enorme"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "gigante"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "aumenta"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "diminuisci"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "eredita"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ignora"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Non attivo"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "Attivo"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "(Dis)attiva"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Nessuno"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Nero"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Bianco"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Rosso"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Verde"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Blu"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Ciano"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Magenta"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Giallo"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Matematica"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Inserto"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Enfatizzato "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Sottolineato "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Maiuscoletto "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "LaTeX "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Predefinito"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Sequenza di tasti sconosciuta:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Azione sconosciuta"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Il comando non è permesso senza nessun documento aperto"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Il documento è in sola lettura"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Modalità testo"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Tipo per l'esportazione sconosciuto: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Tipo per l'importazione sconosciuto: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Struttura "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " sconosciuta"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Nessun riferimento incrociato da (dis)attivare"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Marchio rimosso"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Marchio impostato"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Marchi disattivati"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Marchi attivati"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "Push-toolbar ha bisogno di almeno un argomento"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "uso: toolbar-add-to <comando LyX>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Mancano gli argomenti"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Questo è permesso solo in modalità matematica!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Sto aprendo il documento figlio "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Tipo di nota a piè di pagina sconosciuta"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Il documento è in sola lettura"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Inserisci il nome del file per il nuovo documento"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "file nuovo"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Vuoi chiudere questo documento ora?\n"
+"(Basta 'No' per passare alla versione aperta)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Vuoi aprire il documento?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Sto aprendo il documento"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "aperto."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Scegli il modello"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Esempi"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Scegli il documento da aprire"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Non riesco ad aprire il documento"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Scegli il file ASCII da importare"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Un documento col nome"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "già esiste. Vuoi sovrascriverlo?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Sto importando il file ASCII"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "Il file ASCII "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "è stato importato."
+
+#: src/lyxfunc.C:2673
+#, fuzzy
+msgid "Select Noweb file to Import"
+msgstr "Scegli il file Noweb da importare"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Scegli il file LaTeX da importare"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Sto importando il file LaTeX"
+
+#: src/lyxfunc.C:2731
+#, fuzzy
+msgid "Importing Noweb file"
+msgstr "Sto importando il file Noweb"
+
+#: src/lyxfunc.C:2739
+#, fuzzy
+msgid "Noweb file "
+msgstr "Il file Noweb "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "Il file LaTeX "
+
+#: src/lyxfunc.C:2744
+#, fuzzy
+msgid "Could not import Noweb file"
+msgstr "Non riesco ad importare il file Noweb"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Non riesco ad importare il file LaTeX"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Scegli il documento da inserire"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Sto inserendo il documento"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "inserito."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Non risco ad inserire il documento"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Inserto aperto"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "sconosciuto"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Vuoi salvare il documento e procedere?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: Descrizione iniziale"
+
+#: src/lyxvc.C:184
+msgid "(no initial description)"
+msgstr "(nessuna descrizione iniziale)"
+
+#: src/lyxvc.C:187
+msgid "Info"
+msgstr "Informazioni"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr "Questo documento NON è stato registrato."
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Messaggio di log"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Vuoi ignorare le modifiche e procedere con il controllo?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Una volta tornato indietro, perderai tutte le modifiche fatte"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "al documento dall'ultimo controllo."
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Vuoi davvero farlo?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "Non c'è la cronologia RCS!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "Cronologia RCS"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Chiudi "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funzioni"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Greco"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr ""
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr ""
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr ""
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr ""
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Altro"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr ""
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Colonne "
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Allin. vert.|#v"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Allin. orizz.|#z"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr ""
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Sottile|#t"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Medio|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Spesso|#p"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negativo|#N"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Quadratino|#Q"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "2 quadratini|#2"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Separatore"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Decorazione"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Spaziatura"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matrice"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "In alto | Al centro | In basso"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Pannello matematico"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "File"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Modifica"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Struttura"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Inserisci"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Aiuto"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr ""
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#d"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#S"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#I"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr ""
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr ""
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr ""
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#A"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Opzioni dello schermo"
+
+#: src/menus.C:408
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Importa%t|File LaTeX...%x30|Testo ASCII come linee...%x31|Testo ASCII come "
+"paragrafi%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIM|pP#p#P"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Esporta%t|In file LaTeX...%x40|In file DVI...%x41|In file "
+"PostScript...%x42|In file di Testo ASCII...%x43|Personalizzato...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Esporta%t|In file LinuxDoc...%x40|In file DVI...%x41|In file "
+"PostScript...%x42|In file di testo ASCII...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Esporta%t|In file LinuxDoc...%x40|In file DVI...%x41|In file "
+"PostScript...%x42|In file di testo ASCII...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|tT#T#t"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|zZ#z#Z"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Nuovo...|Nuovo da modello...|Apri...%l|Chiudi|Salva|Salva come...|Ritorna "
+"all'ultima versione salvata%l|Anteprima DVI|Anteprima PostScript|Aggiorna "
+"DVI|Aggiorna PostScript|Costruisci il programma%l|Stampa...|Fax..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|mM#m#M"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|Aa#a#A"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|vV#v#V"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|Dd#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|tT#t#T"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|gG#g#G"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|oO#o#O"
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr "FM|uU#u#U"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|pP#p#P"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importa%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Esporta%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Esci da LyX%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|Xx#x#X"
+
+#: src/menus.C:638
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Importa%t|File LaTeX...%x15|File di testo ASCII come linee...%x16|File di "
+"testo ASCII come paragrafi...%x17|noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Nuovo...|Nuovo da modello...|Apri...%l|Importa%m%l|Esci da LyX%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Oggetti flottanti & inserti%t|Apri/Chiudi%x21|Fondi%x22|Apri tutte le note a "
+"piè di pagina o a margine%x23|Chiudi tutte le note a piè di pagina o a "
+"margine%x24|Apri tutte le figure e le tabelle%x25|Chiudi tutte le figure e "
+"le tabelle%x26%l|Rimuovi tutti gli errori%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|Aa#a#A"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|dD#d#D"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|pP#p#P"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|mM#m#M"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|fF#f#F"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|tT#t#T"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabella%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Multicolonna%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Multicolonna%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Linea in alto%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Linea in alto%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|tT#t#T"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Linea in basso%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Linea in basso%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|bB#b#B"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Linea a sinistra%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Linea a sinistra%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|sS#S#s"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Linea a destra%B%x39"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Linea a destra%b%x39"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|dD#d#D"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Allinea a sinistra%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Allinea a sinistra%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Allinea a destra%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Allinea a destra%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|lL#l#L"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Allinea al centro%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Allinea al centro%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|cC#c#C"
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Aggiungi una riga%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|gG#g#G"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Aggiungi una colonna%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|uU#u#U"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Cancella una riga%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|aA#a#A"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Cancella una colonna%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|oO#o#O"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Cancella la tabella%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|bB#b#B"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Inserisci una tabella%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Contollo della versione%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Registro%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Controlla i cambiamenti%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Controlla le modifiche%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Controlla i cambiamenti%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Controlla le modifiche%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Ritorna all'ultima versione%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Annulla l'ultimo controllo%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Mostra la cronologia%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Registro%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr ""
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Annulla|Ripristina %l|Taglia|Copia|Incolla%l|Cerca & sostituisci...|Vai "
+"all'errore|Vai alla nota|Oggetti flottanti & "
+"inserti%m|Tabella%m|Correttore....|Controllo di TeX|Sommario...%l|Controllo "
+"della versione%m%l|Vedi il file di log di LaTeX%l|Incolla la selezione "
+"primaria come linee|Incolla la selezione primaria come paragrafi"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Aa#a#A"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Tt#t#T"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|Cc#c#C"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|Ii#i#I"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|sS#s#S"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|eE#e#E"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|nN#n#N"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|fF#f#F"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|bB#b#B"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|oO#o#O"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|Xx#x#X"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|mM#m#M"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|vV#v#V"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|Ll#l#L"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|zZ#z#Z"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Carattere...|Paragrafo...|Documento...|Foglio...|Tabella...|Virgolette...%l|E"
+"nfatizzato%b|Maiuscoletto%b|Grassetto%b|Comandi di TeX%b|Cambia la "
+"profondità dell'ambiente|Preambolo di LaTeX...%l|Salva la struttura attuale "
+"come predefinita"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|Ff#f#F"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|bB#b#B"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|Vv#v#V"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|zZ#z#Z"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|Mm#m#M"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Gg#g#G"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Xx#x#X"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|dD#d#D"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|uU#u#U"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Importa un file ASCII%t|Come linee%x41|Come paragrafi%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|lL#l#L"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|pP#p#P"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Liste & Indici%t|Sommario%x21|Lista delle figure%x22|Lista delle "
+"Tabelle%x23|List delle equazioni%x24|Indice%x25|Riferimenti BibTeX%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|Ss#s#S"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|fF#f#F"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|tT#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|qQ#q#Q"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Oggetti flottanti%t|Figura flottante%x71|Tabella flottante%x72|Figura "
+"flottante larga%x73|Tabella flottante larga%l%x74|Equazione flottante%x75"
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|Ff#f#F"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|gG#g#G"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|bB#b#B"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|qQ#q#Q"
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Carattere speciale%t|Riempimento orizzontale%x31|Separatore di "
+"sillabe%x32|Spazio unificatore%x33|Interruzione di linea%x34|Puntini "
+"sospensivi (...)%x35|Punto di fine frase%x36|Virgolette ordinarie "
+"(\")%x37|Separatore di menu %x38"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|zZ#z#Z"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|bB#b#B"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|uU#u#U"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|lL#l#L"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|Pp#p#P"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|fF#f#F"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|Vv#v#V"
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr "IMS|mM#m#M"
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Figura...|Tabella...%l|Includi un file...|Importa un file ASCII%m|Inserisci "
+"un file LyX...%l|Nota a piè di pagina|Nota a margine|Oggetti "
+"flottanti%m%l|Liste & Indici%m%l|Carattere "
+"speciale%m%l|Nota...|Etichetta...|Riferimento incrociato...|Riferimento ad "
+"una citazione...|Voce nell'indice...|Voce nell'indice dell'ultima parola"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|Ff#f#F"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|Tt#t#T"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|dD#d#D"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr ""
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|pP#p#P"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|mM#m#M"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|iI#i#I"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|sS#s#S"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|hH#h#H"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr ""
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|zZ#z#Z"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|Vv#v#V"
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "IM|uU#u#U"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr ""
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Frazione|Radice quadrata|Esponente|Pedice|Somma|Integrale%l|Modalità "
+"matematica|Equazione centrata%l|Pannello matematico..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|qQ#q#Q"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|dD#d#D"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|Ss#s#S"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|zZ#z#Z"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Font dello schermo...|Impostazioni del "
+"correttore...|Tastiera...|LaTeX...%l|Riconfigura"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Ii#i#I"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Tt#t#T"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Xx#x#X"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Introduzione|Tutorial|Guida dell'utente|Ulteriori "
+"caratteristiche|Personalizzazione|Manuale di riferimento|Bug "
+"conosciuti|Configurazione di LaTeX%l|Diritti di copia & "
+"Garanzia...|Ringraziamenti...|Versione..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr ""
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr ""
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "HM|Gg#g#G"
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr "HM|Uu#U#u"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Pp#p#P"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Mm#m#M"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|Bb#b#B"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "HM|Xx#x#X"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|Dd#d#D"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "Versione di LyX "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " di "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Directory delle librerie: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Directory dell'utente: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Sto aprendo il file d'aiuto"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Sto eseguendo:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Nessun documento aperto *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Benvenuto in LyX!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Non ha senso in questa struttura!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Errore: non riesco a cambiare directory: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "Errore interno di LyX"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Errore di underflow nella pila dei percorsi"
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Stampa su"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Stampante|#m"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr ""
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Tutte le pagine|#g"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Solo le pagine dispari|#d"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Solo le pagine pari|#p"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Ordine normale|#n"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Ordine inverso|#v"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Ordine"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Pagine:"
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Copie"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Numero:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Disordinate|#i"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Tipo di file"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Comando:|#C"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr ""
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr ""
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr ""
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr ""
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "ASCII|#S"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Usa la lingua del documento|#d"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Usa una lingua alternativa:|#u"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Tratta le parole raggruppate come accettabili|#T"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Codifica d'ingresso per ispell|#d"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Usa un dizionario alternativo personale:|#p"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Altri caratteri speciali permessi nelle parole:|#s"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Dizionario"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Cambia"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Vicino\n"
+"Manca"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Opzioni del correttore...|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Lancia il correttore|#L"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Inserisci nel dizionario personale|#I"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignora la parola|#g"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Accetta la parola in questa sessione|#A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Ferma il correttore|#F"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Chiudi il correttore|#C^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr ""
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr ""
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Cambia la parola|#m"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Opzioni del correttore"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Correttore"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Il processo di ispell è terminato per qualche motivo. *Un* motivo\n"
+"plausibile potrebbe essere che non hai installato un file di dizionario\n"
+"per la lingua di questo documento. Controlla la directory delle\n"
+"librerie di ispell (in genere /usr/lib/ispell) o imposta un altro\n"
+"dizionario nel menu delle Opzioni del correttore."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " parole controllate."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " parola controllata."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Il correttore ha finito!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Il processo di ispell è terminato per qualche motivo.\n"
+"Forse è stato eliminato."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Le multicolonne possono essere solo orizzontali."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+"Non puoi usare due spazi in questo modo. Per favore, leggi il Tutorial."
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+"Non puoi inserire uno spazio all'inizio di un paragrafo. Per favore, leggi "
+"il Tutorial."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Operazione impossibile"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Non puoi inserire un oggetto flottante in un altro!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Non puoi inserire un 'marginpar' in una 'minipage'!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Non puoi tagliare una tabella."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "L'oggetto flottante ne includerebbe un altro!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Oggetto flottante aperto"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Oggetto flottante chiuso"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Non devo fare nulla :-)"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Nessuna modifica del font è stata definita. Usa Carattere nel menu "
+"Strutturaper definire la modifica del font."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Non so cosa fare con oggetti flottanti spezzati."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "spiacente."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Non so cosa fare con tabelle spezzate."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Non posso incollare un oggetto flottante in un altro"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "La cella di una tabella non può includere più di un paragrafo!"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644 (file)
index 0000000..b5b427b
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,4871 @@
+# Nederlandse meldingen voor LyX / Dutch LyX-localization
+# Copyright (C) 1997-1998 The LyX Team
+# Hacked by 
+#    Martin.Vermeer@fgi.fi     first try
+#    Bert Haverkamp (TU Delft) extensive vocabulary 
+#                              and style fixes
+#    MV                        updates for 1.0
+#    Ivo Timmermans <zarq@iname.com>
+#                              translated to official Dutch (sorry Martin :)
+#                              current maintainer
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lyx-1.0.0\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:49+02:00\n"
+"Last-Translator: Ivo Timmermans <zarq@iname.com>\n"
+"Language-Team: Dutch <nl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Bezig met opmaken document..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Geen verdere fouten"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "ChkTeX waarschuwing #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Lettertype wordt in X-server geladen..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Sessie #"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "LaTeX sessienummer"
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "MakeIndex is bezig."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "BibTeX is bezig."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "GEEN LATEX LOGBESTAND!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr ""
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "LaTeX-Log"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Opdracht beschrijven"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Selecteren vorig teken"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Bibtex invoegen"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Auto-opslaan"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Naar begin van document"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Selecteren tot begin document"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Sluiten"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Naar einde van document"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Selecteren tot einde document"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Faxen"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Nieuw document"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Nieuw document van sjabloon"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Openen"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Naar vorig document"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Afdrukken"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Terug naar opgeslagen versie"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Bijwerken DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Bijwerken PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Bekijken DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Bekijken PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr ""
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Controleren TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "s Opslaan"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "a Opslaan als"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Een teken terug"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Een teken vooruit"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Literatuurverwijzing invoegen"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Opdracht uitvoeren"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Kopiëren"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Knippen"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Verminderen omgevingsdiepte"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Vergroten omgevingsdiepte"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Veranderen omgevingsdiepte"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Veranderen instellingen lijsttekens"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Omlaag"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Volgende regel selecteren"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Omgeving voor alinea kiezen"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Naar volgende foutmelding"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Figuur invoegen"
+
+# Ik beschouw dit &-teken als een slordigheid in de Engelse tekst..
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Zoeken en vervangen"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Cursor volgt wel/niet de rolbalk"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Vet aan/uit"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Codestijl aan/uit"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Standaard lettertype"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Nadruk aan/uit"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Zelfgedefinieerde stijl aan/uit"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Eigennaamstijl aan/uit"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Romeins lettertype aan/uit"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Lettertype met/zonder schreef"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Korpsgrootte instellen"
+
+# aangenomen dat dit klopt.. niet gecontroleerd.
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Toon lettertype"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Onderlijning aan/uit"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Voetnoot invoegen"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Volgend teken selecteren"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Horizontale vulling invoegen"
+
+# (woord)afbreekpunt
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Afbreekpunt invoegen"
+
+# was: punten (...) invoegen
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Ellips invoegen"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Zinseinde-punt invoegen"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Toetsenkaart uitzetten"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Eerste toetsenkaart gebruiken"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Tweede toetsenkaart gebruiken"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Toetsenkaart aan/uit zetten"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Label invoegen"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Kopiëren alinea-omgeving"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Alinea-omgeving toepassen"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Papiergrootte en marges aangeven"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Naar begin van regel"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Selecteren tot begin regel"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Naar einde van regel"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Selecteren tot einde regel"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Afsluiten"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Kanttekening invoegen"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Griekse symbolen"
+
+# `mode' is eigenlijk een anglicisme
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Wiskundemodus"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Een alinea omlaag"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Selecteer de volgende alinea"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Een alinea omhoog"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Selecteer de vorige alinea"
+
+# invoegen?
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Plakken"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Harde spatie invoegen"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Aanhalingsteken invoegen"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Herconfigureren"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Alsnog uitvoeren"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Kruisverwijzing invoegen"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Tabel invoegen"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "TeX-stijl aan/uit"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Ongedaan maken"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Smelt"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Document importeren"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Alle foutmeldingen verwijderen"
+
+#: src/LyXAction.C:680
+#, fuzzy
+msgid "Insert menu separator"
+msgstr "Zinseinde-punt invoegen"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Geen beschrijving beschikbaar!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Zend document naar opdracht"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Veranderd)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (tegen schrijven beveiligd)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Document tegen schrijven beveiligd. Stijl mag niet veranderd worden."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Papierformaat"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Papierformaat ingesteld"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Waarschuwing: Ongeldige lengte (geldig voorbeeld: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Extra alinea opmaak"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Extra alinea opmaak ingesteld"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Waarschuwing: Ongeldig percentage (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Tabel Extra Formulier"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Tabelformaat"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Waarschuwing: Cursor fout geplaatst, venster bijgewerkt"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Bevestig: druk opnieuw op de Delete-toets"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Fout!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Kan dit bestand niet openen:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Fout tijdens laden van tekstklasse!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Kan tekstklasse niet laden "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- vervangen door standaard"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Waarschuwing: Oude Inzet genegeerd"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Waarschuwing: moet lyxformaat %.2f hebben, vond %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "FOUT: ik moet lyxformaat %.2f hebben, vond %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Waarschuwing!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Inlezen document niet voltooid"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Wellicht is document afgekapt"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "FOUT!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "Oud LyX-formaat gevonden. Lees dit met behulp van 0.10.x!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Geen LyX-bestand!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Kan bestand niet lezen!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Fout! Document is tegen schrijven beveiligd:"
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Fout! Kan niet naar bestand schrijven:"
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Fout! Kon bestand niet op juiste wijze sluiten: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Fout: Kan niet naar bestand schrijven:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Fout: Kan tijdelijk bestand niet openen:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Fout! Kon bestand niet op juiste wijze sluiten:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "LYX_FOUT:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Kan niet naar bestand schrijven"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Fout : Verkeerde diepte voor LatexType commando.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "LaTeX draait..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX werkte niet!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Logbestand ontbreekt:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Klaar"
+
+#. path to Literate file
+#: src/buffer.C:3174
+#, fuzzy
+msgid "Running Literate..."
+msgstr "LaTeX draait..."
+
+#: src/buffer.C:3194
+#, fuzzy
+msgid "Literate command did not work!"
+msgstr "LaTeX werkte niet!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr ""
+
+#: src/buffer.C:3263
+#, fuzzy
+msgid "Build did not work!"
+msgstr "LaTeX werkte niet!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "chktex draait..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex werkte niet!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Kon niet draaien met bestand:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Kan tijdelijk bestand niet openen:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Fout! Kan tijdelijk bestand niet openen:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Fout in het draaien van *roff-opdracht op tabel"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Onmogelijke operatie!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Kan geen tabel/lijst invoegen in tabel."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Helaas."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Veranderingen in document:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Document opslaan?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Sommige documenten zijn niet opgeslagen:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Toch beëindigen?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Document wordt opgeslagen"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Document opgeslagen als"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Kon dit auto-opslagbestand niet verwijderen!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Opslaan is mislukt!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Geen documenten open!"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Tracht document op te slaan "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " als..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr " Opslaan lijkt geslaagd (Pfoe!)."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr " Opslaan is mislukt! Probeer..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  Opslaan is mislukt! Helaas. Document verloren."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Er bestaat een noodopslagversie van dit document!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Proberen die dan maar te laden?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Auto-opslagversie is nieuwer."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Die dan maar laden?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Kan sjabloon niet openen"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Kon bestand niet converteren"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Document is al geopend:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Wilt u dit document opnieuw openen?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Het bestand `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' is tegen schrijven beveiligd."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Nieuw document onder deze naam aanmaken?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Grootte|#o"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Toepassen|#a"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Annuleren|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Lijstdiepte"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standaard|#S"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Wisk.|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Helaas is Uw libXpm te oud."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Deze eigenschap vereist xpm-4.7 (alias 3.4g) of nieuwer."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Probeer LyX te draaien in zwartwit (lyx -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" default | heel klein | schrift | voetnoot | klein | normaal | groot | Groot "
+"| GROOT | enorm | Enorm"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Lijsttekens kiezen"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "FOUT: LyX kon CREDITS informatiebestand niet lezen"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Installeer LyX aub correct voor een juiste indruk van het vele"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "werk dat anderen voor het projekt hebben verricht."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Dank aan"
+
+# aansprakelijkheid?
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Auteursrecht en Garantie"
+
+# ja hee.. moet ik _dit_ nou echt vertalen?
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Al deze mensen hebben bijgedragen aan het LyX-projekt. Bedankt,"
+
+#: src/credits_form.C:50
+#, fuzzy
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"Op de LyX-programmatuur rust auteursrecht.\n"
+"Copyright (C) 1995 Mattias Ettrich; 1995-1998 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Dit programma is vrije programmatuur (\"Open Source\"); U mag het\n"
+"herdistribueren in oorspronkelijke of gewijzigde vorm, in overeenstemming\n"
+"met de termen van de \"GNU General Public License\", zoals de\n"
+"Free Software Foundation (FSF) deze heeft gepubliceerd; hetzij\n"
+"Licentie versie 2, hetzij (naar keuze) een van de latere versies."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX wordt verspreid in de hoop dat het van nut zal zijn,\n"
+"maar zonder garanties, zonder zelfs de impliciete garantie van\n"
+"VERKOOPBAARHEID of BRUIKBAARHEID VOOR EEN BEPAALD DOEL.\n"
+"Zie de GNU General Public License voor verdere details. U moet hiervan\n"
+"een kopie hebben ontvangen bij dit programma; zo niet, schrijf dan naar\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[tekenfout]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[tekenen ...]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[geen bestand]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[niet getoond]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[geen ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[onbekende fout]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Figuur"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "leeg zoekpad voor figuren"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Prentenboek"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Document"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "EPS-figuur"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Bestandsnaam mag de volgende tekens niet bevatten:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "spatie, '#', '~', '$' of '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Waarschuwing! Kon map niet openen."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "interne LyX fout!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Kon niet vaststellen of deze directory schrijfbaar is"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Kan testbestand niet openen"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Proefbestand aangemaakt, maar kan het niet verwijderen?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Fout! Kan map niet openen:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Fout! Kon bestand niet verwijderen:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Fout: Kan tijdelijke map niet aanmaken:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Fout! Kon tijdelijke map niet verwijderen:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Interne fout!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Aanroep `createDirectory' met ongeldige naam"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Fout! Kon map niet aanmaken:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "c Stel tekenkodering in|#C"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Tekencodering niet gevonden!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Fout:\n"
+"\n"
+"Toetsenkaart\n"
+"niet gevonden"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "h Tekencodering:|#H"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "o Andere...|#O"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "t Andere...|#T"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Taal"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Kaart"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "r Eerste toetsenkaart|#r"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "n Geen toetsenkaart|#N"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "e Tweede toetsenkaart|#e"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Tweede"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Eerste"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "EPS-bestand|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Voorbeeld op scherm|#V"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Bladeren...|#B"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "f Venster tonen|#F"
+
+# ??
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "r Schaal aanpassen|#r"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Opties"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "l Hoek:|#L"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "g % van blz.|#g"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "t Standaard|#t"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "m cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "h duimen|#h"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Tonen"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Hoogte"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Breedte"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Roteren"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "d Toon in kleur|#D"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "y Toon deze figuur niet|#y"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "i Toon in grijstinten|#i"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "s Toon in zwartwit|#s"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "u Standaard|#U"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#c"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "n duimen|#n"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "p % van blz.|#P"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "o % van kolom|#o"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "k Bijschrift|#k"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "q Subfiguur|#q"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "d Map:|#D"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Patroon:|#P:"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "f Bestandsnaam:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "r Herlezen|#R#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "h Thuismap|#H#h"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Gebruiker1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Gebruiker2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Kolommen"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Rijen"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "n Zoeken|#n"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "w Vervangen door|#W"
+
+#: src/form1.C:331
+#, fuzzy
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+#, fuzzy
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "r Vervangen|#R#r"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Sluiten|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "s Hoofdlettergevoelig|#s#S"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "m Heel woord|#M#m"
+
+#: src/form1.C:351
+#, fuzzy
+msgid "Replace All|#A#a"
+msgstr "r Vervangen|#R#r"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Griekse symbolen aan"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Grieksie symbolen toetsenbord aan"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Griekse symbolen toetsenbord uit"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "TeX-modus"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Geen getal"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Getal"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Schijf nieuw label ter invoeging:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "wiskunde-tekst modus"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Ongeldige aktie in wiskunde modus!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Wiskunde editor modus"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Macro:"
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Sleutel:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "r Opmerking:|#R"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "k Sleutel:|#K"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "l Label:|#l"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Aanhaling"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Literatuurverwijzing"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Verwijzingen gegenereerd door BibTeX"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Database:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Stijl:  "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Fout"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "LaTeX-fout"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Fout geopend"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Bladeren|#B"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "d Niet zetten|#d"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "l Openen|#L"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "f Bestandsnaam:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "s Zichtbare spatie|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Letterlijk|#V"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Gebruik input|#I"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "u Gebruik Include|#"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Documenten"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Kies subdocument"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Include"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Input"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Verbatim-input"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "k Sleutel:|#K"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Trefwoord"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Trefwoord"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "TrefwoordenRegister"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Notitie"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "c Sluiten|#C^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Lijst van Algoritmen"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Lijst van Figuren"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Lijst van Tabellen"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Hoofddocument:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Verwijzingstype"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Naar label"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Wijzig label"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Paginanummer"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Verwijzing"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Pagina:"
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Ref: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Inhoudsopgave"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "Url|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Naam|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Sluiten|#C^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "HTML type|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Url invoegen"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtmlUrl: "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Url: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "andere..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Toetsenkaarten"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   opties: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "w Sta accenten toe op ALLE tekens|#w"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "u Bijwerken|#Uu"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX kon zijn opmaakbeschrijvingen niet vinden!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Verzeker u ervan dat bestand \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "correct is geïnstalleerd. Moet helaas ophouden :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX kon geen layout-beschrijving vinden!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Kontroleer inhoud bestand \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Helaas, moet ophouden :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Scheiding"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "i Inspringen|#I"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "k Vertikale afst.|#K"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "c Doc. klasse:|#C"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "p Paginastijl:|#P"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "f Lettertype:|#F"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "o Lettergrootte:|#O"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "l Placering zwevers:|#L"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "s PS-driver:|#s"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "d Codering:|#D"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Een|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Twee|#T"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "-zijdig"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Een|#e"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Twee|#w"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Extra opties:|#X"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Taal:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Default alinea-afst.:|#u"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Nummeringsdiepte Sekties."
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Nummeringsdiepte inhoudsopg."
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Regelafstand|#g"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "b Lijsttekens|#B"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "m Gebr. AMS Math|#m"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Familie:|F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Serie:|#s"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "h Vorm:|#h"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "z Grootte:|#Z"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "m Overig:|#M"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "c Kleur:|#C"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "T Altijd aan/uit|#T"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Worden nooit aan/uit geschakeld"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Deze worden altijd aan/uit geschakeld"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "d Labelbreedte:|#d"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Inspringen"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Boven|#b"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "e Onder|#E"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "o Boven|#o"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "l Onder|#l"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Niet Inspringen|#I"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Rechts|#R"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Links|#f"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "c Blok|#c"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "n Centreren|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "v Boven:|#v"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "w Onder:|#w"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Paginascheidingen"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Regels"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Uitlijning"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Verticale afstanden"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Extra opties|#X"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "k Houd|#K"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "p Houd|#p"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Type:|#t"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "s Enkel|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Dubbel|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Tekst"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Speciaal:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Marges"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Marges koppen/voeten"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Oriëntatie"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "o Portret|#o"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Landschap|#L"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Papier:|#P"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Eigen papiergrootte"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "u Gebruik \"Geometry\"-pakket|#U"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "w Breedte:|#W"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "h Hoogte:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Top:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "b Onderkant:|#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Links:|#e"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Rechts:|#R"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "i Paginakoppen:|#i"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "d Paginakopwit:|#d"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "f Voetnootwit:|#F"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Randen"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "t Boven|#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "b Onder|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Links|#L"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Speciale cel"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Meerkolom|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "a Kolom toevoegen|#A"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "o Kolom verwijderen|#O"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "p Rij toevoegen|#p"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "w Rij verwijderen|#w"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "d Tabel verwijderen|#D"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Kolom"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Rij"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Randen aan|#S"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "u Randen uit|#U"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Lange tabel"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "9 Roteren 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Nieuwe regels|#N"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Spec. tabel"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Eerste koptekst"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Koptekst"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Voettekst"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Laatste voettekst"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Nieuwe blz."
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Roteren 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "x Extra|#X"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "e Links|#e"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "i Rechts|#i"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "c Midden|#C"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Extra opties"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Lengte|#L"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "of %|#o"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "d Midden|#d"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "h Horizontale vulling tussen Minipagina-alinea's|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "s Begin nieuwe Minipagina|#S"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Inspringende alinea|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minipagina|#m"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Floatflt|#f"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Speciale Multikolomordening"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Speciale Kolomordening"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "EPS-bestand (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Inlined EPS (*.eps, *.ps)|#i"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Type"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Romeins lettertype|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Lettertype zonder schreef|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "t Schrijfmachine lettertype|#T"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Normaal|#n"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Zoom|#z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "u Bijwerken|uU#u"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "u Bijwerken|#U"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "i Verwijzing invoegen|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Paginanummer invoegen|#P"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "g Naar verwijzing|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Opslaan is mislukt. Opnieuw proberen onder andere naam?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(anders is document niet opgeslagen.)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Sjablonen"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Geef bestandsnaam om document op te slaan:"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Afgebroken."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Dezelfde naam die het document al heeft:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Toch opslaan?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Een ander document met dezelfde naam open!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Vervangen door huidig document?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Document hernoemd tot: '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', maar niet opgeslagen..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Document bestaat al:"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Bestand vervangen?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Helaas kan ik dit niet tijdens het tekenen van figuren."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Probeer later nog eens, als het klaar is."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(of beëindig de gs-processen handmatig en probeer opnieuw.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Kan dit niet doen terwijl de spellingscontrole draait."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Stop de spellingscontrole eerst."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Een fout gevonden"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Probeer die te corrigeren."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " fouten gevonden."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Probeer deze te corrigeren."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "LaTeX gaf foutmeldingen."
+
+#: src/lyx_cb.C:492
+#, fuzzy
+msgid "Wrong type of document"
+msgstr "Naar einde van document"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr ""
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+#, fuzzy
+msgid "There were errors during the Build process."
+msgstr "LaTeX gaf foutmeldingen."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex werkt niet met LinuxDoc."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Geen waarschuwingen."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Een waarschuwing gevonden."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Gebruik 'Wijzigen->Naar fout' om hem te vinden."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " waarschuwingen gevonden."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Gebruik 'Wijzigen->Naar fout' om ze te vinden."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex-run geslaagd"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Chktex lijkt niet te werken."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Opdracht uitvoeren:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Bestand bestaat al:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Wilt u het bestand overschrijven?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Afgebroken"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Net LaTeX-bestand opgeslagen als"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Documentklasse moet linuxdoc zijn."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Bouw LinuxDoc SGML bestand `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "LinuxDoc SGML bestand opslaan als"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "Documentklasse moet linuxdoc zijn."
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Bouw LinuxDoc SGML bestand `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "LinuxDoc SGML bestand opslaan als"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Ascii-bestand opgeslagen als"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Bezig met Auto-opslaan huidig document..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Auto-opslaan mislukte!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Bestand voor invoegen"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Fout! Kan dat bestand niet openen:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Inhoudsopgave"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Verwijzing invoegen"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Voetnoot invoegen..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Inlezen LinuxDoc SGML-bestand `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Omvormen LinuxDoc SGML tot TeX-bestand..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Omvormen LinuxDoc SGML tot DVI-bestand..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Omvormen LinuxDoc SGML tot DVI-bestand..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Tekenstijl"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Alineaomgeving"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Opmaakblad document"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Aanhalingstekens"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "LaTeX preamble"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Wilt U huidige instellingen opslaan"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "voor teken, document, papier en aanhalingsteken"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "als standaard voor nieuwe documenten?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Openen/Sluiten..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Niets meer ongedaan te maken"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "Herhaal werkt nog niet in wiskunde mode"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Geen verdere Herhaal mogelijk"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Lettertype:"
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Diepte:"
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Kanttekening invoegen..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Alineaomgeving gekopieerd"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Alineaomgeving ingesteld"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Omgevingsdiepte veranderd (indien mogelijk, of niet)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Alineaopmaak ingesteld"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Zal ik enige parameters instellen op"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "de defaultwaarden voor deze documentklasse?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Omvormingsfouten!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Kan niet omvormen naar gekozen documentklasse."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Terugkeer naar oorspronkelijke documentklasse."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Vorm document om tot nieuwe documentklasse..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Een alinea kon niet omgevormd worden"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " alinea's konden niet omgevormd worden"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "tot de gekozen documentklasse."
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "opmaakblad document ingesteld"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Geen verdere notities"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Type aanhalingstekens ingesteld"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "LaTeX-preamble ingesteld"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Kan geen tabel invoegen in tabel"
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Tabel invoegen..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tabel ingevoegd"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+#, fuzzy
+msgid "ERROR!  Unable to print!"
+msgstr "Kan niet printen"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr ""
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr ""
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Fout:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Kan niet printen"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Controleer dat uw parameters correct zijn"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Figuur invoegen..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Figuur ingevoegd"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Schermopties ingesteld"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "LaTeX-opties"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "\"configure\" draait..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Herladen configuratiegegevens..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Systeem opnieuw geconfigureerd."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "U moet LyX herstarten, om de bijgewerkte"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "documentklasseinstellingen te kunnen benutten."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Kon dit label niet vinden"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "in huidig document."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Geen document ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Geen labels gevonden in document ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr ""
+" Geen | Standaard | Klein | Middel | Groot | Vertikale vulling | Lengte "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr ""
+" Geen verandering %l| Romeins | Zonder schreef | Schrijfmachine %l| "
+"Standaard "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Geen verandering %l| Medium | Vet %l| Standaard "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr ""
+" Geen verandering %l| Staand | Cursief | Hellend | Kapiteel %l| Standaard "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Geen verandering %l| Minuscuul | Kleinst | Kleiner | Klein | Normaal | "
+"Groot | Groter | Grootst | Enorm | Enormer %l| Vergroot | Verklein | "
+"Standaard"
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+" Geen verandering %l| Nadruk | Onderstreept | Eigennaam | LaTeX mode %l| "
+"Standaard "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+"Geen verandering %l| Geen kleur | Zwart | Rood | Groen | Blauw | Cyaan | "
+"Magenta | Geel %l| Standaard"
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Enkel | Anderhalf | Dubbel | Ander "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Klein | Middel | Groot | Gegeven lengte "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Standaard | Instellen | USletter | USlegal | USexecutive | A3 | A4 | A5 | "
+"B3 | "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" Geen | A4 smalle  marges (alleen portret) | A4 zeer smalle marges (alleen "
+"portret) | A4 zeer brede marges (alleen portret) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``tekst'' | ''tekst'' | ,,tekst`` | ,,tekst'' | «tekst» | »tekst« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "LyX-logo"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Gezien"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Ja|jJ#j"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Nee|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Clear|#e"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Mogelijke veranderingen zullen genegeerd worden"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Document schrijfbeveiligd"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Waarschuwing: kon programmapad niet bepalen."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Als u problemen heeft, probeer dan LyX te starten als volledig pad."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "LYX_DIR_10x omgevingsvariabele deugt niet."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Systeemmap verwijst naar: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "LyX Waarschuwing! Kon systeemdirectory niet bepalen."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Probeer de '-sysdir' commandoparameter, of"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "zet de omgevingsvariablele LYX_DIR_10x gelijk aan de LyX systeemmap"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "bevat het bestand `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Gebruik ingebouwde standaardwaarden "
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr "maar verwacht problemen."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Verwacht problemen."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "U heeft geen eigen LyX-map."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Die heeft u nodig om uw eigen instellingen in te bewaren."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Zal ik hem voor u aanmaken (aanbevolen)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "U heeft geen eigen LyX-directory."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Maak map aan "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " en draai \"configure\"..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Mislukt. Zal "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr "inplaats hiervan gebruiken."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Klaar!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "LyX waarschuwing!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Fout tijdens lezen "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Gebruik ingebouwde standaardwaarden."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Zet debugniveau op "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Gebruik: lyx [ commando-opties ] [naam.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Commando-opties (GROOT en klein versch.):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "  -help           vat LyX gebruik samen"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "  -sysdir x       probeer systeemmap x te maken"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "  -width x        zet breedte van hoofdvenster"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "  -height y       zet hoogte van hoofdvenster"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "  -zpos x         zet x positie van hoofdvenster"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "  -ypos y         zet y positie van hoofdvenster"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"  -dbg n         waar n som is van debug-opties. Probeer -dbg 65535 -help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "  -Reverse        verwisselt voor- en achtergrondkleuren"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "  -Mono           start LyX in zwart/wit"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr ""
+"  -Fastselection  gebruik een snelle routine on selecties aan te geven\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Zie LyX man-pagina voor meer opties."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "De -dbg optie mist een getalwaarde!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "De -sysdir optie mist een directorynaam!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Fax no.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Ontv. Naam:|#N"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "e Bedrijf:|#E"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Telefoongids"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "s Uitkiezen|#S"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Toevoegen|#t"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "d Verwijderen van|#D"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "v Opslaan|#V"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Ontvanger:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Commentaar:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Faxbestand:"
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Telefoongids leeg"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Opslaan (nodig)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Kan tel. gids niet openen: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "LOGBESTAND ONTBREEKT/IS LEEG!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Mededelingsvenster"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cTel. gids leeg"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Telefoongids"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Romeins"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Zonder schreef"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Schrijfmachine"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Symbool"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Erven"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Negeren"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Medium"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Vet"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Staand"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Cursief"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Hellend"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Kapiteel"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Minuscuul"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Kleinst"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Kleiner"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Klein"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normaal"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Groot"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Groter"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Grootst"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Enorm"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Enormer"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Vergroot"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Verklein"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "minuscuul"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "kleinst"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "kleiner"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "klein"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normaal"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "groot"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "groter"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "grootst"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "enorm"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "enormer"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "vergroot"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "verklein"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "erven"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "negeren"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Uit"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "Aan"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Aan/Uit"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Geen"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Zwart"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Wit"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Rood"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Groen"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Blauw"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Cyaan"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Magenta"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Geel"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "m Wiskunde"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Inzet"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Nadruk "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Onderstreept "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Eigennaam "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "Latex "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Standaard"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Onbekende rij:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Onbekende handeling"
+
+# opdracht alleen toegestaan met document open zou mooier zijn.
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Opdracht niet toegestaan zonder open document"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Document is tegen schrijven beveiligd"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Tekst mode"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Onbekend exporttype:"
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Onbekend importtype:"
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "l Opmaak "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " onbekend"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Geen verwijzingen te veranderen"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Merkteken verwijderd"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Merkteken geplaatst"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Merkteken uitgeschakeld"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Merkteken ingechakeld"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "\"Push-toolbar\" vereist argument > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Gebruik: toolbar-add-to <LyX-opdracht>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "argument ontbreekt"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Alleen toegestaan in wiskundige modus!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Open subdocument "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Onbekend soort voetnoot"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Document is tegen schrijven beveiligd"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Geef bestandsnaam voor nieuw document"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "nieuw"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Wilt u dat document nu sluiten?\n"
+"('Nee' verplaatst U alleen naar de open versie)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Wilt u het document openen?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Openen document"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "geopend."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Kies sjabloon"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Voorbeelden"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Kies document ter opening"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Kon document niet openen"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Kies een ASCII-bestand ter importering"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Een document onder de naam"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "bestaat al. Overschrijven?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Importeren ASCII-bestand"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "ASCII-bestand "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "ingevoerd."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Kies Noweb-bestand ter importering"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Kies LaTeX-bestand ter importering"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Importering LaTeX bestand"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Importering Noweb bestand"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Noweb-bestand "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "LaTeX-bestand "
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "Kon Noweb-bestand niet importeren"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Kon LaTeX-bestand niet importeren"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Kies document ter invoeging"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Document invoegen"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "ingevoegd."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Kon document niet invoegen"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Inzet geopend"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "onbekend"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Document opslaan en voortzetten?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: Oorspronkelijke beschrijving"
+
+#: src/lyxvc.C:184
+#, fuzzy
+msgid "(no initial description)"
+msgstr "LyX VC: Oorspronkelijke beschrijving"
+
+#: src/lyxvc.C:187
+#, fuzzy
+msgid "Info"
+msgstr "Negeren"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr ""
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Logmededeling"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Veranderingen negeren en voortzetten met checkout?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Als u terugkeert naar vorige versie, verliest u alle veranderingen"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "aan het document sinds laatste inboeking."
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Wilt u dit alsnog doen?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "RCS-gechiedenis bestaat niet!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "RCS-geschiedenis"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Sluiten "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Functies"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Grieks"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr "­ Û"
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr "± ´"
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr "£ @"
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr "S  ò"
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Div."
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "OK  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Kolommen "
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Vert. uitlijnen|#V"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Hor. uitlijnen|#H"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "OK "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "t Dun|#T"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Middel|#m"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "h Dik|#H"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negatief|#N"
+
+# hm.
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Quadratin|#q"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "2Quadratin|#2"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Begrenzing"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Dekoratie"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Wit"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matrix"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr " Boven | Midden | Onder"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Wiskundepaneel"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "f Bestand"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Wijzigen"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "l Opmaak"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Invoegen"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Help"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#F"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#E"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#L"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#i"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#O"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#H"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Schermopties"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Importeren%t|LaTeX...%x30|Ascii Tekst als Regels...%x31|P Ascii Tekst als "
+"Alinea's%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "FIM|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FIM|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIM|Pp#p#P"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Export%t|als Latex...%x40|als DVI...%x41|als Postscript...%x42|als "
+"Ascii-tekst %x43|m Eigen...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Export%t|als LinucDoc...%x40|als DVI...%x41|als Postscript...%x42|als "
+"Ascii-tekst...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Export%t|als LinucDoc...%x40|als DVI...%x41|als Postscript...%x42|als "
+"Ascii-tekst...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|tT#t#T"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|mM#m#M"
+
+#: src/menus.C:453
+#, fuzzy
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Nieuw...|t Nieuw van Sjabloon...|Openen...%l|c Afsluiten|Opslaan|Opslaan "
+"als...|r Opgeslagen terughalen%l|d Bekijken DVI|i Bekijken Postscript|v "
+"Bijwerken DVI|u Bijwerken postscript%l|p Afdrukken...|Faxen..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|tT#t#T"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|Oo#o#O"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|cC#c#C"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Ss#s#S"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|aA#a#A"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|rR#r#R"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|wW#w#W"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|vV#v#V"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|uU#u#U"
+
+#: src/menus.C:479
+#, fuzzy
+msgid "FM|Bb#b#B"
+msgstr "LM|bB#b#B"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|pP#p#P"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|Ff#f#F"
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importeren%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Exporteren%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|x Beeindigen%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|Ii#i#I"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|Ee#e#E"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:638
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Importeren%t|LaTeX...%x15|Ascii Tekst als Regels...%x16|P Ascii Tekst als "
+"Alinea's...%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr ""
+"Nieuw...|t Nieuw van sjabloon...|Openen...%l|Importeren%m%l|x Beeindigen%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Zwevers & inzetten%t|Openen/Sluiten%x21|m Smelten%x22|a Alle "
+"voetnoten/kanttekeningen openen%x23|c Alle voetnoten/kanttekeningen "
+"sluiten%x24|f Alle figuren/tabellen openen%x25|t Alle figuren/tabellen "
+"sluiten%x26|r alle foutvensters verwijderen%x27\"\""
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|Oo#o#O"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|mM#m#M"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|aA#a#A"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|cC#c#C"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|fF#f#F"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|tT#t#T"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|rR#r#R"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabel%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Meerkolom%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Meerkolom%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|mM#m#M"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|t Lijn boven%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|t Lijn boven%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|tT#t#T"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|b Lijn onder%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|b Lijn onder%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|bB#b#B"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Lijn links%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Lijn links%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|lL#l#L"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Lijn rechts%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Lijn rechts%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|rR#r#R"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|e Links uitlijnen%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|e Links uitlijnen%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|i Rechts uitlijnen%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|i Rechts uitlijnen%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Centreren%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Centreren%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|Cc#c#C"
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|o Voeg rij toe%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|oO#o#O"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|u Kolom toevoegen%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|uU#u#U"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|w Rij verwijderen%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|wW#w#W"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|n Kolom verwijderen%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|d Tabel verwijderen%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|dD#d#D"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Tabel invoegen%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Versieboekhouding%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Registreren%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|i Veranderingen inboeken%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|o Uitboeken voor wijzigen%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|i Veranderingen inboeken%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|o Uitboeken voor wijzigen%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|l Vorige versie terughalen%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Laatste inboeking annuleren%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Geschiedenis tonen%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Registreren%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Rr#r#R"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|iI#i#I"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|oO#o#O"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|Ll#l#L"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|uU#u#U"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|hH#h#H"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"u Ongedaan maken|r Herhalen%l|c Knippen|Kopieren|Plakken%l|f Zoeken & "
+"vervangen...|e Naar fout|Naar notitie|i Zwevers & "
+"inzetten%m|Tabel%m|Spelling...|h TeX-check|a "
+"Inhoud...%l|Versieboekhouding%m%l|w LaTeX log bekijken%l|l Plakken "
+"X-selektie als regels|g Plakken X-selektie als alinea's"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|uU#u#U"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|rR#r#R"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|cC#c#C"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|oO#o#O"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|Pp#p#P"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|fF#f#F"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|eE#e#E"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|nN#n#N"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|iI#i#I"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|tT#t#T"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|sS#s#S"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|hH#h#H"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|aA#a#A"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Vv#v#V"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|wW#w#W"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|lL#l#L"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|gG#g#G"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"c Teken...|p Alinea...|d Document...|a Papier...|e Tabel...|q "
+"Aanhalingstekens...%l|m Nadruk%b|n Eigennaam%b|b Vet%b|t "
+"TeX-stijl%b|Omgevingsdiepte veranderen|LaTeX-preambule...%l|Opmaakblad "
+"opslaan als default"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|cC#c#C"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|pP#p#P"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|dD#d#D"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|aA#a#A"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|eE#e#E"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|qQ#q#Q"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|mM#m#M"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|nN#n#N"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|bB#b#B"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|tT#t#T"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|vV#v#V"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|Ll#l#L"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|sS#s#S"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "ASCII-bestand inlezen%t|l Als regels%x41|p Als alinea's%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|lL#l#L"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|pP#p#P"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Lijsten & tabellen%t|c Inhoudsopgave%x21|f Figuren%x22|t "
+"Tabellen%x23|Algoritmes%x24|i Zakenregister%x25|BibTeX verwijzing%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|cC#c#C"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|fF#f#F"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|tT#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|Aa#a#A"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|iI#i#I"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|Bb#b#B"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Zwevers%t|Figuur%x71|Tabel%x72|w Brede figuur%x73|i Brede "
+"tabel%l%x74|Algoritme%x75\""
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|Tt#t#T"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|wW#w#W"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|iI#i#I"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|Aa#a#A"
+
+#: src/menus.C:1211
+#, fuzzy
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Speciaal teken%t|h Horizontale vulling%x31|p Woordafbreekpunt%x32|b Harde "
+"spatie%x33|l Nieuwe regel%x34|i Ellips (...)%x35|e Punt eind zin%x36|q "
+"Aanhalingsteken (\")%x37"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|hH#h#H"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|pP#p#P"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|bB#b#B"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|lL#l#L"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|iI#i#I"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|eE#e#E"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|qQ#q#Q"
+
+#: src/menus.C:1228
+#, fuzzy
+msgid "IMS|Mm#m#M"
+msgstr "IM|mM#m#M"
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Figuur...|Tabel...%l|Bestand inivoegen...|ASCII-bestand "
+"importeren%m|LyX-bestand "
+"invoegen...%l|Voetnoot|Kanttekening|Zwevers%m%l|Lijsten & "
+"inhoudstabellen%m%l|Speciaal "
+"teken%m%l|Notitie|Label...|Verwijzing...|Literatuurverwijzing|Registertrefwoo"
+"rd|Register laatste woord"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|bB#b#B"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|cC#c#C"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|aA#a#A"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|xX#x#X"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|fF#f#F"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|mM#m#M"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|oO#o#O"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|tT#t#T"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|Ss#s#S"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|Nn#n#N"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Ll#l#L"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|rR#r#R"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|iI#i#I"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|dD#d#D"
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "IM|wW#w#W"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr "IM|uU#u#U"
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"f Breuk|s Vierkantswortel|Exponent|Onderindex|u Som|Integraal%l|m Wiskunde "
+"mode|d Formule ten toon%l|p Wiskundepaneel..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|fF#f#F"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|sS#s#S"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Ee#e#E"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|xX#x#X"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|uU#u#U"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#i#I"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|mM#m#M"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|dD#d#D"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|pP#p#P"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"f Schermlettertypes...|s Spellingsopties...|k Toetsenbord...|LaTeX...%l|r "
+"Herkonfiguratie"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|fF#f#F"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|sS#s#S"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|kK#k#K"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#l#L"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|rR#r#R"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Introduction|Tutorial|User's guide|Extended Features|Customization|Reference "
+"Manual|Known bugs|LaTeX configuration%l|o Auteursrecht en "
+"garantie...|Erkentelijkheid...|Versie..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr "HM|Ii#I#i"
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|Tt#T#t"
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "Hm|Uu#U#u"
+
+#: src/menus.C:1566
+#, fuzzy
+msgid "HM|xX#x#X"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Cc#C#c"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|Kk#K#k"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "HM|Ll#L#l"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|oO#o#O"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|Ee#e#E"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr "HM|Vv#v#V"
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "LyX-versie"
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " van "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Bibliotheeksdirectory: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Gebruiker's directory: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Openen helpbestand"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Uitvoeren:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Geen document open *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Welkom in LyX!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Heeft geen zin met deze stijl!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Fout: Kon niet naar deze directory gaan: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "LyX interne fout:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Path Stack underflow."
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Afdrukken op"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Printer|#P"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "File|#F"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "g Alle blz.|#G"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Alleen oneven blz.|#O"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Alleen even blz. |#E"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Normale volgorde|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "r Omgekeerde vlg.|#R"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Volgorde"
+
+#: src/print_form.C:76
+#, fuzzy
+msgid "Pages:"
+msgstr "Pagina:"
+
+#: src/print_form.C:81
+#, fuzzy
+msgid "Copies"
+msgstr "Kopiëren"
+
+#: src/print_form.C:85
+#, fuzzy
+msgid "Count:"
+msgstr "Commentaar:"
+
+#: src/print_form.C:88
+#, fuzzy
+msgid "Unsorted|#U"
+msgstr "u Randen uit|#U"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Bestandstype"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Opdracht:|#C"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "Postscript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#t"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#s"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "d Gebruik documenttaal|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "u Gebruik alternatieve taal|#U"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "t Samengestelde woorden toestaan|#T"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "i Geef tekencoderingsoptie aan ispell|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "p Gebruik alternatieve eigen woordenlijst:|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Extra speciale tekens toegestaan in woorden:|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Woordenlijst"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Vervangen"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Bijna\n"
+"raak"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Spellingscontrole opties...|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Spellingscontrole starten|#S"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "i Aan eigen woordenlijst toevoegen|#I"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "g Woord negeren|#g"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "a Woord aanvaarden in deze sessie|#A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "t Spellingscontrole beëindigen|#T"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "c Spellingscontroleprogramma sluiten|#C^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "r Vervang woord|#R"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Spellingscontrole opties"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Spellingscontrole"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Om een of andere reden is het ispell-proces dood. \n"
+"Mogelijkerwijs heeft u geen geïnstalleerde woordenlijst voor de taal\n"
+"van dit document. Controleer /usr/lib/ispell of kies een andere\n"
+"woordenlijst in het 'Spellingscontrole opties' menu."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " woorden gecontroleerd."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " woord gecontroleerd."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Controle compleet!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Het ispell-proces is om een of andere reden dood.\n"
+"Wie weet heeft een of andere onverlaat het gekilld."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Meerkolom werkt alleen in horizontale richting."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Onmogelijke operatie"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Je kunt geen zwever in een zwever stoppen!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Je kunt geen kanttekening in een minipagina stoppen!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Kan tabel niet splitsen."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Hier zou een zwever een andere zwever bevatten!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Zwever geopend"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Zwever gesloten"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Niets te doen"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Geen verandering lettertype gedefinieerd. Gebruik Teken onder het Stijl-menu "
+"om verandering lettertype te definieren."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Weet niet wat te doen met halve zwevers."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "Helaas."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Weet niet wat te doen met halve tabellen."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Kan geen zwever in een zwever plakken!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Een cel in een tabel kan slechts een alinea bevatten!"
diff --git a/po/no.po b/po/no.po
new file mode 100644 (file)
index 0000000..4e8161c
--- /dev/null
+++ b/po/no.po
@@ -0,0 +1,4822 @@
+# Norske oversettelser for LyX
+# Copyright (C) 1997-1999 LyX Team
+# Lars Gullik Bjønnes <larsbj@lyx.org>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lyx 1.0.4\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-16 02:33+02:00\n"
+"Last-Translator: Lars Gullik Bjønnes <larsbj@lyx.org>\n"
+"Language-Team: norsk <no@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Formaterer dokument..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Ingen flere feil"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "ChkTeX advarsel id #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Laster font inn i X-serveren..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Kjøring #"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "LaTeX kjøring nummer "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Kjører MakeIndex."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Kjører BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "INGEN LATEX LOGG FIL!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "Lag Programm Logg"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "LaTeX Logg"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Beskriv kommando"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Merk forrige bokstav"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Sett inn BibTeX"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Auto lagrer"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Gå til begynnelsen av dokumentet"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Merk til begynnelsen av dokumentet"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Lukk"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Gå til slutten av dokumentet"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Merk til slutten av dokumentet"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Faks"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Nytt dokument"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Nytt dokument med mal"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Åpne"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Bytt til forrige dokument"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Skriv ut"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Tilbake til sist lagret"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Oppdater DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Oppdater PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Se på DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Se på PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "Lag programm"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Sjekk TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Lagre"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Lagre som"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Gå en bokstav tilbake"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Gå en bokstav fremover"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Sett inn sitat"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Utfør kommando"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Kopier"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Klipp"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Minsk omgivelsedybde"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Øk omgivelsedybde"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Forandre omgivelsedybde"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Endre punktliste innstillinger"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Gå ned"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Merk neste linje"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Velg avsnitt omgivelse"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Gå til neste feil"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Sett inn figur"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Finn & Erstatt"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Markør følger/følger ikke scrollbar"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Fet av/på"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Kode stil av/på"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Standard font stil"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Uthevet av/på"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Bruker definert stil av/på"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Substantiv stil av/på"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Roman font stil av/på"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Sans serif font stil av/på"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Sett font størrelse"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Vis font status"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Understreking av/på"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Sett inn fotnote"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Merk neste bokstav"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Sett inn horisontalt fyll"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Sett inn orddelingspunkt"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Sett inn ellipsis"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Sett inn setningsslutt punktum"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Slå av keymap"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Bruk primær keymap"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Bruk sekundær keymap"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Keymap av/på"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Sett inn referanse merke"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Kopier avsnittsomgivelse"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Lim inn avsnittsomgivelse"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Spesifiser ark størrelse og marger"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Gå til begynnelsen av linjen"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Merk til begynnelsen av linjen"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Gå til slutten av linjen"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Merk til slutten av linjen"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Avslutt"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Sett inn margnotat"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Greske bokstaver"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Matte modus"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Gå ett avsnitt ned"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Merk neste avsnitt"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Gå ett avsnitt opp"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Merk forrige avsnitt"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Lim inn"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Sett inn hardt mellomrom"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Sett inn sitattegn"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Rekonfigurer"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Gjør om"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Sett inn kryssreferanse"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Sett inn tabell"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "TeX stil av/på"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Angre"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Smelt"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Importer dokument"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Fjern alle feilbokser"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Sett inn menyseparator"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Ingen beskrivelse tilgjengelig!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Send dokumentet til kommando"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Endret)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (skrivebeskyttet)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Dokumnentet er skrivebeskyttet. Endringer til stil er ikke tillatt."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Arkinnstillinger"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Arkinnstillinger satt"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Advarsel: Ugyldig lengde (gyldig eksempel: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Ekstra Avsnittsinnstillinger"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Ekstra Avsnittsinnstillinger satt"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Advarsel: Ugyldig prosent verdi (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Ekstra tabell skjema"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Tabell stil"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Advarsel: Feil markør posisjon, oppdaterte vindu"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Bekreft: trykk sletteknapp igjen"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Feil!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Kan ikke åpne valgt fil:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Tekstklasse lese feil!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Kan ikke lese tekstklasse "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- erstatter standard verdi"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Advarsel: Ignorerer gammel inset"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Advarsel: trenger lyxformat %.2f men fant %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "FEIL: trenger lyxformat %.2f men fant %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Advarsel!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Lesing av dokumentet er ikke fullstendig"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Kanskje er dokumentet forkortet"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "FEIL!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "Gammelt LyX filformat funnet. Bruk LyX 0.10.x for å lese dette!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Ikke en LyX fil!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Kan ikke lese filen!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Feil! Dokumentet er skrivebeskyttet."
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Feil! Kan ikke skrive til fil: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Feil! Filen ble ikke lukket skikkelig: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Feil: Kan ikke skrive fil:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Kan ikke åpne temporær fil:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Feil: Filen ble ikke lukket skikkelig:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "LYX_FEIL:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Kan ikke skrive fil"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Feil: Gal dybde for LaTeXType kommando.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "Kjører LaTeX..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX fungerte ikke!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Mangler logg fil:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Ferdig"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Kjxrer Literate..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "Literate kommando fungerte ikke!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Lager programm..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "Build did not work!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Kjører chktex..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex fungerte ikke!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Kunne ikke kjøre filen:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Kan ikke åpne temporær fil:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Feil! Kan ikke åpne temporær fil:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Feil under eksekvering av *roff kommando på tabell"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Umulig operasjon!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Kan ikke sette inn tabell/liste i tabell."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Beklager."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Dokumentet er endret:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Lagre dokument?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Noen dokumenter er ikke lagret:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Vil du avslutte likevel?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Lagrer dokument"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Dokument lagret som"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Kunne ikke slette autolagre fil!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Lagring feilet!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Ingen dokumeter åpne!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "LyX: Forsøker å lagre dokument "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " som..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "  Lagring trolig en suksess. Puh."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "  Lagring feilet! Prøver..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  Lagring feilet! Æsj. Mistet dokumentet."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "En nødlagret versjon av dette dokumentet eksisterer!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Skal denne leses isteden?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Autolagret fil er nyere."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Les den isteden?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Kan ikke åpne mal"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Kunne ikke konvertere filen"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Dokumentet er allerede åpent:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Ønsker du å reåpne dokumentet?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Fil `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' er skrivebeskyttet."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Skal det lages ett nytt dokument med dette navnet?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Størrelse|#S"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Bruk|#B"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Avbryt|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Bombe dybde"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standard|#t"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matte|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Beklager, libXpm biblioteket ditt er for gammelt."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Denne funksjonen krever xpm-4.7 (alias 3.4g) eller nyere."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Prøv å kjør LyX i monokrom modus (lyx -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+"standad | bitteliten | minst | mindre | liten | normal | stor | større | "
+"størst | enorm | gigantisk"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Symbolvalg for unummererte lister"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "FEIL! LyX Kunne ikke lese filen med Kreditteringer"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Vennligst installer korrekt, slik at du kan se"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "alt arbeidet som har blitt lagt ned i Lyx prosjektet."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Kreditteringer"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Copyright and Warranty"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Alle disse menneskene har bidratt til LyX prosjektet. Takk,"
+
+#: src/credits_form.C:50
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Dette programmet er fri programvare; du kan redistriburere det\n"
+"og/eller modifisere det etter krav satt i \"GNU General\n"
+"Public License\" slik den er utgitt av \"Free Software\n"
+"Foundation\"; enten versjon 2 av lisensen, eller\n"
+"(dersom du ønsker det) en nyere versjon."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[rendre feil]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[rendrer ...]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[ingen fil]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[ikke vist]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[ingen ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[ukjent feil]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Figur"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "tom figur filsti"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Utklippsbilder"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Dokumentet"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "EPS Figur"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Filnavn kan ikke inneholde noen av disse tegnene:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "mellomrom, '#', '~', '$' or '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Advarsel! Kunne ikke åpne folder:"
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "LyX intern feil!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Kunne ikke avgjøre om foldern er skrivebeskyttet"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Kan ikke åpne folder testfil"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Laget testfil, men kan ikke fjerne den?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Feil! Kan ikke åpne folder:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Feil: Klarte ikke å fjerne fil:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Feil: Klarte ikke å lage temporær folder:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Feil: Klarte ikke å slette temporær folder:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Intern feil!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Kall til createDirectory men ugyldig navn"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Feil! Kunne ikke lage folder:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Sett tegnsett"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Tegnsett ikke funnet!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Feil:\n"
+"\n"
+"Tastaturoppsett\n"
+"ikke funnet"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Tegnsett:|#H"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Annet..."
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Annet...|#A"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Språk"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Tastaturoppsett"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Primært tastatur oppsett"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Intet tastaturoppsett"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Sekundært tastatur oppsett"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Sekundær"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Primær"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "EPS fil"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Fullskjerm forhåndsvisning|#F"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Se igjennom...|#j"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Vis ramme|#r"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Utfør translasjoner|#U"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Opsjoner"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Vinkel:"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% av siden|#i"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Standard|#n"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "tommer|#o"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Vis"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Høyde"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Bredde"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Rotasjon"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Vis i farger|#V"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Vis ikke denne figuren|#k"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Vis i gråtoner|#g"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Vis i svarthvitt|#s"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Standard|#S"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#c"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "tommer|#t"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% av siden|#s"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% av kolonne|#o"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Undertekst|#k"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Delfigur|#q"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Katalog:|#K"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Mønster:|#M"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Filnavn:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Oppdater"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Hjemmeområde"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Bruker1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Bruker2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Kolonner"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Rader"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Finn"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Erstatt med"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Erstatt|#E#e"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Lukk|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Forskjell på store og små bokstaver|#s#S"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Eksakt ord|#k"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Erstatt Alle|#A#a"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Gresk matte modus på"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Gresk matte keyboard på"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Gresk matte keyboard av"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "TeX modus"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Inget tall"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Tall"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Skriv inn referansemerke som skal settes inn:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "Matte tekstmodus"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Ugyldig operasjon i matte modus!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Matte editerings modus"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Makro: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Tast:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Bemerk:|#B"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Tast:|#T"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Merke:|#M"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Sitering"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Referanse del"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "BibTeX genererte referanser"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Database:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Stil:   "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Feil"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "LaTeX Feil"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Åpnet feil"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Se igjennom|#S"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Ikke typsett|#I"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Les inn|#L"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Fil navn:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Synlig mellomrom|#S"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Verbatim|#V"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Bruk input|#B"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Bruk include|#c"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Dokumenter"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Velg subdokument"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Inkluder"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Input"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Sett inn Verbatim"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Nøkkelord:|#k"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Indeks"
+
+#: src/insetindex.C:120
+msgid "Idx"
+msgstr "Ind"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Skriv indeks"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Notis"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Lukk|#L^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Liste over algoritmer"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Figurliste"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Liste over tabeller"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Hoveddokument:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Referanse type"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Gå til referanse merke"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Endre referanse merke"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Sidetall"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Avsnitts referanse"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Side: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Ref: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Innholdsfortegnelse"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "Url|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Navn|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Lukk|#L^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "HTML type|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Sett inn Url"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtmlUrl: "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Url: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "Annet..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Tastaturoppsett"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   opsjoner: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Tillat aksenter på ALLE bokstaver"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Oppdater"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX klarte ikke å finne sine stilbeskrivelser!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Undersøk om filen \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "er installert korrekt. Beklager, må avslutte :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX klarte ikke å finne sine stilbeskrivelser!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Undersøk hva filen \"textclass.lst\" inneholder"
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Beklager, må avslutte :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Separasjon"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Innrykk"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Hopp over"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Klasse:"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Arkstil:"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Fonter:"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Font størrelse:|#O"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Float plassering:|#L"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "PS driver:|#S"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Enkoding:|#D"
+
+# n
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "En|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "To|#T"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Sider"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "En|#E"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "To|#o"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Ekstra Opsjoner:|#k"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Språk:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Standard avstand:|#u"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Avsnittsnummer dybde"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Innholdsfortengnelsesdybde"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Mellomrom|#M"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Bombe former"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "Bruk AMS matte"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Familie:"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Serie:"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Form:"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Størrelse|#S"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Misc:"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Farge:|#F"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Av/På for alle disse|#A"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Disse vil veksle mellom av/på"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Disse vil alltid veksle mellom av/på"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Merke bredde:|#b"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Innrykk"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Over|#v"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Under"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Over|#O"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Under|#U"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Ikke innrykk|#I"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Høyre"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Venstre|#V"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Blokk|#B"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Sentrer|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Over|#e"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Under|#r"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Sidebrekking"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Linjer"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Justering"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Vertikal avstand"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Ekstra opsjoner"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Hold|#H"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Hold|#d"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Slag:|#l"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Enkel:|#E"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Dobbel|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Tekst"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Spesiell:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Tekstmarger"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Topp og bunn marger"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Orientering"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Høydeformat|#H"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Breddeformat|#B"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Papirstørrelse|#P"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Egen papirstørrelse"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Bruk \"Geometry\" pakken|#B"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Bredde:|#B"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Høyde:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Topp:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Bunn:|#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Venstre:|#e"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Høyre:|#H"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Hodehøyde:|#o"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Hodeseparator:|#d"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Bunnseparator:|#u"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Kanter"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Topp|#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Bunn|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Venstre|#V"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Spesial Celle"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Multikolonne|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Legg til kolonne|#k"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Slett kolonne|#S"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Legg til rad|#r"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Slett rad|#l"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Slett tabell|#t"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Kolonne"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Rad"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Set kanter|#n"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Slå av kanter|#v"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Lang tabell"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Roter 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Linjebrekk|#n"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Spesielt: Tabell"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Første hode"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Hode"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Bunn"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Siste fot"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Ny side"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Roter 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Ekstra|#t"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Venstre|#e"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Høyre|#y"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Sentrer"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Ekstra Opsjoner"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Lengde|#L"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "eller %|#e"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Midten|#d"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "H-fyll mellom miniside-avsnitt|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Start ny Miniside|#S"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Innrykket avsnitt|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Miniside|#M"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Floatflt|#F"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Spesial Multikolonne Justering"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Spesial Kolonne Justering"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Enkapsulert Postscript (*.eps, *.ps)"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Inlined EPS (*.eps, *.ps)"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Type"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Roman font"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Sans serif font"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Skrivemaskins Font|#S"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Fontnorm|#n"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Fontzoom"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Oppdater"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Oppdater"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Sett inn referanse"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Sett inn side tall"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Gå til kryssreferansse|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Lagring feilet. Gi nytt navn og prøv igjen?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Hvis ikke blir ikke dokumentet lagret)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Maler"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Skriv inn filnavnet som dokumentet skal lagres som"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Avbrutt."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Samme navn som dokumentet allerede har:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Lagre likevel?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Ett annet dokument med samme navn er åpent!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Erstatt med gjelende dokument?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Dokument gitt nytt navn: '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', men ikke lagret..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Dokumentet finnes allerede."
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Erstatt fil?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Beklager, kan ikke gjøre det mens bilder blir rendret."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Vent noen få sekunder for at dette skal avsluttem, prøv så igjen."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(eller drep løpske gs prossesser manuelt og prøv igjen.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Kan ikke gjøre dette mens stavekontrollen kjører."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Avbryt stavekontrollen først."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "En feil oppdaget"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Du burde forsøke å fikse den."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " feil oppdaget."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Du burde forsøke å fikse dem."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "Det ble rapportert feil under kjøring av LaTeX."
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Feil type dokument"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "Det er ikke mulig e lage programm fra dette dokumentet"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "Det ble rapportert feil under kjøring av 'Build' prosessen."
+
+#: src/lyx_cb.C:520
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex fungerer ikke for SGML dokumenter."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Ingen advarsler funnet."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "En advarsel funnet."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Bruk 'Rediger->Gå til feil' for å finne dem."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " advarsler funnet."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Bruk 'Rediger->Gå til feil' for a finne dem."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex kjørt med sukssess"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Det virker som om chktex ikke fungerte."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Eksekverer kommando:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Filen finnes allerede:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Ønsker du Å skrive over filen?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Avbrutt."
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr "DocBook har ikke en latex motor"
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Pen LaTeX fil lagret som"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Tekstklassen må være linuxdoc."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Lager LinuxDoc SGML fil `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "LinuxDoc SGML fil lagre som"
+
+#: src/lyx_cb.C:912
+msgid "Document class must be docbook."
+msgstr "Tekstklassen må være docbook."
+
+#: src/lyx_cb.C:929
+msgid "Building DocBook SGML file `"
+msgstr "Lager DocBook SGML fil `"
+
+#: src/lyx_cb.C:934
+msgid "DocBook SGML file save as"
+msgstr "DocBook SGML fil lagre som"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Ascii fil lagret som"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Autolagrer gjelende dokument..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Autolagring feilet!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Fil som skal settes inn"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Feil! Kan ikke åpne spesifisert fil:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Innholdsfortegnelse"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Sett inn referanse"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Setter inn fotnote..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Importerer LinuxDoc SGML fil `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Konverterer LinuxDox SGML fil til TeX fil..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Konverterer LinuxDoc SGML fil til dvi fil..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Konverterer DocBook SGML til DVI..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Tegn stil"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Avsnittsomgivelse"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Dokumentstil"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Sitattegn"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "LaTeX Preamble"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Ønsker du å lagre de nåværende innstillingene?"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "for Fonter, Document, Ark og Sitering"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "som standardverdier for nye dokumenter?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Åpne/Lukk..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Ikke mer \"Angre\" informasjon"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "\"Gjør om\" er ennå ikke støttet i matte modus"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Ikke mer \"Gjør om\" informasjon"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Font: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Dybde: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Setter inn note i margen..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Avsnittsomgivelse kopiert"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Avsnittsomgivelse satt"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Endret omgivelsesdybde (kanskje mulig, kanskje ikke)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Avsnittstil satt"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Skal jeg sette noen paramtere til"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "sette standardverdiene for denne tekstklassen?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Konverteringsfeil!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Kan ikke bytte til ny dokument klasse."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Går tilbake til opprinnelig dokument klasse."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Konverterer dokument til ny tekstklasse..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Ett avsnitt var umulig å konvertere"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " avsnitt var umulig å konvertere"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "til valgete tekstklasse"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Dokument stil satt"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Ingen flere notiser"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Sitattegn stil satt"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "LaTeX preamble satt"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Kan ikke sette inn tabell i tabell."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Setter inn tabell..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tabell satt inn"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "FEIL! Kan ikke skrive ut!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Sjekk 'sideintervall'!"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Sjekk 'antall kopier'!"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Feil:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Kan ikke lese skrive ut!"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Sjekk at parameterene er riktige"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Setter inn figur..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Figur satt inn"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Skjemrm opsjoner satt"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "LaTeX Opsjoner"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Kjører \"configure\"..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Leser konfigurasjon om igjen..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Systemed har blitt rekonfigurert."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Du må restarte LyX for å kunne bruke de"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "oppdaterte textklasse spesifikasjonene."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Klarte ikke å finne dette referansemerket"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "i gjeldende dokument."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Intet Dokument ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Ingen referansemerker funnet i dokumentet ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr " Ingen endring %l| Roman | Sans Serif | Skrivemaskin %l| Reset "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Ingen Endring %l| Medium | Fet %l| Reset "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr " Ingen endring %l| Stående | Skråstilt | Skjev | Small Caps %l| Reset "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Ingen Endring %l| Bitteliten | Minst | Mindre | Liten | Normal | Stor | "
+"Større | Størst | Enda større | Kjempestor %l| Øk | Minsk | Reset "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+"Ingen Endring %l| Uthevet | Understreket | Substantiv | LaTeX modus %l| "
+"Reset "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+"Ingen endring %l| Ingen farge | Sort | Hvit | Rød | Grønn | Blå | Cyan | "
+"Magenta | Gul%l | Resett "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Enkel | Halvannen | Dobbel | Annet "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Smallskip | Medskip | Bigskip | Length "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Standard | Egen Definert | USletter | USlegal | USexecutive | A3 | A4 | A5 "
+"| B3 | B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+"Ingen | A4 smale marger (bare høydeformat) | A4 veldig smale marger (bare "
+"høydeformat) | A4 veldig vide marger (bare høydeformat) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``tekst'' | ,,tekst`` | ,,tekst'' | «tekst» | »tekst« | ''tekst'' "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "LyX Banner"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Lukk"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Ja|Jj#j#y"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Nei|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Blank ut|#l"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Endringer vil bli ignorert"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Dokumentet er skrivebeskyttet:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Advarsel: Fant ikke sti til binærfilen."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Hvis du har problemer prøv å start LyX med absolutt filsti."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "LYX_DIR_10x miljøvariabel er ikke god."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "System folder satt til: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "LyX Advarsel! Fant ikke system folder."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Forsøk '-sysdir' som parameter eller"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "set miljøvariablen LYX_DIR_10x til å peke på LyX' system folderen som"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "inneholder filen 'chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Bruker innebygd standard "
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " men forvent problemer."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Forvent problemer."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Du har ikke en personlig LyX folder."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Den trengs for å ta vare på din egen konfigurasjon."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Skal jeg prøve å sette den opp for deg (anbefalt)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Kjører uten personlig LyX folder."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Lager folder "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " og kjører \"configure\"..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Feilet. Bruker "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr " isteden."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Ferdig!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "LyX Advarsel!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Feil under lesing "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Bruker innebygde standarer."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Setter debug nivå til "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Bruk: lyx [ parametre ] [ navn.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Kommando linje parametre:"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           sammendrag LyX bruk"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       forsøk a set systemfolder til x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x        sett bredden på hovedvinduet"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       sett høyden på hovedvinduet"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         sett x koordinaten til hoved vinduet"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         sett y koordinaten til hovedvinduet"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          der n er summen av debugging opsjoner. Forsøk -dbg 65535 "
+"-help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        bytter forgrunns og bakgrunns farge"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           kjører LyX i svart hvitt modus"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  bruk en rask routine for tegning av merking\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Les LyX' manual side for flere muligheter."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Mangler verdi for -dbg parameter!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Mangler folder for -sysdir parameter!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Faks no.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Mott. Navn:|#N"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Foretak:|#F"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Telefon liste"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Velg fra"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Legg til"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Slett fra"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Lagre"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Mottager:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Kommentar:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Faksfil: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Tom telefonliste"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Lagring (trengs)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Kan ikke åpne telefonbok: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "INGEN ELLER TOM LOGGFIL!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Meldingsvindu"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cTom telefonliste"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Telefonliste"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Roman"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Sans serif"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Skrivemaskin"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Symbol"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Arv"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignorer"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Medium"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Fet"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Stående"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Kursiv"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Skråstilt"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Kapiteler"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Bitteliten"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Minst"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Mindre"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Liten"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normal"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Stor"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Større"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Størst"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Enorm"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Gigantisk"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Øk"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Minsk"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "bitteliten"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "minst"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "mindre"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "liten"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normal"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "stor"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "større"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "størst"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "enorm"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "gigantisk"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "øk"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "minsk"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "arv"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ignorer"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Av"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "På"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Bytt"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Ingen"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Sort"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Hvit"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Rød"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Grønn"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Blå"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Cyan"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Magenta"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Gul"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Matte"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Inset"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Uthevet "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Understreket "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Substantiv "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "LaTeX "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Standard"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Ukent sekvens:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Ukjent operasjon"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Kommandoen er ikke lov uten åpne dokumenter"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Dokumentet er ikke skrivbart."
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Tekst modus"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Ukjent eksport type: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Ukjent import type: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Stil "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " ukjent"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Ingen kryssreferanse å endre!"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Fjernet merke"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Merke satt"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Merke slått av"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Merke på"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "\"push-toolbar\" trenger argument > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Bruk: toolbar-add-to <LyX kommando> <argument>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Mangler argument"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Dette er bare tillatt i mattemodus!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Åpner subdokument "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Ukjent fotnote slag"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Dokumentet er ikke skrivbart:"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Skriv inn filnavn for nytt dokument"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "nyfil"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Ønsker du å lukke det dokumentet nå?\n"
+"('Nei' vil bare bytte til den versjonen som er åpnet)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Ønsker du å åpne dokumentet?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Ønsker du å åpne dokumentet?"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "åpnet"
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Velg mal"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Eksempler"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Vel dokument som skal åpnes"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Kunne ikke åpne dokumentet"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Velg ASCII fil som skal importeres"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Ett annet dokument med navnet"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "finnes allerede. Overskrive?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Importerer ASCII fil"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "ASCII fil "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "importert."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Velg Noweb fil som skal importeres"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Velg LaTeX fil som skal importeres"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Importerer LaTeX fil"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Importerer Noweb fil"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Noweb fil "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "LaTeX fil "
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "Kunne ikke importere Noweb filen"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Kunne ikke importere LaTeX filen"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Velg dokument som skal settes inn"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Setter inn dokumentet"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "satt inn."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Kunne ikke sette inn dokumentet"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Åpnet inset"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "ukjent"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Lagre dokument og fortsette?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: Initiell beskrivelse"
+
+#: src/lyxvc.C:184
+msgid "(no initial description)"
+msgstr "(ingen beskrivelse)"
+
+#: src/lyxvc.C:187
+msgid "Info"
+msgstr "Info"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr "Dette dokumentet ble IKKE registrert."
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Logg melding"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Ignorer endringer, og fortsett med utsjekk?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Når du revertere vil du miste alle endringer som"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "er gjort i dokumentet siden siste innsjekking."
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Ønsker du fortsatt å gjøre det?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "Ingen RCS Historie!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "RCS Historie"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Lukk"
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funksjoner"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Gresk"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr "­ Û"
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr "± ´"
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr "£ @"
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr "S  ò"
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Misc"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "Ok  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Kolonner"
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Juster vertikalt|#v"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Juster horisontalt|#h"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "OK "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Smal"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Medium"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Bred"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negativ"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Firdobbel"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "2Firdobbel"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Skille"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Dekorering"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Mellomrom"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matrise"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Topp | Senter | Bunn"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Matte panel"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Fil"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Rediger"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Stil"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Sett inn"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Hjelp"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#F"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#R"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#S"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#I"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#O"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#H"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Skjerm Opsjoner"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Import%t|LaTeX...%x30|Ascii tekst as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "FIM|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FIM|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIM|Pp#p#P"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Eksporter%t|som LaTeX...%x40|som DVI...%x41|som PostScript...%x42|som ren "
+"tekst...%x43|Egen definert...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Eksporter%t|som LinuxDoc...%x40|som DVI...%x41|som PostScript...%x42|som ren "
+"tekst...%x43"
+
+#: src/menus.C:440
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Eksporter%t|som DocBook...%x40|som DVI...%x41|som PostScript...%x42|som ren "
+"tekst...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|tT#t#T"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|Ee#E#e"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Ny fil...|Ny fil med mal...|Åpne...%l|Lukk|Lagre|Lagre som...|Tilbake til "
+"lagret%l|Se dvi|Se PostScript|Oppdater dvi|Oppdater PostScript|'Build' "
+"program%l|Skriv ut...|Faks..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|mM#m#M"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|pP#p#P"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|uU#u#U"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Ll#l#L"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|gG#g#G"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|Tt#T#t"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|wW#w#W"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|Oo#O#o"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|cC#c#C"
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr "FM|Bb#b#B"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|Ss#s#S"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|Ff#f#F"
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importer%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "Eksporter%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Avslutt%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|Ii#i#I"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|Ee#e#E"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|Aa#A#a"
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Ny fil...|Ny fil med mal...|Åpne...%l|Importer%m%l|Avslutt%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Floats & Insets%t|Åpne/Lukk%x21|Smelt%x22|Åpne alle "
+"fotnoter/marknotiser%x23|Lukk alle fotnoter/margnotiser%x24|Åpne alle "
+"figurer/tabeller%x25|Lukk alle figurer tabeller%x26%l|Fjern alle feil "
+"bokser%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|pP#p#P"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|Ss#S#s"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|aA#a#A"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|Ll#L#l"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|fF#f#F"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|tT#t#T"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|bB#b#B"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabell%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "Multikolonne%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "Multikolonne%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|Mm#M#m"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Topp linje%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Topp linje%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|Tt#T#t"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Bunn linje%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Bunn linje%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|Bb#B#b"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Venstre linje%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Venstre linje%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Vv#V#V"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Høyre linje%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Høyre linje%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|Hh#H#h"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Juster venstre%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Juster venstre%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Juster Høyre%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Juster Høyre%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|yY#y#Y"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Sentrer%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "Sentrer%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|Ss#S#s"
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Legg til rad%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|rR#r#R"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Legg til kolonne%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|kK#k#K"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Slett rad%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|dD#d#D"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Slett kolonne%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Slett tabell%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|Ss#S#s"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Sett inn tabell%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|Ss#S#s"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Versjons kontroll%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Registrer%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Sjekk inn endringer%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Sjekk ut for endring%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Sjekk inn endringer%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Sjekk ut for endringer%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Tilbake til siste versjon%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Angre siste innsjekking%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Vis Historie%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Registrer%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Rr#R#r"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|iI#i#I"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|uU#u#U"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|Tt#T#t"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|Aa#A#a"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|Hh#H#h"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Angre|Gjør om%l|Klipp|Kopier|Lim inn%l|Find & Erstatt...|Gå til Feil|Gå til "
+"Notis|Floats & Insets%m|Tabell%m|Stavekontroll...|Sjekk "
+"TeX||Innholdsfortegnelse...%l|Versjons Kontroll%m%l|Se på LaTeX' logg "
+"fil%l|Lim inn primær seleksjon som linjer|Lim inn primær seleksjon som "
+"avsnitt"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Aa#a#A"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|Gg#g#G"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Kk#K#k"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|oO#o#O"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|Ll#L#l"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|Ee#E#e"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|Ff#F#f"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|Nn#N#n"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|Ii#I#i"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|Tt#T#t"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|Ss#S#s"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|Xx#X#x"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|hH#h#H"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Vv#V#v"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|pP#p#P"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|Ll#l#L"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|gG#g#G"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Bokstav...|Avsnitt...|Dokument...|Ark...|Tabell...|Sitattegn...%l|Uthevet "
+"stil%b|Substantiv stil%b|Fet stil%b|TeX stil%b|Endre omgivelsesdybde|LaTeX "
+"preamble...%l|Lagre stil som standard"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|Bb#B#b"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|Aa#A#a"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|Dd#D#d"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|rR#r#R"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|Tt#T#t"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|Ss#S#s"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|Uu#U#u"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|nN#n#N"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Ff#F#f"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Xx#X#x"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM§Ee#E#e"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|Ll#L#l"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|gG#g#G"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Importer ASCII fil%t|Som linjer%x41|Som avsnitt%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|lL#l#L"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|aA#a#A"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Lister & Innholdsfortegnelse%t|Innholdsfortegnelse%x21|Liste over "
+"figurer%x22|Liste over Tabeller%x23|Liste over "
+"algoritmer%x24|Register%x25|Referanseliste%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|Ii#I#i"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|fF#f#F"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|Tt#T#t"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|aA#a#A"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|Rr#R#r"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|fF#f#F"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Floats%t|Figur float%x71|Tabell float%l%x72|Vid Figur float%x73|Vid Tabell "
+"float%l%x74|Algoritme float%x75"
+
+#. }
+#: src/menus.C:1204
+msgid "IMF|gG#g#G"
+msgstr "IMF|gG#g#G"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|Tt#T#t"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|bB#b#B"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IM|fF#f#F"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|gG#g#G"
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Spesial tegn%t|HFill%x31|Orddelingspunkt%x32|Hardt "
+"mellomrom%x33|Linjeskift%x34|Ellipsis "
+"(...)%x35|Avsnittssluttpunktum%x36|Vanlige gåseøyne "
+"(\")%x37|Menyseparator%x38"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|Hh#H#h"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|Oo#O#o"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|mM#m#M"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|Ll#L#l"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|Ee#E#e"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|Aa#A#a"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|Vv#V#v"
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr "IMS|Mm#m#M"
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Figur...|Tabell...%l|Inkluder fil...|Importer ASCII fil%m|Sett inn LyX "
+"fil...%l|Fotnote|Margnotis|Floats%m%l|Lister%m%l|Spesial "
+"tegn%m%l|Notis...|Referansemerke...|Kryssreferanse...|Siterings "
+"referanse...|Index referanse...|Indeks referanse siste ord"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|Ff#F#f"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|Tt#T#t"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|Ii#I#i"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|Aa#A#a"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|Xx#X#x"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|nN#n#N"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|Mm#M#m"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|oO#o#O"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|Ll#L#l"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|Ss#S#s"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|eE#e#E"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Rr#r#R"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|Kk#K#k"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|fF#f#F"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|dD#d#D"
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "IM|wW#w#W"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr "IM|Uu#U#u"
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Brøk|Kvadratrot|Eksponent|Indeks|Sum|Integral%l|Matte modus|Display%l|Matte "
+"panel..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Bb#B#b"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|Kk#K#k"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Ee#E#e"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|nN#n#N"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|Ss#S#s"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#I#i"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#M#m"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|Dd#D#d"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|pP#p#P"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Skjerm fonter...|Opsjoner til "
+"stavekontroll...|Tastatur...|LaTeX...%l|Rekonfigurer"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|Ss#S#s"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Oo#O#o"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Tt#T#t"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#L#l"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|Rr#R#r"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr "HM|Ii#I#i"
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|Tt#T#t"
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "HM|Uu#U#u"
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr "HM|xX#x#X"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Cc#C#c"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|Kk#K#k"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "HM|Ll#L#l"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|oO#o#O"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|eE#e#E"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr "HM|Vv#v#V"
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "LyX Versjon "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " av "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Bibliotek folder: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Bruker folder: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Åpner hjelpe fil"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Eksekverer:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Ingen dokumeter åpne *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Velkommen til LyX!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Uten mening for denne stilen!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Feil: Kunne ikke bytte til folde: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "LyX intern feil:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Path Stack underflow."
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Skriv til"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Skriver"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Fil"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Alle sidene"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Bare odde sider"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Bare like sider"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Normal rekkefølge"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Omvent rekkefølge"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Rekkefølge"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Sider: "
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Kopier"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Antall:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Usortert|#U"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Fil type"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Kommando:|#K"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "PostScript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#s"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Bruk dokumentets språk"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Bruk alternativt språk:"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Godta sammensatte ord som lovlige"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Input encoding bryter til ispell|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Bruk alternativ personlig ordliste:"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Ekstra spesial tegn tillatt i ord:"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Ordliste"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Erstatt"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Nesten\n"
+"Like"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Opsjoner til stavekontroll"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Begynn stavekontroll"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Legg til i personlig ordliste"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignorer ord"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Godta ordet denne runden"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Avbrut stavekontroll"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Lukk stavekontrollen"
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Erstatt ord?"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Opsjoner til stavekontroll"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Stavekontroll"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Ispell prosessen er død av en eller annen grunn. *En* mulig grunn\n"
+"kan være at du ikke har en ordlistefil\n"
+"for dokumentetsspråk installert.\n"
+"Undersøk /usr/lib/ispell eller sett en annen\n"
+"ordliste i Stavekontroll Opsjoner menyen."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " ord sjekket."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " ord sjekket."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Stavekontroll fullført"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Ispell prosessen er død av en eller annen grunn.\n"
+"Kanskje har den blitt drept."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Multikolonner kan bare være horisontale."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr "Det er ikke mulig e bruke to mellomrom pe denne meten. Les 'Tutorial.'"
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+"Du kan ikke sette inn et mellomrom i begynnelsen av et avsnitt. Les "
+"'Tutorial'."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Umulig operasjon"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Do kan ikke sette inn en float i en float!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Do kan ikke sette inn et marknotat i en minipage!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Kan ikke klippe tabell."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Float ville inkludert float!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Åpnet float"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Lukket float"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Ingenting å gjøre"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Ingen font endring definert. Bruk Tegn under Stil menyen to å definere font "
+"endring."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Vet ikke hva som skal gjøres med halve floater."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "beklager."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Vet ikke hva som skal gjøres med halve tabeller."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Kan ikke lime inn float i float!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "En tabell celle kan ikke inkludere med enn ett avsnitt!"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644 (file)
index 0000000..ed80832
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,4654 @@
+# Polskie teksty dla LyXa (1999).
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Pawe³ Dziekoñski <pdziekonski@mml.ch.pwr.wroc.pl>
+# Podziêkowania dla grupy pl.comp.dtp.tex.gust
+# Pre-translation has bean done using PePeSza v0.7[C
+# get your own copy of PePeSza from http://www.ids.pl/~pkollegu/pepesza.html
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: LyX 1.0.4pre8\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-27 17:28+02:00\n"
+"Last-Translator: Pawe³ Dziekoñski <pdziekonski@mml.ch.pwr.wroc.pl>\n"
+"Language-Team: Polish <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Formatowanie dokumentu..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Brak kolejnych b³êdów"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "ChkTeX: ostrze¿enie #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "£adowanie fontów do X-Serwera..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Przebieg #"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "Przebieg LaTeXa numer "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Uruchomiony MakeIndex."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Uruchomiony BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "BRAK PLIKU LOGU LATEXA!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "Log z budowania programu"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "Log LaTeXa"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Opis polecenia"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Zaznacz poprzedni znak"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Wstaw bibtex'a"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Automatyczne zachowanie"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Id¼ na pocz±tek dokumenu"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Zaznacz do pocz±tku dokumentu"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64 src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472 src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328 src/math_forms.C:179
+msgid "Close"
+msgstr "Zamknij"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Id¼ na koniec dokumentu"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Zaznacz do koñca dokumentu"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Faks"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Nowy dokument"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Nowy dokument z szablonu"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Otwórz"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Prze³±cz na poprzeni dokument"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Drukuj"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Wróæ do zachowanego"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Aktualizuj DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Aktualizuj PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Podgl±d DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Podgl±d PostScriptu"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "Buduj program"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Sprawd¼ TeX'a"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Zachowaj"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Zachowaj jako"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Id¼ jeden znak do ty³u"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Id¼ jeden znak do przodu"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Wstaw cytat"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Wykonaj polecenie"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Kopiuj"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Wytnij"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Zmniejsz rozmiar ¶rodowiska"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Zwiêksz rozmiar ¶rodowiska"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Zmieñ rozmiar ¶rodowiska"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Zmieñ znaki wyró¿nieñ wyszczególnieñ"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Id¼ na dó³"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Zaznacz nastêpn± liniê"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Wybie¿ ¶rodowisko akapitu"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Id¼ do nastêpnego b³êdu"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Wstaw rysunek"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Znajd¼ i zast±p"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Czy kursor ma nad±¿aæ za paskiem przewijania?"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Prze³±cz pogrubienie"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Prze³±cz styl kodu"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Domy¶lny styl fontu"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Kursywa"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Prze³±cz styl definiowany przez u¿ytkownika"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Kapitaliki"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Font szeryfowy"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Font bezszeryfowy"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Ustaw rozmiar fontu"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Poka¿ stan fontu"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Czcionkê podkre¶lon±"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Wstaw przypis w stopce strony"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Zaznacz nastêpny znak"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Wstaw poziome wype³nienie"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Wstaw punkt przeniesienia"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Wstaw ... kropki"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Wstaw kropkê koñcz±ca zdanie"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Wy³acz mapowanie klawiatury"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "U¿yj podstawowego mapowania klawiatury"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "U¿yj alternatywnej mapy klawiatóry"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Prze³±cz mapê klawiatury"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Wstaw etykietê"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Kopiuj typ ¶rodowiska akapitu"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Wstaw typ ¶rodowiska akapitu"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Podaj rozmiar papieru i marginesów"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Id¼ na pocz±tek linii"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Zaznacz do pocz±tku linii"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Id¼ na koniec linii"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Zaznacz do koñca linii"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Wyj¶cie"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Wstaw przypis na marginesie"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Greckie znaki matematyczne"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Tryb matematyczny"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Id¼ jeden akapit na dó³"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Zaznacz nastêpny akapit"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Id¼ jeden akapit do góry"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Zaznacz poprzedni akapit"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Wklej"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Wstaw \"tward±\" spacjê"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Wstaw cudzys³ów"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Rekonfiguruj"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Powtórz"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Wstaw odsy³acz wewnêtrzny"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Wstaw tabelê"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "Polecenie TeXa"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Cofnij"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Rozbij"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Importuj dokument"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Usuñ wszystkie okienka b³êdów"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Wstaw kropkê koñcz±ca zdanie"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Opis niedostêpny!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Przeka¿ dokument do polecenia"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (zmieniony)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (tylko do odczytu)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Dokument jest tylko do odczytu. Zmiany ustawieñ nie dozwolone."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Parametry papieru"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Parametry papieru ustawione"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299 src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Niepoprawna warto¶æ (porawny przyk³ad: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "¦rodowisko akapitu - zaawansowane"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "¦rodowisko akapitu - zaawansowane: ustawione"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Ostrze¿enie: nieporawna warto¶æ procentowa (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Tabele - zaawansowane"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Parametry tabeli"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Nieporawna pozycja kursora, od¶wie¿ zawarto¶æ okna"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Potwierd¼: naci¶nij ponownie klawisz Delete"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582 src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912 src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "B³±d!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Nie mo¿na otworzyæ podanego pliku:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "B³±d czytania pliku textclass.lst!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Nie mo¿na wczytaæ pliku textclass.lst "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- podstawiam domy¶lny"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Ostrze¿enie: Ignorujê star± wstawkê"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Ostrze¿enie: potrzebny format lyxa %.2f, a znaleziono %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "B£¡D: potrzebny format lyxa %.2f, a znaleziono %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Ostrze¿enie!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Odczyt dokumentu nie zakoñczy³ siê"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Prawdopodobnie dokument jest uciêty"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "B£¡D!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "Stary format pliku LyXa. U¿yj LyXa 0.10x aby go odczytac!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Plik nie jest w formacie LyXa!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Nie mo¿na odczytac pliku!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "B³±d! Dokument tylko do odczytu: "
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "B³±d! Nie mo¿na zapisaæ pliku: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "B³±d! Nie mo¿na poprawnie zamkn±æ pliku: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "B³±d! Nie mo¿na zapisaæ pliku:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "B³±d! Nie mo¿na otworzyæ pliku tymczasowego:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "B³±d! Nie mo¿na poprawnie zamkn±æ pliku:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468 src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "B£¡D_LYXA:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Nie mo¿na zapisaæ pliku"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr ""
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "LaTeX uruchomiony..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX nie dzia³a!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Brakuje pliku logu:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206 src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Zrobione"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "LaTeX uruchomiony..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "LaTeX nie dzia³a!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Budowanie programu..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "Budowanie nie powiod³o siê!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "chktex uruchomiony..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex nie dzia³a!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Nie mo¿na uruchomiæ z plikiem:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Nie mo¿na otworzyæ pliku tymczasowego:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "B³±d! Nie mo¿na otworzyæ pliku tymczasowego:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "B³±d uruchomienia *roff na tabeli"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Operacja niemo¿liwa!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Nie mo¿na wstawiæ tabeli/listy do tabeli."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937 src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136 src/text2.C:2146
+msgid "Sorry."
+msgstr "Przykro mi."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204 src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Zmiany w dokumencie:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Zachowaæ dokument?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Niektóre dokumenty nie zosta³y zachowane:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Wyj¶æ i tak?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Zachowywanie dokumentu"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Dokument zachowany jako"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Nie mo¿na usun±c pliku auto-zapisu!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Zachowanie pliku nie powiod³o siê!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Brak otwartych dokumentów!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Próbujê zachowaæ dokument "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " jako..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "  Zachowanie chyba powiod³o siê. Uff."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr " Zachowanie nie powiod³o siê! Próbujê..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr " Zachowanie pliku nie powiod³o siê! Dokument utracony."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Awaryjna kopia tego dokumentu ju¿ istnieje!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Spróbowaæ za³adowaæ ten zamiast?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Plik zachowany jest nowszy."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Za³adowac ten zamiast?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Nie mo¿na otworzyæ pliku szablonu"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Nie mo¿na wykonaæ konwersji pliku"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615 src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Dokument jest ju¿ otwarty:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Chcesz prze³adowac dokument?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Plik `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' jest tylko do odczytu."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Utworzyæ nowy dokument z t± nazw±?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Rozmiar|#r"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59 src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290 src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46 src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53 src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387 src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111 src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24 src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192 src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384 src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39 src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203 src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Zastosuj|#a"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296 src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139 src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69 src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47 src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329 src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91 src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405 src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102 src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47 src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Anuluj|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "G³êboko¶æ"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standard|#S"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Maths|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Niestety Twoje libXpm jest zbyt stare."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Wymagany xpm-4.7 (znane jako 3.4g) albo nowszy."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Spróbuj uruchomic LyX'a w trybie mono (lyx -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid " default | tiny | script | footnote | small | normal | large | Large | LARGE | huge | Huge"
+msgstr " domy¶lny | mikroskopijny | bardzo ma³y | mniejszy | ma³y | normalny | du¿y | wiêkszy | bardzo du¿y | ogromny | najwiêkszy"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Wybór znaków wyró¿nieñ wyszczególnieñ"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "B£¡D: Plik CREDITS nie jest osi±galny"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Zainstaluj LyXa poprawnie, proszê, by zobaczyæ"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "jak wiele pracy w³o¿y³o wielu ludzi w projekt LyXa."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Autorzy"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Prawa autorskie i zastrze¿enia"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Wszystkie poni¿sze osoby wspó³pracowa³y w tworzeniu Lyx'a. Dziekujemy"
+
+#: src/credits_form.C:50
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Tem program jest darmowy. Mo¿esz redystrybuowaæ go\n"
+"i/lub zmieniaæ z zachowaniem warunków zawartych w Ogólnej Publicznej\n"
+"Licencji GNU, publikowanej przez Free Software Foundation,\n"
+"lub jej wersji 2, czy te¿ ka¿dej nastêpnej wed³ug w³asnego\n"
+"uznania."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX jest dystrybuowany z nadziej±, ¿e bedzie u¿yteczny,\n"
+"ale bez ¿adnych gwarancji. Nawet gwarancji przydatno¶ci\n"
+"do jakiegokolwiek zastosowania lub sprzeda¿y.\n"
+"\n"
+"Zajrzyj do Ogólnej Publicznej Licencji GNU aby uzyskaæ\n"
+"szczegó³y. Powiniene¶ otrzymaæ kopiê tej licencji wraz\n"
+"z programem, je¶li nie, napisz do Free Software\n"
+"Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[b³±d wy¶wietlania]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[wy¶wietlanie...]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[brak pliku]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[nie wy¶wietlany]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[brak Ghostscripta]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[nieznany b³±d]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Rysunek"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "brak ¶cie¿ki do rysunku"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Rysunek"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571 src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Dokument"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "Rysunek EPS"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Nazwa pliku nie mo¿e zawieraæ ¿adnego z wymienionych znaków:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "spacja, '#', '~', '$' lub '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Ostrze¿enie! Nie mo¿na otworzyc katalogu."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "B³±d wewnêtrzny LyXa!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Nie mo¿na sprawdziæ czy masz prawo zapisu do tego katalogu"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Nie mo¿na otworzyc katalogu pliku testowego"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Utworzono plik testowy ale nie mo¿na go usun±æ?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "B³±d! Nie mo¿na otworzyæ katalogu:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "B³±d! Nie mo¿na usuni±æ pliku:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "B³±d! Nie mo¿na utworzyæ katalogu tymczasowego:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "B³±d! Nie mo¿na usun±æ katalogu tymczasowego:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "B³ad wewnêtrzny!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Wywo³anie createDirectory z nieprawid³ow± nazw±"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "B³±d! Nie mo¿na utworzyæ katalogu:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Ustaw kodowanie|#U"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Brak tabeli kodowania!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"B³±d:\n"
+"\n"
+"Mapa klawiatury\n"
+"nie znaleziona"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Kodowanie:|#K"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Inny...|#I"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Inny...|#y"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Jêzyk"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Mapa"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Jêzyk g³ówny|#g"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Brak mapy kodowania|#B"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Jêzyk drugorzêdny|#d"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Drugorzêdny"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "G³ówny"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "Plik EPS|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Podg³±d|#v"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Przegl±daj...|#P"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Poka¿ ramkê|#r"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr ""
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239 src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315 src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Opcje"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "K±t:|#K"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% strony|#s"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Domy¶lny|#D"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "cale|#l"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Wy¶wietl"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Wysoko¶æ"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Szeroko¶æ"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Obrót"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "W kolorze|#W"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Nie wy¶wietlaj|#w"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "W odcieniach szaro¶ci|#s"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Monochromatycznie|#M"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Domy¶lny|#D"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#c"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "cale|#l"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% strony|#s"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% kolumny|#k"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Podpis|#P"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Podrysunek|#P"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Katalog:|#K"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Maska:|#M"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Nazwa pliku:|#N"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Od¶wie¿|#R#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Domowy|#D#d"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "U¿ytkownik1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "U¿ytkownik2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Kolumn"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Wierszy"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Szukaj|#S"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Zamieñ z|#Z"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Zamieñ|#Z#z"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Zamknij|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Wielko¶æ liter|#w#W"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Ca³e s³owo|#S#s"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Zamieñ wszystkie|#A#a"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "`"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Grecka klawiatura w³±czona"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Grecka klawaitura matematyczna wy³±czona"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "Tryb TeXa"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Bez numeru"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Numer"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Podaj now± etykietê do wstawienia:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "Tryb tekstowy matematyczny"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Niew³a¶ciwa akcja w trybie matematycznym"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Tryb edytora matematycznego"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Makro: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Klucz:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Notka:|#N"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Klucz:|#K"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Etykieta:|#E"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Cytowanie"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Pozycja bibliografii"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Odno¶niki wygenerowane przez BibTeXa"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Baza danych:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Styl:  "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "B³±d"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "B³±d LaTeXa"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Otwarty b³±d"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Przegl±daj|#P"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Nie formatuj|#N"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Za³aduj|#Z"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Nazwa pliku:|#P"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Zachowaj spacje|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Maszynopis|#V"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Wstaw|#i"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Do³±cz|#U"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456 src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769 src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Dokumenty"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Wybierz dokument podrzêdny"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Do³±cz"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Wstaw"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Wstaw maszynopis"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "S³. kluczowe:|#k"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Indeks"
+
+#: src/insetindex.C:120
+msgid "Idx"
+msgstr "Indeks"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Indeks"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Notka"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Zamknij|#C^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Lista algorytmów"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Lista rysunków"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Lista tabel"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Nadrzêdny:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Typ odwa³ania"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Id¼ do etykiety"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Zmieñ etykietê"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Numer strony"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Odwo³anie"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Strona: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Odw: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Spis tre¶ci"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "Url|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Nazwa|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Zamknij|#Z^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "typu HTML|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Wstaw URL"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtmlUrl: "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Url: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "inny..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Mapowanie Klawiatury"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   opcje: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Wy¶wiatlaj WSZYSTKIE znaki akcentowane|#w"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Aktualizuj|#Aa"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "Lyx nie mo¿e znale¼æ opisu swych ustawieñ!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Sprawd¼ czy plik \"textclass.lst\" jest"
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "zainstalowany prawid³owo. Niestety muszê wyj¶æ :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "Lyx nie mo¿e znale¼æ ¿adnego opisu swych ustawieñ!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Sprawd¼ zawarto¶æ pliku \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Niestety muszê zakoñczyæ pracê :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Separacja"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Wciêcie|#c"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Odstêp|#p"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Klasa:|#K"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Styl strony:|#S"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Font:|#F"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Rozmiar fontu:|#R"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Pozycja wstawki:|#L"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "Sterownik PS:|#n"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Kodowanie:|#D"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Jednostronnie|#J"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Dwustronnie|#w"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Strony"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Jedna|#e"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Dwie|#i"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Opcje dodatkowe:|#t"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Jêzyk:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Domy¶lny odstêp:|#o"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "G³êboko¶æ numer. rozdzia³ów"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "G³êboko¶æ spisu tre¶ci"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Interlinia:|#y"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Kszta³ty wyró¿nieñ|#z"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "U¿yj AMS Math|#M"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Rodzina:|#R"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Seria:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Kszta³t:|#K"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Rozmiar:|#z"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Inne:|#I"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Kolor:|#L"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Zastosuj dla wszystkich|#t"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Nieprze³±czalne"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Prze³±czalne"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Szer. etykiety:|#d"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Wciêcie"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Powy¿ej|#o"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Poni¿ej|#n"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Powy¿ej|#y"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Poni¿ej|#i"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Bez wciêcia|#B"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "W prawo|#p"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "W lewo|#l"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Wyrównane|#W"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Centrowane|#C"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Powy¿ej:|#j"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Poni¿ej:|#e"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Koniec strony"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Linie"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Justowanie"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Odstêpy w pionie"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Zaawans|#Z"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Utrzymaj|#U"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Utrzymaj|#t"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Typ:|#T"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Pojed.|#j"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Podwójny|#d"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Tekst"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Inny:|#I"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Marginesy"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Stopka/nag³ówek"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Orientacja"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "W pionie|#p"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "W poziomie|#z"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Rozmiar:|#R"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "W³asny rozmiar papieru"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "U¿yj pakiet Geometry|#U"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Szeroko¶æ|#S"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Wysoko¶æ|#W"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Górny:|#G"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Dolny:|#D"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Lewy:|#L"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Prawy:|#P"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Nag³ówek:|#N"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Odstêp nag³ówka:|#t"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Odstêp stopki:|#O"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Ramki"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "W górê|#g"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "W dó³|#d"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Lewy|#L"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Spec-komórka"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Multicolumn|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Do³±cz kolumnê|#±"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Usuñ kolumnê|#o"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Do³±cz wiersz|#i"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Usuñ wiersz|#w"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Usuñ tabelê|#U"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Kolumna"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Wiersz"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Ustal ramki|#s"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Usuñ ramki|#ñ"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "D³uga tabela"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Obróæ o 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "£amane linie|#n"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Spec-tabela"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "1szy nag³ówek"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Nag³ówek"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Stopka"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Ost. stopka"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Nowa strona"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Obróæ o 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Zaawans|#Z"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "W lewo|#e"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "W prawo|#r"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Centruj|#C"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Opcje dodatkowe"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Warto¶æ|#t"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "lub %|#l"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "¦rodek|#r"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "Wstaw HFill pomiêdzy akapity Minipage|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Rozpocznij nowy akapit Minipage|#n"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Wciêty akapit|#W"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minipage|#M"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Pakiet Floatflt|#F"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Spec. justowanie w Multicolumn"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Spec. justowanie kolumn"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Encapsulated Postscript (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "EPS w linii (*.eps, *.ps)|#i"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Typ"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Szeryfowy|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Bezszeryfowy|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Grotesk|#T"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Norma|#N"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr ""
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Aktualizuj|#A"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Aktualizuj|#A"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Wstaw odsy³acz|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Wstaw numer strony|#n"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Id¼ do odsy³acza|#o"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Zachowanie nieudane. Zmieniæ nazwê i spróbowaæ jeszcze raz?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Je¶li nie, dokument nie zostanie zachowany.)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Szablony"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Wprowad¼ nazwê pliku pod jak± dokument ma byæ zachowany"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555 src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684 src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Zaniechane."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "T± sam± nazwê ma juz dokument:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Zachowaæ i tak ?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Inny dokument z t± sam± nazwa jest otwarty!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Zast±piæ bie¿±cym dokumentem?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Zmieniono nazwê dokumentu na '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', ale nie zachowano..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Dokument juz istnieje:"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Zast±piæ plik?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Niestety, nie mo¿na tego wykonaæ gdy obrazki s± przetwarzane."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Proszê poczekaæ kilka sekund na zakoñczenie i spróbowaæ jeszcze raz"
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(lub zabiæ rêcznie procesy ghostscripta i spróbowaæ)."
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Nie mo¿na tego wykonaæ kiedy sprawdzanie jest uruchomione."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Najpierw zatrzymaj sprawdzanie."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Znaleziono jeden b³±d"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Powiniene¶ spróbowaæ go poprawiæ."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " b³êdów znaleziono."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Powiniene¶ spróbowac je poprawiæ."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "Wyst±pi³y b³êdy w trakcie przebiegu LaTeXa."
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Id¼ na koniec dokumentu"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "Ten dokument nie pozwala na wykonanie budowania"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "Wyst±pi³y b³êdy w trakcie budowania."
+
+#: src/lyx_cb.C:520
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex nie wspó³pracuje z dokumentami pochodnymi od SGML."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Brak ostrze¿eñ."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Znaleziono jedno ostrze¿enie."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "U¿yj 'Edycja->Id¼ do b³êdu' aby go znale¼æ."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " ostrze¿eñ znaleziono."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "U¿yj 'Edycja->Id¼ do b³êdu' aby je znale¼æ."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Przebieg Chktex zakoñczy³ siê pomy¶lnie"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Wydaje sie, ¿ê chktex nie dzia³a."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Wykonujê polecenie:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949 src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Plik ju¿ istnieje:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Chcesz nadpisaæ ten plik?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Zaniechane"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Plik LaTeXa zachowany jako"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Klas± dokumentu musi byæ linuxdoc."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Tworzê plik LinuxDoc SGML "
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "Plik LinuxDoc SGML zachowany jako"
+
+#: src/lyx_cb.C:912
+msgid "Document class must be docbook."
+msgstr "Klas± dokumentu musi byæ docbook."
+
+#: src/lyx_cb.C:929
+msgid "Building DocBook SGML file `"
+msgstr "Tworzenie pliku DocBook SGML "
+
+#: src/lyx_cb.C:934
+msgid "DocBook SGML file save as"
+msgstr "Plik DocBook SGML zachowany jako"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Plik ascii zachowany jako"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Autozapis bie¿±cego dokumentu..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Autozapis nieudany!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Plik do wstawienia"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "B³±d! Nie mozna otworzyæ podanego pliku:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Spis tre¶ci"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Wstaw odwo³anie"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Wstawianie przypisu..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Importujê plik LinuxDoc SGML `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Konwersja LinuxDoc SGML na plik TeX'a..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Konwersja LinuxDoc SGML na plik dvi..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Konwersja DocBook SGML na plik dvi..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Styl znaku"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "¦rodowisko akapitu"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Ustawienia dokumentu"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Cudzys³owy"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "Preambu³a LaTeXa"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Czy chcesz zachowaæ bie¿±ce ustawienia"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "dla znaków, dokumentu, papieru i cudzys³owów"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "jako domy¶lne dla nowwych dokumentów?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Otwórz/Zamknij..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Nie mo¿na ju¿ dalej cofn±æ"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "Powtarzanie nie zosta³o jeszcze zaimplementowane w trybie matematycznym"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Nie mo¿na ju¿ dalej powtarzaæ"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Czcionka: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", g³êboko¶c: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Wstaw notatkê na marginesie..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Typ ¶rodowiska akapitu skopiowany"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "¦rodowisko akapitu ustawione"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Znieniono g³êboko¶æ ¶rodowiska (w mo¿liwym zakresie, wiêc mo¿e nie)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Styl akapitu ustawiony"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Ustawiæ jakie¶ parametry"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "domy¶lne dla tej klasy dokumentów?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "B³±d konwersji!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Nie mo¿na przestawiæ na now± klasê dokumentu."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Wracam do oryginalnej klasy dokumentu."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Konwersja dokumentu do nowej klasy dokumentu..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Jeden akapit nie mo¿e byæ konwertowany"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " akapity nie mog± byæ konwertowane"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "w wybran± klasê dokumentu"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Styl dokumentu ustawiony"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Brak innych notek"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Typ cudzys³owów ustawiony"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "Preambu³a LaTeXa ustawiona"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Nie mo¿na wstawiæ tabeli do tabeli"
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Wstawianie tabeli..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tabela wstawiona"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "Nie mo¿na drukowaæ"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Sprawd¼ 'zakres stron'!"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Sprawd¼ 'ilo¶æ kopii'!"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "B³±d:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Nie mo¿na drukowaæ"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Sprawd¼, czy podano poprawne parametry"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Wstawianie rysunku..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Rysunek wstawiony"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Czcionki ekranowe ustawione"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "Opcje LaTeXa"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Uruchomione konfigurowanie..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Prze³adowanie konfiguracji..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "System zosta³ zrekonfigurowany."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Musisz zrestartowac LyXa by skorzystaæ"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "z wprowadzonych zmian w konfiguracji."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Nie znaleziono tej etykiety"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "w bie¿±cym dokumencie"
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Brak dokumentu ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Nie znaleziono etykiet w dokumencie ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr " Brak | Defskip | Smallskip | Medskip | Bigskip | VFill | Warto¶æ "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr " Bez zmian %l| Szeryfowy | Bezszeryfowy | Grotesk %l| Od¶wie¿ "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Bez zmian %l| Zwyk³y (jasny) | Pogrubiony %l| Od¶wie¿ "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr " Bez zmian %l| Prosty | Kursywa | Pochy³y | Kapitaliki %l| Od¶wie¿ "
+
+#: src/lyx_gui.C:421
+msgid " No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr " Bez zmian %l| Mikroskopijny | Najmniejszy | Mniejszy | Ma³y | Normalny | Du¿y | Wiêkszy | Najwiêkszy | Wielki | Ogromny %l| Zwiêksz | Zmiejsz %l| Od¶wie¿ "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr " Bez zmian %l| Kursywa | Podkre¶lenie | Kapitaliki | Polecenie LaTeXa %l| Od¶wie¿ "
+
+#: src/lyx_gui.C:427
+msgid " No change %l| No color | Black | White | Red | Green | Blue | Cyan | Magenta | Yellow %l| Reset "
+msgstr " Bez zmian %l| Bez koloru | Czarny | Bia³y | Czerwony | Zielony | Niebieski | Cyan | Fioletowy | ¯ó³ty %l| Od¶wie¿ "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Pojedyñczy | Pó³tora | Podwójny | Inny "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Smallskip | Medskip | Bigskip | Inny "
+
+#: src/lyx_gui.C:483
+msgid " Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | B4 | B5 "
+msgstr " Domy¶lny | W³asny | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid " None | A4 small Margins (only portrait) | A4 very small Margins (only portrait) | A4 very wide margins (only portrait) "
+msgstr "Brak|A4 ma³e marginesy (tylko pionowy)|A4 bardzo ma³e marginesy (tylko pionowy)|A4 szerokie marginesy (tylko pionowy)"
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``tekst'' | ''tekst'' | ,,tekst`` | ,,tekst'' | «tekst» | »tekst« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "Logo LyXa"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Zamknij"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397 src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Tak|Tt#y"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398 src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Nie|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Wyczy¶æ|#W"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Zmiany bêd± ignorowane"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Dokument jest tylko do odczytu:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Ostrze¿enie: nie mo¿na znale¼æ scie¿ki do binariów."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Je¶li masz problemy spróbuj uruchomic LyXa ze scie¿ka bezwzglêdn±."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "B³êdna warto¶æ zmiennej ¶rodowiska LYX_DIR_10x"
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "¦cie¿ka do katalogu systemowego: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Ostrze¿enie LyXa! Nie mo¿na okresliæ katalogu systemowego."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "U¿yj opcji '-sysdir' z linii komend lub"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "ustaw warto¶æ zmiennej ¶rodowiska LYX_DIR_10x na katalog systemowy LyXa"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "zawieraj±cy plik `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "U¿yto ustawieñ domy¶lnych "
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " ale spodziewaj siê problemów."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Spodziewaj siê problemów."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Nie posiadasz osobistego katalogu domowego LyXa."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Jest on wymagany do zapisania w³asnej konfiguracji LyXa."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Czy spróbowaæ wykonaæ to dla Ciebie (zalecane)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Uruchamianie bez osobistego katalogu LyXa."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Tworzenie katalogu "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " i konfigurowanie..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Nie powiod³o siê. U¿yjê "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr " zamiast."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Zakoñczone!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "Ostrze¿enie LyXa!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "B³±d w trakcie czytania "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "U¿ywam ustawieñ domy¶lnych."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Poziom odpluskwiania ustawiony na "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX"
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "U¿ycie: lyx [ opcje linii poleceñ ] [ nazwa.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Opcje linii poleceñ:"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           wywo³anie LyXa"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       katalog systemowy w x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x        ustawia szeroko¶æ okna g³ównego na x"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       ustawia wysoko¶æ okna g³ównego na y"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         pozycja x okna g³ównego"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         pozycja y okna g³ównego"
+
+#: src/lyx_main.C:481
+msgid "   -dbg n          where n is a sum of debugging options. Try -dbg 65535 -help"
+msgstr "   -dbg n          gdzie n jest opcj± odpluswiania. Spróbuj -dbg 65535 -help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        zamieñ kolory t³a i pierwszego planu"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           uruchamia LyXa w trybie czarno-bia³ym"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  u¿ywaj szybkiej procedury rysowania zaznaczeñ\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Sprawd¼ stronê manuala LyXa w celu znalezienia innych opcji."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Brak argumentu opcji -dbg!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Brak argumentu opcji -sysdir!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Faks nr:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Nazwa celu:|#N"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Instytucja:|#E"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Ksi±¿ka telefoniczna"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Wybie¿ z|#W"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Dodaj do|#D"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Skasuj z|#S"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Zachowaj|#Z"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Przeznaczenie:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Komenta¿:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Plik faksu: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201 src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Pusta ksi±¿ka telefoniczna"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Zachowaj (wymagane)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Nie mo¿na otworzyæ ksi±¿ki telefonicznej: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "BRAK LUB PUSTY PLIK LOGU!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr ""
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cPusta ksi±¿ka telefoniczna"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Ksi±¿ka telefoniczna"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Szeryfowy"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Bezszeryfowy"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Grotesk"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Symbol"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57 src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr ""
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57 src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignoruj"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Zwyk³y (jasny)"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Pogrubiony"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Prosty"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Kursywa"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Pochy³y"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Kapitaliki"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "mikroskopijny"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Najmniejszy"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Mniejszy"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Ma³y"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normalny"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Du¿y"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Wiêkszy"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Najwiêkszy"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Wielki"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Ogromny"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Zwiêksz"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Zmniejsz"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "mikroskopijny"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "najmniejszy"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "mniejszy"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "ma³y"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normalny"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "du¿y"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "wiekszy"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "najwiêkszy"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "wielki"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "ogromny"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "zwiêksz"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "zmniejsz"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr ""
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ignoruj"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Off"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr ""
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Prze³±cz"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "¯aden"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Czarny"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Bia³y"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Czerwony"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Zielony"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Niebieski"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Niebiesko-zielony (Cyan)"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Purpurowy (Magenta)"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "¯ó³ty"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226 src/menus.C:227
+msgid "Math"
+msgstr "Tryb matematyczny"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Wstaw"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Kursywa"
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Podkre¶lony "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Kapitaliki "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "LaTeX"
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Domy¶lny"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Nieznana sekwencja:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Nieznana akcja"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Plecenie nie dostêpne bez otwartego dokumentu"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Dokument tylko do odczytu"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Tryb tekstowy"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Nieznany typ eksportu: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Nieznany typ importu: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Ustawienia "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " nieznane"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Brak odsy³acza do prze³±czenia"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr ""
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr ""
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr ""
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr ""
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr ""
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "U¿ycie: toolbar-add-to <polecenie LyXa>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Oczekiwany argument"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Mo¿esz to zrobiæ tylko w trybie matematycznym!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Otwieram dokument potomny "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Nieznany rodzaj przypisu"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Dokument tylko do odczytu"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Wprowad¼ nazwê nowego dokumentu"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "nowyplik"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Czy chcesz zamkn±c ten dokument?\n"
+"('Nie' prze³±czy do otwartej wersji)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Czy chcesz otworzyæ dokument?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Otwieranie dokumentu"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "otwarty."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Wybierz szablon"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Przyk³ady"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Wybierz dokument do otwarcia"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Nie mo¿na otworzyæ dokumentu"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Wybierz plik ASCII do importu"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Dokument o nazwie"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "ju¿ istnieje. Nadpisaæ?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Importujê plik ASCII"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "Plik ASCII "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "zaimportowany."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Wybierz plik Noweb do importu"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Wybierz plik LaTeXa do importu"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Importujê plik LaTeXa"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Importujê plik Noweb"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Plik Noweb"
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "Plik LaTeXa "
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "Nie mo¿na importowaæ tego pliku Noweb"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Nie mo¿na importowaæ tego pliku LaTeXa"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Wybie¿ dokument do wstawienia"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Wstawiam dokumentu"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "wstawiony."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Nie mo¿na wstawiæ dokumentu"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Otwarta wstawka"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "nieznany"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Zachowaæ dokument i kontynuowaæ?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "Kontrola wersji: opis wersji"
+
+#: src/lyxvc.C:184
+msgid "(no initial description)"
+msgstr "(brak opisu)"
+
+#: src/lyxvc.C:187
+msgid "Info"
+msgstr ""
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr "Ten dokument NIE zosta³ zarejestrowany."
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "Kontrola wersji: opis bie¿±cej wersji"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Zignorowaæ zmiany i odblokowaæ do edycji?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Je¶li wrócisz to stracisz wszystkie zmiany wykonane"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "na dokumencie od ostatniego zablokowania."
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Czy nadal chcesz to wykonaæ?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "Brak historii kontroli wersji!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "Historia kontroli wersji"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Zamknij "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funkcje"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Greka"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr ""
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr ""
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr ""
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr ""
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Inne"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "OK  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Kolumny"
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Pionowe dosuniêcie|#i"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Poziome dosuniêcie|#P"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "OK "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Cienki|#C"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "¦redni|#r"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Gruby|#G"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Ujemny|#n"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr ""
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr ""
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Znak rozdzielaj±cy"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Dekoracja"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Odstêp"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Macierz"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Do góry | Centruj | Do do³u"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Panel symboli matematycznych"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170 src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Plik"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Edycja"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Ustawienia"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Wstaw"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268 src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Pomoc"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr ""
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr ""
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr ""
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr ""
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr ""
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr ""
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr ""
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr ""
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Czcionki ekranowe"
+
+#: src/menus.C:408
+msgid "Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as Paragraphs%x32|Noweb%x33"
+msgstr "Importuj%t|LaTeX...%x30|Tekst jako linie...%x31|Tekst jako akapity...%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:425
+msgid "Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii Text...%x43|Custom...%x44"
+msgstr "Eksportuj%t|jako LaTeX...%x40|jako DVI...%x41|jako PostScript...%x42|jako Tekst...%x43|W³asny...%x44"
+
+#: src/menus.C:433
+msgid "Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii Text...%x43"
+msgstr "Eksportuj%t|LinuxDoc...%x40|DVI...%x41|PostScript...%x42|Tekst...%x43"
+
+#: src/menus.C:440
+msgid "Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii Text...%x43"
+msgstr "Eksportuj%t|DocBook...%x40|DVI...%x41|PostScript...%x42|Tekst...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr ""
+
+#: src/menus.C:453
+msgid "New...|New from template...|Open...%l|Close|Save|Save As...|Revert to saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build program%l|Print...|Fax..."
+msgstr "Nowy...|Nowy z szablonu...|Otwórz...%l|Zamknij|Zachowaj|Zachowaj jako...|Wróæ do zachowanego%l|Podgl±d dvi|Podgl±d PostScriptu|Aktualizuj dvi|Aktualizuj PostScript|Buduj program%l|Drukuj...|Faks..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr ""
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr ""
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr ""
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importuj%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Eksportuj%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Wyj¶cie%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:638
+msgid "Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as Paragraphs...%x17|Noweb...%x18"
+msgstr "Importuj%t|LaTeX...%x15|Tekst jako linie...%x16|Tekst jako akapity...%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Nowy...|Nowy z szablonu...|Otwórz...%l|Importuj%m%l|Koniec%l"
+
+#: src/menus.C:747
+msgid "Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin Notes%x23|Close All Footnotes/Margin Notes%x24|Open All Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr "Wstawki%t|Otwórz / Zamknij%x21|Rozbij%x22|Otwórz wszystkie przypisy na marginesach / w stopkach%x23|Zamknij wszystkie przypisy na marginesach / w stopkach%x24|Otwórz wszystkie rysunki / tabelki%x25|Zamknij wszystkie rysunki / tabelki%x26%l|Usuñ wszystkie znaczniki b³êdów%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabela%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Multicolumn%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Multicolumn%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|Mm#m#M"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Linia z góry%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Linia z góry%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Linia pod spodem%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Linia pod spodem%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Linia z lewej%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Linia z lewej%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Linia z prawej%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Linia z prawej%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Justuj w lewo%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Justuj w lewo%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr ""
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Justuj w prawo%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Justuj w prawo%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr ""
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Wycentruj%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Wycentruj%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Do³±cz wiersz%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|oO#o#O"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Do³±cz kolumnê%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|uU#u#U"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Usuñ wiersz%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|wW#w#W"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Usuñ kolumnê%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Usuñ tabelê%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|Dd#d#D"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Wstaw tabelê%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|Ii#i#I"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Kontrola wersji%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Rejestruj%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Nanie¶ zmiany i zablokuj%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Odblokuj i edytuj%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Nanie¶ zmiany i zablokuj%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Odblokuj i edytuj%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Wróæ do ostatniej wersji%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Usuñ ostatnio naniesione zmiany%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Poka¿ historiê%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Rejestruj%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Rr#r#R"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|Ii#i#I"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|Oo#o#O"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|lL#l#l"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|Uu#u#U"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|Hh#h#H"
+
+#: src/menus.C:911
+msgid "Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr "Cofnij|Powtórz %l|Wytnij|Kopiuj|Wklej%l|Znajd¼ i zamieñ...|Id¼ do b³êdu|Id¼ do Notki|Wstawki%m|Tabele%m|Pisownia....|Check TeX|Spis tre¶ci...%l|Kontrola wersji%m%l|Komunikaty LateXa%l|Wklej nadrzêdne zaznaczenie jako linie|Wklej nadrzêdne zaznaczenie jako akapity"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr ""
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr ""
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1071
+msgid "Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr "Czcionki...|Akapity...|Dokumenty...|Papier...|Tabele...|Cudzys³owy...%l|Kursywa%b|Kapitaliki%b|Pogrubienie%b|Polecenie TeXa%b|Zmieñ g³êboko¶æ ¶rodowiska|Preambu³a LaTeXa...%l|Zachowaj ustawienia jako domy¶lne"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr ""
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr ""
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr ""
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr ""
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr ""
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Importuj plik tekstowy%t|Jako linie %x41|Jako akapity%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1173
+msgid "Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr "Listy i spisy%t|Spis tre¶ci%x21|Spis rysunków%x22|Spis tabel%x23|Spis algorytmów%x24|Indeks%x25|Cytowania literaturowe (BibTeX)%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1197
+msgid "Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table Float%l%x74|Algorithm Float%x75"
+msgstr "Wstawki%t|Rysunek%x71|Tabelka%x72|Szeroki rysunek%x73|Szeroka tabelka%l%x74|Algorytm%x75"
+
+#. }
+#: src/menus.C:1204
+msgid "IMF|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr ""
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1211
+msgid "Special Character%t|HFill%x31|Hyphenation Point%x32|Protected Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr "Znaki specjalne%t|HFill%x31|Punkt dzielenia wyrazu%x32|Twarda spacja%x33|Z³amanie linii%x34|Wielokropek (...)%x35|Kropka koñcz±ca zdanie%x36|Zwyk³y cudzys³ów (\")%x37|Menu Separator %x38"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr ""
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1231
+msgid "Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special Character%m%l|Note...|Label...|Cross-Reference...|Citation Reference...|Index entry...|Index entry of last word"
+msgstr "Rysunek...|Tabelkê...%l|Wstaw plik...|Importuj plik tekstowy%m|Wstaw plik LyXa...%l|Przypis|Notatka marginesowa|Wstawki%m%l|Listy i spisy%m%l|Znaki specjalne%m%l|Notka...|Etykieta...|Odno¶nik wewnêtrzny...|Cytowanie...|S³owo do indeksu...|To s³owo do indeksu"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr ""
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr ""
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr ""
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr ""
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr ""
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:1388
+msgid "Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math Panel..."
+msgstr "U³amek|Pierwiastek kwadratowy|Eksponent|Indeks|Suma|Ca³ka%l|Tryb matematyczny|Tryb Display%l|Panel..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr ""
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1472
+msgid "Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr "Czcionki ekranowe...|Sprawdzanie pisowni...|Klawiatura...|LaTeX...%l|Rekonfiguruj"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr ""
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:1551
+msgid "Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference Manual|Known Bugs|LaTeX Configuration%l|Copyright and Warranty...|Credits...|Version..."
+msgstr "Wprowadzenie|Samouczek|Podrêcznik U¿ytkownika|Zaawansowane mo¿liwo¶ci|Konfiguracja|Podrêcznik Programisty|Znane b³êdy|Konfiguracja LaTeXa%l|Prawa i zastrze¿enia...|Autorzy...|Wersja..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr ""
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr ""
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr ""
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr ""
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr ""
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr ""
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr ""
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr ""
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "Wersja LyXa "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " z "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Katalog bibliotek: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Katalog u¿ytkownika: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Otwieranie pliku pomocy"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Wykonujê:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Brak otwartych dokumentów *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Witaj w LyXie!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Bez sensu w tej konfiguracji!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "B³±d: Nie mo¿na przej¶æ do katalogu: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "B³±d wewnêtrzny LyXa:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr ""
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Drukuj"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Na drukarkê|#d"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Do pliku|#p"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Wszystkie strony|#W"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Nieparzyste|#N"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Parzyste|#P"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Normalna|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Odwrotna|#o"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Kolejno¶æ"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Strona: "
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Kopiuj"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Komenta¿:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Usuñ ramki|#ñ"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Typ pkiku"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Polecenie:|#P"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "Postscript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#s"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "U¿yj s³ownika jêzyka dokumnentu|#d"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "U¿yj s³ownika innego jêzyka:|#U"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Akceptuj s³owa z ³±cznikiem|#t"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Opcja kodowania dla ispella|#i"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "U¿yj alternatywnego osobistego s³ownika:|#a"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Znaki specjalne akceptowane w s³owach:|#s"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "S³ownik"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Zamieñ"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr "Podobne"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Opcje...|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Rozpocznij sprawdzanie|#s"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Dodaj do osobistego s³ownika|#D"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignoruj s³owo|#I"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Akceptuj s³owo na czas tej sesji|#A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Zatrzymaj sprawdzanie pisowni|#t"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Zamknij|#^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Zamieñ s³owo|#Z"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Opcje"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Sprawd¼ pisowniê"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Sprawdzanie pisowni zakoñczy³o sie z nieznanego powodu.\n"
+"Jednym z powodów mo¿e byæ brak s³ownika dla jêzyka tego dokumentu.\n"
+"Sprawd¼ katalog \"/usr/lib/ispell\" lub u¿yj innego s³ownika\n"
+"w menu \"Opcje\"."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " s³ów sprawdzono."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " s³owo sprawdzono."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Sprawdzanie pisowni zakoñczone!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Nie mo¿na odszukaæ procesu ispell-a.\n"
+"Prawdopodobnie zosta³ zabity."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Trybu Multicolumn mo¿na u¿ywaæ tylko w poziomie."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr "Nie mo¿na wstawiæ dwu spacji w ten sposób. Przeczytaj, proszê, Samouczek."
+
+#: src/text.C:2308
+msgid "You cannot insert a space at the beginning of a paragraph.  Please read the Tutorial."
+msgstr "Nie mo¿na wstawiæ spacji na pocz±tku akapitu. Przeczytaj, proszê, Samouczek."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975 src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043 src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Operacja niemo¿liwa"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Nie mo¿na umie¶ciæ wstawki w innej wstawce!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Nie mo¿na wstawiaæ notki marginesowej w Minipage!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Nie mo¿na wyci±æ tabeli."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Wstawka móg³aby zawieraæ inn± wstawkê!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Otwarta wstawka"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Zamkniêta wstawka"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Nic do zrobienia"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid "No font change defined. Use Character under the Layout menu to define font change."
+msgstr "Operacja zmiany fontu nie jest zdefiniowana. Podaj j± w menu Ustawienia/Czcionki."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Nie wiem co zrobiæ z po³ow± wstawki."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "przykro mi."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Nie wiem co zrobiæ z po³ow± tabelki."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Nie mo¿na wkleiæ wstawki w inn± wstawkê!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Komórka nie mo¿e zawieraæ wiêcej ni¿ jedego akapitu!"
+
+#~ msgid "Index: "
+#~ msgstr "Indeks: "
diff --git a/po/pt.po b/po/pt.po
new file mode 100644 (file)
index 0000000..807106a
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,4867 @@
+# LyX em Português.
+# Copyright (C) 1999 Free Software Foundation, Inc.
+# Pedro Kröger <kroger@e-net.com.br>, 1999.
+#
+# Versão 0.3 <não-revisada>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Lyx 1.0.0-1\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 17:05+02:00\n"
+"Last-Translator: Pedro Kröger <Kroger@e-net.com.br>\n"
+"Language-Team: Portuguese <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Formatando o documento..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Não existem mais erros"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "Aviso ChkTeX #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Carregando a fonte no Servidor X"
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Executar #"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "Número de execução LaTex "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Executando MakeIndex"
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Executando BibTeX"
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "O ARQUIVO DE REGISTRO DO LATEX NÃO EXISTE!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "Construir registro do programa"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "Arquivo de registro do LaTex"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Descrever o comando"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Seleciona o caractere anterior"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Inserir bibtex"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Auto salvamento"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Ir para o começo do documento"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Selecionar até o começo do documento"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Fechar"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Ir para o final do documento"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Selecionar até o final do documento"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Fax"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Novo documento"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Novo documento do modelo"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Abrir"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Alternar para o documento anterior"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Imprimir"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Reverter para o documento salvo"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Atualizar DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Atualizar PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Ver DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Ver PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "Construir programa"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Checar TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Salvar"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Salvar Como"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Ir um caractere para trás"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Ir um caractere para frente"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Inserir uma citação"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Executar um comando"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Copiar"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Cortar"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Decrementar nível de formatação"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Incrementar nível de formatação"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Mudar nível de formatação"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Mudar opções de marca de numeração"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Ir para baixo"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Selecionar a próxima linha"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Escolher a formatação de  parágrafo"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Ir para o próximo erro"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Inserir Figura"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Localizar e Substituir"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Cursor de alternar segue/não segue a scrollbar"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Alternar para negrito"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Alternar para código"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Estilo de fonte padrão"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Alternar para enfatizado"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Alternar para estilo definido pelo usuário"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Alternar para Caixa Alta"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Alternar para fonte romana"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Alternar para fonte sem serifa"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Definir o tamanho da fonte"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Mostar o estado da fonte"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Alternar sublinhado"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Inserir nota de rodapé"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Selecionar o próximo caractere"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Inserir preenchemento horizontal"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Inserir ponto de hifenização"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Inserir pontos ..."
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Inserir o ponto final "
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Desligar o mapa de teclado"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Usar o mapa de teclado primário"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Usar o mapa de teclado secundário"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Alternar mapa de teclado"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Inserir etiqueta"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Copiar tipo de ambiente de parágrafo"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Colar tipo de ambiente de parágrafo"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Especificar o tamanho e as margens do papel"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Ir para o começo da linha"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Selecionar até o começo da linha"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Ir até o final da linha"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Selecionar até o final da linha"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Sair"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Inserir nota na Margem"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Símbolos matemáticos gregos"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Modo matemático"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Ir um parágrafo abaixo"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Selecionar o próximo parágrafo"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Ir um parágrafo acima"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Selecionar o parágrafo anterior"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Colar"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Inserir espaço protegido"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Inserir citação"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Reconfigurar"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Refazer"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Inserir referência cruzada"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Inserir Tabela"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "Alternar estilo do TeX"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Desfazer"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Derreter"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Importar documento"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Remover todas as caixas de erro"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Inserir o menu separador"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Nenhuma descrição disponível"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Enviar Documento para Comando"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Modificado)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (somente leitura)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr ""
+"Esse documento é somente para leitura. Nenhuma mudança de layout será "
+"permitida"
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Formato da página"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Definir formato da página"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Advertência: tamanho inválido (exemplo válido: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Formatação extra de Parágrafo"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Definir formatação extra de parágrafo"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Advertência: percentagem inválida (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Formulário extra de Tabela"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Formatação da tabela"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Advertêcia: posição errada do cursor, janela atualizada"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Confirme: pressione o botão apagar tabela novamente"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Erro!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Não posso abrir o arquivo especificado"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Erro ao carregar Classe de Texto (Textclass)"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Não posso carregar classe de texto (textclass)"
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- substituindo o padrão"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Advertência: Ignorando inserir prévio"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr ""
+"Advertência: o formato lyxformat %.2f é requerido mas foi achado o %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "ERRO: o formato lyxformat %.2f é requerido mas foi achado o %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Advertência!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "A leitura do documento não está completa"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Talvez o documento esteja truncado"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "ERRO!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "Formato de Lyx antigo. Use o LyX 0.10x para lê-lo"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Este não é um arquivo do LyX"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Não foi possível ler o arquivo"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Erro! O documento é apenas para leitura"
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Erro! Não posso escrever no arquivo: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Erro! Não posso fechar corretamente o arquivo"
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Erro: Não posso escrever no arquivo"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Erro: Não posso abrir o arquivo temporário"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Erro! Não posso fechar corretamente o arquivo"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "ERRO_DO_LYX:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Não posso escrever no arquivo"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Erro: Nível errado para o comando LatexType.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "Executando LaTeX"
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX não funcionou"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Falta o arquivo de registro"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Feito"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Executano Literário"
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "Comando literário não funciona"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Contruindo programa..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "Contrução não funciona!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Executando chktex"
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktext não funcionou"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Não posso executar com o arquivo"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Não posso abrir o arquivo temporário:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Erro! Não posso abrir o arquvo temporário:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Erro na execução do comando *roff na tabela"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Operacão impossível"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Não posso inserir tablela/lista na tabela"
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Sinto muito."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Ocorreram mudanças no documento:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Salvar o documento?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Alguns documentos não foram salvos:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Tem certeza que quer sair?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Salvando o documento"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Documento salvo como"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Impossivel apagar arquivo de auto-recuperação"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Impossível salvar"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Não existem documentos abertos!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "Lyx: Tentando salvar o documento"
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr "como..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "   Aparentemente salvo"
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "Erro ao salvar! Tentando..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "   Erro ao salvar! Lástima, o documento está perdido."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Existe uma cópia de emergência deste documento!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Tentar carrega-la no lugar"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Arquivo de auto-recuperação é mais novo."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Caregar este no lugar?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Não foi possível abrir o modelo"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Impossível converter o arquivo"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "O arquivo já está aberto"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Você gostaria de recarregar este documento?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Arquivo"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' é somente para leitura."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Criar novo documento com este nome?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Tamanho|#m"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Aplicar|#A"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Cancelar|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Nível"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Padrão|#D"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matem.|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Vários 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Vários 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Vários 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Vários 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Desculpe, sua libXpm é muito antiga"
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Esse recurso requer a biblioteca xpm-4.7 (a.k.a 3.4g) ou mais novo"
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Tentando executar LyX no modo monocromático"
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" padrão | fino | script | rodapé | pequeno | normal | largo | Largo | LARGO "
+"| grande | Grande"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Itemizar a seção de marcadores"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "ERRO: LyX  não está capaz para ler o arquvo CREDITS"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Por favor instale corretamente para estimar o maior"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "Muito trabalho tem sido feito por outras pessoas para o projeto LyX"
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Créditos"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Direitos autorais e Garantia"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Todas essas pessoas tem contribuido para o projeto LyX. Obrigado."
+
+#: src/credits_form.C:50
+#, fuzzy
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"Matthias Ettrich tem os Direitos Autorais (C) 1995 de LyX,\n"
+"1995-1999 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Esse programa é livre; você pode redistribuí-lo e/ou modificá-lo\n"
+" sobre os termos da Licença Pública Geral (GNU) como publicado pelo\n"
+" Free Software Foundation; tanto a versão 2 da licença,\n"
+"ou, opcionalmente, qualquer versão posterior."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX é distribuído na esperança que ele será útil\n"
+"mas SEM NENHUMA GARANTIA; nem mesmo a garantia\n"
+"implicada pela COMERCIALIZAÇÃO ou ESTAR APTO PARA\n"
+"ALGUM PROPÓSITO PARTICULAR. Ver a Licença Pública Geral  (GNU)\n"
+"para maiores detalhes.\n"
+"Você deve ter recebido uma cópia da Licença Pública Geral (GNU)\n"
+"junto com este programa; se não, escreva para:\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[erro de interpretação]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[interpretando...]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[nenhum arquivo]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[nada mostrado]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[não há ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[erro desconhecido]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Figura"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "o caminho (path) da figura está vazio"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Figuras"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Documento"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "Figura EPS"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "O nome do arquivo não pode conter nenhum desses caracteres:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "espaço, '#', '~', '$' ou '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Aviso! Não posso abrir o diretório"
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "Errp interno no LyX!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Não posso verificar se é possivel escrever no diretório "
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Não posso abrir o arquivo de teste do diretório"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "O arquivo de teste foi criado mas não posso removê-lo?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Erro! Não posso abrir o diretório:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Erro: impossível remover o arquivo:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Erro! Impossível criar diretório temporário"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Erro! Impossível apagar diretório temporário:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Erro interno!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Chamada a createDirectory com nome inválido"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Erro! Impossível criar diretório:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr ""
+"Definir conjunto\n"
+"de caracteres"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Charset não foi encontrado"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Erro:\n"
+"\n"
+"Mapa de teclado\n"
+"não encontrado"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Conjunto de caracteres:|#C"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Outro...|#O"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Outro...|#T"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Linguagem"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Mapeamento"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Mapa de teclado Primário|#P"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Nenhum mapa de teclado|#N"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Mapa Secundário|#S"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Secundário"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Primário"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "Arquivo EPS|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr ""
+"Visualizar em\n"
+"tela cheia|#v"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Navegar...|#B"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Mostrar Moldura|#M"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Fazer Traduções|#r"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Opções"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Ângulo"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr ""
+"% da\n"
+"Página|g"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Padrão|#d"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "polegadas|#g"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Mostrar"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Altura"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Largura"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Rotação"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Colorido|#C"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Não mostrar essa figura|#m"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Preto e branco|P"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Monocromático|M"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Padrão|#P"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#c"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "polegadas|#p"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% da Página|#P"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% da Coluna|#o"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Legenda|#L"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Subfigura|#q"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Diretório:|#D"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Padrão:|#P"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Nome:|#N"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Reler|R#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Home|#H#h"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Usuário1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Usuário2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Colunas"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Linhas"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Procurar|#r"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Substituir com|#S"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Substituir|#R#r"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Fechar|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr ""
+"Minúsc. e maiúsc.\n"
+"importam"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Palavra inteira|#M#m"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Substituir Tudo|#T#t"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Modo matemático grego ativado"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Teclado em modo matemático grego ativado"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Teclado em moo matemático grego desativado"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "Mode TeX"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Nenhum número"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Número"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Digite uma nova etiqueta para inserir"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "modo de texto matemático"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Ação inválida no modo matemático"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Modo editor matemático"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Macro: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Chave: "
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Observação:|#R"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Chave:|#C"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Etiqueta:|#E"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Citação"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Item bibliográfico"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Referências geradas por BibTeX"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr ""
+"Banco de\n"
+"Dados"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Estilo"
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Erro"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "Erro do LaTeX"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Erro Aberto"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Navegar|#N"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Sem typeset|#S"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Carregar|#C"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Nome do Arquivo: |#N"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Espaços visíveis|#p"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Palavra por palavra|#P"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Usar entrada|#e"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Usar inclusão|#i"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Documentos"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Selecionar o Documento Filho"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Incluir"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Entrada"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Entrada palavra por palavra"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Palavra chave:|#c"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Índice"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Índice"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Improir Índice"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Nota"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Fechar|#F^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Lista dos Algorítimos"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Lista das Figuras"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Lista das Tabelas"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Pai:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Tipo de referência"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Ir para etiqueta"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Mudar etiqueta"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Número de página"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Referência"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Página: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Ref: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Índice"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "Url|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Nome|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Fechar|#F^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "Tipo HTML|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Iserir Url"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtmlUrl"
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Url: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "outro..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Mapas de teclado"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   opções: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Permitir acentos em TODOS os caracteres|p"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Atualizar|#Aa"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX não foi capaz de localizar as descrições de layout"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Verifique que o arquivo \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "esteja instalado corretamente. Desculpe, tenho que sair ;-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX não foi capaz de localizar nenhuma descrição de layout"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Verifique o conteúdo do arquivo \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Desculpe, tenho que sair ;-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Separação"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Indentar|#I"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Entre parágrafo|#P"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Classe:|#C"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Estilo de Página:|#P"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Fontes:|#F"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Tamanho da fonte:|#O"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Lugar do Flutuante:|#L"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "Controlador de PS:|#S"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Codificação:|#C"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Um|#u"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Dois|#D"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "lados"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Uma|#U"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Duas|#D"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Opções Extra:|#X"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Linguagem:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Entre Parágrafos:|#P"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Níveis do número de seção"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Níveis do Índice"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Espaçamento|#g"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Marcadores|#M"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr ""
+"Usar padrão matem.\n"
+"da AMS|#M"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Família:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Series:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Desenho:|#H"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Tamanho:|T"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Misc:|#M"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Cor:|#C"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Alternar em todos esses|#T"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Esses nunca alternam"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Esses sempre alternam"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr ""
+"Largura da\n"
+"Etiqueta|#E"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Identar"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Acima|#c"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Abaixo|#b"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Acima|#i"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Abaixo:|#a"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Sem identação|#i"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Direita|#D"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Esquerda|#E"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Bloco|#c"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Centro|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Acima:|#m"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Abaixo:|#o"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Quebra de Pág."
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Linhas"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Alinhamento"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Espaços Verticais"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Mais Opções|#X"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Manter|#M"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Manter|#p"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Tipo:|#T"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Simples|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Duplo|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Texto"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Especial:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Margens"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Margens Cabeçalho/Rod."
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Orientação"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Retrato|#o"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Paisagem|#P"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Tamanho|#T"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Definir medida do papel"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Usar pacote de geometria|#U"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Largura:|L"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Altura:|#A"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Topo:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Em baixo:|B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Esquerda:|#E"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Direita:|#R"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Altura:|#i"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Separação:|#S"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Entre rodapés"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Bordas"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Acima|T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Abaixo|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Esq.|#E"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Célula Especial"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Várias colunas|#V"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Inserir Coluna|#J"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Apagar Coluna|#A"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Inserir Linhas|#L"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Apagar linha|#l"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Apagar Tabela|p"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Coluna"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Linha"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Pôr Bordas|#P"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Tirar Bordas|#T"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Tabela longa"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Rotar 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr ""
+"Quebra de\n"
+"linha|#Q"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Spec. da Tabela"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr ""
+"Primeiro\n"
+"cabeçalho"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Cabeçalho"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Rodapé"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr ""
+"Último\n"
+"Rodapé"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Nova Página"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Rotar 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Extra|#X"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Esquerda|#E"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Direitra|#D"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Centro|#C"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Opções Extra"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Taman.|#T"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "ou %|#o"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Meio|#d"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "Preenchimnto horizontal entre parágrafos de Minipágina|#P"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Iniciar uma nova Minipágina"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Parágrafos identados|#i"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minipágina|#M"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Flutuanteflt|#F"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Alin. especial de multi-colunas"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Alin. especial de coluna"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Postscript Encapsulado (*eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Inlined EPS (*eps, *.ps)|#I"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Tipo"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Fonte Roman|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Fonte Sem Serifa|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Fonte-fixa|#x"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Fonte Norma|#N"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Zoom de Fonte|#Z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Atualizar|Aa#a"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Atualizar|#A"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Inserir Referência|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Inserir Número de Página|#P"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Ir para Referência|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Salvar falhou. Renomear e tentar novamente ?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(se não o documento não será salvo.)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Modelos"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Digite o Nome do Arquivo para Salvar Documento como"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Cancelado."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Já existe um documento com o mesmo nome:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Salvar, de qualquer modo?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Outro documento com o mesmo nome aberto!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Substituir com o documento corrente?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Documento renomeado para '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', mas não salvo..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Documento já existe:"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Substituir arquivo?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr ""
+"Desculpe, não posso fazer isso enquanto as figuras estão sendo interpretadas"
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr ""
+"Por favor, espere alguns segundos para isso terminar e tente novamente."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(ou cancele o processo do gs 'na mão' e tente novamente.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Não posso fazer isso enquando o corretor ortográfico está executando"
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Pare o corretor ortográfico primeiro."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Um erro foi detectado."
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Voce deve tentar fixar isto."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " erros detectados."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Voce deve tentar fixar-los."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "Ocorreram erros durante a execução do LaTeX."
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Tipo de documento errado"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "A operação de contrução não é permitida nesse documento"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "Ocorreram erros durante o processo de Construção."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex não funciona com LinuxDoc."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Nenhuns avisos foram encontrados."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Um aviso foi encontrado."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Use 'Editar ->Ir para Erro' para encontrá-lo."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " avisos encontrados."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Use 'Editar ->Ir para Erro' para encontrá-lo."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex foi executado com êxito"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Isso significa que chktex não funcionou."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Executando o comando:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Arquivo já existe:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Você gostaria de sobescrever o arquivo?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Cancelado"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "O arquivo LaTeX foi (bem) salvo como"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "A classe de documento deve ser linuxdoc"
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Construindo arquivo do tipo LinuxDoc SGML"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "Arquivo LinuxDoc SGML salvo como"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "A classe de documento deve ser linuxdoc"
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Construindo arquivo do tipo LinuxDoc SGML"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "Arquivo LinuxDoc SGML salvo como"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Arquivo Ascii salvo como"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Salvamento automático do documento corrente..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Salvamento automático falhou!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Arquivo para inserir"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Erro! Não posso abrir o arquivo especificado:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Índice"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Inserir Referências"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Inserindo notas de rodapé..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Importando arquivo LinuxDoc SGML"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Convertendo arquivo do tipo LinuxDoc SGML para TeX"
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Convertendo arquivo do tipo LinuxDoc SGML para dvi"
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Convertendo arquivo do tipo LinuxDoc SGML para dvi"
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Estilo de Caractere"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Formatação do Parágrafo"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Formatação do Documento"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Citações"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "Preâmbulo do LaTeX"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Você deseja salvar as definições atuais"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "para Caractere, Documento, Artigo e Notas"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "como padrão para novos documentos?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Abrir/Fechar..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Não há infomação ulterior de undo"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "Refazer não é ainda suportando no modo matemático"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Não há informação ulterior de refazer"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Fonte: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ". Nível: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Inserindo nota na margem..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Formatação do parágrafo copiada"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Formatação do parágrafo definida"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr ""
+"A formatação de níveis foi modificada (em um âmbito possivel, talvez não)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Formatação de parágrafo definida"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Devo definir alguns parâmetros para"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "os padrãos dessa classe de documento?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Erros na conversão!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Não é possível alternal para uma nova classe de documento"
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Revertendo para a classe de documento original."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Convertendo o documento para a nova classe de documento..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Um parágrafo não pode ser convertido"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " parágrafos não puderam ser convertido"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "nas classes de documento escolhidas"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Formatação do documento definida"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Não existem mais notas"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Tipo de citações definido"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "Preâmbulo do LaTeX definido"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Não posso inserir uma tabela em uma tabela."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Inserindo tabela..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tabela inserida"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "ERRO! Não foi possível imprimir!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Verificar 'âmbito de páginas'|"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Verificar 'número de cópias'|"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Erro:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Não foi possível imprimir"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Verifique se seus parâmetros estão corretos"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Inserindo a figura..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Figura inserida"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Opções de tela definidas"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "Opções do LaTeX"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Executando o arquivo de configuração..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Recarregando a configuração.."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "O sistema foi reconfigurado."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Você precisará reiniciar LyX para fazer uso de qualquer"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "especificações de classe de documentos atualizada."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Não pude achar essa etiqueta"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "no documento corrente."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Não há Documento***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "***Não foram encontradas etiquetas no documento***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr " Nenhum | Defskip | Pequeno | Médio | Grande | VFill | Comprimento "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr " Nenhuma mudança %l| Romana | Sem Serifa | Fonte-fixa %l| Redefinir "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Nenhuma mudança %l| Médio | Negrito %l| Redefinir "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr ""
+" Nenhuma mudança %l| Vertical | Itálico | Inclinado | Caixa Baixa %l| "
+"Redefinir "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Nenhuma mudança %l| Fino | Bem Menor | Menor | Pequeno | Normal | Largo | "
+"Mais Largo | Largest | Grande | Bem Grande %l| Incrementar | Decrementar | "
+"Redefinir "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+" Nenhuma Mudança %l| Enfatizado | Sublinhado | Caixa Alta | Modo LaTeX %l| "
+"Redefinir "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+" Nenhuma mudança %l| Sem cor | Preto | Branco | Vermelho | Verde | Azul | "
+"Verde Escuro | Rosa | Amarelo %l| Redefinir "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Simples | Metade | Duplo | Outro "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Pequeno | Médio | Grande | Comprimento "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Padrão | Definido | Carta EUA | Legal EUA | Executivo EUA | A3 | A4 | A5 | "
+"B3 | B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" Nenhum | A4 Margens pequenas | A4 Margens menores | A4 Margens amplas "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``texto'' | ''texto'' | ,,texto`` | ,,texto'' | «texto» | »texto« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "Banner do LyX"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Fechar"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Sim|Ss#s"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Não|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Limpar|#e"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Quaisquer mudanças serão ignoradas"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "O documento é apenas para leitura"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Aviso: não posso determinar o caminho (path) do binário"
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Se tens problemas, tente iniciar o LyX com um caminho (path) absoluto"
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "A variável de ambiente LYX_DIR_10x não é boa."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Diretório base definido para: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Aviso: Não posso determinar o diretório base"
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Tente o parâmetro de linha de comando '-sysdir' ou"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr ""
+"definir a variável de ambiente LYX_DIR_10x para o diretório base do LyX"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "contendo o arquivo 'chkconfig.ltx."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Usando o padrão built-in"
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " mas problemas são esperados"
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Problemas esperados."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Você não tem um diretorio de configuração pessoal do Lyx."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Isso é necessário para manter sua própria configuração."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Devo tentar defini-la para você (recomendado) ?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Executando sem um diretório de configuração pessoal do LyX"
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Criando diretório "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " e executando o programa de configuração..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Falhou. Usará "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr " no lugar."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Pronto!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "Aviso!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Um erro ocorreu enquanto lia"
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Usando os padrões built-in."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Definindo nível de depuração para "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Uso: lyx [ opções de linha de comando ] [nome.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Opções de linha de comando (sensível à caixa):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           sumariza o uso do LyX"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       tenta definir o diretório base para x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x        define a largura da janela principal"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       define a altura da janela principal"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         define a posição x da janela principal"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         define a posição y da janela principal"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          onde n é a soma das opções de depuração. Tente -dbg 65535 "
+"-help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        troca as cores de fundo e frente"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           roda o LyX em modo preto e branco"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  usa uma rotina rápida para seleções de desenho\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Verifique a man page do LyX para mais opções."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Está faltando um número para a opção -dbg"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Está faltando um diretório para a opção -sysdir"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Fax no.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Dest.:|#N"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Empresa:|#E"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Agenda de Tel."
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Selecionar|#S"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Acrescentar|#t"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Apagar|#D"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Salvar|#V"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Destino:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Comentário:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Arquivo de Fax: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Agenda de telefones vazia"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Salvar (necessário)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Não posso abrir agenda de telefones: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "NÃO HÁ ARQUIVO DE REGISTRO OU ESTÁ VAZIO"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Janela-de-mensagem"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cAgenda de telefones vazia"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Agenda de Telefones"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Romano"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Sem serifa"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Fonte-fixa"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Símbolo"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Herdar"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Médio"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Negrito"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Sublinhado"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Itálico"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Inclinado"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Caixa Baixa"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Fino"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Menor"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Mais Pequeno"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Pequeno"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normal"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Largo"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Mais Largo"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Bem Largo"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Grande"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Maior"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Incrementar"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Decrementar"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "fino"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "bem menor"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "menor"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "pequeno"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normal"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "largo"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "mais largo"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "bem largo"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "grande"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "maior"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "incrementar"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "decrementar"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "herdar"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ignorar"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Desligado"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "Ligado"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Alternar"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Nenhum"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Preto"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Branco"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Vermelho"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Verde"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Azul"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Verde claro"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Rosa"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Amarelo"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Matemático"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Quadro"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Ênfatizar"
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Sublinhado"
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Caixa Alta"
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "Latex"
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Padrão"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Seqüência desconhecida:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Ação desconhecida"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Comando não permitido sem nenhum documento aberto"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "O documento é apenas para leitura"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Modo de texto"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Tipo para exportar desconhecido: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Tipo para importar desconhecido"
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Formatação"
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " desconhecido"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Nenhuma referência cruzada para alternar"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Marca removida"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Marca definida"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Marca fora"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Marca dentro"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "Push-toolbar precisa ter o  argumento > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Uso: toolbar-add-to <LyX command>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Falta argumento"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Isso somente é permitido no modo matemático"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Abrindo o documento filho"
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Tipo de nota de rodapé desconhecida"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "O Documento é apenas para leitura"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Digite o Nome do Arquivo para o novo documento"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "arquivo-novo"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Você deseja fechar o documento agora?\n"
+"('Não' somente mudará para a versão aberta)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Você deseja abrir o documento?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Abrindo o documento"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "aberto."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Escolher modelo"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Exemplos"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Selecione o Documento para Abrir"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Não posso abrir o documento"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Selecione arquivo ASCII para Importar"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Um documento com o nome"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "já existe. Subscrever?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Importando arquvo ASCII"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "Arquivo ASCII"
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "importado."
+
+#: src/lyxfunc.C:2673
+#, fuzzy
+msgid "Select Noweb file to Import"
+msgstr "Selecione um arquivo LaTeX para importar"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Selecione um arquivo LaTeX para importar"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Importando arquivo LaTeX"
+
+#: src/lyxfunc.C:2731
+#, fuzzy
+msgid "Importing Noweb file"
+msgstr "Importando arquivo LaTeX"
+
+#: src/lyxfunc.C:2739
+#, fuzzy
+msgid "Noweb file "
+msgstr "Arquivo LaTeX"
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "Arquivo LaTeX"
+
+#: src/lyxfunc.C:2744
+#, fuzzy
+msgid "Could not import Noweb file"
+msgstr "Não posso importar o arquivo LaTeX"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Não posso importar o arquivo LaTeX"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Selecione um documento para inserir"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Inserindo o documento"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "inserido."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Não posso inserir o documento"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Quadro Aberto"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "desconhecido"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Salvar o documento e proceder?"
+
+#: src/lyxvc.C:183
+#, fuzzy
+msgid "LyX VC: Initial description"
+msgstr "(não há descrição inicial)"
+
+#: src/lyxvc.C:184
+#, fuzzy
+msgid "(no initial description)"
+msgstr "(não há descrição inicial)"
+
+#: src/lyxvc.C:187
+#, fuzzy
+msgid "Info"
+msgstr "Info"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr "Esse documento NÃO foi registrado."
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Mensagem de registro"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "ignorar mudanças e proceder com a checagem final?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Quando você reverter, perderá todas as mudanças feitas"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "no documento desde o último registro de entrada"
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Você ainda deseja fazer isso?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "Não há histórico RCS"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "Histórico RCS"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Fechar"
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funções"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Grego"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr "­ Û"
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr "± ´"
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr "£ @"
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr "S  ò"
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Misc"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "OK"
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Colunas"
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Alinhamento vertical|#v"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Alinhamento horizontal|#h"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "OK"
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Fino|#F"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Médio|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Grosso|#G"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negativo|#N"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Quadrante|#Q"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "Quadrante Z|#Z"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Limite"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Decoração"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Espaçamento"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matriz"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Topo | Centro | Base"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Painel Matemático"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Arquivo"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Editar"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Formatação"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Inserir"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Ajuda"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#A"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#E"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#F"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#I"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#O"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#u"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Opções de Visualização"
+
+#: src/menus.C:408
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Importar%t|LaTeX...%x30|Texto Ascii como Linhas...%x31|Texto Ascii como "
+"Parágrafos%x32"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "FIM|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FIM|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIM|Pp#p#P"
+
+#: src/menus.C:416 src/menus.C:646
+#, fuzzy
+msgid "FIM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Exportar%t|como LaTeX...%x40|como DVI...%x41|como PostScript...%x42|como "
+"Texto Ascii...%x43|Definido...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportar%t|como LinuxDoc...%x40|como DVI...%x41|como PostScript...%x42|como "
+"Texto Ascii...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportar%t|como LinuxDoc...%x40|como DVI...%x41|como PostScript...%x42|como "
+"Texto Ascii...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Vv#v#V"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Tt#t#T"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Novo...|Novo do modelo...|Abrir...%l|Fechar|Salvar|Salvar Como...|Reverter "
+"para documento salvo%l|Ver dvi|Ver PostScript|Atualizar dvi|Atualizar "
+"PostScript|Construir Programa%l|Imprimir...|Fax..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|mM#m#M"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|Aa#a#A"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|Ff#f#F"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|lL#l#L"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|Cc#c#C"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|Rr#r#R"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|oO#o#O"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|vV#v#V"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|zZ#z#Z"
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr "FM|tT#t#T"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|pP#p#P"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importar%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Exportar%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Sair%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|Ii#i#I"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|Ee#e#E"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|Ss#s#S"
+
+#: src/menus.C:638
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Importar%t|LaTeX...%x15|Texto Ascii como Linhas...%x16|Texto Ascii como "
+"Parágrafos...%x17"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Novo...|Novo do modelo...|Abrir...%l|Importar%m%l|Sair%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Flutuantes & Quadros%t|Abrir/Fechar%x21|Derreter%x22|Abrir Todas Notas de "
+"Rodapé/Mergem%x23|Fechar todas notas de rodapé/Notas nas margens%x24|Abrir "
+"todos Figuras/Tabelas%x25|Fechar Todas Figuras/Tabelas%x26%l|Remover Todas "
+"Caixas de Erro%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|Aa#a#A"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|Dd#d#D"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|Rr#r#R"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|nN#n#N"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|Ff#f#F"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|Tt#t#T"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|Rr#r#R"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabela%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Multicoluna%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Multicoluna%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|Mm#m#M"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Topo da Linha%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Topo da Linha%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|Tt#t#T"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Base da Linha%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Base da Linha%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|Bb#b#B"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Linha da esquerda%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Linha da esquerda%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Ll#l#L"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Linha da direita%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Linha da direita%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|dD#d#D"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Alinhamento à esquerda%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Alinhamento à esquerda%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Alinhamento à direita%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Alinhamento à direita%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Alinhamento Centralizado%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Alinhamento Centralizado%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|Cc#c#C"
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Inserir linha%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Inserir Coluna%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|uU#u#U"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Apagar Linha%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|Aa#a#A"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Apagar Coluna%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Apagar Tabela%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Inserir tabela%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|Ii#i#I"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Controle de Versão%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Registro%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Registro de Entrada foi modificados%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Registro de saída para editar%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Registro de saída foi modificados%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Verificar para editar%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Reverter para a última versão%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Desfazer o último registro de entrada%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Mostrar Histórico%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Registrar%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Rr#r#R"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|mM#m#M"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|eE#e#E"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|lL#l#l"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|Dd#d#D"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|Hh#h#H"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Desfazer|Refazer %l|Cortar|Copiar|Colar%l|Procurar e Substituir...|Ir para o "
+"Erro|Ir para Nota|Flutuantes e Quadros%m|Tabela%m|Ortografia....|Verificar "
+"TeX|Índice...%l|Controle de Versão%m%l|Ver arquivo de registro do "
+"LaTeX%l|Colar seleção primária como Linhas|Colar seleção primária como "
+"Parágrafos"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Dd#d#D"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|Rr#r#R"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Cc#c#C"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|oO#o#O"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|lL#l#L"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|Ss#s#S"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|Ee#e#E"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|Nn#n#N"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|Ff#f#F"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|Tt#t#T"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|gG#g#G"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|Tt#t#T"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|Íí#í#Í"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Vv#v#V"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|Xx#x#X"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|Ll#l#L"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|Pp#p#P"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Caractere...|Parágrafo...|Documento...|Papel...|Tabela...|Citações...%l|Enfat"
+"izado %b|Caixa Alta%b|Negrito%b|TeX%b|Mudar Nível de Formatação|Preâmbulo do "
+"LaTeX...%l|Salvar aparência como padrão"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|Cc#c#C"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|rR#r#R"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|Dd#d#D"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|Pp#p#P"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|Tt#t#T"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|iI#i#I"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|Ee#e#E"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|Ss#s#S"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Nn#n#N"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Tt#t#T"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|vV#v#V"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|Ll#l#L"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|aA#a#A"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Importar arquivo ASCII%t|Como Linhas%x41|Como Parágrafos%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|Ll#l#L"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|Pp#p#P"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Listas & TOC%t|Índice%x21|Lista de Figuras%x22|Lista de Tabelas%x23|Lista de "
+"Algorítimos%x24|Lista de Índice%x25|Referência BibTeX%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|dD#d#d"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|Ff#f#F"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|Tt#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|Aa#a#A"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|Íí#í#Í"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|Bb#b#B"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Flutuantes%t|Figura Flutuante%x71|Tabela Flutuante%x72|Figura Flutuante "
+"Larga%x73|Tabela Flutuante Larga%l%x74|Algorítimo Flutuante%x75"
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|Tt#t#T"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|Ll#l#L"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|bB#b#B"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|Aa#a#A"
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Caracteres Especiais%t|Preenchimento Horizontal%x31|Traço de "
+"Hifenização%x32|Espaço Protegido%x33|Quebra de Linha%x34|Reticências "
+"(...)%x35|Ponto Final%x36|Aspas de Citação (\")%x37|Menu Separador %x38"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|Pp#p#P"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|Hh#h#H"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|Ee#e#E"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|Ll#l#L"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|Rr#r#R"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|Ff#f#F"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|Aa#a#A"
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr "IMS|Mm#m#M"
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Figura...|Tabela...%l|Incluir Arquivo...|Importar Arquivo ASCII%m|Inserir "
+"Arquivo LyX...%l|Nota de Rodapé|Nota na Margem|Flutuantes%m%l|Listas & "
+"TOC%m%l|Caracteres Especiais%m%l|Notas...|Etiqueta...|Referência "
+"Cruzada...|Referência de Citação...|Entrada de índice...|Entrada de índice "
+"da última palavra"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|bB#b#B"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|Aa#a#A"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|Ii#i#I"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|Xx#x#X"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|Rr#r#R"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|Mm#m#M"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|Ff#f#F"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|Tt#t#T"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|sS#s#S"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|Nn#n#N"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Ee#e#E"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|Cc#c#C"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|tT#t#T"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|dD#d#D"
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "IM|pP#p#P"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr "IM|Uu#u#U"
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Fração|Raiz Quadrada|Exponente|Índice|Somatório|Integral%l|Modo "
+"matemático|Mostrador%l|Painel Matemático..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Ff#f#F"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|Qq#q#Q"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Ee#e#E"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|dD#d#D"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|Ss#s#S"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#i#I"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#m#M"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|oO#o#O"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|Pp#p#P"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Fontes de Tela...|Opções do Corretor "
+"Ortográfico...|Teclado...|LaTeX...%l|Reconfigurar"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|Ff#f#F"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Oo#o#O"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Tt#t#T"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#l#L"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|Rr#r#R"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Introdução|Tutorial|Guia do Usuário|Recursos Avançados|Customização|Manual "
+"de Referência|Bugs Conhecidos|Configuração do LaTeX%l|Direitos Autorais e "
+"Garantia...|Créditos...|Versão..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr "HM|Ii#I#i"
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|Tt#T#t"
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "HM|Uu#U#u"
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr "HM|xX#x#X"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Cc#C#c"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|Bb#b#B"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "HM|Ll#L#l"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|Aa#a#A"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|Éé#é#É"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr "HM|Vv#v#V"
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "Versão do LyX: "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " de "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Diretório das bibliotecas: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Diretório do Usuário: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Abrindo o arquivo de ajuda"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Executando:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Nenhum documento aberto *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Bem-Vindo ao LyX!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Sem sentido com este layout!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Erro: Não posso mudar para o diretório: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "Erro interno do LyX:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Erro de pilha"
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Enviar "
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Impress.|#I"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Arquivo|#A"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Todas as Páginas|#T"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Somente Ímpares|#Í"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Somente Pares|#P"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Ordem Normal|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Ao Inverso|#I"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Ordem"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Páginas:"
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Cópias"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Contar:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Sem ordem|S:"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Tipo Arquivo"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Comando:|#C"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "Postscript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#L"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#s"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Usar linguagem do documento|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Usar linguagem alternativa:|#U"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Tratando palavras run-together como válidas|#T"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Codificação de entrada alternando para ispell|#C"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Usar o dicionário de configuração pessoal:|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Caracteres especiais permitidos nas palavras:|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Dicionário"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Substituir"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr "Sugestões"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Opções do Corretor ortográfico...|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Iniciar a correção ortográfica|#S"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Inserir no dicionário pessoal|#I"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignorar palavra|#g"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Aceitar palavra nesta seção|A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Parar a correção ortográfica|#T"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Fechar o Corretor Ortográfico|#C^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Substituir palavra|#R"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Opções do Corretor Ortográfico"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Corretor Ortográfico"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"O processo de correção parou por alguma razão. *Uma* razão possível\n"
+"pode ser que você não tenha um arquivo  de dicionário\n"
+"para a linguagem desse documento.\n"
+"Verifique /usr/lib/ispell ou defina outros\n"
+"dicionários no menu Opções ---> Corretor Ortográfico."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " palavras verificadas."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " palavra verificada."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Verificação ortográfica completada!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"A correção ortográfica morreu por alguma razão.\n"
+"Talvez ele tenha killed."
+
+# godoy: killed
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "So podem havem multicolunas horizontalmente."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr "Você não pode digitar dois espaços. Por favor, leia o Tutorial."
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+"Você não pode inserir um espaço no começo de um parágrafo. Por favor, leia o "
+"Tutorial."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Operação impossível"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Você não pode inserir um flutuante em um flutuante"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Você não pode inserir uma margem de parágrafo em uma minipágina!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Não posso cortar a tabela"
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Flutuante incluiria flutuante!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Flutuante aberto"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Flutuante fechado"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Nada para fazer"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Nenhuma mudança de fonte foi definida. Use Charactere no menu Layout para "
+"definir a mudança de fonte."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Não sei o que fazer com metade de flutuantes"
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "Sinto muito."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Não sei o que fazer com metade de tabelas."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Não posso colar um flutuante dentro de outro flutuante!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Célula não pode incluir mais que um parágrafo!"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644 (file)
index 0000000..7c74387
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,4895 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 1998,1999 Free Software Foundation, Inc.
+# FIRST AUTHOR Victor Lavrenko <lyx@lavrenko.pp.ru>, 1998.
+#
+# , fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: 1.0.1\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:53+02:00\n"
+"Last-Translator: Victor Lavrenko <lyx@lavrenko.pp.ru>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-r\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "æÏÒÍÁÔÉÒÏ×ÁÎÉÅ ÄÏËÕÍÅÎÔÁ..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "âÏÌØÛÅ ÏÛÉÂÏË ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ ChkTeX #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "úÁÇÒÕÚËÁ ÛÒÉÆÔÁ × X-ÓÅÒ×ÅÒ..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "ðÒÏÈÏÄ #"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "ðÒÏÈÏÄ LaTeX ÎÏÍÅÒ "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "÷ÙÐÏÌÎÑÀ MakeIndex."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "÷ÙÐÏÌÎÑÀ BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "îÅÔ ÖÕÒÎÁÌÁ LaTeX!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "óÏÚÄÁÔØ ÖÕÒÎÁÌ ÐÒÏÇÒÁÍÍÙ"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "öÕÒÎÁÌ LaTeX"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "ðÏÑÓÎÉÔØ ËÏÍÁÎÄÕ"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "÷ÙÂÅÒÉÔÅ ÐÒÅÄÙÄÕÝÉÊ ÓÉÍ×ÏÌ"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "÷ÓÔÁ×ØÔÅ ÓÓÙÌËÕ bibtex"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "á×ÔÏÓÏÈÒÁÎÅÎÉÅ"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "ðÅÒÅÊÔÉ Ë ÎÁÞÁÌÕ ÄÏËÕÍÅÎÔÁ"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "÷ÙÄÅÌÉÔØ ÄÏ ÎÁÞÁÌÁ ÄÏËÕÍÅÎÔÁ"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "úÁËÒÙÔØ"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "ðÅÒÅÊÔÉ × ËÏÎÅàÄÏËÕÍÅÎÔÁ"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "÷ÙÄÅÌÉÔØ ÄÏ ËÏÎÃÁ ÄÏËÕÍÅÎÔÁ"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "æÁËÓ"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "îÏ×ÙÊ ÄÏËÕÍÅÎÔ"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "îÏ×ÙÊ ÄÏËÕÍÅÎÔ ÐÏ ÛÁÂÌÏÎÕ"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "ïÔËÒÙÔØ"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "ðÅÒÅËÌÀÞÉÔØÓÑ Ë ÐÒÅÄÙÄÕÝÅÍÕ ÄÏËÕÍÅÎÔÕ"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "ðÅÞÁÔØ"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "÷ÅÒÎÕÔØÓÑ Ë ÓÏÈÒÁÎÅÎÎÏÍÕ"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "ïÂÎÏ×ÉÔØ DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "ïÂÎÏ×ÉÔØ PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "ðÒÏÓÍÏÔÒ DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "ðÒÏÓÍÏÔÒ PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "óÏÚÄÁÔØ ÐÒÏÇÒÁÍÍÕ"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "ðÒÏ×ÅÒÉÔØ TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "óÏÈÒÁÎÉÔØ"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "óÏÈÒÁÎÉÔØ ËÁË"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "ïÔÍÅÎÁ"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "ðÅÒÅÊÔÉ ÎÁ ÏÄÉΠÓÉÍ×ÏÌ ÎÁÚÁÄ"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "ðÅÒÅÊÔÉ ÎÁ ÏÄÉΠÓÉÍ×ÏÌ ×ÐÅÒÅÄ"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "÷ÓÔÁ×ÉÔØ ÃÉÔÁÔÕ"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "÷ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "ëÏÐÉÒÏ×ÁÔØ"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "÷ÙÒÅÚÁÔØ"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "õÍÅÎØÛÉÔØ ÕÒÏ×ÅÎØ ÏËÒÕÖÅÎÉÑ"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "õ×ÅÌÉÞÉÔØ ÕÒÏ×ÅÎØ ÏËÒÕÖÅÎÉÑ"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "éÚÍÅÎÉÔØ ÕÒÏ×ÅÎØ ÏËÒÕÖÅÎÉÑ"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "éÚÍÅÎÉÔØ ÕÓÔÁÎÏ×ËÉ ÍÁÒËÅÒÁ"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "ðÅÒÅÊÔÉ ×ÎÉÚ"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "÷ÙÄÅÌÉÔØ ÓÌÅÄÕÀÝÕÀ ÓÔÒÏËÕ"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "÷ÙÂÒÁÔØ ÕÓÔÁÎÏ×ËÉ ÁÂÚÁÃÁ"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "ðÅÒÅÊÔÉ Ë ÓÌÅÄÕÀÝÅÊ ÏÛÉÂËÅ"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "÷ÓÔÁ×ÉÔØ ÒÉÓÕÎÏË"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "îÁÊÔÉ É ÚÁÍÅÎÉÔØ"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "éÚÍÅÎÉÔØ ËÕÒÓÏÒ ËÏÔÏÒÙÊ ÓÌÅÄÕÅÔ/ÎÅ ÓÌÅÄÕÅÔ ÚÁ ÓËÒÏÌÌÂÁÒÏÍ"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÐÏÌÕÖÉÒÎÙÊ"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÓÔÉÌØ ËÏÄÁ"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "óÔÉÌØ ÛÒÉÆÔÁ ÐÏ-ÕÍÏÌÞÁÎÉÀ"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÁËÃÅÎÔ"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ÓÔÉÌØ"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÓÔÉÌØ ×ÙÄÅÌÅÎÉÑ"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÓÔÉÌØ ÛÒÉÆÔÁ roman"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÓÔÉÌØ ÛÒÉÆÔÁ sans serif"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "õÓÔÁÎÏ×ÉÔØ ÒÁÚÍÅÒ ÛÒÉÆÔÁ"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "ðÏËÁÚÁÔØ ÓÔÁÔÕÓ ÛÒÉÆÔÁ"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÐÏÄÞÅÒËÉ×ÁÎÉÅ"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "÷ÓÔÁ×ÉÔØ ÓÎÏÓËÕ"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "÷ÙÄÅÌÉÔØ ÓÌÅÄÕÀÝÉÊ ÓÉÍ×ÏÌ"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "÷ÓÔÁ×ÉÔØ ÇÏÒÉÚÏÎÔÁÌØÎÏÅ ÚÁÐÏÌÎÅÎÉÅ"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "÷ÓÔÁ×ÉÔØ ÍÑÇËÉÊ ÐÅÒÅÎÏÓ"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "÷ÓÔÁ×ÉÔØ ... ÍÎÏÇÏÔÏÞÉÅ"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "÷ÓÔÁ×ÉÔØ ÔÏÞËÕ ÏËÏÎÞÁÎÉÑ ÐÒÅÄÌÏÖÅÎÉÑ"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "ïÔËÌÀÞÉÔØ ÒÁÓËÌÁÄËÕ"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÐÅÒ×ÉÞÎÕÀ ÒÁÓËÌÁÄËÕ"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ×ÔÏÒÉÞÎÕÀ ÒÁÓËÌÁÄËÕ"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÒÁÓËÌÁÄËÕ"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "÷ÓÔÁ×ÉÔØ ÍÅÔËÕ"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "óËÏÐÉÒÏ×ÁÔØ ÔÉРÏËÒÕÖÅÎÉÑ ÁÂÚÁÃÁ"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "÷ÓÔÁ×ÉÔØ ÔÉРÏËÒÕÖÅÎÉÑ ÁÂÚÁÃÁ"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "õËÁÚÁÔØ ÒÁÚÍÅÒ ÂÕÍÁÇÉ É ÐÏÌÑ"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "ðÅÒÅÊÔÉ Ë ÎÁÞÁÌÕ ÓÔÒÏËÉ"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "÷ÙÄÅÌÉÔØ ÄÏ ÎÁÞÁÌÁ ÓÔÒÏËÉ"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "ðÅÒÅÊÔÉ Ë ËÏÎÃÕ ÓÔÒÏËÉ"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "÷ÙÄÅÌÉÔØ ÄÏ ËÏÎÃÁ ÓÔÒÏËÉ"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "÷ÙÈÏÄ"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "÷ÓÔÁ×ÉÔØ ÐÒÉÍÅÞÁÎÉÅ ÎÁ ÐÏÌÑÈ"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "çÒÅÞÅÓËÉÊ ÍÁÔÅÍÁÔÉÞÅÓËÉÊ"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "íÁÔÅÍÁÔÉÞÅÓËÁÑ ÍÏÄÁ"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "ðÅÒÅÊÔÉ ÎÁ ÁÂÚÁà×ÎÉÚ"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "÷ÙÄÅÌÉÔØ ÓÌÅÄÕÀÝÉÊ ÁÂÚÁÃ"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "ðÅÒÅÊÔÉ ÎÁ ÏÄÉΠÁÂÚÁà××ÅÒÈ"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "÷ÙÄÅÌÉÔØ ÐÒÅÄÙÄÕÝÉÊ ÁÂÚÁÃ"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "÷ÓÔÁ×ÉÔØ"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "÷ÓÔÁ×ÉÔØ ÖÅÓÔËÉÊ ÐÒÏÂÅÌ"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "÷ÓÔÁ×ÉÔØ ÃÉÔÁÔÕ"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "ðÅÒÅËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "ðÏ×ÔÏÒÉÔØ ÏÔÍÅÎÅÎÎÏÅ ÄÅÊÓÔ×ÉÅ"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "÷ÓÔÁ×ÉÔØ ÐÅÒÅËÒÅÓÔÎÕÀ ÓÓÙÌËÕ"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "÷ÓÔÁ×ÉÔØ ÔÁÂÌÉÃÕ"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÓÔÉÌØ TeX"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "ïÔÍÅÎÉÔØ ÐÏÓÌÅÄÎÅÅ ÄÅÊÓÔ×ÉÅ"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "óÍÑÇÞÉÔØ"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "éÍÐÏÒÔÉÒÏ×ÁÔØ ÄÏËÕÍÅÎÔ"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "õÄÁÌÉÔØ ×ÓÅ ÓÏÏÂÝÅÎÉÑ Ï ÏÛÉÂËÁÈ"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "÷ÓÔÁ×ÉÔØ ÒÁÚÄÅÌÉÔÅÌØ ÍÅÎÀ"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "ïÐÉÓÁÎÉÅ ÎÅÄÏÓÔÕÐÎÏ!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "ðÅÒÅÓÌÁÔØ ÄÏËÕÍÅÎÔ × ËÏÍÁÎÄÕ"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr "(éÚÍÅÎÅÎÏ)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr "(ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr ""
+"äÏËÕÍÅÎÔ ÄÏÓÔÕÐÅΠÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ. îÉËÁËÉÅ ÉÚÍÅÎÅÎÉÑ ÆÏÒÍÁÔÁ ÎÅÄÏÐÕÓÔÉÍÙ."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "æÏÒÍÁÔ ÂÕÍÁÇÉ"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "õÓÔÁÎÏ×ËÉ ÆÏÒÍÁÔÁ ÂÕÍÁÇÉ"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ×ÅÒÎÁÑ ÄÌÉÎÁ (ÐÒÁ×ÉÌØÎÙÊ ÐÒÉÍÅÒ: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "æÏÒÍÁÔ ÒÁÓÛÉÒÅÎÎÏÇÏ ÁÂÚÁÃÁ"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "õÓÔÁÎÏ×ËÉ ÆÏÒÍÁÔÁ ÒÁÓÛÉÒÅÎÎÏÇÏ ÁÂÚÁÃÁ"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ ÐÒÏÃÅÎÔÏ× (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "äÏÐÏÌÎÉÔÅÌØÎÁÑ ÆÏÒÍÁ ÔÁÂÌÉÃÙ"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "æÏÒÍÁÔ ÔÁÂÌÉÃÙ"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ×ÅÒÎÁÑ ÐÏÚÉÃÉÑ ËÕÒÓÏÒÁ, ÏËÎÏ ÏÂÎÏ×ÌÅÎÏ"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "ðÏÄÔ×ÅÒÖÄÅÎÉÅ: ÎÁÖÍÉÔÅ ËÎÏÐËÕ õÄÁÌÉÔØ ÅÝÅ ÒÁÚ"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "ïÛÉÂËÁ!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÕËÁÚÁÎÎÙÊ ÆÁÊÌ:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "ïÛÉÂËÁ ÚÁÇÒÕÚËÉ ËÌÁÓÓÁ ÔÅËÓÔÁ!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÇÒÕÚÉÔØ ËÌÁÓÓ ÔÅËÓÔÁ "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- ÐÏÄÓÔÁÎÏ×ËÁ ÐÏ-ÕÍÏÌÞÁÎÉÀ"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: éÇÎÏÒÉÒÕÅÔÓÑ ÓÔÁÒÁÑ ×ÓÔÁ×ËÁ"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÕÖÅΠlyxformat %.2f, ÎÏ ÎÁÊÄÅΠÌÉÛØ %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "ïÛÉÂËÁ: ÎÕÖÅΠlyxformat %.2f, ÎÏ ÎÁÊÄÅΠÌÉÛØ %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "þÔÅÎÉÅ ÄÏËÕÍÅÎÔÁ ÎÅ ÚÁ×ÅÒÛÅÎÏ"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "÷ÏÚÍÏÖÎÏ, ÜÔÏÔ ÄÏËÕÍÅÎÔ ÏÂÒÅÚÁÎ"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "ïÛÉÂËÁ!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "ïÂÎÁÒÕÖÅΠÓÔÁÒÙÊ ÆÏÒÍÁÔ LyX-ÆÁÊÌÁ. éÓÐÏÌØÚÕÊÔÅ LyX 0.10.x!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "üÔÏ ÎÅ LyX-ÆÁÊÌ!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÆÁÊÌ!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "ïÛÉÂËÁ! äÏËÕÍÅÎÔ ÄÏÓÔÕÐÅΠÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ: "
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ × ÆÁÊÌ "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "ïÛÉÂËÁ ÚÁËÒÙÔÉÑ ÆÁÊÌÁ "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ × ÆÁÊÌ "
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ×ÒÅÍÅÎÎÏÇÏ ÆÁÊÌÁ "
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "ïÛÉÂËÁ ÚÁËÒÙÔÉÑ ÆÁÊÌÁ "
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "ïÛÉÂËÁ LyX:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÆÁÊÌÁ"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "ïÛÉÂËÁ : îÅ×ÅÒÎÁÑ ÇÌÕÂÉÎÁ ËÏÍÁÎÄÙ LatexType.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "ïÂÒÁÂÏÔËÁ Ó ÐÏÍÏÝØÀ LaTeX..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX ÎÅ ÒÁÂÏÔÁÅÔ!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "ïÔÓÕÔÓÔ×ÕÅÔ ÖÕÒÎÁÌ:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "úÁ×ÅÒÛÅÎÏ"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "÷ÙÐÏÌÎÑÀ Literate..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "ëÏÍÁÎÄÁ 'Literate' ÎÅ ÒÁÂÏÔÁÅÔ!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "óÏÚÄÁÀ ÐÒÏÇÒÁÍÍÕ..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÐÒÏÇÒÁÍÍÕ!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "éÓÐÏÌÎÑÀ ÐÒÏÇÒÁÍÍÕ chktex..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex ÎÅ ÒÁÂÏÔÁÅÔ!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "ïÛÉÂËÁ ÚÁÐÕÓËÁ Ó ÆÁÊÌÏÍ "
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ×ÒÅÍÅÎÎÏÇÏ ÆÁÊÌÁ "
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ×ÒÅÍÅÎÎÏÇÏ ÆÁÊÌÁ "
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "ïÛÉÂËÁ ÉÓÐÏÌÎÅÎÉÑ ËÏÍÁÎÄÙ *roff ÎÁ ÔÁÂÌÉÃÅ"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ÏÐÅÒÁÃÉÑ!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÓÔÁ×ÉÔØ ÔÁÂÌÉÃÕ/ÓÐÉÓÏË × ÔÁÂÌÉÃÕ."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "éÚ×ÉÎÉÔÅ."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "éÚÍÅÎÅÎÉÑ × ÄÏËÕÍÅÎÔÅ:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "óÏÈÒÁÎÉÔØ ÄÏËÕÍÅÎÔ?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "îÅËÏÔÏÒÙÅ ÄÏËÕÍÅÎÔÙ ÎÅ ÂÙÌÉ ÓÏÈÒÁÎÅÎÙ:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "÷ÓÅ ÒÁ×ÎÏ ×ÙÈÏÄÉÔØ?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "óÏÈÒÁÎÑÀ ÄÏËÕÍÅÎÔ"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "äÏËÕÍÅÎÔ ÓÏÈÒÁÎÅΠËÁË"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "ïÛÉÂËÁ ÕÄÁÌÅÎÉÑ ÆÁÊÌÁ Á×ÔÏÓÏÈÒÁÎÅÎÉÑ!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "óÏÈÒÁÎÅÎÉÅ ÎÅ ÕÄÁÌÏÓØ!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "îÅÔ ÏÔËÒÙÔÙÈ ÄÏËÕÍÅÎÔÏ×!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: ðÏÐÙÔËÁ ÓÏÈÒÁÎÉÔØ ÄÏËÕÍÅÎÔ "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " ËÁË..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "  ëÁÖÅÔÓÑ, ÅÇÏ ÕÄÁÌÏÓØ ÓÏÈÒÁÎÉÔØ. æÕ."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "  ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ! ðÙÔÁÀÓØ..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  óÏÈÒÁÎÉÔØ ÎÅ×ÏÚÍÏÖÎÏ! ëÏÎÅÃ. äÏËÕÍÅÎÔ ÐÏÔÅÒÑÎ."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "ïÂÎÁÒÕÖÅÎÁ Á×ÁÒÉÊÎÁÑ ËÏÐÉÑ ÜÔÏÇÏ ÆÁÊÌÁ!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "÷ÍÅÓÔÏ ÜÔÏÇÏ, ÐÏÐÙÔÁÔØÓÑ ÚÁÇÒÕÚÉÔØ ÅÅ?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "æÁÊÌ Á×ÔÏÓÏÈÒÁÎÅÎÉÑ ÎÏ×ÅÅ."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "úÁÇÒÕÚÉÔØ ÜÔÏÔ ×ÍÅÓÔÏ ÔÏÇÏ?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÛÁÂÌÏÎ"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓËÏÎ×ÅÒÔÉÒÏ×ÁÔØ ÆÁÊÌ"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "äÏËÕÍÅÎÔ ÕÖÅ ÏÔËÒÙÔ:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "÷Ù ÈÏÔÉÔÅ ÐÅÒÅÏÔËÒÙÔØ ÜÔÏÔ ÄÏËÕÍÅÎÔ?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "æÁÊÌ `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' ÄÏÓÔÕÐÅΠÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "óÏÚÄÁÔØ ÎÏ×ÙÊ ÄÏËÕÍÅÎÔ Ó ÔÁËÉÍ ÉÍÅÎÅÍ?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "òÁÚÍÅÒ"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "ïë"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "ðÒÉÍÅÎÉÔØ"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "ïÔÍÅÎÁ"
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "õÒÏ×ÅÎØ ÍÁÒËÅÒÏ×"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "óÔÁÎÄÁÒÔÎÙÊ"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "íÁÔÅÍÁÔÉÞÅÓËÉÅ"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "íÁÒËÅÒ 2"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "íÁÒËÅÒ 3"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "íÁÒËÅÒ 4"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "íÁÒËÅÒ 1"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "ðÒÏÓÔÉÔÅ, ÎÏ ÷ÁÛ libXpm ÓÌÉÛËÏÍ ÓÔÁÒ."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "üÔÁ ×ÏÚÍÏÖÎÏÓÔØ ÔÒÅÂÕÅÔ ÎÁÌÉÞÉÑ xpm-4.7 (3.4g) ÉÌÉ ×ÙÛÅ."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "ðÏÐÙÔÁÊÔÅÓØ ÚÁÇÒÕÚÉÔØ LyX × ÍÏÎÏ-ÒÅÖÉÍÅ (lyx  -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" ÐÏ-ÕÍÏÌÞÁÎÉÀ | ËÒÏÈÏÔÎÙÊ | ÒÕËÏÐÉÓÎÙÊ | ÓÎÏÓËÁ | ÍÁÌÅÎØËÉÊ | ÎÏÒÍÁÌØÎÙÊ | "
+"ÂÏÌØÛÏÊ | âÏÌØÛÏÊ | âïìøûïê | ÏÇÒÏÍÎÙÊ | ïÇÒÏÍÎÙÊ"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "éÔÅÍÉÚÉÒÏ×ÁÔØ ×ÙÂÒÁÎÎÙÊ ÍÁÒËÉÒÏ×ÁÎÎÙÊ ÕÞÁÓÔÏË"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "ïÛÉÂËÁ: LyX ÎÅ ÍÏÖÅÔ ÐÒÏÞÉÔÁÔØ ÆÁÊÌ CREDITS"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "ðÏÖÁÌÕÊÓÔÁ, ÕÓÔÁÎÏ×ÉÔÅ ×ÓÅ ÐÏ-ËÏÒÒÅËÔÎÅÅ"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "amount of work other people have done for the LyX project."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Credits"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "á×ÔÏÒÓËÉÅ ÐÒÁ×Á É ÇÁÒÁÎÔÉÉ"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "÷ÓÅ ÜÔÉ ÌÀÄÉ ÕÞÁÓÔ×Ï×ÁÌÉ × ÐÒÏÅËÔÅ LyX. âÏÌØÛÏÅ ÉÍ ÓÐÁÓÉÂÏ."
+
+#: src/credits_form.C:50
+#, fuzzy
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1998 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"üÔÁ ÐÒÏÇÒÁÍÍÁ Ñ×ÌÑÅÔÓÑ free software; ×Ù ÍÏÖÅÔÅ Ó×Ï-\n"
+"ÂÏÄÎÏ ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÅÅ É/ÉÌÉ ÍÏÄÉÆÉÃÉÒÏ×ÁÔØ × ÒÁÍ-\n"
+"ËÁÈ GNU General Public License ËÁË ÏÐÕÂÌÉËÏ×ÁÎÏ Free\n"
+"Software Foundation; ÒÁ×ÎÏ ËÁË × ×ÅÒÓÉÉ 2 ÜÔÏÊ ÌÉÃÅÎ-\n"
+"ÚÉÉ, ÔÁË É (ÎÁ ÷ÁÛÅ ÕÓÍÏÔÒÅÎÉÅ) × ÂÏÌÅÅ ÐÏÚÄÎÉÈ."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX ÒÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ Ó ÎÁÄÅÖÄÏÊ, ÞÔÏ ÏΠÂÕÄÅÔ ÐÏÌÅ-\n"
+"ÚÅÎ, ÎÏ âåú ÷óñëïê çáòáîôéé; ÄÁÖÅ ÂÅÚ ÐÏÄÒÁÚÕÍÅ-\n"
+"×ÁÀÝÅÊÓÑ äïðõóôéíïóôé ðòïäáöé ÉÌÉ ðòéçïä-\n"
+"îïóôé äìñ ïâùþîùè ãåìåê. ðÏÄÒÏÂÎÅÅ --- ÓÍ. GNU\n"
+"General Public License; ÅÓÌÉ ÷Ù ÎÅ ÐÏÌÕÞÉÌÉ ÅÅ\n"
+"ËÏÐÉÀ ×ÍÅÓÔÅ Ó ÐÒÏÇÒÁÍÍÏÊ, ÐÉÛÉÔÅ ×\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA.\n"
+"ðÅÒÅ×ÏÄ - ÷.ó.ìÁ×ÒÅÎËÏ, http://www.lavrenko.pp.ru/"
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[ÏÛÉÂËÁ ÏÔÒÉÓÏ×ËÉ]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[ÏÔÒÉÓÏ×ËÁ ... ]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[ÎÅÔ ÆÁÊÌÁ]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[ÎÅ ÐÏËÁÚÁÎ]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[ÎÅÔ ÐÒÏÇÒÁÍÍÙ ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "òÉÓÕÎÏË"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "ðÕÓÔÏÊ ÐÕÔØ Ë ÒÉÓÕÎËÕ"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "ëÁÒÔÉÎËÁ"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "äÏËÕÍÅÎÔ"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "òÉÓÕÎÏË × ÆÏÒÍÁÔÅ EPS"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "éÍÑ ÆÁÊÌÁ ÎÅ ÍÏÖÅÔ ÓÏÄÅÒÖÁÔØ ÓÌÅÄÕÀÝÉÈ ÓÉÍ×ÏÌÏ×:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "ÐÒÏÂÅÌ, '#', '~', '$' ÉÌÉ '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ! îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÔÁÌÏÇ."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ LyX!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏ×ÅÒÉÔØ ËÁÔÁÌÏÇ ÎÁ ÚÁÐÉÓØ"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÔÅÓÔÏ×ÙÊ ÆÁÊÌ × ËÁÔÁÌÏÇÅ"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "óÏÚÄÁÎÎÙÊ ÔÅÓÔÏ×ÙÊ ÆÁÊÌ ÎÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ËÁÔÁÌÏÇÁ "
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "ïÛÉÂËÁ ÕÄÁÌÅÎÉÑ ÆÁÊÌÁ "
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "ïÛÉÂËÁ ÓÏÚÄÁÎÉÑ ×ÒÅÍÅÎÎÏÇÏ ËÁÔÁÌÏÇÁ "
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "ïÛÉÂËÁ ÕÄÁÌÅÎÉÑ ×ÒÅÍÅÎÎÏÇÏ ËÁÔÁÌÏÇÁ "
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "÷ÙÚÏ× createDirectory Ó ÎÅ×ÅÒÎÙÍ ÉÍÅÎÅÍ"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "ïÛÉÂËÁ ÓÏÚÄÁÎÉÑ ËÁÔÁÌÏÇÁ "
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "õÓÔÁÎÏ×ÉÔØ ÎÁÂÏÒ"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "îÁÂÏÒ ÓÉÍ×ÏÌÏ× ÎÅ ÎÁÊÄÅÎ!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"ïÛÉÂËÁ:\n"
+"\n"
+"òÁÓËÌÁÄËÁ\n"
+"ÎÅ ÎÁÊÄÅÎÁ"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "îÁÂÏÒ ÓÉÍ×ÏÌÏ×:"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "äÒÕÇÏÊ..."
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "äÒÕÇÏÊ..."
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "ñÚÙË"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "îÁÚÎÁÞÅÎÉÑ"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "ðÅÒ×ÉÞÎÏÅ"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "îÅÔ ÎÁÚÎÁÞÅÎÉÑ"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "÷ÔÏÒÉÞÎÏÅ"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "÷ÔÏÒÉÞÎÙÊ"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "ðÅÒ×ÉÞÎÙÊ"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "EPS-ÆÁÊÌ"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "ðÒÏÓÍÏÔÒ"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "ðÒÏÓÍÏÔÒ..."
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "ðÏËÁÚÁÔØ ÆÒÅÊÍ"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "ôÒÁÎÓÌÉÒÏ×ÁÔØ"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "ðÁÒÁÍÅÔÒÙ"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "õÇÏÌ:"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% ÓÔÒÁÎÉÃÙ"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "ðÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "ÓÍ"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "ÄÀÊÍÙ"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "ðÏËÁÚÁÔØ"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "÷ÙÓÏÔÁ"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "ûÉÒÉÎÁ"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "ðÏ×ÏÒÏÔ"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "ðÏËÁÚÁÔØ × Ã×ÅÔÁÈ"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "îÅ ÐÏËÁÚÙ×ÁÔØ ÜÔÏÔ ÒÉÓÕÎÏË"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "þÅÒÎÏ-ÂÅÌÙÊ"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "íÏÎÏÈÒÏÍÎÙÊ"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "ðÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "ÓÍ"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "ÄÀÊÍÙ"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% ÓÔÒÁÎÉÃÙ"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% ËÏÌÏÎËÉ"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr ""
+"úÁÇÏ-\n"
+"ÌÏ×ÏË"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr ""
+"ðÏÄÒÉ-\n"
+"ÓÕÎÏË"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "ëÁÔÁÌÏÇ:"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "ûÁÂÌÏÎ:"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "éÍÑ ÆÁÊÌÁ:"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "óÞÉÔÁÔØ"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "äÏÍÁÛÎÉÊ"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "ðÏÌØÚÏ×ÁÔÅÌØ1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "ðÏÌØÚÏ×ÁÔÅÌØ2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "ëÏÌÏÎËÉ"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "óÔÒÏËÉ"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "éÓËÁÔØ"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "úÁÍÅÎÉÔØ ÎÁ"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr ""
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr ""
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "úÁÍÅÎÉÔØ"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "úÁËÒÙÔØ"
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "òÅÇÉÓÔÒ"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "óÌÏ×Á"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "úÁÍÅÎÉÔØ ×ÓÅ"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "÷ËÌÀÞÉÔØ ÍÁÔÅÍÁÔÉÞÅÓËÕÀ ÇÒÅÞÅÓËÕÀ ÍÏÄÕ"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "íÁÔÅÍÁÔÉÞÅÓËÁÑ ÇÒÅÞÅÓËÁÑ ËÌÁ×ÉÁÔÕÒÁ ×ËÌÀÞÅÎÁ"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "íÁÔÅÍÁÔÉÞÅÓËÁÑ ÇÒÅÞÅÓËÁÑ ËÌÁ×ÉÁÔÕÒÁ ×ÙËÌÀÞÅÎÁ"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "òÅÖÉÍ TeX"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "âÅÚ ÎÏÍÅÒÏ×"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "îÏÍÅÒ"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "÷×ÅÄÉÔÅ ÎÏ×ÕÀ ÍÅÔËÕ ÄÌÑ ×ÓÔÁ×ËÉ:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "ÍÁÔÅÍÁÔÉÞÅÓËÁÑ ÍÏÄÁ"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "îÅ×ÅÒÎÏÅ ÄÅÊÓÔ×ÉÅ × ÍÁÔÅÍÁÔÉÞÅÓËÏÊ ÍÏÄÅ!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "òÅÄÁËÔÏÒ ÍÁÔÅÍÁÔÉÞÅÓËÏÊ ÍÏÄÙ"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "íÁËÒÏÓ: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "ëÌÀÞ:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "ðÏÍÅÔËÁ:"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "ëÌÀÞ:"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "íÅÔËÁ:"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "ãÉÔÁÔÁ"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "üÌÅÍÅÎÔ ÂÉÂÌÉÏÇÒÁÆÉÉ"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "óÓÙÌËÉ, ÓÇÅÎÅÒÉÒÏ×ÁÎÎÙÅ ÞÅÒÅÚ BibTeX"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "âÁÚÁ ÄÁÎÎÙÈ:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "óÔÉÌØ:  "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "ïÛÉÂËÁ"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "ïÛÉÂËÁ LaTeX"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "ðÒÏÓÍÏÔÒ"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "îÅ ÐÅÞÁÔÁÔØ"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "úÁÇÒÕÚÉÔØ"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "éÍÑ ÆÁÊÌÁ:"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr ""
+"÷ÉÄÉÍÙÊ\n"
+"ÐÒÏÍÅÖÕÔÏË"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "ðÌÏÔÎÏ"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "þÅÒÅÚ input"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "þÅÒÅÚ include"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "äÏËÕÍÅÎÔÙ"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "÷ÙÂÒÁÔØ ÐÏÄÞÉÎÅÎÎÙÊ ÄÏËÕÍÅÎÔ"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Include"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Input"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Verbatim Input"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr ""
+"ëÌÀÞÅ×ÏÅ\n"
+"ÓÌÏ×Ï"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "éÎÄÅËÓ"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "éÎÄÅËÓ"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "ðÅÞÁÔÎÙÊ ÉÎÄÅËÓ"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "ðÒÉÍÅÞÁÎÉÅ"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "úÁËÒÙÔØ"
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "óÐÉÓÏË ÁÌÇÏÒÉÔÍÏ×"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "óÐÉÓÏË ÒÉÓÕÎËÏ×"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "óÐÉÓÏË ÔÁÂÌÉÃ"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr ""
+"òÏÄÉÔÅ-\n"
+"ÌØÓËÉÊ:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "ôÉРÓÓÙÌËÉ"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "ðÅÒÅÊÔÉ Ë ÍÅÔËÅ"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "éÚÍÅÎÉÔØ ÍÅÔËÕ"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "îÏÍÅÒ ÓÔÒÁÎÉÃÙ"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "óÓÙÌËÁ"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "óÔÒÁÎÉÃÁ: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "óÓÙÌËÁ: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "óÏÄÅÒÖÁÎÉÅ"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "URL|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+#, fuzzy
+msgid "Name|#N"
+msgstr "éÍÑ"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "úÁËÒÙÔØ"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "ÓÓÙÌËÁ ÎÁ ÇÉÐÅÒÔÅËÓÔÏ×ÙÊ ÆÁÊÌ (html)|#H"
+
+#: src/inseturl.C:141
+#, fuzzy
+msgid "Insert Url"
+msgstr "÷ÓÔÁ×ÉÔØ ÓÓÙÌËÕ × éÎÔÅÒÎÅÔ (URL)"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "óÓÙÌËÁ ÎÁ ÇÉÐÅÒÔÅËÓÔÏ×ÙÊ ÆÁÊÌ (html): "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "óÓÙÌËÁ × éÎÔÅÒÎÅÔ (URL): "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "ÄÒÕÇÉÅ..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "îÁÚÎÁÞÅÎÉÑ ËÌÁ×ÉÛ"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   ÐÁÒÁÍÅÔÒÙ: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "õÄÁÒÅÎÉÅ ×ÏÚÍÏÖÎÏ ÎÁ ×ÓÅÈ ÓÉÍ×ÏÌÁÈ"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "ïÂÎÏ×ÉÔØ"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX ÎÅ ÓÐÏÓÏÂÅΠÎÁÊÔÉ ÏÐÉÓÁÎÉÅ ÜÔÏÇÏ ÆÏÒÍÁÔÁ"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "õÂÅÄÉÔÅÓØ, ÞÔÏ ÆÁÊÌ \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "×ÅÒÎÏ ÉÎÓÔÁÌÌÉÒÏ×ÁÎ. éÚ×ÉÎÉÔÅ, ÄÏÌÖÅΠ÷ÁÓ ÐÏËÉÎÕÔØ :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX ÎÅ ÓÐÏÓÏÂÅΠÎÁÊÔÉ ÏÐÉÓÁÎÉÅ ËÁËÉÈ-ÌÉÂÏ ÆÏÒÍÁÔÏ×!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "ðÒÏ×ÅÒØÔÅ ÓÏÄÅÒÖÉÍÏÅ ÆÁÊÌÁ  \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "éÚ×ÉÎÉÔÅ, ÄÏÌÖÅΠ÷ÁÓ ÐÏËÉÎÕÔØ :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "òÁÚÄÅÌÅÎÉÅ"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "ïÔÓÔÕÐ"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "ðÒÏÍÅÖÕÔÏË"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "ëÌÁÓÓ:"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "óÔÉÌØ:"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "ûÒÉÆÔÙ:"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr ""
+"òÁÚÍÅÒ\n"
+"ÛÒÉÆÔÁ:"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr ""
+"òÁÚÍÅÝÅÎÉÅ\n"
+"ÐÌÁ×ÁÀÝÉÈ ËÁÄÒÏ×:"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "äÒÁÊ×ÅÒ PS:"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "ëÏÄÉÒÏ×ËÁ:"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "ïÄÉÎ"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "ä×Á"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "óÔÏÒÏÎÙ"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "ïÄÉÎ"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "ä×Á"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "äÏÐ. ÐÁÒÁÍÅÔÒÙ:"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "ñÚÙË:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "ðÒÏÍÅÖÕÔÏË:"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr ""
+"çÌÕÂÉÎÁ ÎÕÍÅÒÁÃÉÉ\n"
+"ÒÁÚÄÅÌÏ×"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "çÌÕÂÉÎÁ ÓÏÄÅÒÖÁÎÉÑ"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "ðÒÏÂÅÌÙ"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "æÏÒÍÁ ÍÁÒËÅÒÏ×"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr ""
+"éÓÐÏÌØÚÏ×ÁÔØ\n"
+"AMS-ÍÁÔÅÍÁÔÉËÕ"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "ûÒÉÆÔ:"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "ôÉÐ:"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "æÏÒÍÁ:"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "òÁÚÍÅÒ:"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "äÒÕÇÉÅ:"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "ã×ÅÔ:"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "ðÅÒÅËÌÀÞÉÔØ ÉÈ ×ÓÅ"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "îÉËÏÇÄÁ ÎÅ ÐÅÒÅËÌÀÞÁÌÉÓØ"
+
+#: src/layout_forms.C:170
+#, fuzzy
+msgid "These are always toggled"
+msgstr "÷ÓÅÇÄÁ ÐÅÒÅËÌÀÞÁÌÉÓØ"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr ""
+"ûÉÒÉÎÁ\n"
+"ÍÅÔËÉ:"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "ïÔÓÔÕÐ"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "÷ÙÛÅ"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "îÉÖÅ"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "÷ÙÛÅ"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "îÉÖÅ"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "âÅÚ ÏÔÓÔÕÐÁ"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr ""
+"óÐÒÁ-\n"
+"×Á"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "ìÅ×ÙÊ"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "âÌÏË"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "ãÅÎÔÒ"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "÷ÙÛÅ:"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "îÉÖÅ:"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "òÁÚÒÙ×Ù ÓÔÒÁÎÉÃ"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "óÔÒÏËÉ"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "÷ÙÒÁ×ÎÉ×ÁÎÉÅ"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "÷ÅÒÔÉËÁÌØÎÙÅ ÐÒÏÍÅÖÕÔËÉ"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "äÏÐ. ÏÐÃÉÉ"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr ""
+"óÏÈÒÁ-\n"
+"ÎÉÔØ"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr ""
+"óÏÈÒÁ-\n"
+"ÎÉÔØ"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "ïë"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "ôÉÐ:"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr ""
+"ïÄÉ-\n"
+"ÎÁÒÎÙÊ"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "ä×ÏÊÎÏÊ"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "ôÅËÓÔ"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr ""
+"óÐÅÃÉ-\n"
+"ÁÌØÎÙÊ:"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "ðÏÌÑ"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "ðÏÌÑ ××ÅÒÈÕ/×ÎÉÚÕ"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "ïÒÉÅÎÔÁÃÉÑ"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "ðÏÒÔÒÅÔ"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "ìÁÎÄÛÁÆÔ"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr ""
+"òÁÚÍÅÒ\n"
+"ÂÕÍÁÇÉ:"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "òÁÚÍÅÒ"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÐÁËÅÔ ÇÅÏÍÅÔÒÉÉ"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "ûÉÒÉÎÁ:"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "÷ÙÓÏÔÁ:"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "÷ÅÒÈ:"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "îÉÚ:"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "óÌÅ×Á:"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "óÐÒÁ×Á:"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr ""
+"÷ÙÓÏÔÁ\n"
+"×ÅÒÈÁ:"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr ""
+"òÁÚÄÅÌÉÔÅÌØ\n"
+"×ÅÒÈÁ:"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr ""
+"ðÒÏÍÅÖÕÔÏË\n"
+"ÓÎÏÓËÉ:"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "òÁÍËÉ"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "÷ÅÒÈ"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "îÉÚ"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr ""
+"óÌÅ-\n"
+"×Á"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "óÐÅÃÉÁÌØÎÁÑ ÑÞÅÊËÁ"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr ""
+"íÎÏÇÏËÏ-\n"
+"ÌÏÎÎÙÊ"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "÷ÓÔÁ×ÉÔØ ÓÔÏÌÂÅÃ"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "õÄÁÌÉÔØ ÓÔÏÌÂÅÃ"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "÷ÓÔÁ×ÉÔØ ÓÔÒÏËÕ"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "õÄÁÌÉÔØ ÓÔÒÏËÕ"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "õÄÁÌÉÔØ ÔÁÂÌÉÃÕ"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "óÔÏÌÂÅÃ"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "óÔÒÏËÁ"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "÷ÓÔÁ×ÉÔØ ÒÁÍËÕ"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "õÂÒÁÔØ ÒÁÍËÕ"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr ""
+"âÏÌØÛÁÑ\n"
+"ÔÁÂÌÉÃÁ"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "ðÏ×ÅÒÎÕÔØ ÎÁ 90°"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr ""
+"òÁÚÒÙ×Ù\n"
+"ÓÔÒÏË"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "óÐÅÃ. ÔÁÂÌÉÃÁ"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr ""
+"ðÅÒ×ÙÊ\n"
+"ÚÁÇÏÌÏ×ÏË"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "úÁÇÏÌÏ×ÏË"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "éÔÏÇ"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr ""
+"ðÏÓÌÅÄÎÉÊ\n"
+"ÉÔÏÇ"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr ""
+"îÏ×ÁÑ\n"
+"ÓÔÒÁÎÉÃÁ"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "ðÏ×ÅÒÎÕÔØ ÎÁ 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "äÏÐÏÌÎÉÔÅÌØÎÏ"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "óÌÅ×Á"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "óÐÒÁ×Á"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "ãÅÎÔÒ"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "äÏÐ. ÏÐÃÉÉ"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "äÌÉÎÁ"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "ÉÌÉ %"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "óÅÒÅÄÉÎÁ"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "÷ÅÒÔÉËÁÌØÎÙÊ ËÌÅÊ ÍÅÖÄÕ ÁÂÚÁÃÁÍÉ ÍÉÎÉ-ÓÔÒÁÎÉÃÙ"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "îÁÞÁÔØ ÎÏ×ÕÀ ÍÉÎÉ-ÓÔÒÁÎÉÃÕ"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "áÂÚÁÃÙ Ó ÏÔÓÔÕÐÁÍÉ"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "íÉÎÉ-ÓÔÒÁÎÉÃÙ"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "ðÌÁ×ÁÀÝÉÊ ËÁÄÒ"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "óÐÅÃÉÁÌØÎÏÅ ÍÎÏÇÏËÏÌÏÎÏÞÎÏÅ ×ÙÒÁ×ÎÉ×ÁÎÉÅ"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "óÐÅÃÉÁÌØÎÏÅ ×ÙÒÁ×ÎÉ×ÁÎÉÅ ËÏÌÏÎËÉ"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Encapsulated Postscript (*.eps, *.ps)"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Inlined EPS (*.eps, *.ps)"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "ôÉÐ"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "ûÒÉÆÔ Roman"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "ûÒÉÆÔ Sans Serif"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "íÁÛÉÎÏÐÉÓÎÙÊ"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "ëÏÄÉÒÏ×ËÁ"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "íÁÓÛÔÁ ÛÒÉÆÔÁ"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "ïÂÎÏ×ÉÔØ"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "ïÂÎÏ×ÉÔØ"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "÷ÓÔÁ×ÉÔØ ÓÓÙÌËÉ"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "÷ÓÔÁ×ÉÔØ ÎÏÍÅÒÁ ÓÔÒ."
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "ðÅÒÅÊÔÉ Ë ÓÓÙÌËÅ"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "óÏÈÒÁÎÉÔØ ÎÅ ÕÄÁÌÏÓØ. ðÅÒÅÉÍÅÎÏ×ÁÔØ É ÐÏÐÙÔÁÔØÓÑ ÅÝÅ ÒÁÚ?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(åÓÌÉ ÎÅÔ, ÄÏËÕÍÅÎÔ ÎÅ ÂÕÄÅÔ ÓÏÈÒÁÎÅÎ.)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "ûÁÂÌÏÎÙ"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "÷×ÅÄÉÔÅ ÉÍÑ ÆÁÊÌÁ ÄÌÑ ÓÏÈÒÁÎÅÎÉÑ ÄÏËÕÍÅÎÔÁ ËÁË"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "ïÔÍÅÎÅÎÏ."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "äÏËÕÍÅÎÔ Ó ÔÁËÉÍ ÉÍÅÎÅÍ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "÷ÓÅ ÒÁ×ÎÏ ÓÏÈÒÁÎÑÔØ"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "äÒÕÇÏÊ ÄÏËÕÍÅÎÔ Ó ÔÁËÉÍ ÖÅ ÉÍÅÎÅÍ ÏÔËÒÙÔ!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "úÁÍÅÎÉÔØ ÎÁ ÔÅËÕÝÉÊ ÄÏËÕÍÅÎÔ?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "äÏËÕÍÅÎÔ ÐÅÒÅÉÍÅÎÏ×ÁΠנ'"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', ÎÏ ÎÅ ÓÏÈÒÁÎÅÎ..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "äÏËÕÍÅÎÔ ÕÖÅ ÐÒÉÓÕÔÓÔ×ÕÅÔ:"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "úÁÍÅÎÉÔØ ÆÁÊÌ?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr ""
+"éÚ×ÉÎÉÔÅ, ÜÔÏ ÎÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ × ÔÏ ×ÒÅÍÑ ËÁË ÏÔÒÉÓÏ×Ù×ÁÀÔÓÑ ËÁÒÔÉÎËÉ."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "ðÏÖÁÌÕÊÓÔÁ, ÐÏÄÏÖÄÉÔÅ ÐÁÒÕ ÓÅËÕÎÄ É ÐÏÐÙÔÁÊÔÅÓØ ÓÎÏ×Á."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(ÉÌÉ ÐÒÉËÏÎÞÉÔÅ ÐÒÏÃÅÓÓ ÒÕËÁÍÉ É ÐÏÐÙÔÁÊÔÅÓØ ÅÝÅ ÒÁÚ.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ ÜÔÏ × ÔÏ ×ÒÅÍÑ, ËÁË ÐÒÏ×ÅÒÑÅÔÓÑ ÏÒÆÏÇÒÁÆÉÑ."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "óÎÁÞÁÌÁ ÏÓÔÁÎÏ×ÉÔÅ ÐÒÏ×ÅÒËÕ ÏÒÆÏÇÒÁÆÉÉ."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "ïÂÎÁÒÕÖÅÎÁ ÏÄÎÁ ÏÛÉÂËÁ"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "÷Ù ÄÏÌÖÎÙ ÐÏÐÙÔÁÔØÓÑ ÅÅ ÉÓÐÒÁ×ÉÔØ."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " ÏÛÉÂÏË ÏÂÎÁÒÕÖÅÎÏ."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "÷Ù ÄÏÌÖÎÙ ÐÏÐÙÔÁÔØÓÑ ÉÓÐÒÁ×ÉÔØ ÉÈ."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "ïÂÎÁÒÕÖÅÎÙ ÏÛÉÂËÉ ×Ï ×ÒÅÍÑ ÒÁÂÏÔÙ LaTeX."
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "îÅ×ÅÒÎÙÊ ÔÉРÄÏËÕÍÅÎÔÁ"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "ïÐÅÒÁÃÉÑ ÓÏÚÄÁÎÉÑ ÐÒÏÇÒÁÍÍÙ ÎÅÄÏÐÕÓÔÉÍÁ ÄÌÑ ÜÔÏÇÏ ÄÏËÕÍÅÎÔÁ"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "÷ÏÚÎÉËÌÉ ÏÛÉÂËÉ ×Ï ×ÒÅÍÑ ÓÏÚÄÁÎÉÑ ÐÒÏÇÒÁÍÍÙ."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex ÂÅÓÐÏÌÅÚÅΠÄÌÑ LinuxDoc"
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "ïÂÎÁÒÕÖÅÎÏ ÏÄÎÏ ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "éÓÐÏÌØÚÕÊÔÅ ðÒÁ×ËÁ->ðÅÒÅÊÔÉ Ë ÏÛÉÂËÅ ÄÌÑ ÐÏÉÓËÁ."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " ÐÒÅÄÕÐÒÅÖÄÅÎÉÊ ÎÁÊÄÅÎÏ."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "éÓÐÏÌØÚÕÊÔÅ ðÒÁ×ËÁ->ðÅÒÅÊÔÉ Ë ÏÛÉÂËÅ ÄÌÑ ÉÈ ÐÏÉÓËÁ."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex ÚÁËÏÎÞÉÌ ÒÁÂÏÔÕ ÕÓÐÅÛÎÏ"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "óÕÄÑ ÐÏ ×ÓÅÍÕ, chktex ÎÅ ÒÁÂÏÔÁÅÔ."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "éÓÐÏÌÎÑÀ ËÏÍÁÎÄÕ:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "æÁÊÌ ÕÖÅ ÐÒÉÓÕÔÓÔ×ÕÅÔ:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "÷Ù ÈÏÔÉÔÅ ÐÅÒÅÚÁÐÉÓÁÔØ ÜÔÏÔ ÆÁÊÌ?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "ïÔÍÅÎÅÎÏ"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "LaTeX-ÆÁÊÌ ÓÏÈÒÁÎÅΠËÁË"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "ëÌÁÓÓ ÄÏËÕÍÅÎÔÁ ÄÏÌÖÅΠÂÙÔØ linuxdoc."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "ëÏÍÐÏÎÕÀ LinuxDoc SGML-ÆÁÊÌ `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "LinuxDoc SGML-ÆÁÊÌ ÓÏÈÒÁÎÅΠËÁË"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "ëÌÁÓÓ ÄÏËÕÍÅÎÔÁ ÄÏÌÖÅΠÂÙÔØ linuxdoc."
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "ëÏÍÐÏÎÕÀ LinuxDoc SGML-ÆÁÊÌ `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "LinuxDoc SGML-ÆÁÊÌ ÓÏÈÒÁÎÅΠËÁË"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Ascii-ÆÁÊÌ ÓÏÈÒÁÎÅΠËÁË"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "á×ÔÏÓÏÈÒÁÎÅÎÉÅ ÔÅËÕÝÅÇÏ ÄÏËÕÍÅÎÔÁ..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "á×ÔÏÓÏÈÒÁÎÅÎÉÅ ÎÅ ÕÄÁÌÏÓØ!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "÷ÓÔÁ×ÉÔØ ÆÁÊÌ"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ "
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "óÏÄÅÒÖÁÎÉÅ"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "÷ÓÔÁ×ÉÔØ ÓÓÙÌËÕ"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "÷ÓÔÁ×ÌÑÀ ÓÎÏÓËÕ..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "éÍÐÏÒÔÉÒÕÀ LinuxDoc SGML-ÆÁÊÌ `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "ëÏÎ×ÅÒÔÉÒÕÀ LinuxDoc SGML-ÆÁÊÌ × TeX-ÆÁÊÌ..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "ëÏÎ×ÅÒÔÉÒÕÀ LinuxDoc SGML-ÆÁÊÌ × DVI-ÆÁÊÌ..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "ëÏÎ×ÅÒÔÉÒÕÀ LinuxDoc SGML-ÆÁÊÌ × DVI-ÆÁÊÌ..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "óÔÉÌØ ÓÉÍ×ÏÌÏ×"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "ïËÒÕÖÅÎÉÅ ÁÂÚÁÃÁ"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "æÏÒÍÁÔ ÄÏËÕÍÅÎÔÁ"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "ãÉÔÁÔÙ"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "LaTeX-ÐÒÅÁÍÂÕÌÁ"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "÷Ù ÈÏÔÉÔÅ ÓÏÈÒÁÎÉÔØ ÔÅËÕÝÉÅ ÕÓÔÁÎÏ×ËÉ"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "ÄÌÑ ÓÉÍ×ÏÌÏ×, ÄÏËÕÍÅÎÔÁ, ÂÕÍÁÇÉ É ÃÉÔÁÔ"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "ËÁË ÕÓÔÁÎÏ×ËÉ ÐÏ ÕÍÏÌÞÁÎÉÀ ÄÌÑ ÎÏ×ÙÈ ÄÏËÕÍÅÎÔÏ×?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "ïÔËÒÙÔØ/úÁËÒÙÔØ..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "îÅÔ ÄÁÌØÎÅÊÛÅÊ ÉÎÆÏÒÍÁÃÉÉ ÄÌÑ ÏÔÍÅÎÙ ÄÅÊÓÔ×ÉÑ"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "ðÏ×ÔÏÒÉÔØ ÏÔÍÅÎÅÎÎÏÅ ÄÅÊÓÔ×ÉÅ × ÍÁÔÅÍÁÔÉÞÅÓËÏÊ ÍÏÄÅ ÐÏËÁ ÎÅ×ÏÚÍÏÖÎÏ"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "îÅÔ ÄÁÌØÎÅÊÛÅÊ ÉÎÆÏÒÍÁÃÉÉ ÄÌÑ ÐÏ×ÔÏÒÅÎÉÑ ÏÔÍÅÎÅÎÎÏÇÏ ÄÅÊÓÔ×ÉÑ"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "ûÒÉÆÔ: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", çÌÕÂÉÎÁ: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "÷ÓÔÁ×ÌÑÀ ÐÒÉÍÅÞÁÎÉÅ ÎÁ ÐÏÌÑÈ..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "ôÉРÏËÒÕÖÅÎÉÑ ÁÂÚÁÃÁ ÓËÏÐÉÒÏ×ÁÎ"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "õÓÔÁÎÏ×ÌÅΠÔÉРÏËÒÕÖÅÎÉÑ ÁÂÚÁÃÁ"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "éÚÍÅÎÅΠÕÒÏ×ÅÎØ ÏËÒÕÖÅÎÉÑ (× ÄÏÐÕÓÔÉÍÙÈ ÐÒÅÄÅÌÁÈ, Á ÍÏÖÅÔ É ÎÅÔ)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "õÓÔÁÎÏ×ÌÅÎÏ ÒÁÚÍÅÝÅÎÉÅ ÁÂÚÁÃÁ"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "óÌÅÄÕÅÔ ÌÉ ÍÎÅ ÕÓÔÁÎÏ×ÉÔØ ÎÅËÏÔÏÒÙÅ ÐÁÒÁÍÅÔÒÙ ×"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "ÚÎÁÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ ÄÌÑ ÜÔÏÇÏ ËÌÁÓÓÁ ÄÏËÕÍÅÎÔÏ×?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "ïÛÉÂËÉ ËÏÎ×ÅÒÔÁÃÉÉ!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅËÌÀÞÉÔØÓÑ Ë ÎÏ×ÏÍÕ ËÌÁÓÓÕ ÄÏËÕÍÅÎÔÁ."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "÷ÏÚ×ÒÁÝÁÀÓØ Ë ÏÒÉÇÉÎÁÌØÎÏÍÕ ËÌÁÓÓÕ ÄÏËÕÍÅÎÔÁ."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "ëÏÎ×ÅÒÔÉÒÕÀ ÄÏËÕÍÅÎÔ × ÎÏ×ÙÊ ËÌÁÓÓ ÄÏËÕÍÅÎÔÁ..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "ïÄÉΠÁÂÚÁàÎÅ ÍÏÖÅÔ ÂÙÔØ ÓËÏÎ×ÅÒÔÉÒÏ×ÁÎ"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " ÁÂÚÁÃÅ× ÎÅ ÍÏÖÅÔ ÂÙÔØ ÓËÏÎ×ÅÒÔÉÒÏ×ÁÎÏ"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "× ×ÙÂÒÁÎÎÙÊ ËÌÁÓÓ ÄÏËÕÍÅÎÔÁ"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "õÓÔÁÎÏ×ÌÅΠÆÏÒÍÁÔ ÄÏËÕÍÅÎÔÁ"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "âÏÌØÛÅ ÐÒÉÍÅÞÁÎÉÊ ××ÅÓÔÉ ÎÅ×ÏÚÍÏÖÎÏ"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "õÓÔÁÎÏ×ÌÅΠÔÉРÃÉÔÁÔ"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "õÓÔÁÎÏ×ÌÅÎÁ ÐÒÅÁÍÂÕÌÁ LaTeX"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÓÔÁ×ÉÔØ ÔÁÂÌÉÃÕ × ÔÁÂÌÉÃÕ."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "÷ÓÔÁ×ÌÑÀ ÔÁÂÌÉÃÕ..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "ôÁÂÌÉÃÁ ×ÓÔÁ×ÌÅÎÁ"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "ïÛÉÂËÁ!  òÁÓÐÅÞÁÔËÁ ÎÅ×ÏÚÍÏÖÎÁ!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "ðÒÏ×ÅÒØÔÅ 'ÄÉÁÐÁÚÏΠÓÔÒÁÎÉÃ'!"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "ðÒÏ×ÅÒØÔÅ 'ËÏÌÉÞÅÓÔ×Ï ËÏÐÉÊ'!"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "ïÛÉÂËÁ:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÒÁÓÐÅÞÁÔÁÔØ"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "ðÒÏ×ÅÒØÔÅ ÷ÁÛÉ ÐÁÒÁÍÅÔÒÙ ÎÁ ËÏÒÒÅËÔÎÏÓÔØ"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "÷ÓÔÁ×ÌÑÀ ÒÉÓÕÎÏË..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "òÉÓÕÎÏË ×ÓÔÁ×ÌÅÎ"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "õÓÔÁÎÏ×ÌÅÎÙ ÐÁÒÁÍÅÔÒÙ ÜËÒÁÎÁ"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "ðÁÒÁÍÅÔÒÙ LaTeX"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "÷ÙÐÏÌÎÑÀ ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÅ..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "ðÅÒÅÚÁÇÒÕÖÁÀ ËÏÎÆÉÇÕÒÁÃÉÀ..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "óÉÓÔÅÍÁ ÂÙÌÁ ÐÅÒÅËÏÎÆÉÇÕÒÉÒÏ×ÁÎÁ."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "÷ÁÍ ÓÔÏÉÔ ÐÅÒÅÚÁÐÕÓÔÉÔØ LyX ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ×ÓÅÈ"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "ÏÂÎÏ×ÌÅÎÎÙÈ ÓÐÅÃÉÆÉËÁÃÉÊ ËÌÁÓÓÏ× ÄÏËÕÍÅÎÔÏ×."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÜÔÏ ÍÅÔËÕ"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "× ÔÅËÕÝÅÍ ÄÏËÕÍÅÎÔÅ,"
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** îÅÔ ÄÏËÕÍÅÎÔÁ ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** ÷ ÄÏËÕÍÅÎÔÅ ÎÅ ÎÁÊÄÅÎÙ ÍÅÔËÉ ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr " îÅÔ | ðÏ ÕÍÏÌÞÁÎÉÀ | íÁÌÅÎØËÉÊ | óÒÅÄÎÉÊ | âÏÌØÛÏÊ | VFill | äÌÉÎÁ"
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr " âÅÚ ÉÚÍÅÎÅÎÉÊ %l| Roman | Sans Serif | íÁÛÉÎÏÐÉÓÎÙÊ %l| óÂÒÏÓ"
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " âÅÚ ÉÚÍÅÎÅÎÉÊ %l| îÏÒÍÁÌØÎÙÊ | ðÏÌÕÖÉÒÎÙÊ %l| óÂÒÏÓ"
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr ""
+" âÅÚ ÉÚÍÅÎÅÎÉÊ %l| ðÒÑÍÏÊ | ëÕÒÓÉ× | îÁËÌÏÎÎÙÊ | íÁÌÙÅ ÐÒÏÐÉÓÎÙÅ %l| óÂÒÏÓ "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" âÅÚ ÉÚÍÅÎÅÎÉÊ %l| ëÒÏÈÏÔÎÙÊ | îÁÉÍÅÎØÛÉÊ | íÅÎØÛÉÊ | íÁÌÅÎØËÉÊ | îÏÒÍÁÌØÎÙÊ "
+"| âÏÌØÛÏÊ | âÏÌØÛÅ | îÁÉÂÏÌØÛÉÊ | ïÇÒÏÍÎÙÊ | ïÇÒÏÍÎÅÅ %l| õ×ÅÌÉÞÉÔØ | "
+"õÍÅÎØÛÉÔØ | óÂÒÏÓ "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+" âÅÚ ÉÚÍÅÎÅÎÉÊ %l| áËÃÅÎÔ | ðÏÄÓÔÒÏÞÎÉË | ÷ÙÄÅÌÅÎÉÅ | òÅÖÉÍ LaTeX %l| óÂÒÏÓ "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+" âÅÚ ÉÚÍÅÎÅÎÉÊ %l| âÅÓÃ×ÅÔÎÙÊ | þÅÒÎÙÊ | âÅÌÙÊ | ëÒÁÓÎÙÊ | úÅÌÅÎÙÊ | çÏÌÕÂÏÊ "
+"| óÉÎÉÊ | ðÕÒÐÕÒÎÙÊ | öÅÌÔÙÊ %l| óÂÒÏÓ "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " ïÄÉÎÁÒÎÙÊ | ðÏÌÕÔÏÒÎÙÊ | ä×ÏÊÎÏÊ | äÒÕÇÏÊ "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " îÅÂÏÌØÛÏÊ | óÒÅÄÎÉÊ | âÏÌØÛÏÊ | äÌÉÎÁ "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" ÐÏ ÕÍÏÌÞÁÎÉÀ | ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÊ | US-ÐÉÓØÍÏ | US-ÄÏËÕÍÅÎÔ | US-ÚÁÐÉÓËÁ | A3 "
+"| A4 | A5 | B3 | B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" ÎÅÔ | A4 ÎÅÂÏÌØÛÉÅ ÐÏÌÑ (ÔÏÌØËÏ ÐÏÒÔÒÅÔ) | á4 ÏÞÅÎØ ÍÁÌÅÎØËÉÅ ÐÏÌÑ (ÔÏÌØËÏ "
+"ÐÏÒÔÒÅÔ) | A4 ÏÞÅÎØ ÛÉÒÏËÉÅ ÐÏÌÑ (ÔÏÌØËÏ ÐÏÒÔÒÅÔ) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``ÔÅËÓÔ'' | ''ÔÅËÓÔ'' | ,,ÔÅËÓÔ`` | ,,ÔÅËÓÔ'' | «ÔÅËÓÔ» | »ÔÅËÓÔ« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "LyX-ÂÁÎÎÅÒ"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "õÂÒÁÔØ"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "äÁ"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "îÅÔ"
+
+#: src/lyx_gui_misc.C:416
+#, fuzzy
+msgid "Clear|#e"
+msgstr "ïÞÉÓÔÉÔØ"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "÷ÓÅ ÉÚÍÅÎÅÎÉÑ ÂÕÄÕÔ ÉÇÎÏÒÉÒÏ×ÁÔØÓÑ"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "äÏËÕÍÅÎÔ ÄÏÓÔÕÐÅΠÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ ÕÄÁÅÔÓÑ ÏÐÒÅÄÅÌÉÔØ ÐÕÔØ Ë ÉÓÐÏÌÎÑÅÍÏÍÕ ÆÁÊÌÕ."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr ""
+"åÓÌÉ Õ ×ÁÓ ÅÓÔØ ×ÏÚÎÉËÌÉ ÐÒÏÂÌÅÍÙ, ÐÏÐÙÔÁÊÔÅÓØ ÚÁÐÕÓÔÉÔØ LyX Ó ÐÏÌÎÙÍ ÐÕÔÅÍ."
+
+#: src/lyx_main.C:271
+#, fuzzy
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "ðÅÒÅÍÅÎÎÁÑ ÏËÒÕÖÅÎÉÑ LYX_DIR_12 --- ÜÔÏ ÎÅ ÅÓÔØ ÈÏÒÏÛÏ."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "óÉÓÔÅÍÎÙÊ ËÁÔÁÌÏÇ ÕÓÔÁÎÏ×ÌÅΠ×: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr ""
+"ðÒÅÄÕÐÒÅÖÄÅÎÉÅ LyX! îÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÅ ÓÉÓÔÅÍÎÏÇÏ "
+"ËÁÔÁÌÏÇÁ."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "ðÏÐÙÔÁÊÔÅÓØ ÚÁÐÕÓÔÉÔØ Ó ÏÐÃÉÅÊ '-sysdir' ÉÌÉ"
+
+#: src/lyx_main.C:282
+#, fuzzy
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "ÕÓÔÁÎÏ×ÉÔÅ ÐÅÒÅÍÅÎÎÕÀ ÏËÒÕÖÅÎÉÑ LYX_DIR_12 ÎÁ ÓÉÓÔÅÍÎÙÊ ËÁÔÁÌÏÇ LyX"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "ÓÏÄÅÒÖÁÝÕÀ ÆÁÊÌ `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "éÓÐÏÌØÚÕÀ ×ÓÔÒÏÅÎÎÙÅ ÕÓÔÁÎÏ×ËÉ "
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " ÎÏ ÏÖÉÄÁÀ ÎÅËÏÔÏÒÙÅ ÐÒÏÂÌÅÍÙ."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "öÄÉÔÅ ÐÒÏÂÌÅÍ."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "õ ÷ÁÓ ÎÅÔ ÌÉÞÎÏÇÏ LyX-ËÁÔÁÌÏÇÁ,"
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "åÇÏ ÎÅÏÂÈÏÄÉÍÏ ÓÏÚÄÁÔØ ÄÌÑ ÈÒÁÎÅÎÉÑ ÷ÁÛÉÈ ÌÉÞÎÙÈ ÎÁÓÔÒÏÅË."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "ðÏÐÙÔÁÔØÓÑ ÍÎÅ ÜÔÏ ÓÄÅÌÁÔØ ÚÁ ÷ÁÓ (ÒÅËÏÍÅÎÄÕÅÔÓÑ)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "òÁÂÏÔÁÀ ÂÅÚ ÐÅÒÓÏÎÁÌØÎÏÇÏ LyX-ËÁÔÁÌÏÇÁ."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: ÓÏÚÄÁÀ ËÁÔÁÌÏÇ "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " É ÚÁÐÕÓËÁÀ ËÏÎÆÉÇÕÒÉÒÏ×ÁÎÉÅ..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "ïÂÌÏÍ-Ó. âÕÄÕ ÉÓÐÏÌØÚÏ×ÁÔØ "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr " ×ÍÅÓÔÏ ÜÔÏÇÏ."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "óÄÅÌÁÎÏ!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ LyX!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "ïÛÉÂËÁ ×Ï ×ÒÅÍÑ ÞÔÅÎÉÑ "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "éÓÐÏÌØÚÕÀ ×ÓÔÒÏÅÎÎÙÅ ÕÓÔÁÎÏ×ËÉ."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "õÓÔÁÎÁ×ÌÉ×ÁÀ ÕÒÏ×ÅÎØ ÏÔÌÁÄËÉ × "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "æÏÒÍÁÔ: lyx [ ÐÁÒÁÍÅÔÒÙ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ ] [ ÉÍÑ.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "ðÁÒÁÍÅÔÒÙ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ (ÒÅÇÉÓÔÒ ÉÍÅÅÔ ÚÎÁÞÅÎÉÅ):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           ÐÏÍÏÝØ ÐÏ ÚÁÐÕÓËÕ LyX"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       ÐÏÐÙÔÁÔØÓÑ ÕÓÔÁÎÏ×ÉÔØ ÓÉÓÔÅÍÎÙÊ ËÁÔÁÌÏÇ × x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x       ÕÓÔÁÎÏ×ÉÔØ ÛÉÒÉÎÕ ÇÌÁ×ÎÏÇÏ ÏËÎÁ"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       ÕÓÔÁÎÏ×ÉÔØ ×ÙÓÏÔÕ ÇÌÁ×ÎÏÇÏ ÏËÎÁ"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x        ÕÓÔÁÎÏ×ÉÔØ X-ËÏÏÒÄÉÎÁÔÕ ÇÌÁ×ÎÏÇÏ ÏËÎÁ"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y        ÕÓÔÁÎÏ×ÉÔØ Y-ËÏÏÒÄÉÎÁÔÕ ÇÌÁ×ÎÏÇÏ ÏËÎÁ"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          ÇÄÅ n --- ÜÔÏ ÓÕÍÍÁ ÏÔÌÁÄÏÞÎÙÈ ÏÐÃÉÊ. ðÏÐÒÏÂÕÊÔÅ -dbg "
+"65535 -help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        ÐÏÍÅÎÑÔØ ÍÅÓÔÁÍÉ Ã×ÅÔ ÔÅËÓÔÁ É ÆÏÎÁ"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           ÚÁÐÕÓËÁÅÔ LyX × ÍÏÎÏÈÒÏÍÎÏÍ ÒÅÖÉÍÅ"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr ""
+"   -FastSelection  ÉÓÐÏÌØÚÏ×ÁÔØ ÂÙÓÔÒÙÅ ÐÒÏÃÅÄÕÒÙ ÄÌÑ ÚÁËÒÁÓËÉ ×ÙÄÅÌÅÎÎÙÈ "
+"ÕÞÁÓÔËÏ×\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "óÍÏÔÒÉÔÅ ÄÏËÕÍÅÎÔÁÃÉÀ ÐÏ LyX ÄÌÑ ÏÓÔÁÌØÎÙÈ ÐÁÒÁÍÅÔÒÏ×."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "ïÔÓÕÔÓÔ×ÕÅÔ ÞÉÓÌÏ ÄÌÑ ËÌÀÞÁ -dbg!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "ïÔÓÕÔÓÔ×ÕÅÔ ËÁÔÁÌÏÇ ÄÌÑ ËÌÀÞÁ -sysdir!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "æÁËÓ N:"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "éÍÑ ÐÏÌÕÞ.:"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "ïÒÇÁÎÉÚÁÃÉÑ:"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "ôÅÌÅÆÏÎÎÁÑ ËÎÉÇÁ"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "÷ÙÂÒÁÔØ ÉÚ"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "äÏÂÁ×ÉÔØ Ë"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "õÄÁÌÉÔØ ÉÚ"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "óÏÈÒÁÎÉÔØ"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "ðÏÌÕÞÁÔÅÌØ:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "ëÏÍÍÅÎÔÁÒÉÊ:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "æÁËÓ-ÆÁÊÌ: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "ðÕÓÔÁÑ ÔÅÌÅÆÏÎÎÁÑ ËÎÉÇÁ"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "óÏÈÒÁÎÉÔØ (ÏÂÑÚÁÔÅÌØÎÏ)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÔÅÌÅÆÏÎÎÕÀ ËÎÉÇÕ: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "îÅÔ ÉÌÉ ÏÔÓÕÔÓÔ×ÕÅÔ ÖÕÒÎÁÌ!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "ïËÎÏ ÓÏÏÂÝÅÎÉÊ"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cðÕÓÔÁÑ ÔÅÌÅÆÏÎÎÁÑ ËÎÉÇÁ"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "ôÅÌÅÆÏÎÎÁÑ ËÎÉÇÁ"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Roman"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Sans serif"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "íÁÛÉÎÏÐÉÓÎÙÊ"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "óÉÍ×ÏÌ"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "îÁÓÌÅÄÏ×ÁÔØ"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "éÇÎÏÒÉÒÏ×ÁÔØ"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "óÒÅÄÎÉÊ"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "ðÏÌÕÖÉÒÎÙÊ"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "ðÒÑÍÏÊ"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "ëÕÒÓÉ×"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "îÁËÌÏÎÎÙÊ"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "÷ÓÅ ÐÒÏÐÉÓÎÙÅ"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "ëÒÏÈÏÔÎÙÊ"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "îÁÉÍÅÎØÛÉÊ"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "íÅÎØÛÉÊ"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "íÁÌÅÎØËÉÊ"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "îÏÒÍÁÌØÎÙÊ"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "âÏÌØÛÏÊ"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "âÏÌØÛÅ"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "îÁÉÂÏÌØÛÉÊ"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "ïÇÒÏÍÎÙÊ"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "ïÇÒÏÍÎÅÅ"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "õ×ÅÌÉÞÉÔØ"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "õÍÅÎØÛÉÔØ"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "ËÒÏÈÏÔÎÙÊ"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "ÎÁÉÍÅÎØÛÉÊ"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "ÍÅÎØÛÉÊ"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "ÍÁÌÅÎØËÉÊ"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "ÎÏÒÍÁÌØÎÙÊ"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "ÂÏÌØÛÏÊ"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "ÂÏÌØÛÅ"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "ÎÁÉÂÏÌØÛÉÊ"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "ÏÇÒÏÍÎÙÊ"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "ÏÇÒÏÍÎÅÅ"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "Õ×ÅÌÉÞÉÔØ"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "ÕÍÅÎØÛÉÔØ"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "ÎÁÓÌÅÄÏ×ÁÔØ"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ÉÇÎÏÒÉÒÏ×ÁÔØ"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "÷ÙËÌÀÞÉÔØ"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "÷ËÌÀÞÉÔØ"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "ðÅÒÅËÌÀÞÉÔØ"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "îÅÔ"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "þÅÒÎÙÊ"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "âÅÌÙÊ"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "ëÒÁÓÎÙÊ"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "úÅÌÅÎÙÊ"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "çÏÌÕÂÏÊ"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "óÉÎÉÊ"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "ðÕÒÐÕÒÎÙÊ"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "öÅÌÔÙÊ"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "íÁÔÅÍÁÔÉËÁ"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "÷ÓÔÁ×ËÁ"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "áËÃÅÎÔ "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "ðÏÄÞÅÒËÎÕÔØ "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "÷ÙÄÅÌÅÎÉÅ "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "Latex "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "ðÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ËÏÍÁÎÄÁ"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "ëÏÍÁÎÄÁ ÎÅÄÏÐÕÓÔÉÍÁ ÂÅÚ ÏÔËÒÙÔÙÈ ÄÏËÕÍÅÎÔÏ×"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "äÏËÕÍÅÎÔ ÄÏÓÔÕÐÅΠÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "ôÅËÓÔÏ×ÁÑ ÍÏÄÁ"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉРÜËÓÐÏÒÔÁ: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉРÉÍÐÏÒÔÁ: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "æÏÒÍÁÔ "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " ÎÅ ÉÚ×ÅÓÔÎÏ"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "îÅÔ ÐÅÒÅËÒÅÓÔÎÙÈ ÓÓÙÌÏË ÎÁ ÐÅÒÅËÌÀÞÁÔÅÌØ"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "íÅÔËÁ ÕÄÁÌÅÎÁ"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "íÅÔËÁ ÕÓÔÁÎÏ×ÌÅÎÁ"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "íÅÔËÁ ×ÙËÌÀÞÅÎÁ"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "íÅÔËÁ ×ËÌÀÞÅÎÁ"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "Push-ÐÁÎÅÌØ ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "óÉÎÔÁËÓÉÓ: toolbar-add-to <ËÏÍÁÎÄÁ LyX>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "ïÔÓÕÔÓÔ×ÕÅÔ ÁÒÇÕÍÅÎÔ"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "üÔÏ ÄÏÐÕÓÔÉÍÏ ÔÏÌØËÏ × ÍÁÔÅÍÁÔÉÞÅÓËÏÊ ÍÏÄÅ!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "ïÔËÒÙ×ÁÀ ÐÏÄÞÉÎÅÎÎÙÊ ÄÏËÕÍÅÎÔ "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉРÓÎÏÓÏË"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "äÏËÕÍÅÎÔ ÄÏÓÔÕÐÅΠÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "÷×ÅÄÉÔÅ ÉÍÑ ÆÁÊÌÁ ÄÌÑ ÎÏ×ÏÇÏ ÄÏËÕÍÅÎÔÁ"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "newfile"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"÷Ù ÈÏÔÉÔÅ ÚÁËÒÙÔØ ÜÔÏÔ ÄÏËÕÍÅÎÔ ÓÅÊÞÁÓ?\n"
+"('îÅÔ' ÐÒÏÓÔÏ ÐÅÒÅËÌÀÞÉÔ Ë ÏÔËÒÙÔÏÊ ×ÅÒÓÉÉ)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "÷Ù ÈÏÔÉÔÅ ÏÔËÒÙÔØ ÄÏËÕÍÅÎÔ?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "ïÔËÒÙ×ÁÀ ÄÏËÕÍÅÎÔ"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "ÏÔËÒÙÔ."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "÷ÙÂÅÒÉÔÅ ÛÁÂÌÏÎ"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "ðÒÉÍÅÒÙ"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "÷ÙÂÅÒÉÔÅ ÄÏËÕÍÅÎÔ ÄÌÑ ÏÔËÒÙÔÉÑ"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ÄÏËÕÍÅÎÔÁ"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "÷ÙÂÅÒÉÔÅ ASCII-ÆÁÊÌ ÄÌÑ ÉÍÐÏÒÔÁ"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "äÏËÕÍÅÎÔ ÐÏ ÉÍÅÎÉ"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ. ðÅÒÅÚÁÐÉÓÙ×ÁÔØ?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "éÍÐÏÒÔÉÒÕÀ ASCII-ÆÁÊÌ"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "ASCII-ÆÁÊÌ "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "ÉÍÐÏÒÔÉÒÏ×ÁÎ."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "÷ÙÂÅÒÅÔÅ Noweb-ÆÁÊÌ ÄÌÑ ÉÍÐÏÒÔÁ"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "÷ÙÂÅÒÅÔÅ LaTeX-ÆÁÊÌ ÄÌÑ ÉÍÐÏÒÔÁ"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "éÍÐÏÒÔÉÒÕÀ LaTeX-ÆÁÊÌ"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "éÍÐÏÒÔÉÒÕÀ Noweb-ÆÁÊÌ"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Noweb-ÆÁÊÌ "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "LaTeX-ÆÁÊÌ "
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÍÐÏÒÔÉÒÏ×ÁÔØ Noweb-ÆÁÊÌ"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÍÐÏÒÔÉÒÏ×ÁÔØ LaTeX-ÆÁÊÌ"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "÷ÙÂÅÒÉÔÅ ÄÏËÕÍÅÎÔ ÄÌÑ ×ÓÔÁ×ËÉ"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "÷ÓÔÁ×ÌÑÀ ÄÏËÕÍÅÎÔ"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "×ÓÔÁ×ÌÅÎ."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "ïÛÉÂËÁ ×ÓÔÁ×ËÉ ÄÏËÕÍÅÎÔÁ"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "ïÔËÒÙÔÁÑ ×ÓÔÁ×ËÁ"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "óÏÈÒÁÎÉÔØ ÄÏËÕÍÅÎÔ É ÐÒÏÄÏÌÖÁÔØ?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: ðÅÒ×ÏÎÁÞÁÌØÎÏÅ ÏÐÉÓÁÎÉÅ"
+
+#: src/lyxvc.C:184
+#, fuzzy
+msgid "(no initial description)"
+msgstr "LyX VC: ðÅÒ×ÏÎÁÞÁÌØÎÏÅ ÏÐÉÓÁÎÉÅ"
+
+#: src/lyxvc.C:187
+#, fuzzy
+msgid "Info"
+msgstr "éÇÎÏÒÉÒÏ×ÁÔØ"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr ""
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: óÏÏÂÝÅÎÉÅ ÄÌÑ ÖÕÒÎÁÌÁ"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "éÇÎÏÒÉÒÏ×ÁÔØ ×ÓÅ ÉÚÍÅÎÅÎÉÑ É ÚÁÌÉ×ÁÔØ?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "ëÏÇÄÁ ÷Ù ÏÔËÁÔÙ×ÁÅÔÅÓØ, ÔÅÒÑÀÔÓÑ ×ÓÅ ÉÚÍÅÎÅÎÉÑ"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "× ÄÏËÕÍÅÎÔ Ó ÍÏÍÅÎÔÁ ÐÏÓÌÅÄÎÅÊ ÚÁÌÉ×ËÉ."
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "÷Ù ×ÓÅ ÅÝÅ ÈÏÔÉÔÅ ÜÔÏ ÓÄÅÌÁÔØ?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "îÅÔ RCS-ÉÓÔÏÒÉÉ!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "RCS-ÉÓÔÏÒÉÑ"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "úÁËÒÙÔØ "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "æÕÎËÃÉÉ"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "çÒÅÞÅÓËÉÊ"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr "- Û"
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr "± ´"
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr "£ @"
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr "S  ò"
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "äÒÕÇÉÅ"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "ïë  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "ëÏÌÏÎËÉ "
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "÷ÅÒÔÉËÁÌØÎÏÅ ×ÙÒÁ×ÎÉ×ÁÎÉÅ"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "çÏÒÉÚÏÎÔÁÌØÎÏÅ ×ÙÒÁ×ÎÉ×ÁÎÉÅ"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "ïë "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "õÚËÉÊ"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "óÒÅÄÎÉÊ"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "ôÏÎËÉÊ"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "ïÔÒÉÃÁÔÅÌØÎÙÊ"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "þÅÔ×ÅÒÎÏÊ"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "ä×ÁÖÄÙÞÅÔ×ÅÒÎÏÊ"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "òÁÚÇÒÁÎÉÞÉÔÅÌØ"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "äÅËÏÒÁÃÉÑ"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "ðÒÏÍÅÖÕÔËÉ"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "íÁÔÒÉÃÁ"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "÷ÅÒÈ | ãÅÎÔÒ | îÉÚ"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "íÁÔÅÍÁÔÉÞÅÓËÁÑ ÐÁÎÅÌØ"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "æÁÊÌ"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "ðÒÁ×ËÁ"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "æÏÒÍÁÔ"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "÷ÓÔÁ×ËÁ"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "ðÏÍÏÝØ"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr ""
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr ""
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr ""
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr ""
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr ""
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr ""
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr ""
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr ""
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "ðÁÒÁÍÅÔÒÙ ÜËÒÁÎÁ"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"éÍÐÏÒÔ%t|LaTeX...%x30|Ascii-ÔÅËÓÔ ËÁË ÓÔÒÏËÉ...%x31|Ascii-ÔÅËÓÔ ËÁË "
+"ÁÂÚÁÃÙ%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"üËÓÐÏÒÔ%t|ËÁË LaTeX...%x40|ËÁË DVI...%x41|ËÁË PostScript...%x42|ËÁË "
+"Ascii-ÔÅËÓÔ...%x43|ðÏÌØÚÏ×ÁÔÅÌØÓËÉÊ...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"üËÓÐÏÒÔ%t|ËÁË LinuxDoc...%x40|ËÁË DVI...%x41|ËÁË PostScript...%x42|ËÁË "
+"Ascii-ÔÅËÓÔ...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"üËÓÐÏÒÔ%t|ËÁË LinuxDoc...%x40|ËÁË DVI...%x41|ËÁË PostScript...%x42|ËÁË "
+"Ascii-ÔÅËÓÔ...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr ""
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"óÏÚÄÁÔØ...|óÏÚÄÁÔØ ÐÏ ÛÁÂÌÏÎÕ...|ïÔËÒÙÔØ...%l|úÁËÒÙÔØ|óÏÈÒÁÎÉÔØ|óÏÈÒÁÎÉÔØ "
+"ËÁË...|÷ÅÒÎÕÔØÓÑ Ë ÓÏÈÒÁÎÅÎÎÏÍÕ%l|ðÒÏÓÍÏÔÒ dvi|ðÒÏÓÍÏÔÒ PostScript|ïÂÎÏ×ÉÔØ "
+"dvi|ïÂÎÏ×ÉÔØ PostScript|óÏÚÄÁÔØ ÐÒÏÇÒÁÍÍÕ%l|ðÅÞÁÔØ...|æÁËÓ..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr ""
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr ""
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr ""
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|éÍÐÏÒÔ%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|üËÓÐÏÒÔ%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|÷ÙÈÏÄ%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"éÍÐÏÒÔ%t|LaTeX...%x15|Ascii-ÔÅËÓÔ ËÁË ÓÔÒÏËÉ...%x16|Ascii-ÔÅËÓÔ ËÁË "
+"ÁÂÚÁÃÙ...%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "îÏ×ÙÊ...|îÏ×ÙÊ ÐÏ ÛÁÂÌÏÎÕ...|ïÔËÒÙÔØ...%l|éÍÐÏÒÔ%m%l|÷ÙÈÏÄ%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"ëÁÄÒÙ É ×ÓÔÁ×ËÉ%t|ïÔËÒÙÔØ/úÁËÒÙÔØ%x21|óÍÑÇÞÉÔØ%x22|ïÔËÒÙÔØ ×ÓÅ "
+"ÓÎÏÓËÉ/ÚÁÍÅÔËÉ ÎÁ ÐÏÌÑÈ%x23|úÁËÒÙÔØ ×ÓÅ ÓÎÏÓËÉ/ÚÁÍÅÔËÉ ÎÁ ÐÏÌÑÈ%x24|ïÔËÒÙÔØ "
+"×ÓÅ ÒÉÓÕÎËÉ/ÔÁÂÌÉÃÙ%x25|úÁËÒÙÔØ ×ÓÅ ÒÉÓÕÎËÉ/ÔÁÂÌÉÃÙ%x26%l|õÄÁÌÉÔØ ×ÓÅ "
+"ÓÏÏÂÝÅÎÉÑ Ï ÏÛÉÂËÁÈ%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "ôÁÂÌÉÃÁ%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|íÎÏÇÏËÏÌÏÎÏÞÎÙÊ%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|íÎÏÇÏËÏÌÏÎÏÞÎÙÊ%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|÷ÅÒÈ ÓÔÒÏËÉ%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|÷ÅÒÈ ÓÔÒÏËÉ%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|îÉÚ ÓÔÒÏËÉ%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|îÉÚ ÓÔÒÏËÉ%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|ìÅ×ÁÑ ÞÁÓÔØ ÓÔÒÏËÉ%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|ìÅ×ÁÑ ÞÁÓÔØ ÓÔÒÏËÉ%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|ðÒÁ×ÁÑ ÞÁÓÔØ ÓÔÒÏËÉ%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|ðÒÁ×ÁÑ ÞÁÓÔØ ÓÔÒÏËÉ%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|÷ÙÒÁ×ÎÉ×ÁÎÉÅ ×ÌÅ×Ï%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|÷ÙÒÁ×ÎÉ×ÁÎÉÅ ×ÌÅ×Ï%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr ""
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|÷ÙÒÁ×ÎÉ×ÁÎÉÅ ×ÐÒÁ×Ï%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|÷ÙÒÁ×ÎÉ×ÁÎÉÅ ×ÐÒÁ×Ï%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr ""
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|ãÅÎÔÒÏ×ËÁ%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|ãÅÎÔÒÏ×ËÁ%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|äÏÂÁ×ÉÔØ ÓÔÒÏËÕ%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr ""
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|äÏÂÁ×ÉÔØ ËÏÌÏÎËÕ%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr ""
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|õÄÁÌÉÔØ ÓÔÒÏËÕ%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr ""
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|õÄÁÌÉÔØ ËÏÌÏÎËÕ%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr ""
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|õÄÁÌÉÔØ ÔÁÂÌÉÃÕ%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|÷ÓÔÁ×ÉÔØ ÔÁÂÌÉÃÕ%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "ëÏÎÔÒÏÌØ ×ÅÒÓÉÊ%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|úÁÒÅÇÉÓÔÒÉÒÏ×ÁÔØ%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|÷ÌÉÔØ ÉÚÍÅÎÅÎÉÑ%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|úÁÈ×ÁÔÉÔØ ÎÁ ÒÅÄÁËÃÉÀ%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|÷ÌÉÔØ ÉÚÍÅÎÅÎÉÑ%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|úÁÈ×ÁÔÉÔØ ÎÁ ÒÅÄÁËÃÉÀ%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|ïÔËÁÔÉÔØÓÑ Ë ÐÏÓÌÅÄÎÅÊ ×ÅÒÓÉÉ%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|ïÔÍÅÎÉÔØ ÐÏÓÌÅÄÎÀÀ ÚÁÌÉ×ËÕ%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|ðÏËÁÚÁÔØ ÉÓÔÏÒÉÀ%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|úÁÒÅÇÉÓÔÒÉÒÏ×ÁÔØ%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr ""
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"ïÔÍÅÎÉÔØ ÐÏÓÌÅÄÎÅÅ ÄÅÊÓÔ×ÉÅ|ðÏ×ÔÏÒÉÔØ ÏÔÍÅÎÅÎÎÏÅ ÄÅÊÓÔ×ÉÅ "
+"%l|÷ÙÒÅÚÁÔØ|ëÏÐÉÒÏ×ÁÔØ|÷ÓÔÁ×ÉÔØ%l|îÁÊÔÉ É ÚÁÍÅÎÉÔØ...|ðÅÒÅÊÔÉ Ë "
+"ÏÛÉÂËÅ|ðÅÒÅÊÔÉ Ë ÐÒÉÍÅÞÁÎÉÀ|ëÁÄÒÙ É "
+"×ÓÔÁ×ËÉ%m|ôÁÂÌÉÃÁ%m|ïÒÆÏÇÒÁÆÉÑ....|ðÒÏ×ÅÒÉÔØ TeX|óÏÄÅÒÖÁÎÉÅ...%l|ëÏÎÔÒÏÌØ "
+"×ÅÒÓÉÊ%m%l|ðÏÓÍÏÔÒÅÔØ ÖÕÒÎÁÌ LaTeX%l|÷ÓÔÁ×ÉÔØ ÐÅÒ×ÉÞÎÏÅ ×ÙÄÅÌÅÎÉÅ ËÁË "
+"ÓÔÒÏËÉ|÷ÓÔÁ×ÉÔØ ÐÅÒ×ÉÞÎÏÅ ×ÙÄÅÌÅÎÉÅ ËÁË ÁÂÚÁÃÙ"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr ""
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr ""
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"ûÒÉÆÔ...|áÂÚÁÃ...|äÏËÕÍÅÎÔ...|âÕÍÁÇÁ...|ôÁÂÌÉÃÁ...|ãÉÔÁÔÁ...%l|óÔÉÌØ "
+"ÁËÃÅÎÔÁ%b|óÔÉÌØ ×ÙÄÅÌÅÎÉÑ%b|ðÏÌÕÖÉÒÎÙÊ ÓÔÉÌØ%b|óÔÉÌØ TeX%b|éÚÍÅÎÉÔØ ÕÒÏ×ÅÎØ "
+"ÏËÒÕÖÅÎÉÑ|ðÒÅÁÍÂÕÌÁ LaTeX...%l|óÏÈÒÁÎÉÔØ ÆÏÒÍÁÔ ËÁË ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr ""
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr ""
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr ""
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr ""
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr ""
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "éÍÐÏÒÔÉÒÏ×ÁÔØ ASCII-ÆÁÊÌ%t|ëÁË ÓÔÒÏËÉ%x41|ëÁË ÁÂÚÁÃÙ%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"óÐÉÓËÉ É ÓÏÄÅÒÖÁÎÉÅ%t|óÏÄÅÒÖÁÎÉÅ%x21|óÐÉÓÏË ÒÉÓÕÎËÏ×%x22|óÐÉÓÏË "
+"ÔÁÂÌÉÃ%x23|óÐÉÓÏË ÁÌÇÏÒÉÔÍÏ×%x24|óÐÉÓÏË ÉÎÄÅËÓÏ×%x25|óÓÙÌËÉ BibTeX%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"ëÁÄÒÙ%t|ëÁÄÒ-ÒÉÓÕÎÏË%x71|ëÁÄÒ-ÔÁÂÌÉÃÁ%x72|ûÉÒÏËÉÊ ËÁÄÒ-ÒÉÓÕÎÏË%x73|ûÉÒÏËÉÊ "
+"ËÁÄÒ-ÔÁÂÌÉÃÁ%l%x74|ëÁÄÒ-ÁÌÇÏÒÉÔÍ%x75"
+
+#. }
+#: src/menus.C:1204
+msgid "IMF|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr ""
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"óÐÅÃÓÉÍ×ÏÌÙ%t|çÏÒÉÚÏÎÔÁÌØÎÙÊ ËÌÅÊ%x31|íÑÇËÉÊ ÐÅÒÅÎÏÓ%x32|îÅÒÁÚÒÙ×ÎÙÊ "
+"ÐÒÏÂÅÌ%x33|òÁÚÒÙ× ÓÔÒÏËÉ%x34|óËÏÂËÉ (...)%x35|ôÏÞËÁ ËÏÎÃÁ "
+"ÐÒÅÄÌÏÖÅÎÉÑ%x36|ïÂÙÞÎÁÑ ËÁ×ÙÞËÁ (\")%x37|òÁÚÄÅÌÉÔÅÌØ ÍÅÎÀ"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr ""
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"òÉÓÕÎÏË...|ôÁÂÌÉÃÁ...%l|æÁÊÌ...|ASCII-ÆÁÊÌ%m|LyX-ÆÁÊÌ...%l|óÎÏÓËÁ|ðÒÉÍÅÞÁÎÉÅ "
+"ÎÁ ÐÏÌÑÈ|ëÁÄÒ%m%l|óÐÉÓËÉ É "
+"ÓÏÄÅÒÖÁÎÉÑ%m%l|óÐÅÃÓÉÍ×ÏÌ%m%l|ðÒÉÍÅÞÁÎÉÅ...|íÅÔËÁ...|ðÅÒÅËÒÅÓÔÎÁÑ "
+"ÓÓÙÌËÁ...|óÓÙÌËÁ ÎÁ ÃÉÔÁÔÕ...|üÌÅÍÅÎÔ ÉÎÄÅËÓÁ...|ðÏÓÌÅÄÎÅÅ ÓÌÏ×Ï ÉÎÄÅËÓÁ"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr ""
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr ""
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr ""
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr ""
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr ""
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|óÓÙÌËÁ × éÎÔÅÒÎÅÔ (URL)"
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"äÒÏÂØ|ë×ÁÄÒÁÔÎÙÊ ËÏÒÅÎØ|üËÓÐÏÎÅÎÔÁ|éÎÄÅËÓ|óÕÍÍÁ|éÎÔÅÇÒÁÌ%l|íÁÔÅÍÁÔÉÞÅÓËÁÑ "
+"ÍÏÄÁ|÷ÙÄÅÌÉÔØ%l|íÁÔÅÍÁÔÉÞÅÓËÁÑ ÐÁÎÅÌØ..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr ""
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"üËÒÁÎÎÙÅ ÛÒÉÆÔÙ...|ðÁÒÁÍÅÔÒÙ "
+"ÏÒÆÏÇÒÁÆÉÉ...|ëÌÁ×ÉÁÔÕÒÁ...|LaTeX...%l|ðÅÒÅËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr ""
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"÷×ÅÄÅÎÉÅ|ðÕÔÅ×ÏÄÉÔÅÌØ|òÕËÏ×ÏÄÓÔ×Ï ÐÏÌØÚÏ×ÁÔÅÌÑ|äÏÐÏÌÎÉÔÅÌØÎÙÅ "
+"×ÏÚÍÏÖÎÏÓÔÉ|îÁÓÔÒÏÊËÁ|óÐÉÓÏË ÓÓÙÌÏË|éÚ×ÅÓÔÎÙÅ ÏÛÉÂËÉ|ëÏÎÆÉÇÕÒÁÃÉÑ "
+"LaTeX%l|á×ÔÏÒÓËÉÅ ÐÒÁ×Á É ÇÁÒÁÎÔÉÉ...|á×ÔÏÒÙ...|÷ÅÒÓÉÑ..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr ""
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr ""
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr ""
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr ""
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr ""
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr ""
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr ""
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr ""
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr ""
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "LyX ×ÅÒÓÉÉ "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " ÏÔ "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "ëÁÔÁÌÏÇ ÂÉÂÌÉÏÔÅË: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "ðÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ËÁÔÁÌÏÇ: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "ïÔËÒÙ×ÁÀ ÆÁÊÌ ÐÏÍÏÝÉ"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "éÓÐÏÌÎÑÀ:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* îÅÔ ÏÔËÒÙÔÙÈ ÄÏËÕÍÅÎÔÏ× *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "äÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ × LyX!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "âÅÓÓÍÙÓÌÅÎÎÏ × ÜÔÏÍ ÆÏÒÍÁÔÅ!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "ïÛÉÂËÁ ÐÒÉ ÐÏÐÙÔËÅ ÉÚÍÅÎÉÔØ ÔÅËÕÝÉÊ ËÁÔÁÌÏÇ ÎÁ: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ LyX:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "îÅÄÏÇÒÕÚËÁ ÐÕÔÉ ÓÔÅËÁ."
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "ðÅÞÁÔØ ×"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr ""
+"ðÒÉÎ-\n"
+"ÔÅÒ"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "æÁÊÌ"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "÷ÓÅ ÓÔÒÁÎÉÃÙ"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "îÅÞÅÔÎÙÅ ÓÔÒ."
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "þÅÔÎÙÅ ÓÔÒ."
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "îÏÒÍÁÌØÎÙÊ"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "ïÂÒÁÔÎÙÊ"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "ðÏÒÑÄÏË"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "óÔÒ.:"
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "ëÏÐÉÉ"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "ëÏÌ-×Ï:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "îÅÕÐÏÒÑÄÏÞÅÎÎÏ"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "ôÉРÆÁÊÌÁ"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "ëÏÍÁÎÄÁ:"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "Postscript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#s"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "éÓÐÏÌØÚÕÊÔÅ ÑÚÙË ÄÏËÕÍÅÎÔÁ"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "éÓÐÏÌØÚÕÊÔÅ ÁÌØÔÅÒÎÁÔÉ×ÎÙ ÑÚÙË:"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "äÏÐÕÓËÁÔØ ÓÄ×ÏÅÎÎÙÅ ÓÌÏ×Á"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "éÓÈÏÄÎÁÑ ËÏÄÉÒÏ×ËÁ ispell"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÄÒÕÇÏÊ ËÁÔÁÌÏÇ:"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "äÏÐÏÌÎÉÔÅÌØÎÙÅ ÓÐÅÃ-ÓÉÍ×ÏÌÙ:"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "óÌÏ×ÁÒØ"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "úÁÍÅÎÉÔØ"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr "÷ÁÒÉÁÎÔÙ"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "ðÁÒÁÍÅÔÒÙ ÏÒÆÏÇÒÁÆÉÉ..."
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "ðÒÏ×ÅÒÑÔØ ÏÒÆÏÇÒÁÆÉÀ"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "÷ÓÔÁ×ÉÔØ × ÌÉÞÎÙÊ ÓÌÏ×ÁÒØ"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "éÇÎÏÒÉÒÏ×ÁÔØ ÓÌÏ×Ï"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "äÏÐÕÓÔÉÔØ × ÜÔÏÊ ÓÅËÃÉÉ"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "ïÓÔÁÎÏ×ÉÔØ ÐÒÏ×ÅÒËÕ"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "úÁËÒÙÔØ ÏÒÆÏÇÒÁÆÉÀ"
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "úÁÍÅÎÉÔØ ÓÌÏ×Ï"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "ðÁÒÁÍÅÔÒÙ ÏÒÆÏÇÒÁÆÉÉ"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "ðÒÏ×ÅÒËÁ ÏÒÆÏÇÒÁÆÉÉ"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"ðÒÏÃÅÓÓ ispell ÐÏÞÅÍÕ-ÔÏ ÕÍÅÒ. ïÄÎÁ ÉÚ ×ÏÚÍÏÖÎÙÈ ÐÒÉÞÉÎ\n"
+"ÓÏÓÔÏÉÔ × ÔÏÍ, ÞÔÏ Õ ×ÁÓ ÎÅ ÕÓÔÁÎÏ×ÌÅΠÓÌÏ×ÁÒØ ÄÌÑ\n"
+"ÑÚÙËÁ ÜÔÏÇÏ ÄÏËÕÍÅÎÔÁ.\n"
+"ðÒÏ×ÅÒØÔÅ /usr/lib/ispell ÉÌÉ ÕÓÔÁÎÏ×ÉÔÅ ÄÒÕÇÏÊ\n"
+"ÓÌÏ×ÁÒØ × ÐÁÒÁÍÅÔÒÁÈ ÏÒÆÏÇÒÁÆÉÉ."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " ÓÌÏ× ÐÒÏ×ÅÒÅÎÏ."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " ÓÌÏ×Ï ÐÒÏ×ÅÒÅÎÏ."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "ðÒÏ×ÅÒËÁ ÏÒÆÏÇÒÁÆÉÉ ÏËÏÎÞÅÎÁ!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"ðÒÏÃÅÓÓ ispell ÐÏÞÅÍÕ-ÔÏ ÕÍÅÒ.\n"
+"÷ÏÚÍÏÖÎÏ, ËÔÏ-ÔÏ ÅÇÏ ÕÂÉÌ."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "íÎÏÇÏËÏÌÏÎÏÞÎÏÓÔØ ÍÏÖÅÔ ÂÙÔØ ÔÏÌØËÏ ÇÏÒÉÚÏÎÔÁÌØÎÏÊ."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ××ÏÄÉÔØ ÐÒÏÂÅÌÙ ÔÁËÉÍ ÏÂÒÁÚÏÍ (ÓÍ. ðÏÍÏÝØ|ðÕÔÅ×ÏÄÉÔÅÌØ)."
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+"÷Ù ÎÅ ÍÏÖÅÔÅ ×ÓÔÁ×ÌÑÔØ ÐÒÏÂÅÌ × ÎÁÞÁÌÅ ÁÂÚÁÃÁ (ÓÍ. ðÏÍÏÝØ|ðÕÔÅ×ÏÄÉÔÅÌØ)."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ÏÐÅÒÁÃÉÑ"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ×ÓÔÁ×ÉÔØ ËÁÄÒ × ËÁÄÒ!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "÷Ù ÎÅ ÍÏÖÅÔÅ ×ÓÔÁ×ÉÔØ ÐÁÒÁÇÒÁÆ-ÏÔÓÔÕРנÍÉÎÉ-ÓÔÒÁÎÉÃÕ!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÒÅÚÁÔØ ÔÁÂÌÉÃÕ."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "ëÁÄÒ ÄÏÌÖÅΠ×ËÌÀÞÁÔØ ËÁÄÒ!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "ïÔËÒÙÔÙÊ ËÁÄÒ"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "úÁËÒÙÔÙÊ ËÁÄÒ"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "äÅÌÁÔØ ÎÅÞÅÇÏ"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"îÅ ÏÐÒÅÄÅÌÅΠÛÒÉÆÔ ÉÚÍÅÎÅÎÉÊ. éÓÐÏÌØÚÕÊÔÅ 'æÏÒÍÁÔ->óÉÍ×ÏÌÙ'\n"
+"ÄÌÑ ÏÐÒÅÄÅÌÅÎÉÑ ÛÒÉÆÔÁ ÉÚÍÅÎÅÎÉÊ"
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "îÅ ÚÎÁÀ ÞÔÏ ÄÅÌÁÔØ Ó ÐÏÌÏ×ÉÎÏÊ ËÁÄÒÁ."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "ÉÚ×ÉÎÉÔÅ."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "îÅ ÚÎÁÀ ÞÔÏ ÄÅÌÁÔØ Ó ÐÏÌÏ×ÉÎÏÊ ÔÁÂÌÉÃÙ."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "úÁÐÒÅÝÁÅÔÓÑ ËÏÐÉÒÏ×ÁÔØ ËÁÄÒ × ËÁÄÒ!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "ñÞÅÊËÁ ÔÁÂÌÉÃÙ ÎÅ ÍÏÖÅÔ ×ËÌÀÞÁÔØ ÂÏÌÅÅ ÏÄÎÏÇÏ ÁÂÚÁÃÁ!"
diff --git a/po/sl.po b/po/sl.po
new file mode 100644 (file)
index 0000000..20f956c
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,4829 @@
+# Slovenski prevodi menujev za LyX.
+# Copyright (C) 1999, The LyX team.
+# Roman Maurer <roman.maurer@fmf.uni-lj.si>, 1999.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: LyX 1.0.3pre2\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:54+02:00\n"
+"Last-Translator:  Roman Maurer <roman.maurer@fmf.uni-lj.si>\n"
+"Language-Team: Slovenian <sl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Urejam spis..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Niè veè napak"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "Opozorilo ChkTeXa #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Nalagam pisavo v stre¾nik X..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Tek #"
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "Tek LaTeXa ¹tevilka "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Poganjam MakeIndex."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Poganjam BibTeX."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "NI DNEVNIKA LATEXA!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "Zgradi dnevnik programa"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "Dnevnik LaTeXa"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Opi¹i ukaz"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Izberi prej¹nji znak"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Vstavi bibtex"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Sámoshranjevanje"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Pojdi na zaèetek spisa"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Izberi do zaèetka spisa"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Zapri"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Pojdi na konec spisa"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Izberi do konca spisa"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Faks"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Novi spis"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Novi spis po vzorcu"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Odpri"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Zamenjaj s prej¹njim spisom"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Tiskaj"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Vrni se k shranjenemu"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Osve¾i DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Osve¾i PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Poglej DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Poglej PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "Zgradi program"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Preveri TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Shrani"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Shrani kot"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Preklièi"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Vrni se za en znak"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Napreduj za en znak"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Vnesi citat"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Izvedi ukaz"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Kopiraj"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Izre¾i"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Zmanj¹aj globino okolja"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Poveèaj globino okolja"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Spremeni globino okolja"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Spremeni nastavitve pike pri na¹tevanju"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Pojdi dol"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Izberi naslednjo vrstico"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Izberi okolje odstavka"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Pojdi na naslednjo napako"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Vstavi sliko"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Poi¹èi in zamenjaj"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Spremeni (ne)sledenje kurzorja pomiènici"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Spremeni polkrepkost"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Spremeni stil kode"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Privzeti stil pisave"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Spremeni poudarjenost"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Spremeni uporabni¹ko definirani stil"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Spremeni stil velikih èrk"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Spremeni stil pokonène pisave"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Spremeni stil pisave brez serifov"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Doloèi velikost pisave"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Poka¾i stanje pisave"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Spremeni podèrtanje pisave"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Vstavi opombo pod èrto"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Izberi naslednji znak"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Vstavi vodoravno polnitev"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Vstavi mesto delitve"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Vstavi ... pike"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Vstavi piko za konec stavka"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Izkljuèi preslikavo tipk"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Uporabi primarni polo¾aj tipk??"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Uporabi sekundarni polo¾aj tipk??"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Spremeni polo¾aj tipk"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Vstavi oznako"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Kopiraj tip okolja odstavka"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Prilepi tip okolja odstavka"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Doloèi velikost papirja in robove"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Pojdi na zaèetek vrstice"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Izberi do zaèetka vrstice"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Pojdi na konec vrstice"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Izberi do konca vrstice"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Izhod"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Vstavi opombo na robu"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Matematièna gr¹èina"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Matematièni naèin"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Pojdi odstavek navzdol"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Izberi naslednji odstavek"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Pojdi odstavek navzgor"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Izberi prej¹nji odstavek"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Prilepi"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Vstavi za¹èiteni presledek"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Vstavi narekovaj"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Ponovna ukrojitev"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Ponovi"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Vstavi navzkri¾no referenco"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Vstavi tabelo"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "Spremeni stil TeXa"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Razveljavi"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Stopi"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Uvozi spis"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Odstrani vse ¹katle z napakami"
+
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Vstavi loènico med menuji"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Ni dostopnega opisa!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Po¹lji spis ukazu"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Spremenjeno)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (le za branje)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Spis je le za branje.  Spremembe izgleda niso dovoljene."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Naèrt papirja"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Nastavi naèrt papirja"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Pozor: Neprava dol¾ina (veljaven primer: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Naèrt OdstavkaEkstra"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Nastavi naèrt OdstavkaEkstra"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Pozor: Neprava vrednost v odstotkih (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Posebna oblika tabele"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Naèrt tabele"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Pozor: Napaèen polo¾aj kazalca, osve¾eno okno"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Potrditev: ponovno pritisnite tipko Delete"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Napaka!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Ne morem odpreti izbrane datoteke:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Napaka pri nalaganju besedilnega razreda!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Ne morem nalo¾iti besedilnega razreda "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- zamenjana privzeta vrednost"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Opozorilo: Ignoriram stari vstavek"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Pozor: potreben format LyXa %.2f, a najden %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "NAPAKA: potreben format LyXa %.2f, a najden %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Pozor!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Branje spisa ni dokonèano"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Morda je spis odrezan"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "NAPAKA!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "Najden stari format datoteke. Uporabite LyX 0.10.x za branje tega!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Ni datoteka za LyX!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Ne morem brati datoteke!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Napaka! Datoteko lahko le berem: "
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Napaka! Ne morem zapisati datoteke: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Napaka! Ne morem pravilno zapreti datoteke: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Napaka: Ne morem zapisati datoteke:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Napaka: Ne morem odpreti zaèasne datoteke:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Napaka! Ne morem pravilno zapreti datoteke:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "NAPAKA_LYXA:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Ne morem zapisati datoteke"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Napaka : Napaèna globina za ukaz LatexType.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "Poganjam LaTeX..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX ni deloval!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Manjka datoteka z dnevnikom:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Opravljeno"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Poganjam Literate..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "Ukaz Literate ni deloval!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Gradim program..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "Gradnja ni delovala!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Poganjam chktex..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex ni deloval!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Ne morem pognati z datoteko:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Ne morem odpreti zaèasne datoteke:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Napaka! Ne morem odpreti zaèasne datoteke:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Napaka pri izvajanju ukaza *roff na tabeli"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Nemogoèa operacija!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Ne morem vstaviti tabele/seznama v tabelo."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "®al."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Spremembe v spisu:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Shranim spis?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Nekateri spisi niso bili shranjeni:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Grem vseeno ven?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Shranjujem spis"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Spis shranjen kot"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Ne morem pobrisati samodejno shranjene datoteke!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Shranjevanju je spodletelo!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Ni odprtih spisov!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Posku¹am shraniti spis "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " kot..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "  Shranjevanje se zdi uspe¹no. Pih."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr "  Shranjevanju je spodletelo! Posku¹am..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  Shranjevanju je spodletelo! Ojoj. Spis je izgubljen."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Obstaja zasilna kopija tega spisa!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Posku¹am raje nalo¾iti to?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Sámoshranjena datoteka je novej¹a."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Nalo¾im raje njo?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Ne morem odpreti vzorca"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Ne morem pretvoriti datoteke"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Spis je ¾e odprt:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "®elite ponovno nalo¾iti ta spis?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Datoteka `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' je le za branje."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Ustvarim nov spis s tem imenom?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Velikost|#z"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "V redu"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Uporabi|#A"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Preklièi|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Globina pike"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standardno|#S"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matematika|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "®al, va¹a knji¾nica Xpm je prestara."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Ta odlika potrebuje xpm-4.7 (znan kot 3.4g) ali novej¹ega."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Poskusite pognati LyX v dvobarvnem naèinu (lyx -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" privzete | drobne | indeks | opazka | majhne | normalne | velike | Velike | "
+"VELIKE | ogromne | Ogromne"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Izbira pike v seznamih"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "NAPAKA: LyX ni mogel prebrati datoteke CREDITS"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Prosim namestite ga pravilno, da boste ocenili veliko"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "kolièino dela, ki so ga drugi ljudje prispevali k projektu LyX."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Zasluge"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Pravice raz¹irjanja in jamstvo"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Vsi ti ljudje so prispevali k projektu LyX. Hvala,"
+
+#: src/credits_form.C:50
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX je za¹èitil (C) 1995 Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Ta program spada med prosto programje; lahko ga raz¹irjate\n"
+"in/ali spreminjate pod pogoji GNU-jevkse splo¹ne licence (GPL)\n"
+"kot jo je objavila ustanova Free Software Foundation; bodisi\n"
+"pod razlièico 2 te Licence, ali (po va¹i izbiri) katerokoli\n"
+"poznej¹o razlièico."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX se raz¹irja v upanju, da bo uporaben,\n"
+"vendar BREZ VSAKEGA JAMSTVA; tudi brez\n"
+"implicitnega jamstva VREDNOSTI SVOJE CENE\n"
+"ali PRIMERNOSTI ZA DOLOÈEN NAMEN.\n"
+"Za veè podrobnosti glejte GNU-jevsko splo¹no\n"
+"licenco (GNU General Public License, GPL).\n"
+"Poleg tega programa bi morali prejeti izvod\n"
+"licence GNU General Public License v angle¹èini;\n"
+"èe ga niste, pi¹ite na naslov:\n"
+"Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[napaka pri upodabljanju]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[upodabljam ... ]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[ni datoteke]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[ni prikazano]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[ni ghostscripta]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[neznana napaka]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Slika"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "prazna pot do slike"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Izrezek"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Spis"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "Slika EPS"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Ime datoteke ne sme vsebovati teh znakov:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "presledek, '#', '~', '$' ali '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Pozor! Ne morem odpreti imenika."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "Notranja napaka LyXa!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Ne morem preveriti, ali je dovoljeno pisati v imenik"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Ne morem odpreti preizkusne datoteke v imeniku"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Ustvarjena preizkusna datoteka, a je ne morem odstraniti?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Napaka! Ne morem odpreti imenika:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Napaka! Ne morem odstraniti datoteke:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Napaka! Ne morem ustvariti zaèasnega imenika:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Napaka! Ne morem odstraniti zaèasnega imenika:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Notranja napaka!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Klic funkcije 'createDirectory' z napaènim imenom"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Napaka! Ne morem ustvariti imenika:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Nastavi znakovni nabor|#C"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Ne najdem znakovnega nabora!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Napaka:\n"
+"\n"
+"Polo¾aj tipk\n"
+"ni najden"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Znakovni nabor:|#H"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Drugo...|#O"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Drugo...|#T"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Jezik"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Preslikava"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Prvotni polo¾aj tipk|#r"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Brez preslikave tipk|#N"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Drugotni polo¾aj tipk|#e"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Drugotni"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Prvotni"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "Datoteka EPS|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Popolni predogled|#v"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Brkljaj...|#B"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Prika¾i okvir|#F"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Izvedi preslikave|#r"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Izbire"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Kot:|#L"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% strani|#g"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Privzeto|#t"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "palcev|#h"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Zaslon"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Vi¹ina"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "©irina"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Zavrtitev"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Prika¾i v barvi|#D"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Ne prika¾i te slike|#y"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Prika¾i v sivini|#i"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Prika¾i èrnobelo|#s"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Privzeto|#U"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#c"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "palcev|#n"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% strani|#P"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% stolpca|#o"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Pojasnilo|#k"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Podslika|#q"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Imenik:|#D"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Vzorec:|#P"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Ime datoteke:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Prebrskaj|#R#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Domaèi imenik|#H#h"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Uporabnik1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Uporabnik2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Stolpci"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Vrstice"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "I¹èi|#n"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Nadomesti z|#W"
+
+#: src/form1.C:331
+#, fuzzy
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+#, fuzzy
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Nadomesti|#R#r"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Zapri|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Loèi velike in male èrke|#s#S"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Ujemanje besede|#M#m"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Nadomesti vse|#V#v"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Naèin matematiène gr¹èine vkljuèen"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Tipkovnica za matematièno gr¹èino vkljuèena"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Tipkovnica za matematièno gr¹èino izkljuèena"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "Naèin TeX"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Brez ¹tevilke"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "©tevilka"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Vnesite novo oznako za vstavitev:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "matematièni tekstovni naèin"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Nepravilna operacija v matematiènem naèinu!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Naèin matematiènega urejanja"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Makroukaz: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Kljuè:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Opomba:|#R"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Kljuè:|#K"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Oznaka:|#L"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Citat"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Postavka literature"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Reference, generirane z BibTeXom"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Baza podatkov:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Stil:  "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Napaka"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "Napaka LaTeXa"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Odprta napaka"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Brkljaj|#B"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Ne stavi|#D"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Nalo¾i|#L"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Ime datoteke:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Vidni presledek|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Dobesedno|#V"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Uporabi vhod|#i"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Uporabi vkljuèitev|#U"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Spisi"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Izberi podrejeni spis"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Vkljuèi"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Vhod"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Dobesedni vhod"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Kljuèna beseda:|#K"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Stvarno kazalo"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Stvarno kazalo"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Stvarno kazalo"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Opomba"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Zapri|#Z^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Seznam algoritmov"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Seznam slik"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Seznam tabel"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Nadrejeni:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Tip reference"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Pojdi na oznako"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Spremeni oznako"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "©tevilka strani"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Referenca"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Stran: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Ref: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Vsebinsko kazalo"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "Url|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Ime|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Zapri|#Z^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "Tip HTML|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Vstavi Url"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtmlUrl: "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Url: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "drugo..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Polo¾aji tipk"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "  izbire: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Dovoli akcente na VSEH znakih|#w"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Osve¾i|#Uu"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX ni mogel najti svojih opisov izgleda!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Preverite, da je datoteka \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "pravilno name¹èena. ®al, moram iti ven :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX ni mogel najti nobenih opisov izgleda"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Preverite vsebino datoteke \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "®al, moram iti ven :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Separacija"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Zamik|#i"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Preskok|#P"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Razred:|#R"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Stil strani:|#P"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Pisave:|#F"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Velikost pisave:|#O"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Postavitev plovk:|#L"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "Gonilnik za PS:|#S"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Kodiranje:|#D"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Ena|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Dve|#T"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Strani"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Ena|#e"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Dve|#w"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Dodatne izbire:|#X"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Jezik:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Privzeti preskok:|#u"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Globina ¹tevilk razdelkov"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Globina kazala vsebine"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Razmiki|#g"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Oblike pik|#B"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "Uporabi matematiko AMS|#M"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Dru¾ina:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Vrsta:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Oblika:|#H"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Velikost:|#Z"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Razno:|#M"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Barva:|#B"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Vklopi vse te|#T"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Ti se nikoli ne preklopijo"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Ti se vedno preklopijo"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "©irina oznake:|#d"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Zamik"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Zgoraj|#b"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Spodaj|#E"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Zgoraj|#o"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Spodaj|#l"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Brez zamika|#I"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Desno|#R"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Levo|#l"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Blok|#c"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Sredina|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Zgoraj:|#v"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Spodaj:|#w"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Prelomi strani"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Èrte"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Poravnava"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Vertikalni presledki"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Dodatne izbire|#X"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Ohrani|#K"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Ohrani|#p"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "V redu|#r"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Tip:|#T"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Enojni|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Dvojni|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Besedilo"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Posebno:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Robovi"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Robovi noge/glave"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Usmeritev"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Pokonèno|#o"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Preèno|#L"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Velikost papirja:|#P"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Uporabni¹ka velikost papirja"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Uporabi paket Geometry|#U"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "©irina:|#W"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Vi¹ina:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Zgoraj:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Spodaj:|#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Levo:|#e"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Desno:|#R"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Vi¹ina glave:|#i"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Loèitev glave:|#d"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Preskok noge:|#F"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Meje"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Zgoraj|#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Spodaj|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Levo|#L"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Posebna celica"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Veèstolpèna|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Dodaj stolpec|#A"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Odstrani stolpec|#O"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Dodaj vrsto|#p"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Odstrani vrsto|#w"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Odstrani tabelo|#D"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Stolpec"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Vrsta"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Nastavi meje|#S"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Iznièi meje|#U"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Dolga tabela"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Zavrti 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Prelomi vrstic|#N"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Posebna tabela"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Prva glava"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Glava"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Noga"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Zadnja noga"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Nova stran"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Zavrti 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Dodatno|#X"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Levo|#e"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Desno|#i"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Sredina|#S"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Dodatne izbire"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Dol¾ina|#L"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "ali %|#o"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Sredina|#d"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "HFill med odstavki ministrani"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Zaèni novo ministran"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Zamaknjen odstavek|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Ministran|#M"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Floatflt|#F"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Posebna veèstolpèna poravnava"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Posebna stolpèna poravnava"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Enkapsuliran PostScript (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Vkljuèeni EPS (*.eps, *.ps)|#I"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Tip"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Pokonèna pisava|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Pisava brez serifov|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Pisava pisalnega stroja|#T"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Kodna tabela|#N"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Poveèava pisave|#Z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Osve¾i|Uu#u"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Osve¾i|#U"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Vstavi referenco|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Vstavi ¹tevilko strani|#P"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Pojdi na referenco|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Shranjevanju spodletelo. Preimenujem in poskusim ponovno?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Sicer spis ne bo shranjen.)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Vzorci"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Vnesite ime datoteke pod katerim naj shranim spis"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Preklicano."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Isto ime kot spis ¾e ima:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Vseeno shranim?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Odprt je drug spis z enakim imenom!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Nadomestim s trenutnim spisom?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Spis preimenovan v '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', vendar ni shranjen..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Spis ¾e obstaja:"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Nadomestim datoteko?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "®al, tega ne morem storiti med upodabljanjem slik."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Prosim, poèakajte nekaj sekund, da se to konèa, in poskusite ponovno."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(ali roèno pobijte pobegli proces gs in poskusite ponovno)."
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Tega ne morem storiti med tekom èrkovalnika."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Najprej ustavite èrkovalnik."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Zaznana ena napaka"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Morali bi jo poskusiti odpraviti."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " zaznanih napak."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Morali bi jih poskusiti odpraviti."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "Med tekom LaTeXa so bile napake."
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Napaèen tip spisa"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "Operacija grajenja ni dovoljena v tem spisu"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "Med procesom gradnje je pri¹lo do napak."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex ne deluje z LinuxDoc."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Nobenih odkritih opozoril."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Odkrito eno opozorilo."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Uporabite 'Uredi->Pojdi na napako' za njegovo poiskanje."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " odkritih opozoril."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Uporabite 'Uredi->Pojdi na napako' za njihovo poiskanje."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex uspe¹no pognan"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Videti je, da chktex ne deluje."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Izvajam ukaz:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Datoteka ¾e obstaja:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Ali ¾elite prepisati datoteko?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Preklicano"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Prijetna datoteka za LaTeX shranjena kot"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Razred besedila mora biti linuxdoc."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Gradim datoteko LinuxDoc SGML `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "Shrani datoteko LinuxDoc SGML kot"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "Razred besedila mora biti linuxdoc."
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Gradim datoteko LinuxDoc SGML `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "Shrani datoteko LinuxDoc SGML kot"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Datoteka ASCII shranjena kot"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Samodejno shranjujem trenutni spis..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Sámoshranjevanju spodletelo!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Datoteka za vstavek"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Napaka! Ne morem odpreti doloèene datoteke:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Kazalo vsebine"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Vstavi referenco"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Vstavi opombo v nogi..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Uvozi datoteko LinuxDoc SGML `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Pretvarjam LinuxDoc SGML v datoteko za TeX..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Pretvarjam LinuxDoc SGML v datoteko dvi..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Pretvarjam LinuxDoc SGML v datoteko dvi..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Znakovni stil"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Okolje odstavka"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Izgled spisa"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Narekovaji"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "Vzglavje LaTeXa"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Ali ¾elite shraniti trenutne nastavitve"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "za Znake, Spis, Papir in Narekovaje"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "kot privzete za nove spise?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Odpri/Zapri..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Ni nadaljnjih razveljavitvenih informacij"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "Ponovitev ¹e ni podprta v matematiènem naèinu"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Ni nadaljnjih ponovitvenih informacij"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Pisava: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", globina: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Vstavljam opombo na robu..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Prekopiran tip okolja odstavka"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Nastavljen tip okolja odstavka"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Spremenjena globina okolja (v mo¾nem razponu, morda tudi ne)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Nastavljen izgled odstavka"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Ali naj nastavim nekatere parametre"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "na privzete vrednosti tega razreda spisa?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Napake pri pretvarjanju!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Ne morem preklopiti na novi razred spisa."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Vraèam se na izvorni razred spisa."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Pretvarjam spis v nov razred spisa..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "En odstavek ne more biti pretvorjen"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " odstavkov ne more biti pretvorjenih"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "v izbrani razred spisa"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Nastavitev izgleda spisa"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Ni veè opomb"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Nastavitev vrste narekovajev"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "Nastavitev vzglavja LaTeXa"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Ne morem vstaviti tabele v tabelo."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Vstavljam tabelo..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tabela vstavljena"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "NAPAKA!  Ne morem tiskati!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Preverite 'obseg strani'!"
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Preverite '¹tevilo izvodov'!"
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Napaka:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Ne morem tiskati"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Preverite, da so va¹i parametri pravilni"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Vstavljam sliko..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Slika vstavljena"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Nastavitev zaslonskih izbir"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "Izbire za LaTeX"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Poganjam prikrojitev..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Ponovno nalagam prikrojitev..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Sistem je bil ponovno prikrojen."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Ponovno morate zagnati LyX, da uporabite katerekoli"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "osve¾ene doloèitve razreda spisa."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Ne najdem te oznake"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "v trenutnem spisu."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Ni spisa ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Nobene oznake najdete v spisu ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr " Niè | Standarden | Smallskip | Medskip | Bigskip | VFill | Dol¾ina "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr " Brez spremembe %l| Pokonène | Brez serifov | Pisalni stroj %l| Reset "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Brez spremembe %l| Navadne | Polkrepke %l| Reset "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr ""
+" Ni spremembe %l| Pokonène | Kurzivne | Nagnjene | Male velike %l| Reset "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Ni spremembe %l| Drobne | Najmanj¹e | Manj¹e | Majhne | Normalne | Velike | "
+"Veèje | Najveèje | Ogromne | Ogromnej¹e %l| Poveèaj | Zmanj¹aj | Reset "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+" Ni spremembe %l| Poudarjeno | Podèrtano | Velike | Naèin LaTeX %l| Reset "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+" Brez spremembe %l| Brezbarvno | Èrna | Bela | Rdeèa | Zelena | Modra | Cian "
+"| Violièna | Rumena %l| Reset "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Enojno | Polovièno | Dvojno | Drugo "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Majhen preskok | Srednji preskok | Veliki preskok | Dol¾ina "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Privzeto | Prilagojeno | USletter | USlegal | USexecutive | A3 | A4 | A5 | "
+"B3 | B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" Noben | A4 z majhnimi robovi (le pokonèen) | A4 z zelo majhnimi robovi (le "
+"pokonèen) | A4 z zelo ¹irokimi robovi (le pokonèen) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr ""
+" ``besedilo'' | ''besedilo'' | ,,besedilo`` | ,,besedilo'' | «besedilo» | "
+"»besedilo« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "Zaèetni logo LyXa"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Zapri"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Da|Dd#d"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Ne|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Pobri¹i|#b"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Vse spremembe bodo prezrte"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Spis je le za branje:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Pozor: ne morem ugotoviti poti binarne datoteke."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Èe imate te¾ave, poskusite zagnati LyX z absolutno potjo."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "Okoljska spremenljivka LYX_DIR_10x ni dobra."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Sistemski imenik nastavljen na: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Opozorilo LyXa! Ne morem ugotoviti sistemskega imenika."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Poskusite parameter '-sysdir' v ukazni vrstici ali"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "nastavite okoljsko spremenljivko LYX_DIR_10x na sistemski imenik LyXa,"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "ki vsebuje datoteko `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Uporabljam vgrajene privzete vrednosti "
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " a prièakujte te¾ave."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Prièakujte te¾ave."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Nimate osebnega imenika za LyX."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Potreben je za vzdr¾evanje va¹e lastne prikrojitve."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Naj ga posku¹am usposobiti za vas (priporoèeno)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Poganjam brez osebnega imenika za LyX."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Ustvarjam imenik "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " in poganjam prikrojitev..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Neuspeh. Uporabil bom "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr " namesto tega."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Opravljeno!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "Opozorilo LyXa!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Napaka med branjem "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Uporabljam vgrajene privzete vrednosti."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Nastavljam nivo razhro¹èevanja na "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Uporaba: lyx [ stikala ukazne vrstice ] [ ime.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Stikala ukazne vrstice (razlikujejo velike in male èrke):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           povzame uporabo LyXa"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       posku¹a nastaviti sistemski imenik na x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x        nastavi ¹irino glavnega okna"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       nastavi vi¹ino glavnega okna"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         nastavi polo¾aj x glavnega okna"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         nastavi polo¾aj y glavnega okna"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          kjer je n vsota razhro¹èevalnih izbir. Npr. -dbg 65535 "
+"-help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        zamenja barve ospredja & ozadja"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           po¾ene LyX v èrnobelem naèinu"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  uporabi hitro rutino za risanje izbir\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Za veè izbir preverite stran referenènega priroènika o LyXu."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Manjka ¹tevilka za stikalo -dbg!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Manjka imenik za stikalo -sysdir!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Faks ¹t.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Ime cilja:|#N"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Podjetje:|#E"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Telefonski imenik"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Izberi iz|#S"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Dodaj v|#t"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Izbri¹i iz|#D"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Shrani|#V"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Cilj:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Komentar:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Datoteka s faksom: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Prazen telefonski imenik"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Shrani (potrebno)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Ne morem odpreti telefonskega imenika: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "DNEVNIK NE OBSTAJA ALI JE PRAZEN!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Okno s sporoèilom"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cPrazen imenik"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Telefonski imenik"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "pokonèna"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "brez serifov"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "pisalni stroj"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "simboli"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Podeduj"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignoriraj"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "obièajna"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "polkrepka"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "pokonèna"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "kurzivna"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "nagnjena"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "majhne velike"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "drobna"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "najmanj¹a"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "manj¹a"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "majhna"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "normalna"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "velika"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "veèja"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "najveèja"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "ogromna"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "ogromnej¹a"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Poveèaj"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Zmanj¹aj"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "drobne"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "najmanj¹e"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "manj¹e"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "majhne"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normalne"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "velike"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "veèje"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "najveèje"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "ogromne"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "ogromnej¹e"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "poveèaj"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "zmanj¹aj"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "podeduj"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ignoriraj"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "izkljuèeno"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "vkljuèeno"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Preklopi"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Niè"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Èrna"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Bela"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Rdeèa"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Zelena"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Modra"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Cian"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Violièna"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Rumena"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Matematika"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Vstavi"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Poudari "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "podèrtaj "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "velike èrke "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "LaTeX "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "privzeta"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Neznano zaporedje:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Neznana akcija"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Ukaz ni dovoljen brez odprtega spisa"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Spis je le za branje"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Tekstovni naèin"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Neznani tip izvoza: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Neznani tip uvoza: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Izgled "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " ni znan"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Ni navzkri¾ne-reference za preklop"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Znak odstranjen"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Znak postavljen"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Znak izkljuèen"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Znak vkljuèen"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr ""
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr ""
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Manjkajoèi argument"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "To je dovoljeno le v matematiènem naèinu!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Odpiram podrejeni spis "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Neznana vrsta opombe v nogi"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Spis je le za branje"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Vstavite ime datoteke za novi spis"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "novadatoteka"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Ali ¾elite zdaj zapreti ta spis?\n"
+"('Ne' bo le preklopilo na odprto razlièico)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Ali ¾elite odpreti spis?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Odpiram spis"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "odprt."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Izberi vzorec"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Primeri"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Izberi spis za odprtje"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Ne morem odpreti spisa"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Izberi datoteko ASCII za uvoz"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Spis z imenom"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "¾e obstaja. Prepi¹em?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Uvoz datoteke ASCII"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "Datoteka ASCII "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "uvo¾ena."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Izberi datoteko Noweb za uvoz"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Izberi datoteko LaTeX za uvoz"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Uva¾am datoteko za LaTeX"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Uva¾am datoteko za Noweb"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Datoteka za Noweb "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "Datoteka za LaTeX "
+
+#: src/lyxfunc.C:2744
+msgid "Could not import Noweb file"
+msgstr "Ne morem uvoziti datoteke za Noweb"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Ne morem uvoziti datoteke za LaTeX"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Izberite spis za vstavitev"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Vstavljam spis"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "vstavljen."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Ne morem vstaviti spisa"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Odprt vstavek"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "neznan"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Shranim spis in nadaljujem?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: Uvodni opis"
+
+#: src/lyxvc.C:184
+msgid "(no initial description)"
+msgstr "(ni uvodnega opisa)"
+
+#: src/lyxvc.C:187
+msgid "Info"
+msgstr "Informacije"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr "Ta spis NI bil registriran."
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Zabele¾i sporoèilo"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Ignoriraj spremembe in nadaljuj z odjavljeno?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr ""
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr ""
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Ali to ¹e vedno ¾elite storiti?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "Ni zgodovine sistema RCS!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "Zgodovina RCS"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Zapri"
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funkcije"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Gr¹ko"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr ""
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr ""
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr ""
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr ""
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Razno"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "V redu  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Stolpci "
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Vertikalna poravnava|#V"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Horizontalna poravnava|#H"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "V redu "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Ozko|#T"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Srednje|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "©iroko|#H"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negativno|#N"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr ""
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr ""
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Loèilo"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Okrasek"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Presledki"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matrika"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Zgoraj | Sredina | Spodaj"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Matematièna plo¹èa"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Datoteka"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Uredi"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Izgled"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Vstavi"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Pomoè"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#D"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#U"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#I"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#V"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#B"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#S"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#P"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Zaslonske izbire"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Uvoz%t|LaTeX...%x30|Tekst ASCII kot vrstice...%x31|Tekst ASCII kot "
+"odstavki%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIM|oO#o#O"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Izvoz%t|kot LaTeX...%x40|kot DVI...%x41|kot PostScript...%x42|kot tekst "
+"ASCII...%x43|Prilagojeno...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Izvoz%t|kot LinuxDoc...%x40|kot DVI...%x41|kot PostScript...%x42|kot tekst "
+"ASCII...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Izvoz%t|kot LinuxDoc...%x40|kot DVI...%x41|kot PostScript...%x42|kot tekst "
+"ASCII...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Aa#a#A"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|rR#r#R"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Nova...|Nova po vzorcu...|Odpri...%l|Zapri|Shrani|Shrani kot...|Vrni se k "
+"shranjeni%l|Glej dvi|Glej PostScript|Osve¾i dvi|Osve¾i PostScript|Zgradi "
+"program%l|Tiskaj...|Faks..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|vV#v#V"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|Oo#o#O"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|Zz#z#Z"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Ss#s#S"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|kK#k#K"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|rR#r#R"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|vV#v#V"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|eE#e#E"
+
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr "FM|gG#g#G"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|Tt#t#T"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|Ff#f#F"
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Uvoz%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Izvoz%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Izhod%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|Uu#u#U"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|Ii#i#I"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|hH#h#H"
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Uvoz%t|LaTeX...%x15|tekst ASCII kot vrstice...%x16|tekst ASCII kot "
+"odstavki...%x17|Noweb...%x18"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Nova...|Nova po vzorcu...|Odpri...%l|Uvozi%m%l|Izhod%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Plovke & Vstavki%t|Odpri/Zapri%x21|Stopi%x22|Odpri vse opombe v nogi/na "
+"robu%x23|Zapri vse opombe v nogi/na robu%x24|Odpri vse "
+"slike/tabele%x25|Zapri vse slike/tabele%x26%l|Odstrani vse ¹katle o "
+"napakah%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabela%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Veèstolpèno%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Veèstolpèno%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr ""
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr ""
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr ""
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr ""
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr ""
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr ""
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr ""
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr ""
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Poravnaj levo%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Poravnaj levo%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr ""
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Poravnaj desno%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Poravnaj desno%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr ""
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Centriraj%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Centriraj%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Dodaj vrstico%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr ""
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Dodaj stolpec%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr ""
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Odstrani vrstico%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr ""
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Odstrani stolpec%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr ""
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Odstrani tabelo%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Vstavi tabelo%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Nadzor razlièic%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Prijavi%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Zapi¹i spremembe%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Vzemi za urejanje%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Zapi¹i spremembe%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Vzemi za urejanje%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Vrni zadnjo razlièico%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Razveljavi zadnje spremembe%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Prika¾i zgodovino%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Prijavi%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr ""
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr ""
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Razveljavi|Ponovi %l|Izre¾i|Kopiraj|Prilepi%l|Poi¹èi & nadomesti...|Pojdi na "
+"napako|Pojdi na opombo|Plovke & vstavki%m|Tabela%m|Èrkovalnik....|Preveri "
+"TeX|Kazalo vsebine...%l|Nadzor razlièic%m%l|Poglej dnevnik LaTeXa%l|Prilepi "
+"prvotno izbiro kot vrstice|Prilepi prvotno izbiro kot odstavke"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr ""
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr ""
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Znak...|Odstavek...|Spis...|Papir...|Tabela...|Narekovaji...%l|Poudari "
+"stil%b|Velike èrke%b|Polkrepki stil%b|Stil TeXa%b|Spremeni globino "
+"okolja|Vzglavje za LaTeX...%l|Shrani izgled kot privzetega"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr ""
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr ""
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr ""
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr ""
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr ""
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr ""
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Uvoz datoteke ASCII%t|Po vrsticah%x41|Po odstavkih%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Seznami & kazala%t|Kazalo vsebine%x21|Seznam slik%x22|Seznam "
+"tabel%x23|Seznam algoritmov%x24|Stvarno kazalo%x25|Viri iz BibTeXa%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr ""
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Plovke%t|Plovka s sliko%x71|Plovka s tabelo%x72|Plovka s ¹iroko "
+"sliko%x73|Plovka s ¹iroko tabelo%l%x74|Plovka z algoritmom%x75"
+
+#. }
+#: src/menus.C:1204
+msgid "IMF|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr ""
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Posebni znak%t|HFill%x31|Mesto delitve%x32|Za¹èiten presledek%x33|Prelom "
+"vrstice%x34|Tropièje (...)%x35|Pika na koncu stavka%x36|Navadni narekovaj "
+"(\")%x37|Loènica v menuju %x38"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr ""
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr ""
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr ""
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr ""
+
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Slika...|Tabela...%l|Vkljuèi datoteko...|Vkljuèi datoteko ASCII%m|Vkljuèi "
+"datoteko LyX...%l|Opomba v nogi|Opomba na robu|Plovke%m%l|Seznami & "
+"kazala%m%l|Posebni znak%m%l|Opomba...|Oznaka...|Navzkri¾no "
+"sklicevanje...|Citiranje...|Postavka stvarnega kazala...|Postavka stvarnega "
+"kazala - zadnja beseda"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr ""
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr ""
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr ""
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr ""
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr ""
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr ""
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr ""
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr ""
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr ""
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr ""
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr ""
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr ""
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Ulomek|Kvadratni koren|Eksponent|Indeks|Vsota|Integral%l|Matematièni "
+"naèin|Prikaz%l|Matematièna plo¹èa..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Uu#u#U"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|Kk#k#K"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Ee#e#E"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|nN#n#N"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|Vv#v#V"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#i#I"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#m#M"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|Pp#p#P"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|Ll#l#L"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Zaslonske pisave...|Izbire èrkovalnika...|Tipkovnica|LaTeX...%l|Prikroji"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|pP#p#P"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Ii#i#I"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Tt#t#T"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#l#L"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|rR#r#R"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Uvod|Uèbenik|Uporabni¹ki vodnik|Raz¹irjene odlike|Prilagoditev|Referenèni "
+"priroènik|Znani hro¹èi|Nastavitev LaTeXa%l|Pravice raz¹irjanja in "
+"jamstvo...|Zasluge...|Razlièica..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr "HM|Uu#U#u"
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|bB#B#b"
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "HM|vV#V#v"
+
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr "HM|oO#o#O"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Pp#P#p"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|hH#H#h"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "HM|Ll#L#l"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|jJ#j#J"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|Zz#z#Z"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr "HM|iI#i#I"
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "Razlièica LyXa "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " z dne "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Knji¾nièni imenik: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Uporabni¹ki imenik: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Odpiram datoteko s pomoèjo"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Izvajam:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Noben spis ni odprt *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Dobrodo¹li v LyXu!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Brez pomena s tem izgledom!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Napaka: Ne morem iti na imenik: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "Notranja napaka LyXa:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Podkoraèitev sklada poti."
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Tiskaj na"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Tiskalnik|#T"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Datoteko|#D"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Vse strani|#G"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Samo lihe strani|#L"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Le sode strani|#S"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Normalni vrstni red|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Obratni vrstni red|#R"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Vrstni red"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Strani:"
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Kopije"
+
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "©tevec:"
+
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Neurejene|#U"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Tip datoteke"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Ukaz:|#U"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "PostScript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "ASCII|#s"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Uporabi jezik spisa|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Uporabi drug jezik:|#U"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Obravnavaj sklenjene besede kot pravilne|#T"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Stikalo za vhodno kodiranje za ispell|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Uporabljaj drugotni osebni slovar:|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Dodatni posebni znaki, dovoljeni v besedah:|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Slovar"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Zamenjaj"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Blizu\n"
+"Zgre¹il"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Izbire èrkovalnika...|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Zaèni s èrkovanjem|#S"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Vstavi v osebni slovar|#I"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignoriraj besedo|#g"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Sprejmi besedo v tej seji|#A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Prekini èrkovanje|#T"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Zapri èrkovalnik|#Z^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Nadomesti besedo|#R"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Izbire èrkovalnika"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Èrkovalnik"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Proces ispell je umrl zaradi doloèenega razloga. *Eden* od mo¾nih razlogov\n"
+"bi lahko bil, da za jezik tega spisa nimate name¹èene\n"
+"datoteke s slovarjem.\n"
+"Preverite /usr/lib/ispell ali doloèite drug slovar\n"
+"v menuju Èrkovalnik Izbire."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " pregledanih besed."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " pregledana beseda."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Èrkovanje zakljuèeno!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Proces ispell je umrl iz neznanega razloga.\n"
+"Morda je bil pobit."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Veèstolpièevje je lahko le horizontalno."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr "Tako ne morete vstaviti dveh presledkov.  Prosim, preberite Uèbenik."
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+"Ne morete vstaviti presledka na zaèetek odstavka.  Prosim, preberite Uèbenik."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Nemogoèa operacija"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Ne morete vstaviti plovke v plovko!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Ne morete vstaviti opombe na robu v ministran!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Ne morem razkosati tabele."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Plovka bi vkljuèevala plovko!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Odprta plovka"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Zaprta plovka"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Nièesar ni za storiti"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Ni definirane spremembe pisave. Uporabite Znak pod menujem Izgled za "
+"definicijo spremembe pisave."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Ne vem kaj naj poènem z delom plovke."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "¾al."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Ne vem kaj naj poènem z delom tabele."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Ne morem prilepiti plovke v plovko!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Celica tabele ne more vkljuèevati veè kot enega odstavka!"
diff --git a/po/sv.po b/po/sv.po
new file mode 100644 (file)
index 0000000..3777892
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,4957 @@
+# Svensk lokalisering för LyX
+# Copyright (C) 1997, 1998 LyX Team
+# Joacim Persson <sp2joap1@ida.his.se> 1997, 1998
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lyx 1.0.1b\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:54+02:00\n"
+"Last-Translator: Joacim Persson <sp2joap1@ida.his.se>\n"
+"Language-Team: Swedish <sv@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Formaterar dokument..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Inga fler fel"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "ChkTeX varningskod #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Laddar in font i X-servern..."
+
+# för debug
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr ""
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "LaTeX omgång nummer "
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "MakeIndex körs..."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "BibTeX körs..."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "INGEN LATEX-LOGGFIL!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr "Programbyggningslogg"
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "LaTeX Logg"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Beskriv kommando"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Markera föregående bokstav"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Lägg in BibTeX"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Autolagrar"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Gå till början av dokumentet"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Markera till början av dokumentet"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Stäng"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Gå till slutet av dokumentet"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Markera till slutet av dokumentet"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Fax"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Nytt dokument"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Nytt dokument efter mall"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Öppna"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Byt till förgående dokument"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Skriv ut"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Tillbaka till senast sparade"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Uppdatera DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Uppdatera PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Visa DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "Visa PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr "Bygg program"
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Prova TeX med ChkTeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Spara"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Spara som"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Gå en bokstav tillbaka"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Gå en bokstav framåt"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Lägg in citat"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Utför kommando"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Kopiera"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Klipp"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Minska miljödjup"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Öka miljödjup"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Ändra miljödjup"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Ändra inställningar för bomber"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Gå ned"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Markera nästa rad"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Välj stil på stycke"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Gå till näste fel"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Lägg in figur"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Sök & byt"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Växla: markören följer/inte skjutregeln"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Fetstil av/på"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Kodstil av/på"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Brödstil"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Betoning av/på"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Användardefinierad stil av/på"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Namnstil av/på"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Antikva av/på"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Linjärer av/på"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Sätt teckengrad"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Visa fontstatus"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Understrykning av/på"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Lägg in fotnot"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Markera nästa bokstav"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Lägg in horisontell utfyllning"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Lägg in avstavningspunkt"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Lägg in ellips (...)"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Lägg in punkt för meningsslut"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Slå av tangentmapp"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Använd primär tangentmapp"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Använd sekundär tangentmapp"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Tangentmapp av/på"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Lägg in märke"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Kopiera styckestyp"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Klistra in styckestyp"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Ange arkformat och marginaler"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Gå till början av raden"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Markera till början av raden"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Gå till slutet av raden"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Markera till slutet av raden"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Avsluta"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Lägg in marginalanteckning"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Matematik grekiska"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Matematikläge"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Gå ned ett stycke"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Markera nästa stycke"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Gå upp ett stycke"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Markera föregående stycke"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Klistra in"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Lägg in skyddat mellanslag"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Lägg in citat"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Omkonfigurera"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Gör om"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Lägg in hänvisning"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Lägg in tabell"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "TeX-stil av/på"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Ångra"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Smält"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Importera dokument"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Ta bort alla felrutor"
+
+# vad är detta nu då?
+#: src/LyXAction.C:680
+msgid "Insert menu separator"
+msgstr "Lägg in menyseparator"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Ingen beskrivning finns!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Skicka dokumentet till kommando"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (Ändrad)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (Skrivskyddad)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Dokumentet är skrivskyddat. Inga ändringar av stilen tillåts."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Pappersstil"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Pappersstil satt"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Varning: Ogiltig längd (giltigt exempel: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Extra styckesstil"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "Extra styckesstil satt"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Varning: Ogiltig procentsats (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Extra för tabeller"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Tabellstil"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Varning: Fel markörposition, uppdaterat fönster"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Bekräfta, tryck igen."
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Fel!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Kan inte öppna vald fil:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Fel vid laddning av textklass!"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Kan inte ladda textklassen "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- använder innbyggt värde"
+
+# varning för att utgången inset används, går ut på stdout
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr ""
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Varning: kräver lyxformat %.2f men fann %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "FEL: kräver lyxformat %.2f men fann %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Varning!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Läsning av dokumentet är inte klart"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Dokumentet kan vara stympat"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "FEL!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "Gammalt LyX-filformat funnet. Använd LyX 0.10.x för att läsa detta!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Inte en LyX-fil!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Kan inte läsa filen!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Fel! Dokumentet är skrivskyddat."
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Fel! Kan inte skriva till filen: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Fel! Kunde inte stänga filen ordentligt: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Fel: Kan inte skriva till filen:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Fel: Kan inte öppna tillfällig fil:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Fel: Kunde inte stänga filen ordentligt:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "LYX_FEL:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Kan inte skriva till fil"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Fel : Fel djup för kommandot LaTeXType.\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "LaTeX körs..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX fungerade inte!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Loggfil saknas:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Klar"
+
+#. path to Literate file
+#: src/buffer.C:3174
+msgid "Running Literate..."
+msgstr "Literate körs..."
+
+#: src/buffer.C:3194
+msgid "Literate command did not work!"
+msgstr "Literate fungerade inte!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr "Bygger programmet..."
+
+#: src/buffer.C:3263
+msgid "Build did not work!"
+msgstr "Kompilering misslyckades!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Chktex körs..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex fungerade inte!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Kunde inte köra med filen:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Kan inte öppna tillfällig fil:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Fel! Kan inte öppna tillfällig fil:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Fel under körning av *roff-kommando på tabell"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Omöjlig operation!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Kan inte lägga in en tabell/lista i en tabell."
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Beklagar."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Dokumentet är ändrat:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Spara dokumentet?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Några dokument blev inte sparade:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Vill du avsluta ändå?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Lagrar dokument"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Dokument sparat som"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Kunde inte ta bort autolagrad fil!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Lagring misslyckades!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Inga dokument öppnade!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Försöker att lagra dokument "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " som..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "Lagring förefaller ha lyckats."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr " Lagring misslyckades! Prövar..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr "  Lagring misslyckades! Dokumentet förlorades."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Det finns en nödlagrad version av detta dokument!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Försöka ladda den i stället?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Autolagrad fil är nyare."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Ladda den istället?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Kan inte öppna mall"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Kunde inte hitta filen"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Dokumentet är redan öppnat:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Vill du öppna dokumentet på nytt?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Filen `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' är skrivskyddad."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Skapa nytt dokument med detta namn?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Storlek|#S"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "OK"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Använd|#A"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Avbryt|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr ""
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr ""
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr ""
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr ""
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Bombdjup"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standard|#t"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matematik|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Tyvärr är din libXpm för gammal."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Denna funktion kräver xpm-4.7 (äv. känd som 3.4g) eller nyare."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Pröva med att köra LyX i monoläge (lyx -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" förvalt | pytteliten | script | fotnot | liten | brödstil | stor | större | "
+"störst | störstare | störstast"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Val av bomber"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "FEL: LyX kunde inte läsa filen CREDITS"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Installera denna för att rätt uppskata det stora"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "arbete som andra har bidragit med till LyX-projektet."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Tack till"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Upphovsrätt och garanti"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr ""
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Alla dessa personer har bidragit till LyX-projektet. Tack,"
+
+#: src/credits_form.C:50
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Detta program är fri mjukvara; du kan sprida det\n"
+"och/eller modifiera det enligt reglerna i \"GNU General\n"
+"Public License\" så som den är publicerad av \"Free Software\n"
+"Foundation\"; antingen version 2 av licensen, eller\n"
+"(om du så önskar) en nyare version."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[ritfel]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[ritar ...]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[ingen fil]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[inte visat]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[ingen ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[okänt fel]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Figur"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "tom sökväg för figur"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Blandade bilder"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Dokumentet"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "EPS-Figur"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Filnamn kan inte innehålla någon av följande tecken:"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "mellanslag, '#', '~', '$' or '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Varning! Kunde inte öppna katalog:"
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "Internt fel i LyX!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Kunde inte testa om katalogen är skrivbar"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Kan inte öppna testfil i katalogen"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Skapat testfil, men kan inte ta bort den?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Fel! Kan inte öppna katalog:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Fel: Kunde inte ta bort fil:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Fel: Kunde inte skapa temporär katalog:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Fel: Kunde inte ta bort temporär katalog:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Internt fel!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "Anrop till createDirectory med ogiltigt namn"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Fel! Kunde inte skapa katalog:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Sätt Teckenkodning|#S"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Teckenkodning inte funnen!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Fel:\n"
+"\n"
+"Tangentbords-\n"
+"mappning\n"
+"inte funnen"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Teckenkodning:|#T"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Annat...|#A"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Annat...|#T"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Språk"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Mappning"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Primär mapp|#r"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Ingen mappning|#N"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Sekundär mappning|#e"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Sekundärt"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Primärt"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "EPSfil|#P"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Förhandsvisning|#h"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Bläddra...|#B"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Visa Ram|#V"
+
+# Vad gör denna?
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Omvandla|#o"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Inställningar"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Vinkel:|#i"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% av sidan|#d"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Skönsvärde|#k"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#c"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "tum|#t"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Visa"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Höjd"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Bredd"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr ""
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Visa med färg|#f"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Visa inte denna figur|#e"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Visa som gråskala|#g"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Visa som svartvitt|#o"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Skönsvärde|#r"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#m"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "tum|#u"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% av sidan|#n"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% av kolumn|#l"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Bildtext|#x"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Underfigur|#U"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Katalog:|#K"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Mönster:|#M"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Filnamn:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Läs igen|#L#l"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Hemkatalog|#H#h"
+
+# Dessa strängar används inte, de skrivs över med annat under körning
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr ""
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr ""
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Kolumner"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Rader"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Sök|#s"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Ersätt med|#m"
+
+#: src/form1.C:331
+#, fuzzy
+msgid "@>|#F"
+msgstr "MB|#F"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr ""
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Ersätt|#E"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Stäng|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Skilj A-Ö/a-ö|#k"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Hela ord|#H"
+
+#: src/form1.C:351
+msgid "Replace All|#A#a"
+msgstr "Ersätt alla|#a#A"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Matematik, grekiskt läge på"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Matematik, grekiskt tangentbord på"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Matematik, grekiskt tangentbord av"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "TeX-läge"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Inget nummer"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Nummer"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Namn på märke som skall läggas in:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "Matematik, textläge"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Ogiltig operation i matematikläge!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Matematikläge"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Makro: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Nyckel:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Kommentar:|#K"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Nyckel:|#N"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Etikett:|#E"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Citat"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Referens"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "BibTeX-genererade referenser"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Databas:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Stil:"
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Fel"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "LaTeX-fel"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Öppnat felruta"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Bläddra|#B"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Typsätt Inte|#I"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Ladda|#L"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Filnamn:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Synligt mellanrum|#y"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Verbatim|#V"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Läs in|#L"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Foga in|#F"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Dokument"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Välj underdokument"
+
+# Detta läser in ett dokument med sin formatering intakt
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Infogning"
+
+# Detta läser in ett dokument och formaterar det ihop med moderfilen
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Inläsning"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Lägg in Verbatim"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Sakord:|#S"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Sakord"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Sakord"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Sakregister"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Notis"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Stäng|#T^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Lista över algoritmer"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Figurer"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Tabeller"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Huvuddokument:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Referenstyp"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Gå till märke"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Ändra märke"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Sidnummer"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Referens"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Sida: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Ref: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Innehåll"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr ""
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "Namn:|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Stäng|#T^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "html-url|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Lägg in URL"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr ""
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr ""
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "annat..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Mappning av tangentbord"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   val: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Tillåt accent på ALLA bokstäver|#Tt"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Uppdatera|#Uu"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX kunde inte hitta sina stilbeskrivningar!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Undersök om filen \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "är installerad korrekt. Måste tyvärr bryta. :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX kunde inte hitta några stilbeskrivningar!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Undersök innehållet i filen \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Måste tyvärr bryta. :-("
+
+# Separation av stycken (indrag eller luft emellan)
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr ""
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Indrag första rad|#I"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Luft mellan stycken|#u"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Klass:|#K"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Sidstil:|#S"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Fonter:|#F"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Fontstorlek:|#s"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Flytande objekt, placering:|#y"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "PS Drivrutin:|#D"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Kodning:|#K"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "En|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Två|#T"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Sidor"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "En|#E"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Två|#v"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Extra val:|#X"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Språk:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Avstånd, stycken:|#d"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Styckesnumreringsdjup"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Innehållsförteckningsdjup"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Kägel|#l"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Bomber|#r"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "Använd AMS Math|#M"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Familj:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Grovlek:|#v"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Form:|#m"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Storlek|#S"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Diverse:|#D"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Färg:|#g"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Växla på dessa |#x"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Dessa växlas aldrig"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Dessa växlas alltid"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Etikettbredd:|#t"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Indrag"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Över|#v"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Under|#U"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Över|#e"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Under|#n"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Inget indrag|#I"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Höger|#H"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Vänster|#s"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Block|#o"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Centrerat|#C"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Över|#r"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Under|#d"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Sidbrytning"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Linje"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Justering"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Vertikalt avstånd"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Extra val|#X"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Behåll|#B"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Behåll|#l"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "OK|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Typ:|#T"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Enkel:|#E"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Dubbel:|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr ""
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Särskilt:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Marginaler"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Marginaler topp/botten"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Orientering"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Porträtt|#o"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Landskap|#L"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Arkformat|#f"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Eget arkformat"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Använd \"Geometry\"-paketet|#y"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Bredd|#B"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Höjd|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Topp:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Botten|#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Vänster:|#V"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Höger:|#H"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Huvudhöjd:|#j"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Överrymme:|#v"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Underrymme:|#U"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Kanter"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Topp:|#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Botten|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Vänster|#V"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Särskild cell"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Multikolumn|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Lägg till kolumn|#u"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Ta bort kolumn|#a"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Lägg till rad|#r"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Ta bort rad|#d"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Ta bort tabell|#o"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Kolumn"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Rad"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Sätt kanter|#S"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Slå av kanter|#l"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Långtabell"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Rotera 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Radbrytningar|#n"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Särskild tabell"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Första huvud"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Huvud"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Fot"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Sista fot"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Ny sida"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Rotera 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Extra|#X"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Vänster|#n"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Höger|#g"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Centrerat|#C"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Extra val"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Mått|#t"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "eller %|#l"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Mitten|#e"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "H-fyllning mellan minisidestycken|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Starta ny minisida|#S"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Indraget stycke|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minisida|#M"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Infälld|#n"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Särskild flerkolumnuppställning"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Särskild kolumnuppställning"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Enkapsulerad Postscript (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Inlined EPS (*.eps, *.ps)|#I"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Typ"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Antikva|#n"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Linjärer|#L"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Skrivmaskin|#m"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Kodning|#K"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Förstoring|#F"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Uppdatera|Uu#u"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Uppdatera|#Uu"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Lägg in avsnittsnummer|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Lägg in sidnummer|#N"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Gå till märke|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Lagring misslyckades. Byt namn och pröva igen?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Om inte blir inte dokumentet lagrat)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Mallar"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Skriv in filnamnet som dokumentet skall sparas under"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Avbrutet."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Samma namn som dokumentet redan har:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Spara ändå?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Ett annat dokument med samma namn är öppnat!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Ersätt med nuvarande dokument?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Dokumentet omdöpt till: '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "', men inte lagrat..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Dokumentet finns redan."
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Ersätt fil?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Tyvärr, kan inte göra detta medan bilderna ritas."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Var vänlig vänta några sekunder och försök igen."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(eller bryt avfällda gs-processer för hand och försök igen.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Kan inte göra detta medan rättstavning pågår."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Avbryt rättstavning först."
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Ett fel funnet"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Du bör försöka rätta det."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " fel funna."
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Du bör försöka rätta dem."
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "Något gick fel under körning av LaTeX."
+
+#: src/lyx_cb.C:492
+msgid "Wrong type of document"
+msgstr "Fel slags dokument"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr "'Bygg Program' kan inte göras på detta dokument"
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+msgid "There were errors during the Build process."
+msgstr "Något gick fel under byggandet av programmet."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex fungerar inte för LinuxDoc."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Inga varningar."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "En varning funnen."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Använd 'Redigera->Gå till fel' för att finna det."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " varningar funna."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Använd 'Redigera->Gå till fel' för att finna dem."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex kört utan klagomål"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Det verkar som om chktex inte fungerar."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Utför kommando:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Filen finns redan:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Vill du skriva över filen?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Avbrutet"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Begriplig LaTeX-fil lagrad som"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Dokumentklassen måste vara linuxdoc."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Skapar LinuxDox SGML fil `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "Spara SGML-fil som"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "Dokumentklassen måste vara linuxdoc."
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Skapar LinuxDox SGML fil `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "Spara SGML-fil som"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Ascii-fil sparad som"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Autolagrar nuvarande dokument..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Autolagring misslyckades!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Fil som skall läggas in"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Fel! Kan inte öppna angiven fil:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Innehåll"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Lägg in hänvisning"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Lägger in en fotnot..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Importerar LinuxDoc SGML fil `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Konverterar LinuxDox SGML fil till TeX fil..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Konverterar LinuxDoc SGML fil till dvi fil..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Konverterar LinuxDoc SGML fil till dvi fil..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Teckenstil"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Styckesstil"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Dokumentstil"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Citationstecken"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "LaTeX Preamble"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Önskar du att lagra de nuvarande inställningarna"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "för tecken, dokument, papper och citat"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "som förvalt för nya dokument?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Öppna/Stäng..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Inget mer att ångra"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "\"Gör om\" stöds inte matematikläge ännu."
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Inget mer att göra om"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Tecken: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Djup: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Lägger in en notering i marginalen..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Styckesmiljö kopierat"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Styckesmiljö satt"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Ändrat miljödjup (kanske möjligt, kanske inte)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Styckesstil satt"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Skall jag sätta några parametrar för"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "det förvalda för denna dokumentklass?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Konverteringsfel!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Kan inte byta till den nya dokumentklassen."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Går tillbaka till den gamla dokumentklassen."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Konverterar dokument till ny dokumentklass..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Ett stycke gick inte att konvertera"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " stycken gick inte att konvertera"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "till vald dokumentklass"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Dokumentstil satt"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Inga flera noteringar"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Citatstil satt"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "LaTeX preamble satt"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Kan inte stoppa in en tabell i en tabell."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Lägger in tabell..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tabell inlagd"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+msgid "ERROR!  Unable to print!"
+msgstr "Kan inte skriva ut!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr "Kontrollera \"Sidor:\""
+
+# ??
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr "Kontrollera \"Kopior\""
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Fel:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Kan inte skriva ut"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Kontrollera att parametrarna är riktiga"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Lägger in figur..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Figur inlagd"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Skärmval satt"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "LaTeX val"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Kör \"configure\"..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Laddar om konfiguration..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Systemet har blivit omkonfigurerat."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Du måste starta om LyX för att kunna använda de"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "uppdaterade specifikationerna för dokumentklasserna."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Kunde inte finna detta märke"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "i nuvarande dokument."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Inget Dokument ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Inga märken funna i dokumentet ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr " Inget | Standard | Litet | Medel | Stort | V-fyllning | Ang. Längd "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr " Oförändrat %l| Antikva | Linjärer | Skrivmaskin %l| Återställ "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Oförändrat %l| Medium | Fet %l| Återställ "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr " Oförändrat %l| Rak | Kursiv | Lutande | Kapitäler %l| Återställ "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Oförändrat %l| Pytteliten | Minst | Mindre | Liten | Normal | Stor | Större "
+"| Störst | Störstare | Störstast %l| Öka | Minska | Återställ "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+"Oförändrat %l| Betonad | Understruken | Namn | LaTeX-läge %l| Återställ "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+"Oförändrat %l| Ingen färg | Svart | Vit | Röd | Grön | Blå | Cyan | Magenta "
+"| Gul %l| Återställ "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Enkel | Halvannan | Dubbel | Annat "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Inget | Standard | Litet | Medel | Stort | V-fyllning | Ang. Längd "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Förvalt | Eget | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | B4 "
+"| B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" Ingen | A4 små marginaler (bara stående) | A4 mycket små marginaler (bara "
+"liggande) | A4 mycket breda marginaler (bara stående) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr ""
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "LyX Banér"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Bort"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Ja|J#JjYy"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Nej|Nn#N"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Rensa|#R"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Alla ändringar ignoreras"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Dokumentet är skrivskyddat:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Varning: Kunde inte hitta sökvägen till körbar fil."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Starta LyX med full sökväg om du får problem."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "Miljövariabeln LYX_DIR_10x har inte ett bra värde."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Systemkatalog satt till: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Varning! Kunde inte hitta systemkatalog:"
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Prova flaggan '-sysdir' eller"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "sätt miljövariablen LYX_DIR_10x till systemkatalogen för LyX som"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "innehåller filen 'chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Använder det innbyggda "
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr "  men räkna med vissa problem."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Räkna med problem."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Du har inte en personlig LyX-katalog."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Den behövs för att samla dina personliga inställningar."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Skall jag försöka ordna det åt dig (lämpligt)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Kör utan personlig LyX-katalog."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Skapar katalog "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " och kör \"configure\"..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Misslyckades. Använder "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr " istället."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Klar!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "LyX Varning!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Fel under läsing "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Använder innbyggda skönsvärden."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Sätter avlusningsnivå till "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Användning: lyx [flaggor] [ filnamn.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Flaggor (skiljer på versaler och gemena)"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           visa detta"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       försök sätta systemkatalogen till x"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x        sätt bredden på huvudfönstret"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       sätt höjden på huvudfönstret"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         sätt position i x-led på huvudfönstret"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         sätt position i y-led på huvudfönstret"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          där n är en summa av avlusningsval. Pröva -dbg 65535 -help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        byt förgrund- och bakgrundsfärg"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           kör LyX i svartvitt"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  använd en snabbare rutin för att rita markeringar\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Se manualsidan för LyX för fler flaggor."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "Nummer för -dbg saknas!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "Katalog för -sysdir saknas!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Fax nr.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Mott. Namn:|#M"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Företag:|#r"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Telefonlista"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Välj från|#V"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Lägg till|#L"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Ta bort från|#b"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Spara|#S"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Mottagare:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Kommentar:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Faxfil: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Tom telefonlista"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Lagring (behövs)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Kan inte öppna telefonbok: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "INGEN, ELLER TOM LOGGFIL!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Meddelandefönster"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cTom Telefonlista"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Telefonlista"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Antikva"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Linjärer"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Skrivmaskin"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr ""
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Ärv"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Ignorera"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Medium"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Fet"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Rak"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Kursiv"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Lutande"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Kapitäler"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Pytteliten"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Minst"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Mindre"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Liten"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Brödstil"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Stor"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Större"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Störst"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Störstare"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Störstast"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Öka"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Minska"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "pytteliten"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "minst"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "mindre"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "liten"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "brödstil"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "stor"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "större"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "störst"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "störstare"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "störstast"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "öka"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "minska"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "ärv"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "ignorera"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Av"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "På"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Av/På"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Ingen"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Svart"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Vit"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Röd"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Grön"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Blå"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr ""
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr ""
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Gul"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Matematik"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Insättning"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Betonad "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Understruken "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Namn "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr ""
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Brödstil"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Okänd sekvens:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Okänd operation"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Kommandot är inte tillåtet utan öppna dokument"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Dokumentet är inte skrivbart."
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Textläge"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Okänd exporttyp: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Okänd importtyp: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Stil "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " okänd"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Ingen hänvisning att ändra"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Märke borttaget"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Märke satt"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Märke av"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Märke på"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "\"Push-toolbar\" kräver argument > 0"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Användning: toolbar-add-to <LyXkommando>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Argument saknas"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Detta är bara tillåtet i matematikläge!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Öppnar underdokument "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Okänt slags fotnot"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Dokumentet är skrivskyddat:"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Skriv in filnamn för nytt dokument"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "namnlös"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Vill du stänga det dokumentet nu?\n"
+"('Nej' byter bara till den öppnade versionen.)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Vill du öppna dokumentet?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Vill du öppna dokumentet?"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "öppnat"
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Välj mall"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Exempel"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Välj dokument som skall öppnas"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Kunde inte öppna dokumentet"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Välj ASCII-fil att importera"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Ett annat dokument kallat"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "finns redan. Skriva över?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Importerar ASCII-fil `"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "ASCII-filen "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "importerad."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Välj Noweb-fil att importera"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Välj LaTeX-fil att importera"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "Importerar LaTeX-fil `"
+
+#: src/lyxfunc.C:2731
+msgid "Importing Noweb file"
+msgstr "Importerar Noweb-fil `"
+
+#: src/lyxfunc.C:2739
+msgid "Noweb file "
+msgstr "Noweb-fil "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "LateX-fil "
+
+#: src/lyxfunc.C:2744
+#, fuzzy
+msgid "Could not import Noweb file"
+msgstr "Kunde inte importera Noweb-filen"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Kunde inte importera LaTeX-filen"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Välj dokument som skall läsas in"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Läser in dokumentet"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "inlagt."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Kunde inte läsa in dokumentet"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Öppnat insättning"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "okänt"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Spara dokumentet och fortsätta?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX Versionskontroll: Första beskrivning"
+
+#: src/lyxvc.C:184
+#, fuzzy
+msgid "(no initial description)"
+msgstr "LyX Versionskontroll: Första beskrivning"
+
+#: src/lyxvc.C:187
+#, fuzzy
+msgid "Info"
+msgstr "Ignorera"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr ""
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX Versionskontroll: Loggmeddelande"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Strunta i ändringarna och fortsätta med inskickning?"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "När du går tillbaka kommer du att förlora alla ändringar"
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "i dokumentet sedan senaste inskickningen."
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Vill du öppna dokumentet?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "Ingen RCS historia!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "RCS Historia"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Stäng"
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Funktioner"
+
+# Visas med grekiska tecken
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Grek"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr ""
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr ""
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr ""
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr ""
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Blandat"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "OK  "
+
+# I math_forms.C skall det vara "Kolonner" och inte "Kolumner".
+# Tyvärr har engelskan samma ord, medan t.ex. svenskan har olika.
+# De skiljs därför åt med det extra mellanslaget här.
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Kolonner"
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Justera vertikalt|#v"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Justera horisontellt|#h"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "OK "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Smal|#S"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Medium|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Bred|#B"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negativ|#N"
+
+# Det är frågan om typografiska termer,
+# bredd på mellanrum 
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Fyrkant|#F"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "Dubbelfyrkant|#D"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "SKiljetecken"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Dekoration"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Mellanrum"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matris"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Topp|Mitt|Botten"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Matematikpanel"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Fil"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Redigera"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Stil"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Lägg in"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Hjälp"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#F"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#R"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#S"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#L"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#I"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#H"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Typsnitt på skärmen"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Importera%t|LaTeX...%x30|Textfil som Rader...%x31|Textfil som "
+"Stycken%x32|Noweb%x33"
+
+# som LaTeX
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "FIM|Ll#l#L"
+
+# textfil som rader
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FIM|Rr#R#r"
+
+# textfil som stycken
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIM|Ss#S#s"
+
+# Ny fil
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Exportera%t|som LaTeX...%x40|som DVI...%x41|som PostScript...%x42|som "
+"Text...%x43|Annat...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportera%t|som LinuxDoc...%x40|som DVI...%x41|som PostScript...%x42|som "
+"Text...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Exportera%t|som LinuxDoc...%x40|som DVI...%x41|som PostScript...%x42|som "
+"Text...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Tt#t#T"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|Aa#a#A"
+
+#: src/menus.C:453
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Ny fil...|Ny efter mall...|Öppna...%l|Stäng|Spara|Spara som...|Tillbaka till "
+"senast sparade%l|Visa dvi|Visa PostScript|Uppdatera dvi|Uppdatera "
+"PostScript%l|Bygg program%l|Skriv ut...|Faxa..."
+
+# Ny fil
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+# Ny efter mall
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|mM#m#M"
+
+# Öppna
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|pP#p#P"
+
+# Stäng
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|gG#g#G"
+
+# Spara
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Ss#s#S"
+
+# Spara som
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|oO#o#O"
+
+# Tillbaka till senast sparade
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|Tt#t#T"
+
+# Visa dvi
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|vV#v#V"
+
+# Visa postscript
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|iI#i#I"
+
+# Uppdatera dvi
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|Uu#u#U"
+
+# Uppdatera postscript
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|dD#d#D"
+
+# Bygg program
+#: src/menus.C:479
+msgid "FM|Bb#b#B"
+msgstr ""
+
+# Skriv ut
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|kK#k#K"
+
+# Faxa
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr ""
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Importera%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Exportera%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Avsluta%l"
+
+# Imprtera
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|Ii#i#I"
+
+# Exportera
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|xX#x#X"
+
+# Avsluta
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|Aa#A"
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Importera%t|LaTeX...%x15|Ascii-text som rader...%x16|Ascii-text som "
+"stycken%x17|Noweb...%x18"
+
+# Denna meny ("Fil") används när inga dokument är öppna
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Ny fil...|Ny fil efter mall...|Öppna...%l|Importera%m%l|Avsluta%l"
+
+# Menyn "Redigera->Flytande"
+# "floats" :P ...finns det något adekvat inhemskt ideom
+# i stäelt för di dar ovôlna låneola
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Flytande objekt & insättningar%t|Öppna/Stäng%x21|Smält%x22|Öppna alla "
+"fotnoter/marginalnoteringar%x23|Stäng alla "
+"fotnoter/marginalnoteringar%x24|Öppna alla figurer/tabeller%x25|Stäng alla "
+"figurer/tabeller%x26%l|Ta bort alla felrutor%x27"
+
+# R->S->Öppna/Stäng
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|pP#p#P"
+
+# R->S->Smält
+# Kanske skulle byta ord där?
+# ...något intetsägande
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|Ss#s#S"
+
+# Öppna alla fotnoter/marginalnoterningar
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|fF#f#F"
+
+# Stäng alla fotnoter/marginalnoterningar
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|tT#t#T"
+
+# Öppna alla figurer/tabeller
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|nN#n#N"
+
+# Stäng alla figurer/tabeller
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|gG#g#G"
+
+# Ta bort alla felrutor
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|bB#b#B"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tabell%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Multikolumn%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Multikolumn%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Topplinje%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Topplinje%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr ""
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Underlinje%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Underlinje%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|Uu#u#U"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Vänsterlinje%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Vänsterlinje%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Vv#v#V"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Högerlinje%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Högerlinje%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|Hh#h#H"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Vänsterjustera%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Vänsterjustera%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Högerjustera%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Högerjustera%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|gG#g#G"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Centrera%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "Centrera%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr ""
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Lägg till rad%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|Ll#l#L"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Lägg till kolumn%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|kK#k#K"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Ta bort rad%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|bB#b#B"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Ta bort kolumn%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|aA#a#A"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Ta bort tabell%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|oO#o#O"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Lägg in tabell%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Versionskontroll%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Registrera%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Skicka in ändringar%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Kvittera ut för redigering%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Skicka in ändringar%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Kvittera ut för redigering%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Tillbaka till förra versionen%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Ångra senaste inskickning%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Visa Historia%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Registrera%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr ""
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|Ss#s#S"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|Kk#k#K"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|Tt#t#T"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|iI#i#I"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|Hh#h#H"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Ångra|Gör om %l|Klipp|Kopiera|Klistra%l|Sök & Byt...|Gå till fel|Gå till "
+"Notering|Flytande objekt & insättningar%m|Tabell%m|Rättstavning....|Testa "
+"TeX|Innehållsförteckning...%l|Versionskontroll%m%l|Visa LaTeX "
+"loggfil%l|Klistra primär selektion som rader|Klistra primär selektion som "
+"stycken"
+
+# Ångra
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|nN#n#N"
+
+# Gör om
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|Gg#g#G"
+
+# Klipp
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Kk#k#K"
+
+# Kopiera
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr ""
+
+# Klistra
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|lL#l#L"
+
+# Sök & Byt...
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|Ss#s#S"
+
+# Gå till fel
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|fF#f#F"
+
+# Gå till Notering
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|tT#t#T"
+
+# Flytande objekt & Insättningar
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|yY#y#Y"
+
+# Tabell
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|aA#a#A"
+
+# Rättstavning...
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|Rr#r#R"
+
+# Testa TeX
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|eE#e#E"
+
+# Innehållsförteckning...
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|hH#h#H"
+
+# Versionskontroll
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Vv#v#V"
+
+# Visa LaTeX loggfil
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|Xx#x#X"
+
+# Klistra primär selektion som rader
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|pP#p#P"
+
+# Klistra primär selektion som stycken
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|mM#m#M"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Tecken...|Stycke...|Dokument...|Papper...|Tabell...|Citattecken...%l|Betonad "
+"stil%b|Namnstil%b|Fet stil%b|TeX-stil%b|Ändra miljödjup|LaTeX "
+"preamble...%l|Spara stil som förvald"
+
+# Tecken...
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|Tt#t#T"
+
+# Stycke...
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|Ss#s#S"
+
+# Dokument...
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr ""
+
+# Papper...
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|Pp#p#P"
+
+# Tabell...
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|aA#a#A"
+
+# Citattecken...
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|Cc#c#C"
+
+# Betonad stil
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|Bb#b#B"
+
+# Namnstil
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr ""
+
+# Fet stil
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Ff#f#F"
+
+# TeX-stil
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Xx#x#X"
+
+# Ändra miljödjup
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|mM#m#M"
+
+# LaTeX preamble
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr ""
+
+# Spara stil som förvald
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|rR#r#R"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Importera ASCII-fil%t|Som rader%x41|Som stycken%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|rR#r#R"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|sS#s#S"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Förteckningar%t|Innehållsförteckning%x21|Figurer%x22|Tabeller%x23|Lista över "
+"algoritmer%x24|Sakregister%x25|BibTeX-Referenser%x26"
+
+# Innehållsförteckning
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|Ii#i#I"
+
+# Figurer
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr ""
+
+# Tabeller
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr ""
+
+# Lista över algoritmer
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|aA#a#A"
+
+# Sakregister
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|Ss#s#S"
+
+# BiBTeX-referenser
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr ""
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Flytande%t|Figur%x71|Tabell%x72|Bred figur%x73|Bred tabell%l%x74|Algoritm%x75"
+
+# Figur...
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|Ff#f#F"
+
+# Tabell
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr ""
+
+# Bred figur
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|Bb#b#B"
+
+# Bred tabell
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|rR#r#R"
+
+# Algoritm
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr ""
+
+#: src/menus.C:1211
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Specialtecken%t|HFyllning%x31|Avstavningspunkt%x32|Skyddat "
+"blanktecken%x33|Radbrytning%x34|Ellips (...)%x35|Punkt för "
+"meningsslut%x36|Vanligt citattecken (\")%x37|Menyseparator %x38"
+
+# Hfyllning
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr ""
+
+# Avstavningspunkt
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|Aa#a#A"
+
+# Skyddat blanktecken
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|Ss#s#S"
+
+# Radbrytning
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|Rr#r#R"
+
+# Ellips (...)
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|Ee#e#E"
+
+# Punkt för meningsslut
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|Pp#p#P"
+
+# Vanligt citattecken (\")
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|cC#c#C"
+
+# Menyseparator
+#: src/menus.C:1228
+msgid "IMS|Mm#m#M"
+msgstr ""
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Figur...|Tabell...%l|Inkludera fil...|Importera textfil%m|Läs in "
+"LyXfil...%l|Fotnot|Marginalnotis|Flytande "
+"objekt%m%l|Förteckningar%m%l|Specialtecken%m%l|Notering...|Referensmärke...|H"
+"änvisning...|Citatreferens...|Sakord...|Sakord senaste ord"
+
+# Figur...
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|Ff#f#F"
+
+# Tabell...
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|Tt#t#T"
+
+# Inkludera fil...
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|Ii#i#I"
+
+# Importera textfil
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|mM#m#M"
+
+# Läs in LyXfil...
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr ""
+
+# Fotnot
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|oO#o#O"
+
+# Marginalnotis
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|aA#a#A"
+
+# Flytande objekt
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|yY#y#Y"
+
+# Förteckningar
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|rR#r#R"
+
+# Specialtecken
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|pP#p#P"
+
+# Notering
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr ""
+
+# Referensmärke...
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|eE##e#E"
+
+# Hänvisning...
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|vV#v#V"
+
+# Citatreferens
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|Cc#c#C"
+
+# Sakord
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|kK#k#K"
+
+# Sakord senaste ord
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "IM|dD#d#D"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr ""
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Bråk|Kvadratrot|Exponent|Index|Summa|Integral%l|Matematikläge|På egen "
+"rad%l|Matematikpanel..."
+
+# Bråk
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Bb#b#B"
+
+# Kvadratrot
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|Kk#k#K"
+
+# Exponent
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr ""
+
+# Index
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr ""
+
+# Summa
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|Ss#s#S"
+
+# Integral
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr ""
+
+# Matematikläge
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr ""
+
+# På egen rad
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|Pp#p#P"
+
+# Matematikpanel
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|aA#a#A"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr "Skärmfonter...|Rättstavning...|Tangentbord...|LaTeX...%l|Omkonfigurera"
+
+# Skärmfonter...
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|Ss#s#S"
+
+# Rättstavning...
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Rr#r#R"
+
+# Tangentbord...
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Tt#t#T"
+
+# LaTeX...
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr ""
+
+# Omkonfigurera
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|Oo#o#O"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Introduktion|Nybörjarkurs|Handbok|Avancerad "
+"redigering|Anpassning|Referensmanual|Kända "
+"fel|LaTeX-Konfiguration%l|Upphovsrätt och garanti...|Tack...|Version..."
+
+# Introduktion
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr ""
+
+# Nybörjarkurs
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|Nn#N#n"
+
+# Handbok
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "HM|Hh#H#h"
+
+# Avancerad redigering
+#: src/menus.C:1566
+msgid "HM|xX#x#X"
+msgstr "HM|Aa#A#a"
+
+# Anpassning
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|pP#P#p"
+
+# Referensmanual
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr ""
+
+# Kända fel
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr ""
+
+# LaTeX-konfiguration
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr ""
+
+# Upphovsrätt och garanti
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|Uu#U#u"
+
+# Tack
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|Tt#T#t"
+
+# Version
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr ""
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr ""
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " av "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Bibliotekskatalog "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Användarkatalog: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Öppnar hjälpfil"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Kör:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Inget dokument öppet *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Välkommen till LyX!"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Meningslöst för detta slag av stycke!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Fel: Kunde inte byta till katalog: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "LyX internt fel:"
+
+# (vid internt fel)
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr ""
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Skriv till"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Skrivare|#S"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Fil|#F"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Alla sidor|#l"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Bara udda sidor|#u"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Bara jämna sidor|#j"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Normal sidföljd|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Omvänd sidföljd|#O"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Sidföljd"
+
+#: src/print_form.C:76
+msgid "Pages:"
+msgstr "Sidor:"
+
+#: src/print_form.C:81
+msgid "Copies"
+msgstr "Kopior"
+
+# Antal kopior
+#: src/print_form.C:85
+msgid "Count:"
+msgstr "Antal:"
+
+# Hur kopiorna skrivs ut (vilket är vilket?)
+#: src/print_form.C:88
+msgid "Unsorted|#U"
+msgstr "Osorterade|#O"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Filtyp"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Kommando:|#K"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "PostScript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Text|#x"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Använd samma språk som i dokumentet|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Använd alternativt språk:|#l"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Tillåt sammansatta ord|#T"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Skicka val av kodning till ispell|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Använd alternativ personlig ordlista:|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Extra specialtecken tillåtna i ord:|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Ordlista"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Ersätt"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Nästan\n"
+"Lika"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Inställningar Rättstavning|#I"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Starta rättstavning|#S"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Lägg till i personlig ordlista|#L"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Ignorera ordet|#g"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Godta ordet denna omgång|#O"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Avbryt rättstavning|#v"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Stäng rättstavning|#T^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 %"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 %"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Byta ut ordet?|#B"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Inställningar"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Rättstavning"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Ispell-processen har dött av någon anledning. *En* möjlig orsak\n"
+"kan vara att du inte har en ordlistefil\n"
+"för dokumentets språk installerat.\n"
+"Undersök /usr/lib/ispell eller sätt en annan\n"
+"ordlista i menyn för Inställningar Rättstavning."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " ord granskade."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " ord granskade."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Stavningskontroll klar!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Ispell-processen har dött av någon anledning.\n"
+"Den har kanske avbrutits."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Multikolumner kan bara vara horisontella."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr "Du kan inte mata in två mellanslag i rad sådär. Läs Nybörjarkursen."
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+"Du kan inte mata in ett mellanslag i början på ett stycke. Läs "
+"Nybörjarkursen."
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Omöjlig operation"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Du kan inte stoppa in ett flytande objekt inuti ett annat!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Du kan inte sätta in en marginpar i en minisida!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Kan inte klippa tabell."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Flytande objekt skulle då innefatta ett annat!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Öppnat flytande objekt"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Stängt flytande objekt"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Ingenting att göra"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Ingen fontändring definerat. Välj Tecken under Stil-menyn för att definera "
+"fontändring."
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Jag vet inte vad jag skall göras med halva flytande objekt."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "beklagar."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Jag vet inte vad jag skall göra med halva tabeller."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Kan inte klistra in ett flytande objekt inuti ett annat!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "En tabellcell kan bara innehålla högst ett stycke!"
diff --git a/po/tr.po b/po/tr.po
new file mode 100644 (file)
index 0000000..7a4c7d8
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,4892 @@
+# Turkish translation for LyX.
+# Copyright (C) 1998. F. Kaðan Gürkaynak, Nurhan Çetin.
+# F. Kaðan Gürkaynak <kgf@linux.org.tr>, 1998.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: lyx 0.12.1\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:54+02:00\n"
+"Last-Translator: F. Kaðan Gürkaynak <kgf@wpi.edu>\n"
+"Language-Team: turkish <tr@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-9\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Belgeniz biçimleniyor..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Baþka hata yok"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "ChkTeX uyarý no #"
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Yazýtipleri X-Sunucusuna yükleniyor"
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Ýsim "
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "LaTeX Önyazý"
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "chktex çalýþtýrýlýyor..."
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "LaTex çalýþtýrýlýyor..."
+
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "LATEX KÜTÜK DOSYASI BULUNAMADI!"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr ""
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "LaTeX Kütüðü"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Komutu tanýmla"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Bir önceki karakteri seç"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Bibtex ekle"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Otomatik kayýt"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Belgenin baþýna git"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Belgenin baþýna kadar seç"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Kapat"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Belgenin sonuna git"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Belgenin sonuna kadar seç"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Faks"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Yeni belge"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Hazýr biçimlerden yeni belge"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Aç"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Bir önceki belgeye geç"
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Bastýr"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Son kayýtlý hale dön"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "DVI güncelle"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "PS güncelle"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "DVI görüntüle"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr "PS görüntüle"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr ""
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "TeX denetimi"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Kaydet"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Ýsimle Kaydet"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Vazgeç"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Bir karakter geri git"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Bir karakter ileri git"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Gönderme ekle"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Komut çalýþtýr"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Kopyala"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Kes"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Ortam derinliðini azalt"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Ortam derinliðini arttýr"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Ortam derinliðini deðiþtir"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "`Bullet' ayarlarýný deðiþtir"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Aþaðý git"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Sonraki satýrý seç"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Paragraf ortamýný seç"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Sonraki hataya git"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Þekil ekle"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Bul ve Deðiþtir"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Ýmlecin kaydýrma çubuðunu izleyiþini deðiþtir"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Kalýnlaþtýr/incelt"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Kod tarzýný deðiþtir"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Öntanýmlý yazýtipi"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Vurgulamayý deðiþtir"
+
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Kullanýcý-tanýmlý tarzý deðiþtir"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Ýsim tarzýný deðiþtir"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Roman yazý tipini deðiþtir"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Sans yazý tipini deðiþtir"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Yazýtipi boyunu ayarla"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Yazýtipi durumunu göster"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Altý-çizili yazýtipini deðiþtir"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Dipnot ekle"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Sonraki karakteri seç"
+
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Yatay dolgu ekle"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Hece bölme tiresi ekle"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Üç nokta (...) ekle"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Cümle sonu noktasý ekle"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Klavye eþlemesini kapat"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Temel klavye eþlemesini kullan"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Ýkincil klavye eþlemesini kullan"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "Klavye eþlemesini deðiþtir"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Etiket ekle"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Paragraf ortamýný kopyala"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Paragraf ortamýný yapýþtýr"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Kaðýt boyu ve yazý alanýný belirle"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Satýr baþýna git"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Satýr baþýna kadar seç"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Satýr sonuna git"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Satýr sonuna kadar seç"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Çýkýþ"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Kenar boþluðu etiketi ekle"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Yunan harfleri"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Matematik kipi"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Bir paragraf aþaðý git"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Sonraki paragrafý seç"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Bir paragraf yukarý git"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Önceki paragrafý seç"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Yapýþtýr"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Boþluk ekle"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Alýntý ekle"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Yeniden yapýlandýr"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Yeniden yap"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Çapraz-baþvuru ekle"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Tablo ekle"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "TeX tarzýný deðiþtir"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Geri al"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Melt"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Belge ekleniyor"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Tüm hata kutularýný kaldýr"
+
+#: src/LyXAction.C:680
+#, fuzzy
+msgid "Insert menu separator"
+msgstr "Cümle sonu noktasý ekle"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Taným mevcut deðil!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Belgeyi komuta gönder"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr " (deðiþtirildi)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr " (deðiþtirilemez)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr "Belgeniz sadece okunabilir, deðiþtirilemez."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Kaðýt Düzeni"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Kaðýt düzeni ayarlandý"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Dikkat: Geçersiz uzunluk (geçerli örnek: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "'ParagraphExtra' Düzeni"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr "'ParagraphExtra' düzeni ayarlandý"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Uyarý: Geçersiz yüzde deðeri (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Tablo Ýçin Ek Form"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Tablo Düzeni"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Uyarý: Yanlýþ imleç konumu, pencere güncellendi"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Onay: Sil-tuþuna bir kere daha basýn"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Hata!"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Belirtilen dosya açýlamadý:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr ""
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Yazý sýnýfý yüklenemedi "
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- öntanýmlar kullanýlýyor"
+
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr ""
+
+# , c-format
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Uyarý: lyx %.2f formatý beklerken %.2f bulundu\n"
+
+# , c-format
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "Hata: lyx %.2f formatý beklerken %.2f bulundu\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Uyarý!"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Belgenin okunmasý tamamlanamadý"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Belgeniz kýrpýlmýþ olabilir"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "HATA!"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr "Eski LyX dosya formatý, okumak için LyX 0.10.x kullanýn!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "LyX dosyasý deðil!"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Dosya okunamadý!"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Hata! Belge sadece okunabilir: "
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Hata! Dosya yazýlamadý: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Hata! Dosya düzgün olarak kapatýlamadý: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Hata: Dosya yazýlamadý:"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Hata: Geçici dosya açýlamadý:"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Hata! Dosya düzgün kapatýlamadý:"
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "LYX_HATASI:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Dosya yazýlamadý"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr ""
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "LaTex çalýþtýrýlýyor..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX çalýþmadý!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Kütük dosyasý yok:"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Bitti"
+
+#. path to Literate file
+#: src/buffer.C:3174
+#, fuzzy
+msgid "Running Literate..."
+msgstr "LaTex çalýþtýrýlýyor..."
+
+#: src/buffer.C:3194
+#, fuzzy
+msgid "Literate command did not work!"
+msgstr "LaTeX çalýþmadý!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr ""
+
+#: src/buffer.C:3263
+#, fuzzy
+msgid "Build did not work!"
+msgstr "LaTeX çalýþmadý!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "chktex çalýþtýrýlýyor..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex çalýþmadý!"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Aþaðýdaki dosya ile çalýþtýrýlamadý:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Geçici dosya açýlamadý:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Hata! Geçici dosya açýlamadý:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Tablo üzerinde *roff komutu çalýþtýrýlýrken hata oluþtu"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Geçersiz Ýþlem!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Tablo içine tablo veya liste eklenemez"
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Üzgünüm."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Belgede deðiþiklik var:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Belge kaydedilsin mi?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Kaydedilmemiþ belgeler var:"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Yine de çýkmak istiyor musunuz?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Belge kaydediliyor"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Belge belirtilen isimle kaydedildi"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Otomatik yedek dosyasý silinemedi!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Kayýt iþlemi baþarýsýz!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "Hiç bir belge açýk deðil!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: Belgeyi kaydetmeyi deniyorum "
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " þu isimle.."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr " Kayýt baþarýlý gözüküyor. Oh be."
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr " Kayýt iþlemi baþarýsýz! Hala deniyorum..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr " Kayýt iþlemi baþarýsýz! Kötü haber, belge kayýp."
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "Belgenin acil durum yedeði var!"
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "Onu yüklemeyi deneyeyim mi?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Otomatik yedek dosyasý daha yeni."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "Onu mu yükleyeyim?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Hazýr biçimli dosya açýlamadý"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Dosya dönüþtürülemedi"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Belge zaten açýk:"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "O belgeyi yeniden yüklemek ister misiniz?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "`"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' dosyasý sadece okunabilir"
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Bu isimle yeni bir belge yaratayým mý? "
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Boyut|#z"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "Peki"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Uygula|#A"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Vazgeç|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "Bullet derinliði"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Standart|#S"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matematik|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Üzgünüm, sisteminizdeki libXpm çok eski."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Bu özellik için en az xpm-4.7 (3.4g) gerekli."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "LyX'i siyah-beyaz çalýþtýrmayý deneyin (lyx  -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+" öntanýmlý | minik | betik | dipnot | küçük | normal | büyük | Büyük | BÜYÜK "
+"| dev | Dev"
+
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Ayrýntýlý 'bullet' seçimi"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr ""
+
+#: src/credits.C:66
+#, fuzzy
+msgid "Please install correctly to estimate the great"
+msgstr "olup olmadýðýný kontrol edin. Ne yazýk ki çýkmak zorundayým."
+
+#: src/credits.C:69
+#, fuzzy
+msgid "amount of work other people have done for the LyX project."
+msgstr "LyX projesine katkýda bulunan herkese teþekkürler."
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr ""
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr ""
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "LyX projesine katkýda bulunan herkese teþekkürler."
+
+#: src/credits_form.C:50
+#, fuzzy
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1998 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Bu program serbest bir yazýlýmdýr. Free Software Foundation\n"
+"tarafýndan yayýmlandýðý þekilde GNU GPL (General Public Licence)\n"
+"koþullarý (2. ya da daha sonraki bir sürüm) altýnda daðýtýlabilir\n"
+"ve/veya deðiþtirilebilir."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[görüntüleme hatasý]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[görüntülüyorum ... ]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[dosya yok]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[gösterilmiyor]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[ghostscript yok]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[bilinmeyen bir hata]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Þekil"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "Þekil yolu verilmemiþ"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr "Clipart"
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Belge"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "EPS Þekil"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "Dosya isminde aþaðýdaki karakterler bulunmamalý:"
+
+# , c-format
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "boþluk, '#', '~', '$' veya '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Hata! Belirtilen dizin yaratýlamadý:"
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "LyX iç hatasý!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Dizine yazýlýp yazýlamayacaðý denenemedi"
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Dizin test dosyasý açýlamadý"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Test dosyasý yaratýldý ama silinemiyor, hayýrdýr?"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Hata! Dizin açýlamýyor:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Hata! Dosya silinemedi:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Hata! Geçici dizin yaratýlamadý:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Hata! Geçici dizin silinemedi:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Ýç hata!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "createDirectory geçersiz bir isimle çaðrýldý"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Hata! Belirtilen dizin yaratýlamadý:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Karakter kümesini ayarla|#C"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Karakter kümesi bulunamadý!"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Hata:\n"
+"\n"
+"Klavye eþlemesi\n"
+"bulunamadý"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Karakter kümesi:|#H"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Diðer...|#O"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Diðer...|#T"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Dil"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Eþleme"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Temel klavye eþlemesi|#r"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Klavye eþlemesi kullanma|#N"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Ýkincil klavye eþlemesi|#e"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Ýkincil"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Temel"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "EPS dosyasý|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Tam ekran öngörüntüleme|#v"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Tara...|#B"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Çerçeve göster|#F"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Dönüþümleri yap|#r"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Seçenekler"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Açý:|#L"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "sayfanýn yüzde kaçý|#g"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Öntanýmlý|#t"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "inç|#h"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Görüntüle"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Yükseklik"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Geniþlik"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Dönüþ açýsý"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Renkli görüntüle|#D"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Bu þekli görüntüleme|#y "
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Gri tonlarý ile görüntüle|#i"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Siyah-beyaz görüntüle|#s"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Öntanýmlý|#U"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#c"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "inç|#n"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "sayfanýn yüzde kaçý|#P"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "Sütunun yüzde kaçý|#o"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Altbaþlýk|#k"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Altþekil|#q"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Dizin:|#D"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Dosya tipi:|#P"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "Dosya ismi:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Tazele|#R#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Baþlangýç|#H#h"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Kullanýcý1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Kullanýcý2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Sütun"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Satýr"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Bul|#n"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "ve deðiþtir|#W"
+
+#: src/form1.C:331
+#, fuzzy
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+#, fuzzy
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Deðiþtir"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Kapat|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Büyük-küçük farklý|#s#S"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Sözcük eþle|#M#m"
+
+#: src/form1.C:351
+#, fuzzy
+msgid "Replace All|#A#a"
+msgstr "Deðiþtir"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Yunan harfleri kipi"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Yunan harfleri klavye dizilimi"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Normal klavye dizilimi"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "TeX kipi"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Numarasýz"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Numara"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Eklenecek etiketi girin:"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "Matematik yazý kipi"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Matematik kipi için geçersiz iþlem!"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Formül düzenleme kipi"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr "Makro: "
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Tuþ:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Not:|#R"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Tuþ:|#K"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Etiket:|#L"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Gönderme"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Kaynakça elemaný"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "BibTeX Kaynaklarý"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Veri tabaný:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Tarz: "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Hata"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "LaTeX Hatasý"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Hata kutusu açýldý"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Tara|#B"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Harf dizgisi yapma|#D"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Yükle|#L"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "Dosya ismi:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "Görünür boþluk|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr "Verbatim|#V"
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "`input' kullan|#i"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "`include' kullan|#U"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Belgeler"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Altbelgeyi seçin"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Ekle"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Girdi"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr "Verbatim Input"
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Tuþ:|#K"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Dizin"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Dizin"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Dizini bastýr"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Not"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Kapat|#C^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Algoritma listesi"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Þekil listesi"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Tablo listesi"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Üstbelge:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Kaynak tipi"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Etikete git"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Etiketi deðiþtir"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Sayfa numarasý"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Kaynak"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Sayfa: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Ref: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Ýçindekiler"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr ""
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+#, fuzzy
+msgid "Name|#N"
+msgstr "Alýcý Adý:|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+msgid "Close|#C^[^M"
+msgstr "Kapat|#C^[^M"
+
+#: src/inseturl.C:120 src/inseturl.C:121
+msgid "HTML type|#H"
+msgstr "HTML Tip:|#H"
+
+#: src/inseturl.C:141
+#, fuzzy
+msgid "Insert Url"
+msgstr "Ekle"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr ""
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr ""
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "diðer..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Tuþ eþlemeleri"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr " seçenekler:"
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "TÜM harflere aksan izni ver|#w"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Güncelle|#Uu"
+
+#: src/layout.C:1293
+#, fuzzy
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr "LyX kendi düzen tanýmlamalarýný bulmayý baþaramadý!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "\"textclass.lst\" dosyasýnýn yüklenmiþ"
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "olup olmadýðýný kontrol edin. Ne yazýk ki çýkmak zorundayým."
+
+#: src/layout.C:1349
+#, fuzzy
+msgid "LyX wasn't able to find any layout description!"
+msgstr "LyX kendi düzen tanýmlamalarýný bulmayý baþaramadý!"
+
+#: src/layout.C:1350
+#, fuzzy
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "\"textclass.lst\" dosyasýnýn yüklenmiþ"
+
+#: src/layout.C:1351
+#, fuzzy
+msgid "Sorry, has to exit :-("
+msgstr "olup olmadýðýný kontrol edin. Ne yazýk ki çýkmak zorundayým."
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Paragraf Arasý"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "Ýçeriden|#I"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Boþluk|#K"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Sýnýf:|#C"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Sayfa tarzý:|#P"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Yazýtipleri:|#F"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Yazýtipi boyu:|#O"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Tek-parça yerleþtirmesi:|#L"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "PS sürücüsü:|#S"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Kodlama:|#D"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Bir|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Ýki|#T"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Yüz"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Bir|#n"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Ýki|#T"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Ek seçenekler:|#X"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Dil:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Öntanýmlý ara:|#u"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Bölüm numaralandýrma derinliði"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr "Ýçindekiler derinliði"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Boþluk|#g"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "`Bullet' þekilleri"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "AMS Math kullan|#M"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Aile:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Seri:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Þekil:|#H"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Boy:|#Z"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Diðer:|#M"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Renk:|#C"
+
+#: src/layout_forms.C:164
+#, fuzzy
+msgid "Toggle on all these|#T"
+msgstr "Ýsim tarzýný deðiþtir"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr ""
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr ""
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Etiket Geniþliði:|#d"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Ýçeriden"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Yukarý|#b"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Aþaðý|#E"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Yukarý|#o"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Aþaðý|#E"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Ýçeriden baþlama|#I"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Sað|#R"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Sol|#f"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Blok|#c"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Ortala|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Yukarý:|#v"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Aþaðý:|#w"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Sayfa aralarý"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Satýrlar"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Hizalama"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Düþey boþluk"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Ek Seçenekler|#X"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Koru|#K"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Koru|#p"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "Peki|#O"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Tip:|#T"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Tek|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Çift|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Metin"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Özel:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Kenar boþluklarý"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Üst/dip boþluklar"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Yön"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Boyuna|#o"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Enine|#L"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Kaðýt boyu:|#P"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "Özel kaðýt boyu"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "`Geometry' paketini kullan|#U"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Geniþlik:|#W"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Uzunluk:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Üst:|#T"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Alt:|#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Sol:|#e"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Sað:|#R"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Üst kýsým yüksekliði:|#i"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Üst aralýðý:|#d"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Dip aralýðý:|#F"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Çerçeve"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Üst|#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Alt|#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Sol|#L"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Özel hücre"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Çoklu sütun|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Sütun ekle|#A"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Sütun sil|#O"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Satýr ekle|#p"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Satýr sil|#w"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Tablo sil|#D"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Sütun"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Sað"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Çerçeveyi ayarla|#S"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Çerçeve ayarlarýný geri al|#U"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Uzun tablo"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "90° çevir|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Satýr kesmeleri|#N"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Özel tablo"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Ýlk Baþlýk"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Baþlýk"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Dip"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Son Dip"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Yeni sayfa"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "90° çevir"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Ek Seçenekler|#X"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Sol|#e"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Sað|#i"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Ortala|#C"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Ek seçenekler"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Uzunluk|#L"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "ya da %|#o"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Orta|#d"
+
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "Sayfacýk ve paragraflar arasýnda HFill|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Yeni sayfacýða baþla|#S"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Ýçeriden paragraf|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Sayfacýk|#M"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Tek-parça|#F"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Özel Çoklu Sütun Hizalamasý"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Özel hücre"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "Encapsulated Postscript (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "Satýr içinde EPS (*.eps, *.ps)|#I"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Tip"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Roman yazýtipi|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Sans Serif Yazýtipi|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Daktilo Yazýtipi|#T"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Yazýtipi Kodlamasý|#N"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Yazýtipi Ölçeði|#Z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Güncelle|Uu#u"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Güncelle|#U"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Kaynak ekle|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Sayfa Numarasý Ekle|#P"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Kaynaða git|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr "Kayýt iþlemi baþarýsýz. Dosya ismini deðiþtirip yeniden deneyin."
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(belge kaydedilmedi)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Hazýr biçimler"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Kayýt için yeni dosya ismini girin"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Vazgeçildi."
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "Ayný isimde bir belge var:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Yine de kaydedeyim mi?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Ayný isimli, açýk baþka bir belge var!"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Þu anki belge ile deðiþtireyim mi?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Belgenin ismi '"
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "olarak deðiþtirildi ama kaydedilmedi"
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Belge zaten var:"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Üzerine yazayým mý?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr "Üzgünüm, þekiller görüntülenirken bunu yapamam."
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Lütfen iþlemin bitmesi için biraz bekleyin ve yeniden deneyin."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(ya da asi gs süreçlerini elle sonlandýrýn ve yeniden deneyin.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Yazým denetimi yapýlýrken bu iþlemi yapamam."
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Önce yazým denetimini durdurun"
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Bir hata bulundu"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Hatayý düzeltmeyi denemelisiniz."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " adet hata bulundu"
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Hatalarý düzeltmeyi denemelisiniz."
+
+#: src/lyx_cb.C:477
+#, fuzzy
+msgid "There were errors during the LaTeX run."
+msgstr "LaTeX çalýþýrken hatalar oluþtu."
+
+#: src/lyx_cb.C:492
+#, fuzzy
+msgid "Wrong type of document"
+msgstr "Belgenin sonuna git"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr ""
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+#, fuzzy
+msgid "There were errors during the Build process."
+msgstr "LaTeX çalýþýrken hatalar oluþtu."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex, LinuxDoc için pek anlamlý deðil."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Hiç uyarý bulunamadý."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Bir tane uyarý bulundu."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "'Deðiþtir->Hataya git' seçeneðini kullan."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " adet uyarý bulundu."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "`Deðiþtir->Hataya git' seçeneðini kullan"
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex baþarý ile çalýþtýrýldý"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Görünüþe göre chktex çalýþmýyor."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Çalýþtýrýlan komut:"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Belirtilen dosya halihazýrda mevcut:"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+#, fuzzy
+msgid "Do you want to overwrite the file?"
+msgstr "Belgeyi açmak istiyor musunuz?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+#, fuzzy
+msgid "Canceled"
+msgstr "Vazgeçildi."
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Düzgün LaTeX dosyasý belirtilen isimle kaydedildi"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Belge sýnýfý linuxdoc olmalý."
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "LinuxDoc SGML dosyasý oluþturuluyor `"
+
+#: src/lyx_cb.C:901
+#, fuzzy
+msgid "LinuxDoc SGML file save as"
+msgstr "LinuxDoc SGML dosyasý"
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "Belge sýnýfý linuxdoc olmalý."
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "LinuxDoc SGML dosyasý oluþturuluyor `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "LinuxDoc SGML dosyasý"
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "ASCII dosyasý belirtilen isimle kaydedildi"
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Belgenin otomatik yedeði alýnýyor..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Otomatik yedekleme sýrasýnda hata oluþtu!"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Eklenecek dosya"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Hata! Belirtilen dosya açýlamýyor:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Ýçindekiler"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Kaynak ekleniyor"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Dipnot ekleniyor..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "LinuxDoc SGML dosyasý okunuyor `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "LinuxDoc SGML dosyasý TeX dosyasýna çevriliyor..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "LinuxDoc SGML dosyasý dvi biçimine çevriliyor..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "LinuxDoc SGML dosyasý dvi biçimine çevriliyor..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Karakter tarzý"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Paragraf Ortamý"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Belge Düzeni"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Alýntýlar"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "LaTeX Önyazý"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Þu anki ayarlarý "
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "(karakter, belge, kaðýt ve alýntýlar)"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "yeni belgeler için öntanýmlý yapmak istiyor musunuz?"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Aç/Kapat..."
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Baþka `geri al' bilgisi yok"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "Matematik kipinde `Yeniden Yap' henüz yok"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr "Baþka `Yeniden Yap' bilgisi yok"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Yazýtipi: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Derinlik: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Kenar boþluk notu ekleniyor."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Paragraf ortam tipi kopyalandý"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Paragraf ortam tipi ayarlandý"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Ortam derinliði deðiþtirildi (belki imkan dýþýndadýr, kimbilir)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "Paragraf düzeni ayarlandý"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Bazý parametreleri bu belge sýnýfýnýn"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "öntanýmlý deðerlerine göre ayarlayayým mý?"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Çevrim hatalarý!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "seçilen belge sýnýfý için"
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "seçilen belge sýnýfý için"
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Belge yeni belge sýnýfýna göre çevriliyor..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Bir paragraf çevrilemedi"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " adet paragraf çevrilemedi"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "seçilen belge sýnýfý için"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "Belge düzeni ayarlandý"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Baþka not yok"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Alýntý tipi ayarlandý"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "LaTeX önyazýsý ayarlandý"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Tablo içine tablo ekleyemem."
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Tablo ekleniyor..."
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Tablo eklendi"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+#, fuzzy
+msgid "ERROR!  Unable to print!"
+msgstr "Dosya okunamadý!"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr ""
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr ""
+
+#: src/lyx_cb.C:3425
+#, fuzzy
+msgid "Error:"
+msgstr "Hata:"
+
+#: src/lyx_cb.C:3426
+#, fuzzy
+msgid "Unable to print"
+msgstr "Dosya okunamadý!"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr ""
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Þekil ekleniyor..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "Þekil eklendi"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Ekran seçenekeleri ayarlandý"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "LaTeX Seçenekleri"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Yapýlandýrma çalýþtýrýlýyor..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Yapýlandýrma bilgisi yeniden yükleniyor..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Sistem yeniden yapýlandýrýldý."
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Yenilenmiþ herhangi bir belge sýnýfýný kullanmak"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "için LyX'i yeniden baþlatmalýsýnýz."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Bu etiket "
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "belgede bulunamadý"
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Belge yok ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Belgede hiç etiket bulunamadý ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr ""
+" Hiçbiri | Tanýmlý-ara | Küçük-ara | Orta-ara | Büyük-ara | Dikey-Doldur | "
+"Uzunluk "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr " Deðiþtirme %l| Roman | Sans Serif | Daktilo %l| Baþtan "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Deðiþtirme %l| Ýnce | Kalýn %l| Baþtan "
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr " Deðiþtirme %l| Dik | Ýtalik | Eðik | Small Caps %l| Baþtan "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+" Deðiþtirme %l| Minicik | Çok küçük | Daha küçük | Küçük | Normal | Büyük | "
+"Daha büyük | Çok büyük | Kocaman | Dev gibi %l| Arttýr | Azalt | Baþtan "
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr " Deðiþtirme %l| Vurgu | Altçizgi | Ýsim | LaTeX kipi %l| Baþtan "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+" Deðiþtirme %l| Renksiz | Siyah | Beyaz | Kýrmýzý | Yeþil | Mavi | Turkuaz | "
+"Mor | Sarý %l| Baþtan "
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Tek | Birbuçuk| Çift | Baþka "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Küçük-ara | Orta-ara | Büyük-ara | Uzunluk "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Öntanýmlý | Özel | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" Hiçbiri | A4 küçük boþluk (sadece boyuna) | A4 çok küçük boþluk "
+"(sadeceboyuna) | A4 çok geniþ boþluk (sadece boyuna) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr " ``metin'' | ''metin'' | ,,metin`` | ,,metin'' | «metin» | »metin« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "LyX Flamasý"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Kaldýr"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Evet|Yy#y"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Hayýr|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+#, fuzzy
+msgid "Clear|#e"
+msgstr "büyük"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Deðiþiklikler belgeye yansýtýlmayacaktýr."
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Belge sadece okunabilir:"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Uyarý: çalýþtýrýlabilir dosyanýn yolu belirlenemedi."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Sorun yaþarsanýz, LyX'i tam yolunu belirterek çaðýrmayý deneyin."
+
+#: src/lyx_main.C:271
+#, fuzzy
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "LYX_DIR_12 çevre deðiþkeni iþe yaramýyor."
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Kullanýcý dizini: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Hata! Geçici dizin silinemedi:"
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "'-sysdir' komut satýrý parametresini kullanýn veya"
+
+#: src/lyx_main.C:282
+#, fuzzy
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr "LYX_DIR_12 çevre deðiþkeni deðerini `chkconfig.ltx' dosyasýný içeren"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "LyX sistem dizinine ayarlayýn."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Öntanýmlý bilgileri kullanýyorum."
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " ancak sorunlar çýkabilir."
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr " Sorunlar bekleniyor."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Ama sizin kiþisel bir LyX dizininiz yok ki."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Kendi yapýlandýrmanýz için bu dizin gerekli."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Sizin için bir tane yaratmamý ister misiniz (isteyin)?"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Ama sizin kiþisel bir LyX dizininiz yok ki."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: Dizin yaratýlýyor "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " ve yapýlandýrma çalýþtýrýlýyor..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Baþarýsýz, yerine "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr "eklendi."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Bitti!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "LyX uyarýsý!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Okuma sýrasýnda hata oluþtu "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Öntanýmlý bilgileri kullanýyorum."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Hata ayýklama seviyesi "
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX|#L"
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Kullaným: lyx [ komut satýrý deðerleri ] [ isim.lyx ... ]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "Komut satýrý deðerleri (büyük küçük harf farklý):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help           LyX kullanýmý özeti"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x       sistem dizinini x olarak belirle"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "   -width x        ana pencerenin geniþliði"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y       ana pencerenin yüksekliði"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr "   -xpos x         ana pencerenin x koordinatý"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y         ana pencerenin y koordinatý"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          n hata ayýklama seviyesini kullan. Seçenekler için -dbg "
+"65535 -help deneyin"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        yazý ve arkaplan renklerini terisne çevirir"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           LyX'in siyah-beyaz çalýþmasýný saðlar"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  seçimler için alternatif bir yöntem kullanýr\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Ek seçenekler için LyX kýlavuz sayfasýna bakýn."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "-dbp için gereken sayý eksik!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "-sysdir için gereken dizin eksik!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Faks no.:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Alýcý Adý:|#N"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Þirket:|#E"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Telefon Defteri"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Seç|#S"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Ekle|#t"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Çýkar|#D"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Kaydet|#V"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Gideceði yer:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Not:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Faks dosyasý: "
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Boþ telefon rehberi"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Kayýt (gerekli)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Telefon rehberi açýlamýyor: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "OLMAYAN VEYA BOÞ KÜTÜK DOSYASI!"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Mesaj-Penceresi"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cBoþ Telefon Rehberi"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Telefon rehberi"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Roman"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr "Sans serif"
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Daktilo"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Sembol"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Inherit"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Aldýrma"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Ýnce"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Kalýn"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Dik"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Ýtalik"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Eðik"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Small Caps"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Minicik"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Çok küçük"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Daha küçük"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Küçük"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Normal"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Büyük"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Daha büyük"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Çok büyük"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Kocaman"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Dev gibi"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "Arttýr"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "Azalt"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "minicik"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "çok küçük"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "daha küçük"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "küçük"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normal"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "büyük"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "daha büyük"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "çok büyük"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "kocaman"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "dev gibi"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "arttýr"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "azalt"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "inherit"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "aldýrma"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Kapalý"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "Açýk"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "Deðiþtir"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Hiçbiri"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Siyah"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Beyaz"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Kýrmýzý"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Yeþil"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Mavi"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr "Turkuaz"
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Mor"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Sarý"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Matematik"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Inset"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "Vurgu "
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Alt çizgi "
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Ýsim "
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "LaTeX"
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Öntanýmlý"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Bilinmeyen dizi:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Bilinmeyen hareket"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Bir belge açýk deðilken bu komut kullanýlamaz"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Belge sadece okunabilir"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Metin kipi"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Bilinmeyen dýþyazým tipi: "
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Bilinmeyen dýþyazým tipi: "
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Düzen "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " bilinmiyor"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr "Deðiþtirilecek bir çapraz-baþvuru yok"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Ýþaret kaldýrýldý"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Ýþaret konuldu"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Ýþaretleme devre dýþý"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Ýþaretleme seçildi"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "Push-toolbar en az bir parametre ister"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Kullaným: toolbar-add-to <LyX komutu>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "Kütük dosyasý yok:"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Bunu sadece matematik kipinde yapabilirsiniz!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Alt belge açýlýyor "
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Bilinmeyen tür dipnot"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Belge sadece okunabilir"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Yeni belge için dosya ismini girin"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "yenidosya"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Bu belgeyi kapatmak istiyor musunuz ?\n"
+"('Hayýr' açýk olan sürüme geçmenizi saðlayacak)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Belgeyi açmak istiyor musunuz?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Belge açýlýyor"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "açýldý."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Hazýr biçimlerden birini seçin"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Örnekler"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Açýlacak belgeyi seçin"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Belge açýlamadý"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Eklenecek ASCII dosyayý seçin"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Ayný isimli, açýk baþka bir belge var!"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "Belirtilen dosya halihazýrda mevcut:"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "LinuxDoc SGML dosyasý okunuyor `"
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "ASCII dosya "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "eklendi."
+
+#: src/lyxfunc.C:2673
+msgid "Select Noweb file to Import"
+msgstr "Ekleneeck Noweb dosyasýný seçin"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Ekleneeck LaTeX dosyasýný seçin"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr "LinuxDoc SGML dosyasý okunuyor `"
+
+#: src/lyxfunc.C:2731
+#, fuzzy
+msgid "Importing Noweb file"
+msgstr "LinuxDoc SGML dosyasý okunuyor `"
+
+#: src/lyxfunc.C:2739
+#, fuzzy
+msgid "Noweb file "
+msgstr "Kayýt iþlemi baþarýsýz!"
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "Kayýt iþlemi baþarýsýz!"
+
+#: src/lyxfunc.C:2744
+#, fuzzy
+msgid "Could not import Noweb file"
+msgstr "Dosya dönüþtürülemedi"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Dosya dönüþtürülemedi"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Eklenecek belgeyi seçin"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Belge ekleniyor"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "eklendi."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Belge eklenemedi"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "Inset açýldý"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "bilinmeyen"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+#, fuzzy
+msgid "Save document and proceed?"
+msgstr "Belge kaydedilsin mi?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: Baþlangýç tanýmý"
+
+#: src/lyxvc.C:184
+#, fuzzy
+msgid "(no initial description)"
+msgstr "LyX VC: Baþlangýç tanýmý"
+
+#: src/lyxvc.C:187
+#, fuzzy
+msgid "Info"
+msgstr "Aldýrma"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr ""
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: Kütük mesajý"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr ""
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+#, fuzzy
+msgid "When you revert, you will loose all changes made"
+msgstr "Çevirme yapýlýrken, en son yaptýðýnýz deðiþiklikleri kaybedeceksiniz"
+
+#: src/lyxvc.C:250
+#, fuzzy
+msgid "to the document since the last check in."
+msgstr "Çevirme yapýlýrken, en son yaptýðýnýz deðiþiklikleri kaybedeceksiniz"
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Hala yapmak istiyor musunuz?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "RCS Geçmiþi yok!"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "RCS Geçmiþi"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Kapat"
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Fonksiyon"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Yunan"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr "­ Û"
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr "± ´"
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr "£ @"
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr "S  ò"
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Diðer"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "Peki"
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Sütun"
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Dikey hizalama|#V"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Yatay hizalama|#H"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "Peki"
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Ýnce|#T"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Orta|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Kalýn|#H"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negatif|#N"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Çeyrek|#Q"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "2Çeyrek|#2"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Ayýrýcý"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Üst/alt süsler"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Boþluk"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matris"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Üst |  Orta  | Alt"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Matematik"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Dosya"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Deðiþtir"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Düzen"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Ekle"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Yardým"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#F"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#E"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#L"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#I"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#O"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#H"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Ekran Seçenekleri"
+
+#: src/menus.C:408
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Dýþalým%t|LaTeX...%x30|Ascii Metin as lines...%x31|Ascii Metin as "
+"Paragraphs%x32|Noweb%x33"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "IM|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FM|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+#, fuzzy
+msgid "FIM|Pp#p#P"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:416 src/menus.C:646
+msgid "FIM|Nn#n#N"
+msgstr "FIM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Dýþyazým tipi%t|LaTeX...%x40|DVI...%x41|PostScript...%x42|Ascii "
+"Metin...%x43|Özel...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Dýþyazým tipi%t|LinuxDoc...%x40|DVI...%x41|PostScript...%x42|Ascii "
+"Metin...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Dýþyazým tipi%t|LinuxDoc...%x40|DVI...%x41|PostScript...%x42|Ascii "
+"Metin...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Tt#t#T"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|mM#m#M"
+
+#: src/menus.C:453
+#, fuzzy
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Yeni...|Hazýr biçimden yeni...|Aç...%l|Kapat|Kaydet|Farklý isimle "
+"kaydet...|Kaydedilmiþ hale geri dön%l|Dvi görüntüle|PostScript görüntüle|Dvi "
+"yenile|PostScript yenile%l|Yazdýr...|Faks..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|tT#t#T"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|Oo#o#O"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|Cc#c#C"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Ss#s#S"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|Aa#a#A"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|Rr#r#R"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "EM|wW#w#W"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|vV#v#V"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|Uu#u#U"
+
+#: src/menus.C:479
+#, fuzzy
+msgid "FM|Bb#b#B"
+msgstr "LM|Bb#b#B"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|Ff#f#F"
+
+# , c-format
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Dýþyazým%m%l"
+
+# , c-format
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Dýþyazým%m%l"
+
+# , c-format
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Çýkýþ%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|iI#i#I"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|Ee#e#E"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:638
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Dýþalým%t|LaTeX...%x15|Ascii Metin as lines...%x16|Ascii Metin as "
+"Paragraphs...%x17|Noweb...%x18"
+
+#: src/menus.C:657
+#, fuzzy
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr "Yeni...|Hazýr biçimlerden yeni belge...|Aç...%l|Import%m%l|Çýkýþ%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Tek-parçalar ve Insets%t|Aç/Kapat%x21|Melt%x22|Tüm dipnotlarý/boþluk "
+"notlarýnýaç%x23|Tüm dipnotlarý/boþluk notlarýný kapat%x24|Tüm "
+"þekil/tablolarý aç%x25|Tüm þekil/tablolarý kapat%x26%l|Tüm hata kutularýný "
+"sil%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|Oo#o#O"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|Mm#m#M"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|Aa#a#A"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|Cc#c#C"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|Ff#f#F"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|Tt#t#T"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|Rr#r#R"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tablo%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Çoklu kolon%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Çoklu kolon%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|Mm#m#M"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|En üst satýr%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|En üst satýr%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|Tt#t#T"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|En alt satýr%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|En alt satýr%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|Bb#b#B"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Sol satýr%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Sol satýr%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Ll#l#L"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Sað Satýr%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Sað satýr%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|Rr#r#R"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Sola yanaþýk%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Sola yanaþýk%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|eE#e#E"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Saða yanaþýk%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Saða yanaþýk%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Ortaya yanaþýk%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Ortaya yanaþýk%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|Cc#c#C"
+
+# , c-format
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Satýr ekle%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|oO#o#O"
+
+# , c-format
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Kolon ekle%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|uU#u#U"
+
+# , c-format
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Satýr sil%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|wW#w#W"
+
+# , c-format
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Kolon sil%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|nN#n#N"
+
+# , c-format
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Tablo sil%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|Dd#d#D"
+
+# , c-format
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Tablo ekle%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|Ii#i#I"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Sürüm Denetimi%t"
+
+# , c-format
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Kaydol%d%x51"
+
+# , c-format
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Deðiþiklikleri denetle%d%x52"
+
+# , c-format
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|Deðiþtirmek için denetle%x53"
+
+# , c-format
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Deðiþiklikleri denetle%x52"
+
+# , c-format
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|Deðiþtirmek için denetle%d%x53"
+
+# , c-format
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Son sürüme çevir%x54"
+
+# , c-format
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Son denetimi geri al%x55"
+
+# , c-format
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Geçmiþi göster%x56"
+
+# , c-format
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Kaydol%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Rr#r#R"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|Ii#i#I"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|Oo#o#O"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|lL#l#l"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|Uu#u#U"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV|Hh#h#H"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Geri Al|Yeniden Yap %l|Kes|Kopyala|Yapýþtýr%l|Bul ve Deðiþtir...|Hataya "
+"git|Nota git|Tek-parçalar%m|Tablo%m|Yazým denetimi....|TeX "
+"Denetimi|Ýçindekiler...%l|Sürüm Denetimi%m%l|LaTeX kütük dosyasý "
+"görüntüle%l|Satýr olarak yapýþtýr|Paragraf olarak yapýþtýr"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Uu#u#U"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|Rr#r#R"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Cc#c#C"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|oO#o#O"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|Pp#p#P"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|Ff#f#F"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|Ee#e#E"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|Nn#n#N"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|Ii#i#I"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|Tt#t#T"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|Ss#s#S"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|hH#h#H"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|aA#a#A"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Vv#v#V"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|wW#w#W"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|Ll#l#L"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|gG#g#G"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Karakter...|Paragraf...|Belge...|Kaðýt...|Tablo...|Alýntý...%l|Vurgu "
+"Tarzý%b|Noun Tarzý%b|Kalýn tip%b|TeX tarzý%b|Ortam Derinliðini "
+"Deðiþtir|LaTeX Önyazý...%l|Düzeni öntanýmlý kaydet"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|Cc#c#C"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|Pp#p#P"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|Dd#d#D"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|aA#a#A"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|eE#e#E"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|Qq#q#Q"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|mM#m#M"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|Nn#n#N"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|Bb#b#B"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Tt#t#T"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|vV#v#V"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|Ll#l#L"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|Ss#s#S"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "ASCII dosyasý dýþalýmý%t|Satýr olarak%x41|Paragraf olarak%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|Ll#l#L"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|Pp#p#P"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Listeler%t|Ýçindekiler%x21|Þekil Listesi%x22|Tablo Listesi%x23|Algoritma "
+"Listesi%x24|Dizin Listesi%x25|BibTeX Kaynaðý%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|Cc#c#C"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|Ff#f#F"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|Tt#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|Aa#a#A"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|Ii#i#I"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|Bb#b#B"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Tek-parça%t|Þekil%x71|Tablo%x72|Geniþ Þekil%x73|Geniþ "
+"Tablo%l%x74|Algoritma%x75"
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|Tt#t#T"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|Ww#w#W"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|iI#i#I"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|Aa#a#A"
+
+#: src/menus.C:1211
+#, fuzzy
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Özel Karakter%t|HFill%x31|Kesme Noktasý%x32|Korunmuþ Boþluk%x33|Satýr "
+"Kesmesi%x34|Üç nokta (...)%x35|Cümle sonu noktasý%x36|Sýradan Alýntý (\")%x37"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|Hh#h#H"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|Pp#p#P"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|Bb#b#B"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|Ll#l#L"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|iI#i#I"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|Ee#e#E"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|Qq#q#Q"
+
+#: src/menus.C:1228
+#, fuzzy
+msgid "IMS|Mm#m#M"
+msgstr "IM|Mm#m#M"
+
+#: src/menus.C:1231
+#, fuzzy
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Þekil...|Tablo...%l|Ek Dosya...|ASCII Dosya dýþalýmý%m|LyX "
+"dosyasýEkle...%l|Dipnot|Boþluk Notu|Tek-parçalar%m%l|Listeler ve "
+"Ýçindekiler%m%l|Özel Karakter%m%l|Not|Etiket...|Çapraz-Baþvuru...|Gönderme "
+"Baþvuru"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|gG#g#G"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|bB#b#B"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|cC#c#C"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|Aa#a#A"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|Xx#x#X"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|Ff#f#F"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|Mm#m#M"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|oO#o#O"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|Tt#t#T"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|Ss#s#S"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|Nn#n#N"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Ll#l#L"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|rR#r#R"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|iI#i#I"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "FM|dD#d#D"
+
+#: src/menus.C:1267
+#, fuzzy
+msgid "IM|wW#w#W"
+msgstr "EM|wW#w#W"
+
+#: src/menus.C:1273
+#, fuzzy
+msgid "|URL..."
+msgstr "|URL"
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr "IM|Uu#u#U"
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Kesir|Kare Kök|Üs|Alt|Sum|Ýntegral%l|Matematik kipi|Görüntüle%l|Matematik..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Ff#f#F"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|Ss#s#S"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|Ee#e#E"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|xX#x#X"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|uU#u#U"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#i#I"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#m#M"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|Dd#d#D"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|Pp#p#P"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Ekran Yazýtipi...|Yazým Denetleyicisi "
+"Seçenekleri...|Klavye...|LaTeX...%l|Yeniden Ayarla"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|Ff#f#F"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|Ss#s#S"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Kk#k#K"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#l#L"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|Rr#r#R"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr "HM|Ii#I#i"
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|Tt#T#t"
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "HM|Uu#U#u"
+
+#: src/menus.C:1566
+#, fuzzy
+msgid "HM|xX#x#X"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Cc#C#c"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|Kk#K#k"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "EM|Ll#l#L"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|oO#o#O"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|eE#e#E"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr "HM|Vv#v#V"
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "LyX Sürümü: "
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " Tarih: "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Kitaplýk dizini: "
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Kullanýcý dizini: "
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Yardým dosyasý açýlýyor"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Çalýþtýrýyorum:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Açýk Belge Yok *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "LyX'e Hoþgeldiniz"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Bu belge düzeni ile anlamsýz!"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Hata: Þu dizine deðiþiklik yapýlamýyor:"
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "LyX iç hatasý:"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Yol deðiþkeni yýðýtý aþýmý."
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Hedef"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Yazýcý|#P"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Dosya|#F"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Tüm sayfalar|#G"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Tek numaralý sayfalar|#O"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Çift numaralý sayfalar|#E"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Normal Sýra|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Ters Sýra|#R"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Sýralama"
+
+#: src/print_form.C:76
+#, fuzzy
+msgid "Pages:"
+msgstr "Sayfa: "
+
+#: src/print_form.C:81
+#, fuzzy
+msgid "Copies"
+msgstr "Kopyala"
+
+#: src/print_form.C:85
+#, fuzzy
+msgid "Count:"
+msgstr "Not:"
+
+#: src/print_form.C:88
+#, fuzzy
+msgid "Unsorted|#U"
+msgstr "Çerçeve ayarlarýný geri al|#U"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Dosya tipi"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Komut:|#C"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "Postscript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#s"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Belgenin dil kullanýmý|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Baþka bir dil kullanýmý:|#U"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "`-' ile ayrýlmýþ tamlamalarý doðru kabul et|#T"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Girdi kodlamasý ispell'e çevrildi|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Baþka bir kiþisel sözlük kullan:|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Sözcük içinde ek özel karakterler:|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Sözlük"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Deðiþtir"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"Near\n"
+"Misses"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Yazým denetimi seçenekleri|#O"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Yazým denetimini baþlat|#S"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Kiþisel sözlük içine ekle|#I"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Sözcüðü atla"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Bu oturumda sözcüðü kabul et|#A"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Yazým denetimini durdur|#T"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Yazým denetimini kapat|#C^["
+
+# , c-format
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "%0"
+
+# , c-format
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "%100"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Sözcüðü deðiþtir"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Yazým Denetleyici Seçenekleri"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Yazým Denetleyici"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"ispell programý bir nedenden çalýþmaya devam etmiyor. Olasý *bir* sebep \n"
+"belge için seçtiðiniz dile iliþkin bir sözlük dosyasýnýn sisteminizde\n"
+"yüklü olmamasý olabilir..\n"
+"/usr/lib/ispell dizinini kontrol edin veya \n"
+"Yazým Denetleyicisi seçenekleri altýndan baþka bir sözlük seçin."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " kelime denetlendi."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr "sözcük denetlendi."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Yazým denetlenmesi tamamlandý!"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"ispell programý bir nedenden dolayý çalýþmýyor\n"
+"Belki süreç yok edilmiþtir."
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Çoklu-sütunlar sadece yatay olabilirler."
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Geçersiz iþlem"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Tek-parça içine tek-parça eklenemez!"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Bir sayfacýk içine bir marginpar eklenemez!"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Tabloyu kesemem."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "Tek-parça, tek-parça içermeli!"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "Tek-parça açýldý"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "Tek-parça kapandý"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Yapacak bir þey yok."
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Tanýmlý yazýtipi deðiþimi yok. Yazýtipi deðiþimini tanýmlamak için Düzen "
+"menüsünden Karakter'i seçin"
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Yarý tek-parçalarla çalýþamam."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "üzgünüm."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Yarým tablo ile çalýþamam"
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Tek-parça içine baþka tek-parça yapýþtýrýlamaz!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Tablo hücresi bir paragraftan fazlasýný içeremez!"
diff --git a/po/wa.po b/po/wa.po
new file mode 100644 (file)
index 0000000..86887f9
--- /dev/null
+++ b/po/wa.po
@@ -0,0 +1,4875 @@
+# Ratoûrnaedje è walon po LyX
+#
+# Si vos voloz donner on côp di spale pol ratoûrnaedje di Gnome (ou des
+# ôtes libes programes) sicrijhoz a l' adresse emile 
+# <linux-wa@chanae.alphanet.ch>; nos avans co bråmint di l' ovraedje a fé.
+#
+# Copyright (C) 1998 Free Software Foundation, Inc.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: LyX 1.0.0\n"
+"POT-Creation-Date: 1999-09-23 15:37+0200\n"
+"PO-Revision-Date: 1999-09-23 16:55+02:00\n"
+"Last-Translator: Lorint Hendschel <LorintHendschel@skynet.be>\n"
+"Language-Team: walon <linux-wa@chanae.alphanet.ch>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/BufferView.C:284
+msgid "Formatting document..."
+msgstr "Metaedje è pådje do documint..."
+
+#: src/BufferView.C:357 src/BufferView.C:361
+msgid "No more errors"
+msgstr "Pupont d' arokes"
+
+#: src/Chktex.C:94
+msgid "ChkTeX warning id #"
+msgstr "Advertixhmint ChkTeX lim."
+
+#: src/FontLoader.C:217
+msgid "Loading font into X-Server..."
+msgstr "Li sierveu X tchedje les fontes..."
+
+#: src/LaTeX.C:296 src/LaTeX.C:310 src/LaTeX.C:412
+msgid "Run #"
+msgstr "Enonder lim."
+
+#: src/LaTeX.C:298 src/LaTeX.C:313 src/LaTeX.C:369 src/LaTeX.C:413
+msgid "LaTeX run number "
+msgstr "Enondaedje LaTeX lim."
+
+#. no checks for now
+#: src/LaTeX.C:335 src/LaTeX.C:392
+msgid "Running MakeIndex."
+msgstr "Enondaedje di MakeIndex"
+
+#. Here we must scan the .aux file and look for
+#. "\bibdata" and/or "\bibstyle". If one of those
+#. tags is found -> run bibtex and set rerun = true;
+#. no checks for now
+#: src/LaTeX.C:346
+msgid "Running BibTeX."
+msgstr "Enondaedje di BibTeX"
+
+# log
+#: src/LaTeXLog.C:48
+msgid "NO LATEX LOG FILE!"
+msgstr "Nou fitchî po les messaedjes di LaTeX"
+
+#: src/LaTeXLog.C:55
+msgid "Build Program Log"
+msgstr ""
+
+#: src/LaTeXLog.C:55
+msgid "LaTeX Log"
+msgstr "Fitchî des messaedjes LaTeX"
+
+#: src/LyXAction.C:589
+msgid "Describe command"
+msgstr "Discrîre li cmande"
+
+#: src/LyXAction.C:590
+msgid "Select previous char"
+msgstr "Tchwezi li caractere di dvant"
+
+#: src/LyXAction.C:591
+msgid "Insert bibtex"
+msgstr "Sititchî BibTeX"
+
+#: src/LyXAction.C:592
+msgid "Autosave"
+msgstr "Schaper tot seu"
+
+#: src/LyXAction.C:593
+msgid "Go to beginning of document"
+msgstr "Potchî å dzeu do documint"
+
+#: src/LyXAction.C:594
+msgid "Select to beginning of document"
+msgstr "Tchwezi djusk' å dzeu do documint"
+
+#: src/LyXAction.C:595 src/inseterror.C:168 src/insetref.C:64
+#: src/latexoptions.C:46 src/layout_forms.C:158 src/layout_forms.C:472
+#: src/layout_forms.C:692 src/lyx.C:112 src/lyx_sendfax.C:109 src/lyxvc.C:328
+#: src/math_forms.C:179
+msgid "Close"
+msgstr "Cloyu"
+
+#: src/LyXAction.C:596
+msgid "Go to end of document"
+msgstr "Potchî al difén do documint"
+
+#: src/LyXAction.C:597
+msgid "Select to end of document"
+msgstr "Tchwezi djusk' al difén do documint"
+
+#: src/LyXAction.C:598
+msgid "Fax"
+msgstr "Fax"
+
+#: src/LyXAction.C:599
+msgid "New document"
+msgstr "Novea documint"
+
+#: src/LyXAction.C:600
+msgid "New document from template"
+msgstr "Novea documint a pårti d' on modele"
+
+#: src/LyXAction.C:601
+msgid "Open"
+msgstr "Drovi"
+
+#: src/LyXAction.C:602
+msgid "Switch to previous document"
+msgstr "Riprinde li dierin documint "
+
+#: src/LyXAction.C:603 src/lyx_cb.C:981 src/print_form.C:72
+msgid "Print"
+msgstr "Rexhe"
+
+#: src/LyXAction.C:604
+msgid "Revert to saved"
+msgstr "Rivni å doc. come il esteut li dierin côp k' il a stî schapé"
+
+#: src/LyXAction.C:605
+msgid "Update DVI"
+msgstr "Mete a djoû DVI"
+
+#: src/LyXAction.C:606
+msgid "Update PostScript"
+msgstr "Mete a djoû PostScript"
+
+#: src/LyXAction.C:607
+msgid "View DVI"
+msgstr "Loukî è DVI"
+
+#: src/LyXAction.C:608
+msgid "View PostScript"
+msgstr " Loukî è PostScript"
+
+#: src/LyXAction.C:609
+msgid "Build program"
+msgstr ""
+
+#: src/LyXAction.C:610
+msgid "Check TeX"
+msgstr "Waitî TeX"
+
+#: src/LyXAction.C:611 src/lyx_sendfax_main.C:284
+msgid "Save"
+msgstr "Schaper"
+
+#: src/LyXAction.C:612
+msgid "Save As"
+msgstr "Schaper èt (r)lomer"
+
+#: src/LyXAction.C:613 src/lyxfunc.C:585
+msgid "Cancel"
+msgstr "Rinoncî"
+
+#: src/LyXAction.C:614
+msgid "Go one char back"
+msgstr "Caractere di dvant"
+
+#: src/LyXAction.C:615
+msgid "Go one char forward"
+msgstr "Caractere shûvant"
+
+#: src/LyXAction.C:616
+msgid "Insert citation"
+msgstr "Sititchî on s' apinse"
+
+#: src/LyXAction.C:617
+msgid "Execute command"
+msgstr "Enonder ene comande"
+
+#: src/LyXAction.C:618 src/lyx_cb.C:2392
+msgid "Copy"
+msgstr "Copyî"
+
+#: src/LyXAction.C:619 src/lyx_cb.C:2404
+msgid "Cut"
+msgstr "Côper"
+
+#: src/LyXAction.C:620
+msgid "Decrement environment depth"
+msgstr "Fé discrexhe li parfondeu d' eviron'mint"
+
+#: src/LyXAction.C:621
+msgid "Increment environment depth"
+msgstr "Fé crexhe li parfondeu d' eviron'mint"
+
+#: src/LyXAction.C:622
+msgid "Change environment depth"
+msgstr "Candjî li parfondeu d' eviron'mint"
+
+#: src/LyXAction.C:623
+msgid "Change itemize bullet settings"
+msgstr "Rapontyî les boles"
+
+#: src/LyXAction.C:624
+msgid "Go down"
+msgstr "Dischinde"
+
+#: src/LyXAction.C:625
+msgid "Select next line"
+msgstr "Tchwezi li roye shûvante"
+
+#: src/LyXAction.C:626
+msgid "Choose Paragraph Environment"
+msgstr "Tchwezi l' eviron'mint do hagnon"
+
+#: src/LyXAction.C:627
+msgid "Go to next error"
+msgstr "Potchî a l' aroke shûvante"
+
+#: src/LyXAction.C:628 src/lyx_cb.C:2344
+msgid "Insert Figure"
+msgstr "Sititchî ene imådje"
+
+#: src/LyXAction.C:629 src/lyxfr0.C:95
+msgid "Find & Replace"
+msgstr "Trover eyèt mete el plaece"
+
+#: src/LyXAction.C:630
+msgid "Toggle cursor does/doesn't follow the scrollbar"
+msgstr "Li curseur shût / ni shût nén l' acinseur"
+
+#: src/LyXAction.C:631
+msgid "Toggle bold"
+msgstr "Crås/Nén crås"
+
+#: src/LyXAction.C:632
+msgid "Toggle code style"
+msgstr "Côde/Sicrît"
+
+#: src/LyXAction.C:633
+msgid "Default font style"
+msgstr "Stîle del police prémetuwe"
+
+#: src/LyXAction.C:634
+msgid "Toggle emphasize"
+msgstr "Mete/Ni nén mete è valeur"
+
+# Je  suis pas sur d'italique
+#: src/LyXAction.C:635
+msgid "Toggle user defined style"
+msgstr "Mete/Ni nén mete on stîle da vosse"
+
+#: src/LyXAction.C:636
+msgid "Toggle noun style"
+msgstr "Mete/Ni nén mete des ptitès grandès letes"
+
+#: src/LyXAction.C:637
+msgid "Toggle roman font style"
+msgstr "Mete/Ni nén mete li police 'roman'"
+
+#: src/LyXAction.C:638
+msgid "Toggle sans font style"
+msgstr "Mete/Ni nén mete li police 'sans'"
+
+#: src/LyXAction.C:639
+msgid "Set font size"
+msgstr "Grandeu del police"
+
+#: src/LyXAction.C:640
+msgid "Show font state"
+msgstr "Police pol moumint"
+
+#: src/LyXAction.C:641
+msgid "Toggle font underline"
+msgstr "Sorlignî/Nén"
+
+#: src/LyXAction.C:642
+msgid "Insert Footnote"
+msgstr "Sititchî ene pînote"
+
+#: src/LyXAction.C:643
+msgid "Select next char"
+msgstr "Tchwezi li caractere shûvant"
+
+# xxx ???
+#: src/LyXAction.C:644
+msgid "Insert horizontal fill"
+msgstr "Sititchî xxx di coûtchî"
+
+#: src/LyXAction.C:645
+msgid "Insert hyphenation point"
+msgstr "Plaece di côpaedje di mot"
+
+#: src/LyXAction.C:646
+msgid "Insert ... dots"
+msgstr "Sititchî troes ponts"
+
+#: src/LyXAction.C:647
+msgid "Insert end of sentence period"
+msgstr "Sititchî on pont"
+
+#: src/LyXAction.C:648
+msgid "Turn off keymap"
+msgstr "Dismete li mape del taprece"
+
+#: src/LyXAction.C:649
+msgid "Use primary keymap"
+msgstr "Eployî li maisse mape pol taprece"
+
+#: src/LyXAction.C:650
+msgid "Use secondary keymap"
+msgstr "Eployî li deuzyinme mape pol taprece"
+
+#: src/LyXAction.C:651
+msgid "Toggle keymap"
+msgstr "(Dis)mete li mape del taprece"
+
+#: src/LyXAction.C:652
+msgid "Insert Label"
+msgstr "Sititchî ene etikete"
+
+#: src/LyXAction.C:653
+msgid "Copy paragraph environment type"
+msgstr "Copyî li sôrte d' èviron'mint do hagnon"
+
+#: src/LyXAction.C:654
+msgid "Paste paragraph environment type"
+msgstr "Aclaper li sôrte d' èviron'mint do hagnon"
+
+#: src/LyXAction.C:655
+msgid "Specify paper size and margins"
+msgstr "Apontyî li sôrte di papî (grandeu, costés)"
+
+#: src/LyXAction.C:656
+msgid "Go to beginning of line"
+msgstr "Potchî å cmince del roye"
+
+#: src/LyXAction.C:657
+msgid "Select to beginning of line"
+msgstr "Tchwezi djusk' å cmince del roye"
+
+#: src/LyXAction.C:658
+msgid "Go to end of line"
+msgstr "Potchî al difén del roye"
+
+#: src/LyXAction.C:659
+msgid "Select to end of line"
+msgstr "Tchwezi djusk' al difén del roye"
+
+#: src/LyXAction.C:660
+msgid "Exit"
+msgstr "Moussî foû"
+
+#: src/LyXAction.C:661
+msgid "Insert Margin note"
+msgstr "Sititchî ene rawete di costé"
+
+#: src/LyXAction.C:662
+msgid "Math Greek"
+msgstr "Letes matematikes grekes"
+
+#: src/LyXAction.C:663
+msgid "Math mode"
+msgstr "Môde matematike"
+
+#: src/LyXAction.C:664
+msgid "Go one paragraph down"
+msgstr "Dischinde d' on hagnon"
+
+#: src/LyXAction.C:665
+msgid "Select next paragraph"
+msgstr "Tchwezi li hagnon shûvant"
+
+#: src/LyXAction.C:666
+msgid "Go one paragraph up"
+msgstr "Rimonter d' on hagnon"
+
+#: src/LyXAction.C:667
+msgid "Select previous paragraph"
+msgstr "Tchwezi li hagnon di dvant"
+
+#: src/LyXAction.C:668 src/lyx_cb.C:2413
+msgid "Paste"
+msgstr "Aclaper"
+
+#: src/LyXAction.C:669
+msgid "Insert protected space"
+msgstr "Sititchî on vûde waranti"
+
+#: src/LyXAction.C:670
+msgid "Insert quote"
+msgstr "Sititchî on s' apinse"
+
+#: src/LyXAction.C:671
+msgid "Reconfigure"
+msgstr "Rapontyî"
+
+#: src/LyXAction.C:672 src/lyx_cb.C:2100
+msgid "Redo"
+msgstr "Rifé"
+
+#: src/LyXAction.C:673
+msgid "Insert cross reference"
+msgstr "Sititchî on croejhlé rahuca"
+
+#: src/LyXAction.C:674 src/lyx_cb.C:2356
+msgid "Insert Table"
+msgstr "Sititchî on tåvlea"
+
+#: src/LyXAction.C:675
+msgid "Toggle TeX style"
+msgstr "Passer è môde TeX"
+
+#: src/LyXAction.C:676 src/lyx_cb.C:2080
+msgid "Undo"
+msgstr "Disfé"
+
+#: src/LyXAction.C:677 src/lyx_cb.C:2435
+msgid "Melt"
+msgstr "Maxhî"
+
+#: src/LyXAction.C:678
+msgid "Import document"
+msgstr "Abaguer on documint"
+
+#: src/LyXAction.C:679
+msgid "Remove all error boxes"
+msgstr "Waester totes les boeses d' arokes"
+
+#: src/LyXAction.C:680
+#, fuzzy
+msgid "Insert menu separator"
+msgstr "Sititchî on pont"
+
+#. In an ideal world, this never happens:
+#: src/LyXAction.C:715
+msgid "No description available!"
+msgstr "Nou discrîjhaedje por vos!"
+
+#: src/LyXSendto.C:43
+msgid "Send Document to Command"
+msgstr "Evoyî li documint al comande"
+
+#: src/LyXView.C:353 src/minibuffer.C:192
+msgid " (Changed)"
+msgstr "(Candjî)"
+
+#: src/LyXView.C:355
+msgid " (read only)"
+msgstr "(rén ki lere)"
+
+#: src/PaperLayout.C:165 src/ParagraphExtra.C:150
+msgid "Document is read-only.  No changes to layout permitted."
+msgstr ""
+"Ci documint la, vos l' poloz seulmint lere. Vos n' poloz rén candjî a si "
+"cogne."
+
+#: src/PaperLayout.C:188
+msgid "Paper Layout"
+msgstr "Arindjmint del pådje"
+
+#: src/PaperLayout.C:220
+msgid "Paper layout set"
+msgstr "Ké papî"
+
+#: src/PaperLayout.C:277 src/ParagraphExtra.C:309 src/TableLayout.C:299
+#: src/TableLayout.C:466
+msgid "Warning: Invalid Length (valid example: 10mm)"
+msgstr "Asteme : li longueu ni va nén (egzimpe comufåt: 10mm)"
+
+#: src/ParagraphExtra.C:167
+msgid "ParagraphExtra Layout"
+msgstr "Ôtès tchûzes po l' arindjmint del pådje"
+
+#: src/ParagraphExtra.C:208
+msgid "ParagraphExtra layout set"
+msgstr " Ôtès tchûzes po l' arindjmint del pådje"
+
+#: src/ParagraphExtra.C:319
+msgid "Warning: Invalid percent value (0-100)"
+msgstr "Asteme : li porcintaedje ni van nén (0-100)"
+
+#: src/TableLayout.C:236
+msgid "Table Extra Form"
+msgstr "Ôtès tchûzes pol tåvlea"
+
+#: src/TableLayout.C:249
+msgid "Table Layout"
+msgstr "Arindjmint do tåvlea"
+
+#: src/TableLayout.C:279
+msgid "Warning: Wrong Cursor position, updated window"
+msgstr "Asteme: li curseur n' est nén al boune plaece, purnea metu a djoû"
+
+#: src/TableLayout.C:334
+msgid "Confirm: press Delete-Button again"
+msgstr "Acertinez: tchôkez co ene feye sol boton Disfacer"
+
+#. sgml2lyx failed
+#: src/buffer.C:229 src/buffer.C:239 src/buffer.C:3525 src/bufferlist.C:582
+#: src/bufferlist.C:612 src/lyx_cb.C:540 src/lyx_cb.C:879 src/lyx_cb.C:912
+#: src/lyx_sendfax_main.C:268
+msgid "Error!"
+msgstr "Aroke !"
+
+#: src/buffer.C:230 src/buffer.C:240 src/bufferlist.C:661
+msgid "Cannot open specified file:"
+msgstr "Dji n' parvén nén a drovi ci fitchî la:"
+
+#. if the textclass wasn't loaded properly
+#. we need to either substitute another
+#. or stop loading the file.
+#. I can substitute but I don't see how I can
+#. stop loading... ideas??  ARRae980418
+#: src/buffer.C:403
+msgid "Textclass Loading Error!"
+msgstr "Yåk n' a nén stî come dji voleu tcherdjî li sôrte di documint"
+
+#: src/buffer.C:404
+msgid "Can't load textclass "
+msgstr "Dji n' parvén nén a tcherdjî cisse sôrte di documint"
+
+#: src/buffer.C:406
+msgid "-- substituting default"
+msgstr "-- dji mete ene valixhance prémetuwe"
+
+# xxx
+#: src/buffer.C:1015
+msgid "Warning: Ignoring Old Inset"
+msgstr "Advertixhmint: Ignoring Old Inset"
+
+#: src/buffer.C:1095
+#, c-format
+msgid "Warning: need lyxformat %.2f but found %.2f\n"
+msgstr "Asteme: dj' a mezåjhe do fôrmat lyx %.2f, mins dji n' a ki li %.2f\n"
+
+#: src/buffer.C:1099
+#, c-format
+msgid "ERROR: need lyxformat %.2f but found %.2f\n"
+msgstr "AROKE : dj' a mezåjhe do fôrmat %.2f, mins dji n' a ki li %.2f\n"
+
+#: src/buffer.C:1113
+msgid "Warning!"
+msgstr "Advertixmint !"
+
+#: src/buffer.C:1114
+msgid "Reading of document is not complete"
+msgstr "Dji n' a nén lejhu li documint tot etîr"
+
+#: src/buffer.C:1115
+msgid "Maybe the document is truncated"
+msgstr "Mutwè manke-t i on boket do documint"
+
+#. "\\lyxformat" not found
+#: src/buffer.C:1121 src/buffer.C:1128 src/buffer.C:1131
+msgid "ERROR!"
+msgstr "AROKE !"
+
+#: src/buffer.C:1122
+msgid "Old LyX file format found. Use LyX 0.10.x to read this!"
+msgstr ""
+"Dj' a trové on vî fôrmat di fitchî LyX. Eployîz LyX 0.10.7 po lere çouchal!"
+
+#: src/buffer.C:1128
+msgid "Not a LyX file!"
+msgstr "Ci n' est nén on fitchî LyX !"
+
+#: src/buffer.C:1131
+msgid "Unable to read file!"
+msgstr "Dji n' sai lere li fitchî"
+
+#: src/buffer.C:1147 src/buffer.C:1149
+msgid "Error! Document is read-only: "
+msgstr "Aroke! Ci documint la ni pout esse ki lejhu"
+
+#: src/buffer.C:1158 src/buffer.C:1160 src/buffer.C:1167 src/buffer.C:1169
+msgid "Error! Cannot write file: "
+msgstr "Aroke! Dji n' sai scrîre ci fitchî la: "
+
+#: src/buffer.C:1201 src/buffer.C:1204
+msgid "Error! Could not close file properly: "
+msgstr "Aroke! Dji n' sai cloyu ci fitchî la comufåt: "
+
+#: src/buffer.C:1249 src/buffer.C:1564
+msgid "Error: Cannot write file:"
+msgstr "Aroke! Dji n' sai scrîre li fitchî"
+
+#: src/buffer.C:1354
+msgid "Error: Cannot open temporary file:"
+msgstr "Aroke! Dji n' sai drovi li fitchî timporaire"
+
+#: src/buffer.C:2054 src/buffer.C:2276 src/buffer.C:2922
+msgid "Error! Could not close file properly:"
+msgstr "Aroke! Dji n' sai cloyu ci fitchî ci comufåt: "
+
+#: src/buffer.C:2123 src/buffer.C:2699 src/buffer.C:3447 src/buffer.C:3468
+#: src/paragraph.C:3223
+msgid "LYX_ERROR:"
+msgstr "LYX_ERROR:"
+
+#: src/buffer.C:2123 src/buffer.C:2699
+msgid "Cannot write file"
+msgstr "Dji n' sai scrîre li fitchî"
+
+#: src/buffer.C:2193 src/buffer.C:2761
+msgid "Error : Wrong depth for LatexType Command.\n"
+msgstr "Aroke : Måle parfondeu po li cmande LatexType\n"
+
+#. path to LaTeX file
+#: src/buffer.C:3103
+msgid "Running LaTeX..."
+msgstr "Dj' enonde LaTeX..."
+
+#: src/buffer.C:3125
+msgid "LaTeX did not work!"
+msgstr "LaTeX n' a nén stî!"
+
+#: src/buffer.C:3126 src/buffer.C:3195 src/buffer.C:3264
+msgid "Missing log file:"
+msgstr "Li fitchî des messaedje manke :"
+
+#. no errors or any other things to think about so:
+#: src/buffer.C:3128 src/buffer.C:3137 src/buffer.C:3197 src/buffer.C:3206
+#: src/buffer.C:3266 src/buffer.C:3274 src/combox.C:448
+msgid "Done"
+msgstr "Fwait"
+
+#. path to Literate file
+#: src/buffer.C:3174
+#, fuzzy
+msgid "Running Literate..."
+msgstr "Dj' enonde LaTeX..."
+
+#: src/buffer.C:3194
+#, fuzzy
+msgid "Literate command did not work!"
+msgstr "LaTeX n' a nén stî!"
+
+#. path to Literate file
+#: src/buffer.C:3243
+msgid "Building Program..."
+msgstr ""
+
+#: src/buffer.C:3263
+#, fuzzy
+msgid "Build did not work!"
+msgstr "LaTeX n' a nén stî!"
+
+#. path to LaTeX file
+#: src/buffer.C:3311
+msgid "Running chktex..."
+msgstr "Dj' enonde chktex..."
+
+#: src/buffer.C:3327
+msgid "chktex did not work!"
+msgstr "chktex n' a nén stî"
+
+#: src/buffer.C:3328
+msgid "Could not run with file:"
+msgstr "Dji n' a nén parvinu a-z enonder ci fitchî ci:"
+
+#: src/buffer.C:3448 src/buffer.C:3469 src/paragraph.C:3223
+msgid "Cannot open temporary file:"
+msgstr "Dji n' sai drovi li fitchî timporaire:"
+
+#: src/buffer.C:3518
+msgid "Error! Can't open temporary file:"
+msgstr "Aroke ! Dji n' sai drovi li fitchî timporaire:"
+
+#: src/buffer.C:3526
+msgid "Error executing *roff command on table"
+msgstr "Yåk n' a nén stî come dj' enondeve *roff sol tåvlea"
+
+#: src/buffer.C:3718 src/lyx_cb.C:3166 src/text.C:1882
+msgid "Impossible Operation!"
+msgstr "Dji n' sai fé çoula!"
+
+#: src/buffer.C:3719
+msgid "Cannot insert table/list in table."
+msgstr "Dji n' sai stitchî li tåvlea ou li djîveye è tåvlea"
+
+#: src/buffer.C:3720 src/lyx_cb.C:3168 src/text.C:1884 src/text.C:3937
+#: src/text.C:3945 src/text.C:3960 src/text.C:3977 src/text2.C:2136
+#: src/text2.C:2146
+msgid "Sorry."
+msgstr "Dji rgrete."
+
+#: src/bufferlist.C:157 src/bufferlist.C:318 src/lyxvc.C:170 src/lyxvc.C:204
+#: src/lyxvc.C:230
+msgid "Changes in document:"
+msgstr "Candjmints è documint:"
+
+#: src/bufferlist.C:159 src/bufferlist.C:320
+msgid "Save document?"
+msgstr "Schaper li documint?"
+
+#: src/bufferlist.C:175
+msgid "Some documents were not saved:"
+msgstr "Sacwants documints n' ont nén stî schapés"
+
+#: src/bufferlist.C:176
+msgid "Exit anyway?"
+msgstr "Fåt-i moussî foû po do bon?"
+
+#: src/bufferlist.C:187
+msgid "Saving document"
+msgstr "Dji schape li documint"
+
+#: src/bufferlist.C:260
+msgid "Document saved as"
+msgstr "Li documint est schapé eyèt lomé"
+
+#: src/bufferlist.C:271
+msgid "Could not delete auto-save file!"
+msgstr "Dji n' sai disfacer li copeye schapeye!"
+
+#: src/bufferlist.C:281
+msgid "Save failed!"
+msgstr "Dji n' a nén savu schaper!"
+
+#: src/bufferlist.C:354
+msgid "No Documents Open!%t"
+msgstr "I gn a nou documint di drovu!%t"
+
+#: src/bufferlist.C:430
+msgid "lyx: Attempting to save document "
+msgstr "lyx: dji saye di schaper li documint"
+
+#: src/bufferlist.C:433
+msgid " as..."
+msgstr " dizo..."
+
+#: src/bufferlist.C:457
+msgid "  Save seems successful. Phew."
+msgstr "Dj' a l' ideye ki ça a stî, pai-st a Diè"
+
+#: src/bufferlist.C:460
+msgid "  Save failed! Trying..."
+msgstr " Dji n' a savu schaper! Dji rsaye..."
+
+#: src/bufferlist.C:462
+msgid "  Save failed! Bummer. Document is lost."
+msgstr " Dji n' a savu schaper! Berwete, vosse documint est pierdu!"
+
+#: src/bufferlist.C:489
+msgid "An emergency save of this document exists!"
+msgstr "I gn a ene copeye di schapeye po ci documint ci."
+
+#: src/bufferlist.C:491
+msgid "Try to load that instead?"
+msgstr "El fåt-i tcherdjî el plaece?"
+
+#: src/bufferlist.C:513
+msgid "Autosave file is newer."
+msgstr "Li copeye schapeye a l' air pus noûve..."
+
+#: src/bufferlist.C:515
+msgid "Load that one instead?"
+msgstr "El fåt-i tcherdjî el plaece?"
+
+#: src/bufferlist.C:582
+msgid "Unable to open template"
+msgstr "Dji n' a nén parvinu a drovi li modele"
+
+#: src/bufferlist.C:613
+msgid "Could not convert file"
+msgstr "Dji n' a nén parvinu a convierti li fitchî"
+
+#: src/bufferlist.C:626 src/lyxfunc.C:2476 src/lyxfunc.C:2615
+#: src/lyxfunc.C:2694
+msgid "Document is already open:"
+msgstr "Ci documint chal est ddja drovu :"
+
+#: src/bufferlist.C:628
+msgid "Do you want to reload that document?"
+msgstr "Voloz-ve ritcherdjî ci documint la?"
+
+#: src/bufferlist.C:644
+msgid "File `"
+msgstr "Li fitchî `"
+
+#: src/bufferlist.C:645
+msgid "' is read-only."
+msgstr "' ni pout esse ki lejhu."
+
+#: src/bufferlist.C:663
+msgid "Create new document with this name?"
+msgstr "Fåt-i fé on novea documint avou li minme no?"
+
+#: src/bullet_forms.C:46
+msgid "Size|#z"
+msgstr "Grandeu|#u"
+
+#: src/bullet_forms.C:51 src/credits_form.C:19 src/credits_form.C:59
+#: src/form1.C:43 src/form1.C:117 src/form1.C:267 src/form1.C:290
+#: src/insetbib.C:107 src/insetbib.C:135 src/insetinclude.C:46
+#: src/insetindex.C:65 src/latexoptions.C:21 src/layout_forms.C:53
+#: src/layout_forms.C:188 src/layout_forms.C:323 src/layout_forms.C:387
+#: src/layout_forms.C:607 src/lyx.C:47 src/lyx.C:85 src/math_forms.C:111
+#: src/print_form.C:41 src/print_form.C:114 src/sp_form.C:38
+msgid "OK"
+msgstr "I va"
+
+#: src/bullet_forms.C:54 src/form1.C:114 src/form1.C:293 src/latexoptions.C:24
+#: src/layout_forms.C:50 src/layout_forms.C:155 src/layout_forms.C:192
+#: src/layout_forms.C:298 src/layout_forms.C:326 src/layout_forms.C:384
+#: src/layout_forms.C:611 src/lyx.C:50 src/lyx.C:88 src/lyx_sendfax.C:39
+#: src/math_forms.C:108 src/math_forms.C:158 src/math_forms.C:203
+#: src/print_form.C:44 src/print_form.C:117 src/sp_form.C:62
+msgid "Apply|#A"
+msgstr "Mete èn oûve"
+
+#: src/bullet_forms.C:57 src/form1.C:120 src/form1.C:270 src/form1.C:296
+#: src/insetbib.C:110 src/insetbib.C:111 src/insetbib.C:138 src/insetbib.C:139
+#: src/insetinclude.C:49 src/insetinclude.C:50 src/insetindex.C:69
+#: src/insetindex.C:70 src/latexoptions.C:27 src/layout_forms.C:47
+#: src/layout_forms.C:196 src/layout_forms.C:302 src/layout_forms.C:329
+#: src/layout_forms.C:381 src/layout_forms.C:615 src/lyx.C:53 src/lyx.C:91
+#: src/lyx_gui_misc.C:394 src/lyx_gui_misc.C:399 src/lyx_gui_misc.C:405
+#: src/lyx_gui_misc.C:414 src/lyx_sendfax.C:35 src/math_forms.C:102
+#: src/math_forms.C:132 src/math_forms.C:200 src/print_form.C:47
+#: src/print_form.C:120 src/sp_form.C:42
+msgid "Cancel|^["
+msgstr "Rinoncî|^["
+
+#: src/bullet_forms.C:60
+msgid "LaTeX|#L"
+msgstr "LaTeX|#L"
+
+#: src/bullet_forms.C:68
+msgid "1|#1"
+msgstr "1|#1"
+
+#: src/bullet_forms.C:72
+msgid "2|#2"
+msgstr "2|#2"
+
+#: src/bullet_forms.C:75
+msgid "3|#3"
+msgstr "3|#3"
+
+#: src/bullet_forms.C:78
+msgid "4|#4"
+msgstr "4|#4"
+
+#: src/bullet_forms.C:83
+msgid "Bullet Depth"
+msgstr "xxx Puces"
+
+#: src/bullet_forms.C:88
+msgid "Standard|#S"
+msgstr "Ståndard|#S"
+
+#: src/bullet_forms.C:93
+msgid "Maths|#M"
+msgstr "Matem|#M"
+
+#: src/bullet_forms.C:97
+msgid "Ding 2|#i"
+msgstr "Ding 2|#i"
+
+#: src/bullet_forms.C:101
+msgid "Ding 3|#n"
+msgstr "Ding 3|#n"
+
+#: src/bullet_forms.C:105
+msgid "Ding 4|#g"
+msgstr "Ding 4|#g"
+
+#: src/bullet_forms.C:109
+msgid "Ding 1|#D"
+msgstr "Ding 1|#D"
+
+#: src/bullet_forms_cb.C:29
+msgid "Sorry, your libXpm is too old."
+msgstr "Dji rgrete, vosse lîvreye XPM est trop vîye."
+
+#: src/bullet_forms_cb.C:30
+msgid "This feature requires xpm-4.7 (a.k.a 3.4g) or newer."
+msgstr "Vos årîz mezåjhe del modeye xpm-4.7."
+
+#: src/bullet_forms_cb.C:31
+msgid "Try running LyX in mono mode (lyx  -Mono)."
+msgstr "Sayîz d' enonder LyX è monocrome (lyx  -Mono)."
+
+#: src/bullet_forms_cb.C:36
+msgid ""
+" default | tiny | script | footnote | small | normal | large | Large | LARGE "
+"| huge | Huge"
+msgstr ""
+"tchwezi prémetu | pitit(4) | scrip(3) | pînote (2)  | pitit(1) | normå | "
+"grand(1) | grand(2) | grand(3) | grand(4) | grand(5)"
+
+# uh? Li ratoûrna francès dit: "sélectionner"
+#: src/bullet_forms_cb.C:51
+msgid "Itemize Bullet Selection"
+msgstr "Tchwezi"
+
+#: src/credits.C:62
+msgid "ERROR: LyX wasn't able to read CREDITS file"
+msgstr "AROKE: LyX n' a savu lere li fitchî des rmerceymints"
+
+#: src/credits.C:66
+msgid "Please install correctly to estimate the great"
+msgstr "Astalez-le comufåt por vos savu kén ovraedje di sot"
+
+#: src/credits.C:69
+msgid "amount of work other people have done for the LyX project."
+msgstr "ki ça a stî po les djins k' ont sol prodjet LyX"
+
+#: src/credits.C:79
+msgid "Credits"
+msgstr "Gråces"
+
+#: src/credits.C:106
+msgid "Copyright and Warranty"
+msgstr "Licince eyèt waranteye"
+
+#: src/credits_form.C:24
+msgid "Matthias"
+msgstr "Matthias"
+
+#: src/credits_form.C:29
+msgid "All these people have contributed to the LyX project. Thanks,"
+msgstr "Totes ces djins la ont ovré sol prodjet LyX. Gråces,"
+
+#: src/credits_form.C:50
+#, fuzzy
+msgid ""
+"LyX is Copyright (C) 1995 by Matthias Ettrich,\n"
+"1995-1999 LyX Team"
+msgstr ""
+"LyX © 1995 Matthias Ettrich,\n"
+"© 1995-1998 LyX Team"
+
+#: src/credits_form.C:55
+msgid ""
+"This program is free software; you can redistribute it\n"
+"and/or modify it under the terms of the GNU General\n"
+"Public License as published by the Free Software\n"
+"Foundation; either version 2 of the License, or\n"
+"(at your option) any later version."
+msgstr ""
+"Çouchal e-st on libe programe, vos l' poloz csemer\n"
+"eyèt li candjî tot shûvant li GNU General\n"
+"Public License, aplaideye pal Free Software\n"
+"Foundation, ki ça seye li 2e modeye del licinse, ou\n"
+"(come vos inmez mî) ene modeye après."
+
+#: src/credits_form.C:64
+msgid ""
+"LyX is distributed in the hope that it will\n"
+"be useful, but WITHOUT ANY WARRANTY;\n"
+"without even the implied warranty of MERCHANTABILITY\n"
+"or FITNESS FOR A PARTICULAR PURPOSE.\n"
+"See the GNU General Public License for more details.\n"
+"You should have received a copy of\n"
+"the GNU General Public License\n"
+"along with this program; if not, write to\n"
+"the Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+msgstr ""
+"LyX est csemé avou l' espwer k' i serè\n"
+"ahessåve, mins SINS NOLE WARANTEYE,\n"
+"nén ddja li cene ki li programe sereut VINDÅVE\n"
+"ou ki pôreut esse eployî po fé ene sôrt ou l' ôte.\n"
+"Waitîz li GNU General Public License po ndè savu did pus.\n"
+"Normålmint, vos avoz-st avu èn egzimplaire\n"
+"del GNU General Public License\n"
+"avou li programe; Si vos nd avoz pont avu, sicrîjhoz\n"
+"al Free Software Foundation, Inc.,\n"
+"675 Mass Ave, Cambridge, MA 02139, USA."
+
+#: src/figinset.C:1083
+msgid "[render error]"
+msgstr "[aroke dins l' eterpretaedje]"
+
+#: src/figinset.C:1084
+msgid "[rendering ... ]"
+msgstr "[eterpretaedje ...]"
+
+#: src/figinset.C:1086
+msgid "[no file]"
+msgstr "[nou fitchî]"
+
+#: src/figinset.C:1087
+msgid "[not displayed]"
+msgstr "[nén håyné]"
+
+#: src/figinset.C:1088
+msgid "[no ghostscript]"
+msgstr "[nou ghostscript]"
+
+#: src/figinset.C:1090
+msgid "[unknown error]"
+msgstr "[aroke disconoxhuwe]"
+
+#: src/figinset.C:1287
+msgid "Figure"
+msgstr "Imådje"
+
+#: src/figinset.C:1348 src/figinset.C:1486
+msgid "empty figure path"
+msgstr "li tchmin après l' imådje est vûde"
+
+#: src/figinset.C:2128
+msgid "Clipart"
+msgstr ""
+
+#: src/figinset.C:2129 src/lyxfunc.C:2508 src/lyxfunc.C:2571
+#: src/lyxfunc.C:2794
+msgid "Document"
+msgstr "Documint"
+
+#: src/figinset.C:2135 src/figinset.C:2138
+msgid "EPS Figure"
+msgstr "Imådje EPS"
+
+#: src/figinset.C:2152
+msgid "Filename can't contain any of these characters:"
+msgstr "I n' pout î avu nouk di ces caracteres ci dins on no di fitchî :"
+
+#: src/figinset.C:2153
+#, no-c-format
+msgid "space, '#', '~', '$' or '%'."
+msgstr "espåçmint, '#', '~', '$' ou '%'."
+
+#: src/filedlg.C:225
+msgid "Warning! Couldn't open directory."
+msgstr "Asteme! Dji n' a savu drovi li ridant."
+
+#: src/filetools.C:167 src/filetools.C:176 src/filetools.C:183
+msgid "LyX Internal Error!"
+msgstr "Divintrinne aroke dins LyX!"
+
+#: src/filetools.C:168
+msgid "Could not test if directory is writeable"
+msgstr "Dji n' a savu sayî si li ridant pout bén esse sicrît dvins."
+
+#: src/filetools.C:177
+msgid "Cannot open directory test file"
+msgstr "Dji n' a savu drovi li fitchî saye"
+
+#: src/filetools.C:184
+msgid "Created test file but cannot remove it?"
+msgstr "Li fitchî saye est fwait, mins dji nel sai distrûre"
+
+#: src/filetools.C:305
+msgid "Error! Cannot open directory:"
+msgstr "Aroke! Dji n' sai drovi li ridant:"
+
+#: src/filetools.C:317
+msgid "Error! Could not remove file:"
+msgstr "Aroke! Dji n' sai waester li fitchî:"
+
+#: src/filetools.C:331
+msgid "Error! Couldn't create temporary directory:"
+msgstr "Aroke! Dji n' sai fé on ridant timporaire:"
+
+#: src/filetools.C:350
+msgid "Error! Couldn't delete temporary directory:"
+msgstr "Aroke! Dji n' sai waester li ridant timporaire:"
+
+#: src/filetools.C:414
+msgid "Internal error!"
+msgstr "Divintrinne aroke!"
+
+#: src/filetools.C:415
+msgid "Call to createDirectory with invalid name"
+msgstr "createDirectory a stî hukî avou no no nén valåbe"
+
+#: src/filetools.C:420
+msgid "Error! Couldn't create directory:"
+msgstr "Aroke! Dji n' a savu fé li ridant:"
+
+#: src/form1.C:21
+msgid "Set Charset|#C"
+msgstr "Pådjes di caracteres|#C"
+
+#: src/form1.C:23
+msgid "Charset not found!"
+msgstr "Dji n' a nén trové li pådje di caracteres !"
+
+#: src/form1.C:28
+msgid ""
+"Error:\n"
+"\n"
+"Keymap\n"
+"not found"
+msgstr ""
+"Aroke:\n"
+"\n"
+"Dji n' a savu trover\n"
+"des tapes"
+
+#: src/form1.C:33
+msgid "Character set:|#H"
+msgstr "Tåve di caracteres:|#å#a"
+
+#: src/form1.C:45
+msgid "Other...|#O"
+msgstr "Ôte...|#Ô#O"
+
+#: src/form1.C:48
+msgid "Other...|#T"
+msgstr "Ôte...|#T"
+
+#: src/form1.C:51
+msgid "Language"
+msgstr "Lingaedje"
+
+#: src/form1.C:56
+msgid "Mapping"
+msgstr "Mape di taprece"
+
+#: src/form1.C:62
+msgid "Primary key map|#r"
+msgstr "Prumîre mape|#r"
+
+#: src/form1.C:64
+msgid "No key mapping|#N"
+msgstr "Pont di mape|#n"
+
+#: src/form1.C:66
+msgid "Secondary key map|#e"
+msgstr "Deuzyinme mape|#e"
+
+#: src/form1.C:70
+msgid "Secondary"
+msgstr "Deuzyinme"
+
+#: src/form1.C:73
+msgid "Primary"
+msgstr "Prumîr"
+
+#: src/form1.C:99
+msgid "EPS file|#E"
+msgstr "Fitchî EPS|#E"
+
+#: src/form1.C:102
+msgid "Full Screen Preview|#v"
+msgstr "Vey tote ene waitroûleye|#V"
+
+#: src/form1.C:105
+msgid "Browse...|#B"
+msgstr "Foyter...|#F"
+
+#: src/form1.C:123
+msgid "Display Frame|#F"
+msgstr "Håyner li cåde|#C"
+
+#: src/form1.C:126
+msgid "Do Translations|#r"
+msgstr "Translater|#T"
+
+#: src/form1.C:129 src/menus.C:127 src/menus.C:133 src/menus.C:239
+#: src/menus.C:240 src/menus.C:241 src/menus.C:314 src/menus.C:315
+#: src/menus.C:316 src/sp_form.C:58
+msgid "Options"
+msgstr "Tchûzes"
+
+#: src/form1.C:133
+msgid "Angle:|#L"
+msgstr "Ingleye:|#L"
+
+#: src/form1.C:139 src/form1.C:141
+#, no-c-format
+msgid "% of Page|#g"
+msgstr "% del pådje|#j"
+
+#: src/form1.C:144
+msgid "Default|#t"
+msgstr "Prémetu|#r"
+
+#: src/form1.C:147
+msgid "cm|#m"
+msgstr "cm|#m"
+
+#: src/form1.C:150
+msgid "inches|#h"
+msgstr "pôces|#p"
+
+#: src/form1.C:155
+msgid "Display"
+msgstr "Håynaedje"
+
+#: src/form1.C:159
+msgid "Height"
+msgstr "Hôteu"
+
+#: src/form1.C:163 src/layout_forms.C:539 src/layout_forms.C:622
+msgid "Width"
+msgstr "Lårdjeu"
+
+#: src/form1.C:167
+msgid "Rotation"
+msgstr "Toûrnaedje"
+
+#: src/form1.C:173
+msgid "Display in Color|#D"
+msgstr "Håyner è coleurs|#C"
+
+#: src/form1.C:176
+msgid "Do not display this figure|#y"
+msgstr "Ni nén håyner ciste imådje|#N"
+
+#: src/form1.C:179
+msgid "Display as Grayscale|#i"
+msgstr "Håyner è totes sôrts di gris|#i"
+
+#: src/form1.C:182
+msgid "Display as Monochrome|#s"
+msgstr "Håyner è rén k' ene coleur|#r"
+
+#: src/form1.C:189
+msgid "Default|#U"
+msgstr "Prémetu|#u"
+
+#: src/form1.C:192
+msgid "cm|#c"
+msgstr "cm|#m"
+
+#: src/form1.C:195
+msgid "inches|#n"
+msgstr "pôces|#p"
+
+#: src/form1.C:199 src/form1.C:201
+#, no-c-format
+msgid "% of Page|#P"
+msgstr "% del pådje|#j"
+
+#: src/form1.C:205 src/form1.C:207
+#, no-c-format
+msgid "% of Column|#o"
+msgstr "% di colones|#o"
+
+#: src/form1.C:213
+msgid "Caption|#k"
+msgstr "Tite|#k"
+
+#: src/form1.C:216
+msgid "Subfigure|#q"
+msgstr "Imådje efant|#q"
+
+#: src/form1.C:239
+msgid "Directory:|#D"
+msgstr "Ridant:|#R"
+
+#: src/form1.C:243
+msgid "Pattern:|#P"
+msgstr "Modele:|#M"
+
+#: src/form1.C:251
+msgid "Filename:|#F"
+msgstr "No do fitchî:|#F"
+
+#: src/form1.C:255
+msgid "Rescan|#R#r"
+msgstr "Rissayî|#R#r"
+
+#: src/form1.C:258
+msgid "Home|#H#h"
+msgstr "Måjhon|#H#h"
+
+#: src/form1.C:261
+msgid "User1|#1"
+msgstr "Ûzeu1|#1"
+
+#: src/form1.C:264
+msgid "User2|#2"
+msgstr "Ûzeu2|#2"
+
+#: src/form1.C:299 src/layout_forms.C:83
+msgid "Columns"
+msgstr "Colones"
+
+#: src/form1.C:303 src/math_forms.C:135
+msgid "Rows"
+msgstr "Royes"
+
+#: src/form1.C:323
+msgid "Find|#n"
+msgstr "Trover|#T"
+
+#: src/form1.C:327
+msgid "Replace with|#W"
+msgstr "Mete çouchal el plaece|#ç#c"
+
+#: src/form1.C:331
+msgid "@>|#F"
+msgstr "@>|#F"
+
+#: src/form1.C:335
+msgid "@<|#B"
+msgstr "@<|#B"
+
+#: src/form1.C:339
+msgid "Replace|#R#r"
+msgstr "Mete el plaece|#L#r"
+
+#: src/form1.C:343
+msgid "Close|^["
+msgstr "Cloyu|^["
+
+#: src/form1.C:347
+msgid "Case sensitive|#s#S"
+msgstr "Ptitès <> grandès letes|#s#S"
+
+#: src/form1.C:349
+msgid "Match word|#M#m"
+msgstr "Trover tot djusse|#j#t"
+
+#: src/form1.C:351
+#, fuzzy
+msgid "Replace All|#A#a"
+msgstr "Mete el plaece|#L#r"
+
+#: src/formula.C:858 src/lyxfunc.C:2055
+msgid "Math greek mode on"
+msgstr "Môde matematike grec"
+
+#: src/formula.C:869 src/lyxfunc.C:2066
+msgid "Math greek keyboard on"
+msgstr "Môde taprece greke"
+
+#: src/formula.C:871 src/lyxfunc.C:2068
+msgid "Math greek keyboard off"
+msgstr "Mode clavier normal"
+
+#: src/formula.C:886 src/formula.C:1174
+msgid "TeX mode"
+msgstr "môde TeX"
+
+#: src/formula.C:901
+msgid "No number"
+msgstr "Nou nombe"
+
+#: src/formula.C:904
+msgid "Number"
+msgstr "Nombe"
+
+#: src/formula.C:1034 src/lyx_cb.C:1179
+msgid "Enter new label to insert:"
+msgstr "Tapez li novele etikete a stitchî"
+
+#: src/formula.C:1063
+msgid "math text mode"
+msgstr "Môde texe matematike"
+
+#: src/formula.C:1072
+msgid "Invalid action in math mode!"
+msgstr "Vos n' poloz nén fé çoula cwand vos estoz è môde matematike"
+
+#. / what appears in the minibuffer when opening
+#: src/formula.h:74 src/lyxfunc.C:2119
+msgid "Math editor mode"
+msgstr "Môde aspougneu matematike"
+
+#: src/formulamacro.C:146 src/formulamacro.C:170
+msgid "Macro: "
+msgstr ""
+
+#: src/insetbib.C:100
+msgid "Key:"
+msgstr "Tape:"
+
+#: src/insetbib.C:114 src/insetbib.C:115
+msgid "Remark:|#R"
+msgstr "Rawete:|#R"
+
+#. InsetBibtex uses the same form, with different labels
+#: src/insetbib.C:132 src/insetbib.C:133 src/insetbib.C:283 src/insetbib.C:284
+msgid "Key:|#K"
+msgstr "Clé:|#C#k"
+
+#: src/insetbib.C:142 src/insetbib.C:143 src/insetbib.C:285 src/insetbib.C:286
+msgid "Label:|#L"
+msgstr "Etikete:|#E#L"
+
+#: src/insetbib.C:189
+msgid "Citation"
+msgstr "Sapinse"
+
+#: src/insetbib.C:294
+msgid "Bibliography item"
+msgstr "Intreye bibiografike"
+
+#: src/insetbib.C:314
+msgid "BibTeX Generated References"
+msgstr "Rahucas prodûts pa BibTex"
+
+#: src/insetbib.C:445
+msgid "Database:"
+msgstr "Båze di doneyes:"
+
+#: src/insetbib.C:446
+msgid "Style:  "
+msgstr "Stîle:  "
+
+#: src/insetbib.C:453
+msgid "BibTeX"
+msgstr "BibTeX"
+
+#: src/inseterror.C:74 src/inseterror.C:99 src/lyx_cb.C:3704
+msgid "Error"
+msgstr "Aroke"
+
+#: src/inseterror.C:180
+msgid "LaTeX Error"
+msgstr "Aroke dins LaTeX"
+
+#. / what appears in the minibuffer when opening
+#: src/inseterror.h:59
+msgid "Opened error"
+msgstr "Aroke sins response"
+
+#: src/insetinclude.C:39 src/insetinclude.C:40
+msgid "Browse|#B"
+msgstr "Foyter|#y#B"
+
+#: src/insetinclude.C:43 src/insetinclude.C:44
+msgid "Don't typeset|#D"
+msgstr "Nou metaedje è pådje|#N#D"
+
+#: src/insetinclude.C:53 src/insetinclude.C:54
+msgid "Load|#L"
+msgstr "Tcherdjî|#T#L"
+
+#: src/insetinclude.C:57 src/insetinclude.C:58
+msgid "File name:|#F"
+msgstr "No do fitchî:|#F"
+
+#: src/insetinclude.C:61 src/insetinclude.C:62
+msgid "Visible space|#s"
+msgstr "espåçmint veyåve|#s"
+
+#: src/insetinclude.C:66 src/insetinclude.C:67
+msgid "Verbatim|#V"
+msgstr ""
+
+#: src/insetinclude.C:70 src/insetinclude.C:71
+msgid "Use input|#i"
+msgstr "Eployî input|#i"
+
+#: src/insetinclude.C:74 src/insetinclude.C:75
+msgid "Use include|#U"
+msgstr "Eployî include|#U"
+
+#. launches dialog
+#: src/insetinclude.C:110 src/lyx_cb.C:368 src/lyxfunc.C:2456
+#: src/lyxfunc.C:2546 src/lyxfunc.C:2595 src/lyxfunc.C:2668 src/lyxfunc.C:2769
+#: src/menus.C:128 src/menus.C:253 src/menus.C:254 src/menus.C:255
+msgid "Documents"
+msgstr "Documints"
+
+#. Use by default the master's path
+#: src/insetinclude.C:113
+msgid "Select Child Document"
+msgstr "Tchwezi"
+
+#: src/insetinclude.C:255 src/insetinclude.C:290
+msgid "Include"
+msgstr "Prinde avou"
+
+#: src/insetinclude.C:286
+msgid "Input"
+msgstr "Intreye"
+
+#: src/insetinclude.C:288
+msgid "Verbatim Input"
+msgstr ""
+
+#: src/insetindex.C:62 src/insetindex.C:63
+msgid "Keyword:|#K"
+msgstr "Mots clés:|#C#K"
+
+#: src/insetindex.C:113
+msgid "Index"
+msgstr "Index"
+
+#: src/insetindex.C:120
+#, fuzzy
+msgid "Idx"
+msgstr "Index"
+
+#: src/insetindex.C:148
+msgid "PrintIndex"
+msgstr "Rexhe l' index"
+
+#: src/insetinfo.C:73 src/insetinfo.C:92 src/insetinfo.C:203
+msgid "Note"
+msgstr "Rawete"
+
+#: src/insetinfo.C:190 src/insetinfo.C:194 src/lyx.C:142
+msgid "Close|#C^["
+msgstr "Cloyu|#C^["
+
+#. /
+#: src/insetloa.h:37
+msgid "List of Algorithms"
+msgstr "Djîveye des algoritmes"
+
+#. /
+#: src/insetlof.h:35
+msgid "List of Figures"
+msgstr "Djîveye des imådjes"
+
+#. /
+#: src/insetlot.h:35
+msgid "List of Tables"
+msgstr "Djîveye des tåvleas"
+
+#. /
+#: src/insetparent.h:42
+msgid "Parent:"
+msgstr "Parint:"
+
+#: src/insetref.C:67
+msgid "Reference Type"
+msgstr "Sôrt di rahuca"
+
+#: src/insetref.C:70
+msgid "Goto Label"
+msgstr "Potchî so l' etikete"
+
+#: src/insetref.C:73
+msgid "Change Label"
+msgstr "Candjî l' etikete"
+
+#: src/insetref.C:78
+msgid "Page Number"
+msgstr "Limerô del pådje"
+
+#: src/insetref.C:80
+msgid "Reference"
+msgstr "Rahuca"
+
+#: src/insetref.C:191
+msgid "Page: "
+msgstr "Pådje: "
+
+#: src/insetref.C:193
+msgid "Ref: "
+msgstr "Rah: "
+
+#. /
+#: src/insettoc.h:35 src/lyxfunc.C:781
+msgid "Table of Contents"
+msgstr "Ådvins"
+
+#: src/inseturl.C:112 src/inseturl.C:113
+msgid "Url|#U"
+msgstr "Url|#U"
+
+#: src/inseturl.C:114 src/inseturl.C:115 src/lyx.C:158
+msgid "Name|#N"
+msgstr "No:|#N"
+
+#: src/inseturl.C:116 src/inseturl.C:117
+#, fuzzy
+msgid "Close|#C^[^M"
+msgstr "Cloyu|#C^["
+
+#: src/inseturl.C:120 src/inseturl.C:121
+#, fuzzy
+msgid "HTML type|#H"
+msgstr "sôrt di HTML|#H"
+
+#: src/inseturl.C:141
+msgid "Insert Url"
+msgstr "Sititchî èn URL"
+
+#: src/inseturl.C:150
+msgid "HtmlUrl: "
+msgstr "HtmlUrl: "
+
+#: src/inseturl.C:152
+msgid "Url: "
+msgstr "Url: "
+
+#: src/intl.C:295 src/intl.C:296
+msgid "other..."
+msgstr "Ôte..."
+
+#: src/intl.C:365
+msgid "Key Mappings"
+msgstr "Mape des tapes"
+
+#: src/kbmap.C:307
+msgid "   options: "
+msgstr "   tchûzes: "
+
+#: src/latexoptions.C:19
+msgid "Allow accents on ALL characters|#w"
+msgstr "Admete les acsints so TOS les caracteres|#w"
+
+#: src/latexoptions.C:49 src/lyxvc.C:332 src/lyxvc.C:333
+msgid "Update|#Uu"
+msgstr "Metaedje a djoû|#û#Uu"
+
+#: src/layout.C:1293
+msgid "LyX wasn't able to find its layout descriptions!"
+msgstr ""
+"LyX n' a savu trover eyu-ce ki les arindjmints di pådjes sont discrîts!"
+
+#: src/layout.C:1294
+msgid "Check that the file \"textclass.lst\""
+msgstr "Waitîz si li fitchî \"textclass.lst\""
+
+#: src/layout.C:1295
+msgid "is installed correctly. Sorry, has to exit :-("
+msgstr "e-st astalé comufåt. Dji m' djoke... :-("
+
+#: src/layout.C:1349
+msgid "LyX wasn't able to find any layout description!"
+msgstr ""
+"LyX n' a savu trover eyu-ce ki les arindjmints di pådjes sont discrîts!"
+
+#: src/layout.C:1350
+msgid "Check the contents of  the file \"textclass.lst\""
+msgstr "Waitîz è fitchî \"textclass.lst\""
+
+#: src/layout.C:1351
+msgid "Sorry, has to exit :-("
+msgstr "Dji rgrete, mins dji m' djoke... :-("
+
+#: src/layout_forms.C:22
+msgid "Separation"
+msgstr "Evoye xxx"
+
+#: src/layout_forms.C:28
+msgid "Indent|#I"
+msgstr "xxx Indentation|#I"
+
+#: src/layout_forms.C:30
+msgid "Skip|#K"
+msgstr "Eterroye|#T#K"
+
+#: src/layout_forms.C:34
+msgid "Class:|#C"
+msgstr "Classe:|#C"
+
+#: src/layout_forms.C:38
+msgid "Pagestyle:|#P"
+msgstr "Adjinçmint pådje:|#P"
+
+#: src/layout_forms.C:41
+msgid "Fonts:|#F"
+msgstr "Fontes:|#F"
+
+#: src/layout_forms.C:44
+msgid "Font Size:|#O"
+msgstr "Grandeu des fontes:|#G"
+
+#: src/layout_forms.C:56
+msgid "Float Placement:|#L"
+msgstr "Plaece des comas:|#L"
+
+#: src/layout_forms.C:58
+msgid "PS Driver:|#S"
+msgstr "Mineu PS:|#S"
+
+#: src/layout_forms.C:61
+msgid "Encoding:|#D"
+msgstr "Ecôdaedje:|#E"
+
+#: src/layout_forms.C:73
+msgid "One|#n"
+msgstr "Onk|#n"
+
+#: src/layout_forms.C:75
+msgid "Two|#T"
+msgstr "Deus|#U#T"
+
+#: src/layout_forms.C:79
+msgid "Sides"
+msgstr "Costés"
+
+#: src/layout_forms.C:89
+msgid "One|#e"
+msgstr "Onk|#O"
+
+#: src/layout_forms.C:91
+msgid "Two|#w"
+msgstr "Deus|#D#w"
+
+#: src/layout_forms.C:95
+msgid "Extra Options:|#X"
+msgstr "Co des ôtès tchûzes:|#C#X"
+
+#: src/layout_forms.C:97
+msgid "Language:"
+msgstr "Lingaedje:"
+
+#: src/layout_forms.C:103
+msgid "Default Skip:|#u"
+msgstr "Eterroye:|#u"
+
+#: src/layout_forms.C:107
+msgid "Section number depth"
+msgstr "Limerôs cisse pårteye"
+
+#: src/layout_forms.C:110
+msgid "Table of contents depth"
+msgstr " Limerôs ådvins"
+
+#: src/layout_forms.C:113
+msgid "Spacing|#g"
+msgstr "Espaçmint|#g"
+
+#: src/layout_forms.C:117
+msgid "Bullet Shapes|#B"
+msgstr "Cogne des puces|#P"
+
+#: src/layout_forms.C:120
+msgid "Use AMS Math|#M"
+msgstr "Eployî AMS Maths|#M"
+
+#: src/layout_forms.C:140
+msgid "Family:|#F"
+msgstr "Famile:|#F"
+
+#: src/layout_forms.C:143
+msgid "Series:|#S"
+msgstr "Sereyes:|#S"
+
+#: src/layout_forms.C:146
+msgid "Shape:|#H"
+msgstr "Cogne:|#H"
+
+#: src/layout_forms.C:149
+msgid "Size:|#Z"
+msgstr "Grandeu:|#G#Z"
+
+#: src/layout_forms.C:152
+msgid "Misc:|#M"
+msgstr "Totes sôrts:|#T#M"
+
+#: src/layout_forms.C:161
+msgid "Color:|#C"
+msgstr "Coleur:|#C"
+
+#: src/layout_forms.C:164
+msgid "Toggle on all these|#T"
+msgstr "Mete / dismete tot costé|#o#A"
+
+#: src/layout_forms.C:166
+msgid "These are never toggled"
+msgstr "Chal, ça n' est måy candjî"
+
+#: src/layout_forms.C:170
+msgid "These are always toggled"
+msgstr "Chal, c' est tofer candjî"
+
+#: src/layout_forms.C:211
+msgid "Label Width:|#d"
+msgstr "Lårdj. etiketes:|#d"
+
+#: src/layout_forms.C:215
+msgid "Indent"
+msgstr "Ritrait"
+
+#: src/layout_forms.C:219
+msgid "Above|#b"
+msgstr "Divant|#D#b"
+
+#: src/layout_forms.C:221
+msgid "Below|#E"
+msgstr "Après|#A#E"
+
+#: src/layout_forms.C:223
+msgid "Above|#o"
+msgstr "Divant|#i#o"
+
+#: src/layout_forms.C:225
+msgid "Below|#l"
+msgstr "Après|#p#l"
+
+#: src/layout_forms.C:227
+msgid "No Indent|#I"
+msgstr "Nou rtrait|#N"
+
+#: src/layout_forms.C:231 src/layout_forms.C:494 src/math_forms.C:94
+msgid "Right|#R"
+msgstr "Droete|#R"
+
+#: src/layout_forms.C:233
+msgid "Left|#f"
+msgstr "Hintche|#H#f"
+
+#: src/layout_forms.C:235
+msgid "Block|#c"
+msgstr "Bloc|#c"
+
+#: src/layout_forms.C:237
+msgid "Center|#n"
+msgstr "Å mitan|#n"
+
+#: src/layout_forms.C:247
+msgid "Above:|#v"
+msgstr "Divant:|#v"
+
+#: src/layout_forms.C:251
+msgid "Below:|#w"
+msgstr "Après:|#s#w"
+
+#: src/layout_forms.C:255
+msgid "Pagebreaks"
+msgstr "Côper li pådje"
+
+#: src/layout_forms.C:259
+msgid "Lines"
+msgstr "Royes"
+
+#: src/layout_forms.C:263 src/layout_forms.C:500 src/layout_forms.C:626
+msgid "Alignment"
+msgstr "Aroymint"
+
+#: src/layout_forms.C:267
+msgid "Vertical Spaces"
+msgstr "Espaçmints d' astampé"
+
+#: src/layout_forms.C:271
+msgid "ExtraOpt|#X"
+msgstr "Ôtes...|#Ô#o#X"
+
+#: src/layout_forms.C:275
+msgid "Keep|#K"
+msgstr "Wårder|#W#K"
+
+#: src/layout_forms.C:277
+msgid "Keep|#p"
+msgstr "Wårder|#å#a#p"
+
+#: src/layout_forms.C:294 src/lyx_gui_misc.C:415 src/lyx_sendfax.C:31
+msgid "OK|#O"
+msgstr "I va"
+
+#: src/layout_forms.C:332
+msgid "Type:|#T"
+msgstr "Sôrt:|#T"
+
+#: src/layout_forms.C:337
+msgid "Single|#S"
+msgstr "Simpe|#S"
+
+#: src/layout_forms.C:339
+msgid "Double|#D"
+msgstr "Dobe|#D"
+
+#: src/layout_forms.C:343
+msgid "Text"
+msgstr "Sicrît"
+
+#: src/layout_forms.C:363
+msgid "Special:|#S"
+msgstr "Speciå:|#S"
+
+#: src/layout_forms.C:373
+msgid "Margins"
+msgstr "Boirds"
+
+#: src/layout_forms.C:377
+msgid "Foot/Head Margins"
+msgstr "Boirds al copete èt al valeye"
+
+#: src/layout_forms.C:397
+msgid "Orientation"
+msgstr "Coûtchî/Astampé"
+
+#: src/layout_forms.C:403
+msgid "Portrait|#o"
+msgstr "Pôrtrait|#ô#o"
+
+#: src/layout_forms.C:405
+msgid "Landscape|#L"
+msgstr "Payizaedje|#P"
+
+#: src/layout_forms.C:409
+msgid "Papersize:|#P"
+msgstr "Grandeu papî:|#G"
+
+#: src/layout_forms.C:413
+msgid "Custom Papersize"
+msgstr "A vosse môde"
+
+#: src/layout_forms.C:417
+msgid "Use Geometry Package|#U"
+msgstr "Eployî li paket Geometry|#y#U"
+
+#: src/layout_forms.C:419
+msgid "Width:|#W"
+msgstr "Lårdjeu:|#L#W"
+
+#: src/layout_forms.C:422
+msgid "Height:|#H"
+msgstr "Hôteu:|#H"
+
+#: src/layout_forms.C:425
+msgid "Top:|#T"
+msgstr "Dizeu:|#D"
+
+#: src/layout_forms.C:428
+msgid "Bottom:|#B"
+msgstr "Dizo:|#z#B"
+
+#: src/layout_forms.C:431
+msgid "Left:|#e"
+msgstr "Hintche:|#e"
+
+#: src/layout_forms.C:434
+msgid "Right:|#R"
+msgstr "Droete:|#R"
+
+#: src/layout_forms.C:437
+msgid "Headheight:|#i"
+msgstr "Hôteu tiestîre|#i"
+
+#: src/layout_forms.C:440
+msgid "Headsep:|#d"
+msgstr "Tiestîre:|#t"
+
+#: src/layout_forms.C:443
+msgid "Footskip:|#F"
+msgstr "Dizo del pådje|#j#F"
+
+#: src/layout_forms.C:478
+msgid "Borders"
+msgstr "Boirds"
+
+#: src/layout_forms.C:482 src/layout_forms.C:632
+msgid "Top|#T"
+msgstr "Dizeu|#u#T"
+
+#: src/layout_forms.C:486 src/layout_forms.C:638
+msgid "Bottom|#B"
+msgstr "Dizo|#o#B"
+
+#: src/layout_forms.C:490 src/math_forms.C:97
+msgid "Left|#L"
+msgstr "Hintche|#H#L"
+
+#: src/layout_forms.C:504
+msgid "Special Cell"
+msgstr "Celule especiåle"
+
+#: src/layout_forms.C:508
+msgid "Multicolumn|#M"
+msgstr "Multicolones|#M"
+
+#: src/layout_forms.C:510
+msgid "Append Column|#A"
+msgstr "Radjouter ene colone|#A"
+
+#: src/layout_forms.C:513
+msgid "Delete Column|#O"
+msgstr "Disfacer li colone|#O"
+
+#: src/layout_forms.C:516
+msgid "Append Row|#p"
+msgstr "Radjouter ene roye|#j#p"
+
+#: src/layout_forms.C:519
+msgid "Delete Row|#w"
+msgstr "Disfacer li roye|#f#w"
+
+#: src/layout_forms.C:522
+msgid "Delete Table|#D"
+msgstr "Disfacer li tåvlea|#D"
+
+#: src/layout_forms.C:525
+msgid "Column"
+msgstr "Colone"
+
+#: src/layout_forms.C:528
+msgid "Row"
+msgstr "Roye"
+
+#: src/layout_forms.C:531
+msgid "Set Borders|#S"
+msgstr "Mete les boirds|#M#S"
+
+#: src/layout_forms.C:534
+msgid "Unset Borders|#U"
+msgstr "Dismete les boirds|#D#U"
+
+#: src/layout_forms.C:537 src/layout_forms.C:551
+msgid "Longtable"
+msgstr "Grand tåvlea"
+
+#: src/layout_forms.C:542
+msgid "Rotate 90°|#9"
+msgstr "Toûrner di 90°|#9"
+
+#: src/layout_forms.C:544
+msgid "Linebreaks|#N"
+msgstr "Roye d' après|#y#N"
+
+#: src/layout_forms.C:546
+msgid "Spec. Table"
+msgstr "Spec. tåvlea"
+
+#: src/layout_forms.C:555
+msgid "First Head"
+msgstr "Prumîre tiestîre"
+
+#: src/layout_forms.C:557
+msgid "Head"
+msgstr "Tiestîre"
+
+#: src/layout_forms.C:559
+msgid "Foot"
+msgstr "Pîd del pådje"
+
+#: src/layout_forms.C:561
+msgid "Last Foot"
+msgstr "Dierin pîd di pådje"
+
+#: src/layout_forms.C:563
+msgid "New Page"
+msgstr "Novele pådje"
+
+#: src/layout_forms.C:565
+msgid "Rotate 90°"
+msgstr "Toûrner di 90°"
+
+#: src/layout_forms.C:567
+msgid "Extra|#X"
+msgstr "Co des ôtès tchûzes|#C#X"
+
+#: src/layout_forms.C:570
+msgid "Left|#e"
+msgstr "Hintche|#H"
+
+#: src/layout_forms.C:573
+msgid "Right|#i"
+msgstr "Droete|#D"
+
+#: src/layout_forms.C:576
+msgid "Center|#C"
+msgstr "Å mitan|#m"
+
+#: src/layout_forms.C:600
+msgid "Extra Options"
+msgstr "Co des ôtès tchûzes"
+
+#: src/layout_forms.C:604
+msgid "Length|#L"
+msgstr "Longueu|#L"
+
+#: src/layout_forms.C:619
+msgid "or %|#o"
+msgstr "ou %|#o"
+
+#: src/layout_forms.C:635
+msgid "Middle|#d"
+msgstr "Mitan|#t"
+
+# xxx
+#: src/layout_forms.C:647
+msgid "HFill between Minipage paragraphs|#H"
+msgstr "HFill etur les hagnons minipådjes|#H"
+
+#: src/layout_forms.C:649
+msgid "Start new Minipage|#S"
+msgstr "Comincî ene novele minipådje|#C"
+
+#: src/layout_forms.C:653
+msgid "Indented Paragraph|#I"
+msgstr "Hagnons indintés|#I"
+
+#: src/layout_forms.C:656
+msgid "Minipage|#M"
+msgstr "Minipådje|#M"
+
+#: src/layout_forms.C:659
+msgid "Floatflt|#F"
+msgstr "Floatflt xxx|#F"
+
+#: src/layout_forms.C:682
+msgid "Special Multicolumn Alignment"
+msgstr "Aroymint especiå des multicolones"
+
+#: src/layout_forms.C:695
+msgid "Special Column Alignment"
+msgstr "Aroymint especiå des colones"
+
+#: src/lyx.C:41
+msgid "Encapsulated Postscript (*.eps, *.ps)|#E"
+msgstr "PostScript ecapsulé (*.eps, *.ps)|#E"
+
+#: src/lyx.C:43
+msgid "Inlined EPS (*.eps, *.ps)|#I"
+msgstr "EPS sititchî (*.eps, *.ps)|#I"
+
+#: src/lyx.C:56
+msgid "Type"
+msgstr "Sôrt"
+
+#: src/lyx.C:75
+msgid "Roman Font|#R"
+msgstr "Fonte romane|#R"
+
+#: src/lyx.C:77
+msgid "Sans Serif Font|#S"
+msgstr "Fonte Sans Serif|#S"
+
+#: src/lyx.C:79
+msgid "Typewriter Font|#T"
+msgstr "Fonte machine a scrîre|#m#T"
+
+#: src/lyx.C:81
+msgid "Font Norm|#N"
+msgstr "Fonte normåle|#N"
+
+#: src/lyx.C:83
+msgid "Font Zoom|#Z"
+msgstr "Fonte Zoom|#Z"
+
+#: src/lyx.C:116
+msgid "Update|Uu#u"
+msgstr "Metaedje a djoû|#û#Uu#u"
+
+#: src/lyx.C:138
+msgid "Update|#U"
+msgstr "Metaedje a djoû|#û#U"
+
+#: src/lyx.C:146
+msgid "Insert Reference|#I^M"
+msgstr "Sititchî on rahuca|#I^M"
+
+#: src/lyx.C:150
+msgid "Insert Page Number|#P"
+msgstr "Sititchî li limerô del pådje|#P"
+
+#: src/lyx.C:154
+msgid "Go to Reference|#G"
+msgstr "Potchî sol rahuca|#G"
+
+#: src/lyx_cb.C:347
+msgid "Save failed. Rename and try again?"
+msgstr ""
+"Dj' a fwait berwete come dji sayîve di schaper. Fåt-i rlomer li fitchî eyèt "
+"rsayî?"
+
+#: src/lyx_cb.C:349
+msgid "(If not, document is not saved.)"
+msgstr "(Sins ça, vosse documint ni serè nén schapé.)"
+
+#: src/lyx_cb.C:369 src/lyxfunc.C:2457
+msgid "Templates"
+msgstr "Modeles"
+
+#: src/lyx_cb.C:374
+msgid "Enter Filename to Save Document as"
+msgstr "Tapez on no po schaper eyèt lomer li fitchî"
+
+#. Cancel: Do nothing
+#: src/lyx_cb.C:381 src/lyxfunc.C:2463 src/lyxfunc.C:2490 src/lyxfunc.C:2555
+#: src/lyxfunc.C:2604 src/lyxfunc.C:2629 src/lyxfunc.C:2639 src/lyxfunc.C:2684
+#: src/lyxfunc.C:2709 src/lyxfunc.C:2719 src/lyxfunc.C:2778
+msgid "Canceled."
+msgstr "Vos avoz rnoncî"
+
+#: src/lyx_cb.C:392
+msgid "Same name as document already has:"
+msgstr "C' est ddja li no do documint:"
+
+#: src/lyx_cb.C:394
+msgid "Save anyway?"
+msgstr "Fåt-i tot l' minme schaper?"
+
+#: src/lyx_cb.C:400
+msgid "Another document with same name open!"
+msgstr "Èn ôte documint drovu a ddja ci no la !"
+
+#: src/lyx_cb.C:402
+msgid "Replace with current document?"
+msgstr "Fåt-i mete ci documint ci el plaece ?"
+
+#: src/lyx_cb.C:410
+msgid "Document renamed to '"
+msgstr "Documint rlomé ("
+
+#: src/lyx_cb.C:412
+msgid "', but not saved..."
+msgstr "), mins nén schapé..."
+
+#: src/lyx_cb.C:418
+msgid "Document already exists:"
+msgstr "Ci documint la egzisteye dedja"
+
+#: src/lyx_cb.C:420
+msgid "Replace file?"
+msgstr "Mete el plaece do fitchî ?"
+
+#: src/lyx_cb.C:443 src/lyxvc.C:359
+msgid "Sorry, can't do this while pictures are being rendered."
+msgstr ""
+"Dji rgrete, mins dji n' såreu fé çoula sol tins ki dji dessine des imådjes"
+
+#: src/lyx_cb.C:444 src/lyxvc.C:361
+msgid "Please wait a few seconds for this to finish and try again."
+msgstr "Atårdjîz ene miete divant di rcomincî."
+
+#: src/lyx_cb.C:445 src/lyxvc.C:363
+msgid "(or kill runaway gs processes by hand and try again.)"
+msgstr "(oudôbén tuwer les processus 'gs' al mwin eyèt's ratakez.)"
+
+#: src/lyx_cb.C:451 src/lyxvc.C:369
+msgid "Can't do this while the spellchecker is running."
+msgstr "Dji rgrete, dji n' sai fé çoula sol tins ki dji coridje l' ôrtografeye"
+
+#: src/lyx_cb.C:452 src/lyxvc.C:371
+msgid "Stop the spellchecker first."
+msgstr "Arestez li coridjeu po cmincî"
+
+#: src/lyx_cb.C:470 src/lyx_cb.C:502
+msgid "One error detected"
+msgstr "Dj' a trové ene måcule"
+
+#: src/lyx_cb.C:471 src/lyx_cb.C:503
+msgid "You should try to fix it."
+msgstr "Sayîz del coridjî."
+
+#: src/lyx_cb.C:474 src/lyx_cb.C:506
+msgid " errors detected."
+msgstr " måcules di troveyes"
+
+#: src/lyx_cb.C:475 src/lyx_cb.C:507
+msgid "You should try to fix them."
+msgstr "Sayîz delzès coridjî po cmincî"
+
+#: src/lyx_cb.C:477
+msgid "There were errors during the LaTeX run."
+msgstr "LaTeX a trové des måcules."
+
+#: src/lyx_cb.C:492
+#, fuzzy
+msgid "Wrong type of document"
+msgstr "Potchî al difén do documint"
+
+#: src/lyx_cb.C:493
+msgid "The Build operation is not allowed in this document"
+msgstr ""
+
+#: src/lyx_cb.C:494 src/lyx_cb.C:509
+#, fuzzy
+msgid "There were errors during the Build process."
+msgstr "LaTeX a trové des måcules."
+
+#: src/lyx_cb.C:520
+#, fuzzy
+msgid "Chktex does not work with SGML derived documents."
+msgstr "Chktex eyèt LinuxDoc sont mwais après onk l' ôte."
+
+#: src/lyx_cb.C:529
+msgid "No warnings found."
+msgstr "Nol advertixhmint d' oyu."
+
+#: src/lyx_cb.C:531
+msgid "One warning found."
+msgstr "Dj' a oyu èn advertixhmint."
+
+#: src/lyx_cb.C:532
+msgid "Use 'Edit->Go to Error' to find it."
+msgstr "Siervoz vos di 'Candjî->Potchî al måcule' pol ritrover."
+
+#: src/lyx_cb.C:535
+msgid " warnings found."
+msgstr " advertixhmints d' oyus."
+
+#: src/lyx_cb.C:536
+msgid "Use 'Edit->Go to Error' to find them."
+msgstr "Siervoz vos di 'Candjî->Potchî al måcule' po lzès trover."
+
+#: src/lyx_cb.C:538
+msgid "Chktex run successfully"
+msgstr "Chktex n' a pont trové di måcules"
+
+#: src/lyx_cb.C:540
+msgid "It seems chktex does not work."
+msgstr "Chktex ni va nén, a-dje l' ideye."
+
+#: src/lyx_cb.C:624 src/lyx_cb.C:627
+msgid "Executing command:"
+msgstr "Dj' enonde li cmande :"
+
+#: src/lyx_cb.C:852 src/lyx_cb.C:889 src/lyx_cb.C:922 src/lyx_cb.C:949
+#: src/lyxfunc.C:2499
+msgid "File already exists:"
+msgstr "Ci fitchî la egzisteye dedja :"
+
+#: src/lyx_cb.C:854 src/lyx_cb.C:891 src/lyx_cb.C:924 src/lyx_cb.C:951
+msgid "Do you want to overwrite the file?"
+msgstr "Voloz-ve sipotchî li documint?"
+
+#: src/lyx_cb.C:855 src/lyx_cb.C:892 src/lyx_cb.C:925 src/lyx_cb.C:952
+msgid "Canceled"
+msgstr "Vos avoz rnoncî"
+
+#: src/lyx_cb.C:860
+msgid "DocBook does not have a latex backend"
+msgstr ""
+
+#: src/lyx_cb.C:866
+msgid "Nice LaTeX file saved as"
+msgstr "Djoli fitchî LaTeX schapé eyèt lomé"
+
+#: src/lyx_cb.C:879
+msgid "Document class must be linuxdoc."
+msgstr "Li classe do documint doet esse Linuxdoc"
+
+#: src/lyx_cb.C:896
+msgid "Building LinuxDoc SGML file `"
+msgstr "Dji bati li fitchî SGML LinuxDoc `"
+
+#: src/lyx_cb.C:901
+msgid "LinuxDoc SGML file save as"
+msgstr "Li fitchî LinuxDoc SGML est schapé eyèt lomé "
+
+#: src/lyx_cb.C:912
+#, fuzzy
+msgid "Document class must be docbook."
+msgstr "Li classe do documint doet esse Linuxdoc"
+
+#: src/lyx_cb.C:929
+#, fuzzy
+msgid "Building DocBook SGML file `"
+msgstr "Dji bati li fitchî SGML LinuxDoc `"
+
+#: src/lyx_cb.C:934
+#, fuzzy
+msgid "DocBook SGML file save as"
+msgstr "Li fitchî LinuxDoc SGML est schapé eyèt lomé "
+
+#: src/lyx_cb.C:958
+msgid "Ascii file saved as"
+msgstr "Li fitchî Ascii est schapé eyèt lomé "
+
+#: src/lyx_cb.C:1026
+msgid "Autosaving current document..."
+msgstr "Dji schape tot seu li documint drovu..."
+
+#: src/lyx_cb.C:1067
+msgid "Autosave Failed!"
+msgstr "Dj' a fwait berwete come dji sayîve di schaper tot seu !"
+
+#: src/lyx_cb.C:1124
+msgid "File to Insert"
+msgstr "Fitchî a stitchî"
+
+#: src/lyx_cb.C:1135
+msgid "Error! Cannot open specified file:"
+msgstr "Berwete! Dji n' sai drovi ci fitchî la:"
+
+#: src/lyx_cb.C:1168
+msgid "Table Of Contents"
+msgstr "Ådvins"
+
+#: src/lyx_cb.C:1199
+msgid "Insert Reference"
+msgstr "Sititchî on rahuca"
+
+#: src/lyx_cb.C:1228
+msgid "Inserting Footnote..."
+msgstr "Sititchî ene pînote..."
+
+#. Import file
+#: src/lyx_cb.C:1285
+msgid "Importing LinuxDoc SGML file `"
+msgstr "Dj' abague li fitchî LinuxDoc SGML `"
+
+#. TeX output asked
+#: src/lyx_cb.C:1293
+msgid "Converting LinuxDoc SGML to TeX file..."
+msgstr "Dji ratoûne li fitchî LinuxDoc SGML el cogne TeX...."
+
+#. dvi output asked
+#: src/lyx_cb.C:1300
+msgid "Converting LinuxDoc SGML to dvi file..."
+msgstr "Dji ratoûne li fitchî LinuxDoc SGML el cogne DVI..."
+
+#. dvi output asked
+#: src/lyx_cb.C:1358
+#, fuzzy
+msgid "Converting DocBook SGML to dvi file..."
+msgstr "Dji ratoûne li fitchî LinuxDoc SGML el cogne DVI..."
+
+#: src/lyx_cb.C:1482
+msgid "Character Style"
+msgstr "Stîle do caractere"
+
+#: src/lyx_cb.C:1685
+msgid "Paragraph Environment"
+msgstr "Inviron'mint pol hagnon"
+
+#: src/lyx_cb.C:1937
+msgid "Document Layout"
+msgstr "Adjinçnaedje do documint"
+
+#: src/lyx_cb.C:1976
+msgid "Quotes"
+msgstr "Distis"
+
+#: src/lyx_cb.C:2021
+msgid "LaTeX Preamble"
+msgstr "Adrovaedje LaTeX"
+
+#: src/lyx_cb.C:2031
+msgid "Do you want to save the current settings"
+msgstr "Voloz-ve schapé cist apontiaedje ci"
+
+#: src/lyx_cb.C:2032
+msgid "for Character, Document, Paper and Quotes"
+msgstr "pol caractere, li documint, li papî eyèt les distis"
+
+#: src/lyx_cb.C:2033
+msgid "as default for new documents?"
+msgstr "por zels esse les prémétus noveas documints"
+
+#: src/lyx_cb.C:2050 src/lyx_cb.C:2062
+msgid "Open/Close..."
+msgstr "Drovi/Serer"
+
+#: src/lyx_cb.C:2085
+msgid "No further undo information"
+msgstr "Nole informåcion po disfé"
+
+#: src/lyx_cb.C:2095
+msgid "Redo not yet supported in math mode"
+msgstr "Dji n' sai rfé ene sacwè è môde matematike"
+
+#: src/lyx_cb.C:2105
+msgid "No further redo information"
+msgstr " Nole informåcion po Rifé"
+
+#: src/lyx_cb.C:2296
+msgid "Font: "
+msgstr "Fonte: "
+
+#: src/lyx_cb.C:2300
+msgid ", Depth: "
+msgstr ", Parfondeu: "
+
+#: src/lyx_cb.C:2328
+msgid "Inserting margin note..."
+msgstr "Dji stitche ene rawete sol costé..."
+
+#: src/lyx_cb.C:2369
+msgid "Paragraph environment type copied"
+msgstr "Li sôrt d' inviron'miont pol hagnon est rcopieye"
+
+#: src/lyx_cb.C:2378
+msgid "Paragraph environment type set"
+msgstr "Li sôrt d' inviron'mint pol hagnon est metuwe"
+
+#: src/lyx_cb.C:2469
+msgid "Changed environment depth (in possible range, maybe not)"
+msgstr "Dj' a candjî li parfondeu di l' inviron'mint (come dji poleu)"
+
+#: src/lyx_cb.C:2709
+msgid "Paragraph layout set"
+msgstr "L' adjinçnaedje do hagnon est metu"
+
+#: src/lyx_cb.C:2779
+msgid "Should I set some parameters to"
+msgstr "Doe-dje fé decider por vos"
+
+#: src/lyx_cb.C:2781
+msgid "the defaults of this document class?"
+msgstr "dins les tchûzes po cisse classe di documints"
+
+#. unable to load new style
+#: src/lyx_cb.C:2790 src/lyx_cb.C:2909 src/lyx_cb.C:2916
+msgid "Conversion Errors!"
+msgstr "Dj' a aroké come dji ratoûrneve!"
+
+#: src/lyx_cb.C:2791 src/lyx_cb.C:2917
+msgid "Unable to switch to new document class."
+msgstr "Dji n' sai passer al novele classe di documints."
+
+#: src/lyx_cb.C:2792 src/lyx_cb.C:2918
+msgid "Reverting to original document class."
+msgstr "Ça fwait ki dji rvén al classe do cminçmint."
+
+#: src/lyx_cb.C:2892
+msgid "Converting document to new document class..."
+msgstr "Dji ratoûne li documint dins si novele classe..."
+
+#: src/lyx_cb.C:2904
+msgid "One paragraph couldn't be converted"
+msgstr "Gn a on hagnon ki dji n' sa savu ratoûrner"
+
+#: src/lyx_cb.C:2907
+msgid " paragraphs couldn't be converted"
+msgstr " hagnons n' ont nén stî ratoûrnés"
+
+#: src/lyx_cb.C:2910
+msgid "into chosen document class"
+msgstr "dins li classe ki vos avîz tchwezi"
+
+#: src/lyx_cb.C:2996
+msgid "Document layout set"
+msgstr "L'adjinçmint do documint est metu"
+
+#: src/lyx_cb.C:3046 src/lyx_cb.C:3050
+msgid "No more notes"
+msgstr "Pont d' ôte rawete"
+
+#: src/lyx_cb.C:3081
+msgid "Quotes type set"
+msgstr "Li sôrt di distis est metuwe"
+
+#: src/lyx_cb.C:3145
+msgid "LaTeX preamble set"
+msgstr "L' adrovaedje di LaTeX est metu"
+
+#: src/lyx_cb.C:3167
+msgid "Cannot insert table in table."
+msgstr "Dji n' sai herer on tåvlea dins èn ôte tåvlea"
+
+#: src/lyx_cb.C:3172
+msgid "Inserting table..."
+msgstr "Dji stitche on tåvlea"
+
+#: src/lyx_cb.C:3232
+msgid "Table inserted"
+msgstr "Li tåvlea est stitchî"
+
+#: src/lyx_cb.C:3291 src/lyx_cb.C:3311
+#, fuzzy
+msgid "ERROR!  Unable to print!"
+msgstr "Dji n' sai rexhe so li scrîrece"
+
+#: src/lyx_cb.C:3292
+msgid "Check 'range of pages'!"
+msgstr ""
+
+#: src/lyx_cb.C:3312
+msgid "Check 'number of copies'!"
+msgstr ""
+
+#: src/lyx_cb.C:3425
+msgid "Error:"
+msgstr "Aroke:"
+
+#: src/lyx_cb.C:3426
+msgid "Unable to print"
+msgstr "Dji n' sai rexhe so li scrîrece"
+
+#: src/lyx_cb.C:3427
+msgid "Check that your parameters are correct"
+msgstr "Waitîz si vos tchûzes sont djusses"
+
+#: src/lyx_cb.C:3449
+msgid "Inserting figure..."
+msgstr "Dji stitche l' imådje..."
+
+#: src/lyx_cb.C:3454 src/lyx_cb.C:3506
+msgid "Figure inserted"
+msgstr "L' imådje est stitcheye"
+
+#: src/lyx_cb.C:3535
+msgid "Screen options set"
+msgstr "Les tchûzes pol waitroûles sont metuwes"
+
+#: src/lyx_cb.C:3565
+msgid "LaTeX Options"
+msgstr "Tchûzes LaTeX"
+
+#: src/lyx_cb.C:3574
+msgid "Running configure..."
+msgstr "Dj' enonde l' apontiaedje..."
+
+#: src/lyx_cb.C:3581
+msgid "Reloading configuration..."
+msgstr "Dji renonde l' apontiaedje..."
+
+#: src/lyx_cb.C:3583
+msgid "The system has been reconfigured."
+msgstr "Li sistinme est rapontyî"
+
+#: src/lyx_cb.C:3584
+msgid "You need to restart LyX to make use of any"
+msgstr "Vos dvoz renonder LyX por vos vos siervi"
+
+#: src/lyx_cb.C:3585
+msgid "updated document class specifications."
+msgstr "des classes k' ont stî rcandjeyes."
+
+#: src/lyx_cb.C:3705
+msgid "Couldn't find this label"
+msgstr "Dji n' a nén trové ciste etikete la"
+
+#: src/lyx_cb.C:3706
+msgid "in current document."
+msgstr "divins li documint drovu."
+
+#: src/lyx_cb.C:3737
+msgid "*** No Document ***"
+msgstr "*** Pont di documint ***"
+
+#: src/lyx_cb.C:3903
+msgid "*** No labels found in document ***"
+msgstr "*** Pont d´ etiketes divins li documint drovu ***"
+
+#: src/lyx_gui.C:385 src/lyx_gui.C:388
+msgid " None | Defskip | Smallskip | Medskip | Bigskip | VFill | Length "
+msgstr " Pont | Prémetu | Pitit  | Mîtrin | Grand | D' astampé | Longueu "
+
+#: src/lyx_gui.C:414
+msgid " No change %l| Roman | Sans Serif | Typewriter %l| Reset "
+msgstr ""
+" Nou candjmint %l| Romane | Sans Serif | Machine a Scrîre %l| Rimete a zerô "
+
+#: src/lyx_gui.C:416
+msgid " No change %l| Medium | Bold %l| Reset "
+msgstr " Nou candjmint %l| Mwinres | Cråsses %l| Rimete a zerô"
+
+#: src/lyx_gui.C:418
+msgid " No change %l| Upright | Italic | Slanted | Small Caps %l| Reset "
+msgstr ""
+" Nou candjmint %l| Droetes | Clintcheyes(1) | Clintcheyes(2) | Pititès "
+"grandès letes %l| Rimete a zerô "
+
+#: src/lyx_gui.C:421
+msgid ""
+" No change %l| Tiny | Smallest | Smaller | Small | Normal | Large | Larger | "
+"Largest | Huge | Huger %l| Increase | Decrease | Reset "
+msgstr ""
+"Nou candjmint %l| Pitit(4) | Pitit(3) |  Pitit(2) |  Pitit(1) | Normå | "
+"Grand(1) | Grand(2) | Grand(3) | Grand(4) | Grand(5) | <- Did pus -> | -> "
+"Diminuer <- | RAZ"
+
+#: src/lyx_gui.C:425
+msgid " No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "
+msgstr ""
+" Nou candjmint %l| Clintcheyes | Sorligneyes | Pititès grandès letes | môde "
+"LaTeX %l | Rimete a zerô "
+
+#: src/lyx_gui.C:427
+msgid ""
+" No change %l| No color | Black | White | Red | Green | Blue | Cyan | "
+"Magenta | Yellow %l| Reset "
+msgstr ""
+"Non candjmint %l| Sins coleur | Noer | Blanc | Rodje | Vert | Bleu | Cyan | "
+"Magenta | Djaene %l | Rimete a zerô"
+
+#: src/lyx_gui.C:435
+msgid " Single | OneHalf | Double | Other "
+msgstr " Simpe | Dimey | Dobe | Ôte "
+
+#: src/lyx_gui.C:474
+msgid " Smallskip | Medskip | Bigskip | Length "
+msgstr " Tene esp. | Mîtrin esp. | Lådje esp. | Longueu "
+
+#: src/lyx_gui.C:483
+msgid ""
+" Default | Custom | USletter | USlegal | USexecutive | A3 | A4 | A5 | B3 | "
+"B4 | B5 "
+msgstr ""
+" Prémetu | A vosse môde | Lete US | Legal US | Executive US | A3 | A4 | A5 | "
+"B3 | B4 | B5 "
+
+#: src/lyx_gui.C:486
+msgid ""
+" None | A4 small Margins (only portrait) | A4 very small Margins (only "
+"portrait) | A4 very wide margins (only portrait) "
+msgstr ""
+" Nole | A4 tenes boirds (seulmint d' astampé) | A4 lådjes boirds (seulmint "
+"d' astampé) | A4 mo lådjes boirds (seulmint d' astampé) "
+
+#: src/lyx_gui.C:532
+msgid " ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "
+msgstr ""
+" ``sicrît'' | ''sicrît'' | ,,sicrît`` | ,,sicrît'' | «sicrît» | »sicrît« "
+
+#: src/lyx_gui.C:610
+msgid "LyX Banner"
+msgstr "Åbarone da LyX"
+
+#: src/lyx_gui_misc.C:363
+msgid "Dismiss"
+msgstr "Rinoncî"
+
+#: src/lyx_gui_misc.C:380 src/lyx_gui_misc.C:392 src/lyx_gui_misc.C:397
+#: src/lyx_gui_misc.C:403
+msgid "Yes|Yy#y"
+msgstr "Oyi|Oo#o"
+
+#: src/lyx_gui_misc.C:381 src/lyx_gui_misc.C:393 src/lyx_gui_misc.C:398
+#: src/lyx_gui_misc.C:404
+msgid "No|Nn#n"
+msgstr "Neni|Nn#n"
+
+#: src/lyx_gui_misc.C:416
+msgid "Clear|#e"
+msgstr "Vûdî|#v"
+
+#: src/lyx_gui_misc.C:425
+msgid "Any changes will be ignored"
+msgstr "Dji pasrè hute di tos les candjmints"
+
+#: src/lyx_gui_misc.C:426
+msgid "The document is read-only:"
+msgstr "Vos poloz seulmint lere li documint"
+
+#: src/lyx_main.C:184
+msgid "Warning: could not determine path of binary."
+msgstr "Asteme: dji n' a savu trover li fitchî binaire."
+
+#: src/lyx_main.C:185
+msgid "If you have problems, try starting LyX with an absolute path."
+msgstr "Si vos åvoz des rûjhes, enondez LyX è tapant tote li voye."
+
+#: src/lyx_main.C:271
+msgid "LYX_DIR_10x environment variable no good."
+msgstr "Dji n' mi sai siervi del variåve d' inviron'mint LYX_DIR_10x"
+
+#: src/lyx_main.C:272
+msgid "System directory set to: "
+msgstr "Li ridant sistinme est chal: "
+
+#: src/lyx_main.C:280
+msgid "LyX Warning! Couldn't determine system directory."
+msgstr "Asteme, di-st i LyX: dji n' trove nén li ridant sistinme."
+
+#: src/lyx_main.C:281
+msgid "Try the '-sysdir' command line parameter or"
+msgstr "Al roye di cmande, sayîz li tchûze '-sysdir' ou"
+
+#: src/lyx_main.C:282
+msgid "set the environment variable LYX_DIR_10x to the LyX system directory"
+msgstr ""
+"metoz li variåve d' inviron'mint LYX_DIR_10x por leye miner å ridant sistinme"
+
+#: src/lyx_main.C:284
+msgid "containing the file `chkconfig.ltx'."
+msgstr "ki contént li fitchî `chkconfig.ltx'."
+
+#: src/lyx_main.C:286
+msgid "Using built-in default "
+msgstr "Dji m' sieve des tchûzes prémetuwes."
+
+#: src/lyx_main.C:287
+msgid " but expect problems."
+msgstr " seulmint, vos alez dandjureu avu des rûjhes"
+
+#: src/lyx_main.C:289
+msgid "Expect problems."
+msgstr "Vos alez dandjureu avu des rûjhes."
+
+#. Nope
+#: src/lyx_main.C:388
+msgid "You don't have a personal LyX directory."
+msgstr "Vos n' avoz pont di ridant da vosse po LyX."
+
+#: src/lyx_main.C:389
+msgid "It is needed to keep your own configuration."
+msgstr "Et il è fåt onk por vos rapontyî LyX a vosse môde."
+
+#: src/lyx_main.C:390
+msgid "Should I try to set it up for you (recommended)?"
+msgstr "Voloz-ve ki djel fwaixhe por vos (vos m' duvrîz leyî fé...)"
+
+#: src/lyx_main.C:391
+msgid "Running without personal LyX directory."
+msgstr "Dji waite d' ovrer sins ridant da vosse."
+
+#. Tell the user what is going on
+#: src/lyx_main.C:398
+msgid "LyX: Creating directory "
+msgstr "LyX: dji fwai li ridant "
+
+#: src/lyx_main.C:398
+msgid " and running configure..."
+msgstr " eyèt dj' enonde l' apontiaedje ..."
+
+#: src/lyx_main.C:404
+msgid "Failed. Will use "
+msgstr "Berwete. Dji m' sieve di "
+
+#: src/lyx_main.C:404
+msgid " instead."
+msgstr " el plaece."
+
+#: src/lyx_main.C:412
+msgid "Done!"
+msgstr "Dj' a fwait!"
+
+#: src/lyx_main.C:425
+msgid "LyX Warning!"
+msgstr "Advertixhmint di LyX!"
+
+#: src/lyx_main.C:426
+msgid "Error while reading "
+msgstr "Dj' a aroké come dji sayîve do lere "
+
+#: src/lyx_main.C:427
+msgid "Using built-in defaults."
+msgstr "Dji m' sieve des tchûzes prémetuwes."
+
+#: src/lyx_main.C:437
+msgid "Setting debug level to "
+msgstr "Livea di disbugaedje :"
+
+#: src/lyx_main.C:472
+msgid "LyX "
+msgstr "LyX "
+
+#: src/lyx_main.C:473
+msgid "Usage: lyx [ command line switches ] [ name.lyx ... ]\n"
+msgstr "Po vos è siervi: lyx [ tchûzes] [fitchî.lyx...]\n"
+
+#: src/lyx_main.C:474
+msgid "Command line switches (case sensitive):"
+msgstr "tchûzes (les ptitès letes ni sont nén les minmes ki les grandes!):"
+
+#: src/lyx_main.C:475
+msgid "   -help           summarize LyX usage"
+msgstr "   -help          aidance so les tchûzes pol roye di cmande"
+
+#: src/lyx_main.C:476
+msgid "   -sysdir x       try to set system directory to x"
+msgstr "   -sysdir x      po tchwezi x come ridant sistinme"
+
+#: src/lyx_main.C:477
+msgid "   -width x        set the width of the main window"
+msgstr "  -width x        po mete li lårdjeu del purnea"
+
+#: src/lyx_main.C:478
+msgid "   -height y       set the height of the main window"
+msgstr "   -height y      po mete li hôteu del purnea"
+
+#: src/lyx_main.C:479
+msgid "   -xpos x         set the x position of the main window"
+msgstr " -xpos x        po mete li plaece di coûtchî del purnea"
+
+#: src/lyx_main.C:480
+msgid "   -ypos y         set the y position of the main window"
+msgstr "   -ypos y          po mete li plaece d' astampé del purnea"
+
+#: src/lyx_main.C:481
+msgid ""
+"   -dbg n          where n is a sum of debugging options. Try -dbg 65535 "
+"-help"
+msgstr ""
+"   -dbg n          avou « n » come livea d' informåcion pol disbugaedje.     "
+"               Sayîz -dbg 65535 -help"
+
+#: src/lyx_main.C:482
+msgid "   -Reverse        swaps foreground & background colors"
+msgstr "   -Reverse        discandje les coleurs di drî eyèt di dvant"
+
+#: src/lyx_main.C:483
+msgid "   -Mono           runs LyX in black and white mode"
+msgstr "   -Mono           enonder LyX è noer èt blanc"
+
+#: src/lyx_main.C:484
+msgid "   -FastSelection  use a fast routine for drawing selections\n"
+msgstr "   -FastSelection  eploye on pus roed sorprograme pol håynaedje\n"
+
+#: src/lyx_main.C:485
+msgid "Check the LyX man page for more options."
+msgstr "Waitî el pådje man di LyX po vey co des ôtès tchûzes."
+
+#: src/lyx_main.C:509
+msgid "Missing number for -dbg switch!"
+msgstr "I manke on nombe pol tchûze -dbg!"
+
+#: src/lyx_main.C:523
+msgid "Missing directory for -sysdir switch!"
+msgstr "I manke on ridant pol tchûze -sysdir!"
+
+#: src/lyx_sendfax.C:21
+msgid "Fax no.:|#F"
+msgstr "Limerô di fax:|#F"
+
+#: src/lyx_sendfax.C:23
+msgid "Dest. Name:|#N"
+msgstr "Po:|#P"
+
+#: src/lyx_sendfax.C:25
+msgid "Enterprise:|#E"
+msgstr "Eterprîjhe:|#E"
+
+#: src/lyx_sendfax.C:45
+msgid "Phone Book"
+msgstr "Calpin di telefone"
+
+#: src/lyx_sendfax.C:49
+msgid "Select from|#S"
+msgstr "Tchwezi dins|#Z"
+
+#: src/lyx_sendfax.C:53
+msgid "Add to|#t"
+msgstr "Radjouter a|#R#t"
+
+#: src/lyx_sendfax.C:57
+msgid "Delete from|#D"
+msgstr "Waester foû di|#W"
+
+#: src/lyx_sendfax.C:61
+msgid "Save|#V"
+msgstr "Schaper|#S"
+
+#: src/lyx_sendfax.C:65
+msgid "Destination:"
+msgstr "Po:"
+
+#: src/lyx_sendfax.C:71
+msgid "Comment:"
+msgstr "Rawete:"
+
+#: src/lyx_sendfax_main.C:44
+msgid "Fax File: "
+msgstr "Fitchî fax:"
+
+#: src/lyx_sendfax_main.C:154 src/lyx_sendfax_main.C:201
+#: src/lyx_sendfax_main.C:240 src/lyx_sendfax_main.C:274
+msgid "Empty Phonebook"
+msgstr "Vosse calpin d' adresses est vûde"
+
+#: src/lyx_sendfax_main.C:213 src/lyx_sendfax_main.C:252
+msgid "Save (needed)"
+msgstr "Schaper(oblidjî)"
+
+#: src/lyx_sendfax_main.C:268
+msgid "Cannot open phone book: "
+msgstr "Dji n' sai drovi li calpin d' adresses: "
+
+#: src/lyx_sendfax_main.C:296
+msgid "NO OR EMPTY LOGFILE!"
+msgstr "I GN A NOU FITCHΠLOG OU BÉN IL EST VÛDE"
+
+#: src/lyx_sendfax_main.C:303
+msgid "Message-Window"
+msgstr "Purnea ås messaedjes"
+
+#: src/lyx_sendfax_main.C:334
+msgid "@L@b@cEmpty Phonebook"
+msgstr "@L@b@cLi calpin di telefone est vûde"
+
+#: src/lyx_sendfax_main.C:336
+msgid "Phonebook"
+msgstr "Calpin di telefone"
+
+#: src/lyxfont.C:44
+msgid "Roman"
+msgstr "Romane"
+
+#: src/lyxfont.C:44
+msgid "Sans serif"
+msgstr ""
+
+#: src/lyxfont.C:44
+msgid "Typewriter"
+msgstr "Machine a scrîre"
+
+#: src/lyxfont.C:44
+msgid "Symbol"
+msgstr "Simbole"
+
+#: src/lyxfont.C:44 src/lyxfont.C:48 src/lyxfont.C:51 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Inherit"
+msgstr "Eriter"
+
+#: src/lyxfont.C:45 src/lyxfont.C:48 src/lyxfont.C:52 src/lyxfont.C:57
+#: src/lyxfont.C:65 src/lyxfont.C:70
+msgid "Ignore"
+msgstr "Passer hute"
+
+#: src/lyxfont.C:48
+msgid "Medium"
+msgstr "Mwinres"
+
+#: src/lyxfont.C:48
+msgid "Bold"
+msgstr "Cråsses"
+
+#: src/lyxfont.C:51
+msgid "Upright"
+msgstr "Droetes"
+
+#: src/lyxfont.C:51
+msgid "Italic"
+msgstr "Clintcheyes(1)"
+
+#: src/lyxfont.C:51
+msgid "Slanted"
+msgstr "Clintcheyes(2)"
+
+#: src/lyxfont.C:51
+msgid "Smallcaps"
+msgstr "Pititès grandès letes"
+
+#: src/lyxfont.C:55
+msgid "Tiny"
+msgstr "Pitites(4)"
+
+#: src/lyxfont.C:55
+msgid "Smallest"
+msgstr "Pitites(3)"
+
+#: src/lyxfont.C:55
+msgid "Smaller"
+msgstr "Pitites(2)"
+
+#: src/lyxfont.C:55
+msgid "Small"
+msgstr "Pitites(1)"
+
+#: src/lyxfont.C:55
+msgid "Normal"
+msgstr "Miernuwes"
+
+#: src/lyxfont.C:55
+msgid "Large"
+msgstr "Grandes(1)"
+
+#: src/lyxfont.C:56
+msgid "Larger"
+msgstr "Grandes(2)"
+
+#: src/lyxfont.C:56
+msgid "Largest"
+msgstr "Grandes(3)"
+
+#: src/lyxfont.C:56
+msgid "Huge"
+msgstr "Grandes(4)"
+
+#: src/lyxfont.C:56
+msgid "Huger"
+msgstr "Grandes(5)"
+
+#: src/lyxfont.C:56
+msgid "Increase"
+msgstr "<- Did pus ->"
+
+#: src/lyxfont.C:56
+msgid "Decrease"
+msgstr "-> Moens <-"
+
+#: src/lyxfont.C:60
+msgid "tiny"
+msgstr "pitites(4)"
+
+#: src/lyxfont.C:60
+msgid "smallest"
+msgstr "pitites(3)"
+
+#: src/lyxfont.C:60
+msgid "smaller"
+msgstr "pitites(2)"
+
+#: src/lyxfont.C:60
+msgid "small"
+msgstr "pitites(1)"
+
+#: src/lyxfont.C:60
+msgid "normal"
+msgstr "normåles"
+
+#: src/lyxfont.C:60
+msgid "large"
+msgstr "grandes(1)"
+
+#: src/lyxfont.C:61
+msgid "larger"
+msgstr "grandes(2)"
+
+#: src/lyxfont.C:61
+msgid "largest"
+msgstr "grandes(3)"
+
+#: src/lyxfont.C:61
+msgid "huge"
+msgstr "grandes(4)"
+
+#: src/lyxfont.C:61
+msgid "huger"
+msgstr "grandes(5)"
+
+#: src/lyxfont.C:61
+msgid "increase"
+msgstr "<- did pus ->"
+
+#: src/lyxfont.C:61
+msgid "decrease"
+msgstr "-> moens <-"
+
+#: src/lyxfont.C:62
+msgid "inherit"
+msgstr "Eriter"
+
+#: src/lyxfont.C:62
+msgid "ignore"
+msgstr "passer hute"
+
+#: src/lyxfont.C:65
+msgid "Off"
+msgstr "Åwe"
+
+#: src/lyxfont.C:65
+msgid "On"
+msgstr "Evoye"
+
+#: src/lyxfont.C:65
+msgid "Toggle"
+msgstr "(Dis)mete"
+
+#: src/lyxfont.C:68
+msgid "None"
+msgstr "Pont"
+
+#: src/lyxfont.C:68
+msgid "Black"
+msgstr "Noer"
+
+#: src/lyxfont.C:68
+msgid "White"
+msgstr "Blanc"
+
+#: src/lyxfont.C:68
+msgid "Red"
+msgstr "Rodje"
+
+#: src/lyxfont.C:68
+msgid "Green"
+msgstr "Vert"
+
+#: src/lyxfont.C:68
+msgid "Blue"
+msgstr "Bleu"
+
+#: src/lyxfont.C:69
+msgid "Cyan"
+msgstr ""
+
+#: src/lyxfont.C:69
+msgid "Magenta"
+msgstr "Madjenta"
+
+#: src/lyxfont.C:70
+msgid "Yellow"
+msgstr "Djaene"
+
+#: src/lyxfont.C:70 src/menus.C:126 src/menus.C:225 src/menus.C:226
+#: src/menus.C:227
+msgid "Math"
+msgstr "Matematike"
+
+#: src/lyxfont.C:70
+msgid "Inset"
+msgstr "Sititchî"
+
+#: src/lyxfont.C:363
+msgid "Emphasis "
+msgstr "È valeur"
+
+#: src/lyxfont.C:365
+msgid "Underline "
+msgstr "Sorlignî"
+
+#: src/lyxfont.C:367
+msgid "Noun "
+msgstr "Pititès grandès letes"
+
+#: src/lyxfont.C:369
+msgid "Latex "
+msgstr "LaTeX "
+
+#: src/lyxfont.C:371
+msgid "Default"
+msgstr "Prémetu"
+
+#: src/lyxfunc.C:297
+msgid "Unknown sequence:"
+msgstr "Shûte nén cnoxhuwe:"
+
+#: src/lyxfunc.C:397 src/lyxfunc.C:2406
+msgid "Unknown action"
+msgstr "Bouye nén cnoxhuwe"
+
+#: src/lyxfunc.C:400
+msgid "Command not allowed without any document open"
+msgstr "Vos n' poloz nén enonder cisse comande sins documint di drovu"
+
+#: src/lyxfunc.C:460
+msgid "Document is read-only"
+msgstr "Vos n' poloz ki lere li documint"
+
+#: src/lyxfunc.C:502
+msgid "Text mode"
+msgstr "Môde di scrîjhaedje"
+
+#: src/lyxfunc.C:739
+msgid "Unknown export type: "
+msgstr "Sôrt d' ebagaedje nén cnoxhuwe"
+
+#: src/lyxfunc.C:763
+msgid "Unknown import type: "
+msgstr "Sôrt d' abagaedje nén cnoxhuwe"
+
+#: src/lyxfunc.C:1099
+msgid "Layout "
+msgstr "Adjinçmint "
+
+#: src/lyxfunc.C:1100
+msgid " not known"
+msgstr " nén cnoxhu"
+
+#: src/lyxfunc.C:1242
+msgid "No cross-reference to toggle"
+msgstr " Nou croejhlé rahuca a (dis)mete"
+
+#: src/lyxfunc.C:1595
+msgid "Mark removed"
+msgstr "Li rmårke est waesteye"
+
+#: src/lyxfunc.C:1600
+msgid "Mark set"
+msgstr "Li rmårke e-st apontieye"
+
+#: src/lyxfunc.C:1703
+msgid "Mark off"
+msgstr "Li rmårke est dismetuwe"
+
+#: src/lyxfunc.C:1713
+msgid "Mark on"
+msgstr "Li rmårke est metuwe"
+
+#: src/lyxfunc.C:2013
+msgid "Push-toolbar needs argument > 0"
+msgstr "Li scriftôr a mezåjhe di > 0 årgumints"
+
+#: src/lyxfunc.C:2031
+msgid "Usage: toolbar-add-to <LyX command>"
+msgstr "Po s' è siervi:  toolbar-add-to <comande di LyX>"
+
+#: src/lyxfunc.C:2103
+msgid "Missing argument"
+msgstr "I manke èn årgumint"
+
+#: src/lyxfunc.C:2126
+msgid "This is only allowed in math mode!"
+msgstr "Vos n' poloz fé çouci k' è môde matematike!"
+
+#: src/lyxfunc.C:2281
+msgid "Opening child document "
+msgstr "Dji drove li documint efant"
+
+#: src/lyxfunc.C:2314
+msgid "Unknown kind of footnote"
+msgstr "Dji n' conoxhe nén cisse sôrt di pînote la"
+
+#: src/lyxfunc.C:2366
+msgid "Document is read only"
+msgstr "Vos n' poloz ki lere ci documint ci"
+
+#: src/lyxfunc.C:2458
+msgid "Enter Filename for new document"
+msgstr "Tapez on no di fitchî pol novea documint"
+
+#: src/lyxfunc.C:2459
+msgid "newfile"
+msgstr "Novea fitchî"
+
+#: src/lyxfunc.C:2478 src/lyxfunc.C:2617 src/lyxfunc.C:2696
+msgid ""
+"Do you want to close that document now?\n"
+"('No' will just switch to the open version)"
+msgstr ""
+"Voloz-ve cloyu ci documint ci asteure ?\n"
+"('Neni' vos ramin'rè el session drovuwe)"
+
+#: src/lyxfunc.C:2501
+msgid "Do you want to open the document?"
+msgstr "Voloz-ve drovi li documint?"
+
+#. loads document
+#: src/lyxfunc.C:2503 src/lyxfunc.C:2566
+msgid "Opening document"
+msgstr "Dji drove li documint"
+
+#: src/lyxfunc.C:2510 src/lyxfunc.C:2573
+msgid "opened."
+msgstr "drovu."
+
+#: src/lyxfunc.C:2519
+msgid "Choose template"
+msgstr "Tchwezixhoz on modele"
+
+#: src/lyxfunc.C:2547 src/lyxfunc.C:2596 src/lyxfunc.C:2669 src/lyxfunc.C:2770
+msgid "Examples"
+msgstr "Egzimpes"
+
+#: src/lyxfunc.C:2549
+msgid "Select Document to Open"
+msgstr "Tchwezixhoz on documint po drovi"
+
+#: src/lyxfunc.C:2575
+msgid "Could not open document"
+msgstr "Dji n' sai drovi li documint"
+
+#: src/lyxfunc.C:2598
+msgid "Select ASCII file to Import"
+msgstr "Tchwezixhoz on fitchî ascii a abaguer"
+
+#: src/lyxfunc.C:2636 src/lyxfunc.C:2716
+msgid "A document by the name"
+msgstr "Èn ôte documint poite li minme no"
+
+#: src/lyxfunc.C:2638 src/lyxfunc.C:2718
+msgid "already exists. Overwrite?"
+msgstr "El voloz-ve sipotchî?"
+
+#: src/lyxfunc.C:2644
+msgid "Importing ASCII file"
+msgstr "Dj' abague li fitchî ascii..."
+
+#: src/lyxfunc.C:2648
+msgid "ASCII file "
+msgstr "Li fitchî ascii "
+
+#: src/lyxfunc.C:2650 src/lyxfunc.C:2741
+msgid "imported."
+msgstr "e-st abagué."
+
+#: src/lyxfunc.C:2673
+#, fuzzy
+msgid "Select Noweb file to Import"
+msgstr "Tchwezi on fitchî LaTeX po-z abaguer"
+
+#: src/lyxfunc.C:2676
+msgid "Select LaTeX file to Import"
+msgstr "Tchwezi on fitchî LaTeX po-z abaguer"
+
+#: src/lyxfunc.C:2726
+msgid "Importing LaTeX file"
+msgstr " Dj' abague li fitchî LaTeX..."
+
+#: src/lyxfunc.C:2731
+#, fuzzy
+msgid "Importing Noweb file"
+msgstr " Dj' abague li fitchî LaTeX..."
+
+#: src/lyxfunc.C:2739
+#, fuzzy
+msgid "Noweb file "
+msgstr "Li fitchî LaTeX "
+
+#: src/lyxfunc.C:2739
+msgid "LateX file "
+msgstr "Li fitchî LaTeX "
+
+#: src/lyxfunc.C:2744
+#, fuzzy
+msgid "Could not import Noweb file"
+msgstr "Dji n' sai drovi li fitchî LaTeX"
+
+#: src/lyxfunc.C:2745
+msgid "Could not import LaTeX file"
+msgstr "Dji n' sai drovi li fitchî LaTeX"
+
+#: src/lyxfunc.C:2772
+msgid "Select Document to Insert"
+msgstr "Tchwezixhoz on documint po stitchî"
+
+#. Inserts document
+#: src/lyxfunc.C:2790
+msgid "Inserting document"
+msgstr "Dji stitche li documint"
+
+#: src/lyxfunc.C:2796
+msgid "inserted."
+msgstr "stitchî."
+
+#: src/lyxfunc.C:2798
+msgid "Could not insert document"
+msgstr "Dji n' sai stitchî li documint"
+
+#. /
+#. virtual void setBuffer(Buffer const&) {;}
+#. / what appears in the minibuffer when opening
+#: src/lyxinset.h:94
+msgid "Opened inset"
+msgstr "inset drovu"
+
+#: src/lyxlib.h:45
+msgid "unknown"
+msgstr "nén cnoxhu"
+
+#: src/lyxvc.C:172 src/lyxvc.C:206
+msgid "Save document and proceed?"
+msgstr "Dji schape li documint èt tcheryî pus lon?"
+
+#: src/lyxvc.C:183
+msgid "LyX VC: Initial description"
+msgstr "LyX VC: discrîjhaedje po cmincî"
+
+#: src/lyxvc.C:184
+#, fuzzy
+msgid "(no initial description)"
+msgstr "LyX VC: discrîjhaedje po cmincî"
+
+#: src/lyxvc.C:187
+#, fuzzy
+msgid "Info"
+msgstr "Passer hute"
+
+#: src/lyxvc.C:187
+msgid "This document has NOT been registered."
+msgstr ""
+
+#: src/lyxvc.C:218
+msgid "LyX VC: Log Message"
+msgstr "LyX VC: messaedjes"
+
+#: src/lyxvc.C:232
+msgid "Ignore changes and proceed with check out?"
+msgstr "Passer les candjmints èt continuwer li 'check out'"
+
+#. Here we should check if the buffer is dirty. And if it is
+#. we should warn the user that reverting will discard all
+#. changes made since the last check in.
+#: src/lyxvc.C:249
+msgid "When you revert, you will loose all changes made"
+msgstr "Si vos rivnoz al modeye di dvant, vos alez piede tos les candjmints "
+
+#: src/lyxvc.C:250
+msgid "to the document since the last check in."
+msgstr "ki vos avoz fwait dispû li dierin 'check in'"
+
+#: src/lyxvc.C:251
+msgid "Do you still want to do it?"
+msgstr "Voloz-ve tot l' minme continuwer?"
+
+#: src/lyxvc.C:341
+msgid "No RCS History!"
+msgstr "Nole istwere po RCS"
+
+#: src/lyxvc.C:348
+msgid "RCS History"
+msgstr "Istwere di RCS"
+
+#: src/math_forms.C:19
+msgid "Close "
+msgstr "Cloyu "
+
+#: src/math_forms.C:22
+msgid "Functions"
+msgstr "Foncsions"
+
+#: src/math_forms.C:28
+msgid "Greek"
+msgstr "Grec"
+
+#: src/math_forms.C:32
+msgid "­ Û"
+msgstr "- Û"
+
+#: src/math_forms.C:36
+msgid "± ´"
+msgstr "± ´"
+
+#: src/math_forms.C:40
+msgid "£ @"
+msgstr "£ @"
+
+#: src/math_forms.C:44
+msgid "S  ò"
+msgstr "S  ò"
+
+#: src/math_forms.C:48
+msgid "Misc"
+msgstr "Totes sôrts"
+
+#: src/math_forms.C:129
+msgid "OK  "
+msgstr "I va  "
+
+#: src/math_forms.C:142
+msgid "Columns "
+msgstr "Colones"
+
+#: src/math_forms.C:149
+msgid "Vertical align|#V"
+msgstr "Aroymint d' astampé|#a"
+
+#: src/math_forms.C:154
+msgid "Horizontal align|#H"
+msgstr "Aroymint di coûtchî|#c"
+
+#: src/math_forms.C:197
+msgid "OK "
+msgstr "I va "
+
+#: src/math_forms.C:208
+msgid "Thin|#T"
+msgstr "Tene|#T"
+
+#: src/math_forms.C:212
+msgid "Medium|#M"
+msgstr "Mîtrin|#M"
+
+#: src/math_forms.C:216
+msgid "Thick|#H"
+msgstr "Spès|#S"
+
+#: src/math_forms.C:220
+msgid "Negative|#N"
+msgstr "Negatif|#N"
+
+#: src/math_forms.C:224
+msgid "Quadratin|#Q"
+msgstr "Cadratin||#C"
+
+#: src/math_forms.C:228
+msgid "2Quadratin|#2"
+msgstr "Cadratin(2)|#2"
+
+#: src/math_panel.C:103
+msgid "Delimiter"
+msgstr "Côpeu"
+
+#: src/math_panel.C:107
+msgid "Decoration"
+msgstr "Gåliotaedje"
+
+#: src/math_panel.C:111
+msgid "Spacing"
+msgstr "Espåçmint"
+
+#: src/math_panel.C:115
+msgid "Matrix"
+msgstr "Matrice"
+
+#: src/math_panel.C:300
+msgid "Top | Center | Bottom"
+msgstr "Dizeu | Mitan | Dizo"
+
+#: src/math_panel.C:350
+msgid "Math Panel"
+msgstr "Scriftôr matematike"
+
+#: src/menus.C:122 src/menus.C:132 src/menus.C:169 src/menus.C:170
+#: src/menus.C:171 src/menus.C:300 src/menus.C:301 src/menus.C:302
+msgid "File"
+msgstr "Fitchî"
+
+#: src/menus.C:123 src/menus.C:183 src/menus.C:184 src/menus.C:185
+msgid "Edit"
+msgstr "Candjî"
+
+#: src/menus.C:124 src/menus.C:197 src/menus.C:198 src/menus.C:199
+msgid "Layout"
+msgstr "Adjinçmint"
+
+#: src/menus.C:125 src/menus.C:211 src/menus.C:212 src/menus.C:213
+msgid "Insert"
+msgstr "Sititchî"
+
+#: src/menus.C:129 src/menus.C:134 src/menus.C:267 src/menus.C:268
+#: src/menus.C:269 src/menus.C:328 src/menus.C:329 src/menus.C:330
+msgid "Help"
+msgstr "Aidance"
+
+#: src/menus.C:173 src/menus.C:304
+msgid "MB|#F"
+msgstr "MB|#F"
+
+#: src/menus.C:187
+msgid "MB|#E"
+msgstr "MB|#C"
+
+#: src/menus.C:201
+msgid "MB|#L"
+msgstr "MB|#j"
+
+#: src/menus.C:215
+msgid "MB|#I"
+msgstr "MB|#I"
+
+#: src/menus.C:229
+msgid "MB|#M"
+msgstr "MB|#M"
+
+#: src/menus.C:243 src/menus.C:318
+msgid "MB|#O"
+msgstr "MB|#T"
+
+#: src/menus.C:257
+msgid "MB|#D"
+msgstr "MB|#D"
+
+#: src/menus.C:271 src/menus.C:332
+msgid "MB|#H"
+msgstr "MB|#A"
+
+#: src/menus.C:372
+msgid "Screen Options"
+msgstr "Tchûzes pol waitroûle"
+
+#: src/menus.C:408
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x30|Ascii Text as Lines...%x31|Ascii Text as "
+"Paragraphs%x32|Noweb%x33"
+msgstr ""
+"Abaguer%t|LaTeX...%x30|Fitchî ascii è royes...%x31|Fitchî ascii è Hagnons%x32"
+
+#: src/menus.C:413 src/menus.C:643
+msgid "FIM|Ll#l#L"
+msgstr "FIM|Ll#l#L"
+
+#: src/menus.C:414 src/menus.C:644
+msgid "FIM|Aa#a#A"
+msgstr "FIM|Aa#a#A"
+
+#: src/menus.C:415 src/menus.C:645
+msgid "FIM|Pp#p#P"
+msgstr "FIM|Hh#h#H"
+
+#: src/menus.C:416 src/menus.C:646
+#, fuzzy
+msgid "FIM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:425
+msgid ""
+"Export%t|as LaTeX...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43|Custom...%x44"
+msgstr ""
+"Ebaguer%t|è LaTeX...%x40|è DVI...%x41|è PostScript...%x42|èn ascii ...%x43|A "
+"vosse môde...%x44"
+
+#: src/menus.C:433
+msgid ""
+"Export%t|as LinuxDoc...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Ebaguer%t|è LinuxDoc...%x40|è DVI...%x41|è PostScript...%x42|èn Ascii...%x43"
+
+#: src/menus.C:440
+#, fuzzy
+msgid ""
+"Export%t|as DocBook...%x40|as DVI...%x41|as PostScript...%x42|as Ascii "
+"Text...%x43"
+msgstr ""
+"Ebaguer%t|è LinuxDoc...%x40|è DVI...%x41|è PostScript...%x42|èn Ascii...%x43"
+
+#: src/menus.C:446
+msgid "FEX|Ll#l#L"
+msgstr "FEX|Ll#l#L"
+
+#: src/menus.C:447
+msgid "FEX|Dd#d#D"
+msgstr "FEX|Dd#d#D"
+
+#: src/menus.C:448
+msgid "FEX|Pp#p#P"
+msgstr "FEX|Pp#p#P"
+
+#: src/menus.C:449
+msgid "FEX|Tt#t#T"
+msgstr "FEX|Aa#a#A"
+
+#: src/menus.C:450
+msgid "FEX|mM#m#M"
+msgstr "FEX|mM#m#M"
+
+#: src/menus.C:453
+#, fuzzy
+msgid ""
+"New...|New from template...|Open...%l|Close|Save|Save As...|Revert to "
+"saved%l|View dvi|View PostScript|Update dvi|Update PostScript|Build "
+"program%l|Print...|Fax..."
+msgstr ""
+"Novea...|Novea a pårti d' on modele...|Drovi...%l|Cloyu|Schaper|Schaper èt "
+"rlomer...|Ritcherdjî %l|Waitî è DVI|Waitî è PostScript|Mete a djoû DVI|Mete "
+"a djoû PostScript%l|Rexhe...|Faxer..."
+
+#: src/menus.C:468 src/menus.C:662
+msgid "FM|Nn#n#N"
+msgstr "FM|Nn#n#N"
+
+#: src/menus.C:469 src/menus.C:663
+msgid "FM|tT#t#T"
+msgstr "FM|mM#m#M"
+
+#: src/menus.C:470 src/menus.C:664
+msgid "FM|Oo#o#O"
+msgstr "FM|Dd#d#D"
+
+#: src/menus.C:471
+msgid "FM|Cc#c#C"
+msgstr "FM|Cc#c#C"
+
+#: src/menus.C:472
+msgid "FM|Ss#s#S"
+msgstr "FM|Ss#s#S"
+
+#: src/menus.C:473
+msgid "FM|Aa#a#A"
+msgstr "FM|lL#l#L"
+
+#: src/menus.C:474
+msgid "FM|Rr#r#R"
+msgstr "FM|Rr#r#R"
+
+#: src/menus.C:475
+msgid "FM|dD#d#D"
+msgstr "FM|Vv#v#V"
+
+#: src/menus.C:476
+msgid "FM|wW#w#W"
+msgstr "FM|Pp#p#P"
+
+#: src/menus.C:477
+msgid "FM|vV#v#V"
+msgstr "FM|Ii#i#I"
+
+#: src/menus.C:478
+msgid "FM|Uu#u#U"
+msgstr "FM|ûÛ#u#U"
+
+#: src/menus.C:479
+#, fuzzy
+msgid "FM|Bb#b#B"
+msgstr "LM|rR#r#R"
+
+#: src/menus.C:480
+msgid "FM|Pp#p#P"
+msgstr "FM|hH#h#H"
+
+#: src/menus.C:481
+msgid "FM|Ff#f#F"
+msgstr "FM|xX#x#X"
+
+#: src/menus.C:521
+#, no-c-format
+msgid "|Import%m"
+msgstr "|Abaguer%m"
+
+#: src/menus.C:523
+#, no-c-format
+msgid "|Export%m%l"
+msgstr "|Ebaguer%m%l"
+
+#: src/menus.C:525
+#, no-c-format
+msgid "|Exit%l"
+msgstr "|Moussî foû%l"
+
+#: src/menus.C:526 src/menus.C:665
+msgid "FM|Ii#i#I"
+msgstr "FM|Aa#a#A"
+
+#: src/menus.C:527
+msgid "FM|Ee#e#E"
+msgstr "FM|Ee#e#E"
+
+#: src/menus.C:528 src/menus.C:666
+msgid "FM|xX#x#X"
+msgstr "FM|fF#f#F"
+
+#: src/menus.C:638
+#, fuzzy
+msgid ""
+"Import%t|LaTeX...%x15|Ascii Text as Lines...%x16|Ascii Text as "
+"Paragraphs...%x17|Noweb...%x18"
+msgstr ""
+"Abaguer%t|LaTeX...%x15|Texe ascii è royes...%x16|Texe ascii è hagnons..%x17"
+
+#: src/menus.C:657
+msgid "New...|New from template...|Open...%l|Import%m%l|Exit%l"
+msgstr ""
+"Novea...|Novea a pårti d' on modele...|Drovi...%l|Abaguer%m%l|Moussî foû%l"
+
+#: src/menus.C:747
+msgid ""
+"Floats & Insets%t|Open/Close%x21|Melt%x22|Open All Footnotes/Margin "
+"Notes%x23|Close All Footnotes/Margin Notes%x24|Open All "
+"Figures/Tables%x25|Close All Figures/Tables%x26%l|Remove all Error Boxes%x27"
+msgstr ""
+"Flotants & Insets%t|Drovi/Cloyu%x21|Maxhî%x22|Drovi totes les "
+"rawetes%x23|Cloyu totes les rawetes%x24|Drovi totes les imådjes/tos les "
+"tåvleas%x25|Cloyu totes les imådjes/tos les tåvleas%x26%l|Netyî les måcules "
+"evoye%x27"
+
+#: src/menus.C:756
+msgid "EMF|Oo#o#O"
+msgstr "EMF|Dd#d#D"
+
+#: src/menus.C:757
+msgid "EMF|Mm#m#M"
+msgstr "EMF|Mm#m#M"
+
+#: src/menus.C:758
+msgid "EMF|Aa#a#A"
+msgstr "EMF|Rr#r#R"
+
+#: src/menus.C:759
+msgid "EMF|Cc#c#C"
+msgstr "EMF|Cc#c#C"
+
+#: src/menus.C:760
+msgid "EMF|Ff#f#F"
+msgstr "EMF|Ii#i#I"
+
+#: src/menus.C:761
+msgid "EMF|Tt#t#T"
+msgstr "EMF|Tt#t#T"
+
+#: src/menus.C:762
+msgid "EMF|Rr#r#R"
+msgstr "EMF|Nn#n#N"
+
+#: src/menus.C:770 src/menus.C:868
+msgid "Table%t"
+msgstr "Tåvlea%t"
+
+#: src/menus.C:778
+msgid "|Multicolumn%B%x44%l"
+msgstr "|Multicolone%B%x44%l"
+
+#: src/menus.C:780
+msgid "|Multicolumn%b%x44%l"
+msgstr "|Multicolone%b%x44%l"
+
+#: src/menus.C:781
+msgid "EMT|Mm#m#M"
+msgstr "EMT|Mm#m#M"
+
+#: src/menus.C:789
+msgid "|Line Top%B%x36"
+msgstr "|Roye å dzeu%B%x36"
+
+#: src/menus.C:791
+msgid "|Line Top%b%x36"
+msgstr "|Roye å dzeu%b%x36"
+
+#: src/menus.C:792
+msgid "EMT|Tt#t#T"
+msgstr "EMT|Uu#u#U"
+
+#: src/menus.C:800
+msgid "|Line Bottom%B%x37"
+msgstr "|Roye å dzo%B%x37"
+
+#: src/menus.C:802
+msgid "|Line Bottom%b%x37"
+msgstr "|Roye å dzo%b%x37"
+
+#: src/menus.C:803
+msgid "EMT|Bb#b#B"
+msgstr "EMT|Oo#o#O"
+
+#: src/menus.C:811
+msgid "|Line Left%B%x38"
+msgstr "|Roye a hintche%B%x38"
+
+#: src/menus.C:813
+msgid "|Line Left%b%x38"
+msgstr "|Roye a hintche%b%x38"
+
+#: src/menus.C:814
+msgid "EMT|Ll#l#L"
+msgstr "EMT|Hh#h#H"
+
+#: src/menus.C:822
+msgid "|Line Right%B%x39%l"
+msgstr "|Roye a droete%B%x39%l"
+
+#: src/menus.C:824
+msgid "|Line Right%b%x39%l"
+msgstr "|Roye a droete%b%x39%l"
+
+#: src/menus.C:825
+msgid "EMT|Rr#r#R"
+msgstr "EMT|Dd#d#D"
+
+#: src/menus.C:834
+msgid "|Align Left%R%x40"
+msgstr "|Aroyî a hintche%R%x40"
+
+#: src/menus.C:836
+msgid "|Align Left%r%x40"
+msgstr "|Aroyî a hintche%r%x40"
+
+#: src/menus.C:837
+msgid "EMT|eE#e#E"
+msgstr "EMT|iI#i#I"
+
+#: src/menus.C:840
+msgid "|Align Right%R%x41"
+msgstr "|Aroyî a droete%R%x41"
+
+#: src/menus.C:842
+msgid "|Align Right%r%x41"
+msgstr "|Aroyî a droete%r%x41"
+
+#: src/menus.C:843
+msgid "EMT|iI#i#I"
+msgstr "EMT|rR#r#R"
+
+#: src/menus.C:846
+msgid "|Align Center%R%x42%l"
+msgstr "|Aroyî å mitan%R%x42%l"
+
+#: src/menus.C:848
+msgid "|Align Center%r%x42%l"
+msgstr "|Aroyî å mitan%r%x42%l"
+
+#: src/menus.C:849
+msgid "EMT|Cc#c#C"
+msgstr "EMT|Tt#t#T"
+
+#: src/menus.C:852
+#, no-c-format
+msgid "|Append Row%x32"
+msgstr "|Radjouter on rang%x32"
+
+#: src/menus.C:853
+msgid "EMT|oO#o#O"
+msgstr "EMT|nN#n#N"
+
+#: src/menus.C:855
+#, no-c-format
+msgid "|Append Column%x33%l"
+msgstr "|Radjouter ene colone%x33%l"
+
+#: src/menus.C:856
+msgid "EMT|uU#u#U"
+msgstr "EMT|lL#l#L"
+
+#: src/menus.C:858
+#, no-c-format
+msgid "|Delete Row%x34"
+msgstr "|Disfacer on rang%x34"
+
+#: src/menus.C:859
+msgid "EMT|wW#w#W"
+msgstr "EMT|gG#g#G"
+
+#: src/menus.C:861
+#, no-c-format
+msgid "|Delete Column%x35%l"
+msgstr "|Disfacer ene colone%x35%l"
+
+#: src/menus.C:862
+msgid "EMT|nN#n#N"
+msgstr "EMT|cC#c#C"
+
+#: src/menus.C:864
+#, no-c-format
+msgid "|Delete Table%x43"
+msgstr "|Disfacer li tåvlea%x43"
+
+#: src/menus.C:865
+msgid "EMT|Dd#d#D"
+msgstr "EMT|vV#v#V"
+
+#: src/menus.C:870
+#, no-c-format
+msgid "|Insert table%x31"
+msgstr "|Sititchî on tåvlea%x31"
+
+#: src/menus.C:871
+msgid "EMT|Ii#i#I"
+msgstr "EMT|åÅ#a#A"
+
+#: src/menus.C:875
+msgid "Version Control%t"
+msgstr "Shûre li modeye%t"
+
+#: src/menus.C:878
+#, no-c-format
+msgid "|Register%d%x51"
+msgstr "|Schaper%d%x51"
+
+#. signifies that the file is not checked out
+#: src/menus.C:882
+#, no-c-format
+msgid "|Check In Changes%d%x52"
+msgstr "|Waitî les candjmints%d%x52"
+
+#: src/menus.C:884
+#, no-c-format
+msgid "|Check Out for Edit%x53"
+msgstr "|(Check Out) po-z aspougnî%x53"
+
+#. signifies that the file is checked out
+#: src/menus.C:888
+#, no-c-format
+msgid "|Check In Changes%x52"
+msgstr "|Waitîz dins les candjmints%x52"
+
+#: src/menus.C:890
+#, no-c-format
+msgid "|Check Out for Edit%d%x53"
+msgstr "|(Check Out) po-z aspougnî%d%x53"
+
+#: src/menus.C:893
+#, no-c-format
+msgid "|Revert to last version%x54"
+msgstr "|Rivni al modeye di dvant%x54"
+
+#: src/menus.C:895
+#, no-c-format
+msgid "|Undo last check in%x55"
+msgstr "|Distrûre%x55"
+
+#: src/menus.C:897
+#, no-c-format
+msgid "|Show History%x56"
+msgstr "|Mostrer l' istwere%x56"
+
+#: src/menus.C:900
+#, no-c-format
+msgid "|Register%x51"
+msgstr "|Schaper%x51"
+
+#. the shortcuts are not good.
+#: src/menus.C:903
+msgid "EMV|Rr#r#R"
+msgstr "EMV|Ss#s#S"
+
+#: src/menus.C:904
+msgid "EMV|Ii#i#I"
+msgstr "EMV|cC#c#C"
+
+#: src/menus.C:905
+msgid "EMV|Oo#o#O"
+msgstr "EMV|aA#a#A"
+
+#: src/menus.C:906
+msgid "EMV|lL#l#l"
+msgstr "EMV|vV#v#V"
+
+#: src/menus.C:907
+msgid "EMV|Uu#u#U"
+msgstr "EMV|Dd#d#D"
+
+#: src/menus.C:908
+msgid "EMV|Hh#h#H"
+msgstr "EMV#iI#i#I"
+
+#: src/menus.C:911
+msgid ""
+"Undo|Redo %l|Cut|Copy|Paste%l|Find & Replace...|Go to Error|Go to "
+"Note|Floats & Insets%m|Table%m|Spellchecker....|Check TeX|Table of "
+"Contents...%l|Version Control%m%l|View LaTeX log file%l|Paste Primary "
+"Selection as Lines|Paste Primary Selection as Paragraphs"
+msgstr ""
+"Disfé|Rifé %l|Côper|Copyî|Aclaper%l|Cweri & mete el plaece...|Potchî al "
+"måcule|Potchî al note|Flotants & Insets%m|Tåvlea%m|Coridjeu d' "
+"ôrtografeye...|Waitî l' emantchaedje des fråzes "
+"TeX|Ådvins...%l|Modeye%m%l|Waitîz les messaedjes LaTeX%l|Copyî li tchûze è "
+"royes|Copyî li tchûze è hagnon"
+
+#: src/menus.C:930
+msgid "EM|Uu#u#U"
+msgstr "EM|Dd#d#D"
+
+#: src/menus.C:931
+msgid "EM|Rr#r#R"
+msgstr "EM|Rr#r#R"
+
+#: src/menus.C:932
+msgid "EM|Cc#c#C"
+msgstr "EM|Cc#c#C"
+
+#: src/menus.C:933
+msgid "EM|oO#o#O"
+msgstr "EM|pP#p#P"
+
+#: src/menus.C:934
+msgid "EM|Pp#p#P"
+msgstr "EM|lL#l#L"
+
+#: src/menus.C:935
+msgid "EM|Ff#f#F"
+msgstr "EM|wW#w#W"
+
+#: src/menus.C:936
+msgid "EM|Ee#e#E"
+msgstr "EM|åÅ#a#A"
+
+#: src/menus.C:937
+msgid "EM|Nn#n#N"
+msgstr "EM|nN#n#N"
+
+#: src/menus.C:938
+msgid "EM|Ii#i#I"
+msgstr "EM|Ii#i#I"
+
+#: src/menus.C:939
+msgid "EM|Tt#t#T"
+msgstr "EM|Tt#t#T"
+
+#: src/menus.C:940
+msgid "EM|Ss#s#S"
+msgstr "EM|ôÔ#o#O"
+
+#: src/menus.C:941
+msgid "EM|hH#h#H"
+msgstr "EM|fF#f#F"
+
+#: src/menus.C:942
+msgid "EM|aA#a#A"
+msgstr "EM|dD#d#D"
+
+#: src/menus.C:943
+msgid "EM|Vv#v#V"
+msgstr "EM|Mm#m#M"
+
+#: src/menus.C:944
+msgid "EM|wW#w#W"
+msgstr "EM|Xx#X#x"
+
+#: src/menus.C:945
+msgid "EM|Ll#l#L"
+msgstr "EM|zZ#z#Z"
+
+#: src/menus.C:946
+msgid "EM|gG#g#G"
+msgstr "EM|hH#h#H"
+
+#: src/menus.C:1071
+msgid ""
+"Character...|Paragraph...|Document...|Paper...|Table...|Quotes...%l|Emphasize"
+" Style%b|Noun Style%b|Bold Style%b|TeX Style%b|Change Environment "
+"Depth|LaTeX Preamble...%l|Save layout as default"
+msgstr ""
+"Caractere...|Hagnon...|Documint...|Papî...|Tåvlea...|Distis....%l|È "
+"valeur%b|Grande lete%b|Crås%b|TeX%b|Parfondeu|Adrovaedje LaTeX...%l|Schaper "
+"modele prémetu"
+
+#: src/menus.C:1084
+msgid "LM|Cc#c#C"
+msgstr "LM|Cc#c#C"
+
+#: src/menus.C:1085
+msgid "LM|Pp#p#P"
+msgstr "LM|Hh#H#h"
+
+#: src/menus.C:1086
+msgid "LM|Dd#d#D"
+msgstr "LM|Dd#d#D"
+
+#: src/menus.C:1087
+msgid "LM|aA#a#A"
+msgstr "LM|Pp#P#p"
+
+#: src/menus.C:1088
+msgid "LM|eE#e#E"
+msgstr "LM|Tt#t#T"
+
+#: src/menus.C:1089
+msgid "LM|Qq#q#Q"
+msgstr "LM|iI#i#I"
+
+#: src/menus.C:1090
+msgid "LM|mM#m#M"
+msgstr "LM|vV#v#V"
+
+#: src/menus.C:1091
+msgid "LM|Nn#n#N"
+msgstr "LM|Gg#g#G"
+
+#: src/menus.C:1092
+msgid "LM|Bb#b#B"
+msgstr "LM|rR#r#R"
+
+#: src/menus.C:1093
+msgid "LM|Tt#t#T"
+msgstr "LM|Xx#x#X"
+
+#: src/menus.C:1094
+msgid "LM|vV#v#V"
+msgstr "LM|fF#f#F"
+
+#: src/menus.C:1095
+msgid "LM|Ll#l#L"
+msgstr "LM|Aa#a#A"
+
+#: src/menus.C:1096
+msgid "LM|Ss#s#S"
+msgstr "LM|Ss#s#S"
+
+#: src/menus.C:1166
+msgid "Import ASCII file%t|As Lines%x41|As Paragraphs%x42"
+msgstr "Abaguer li fitchî ascii%t|È royes%x41|È hagnons%x42"
+
+#: src/menus.C:1169
+msgid "IMA|Ll#l#L"
+msgstr "IMA|rR#r#R"
+
+#: src/menus.C:1170
+msgid "IMA|Pp#p#P"
+msgstr "IMA|hH#h#H"
+
+#: src/menus.C:1173
+msgid ""
+"Lists & TOC%t|Table of Contents%x21|List of Figures%x22|List of "
+"Tables%x23|List of Algorithms%x24|Index List%x25|BibTeX Reference%x26"
+msgstr ""
+"Djîveyes & ådvins%t|Ådvins%x21|Djîveye des imådjes%x22|Djîveye des "
+"tåvleas%x23|Djîveyes des algoritmes%x24|Index%x25|Rahucas BibTeX%x26"
+
+#: src/menus.C:1180
+msgid "IMT|Cc#c#C"
+msgstr "IMT|dD#d#D"
+
+#: src/menus.C:1181
+msgid "IMT|Ff#f#F"
+msgstr "IMT|iI#i#I"
+
+#: src/menus.C:1182
+msgid "IMT|Tt#t#T"
+msgstr "IMT|tT#t#T"
+
+#: src/menus.C:1183
+msgid "IMT|Aa#a#A"
+msgstr "IMT|aA#a#A"
+
+#: src/menus.C:1184
+msgid "IMT|Ii#i#I"
+msgstr "IMT|xX#x#X"
+
+#: src/menus.C:1185
+msgid "IMT|Bb#b#B"
+msgstr "IMT|Bb#b#B"
+
+#: src/menus.C:1197
+msgid ""
+"Floats%t|Figure Float%x71|Table Float%x72|Wide Figure Float%x73|Wide Table "
+"Float%l%x74|Algorithm Float%x75"
+msgstr ""
+"Flotants%t|Flotante imådje%x71|Flotant tåvleax72|Grande flotante "
+"imådje%x73|Grand flotant tåvlea%l%x74|Flotant algoritme%x75"
+
+#. }
+#: src/menus.C:1204
+#, fuzzy
+msgid "IMF|gG#g#G"
+msgstr "IM|Ii#i#I"
+
+#: src/menus.C:1205
+msgid "IMF|Tt#t#T"
+msgstr "IMF|tT#t#T"
+
+#: src/menus.C:1206
+msgid "IMF|Ww#w#W"
+msgstr "IMF|Gg#g#G"
+
+#: src/menus.C:1207
+msgid "IMF|iI#i#I"
+msgstr "IMF|rR#r#R"
+
+#: src/menus.C:1208
+msgid "IMF|Aa#a#A"
+msgstr "IMF|aA#a#A"
+
+#: src/menus.C:1211
+#, fuzzy
+msgid ""
+"Special Character%t|HFill%x31|Hyphenation Point%x32|Protected "
+"Blank%x33|Linebreak%x34|Ellipsis (...)%x35|End of sentence "
+"period%x36|Ordinary Quote (\")%x37|Menu Separator %x38"
+msgstr ""
+"Caractere especiål%t|Rissôrt di coûtchî%x31|Pont di côpaedje di "
+"mot%x32|Blanc nén côpåve%x33|Novele roye%x34|Troes ptis ponts (...)%x35|Pont "
+"di dfén%x36|Distis (\")%x37"
+
+#: src/menus.C:1221
+msgid "IMS|Hh#h#H"
+msgstr "IMS|cC#c#C"
+
+#: src/menus.C:1222
+msgid "IMS|Pp#p#P"
+msgstr "IMS|mM#m#M"
+
+#: src/menus.C:1223
+msgid "IMS|Bb#b#B"
+msgstr "IMS|Bb#b#B"
+
+#: src/menus.C:1224
+msgid "IMS|Ll#l#L"
+msgstr "IMS|rR#r#R"
+
+#: src/menus.C:1225
+msgid "IMS|iI#i#I"
+msgstr "IMS|Tt#t#T"
+
+#: src/menus.C:1226
+msgid "IMS|Ee#e#E"
+msgstr "IMS|fF#f#F"
+
+#: src/menus.C:1227
+msgid "IMS|Qq#q#Q"
+msgstr "IMS|Dd#d#D"
+
+#: src/menus.C:1228
+#, fuzzy
+msgid "IMS|Mm#m#M"
+msgstr "IM|Nn#N#n"
+
+#: src/menus.C:1231
+msgid ""
+"Figure...|Table...%l|Include File...|Import ASCII File%m|Insert LyX "
+"File...%l|Footnote|Margin Note|Floats%m%l|Lists & TOC%m%l|Special "
+"Character%m%l|Note...|Label...|Cross-Reference...|Citation "
+"Reference...|Index entry...|Index entry of last word"
+msgstr ""
+"Imådje...|Tåvlea...%l|Stitchî on fitchî...|Abaguer on fitchî ascii%m|Stitchî "
+"on fitchî LyX...%l|Pînote|Note di costé|Flotant%m%l|Djîveyes & "
+"ådvins%m%l|Caractere especiå%m%l|Rawete...|Etikete...|Croejhlé "
+"rahuca...|Rahukî ene sapinse...|Intreye pol index...|Intreye pol do dierin "
+"mot"
+
+#: src/menus.C:1252
+msgid "IM|gG#g#G"
+msgstr "IM|Ii#i#I"
+
+#: src/menus.C:1253
+msgid "IM|bB#b#B"
+msgstr "IM|Tt#T#t"
+
+#: src/menus.C:1254
+msgid "IM|cC#c#C"
+msgstr "IM|fF#f#F"
+
+#: src/menus.C:1255
+msgid "IM|Aa#a#A"
+msgstr "IM|Aa#a#A"
+
+#: src/menus.C:1256
+msgid "IM|Xx#x#X"
+msgstr "IM|yY#y#Y"
+
+#: src/menus.C:1257
+msgid "IM|Ff#f#F"
+msgstr "IM|Pp#P#p"
+
+#: src/menus.C:1258
+msgid "IM|Mm#m#M"
+msgstr "IM|Nn#N#n"
+
+#: src/menus.C:1259
+msgid "IM|oO#o#O"
+msgstr "IM|lL#l#L"
+
+#: src/menus.C:1260
+msgid "IM|Tt#t#T"
+msgstr "IM|jJ#j#J"
+
+#: src/menus.C:1261
+msgid "IM|Ss#s#S"
+msgstr "IM|sS#s#S"
+
+#: src/menus.C:1262
+msgid "IM|Nn#n#N"
+msgstr "IM|wW#w#W"
+
+#: src/menus.C:1263
+msgid "IM|Ll#l#L"
+msgstr "IM|Ee#E#e"
+
+#: src/menus.C:1264
+msgid "IM|rR#r#R"
+msgstr "IM|Cc#c#C"
+
+#: src/menus.C:1265
+msgid "IM|iI#i#I"
+msgstr "IM|Rr#R#r"
+
+#: src/menus.C:1266
+msgid "IM|dD#d#D"
+msgstr "IM|xX#x#X"
+
+#: src/menus.C:1267
+msgid "IM|wW#w#W"
+msgstr "IM|dD#d#D"
+
+#: src/menus.C:1273
+msgid "|URL..."
+msgstr "|Hårdeye URL..."
+
+#: src/menus.C:1274
+msgid "IM|Uu#u#U"
+msgstr "IM|Uu#u#U"
+
+#: src/menus.C:1388
+msgid ""
+"Fraction|Square root|Exponent|Index|Sum|Integral%l|Math mode|Display%l|Math "
+"Panel..."
+msgstr ""
+"Pårtixha|Cwåreye Raecene|Poûxhance|Index|Some|Integråle%l|Môde "
+"matematike|Plaece%l|Flotant menu..."
+
+#: src/menus.C:1398
+msgid "MM|Ff#f#F"
+msgstr "MM|Pp#p#P"
+
+#: src/menus.C:1399
+msgid "MM|Ss#s#S"
+msgstr "MM|Rr#R#r"
+
+#: src/menus.C:1400
+msgid "MM|Ee#e#E"
+msgstr "MM|hH#h#H"
+
+#: src/menus.C:1401
+msgid "MM|xX#x#X"
+msgstr "MM|xX#x#X"
+
+#: src/menus.C:1402
+msgid "MM|uU#u#U"
+msgstr "MM|Ss#S#s"
+
+#: src/menus.C:1403
+msgid "MM|Ii#i#I"
+msgstr "MM|Ii#i#I"
+
+#: src/menus.C:1404
+msgid "MM|Mm#m#M"
+msgstr "MM|Mm#m#M"
+
+#: src/menus.C:1405
+msgid "MM|Dd#d#D"
+msgstr "MM|Pp#P#p"
+
+#: src/menus.C:1406
+msgid "MM|Pp#p#P"
+msgstr "MM|Ff#f#F"
+
+#: src/menus.C:1472
+msgid ""
+"Screen Fonts...|Spellchecker Options...|Keyboard...|LaTeX...%l|Reconfigure"
+msgstr ""
+"Fontes pol waitroûle...|Tchûzes pol coridjeu di "
+"scrîjhaedje...|Taprece...|LaTeX...%l|Rapontyî"
+
+#: src/menus.C:1478
+msgid "OM|Ff#f#F"
+msgstr "OM|Ff#f#F"
+
+#: src/menus.C:1479
+msgid "OM|Ss#s#S"
+msgstr "OM|sS#s#S"
+
+#: src/menus.C:1480
+msgid "OM|Kk#k#K"
+msgstr "OM|Tt#T#t"
+
+#: src/menus.C:1481
+msgid "OM|Ll#l#L"
+msgstr "OM|Ll#l#L"
+
+#: src/menus.C:1482
+msgid "OM|Rr#r#R"
+msgstr "OM|Rr#r#R"
+
+#: src/menus.C:1551
+msgid ""
+"Introduction|Tutorial|User's Guide|Extended Features|Customization|Reference "
+"Manual|Known Bugs|LaTeX Configuration%l|Copyright and "
+"Warranty...|Credits...|Version..."
+msgstr ""
+"Adrovaedje|Po les apurdisses|Po les ûzeus|Tchûzes po les spepieus|Rapontyî a "
+"vosse môde|Lîve|Bugsconoxhus|Apontiaedje di LaTeX%l|Copyright èt "
+"waranteye...|Gråces...|Modeye..."
+
+#: src/menus.C:1563
+msgid "HM|Ii#I#i"
+msgstr "HM|Aa#A#a"
+
+#: src/menus.C:1564
+msgid "HM|Tt#T#t"
+msgstr "HM|pP#p#P"
+
+#: src/menus.C:1565
+msgid "HM|Uu#U#u"
+msgstr "HM|ûÛ#u#U"
+
+#: src/menus.C:1566
+#, fuzzy
+msgid "HM|xX#x#X"
+msgstr "FM|fF#f#F"
+
+#: src/menus.C:1567
+msgid "HM|Cc#C#c"
+msgstr "HM|Rr#R#r"
+
+#: src/menus.C:1568
+msgid "HM|Rr#R#r"
+msgstr "HM|Ll#L#l"
+
+#: src/menus.C:1569
+msgid "HM|Kk#K#k"
+msgstr "HM|Bb#B#b"
+
+#: src/menus.C:1570
+msgid "HM|Ll#L#l"
+msgstr "HM|Xx#X#x"
+
+#: src/menus.C:1571
+msgid "HM|oO#o#O"
+msgstr "HM|wW#w#W"
+
+#: src/menus.C:1572
+msgid "HM|eE#e#E"
+msgstr "HM|Gg#g#G"
+
+#: src/menus.C:1573
+msgid "HM|Vv#v#V"
+msgstr "HM|Mm#m#M"
+
+#: src/menus.C:1596
+msgid "LyX Version "
+msgstr "Modeye di LyX"
+
+#: src/menus.C:1597
+msgid " of "
+msgstr " di "
+
+#: src/menus.C:1598
+msgid "Library directory: "
+msgstr "Ridant lîvreye :"
+
+#: src/menus.C:1600
+msgid "User directory: "
+msgstr "Ridant ûzeu :"
+
+#: src/menus.C:1612
+msgid "Opening help file"
+msgstr "Drovi li fitchî d' aidance"
+
+#: src/minibuffer.C:56
+msgid "Executing:"
+msgstr "Enonder:"
+
+#. this is a hack
+#: src/minibuffer.C:195
+msgid "* No document open *"
+msgstr "* Nou documint di drovu *"
+
+#: src/minibuffer.h:22
+msgid "Welcome to LyX!"
+msgstr "Wilicome dins LyX !"
+
+#: src/paragraph.C:1676
+msgid "Senseless with this layout!"
+msgstr "Pont d' avance avou ene pådje adjinçneye come çouci"
+
+#: src/pathstack.C:55 src/pathstack.C:83
+msgid "Error: Could not change to directory: "
+msgstr "Aroke: nén moyén do candjî di ridant: "
+
+#: src/pathstack.C:74
+msgid "LyX Internal Error:"
+msgstr "Divintrinne aroke dins LyX"
+
+#: src/pathstack.C:74
+msgid "Path Stack underflow."
+msgstr "Li moncea est vûde po les ridants"
+
+#: src/print_form.C:21
+msgid "Print to"
+msgstr "Rexhe so"
+
+#: src/print_form.C:31
+msgid "Printer|#P"
+msgstr "Scrîrece|#P"
+
+#: src/print_form.C:33
+msgid "File|#F"
+msgstr "Fitchî|#F"
+
+#: src/print_form.C:52
+msgid "All Pages|#G"
+msgstr "Totes les pådjes|#G"
+
+#: src/print_form.C:54
+msgid "Only Odd Pages|#O"
+msgstr "Seulmint les pådjes impaires|#O"
+
+#: src/print_form.C:56
+msgid "Only Even Pages|#E"
+msgstr "Seulmint les pådjes paires|#E"
+
+#: src/print_form.C:62
+msgid "Normal Order|#N"
+msgstr "Comincî på cminçmint|#N"
+
+#: src/print_form.C:64
+msgid "Reverse Order|#R"
+msgstr "Comincî pal difén|#R"
+
+#: src/print_form.C:68
+msgid "Order"
+msgstr "Arindjmint"
+
+#: src/print_form.C:76
+#, fuzzy
+msgid "Pages:"
+msgstr "Pådje: "
+
+#: src/print_form.C:81
+#, fuzzy
+msgid "Copies"
+msgstr "Copyî"
+
+#: src/print_form.C:85
+#, fuzzy
+msgid "Count:"
+msgstr "Rawete:"
+
+#: src/print_form.C:88
+#, fuzzy
+msgid "Unsorted|#U"
+msgstr "Dismete les boirds|#D#U"
+
+#: src/print_form.C:107
+msgid "File Type"
+msgstr "Sôrt di fitchî"
+
+#: src/print_form.C:111
+msgid "Command:|#C"
+msgstr "Comande:|#C"
+
+#: src/print_form.C:125
+msgid "DVI|#D"
+msgstr "DVI|#D"
+
+#: src/print_form.C:127
+msgid "Postscript|#P"
+msgstr "Postscript|#P"
+
+#: src/print_form.C:129
+msgid "LaTeX|#T"
+msgstr "LaTeX|#T"
+
+#: src/print_form.C:132
+msgid "LyX|#L"
+msgstr "LyX|#L"
+
+#: src/print_form.C:134
+msgid "Ascii|#s"
+msgstr "Ascii|#A"
+
+#: src/sp_form.C:26
+msgid "Use language of document|#D"
+msgstr "Eployî li lingaedje do documint|#D"
+
+#: src/sp_form.C:28
+msgid "Use alternate language:|#U"
+msgstr "Eployî èn ôte lingaedje|#T"
+
+#: src/sp_form.C:34
+msgid "Treat run-together words as legal|#T"
+msgstr "Prinde les mots aclapés eshonne|#T"
+
+#: src/sp_form.C:36
+msgid "Input Encoding switch to ispell|#I"
+msgstr "Ecôdaedje po ISpell|#I"
+
+#: src/sp_form.C:46
+msgid "Use alternate personal dictionary:|#P"
+msgstr "Eployî on motî da vosse|#P"
+
+#: src/sp_form.C:48
+msgid "Extra special chars allowed in words:|#E"
+msgstr "Caracteres especiås a prinde dins les mots:|#E"
+
+#: src/sp_form.C:54
+msgid "Dictionary"
+msgstr "Motî"
+
+#: src/sp_form.C:86
+msgid "Replace"
+msgstr "Mete el plaece"
+
+#: src/sp_form.C:88
+msgid ""
+"Near\n"
+"Misses"
+msgstr ""
+"A waire\n"
+"près"
+
+#: src/sp_form.C:91
+msgid "Spellchecker Options...|#O"
+msgstr "Tchûzes pol coridjeu di scrîjhaedje...|#T"
+
+#: src/sp_form.C:93
+msgid "Start spellchecking|#S"
+msgstr "Ataker a coridjî|#A"
+
+#: src/sp_form.C:95
+msgid "Insert in personal dictionary|#I"
+msgstr "Radjouter è motî da vosse|#R"
+
+#: src/sp_form.C:97
+msgid "Ignore word|#g"
+msgstr "Passer ci mot ci|#P"
+
+#: src/sp_form.C:99
+msgid "Accept word in this session|#A"
+msgstr "Admete li mot po ci côp co|#m"
+
+#: src/sp_form.C:101
+msgid "Stop spellchecking|#T"
+msgstr "Arester li coridjaedje|#r"
+
+#: src/sp_form.C:103
+msgid "Close Spellchecker|#C^["
+msgstr "Cloyu li coridjeu|#C^["
+
+#: src/sp_form.C:106
+#, no-c-format
+msgid "0 %"
+msgstr "0 å cint"
+
+#: src/sp_form.C:110
+#, no-c-format
+msgid "100 %"
+msgstr "100 å cint"
+
+#: src/sp_form.C:113
+msgid "Replace word|#R"
+msgstr "Mete el plaece|#R"
+
+#: src/spellchecker.C:222
+msgid "Spellchecker Options"
+msgstr "Tchûzes pol coridjeu di scrîjhaedhe"
+
+#: src/spellchecker.C:525
+msgid "Spellchecker"
+msgstr "Coridjeu di scrîjhaedje"
+
+#: src/spellchecker.C:632
+msgid ""
+"\n"
+"\n"
+"The ispell-process has died for some reason. *One* possible reason\n"
+"could be that you do not have a dictionary file\n"
+"for the language of this document installed.\n"
+"Check /usr/lib/ispell or set another\n"
+"dictionary in the Spellchecker Options menu."
+msgstr ""
+"\n"
+"\n"
+"Li processus i-spell vént do peter å stoeles... *Yene* des råjhons,\n"
+"ça pôreut esse ki vos n' avoz nou motî\n"
+"pol lingaedje do documint\n"
+"Waitîz dins /usr/lib/ispell ou bén purdoz èn ôte\n"
+"motî è menu Tchûzes -> Motî."
+
+#: src/spellchecker.C:748
+msgid " words checked."
+msgstr " mots waitîz."
+
+#: src/spellchecker.C:750
+msgid " word checked."
+msgstr " mot waitî."
+
+#: src/spellchecker.C:752
+msgid "Spellchecking completed!"
+msgstr "Dj' a tot fwait di coridjî !"
+
+#: src/spellchecker.C:756
+msgid ""
+"The ispell-process has died for some reason.\n"
+"Maybe it has been killed."
+msgstr ""
+"Li processus i-spell vént do mori.\n"
+"Mutwè aveut-i fwait, tot simplumint ?"
+
+#: src/text.C:1883
+msgid "Multicolumns can only be horizontally."
+msgstr "Les multicolones ni polèt esse metuwes ki di coûtchî"
+
+#. the user inserted a space before a space. So we
+#. * will just make a CursorRight. BUT: The font of this
+#. * space should be set to current font. That is why
+#. * we need to rebreak perhaps. If there is a protected
+#. * blank at the end of a row we have to force
+#. * a rebreak.
+#: src/text.C:2291 src/text.C:2310
+msgid "You cannot type two spaces this way.  Please read the Tutorial."
+msgstr ""
+
+#: src/text.C:2308
+msgid ""
+"You cannot insert a space at the beginning of a paragraph.  Please read the "
+"Tutorial."
+msgstr ""
+
+#: src/text.C:3935 src/text.C:3943 src/text.C:3960 src/text.C:3975
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+#: src/text2.C:2135 src/text2.C:2144
+msgid "Impossible operation"
+msgstr "Dji n' sai fé çoula"
+
+#: src/text.C:3936
+msgid "You can't insert a float in a float!"
+msgstr "Vos n' sårîz stitchî on flotant dins èn ôte flotant !"
+
+#: src/text.C:3944
+msgid "You can't insert a marginpar in a minipage!"
+msgstr "Vos n' sårîz stitchî on [marginpar] dins ene minipådje"
+
+#: src/text.C:3960
+msgid "Cannot cut table."
+msgstr "Dji n' sai côper li tåvlea."
+
+#: src/text.C:3976
+msgid "Float would include float!"
+msgstr "I gn åreut on flotant di stitchî dins èn ôte flotant !"
+
+#: src/text2.C:337
+msgid "Opened float"
+msgstr "flotant drovu"
+
+#: src/text2.C:340
+msgid "Closed float"
+msgstr "flotant cloyu"
+
+#: src/text2.C:378
+msgid "Nothing to do"
+msgstr "Rén a fé"
+
+#. Could only happen with user style
+#: src/text2.C:1077
+msgid ""
+"No font change defined. Use Character under the Layout menu to define font "
+"change."
+msgstr ""
+"Nou candjmint di fonte di defini. Alez dins Cogne->Caractere pol defini"
+
+#: src/text2.C:1817 src/text2.C:2033
+msgid "Don't know what to do with half floats."
+msgstr "Dji n' sai cwè fé avou des dmeys flotants."
+
+#: src/text2.C:1817 src/text2.C:1827 src/text2.C:2033 src/text2.C:2043
+msgid "sorry."
+msgstr "dji rgrete."
+
+#: src/text2.C:1827 src/text2.C:2043
+msgid "Don't know what to do with half tables."
+msgstr "Dji n' sai cwè fé avou des dmeys tåvleas."
+
+#: src/text2.C:2136
+msgid "Can't paste float into float!"
+msgstr "Nén moyén d' aclaper on flotant dins èn ôte flotant!"
+
+#: src/text2.C:2145
+msgid "Table cell cannot include more than one paragraph!"
+msgstr "Les cwåreas d' on tåvleas ni polèt nén avu di pus d' on hagnon"
diff --git a/src/.cvsignore b/src/.cvsignore
new file mode 100644 (file)
index 0000000..f104b18
--- /dev/null
@@ -0,0 +1,3 @@
+config.h
+lyx
+Makefile
diff --git a/src/BackStack.h b/src/BackStack.h
new file mode 100644 (file)
index 0000000..89f4973
--- /dev/null
@@ -0,0 +1,65 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1997-1998 The LyX Team.
+*
+*======================================================*/
+
+#ifndef _BACK_STACK_H
+#define _BACK_STACK_H
+
+#include "LString.h"
+
+// Created by Alejandro Aguilar Sierra, 970806
+
+/**  Utility to get back from a reference or from a child document.
+ */
+class BackStack {
+public:
+       ///
+       struct BackStackItem {
+               ///
+               void set(LString f, int xx, int yy) {
+                       fname = f;  x = xx;  y = yy;
+               }
+               /// Filename
+               LString fname;
+               /// Cursor x-position
+               int x;
+               /// Cursor y-position
+               int y;   
+       };
+       ///
+       BackStack(int n) : imax(n) {
+               item = new BackStackItem[imax];
+               i = 0;
+       }
+       ///
+       ~BackStack() {
+               delete[] item;
+       }
+       ///
+       void push(LString f, int x, int y) {
+               if (i<imax) 
+                       item[i++].set(f, x, y);
+       }
+       ///
+       LString &pop(int *x, int *y) {
+               if (i>0) i--;
+               *x = item[i].x;
+               *y = item[i].y;
+               return item[i].fname;
+       }
+private:
+       ///
+       BackStackItem *item;
+       ///
+       int i;
+       ///
+       int imax;
+};
+
+#endif
diff --git a/src/BufferView.C b/src/BufferView.C
new file mode 100644 (file)
index 0000000..ff27c73
--- /dev/null
@@ -0,0 +1,1529 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <sys/wait.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "commandtags.h"
+#include "BufferView.h"
+#include "bufferlist.h"
+#include "LyXView.h"
+#include "lyxfunc.h"
+#include "insets/lyxinset.h"
+#include "minibuffer.h"
+#include "lyxscreen.h"
+#include "up.xpm"
+#include "down.xpm"
+#include "error.h"
+#include "lyxdraw.h"
+#include "lyx_gui_misc.h"
+#include "BackStack.h"
+#include "lyxtext.h"
+#include "lyx_cb.h"
+#include "gettext.h"
+
+//     $Id: BufferView.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $        
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: BufferView.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+extern BufferList bufferlist;
+void sigchldhandler(pid_t pid, int *status);
+
+extern void SetXtermCursor(Window win);
+extern bool input_prohibited;
+extern bool selection_possible;
+extern void BeforeChange();
+extern char ascii_type;
+extern int UnlockInset(UpdatableInset* inset);
+extern void ToggleFloat();
+extern void MenuPasteSelection(char at);
+extern InsetUpdateStruct *InsetUpdateList;
+extern void UpdateInsetUpdateList();
+
+// This is _very_ temporary
+FL_OBJECT *figinset_canvas;
+
+BufferView::BufferView(LyXView *o, int xpos, int ypos,
+                      int width, int height)
+       : _owner(o)
+{
+       _buffer = 0;
+       
+       screen = 0;
+       work_area = 0;
+       figinset_canvas = 0;
+       scrollbar = 0;
+       button_down = 0;
+       button_up = 0;
+       timer_cursor = 0;
+       current_scrollbar_value = 0;
+       create_view(xpos, ypos, width, height);
+       // Activate the timer for the cursor 
+       fl_set_timer(timer_cursor, 0.4);
+       fl_set_focus_object(_owner->getForm(), work_area);
+       work_area_focus = true;
+       lyx_focus = false;
+        backstack = new BackStack(16);
+}
+
+
+BufferView::~BufferView()
+{
+       delete backstack;
+}   
+
+
+void BufferView::setBuffer(Buffer *b)
+{
+       lyxerr.debug("Setting buffer in BufferView");
+       if (_buffer) {
+               _buffer->InsetSleep();
+               _buffer->delUser(this);
+       }
+
+       // Set current buffer
+       _buffer = b;
+
+       if (bufferlist.getState() == BufferList::CLOSING) return;
+       
+       // Nuke old image
+       if (screen)
+               delete screen;
+       screen = 0;
+
+       // If we are closing the buffer, use the first buffer as current
+       if (!_buffer) {
+               _buffer = bufferlist.first();
+       }
+
+       if (_buffer) {
+               lyxerr.debug(LString("  Buffer addr: ") + PTR_AS_INT(_buffer));
+               _buffer->addUser(this);
+               _owner->getMenus()->showMenus();
+               // If we don't have a text object for this, we make one
+               if (_buffer->text == 0)
+                       resizeCurrentBuffer();
+               else {
+                       updateScreen();
+                       updateScrollbar();
+               }
+               screen->first = screen->TopCursorVisible();
+               redraw();
+               updateAllVisibleBufferRelatedPopups();
+               _buffer->InsetWakeup();
+       } else {
+               lyxerr.debug("  No Buffer!");
+               _owner->getMenus()->hideMenus();
+               //workAreaExpose();
+               updateScrollbar();
+               fl_redraw_object(work_area);
+       }
+       // should update layoutchoice even if we don't have a buffer.
+       _owner->updateLayoutChoice();
+       _owner->getMiniBuffer()->Init();
+       _owner->updateWindowTitle();
+}
+
+
+void BufferView::updateScreen()
+{
+       // Regenerate the screen.
+       if (screen)
+               delete screen;
+       screen = new LyXScreen(FL_ObjWin(work_area),
+                              work_area->w,
+                              work_area->h,
+                              work_area->x,
+                              work_area->y,
+                              _buffer->text);
+}
+
+
+void BufferView::resize()
+{
+       // This will resize the buffer. (Asger)
+       if (_buffer)
+               resizeCurrentBuffer();
+}
+
+
+static bool lgb_hack = false;
+
+void BufferView::redraw()
+{
+       lyxerr.debug("BufferView::redraw()");
+       lgb_hack = true;
+       fl_redraw_object(work_area);
+       fl_redraw_object(scrollbar);
+       fl_redraw_object(button_down);
+       fl_redraw_object(button_up);
+       lgb_hack = false;
+}
+
+
+void BufferView::fitCursor()
+{
+       if (screen) screen->FitCursor();
+}
+
+
+void BufferView::update()
+{
+       if (screen) screen->Update();
+}
+
+
+void BufferView::updateScrollbar()
+{
+       /* If the text is smaller than the working area, the scrollbar
+        * maximum must be the working area height. No scrolling will 
+        * be possible */
+
+       if (!_buffer) {
+               fl_set_slider_value(scrollbar, 0);
+               fl_set_slider_size(scrollbar, scrollbar->h);
+               return;
+       }
+       
+       static long max2 = 0;
+       static long height2 = 0;
+
+       long cbth = 0;
+       long cbsf = 0;
+
+       if (_buffer->text)
+               cbth = _buffer->text->height;
+       if (screen)
+               cbsf = screen->first;
+
+       // check if anything has changed.
+       if (max2 == cbth &&
+           height2 == work_area->h &&
+           current_scrollbar_value == cbsf)
+               return;       // no
+       
+       max2 = cbth;
+       height2 = work_area->h;
+       current_scrollbar_value = cbsf;
+
+       if (cbth <= height2) { // text is smaller than screen
+               fl_set_slider_size(scrollbar, scrollbar->h);
+               return;
+       }
+       
+       long maximum_height = work_area->h * 3/4 + cbth;
+       long value = cbsf;
+
+       /* set the scrollbar */
+       double hfloat = work_area->h;
+       double maxfloat = maximum_height;
+   
+       fl_set_slider_value(scrollbar, value);
+       fl_set_slider_bounds(scrollbar, 0,
+                            maximum_height - work_area->h);
+#if FL_REVISION > 85
+       double lineh = _buffer->text->DefaultHeight();
+       fl_set_slider_increment(scrollbar,work_area->h-lineh,lineh);
+#endif
+       if (maxfloat>0){
+               if ((hfloat/maxfloat) * (float) height2 < 3)
+                       fl_set_slider_size(scrollbar,
+                                          3/(float)height2);
+               else
+                       fl_set_slider_size(scrollbar,
+                                          hfloat/maxfloat);
+       } else
+               fl_set_slider_size(scrollbar, hfloat);
+       fl_set_slider_precision(scrollbar, 0);
+}
+
+
+void BufferView::redoCurrentBuffer()
+{
+       lyxerr.debug("BufferView::redoCurrentBuffer");
+       if (_buffer && _buffer->text) {
+               resize();
+               _owner->updateLayoutChoice();
+       }
+}
+
+
+int BufferView::resizeCurrentBuffer()
+{
+       lyxerr.debug("resizeCurrentBuffer");
+       
+       LyXParagraph *par = 0;
+       LyXParagraph *selstartpar = 0;
+       LyXParagraph *selendpar = 0;
+       int pos = 0;
+       int selstartpos = 0;
+       int selendpos = 0;
+       int selection = 0;
+       int mark_set = 0;
+
+       ProhibitInput();
+
+       _owner->getMiniBuffer()->Set(_("Formatting document..."));   
+
+       if (_buffer->text) {
+               par = _buffer->text->cursor.par;
+               pos = _buffer->text->cursor.pos;
+               selstartpar = _buffer->text->sel_start_cursor.par;
+               selstartpos = _buffer->text->sel_start_cursor.pos;
+               selendpar = _buffer->text->sel_end_cursor.par;
+               selendpos = _buffer->text->sel_end_cursor.pos;
+               selection = _buffer->text->selection;
+               mark_set = _buffer->text->mark_set;
+               delete _buffer->text;
+       }
+       _buffer->text = new LyXText(work_area->w, _buffer);
+
+       updateScreen();
+   
+       if (par) {
+               _buffer->text->selection = true;
+               /* at this point just
+                * to avoid the Delete-
+                * Empty-Paragraph
+                * Mechanism when
+                * setting the cursor */
+               _buffer->text->mark_set = mark_set;
+               if (selection) {
+                       _buffer->text->SetCursor(selstartpar, selstartpos);
+                       _buffer->text->sel_cursor = _buffer->text->cursor;
+                       _buffer->text->SetCursor(selendpar, selendpos);
+                       _buffer->text->SetSelection();
+                       _buffer->text->SetCursor(par, pos);
+               } else {
+                       _buffer->text->SetCursor(par, pos);
+                       _buffer->text->sel_cursor = _buffer->text->cursor;
+                       _buffer->text->selection = false;
+               }
+       }
+       screen->first = screen->TopCursorVisible(); /* this will scroll the
+                                                    * screen such that the
+                                                    * cursor becomes
+                                                    * visible */ 
+       updateScrollbar();
+       redraw();
+       _owner->getMiniBuffer()->Init();
+       AllowInput();
+
+       // Now if the title form still exist kill it
+       TimerCB(0,0);
+
+       return 0;
+}
+
+
+void BufferView::gotoError()
+{
+       if (!screen)
+               return;
+   
+       screen->HideCursor();
+       BeforeChange();
+       _buffer->update(-2);
+       LyXCursor tmp;
+   
+       if (!_buffer->text->GotoNextError()) {
+               if (_buffer->text->cursor.pos 
+                   || _buffer->text->cursor.par !=
+                   _buffer->text->FirstParagraph()) {
+                       tmp = _buffer->text->cursor;
+                       _buffer->text->cursor.par =
+                               _buffer->text->FirstParagraph();
+                       _buffer->text->cursor.pos = 0;
+                       if (!_buffer->text->GotoNextError()) {
+                               _buffer->text->cursor = tmp;
+                               _owner->getMiniBuffer()->Set(_("No more errors"));
+                               LyXBell();
+                       }
+               } else {
+                       _owner->getMiniBuffer()->Set(_("No more errors"));
+                       LyXBell();
+               }
+       }
+       _buffer->update(0);
+       _buffer->text->sel_cursor =
+               _buffer->text->cursor;
+}
+
+
+void BufferView::create_view(int xpos, int ypos, int width, int height)
+{
+       FL_OBJECT *obj;
+       const int bw = abs(fl_get_border_width());
+
+       // a hack for the figinsets (Matthias)
+       // This one first, then it will probably be invisible. (Lgb)
+       ::figinset_canvas = figinset_canvas = obj =
+               fl_add_canvas(FL_NORMAL_CANVAS,
+                             xpos + 1,
+                             ypos + 1,1,1,"");
+       fl_set_object_boxtype(obj,FL_NO_BOX);
+       fl_set_object_resize(obj, FL_RESIZE_ALL);
+       fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
+
+       // a box
+       obj = fl_add_box(FL_BORDER_BOX, xpos, ypos,
+                        width - 15,
+                        height,"");
+       fl_set_object_resize(obj, FL_RESIZE_ALL);
+       fl_set_object_gravity(obj, NorthWestGravity, SouthEastGravity);
+
+       // the free object
+       work_area = obj = fl_add_free(FL_INPUT_FREE,
+                                     xpos +bw, ypos+bw,
+                                     width-15-2*bw /* scrollbarwidth */,
+                                     height-2*bw,"",
+                                     work_area_handler);
+       obj->wantkey = FL_KEY_TAB;
+       obj->u_vdata = (void*) this; /* This is how we pass the BufferView
+                                      to the work_area_handler. */
+       fl_set_object_boxtype(obj,FL_DOWN_BOX);
+       fl_set_object_resize(obj, FL_RESIZE_ALL);
+       fl_set_object_gravity(obj, NorthWestGravity, SouthEastGravity);
+
+       //
+       // THE SCROLLBAR
+       //
+
+       // up - scrollbar button
+#if FL_REVISION > 85
+       fl_set_border_width(-1);
+#else
+       fl_set_border_width(-2); // to get visible feedback
+#endif
+       button_up = obj = fl_add_pixmapbutton(FL_TOUCH_BUTTON,
+                                             width-15+4*bw,
+                                             ypos,
+                                             15,15,"");
+       fl_set_object_boxtype(obj,FL_UP_BOX);
+       fl_set_object_color(obj,FL_MCOL,FL_BLUE);
+       fl_set_object_resize(obj, FL_RESIZE_ALL);
+       fl_set_object_gravity(obj,NorthEastGravity, NorthEastGravity);
+       fl_set_object_callback(obj,UpCB,(long)this);
+       fl_set_pixmapbutton_data(obj, up_xpm);
+
+#if FL_REVISION >85
+       // Remove the blue feedback rectangle
+       fl_set_pixmapbutton_focus_outline(obj,0);
+#endif 
+
+       // the scrollbar slider
+       fl_set_border_width(-bw);
+       scrollbar = obj = fl_add_slider(FL_VERT_SLIDER,
+                                       width-15+4*bw,
+                                       ypos + 15,
+                                       15,height-30,"");
+       fl_set_object_color(obj,FL_COL1,FL_MCOL);
+       fl_set_object_boxtype(obj, FL_UP_BOX);
+       fl_set_object_resize(obj, FL_RESIZE_ALL);
+       fl_set_object_gravity(obj, NorthEastGravity, SouthEastGravity);
+       fl_set_object_callback(obj,ScrollCB,(long)this);
+       
+       // down - scrollbar button
+#if FL_REVISION > 85
+       fl_set_border_width(-1);
+#else
+       fl_set_border_width(-2); // to get visible feedback
+#endif
+       button_down = obj = fl_add_pixmapbutton(FL_TOUCH_BUTTON,
+                                                     width-15+4*bw,
+                                                     ypos + height-15,
+                                                     15,15,"");
+       fl_set_object_boxtype(obj,FL_UP_BOX);
+       fl_set_object_color(obj,FL_MCOL,FL_BLUE);
+       fl_set_object_resize(obj, FL_RESIZE_ALL);
+       fl_set_object_gravity(obj, SouthEastGravity, SouthEastGravity);
+       fl_set_object_callback(obj,DownCB,(long)this);
+       fl_set_pixmapbutton_data(obj, down_xpm);
+       fl_set_border_width(-bw);
+
+#if FL_REVISION >85
+       // Remove the blue feedback rectangle
+       fl_set_pixmapbutton_focus_outline(obj,0);
+#endif 
+
+       //
+       // TIMERS
+       //
+       
+       // timer_cursor
+       timer_cursor = obj = fl_add_timer(FL_HIDDEN_TIMER,
+                                         0,0,0,0,"Timer");
+       fl_set_object_callback(obj,CursorToggleCB,0);
+       obj->u_vdata = (void*) this;
+}
+
+
+// Callback for scrollbar up button
+void BufferView::UpCB(FL_OBJECT *ob, long buf)
+{
+       BufferView *view = (BufferView*) buf;
+       
+       if (view->_buffer == 0) return;
+
+       const XEvent*ev2;
+       static long time = 0;
+       ev2 = fl_last_event();
+       if (ev2->type == ButtonPress || ev2->type == ButtonRelease) 
+               time = 0;
+       int button = fl_get_button_numb(ob);
+       switch (button) {
+       case 3:
+               view->ScrollUpOnePage(time++); break;
+       case 2:
+               view->ScrollDownOnePage(time++); break;
+       default:
+               view->ScrollUp(time++); break;
+       }
+}
+
+
+static
+void waitForX()
+{
+       static Window w = 0;
+       static Atom a = 0;
+       if (!a)
+               a = XInternAtom(fl_display, "WAIT_FOR_X", False);
+       if (w == 0) {
+               int mask;
+               XSetWindowAttributes attr;
+               mask = CWOverrideRedirect;
+               attr.override_redirect = 1;
+               w = XCreateWindow(fl_display, fl_root,
+                                 0, 0, 1, 1, 0, CopyFromParent,
+                                 InputOnly, CopyFromParent, mask, &attr);
+               XSelectInput(fl_display, w, PropertyChangeMask);
+               XMapWindow(fl_display, w);
+       }
+       static XEvent ev;
+       XChangeProperty(fl_display, w, a, a, 8,
+                       PropModeAppend, (unsigned char *)"", 0);
+       XWindowEvent(fl_display, w, PropertyChangeMask, &ev);
+}
+
+
+// Callback for scrollbar slider
+void BufferView::ScrollCB(FL_OBJECT *ob, long buf)
+{
+       BufferView *view = (BufferView*) buf;
+       extern bool cursor_follows_scrollbar;
+       
+       if (view->_buffer == 0) return;
+
+       view->current_scrollbar_value = (long)fl_get_slider_value(ob);
+       if (view->current_scrollbar_value < 0)
+               view->current_scrollbar_value = 0;
+   
+       if (!view->screen)
+               return;
+
+       view->screen->Draw(view->current_scrollbar_value);
+
+       if (cursor_follows_scrollbar) {
+               LyXText * vbt = view->_buffer->text;
+               int height = vbt->DefaultHeight();
+               
+               if (vbt->cursor.y < view->screen->first + height) {
+                       vbt->SetCursorFromCoordinates(0,
+                                                     view->screen->first +
+                                                     height);
+               }
+               else if (vbt->cursor.y >
+                        view->screen->first + view->work_area->h - height) {
+                       vbt->SetCursorFromCoordinates(0,
+                                                     view->screen->first +
+                                                     view->work_area->h  -
+                                                     height);
+               }
+       }
+       waitForX();
+}
+
+
+// Callback for scrollbar down button
+void BufferView::DownCB(FL_OBJECT *ob, long buf)
+{
+       BufferView *view = (BufferView*) buf;
+
+       if (view->_buffer == 0) return;
+       
+       const XEvent*ev2;
+       static long time = 0;
+       ev2 = fl_last_event();
+       if (ev2->type == ButtonPress || ev2->type == ButtonRelease) 
+               time = 0;
+       int button = fl_get_button_numb(ob);
+       switch (button) {
+       case 2:
+               view->ScrollUpOnePage(time++); break;
+       case 3:
+               view->ScrollDownOnePage(time++); break;
+       default:
+               view->ScrollDown(time++); break;
+       }
+}
+
+
+int BufferView::ScrollUp(long time)
+{
+       if (_buffer == 0) return 0;
+       if (!screen)
+               return 0;
+   
+       double value= fl_get_slider_value(scrollbar);
+   
+       if (value == 0)
+               return 0;
+   
+       float add_value =  (_buffer->text->DefaultHeight()
+                           + (float)(time) * (float)(time) * 0.125);
+   
+       if (add_value > work_area->h)
+               add_value = (float) (work_area->h -
+                                    _buffer->text->DefaultHeight());
+   
+       value -= add_value;
+
+       if (value < 0)
+               value = 0;
+   
+       fl_set_slider_value(scrollbar, value);
+   
+       ScrollCB(scrollbar,(long)this); 
+       return 0;
+}
+
+
+int BufferView::ScrollDown(long time)
+{
+       if (_buffer == 0) return 0;
+       if (!screen)
+               return 0;
+   
+       double value= fl_get_slider_value(scrollbar);
+       double min, max;
+       fl_get_slider_bounds(scrollbar, &min, &max);
+
+       if (value == max)
+               return 0;
+   
+       float add_value =  (_buffer->text->DefaultHeight()
+                           + (float)(time) * (float)(time) * 0.125);
+   
+       if (add_value > work_area->h)
+               add_value = (float) (work_area->h -
+                                    _buffer->text->DefaultHeight());
+   
+       value += add_value;
+   
+       if (value > max)
+               value = max;
+   
+       fl_set_slider_value(scrollbar, value);
+   
+       ScrollCB(scrollbar,(long)this); 
+       return 0;
+}
+
+
+void BufferView::ScrollUpOnePage(long /*time*/)
+{
+       if (_buffer == 0) return;
+       if (!screen)
+               return;
+   
+       long y = screen->first;
+
+       if (!y) return;
+   
+       Row* row = _buffer->text->GetRowNearY(y);
+       y = y - work_area->h + row->height;
+       
+       fl_set_slider_value(scrollbar, y);
+   
+       ScrollCB(scrollbar,(long)this); 
+}
+
+
+void BufferView::ScrollDownOnePage(long /*time*/)
+{
+       if (_buffer == 0) return;
+       if (!screen)
+               return;
+   
+       double min, max;
+       fl_get_slider_bounds(scrollbar, &min, &max);
+       long y = screen->first;
+   
+       if (y > _buffer->text->height - work_area->h)
+               return;
+   
+       y += work_area->h;
+       _buffer->text->GetRowNearY(y);
+       
+       fl_set_slider_value(scrollbar, y);
+   
+       ScrollCB(scrollbar,(long)this); 
+}
+
+
+int BufferView::work_area_handler(FL_OBJECT * ob, int event,
+                                 FL_Coord, FL_Coord ,
+                                 int /*key*/, void *xev)
+{
+       static int x_old = -1;
+       static int y_old = -1;
+       static long scrollbar_value_old = -1;
+       
+       XEvent* ev = (XEvent*) xev;
+       BufferView *view = (BufferView*) ob->u_vdata;
+
+       // If we don't have a view yet; return
+       if (!view || quitting) return 0;
+
+       switch (event){   
+       case FL_DRAW:
+               view->workAreaExpose(); 
+               break;
+       case FL_PUSH:
+               view->WorkAreaButtonPress(ob, 0,0,0,ev,0);
+               break; 
+       case FL_RELEASE:
+               view->WorkAreaButtonRelease(ob, 0,0,0,ev,0);
+               break;
+       case FL_MOUSE:
+               if (ev->xmotion.x != x_old || 
+                   ev->xmotion.y != y_old ||
+                   view->current_scrollbar_value != scrollbar_value_old) {
+                       x_old = ev->xmotion.x;
+                       y_old = ev->xmotion.y;
+                       scrollbar_value_old = view->current_scrollbar_value;
+                       view->WorkAreaMotionNotify(ob, 0,0,0,ev,0);
+               }
+               break;
+       // Done by the raw callback:
+       //  case FL_KEYBOARD: WorkAreaKeyPress(ob, 0,0,0,ev,0); break;
+       case FL_FOCUS:
+               if (!view->_owner->getMiniBuffer()->shows_no_match)
+                       view->_owner->getMiniBuffer()->Init();
+               view->_owner->getMiniBuffer()->shows_no_match = false;
+               view->work_area_focus = true;
+               fl_set_timer(view->timer_cursor, 0.4);
+               break;
+       case FL_UNFOCUS:
+               view->_owner->getMiniBuffer()->ExecCommand();
+               view->work_area_focus = false;
+               break;
+       case FL_ENTER:
+               SetXtermCursor(view->_owner->getForm()->window);
+               // reset the timer
+               view->lyx_focus = true;
+               fl_set_timer(view->timer_cursor, 0.4);
+               break;
+       case FL_LEAVE: 
+               if (!input_prohibited)
+                       XUndefineCursor(fl_display,
+                                       view->_owner->getForm()->window);
+               view->lyx_focus = false; // This is not an absolute truth
+               // but if it is not true, it will be changed within a blink
+               // of an eye. ... Not good enough... use regulare timeperiod
+               //fl_set_timer(view->timer_cursor, 0.01); // 0.1 sec blink
+               fl_set_timer(view->timer_cursor, 0.4); // 0.4 sec blink
+               break;
+       case FL_DBLCLICK: 
+               // select a word 
+               if (view->_buffer && !view->_buffer->the_locking_inset) {
+                       if (view->screen && ev->xbutton.button == 1) {
+                               view->screen->HideCursor();
+                               view->screen->ToggleSelection(); 
+                               view->_buffer->text->SelectWord();
+                               view->screen->ToggleSelection(false);
+                               /* This will fit the cursor on the screen
+                                * if necessary */ 
+                               view->_buffer->update(0); 
+                       }
+               }
+               break;
+       case FL_TRPLCLICK:
+               // select a line
+               if (view->_buffer && view->screen && ev->xbutton.button == 1) {
+                       view->screen->HideCursor(); 
+                       view->screen->ToggleSelection(); 
+                       view->_buffer->text->CursorHome();
+                       view->_buffer->text->sel_cursor =
+                               view->_buffer->text->cursor;
+                       view->_buffer->text->CursorEnd();
+                       view->_buffer->text->SetSelection();
+                       view->screen->ToggleSelection(false); 
+                       /* This will fit the cursor on the screen
+                        * if necessary */ 
+                       view->_buffer->update(0); 
+               }
+               break;
+       case FL_OTHER:
+               view->WorkAreaSelectionNotify(ob,
+                                             view->_owner->getForm()->window,
+                                             0,0,ev,0); 
+               break;
+       }
+       return 1;
+}
+
+int BufferView::WorkAreaMotionNotify(FL_OBJECT *ob, Window,
+                                    int /*w*/, int /*h*/,
+                                    XEvent *ev, void */*d*/)
+{
+
+       if (_buffer == 0) return 0;
+       if (!screen) return 0;
+
+       // Check for inset locking
+       if (_buffer->the_locking_inset) {
+               LyXCursor cursor = _buffer->text->cursor;
+               _buffer->the_locking_inset->
+                       InsetMotionNotify(ev->xbutton.x - ob->x - cursor.x,
+                                         ev->xbutton.y - ob->y -
+                                         (cursor.y),
+                                         ev->xbutton.state);
+               return 0;
+       }
+   
+       // Only use motion with button 1
+       if (!ev->xmotion.state & Button1MotionMask)
+               return 0; 
+   
+       /* The selection possible is needed, that only motion events are 
+        * used, where the bottom press event was on the drawing area too */
+       if (selection_possible) {
+               screen->HideCursor();
+
+               _buffer->text->
+                       SetCursorFromCoordinates(ev->xbutton.x - ob->x,
+                                                ev->xbutton.y - ob->y +
+                                                screen->first);
+      
+               if (!_buffer->text->selection)
+                   _buffer->update(-3); // Maybe an empty line was deleted
+      
+               _buffer->text->SetSelection();
+               screen->ToggleToggle();
+               if (screen->FitCursor())
+                       updateScrollbar(); 
+               screen->ShowCursor();
+       }
+       return 0;
+}
+
+
+extern int bibitemMaxWidth(const class LyXFont &);
+
+// Single-click on work area
+int BufferView::WorkAreaButtonPress(FL_OBJECT *ob, Window,
+                       int /*w*/, int /*h*/, XEvent *ev, void */*d*/)
+{
+       last_click_x = -1;
+       last_click_y = -1;
+
+       if (_buffer == 0) return 0;
+       if (!screen) return 0;
+
+       int const x = ev->xbutton.x - ob->x;
+       int const y = ev->xbutton.y - ob->y;
+       // If we hit an inset, we have the inset coordinates in these
+       // and inset_hit points to the inset.  If we do not hit an
+       // inset, inset_hit is 0, and inset_x == x, inset_y == y.
+       int inset_x = x;
+       int inset_y = y;
+       Inset * inset_hit = checkInsetHit(inset_x, inset_y);
+
+       // ok ok, this is a hack.
+       int button = ev->xbutton.button;
+       if (button == 4 || button == 5) goto wheel;
+
+       {
+               
+       if (_buffer->the_locking_inset) {
+               // We are in inset locking mode
+               
+               /* Check whether the inset was hit. If not reset mode,
+                  otherwise give the event to the inset */
+               if (inset_hit != 0) {
+                       _buffer->the_locking_inset->
+                               InsetButtonPress(inset_x, inset_y, button);
+                       return 0;
+               } else {
+                       UnlockInset(_buffer->the_locking_inset);
+               }
+       }
+       
+       selection_possible = true;
+       screen->HideCursor();
+       
+       // Right button mouse click on a table
+       if (button == 3 &&
+           (_buffer->text->cursor.par->table ||
+            _buffer->text->MouseHitInTable(x, y+screen->first))) {
+               // Set the cursor to the press-position
+               _buffer->text->SetCursorFromCoordinates(x, y + screen->first);
+               bool doit = true;
+               
+               // Only show the table popup if the hit is in the table, too
+               if (!_buffer->text->HitInTable(_buffer->text->cursor.row, x))
+                       doit = false;
+               
+               // Hit above or below the table?
+               if (doit) {
+                       long y_tmp = y + screen->first;
+                       Row*  row =  _buffer->text->GetRowNearY(y_tmp);
+#if 0
+                       // Isn't this empty code anyway? (Lgb)
+                       if (row->par != _buffer->text->cursor.par)
+                               doit = true;
+               }
+               
+               if (doit) {
+#endif
+                       if (!_buffer->text->selection) {
+                               screen->ToggleSelection();
+                               _buffer->text->ClearSelection();
+                               _buffer->text->FullRebreak();
+                               screen->Update();
+                               updateScrollbar();
+                       }
+                       // Popup table popup when on a table.
+                       // This is obviously temporary, since we should be
+                       // able to 
+                       // popup various context-sensitive-menus with the
+                       // the right mouse. So this should be done more
+                       // general in the future. Matthias.
+                       selection_possible = false;
+                       _owner->getLyXFunc()->Dispatch(LFUN_LAYOUT_TABLE,
+                                                      "true");
+                       return 0;
+               }
+       }
+       
+       int screen_first = screen->first;
+       
+       // Middle button press pastes if we have a selection
+       bool paste_internally = false;
+       if (button == 2  // && !_buffer->the_locking_inset
+           && _buffer->text->selection) {
+               _owner->getLyXFunc()->Dispatch(LFUN_COPY);
+               paste_internally = true;
+       }
+       
+       // Clear the selection
+       screen->ToggleSelection();
+       _buffer->text->ClearSelection();
+       _buffer->text->FullRebreak();
+       screen->Update();
+       updateScrollbar();
+               
+       // Single left click in math inset?
+       if (inset_hit != 0 && inset_hit->Editable() == 2) {
+               // Highly editable inset, like math
+               selection_possible = false;
+               _owner->updateLayoutChoice();
+               _owner->getMiniBuffer()->Set(inset_hit->EditMessage());
+               inset_hit->Edit(inset_x, inset_y);
+               return 0;
+       } 
+
+       // Right click on a footnote flag opens float menu
+       if (button == 3) { 
+#if 0
+               // Isn't this empty code anyway? (Lgb)
+               if (_buffer->text->cursor.par->footnoteflag == 
+                   LyXParagraph::OPEN_FOOTNOTE) {
+                       selection_possible = false;
+                       lyxerr.debug("LyX: Sorry not implemented yet.");
+                       return 0;
+               }
+       }
+       
+       if (button == 3) {
+#endif
+               selection_possible = false;
+               return 0;
+       }
+       
+       _buffer->text->SetCursorFromCoordinates(x, y + screen_first);
+       _buffer->text->FinishUndo();
+       _buffer->text->sel_cursor = _buffer->text->cursor;
+       _buffer->text->cursor.x_fix = _buffer->text->cursor.x;
+       
+       _owner->updateLayoutChoice();
+       if (screen->FitCursor()){
+               updateScrollbar();
+               selection_possible = false;
+       }
+
+       // Insert primary selection with middle mouse
+       // if there is a local selection in the current buffer, insert this
+       if (button == 2) { //  && !_buffer->the_locking_inset){
+               if (paste_internally)
+                       _owner->getLyXFunc()->Dispatch(LFUN_PASTE);
+               else
+                       _owner->getLyXFunc()->Dispatch(LFUN_PASTESELECTION,
+                                                      "paragraph");
+               selection_possible = false;
+               return 0;
+       }
+       }
+       goto out;
+ wheel: {
+       // I am not quite sure if this is the correct place to put this,
+       // but it will not cause any harm.
+       // Patch from Mark Huang (markman@mit.edu) to make LyX recognise
+       // button 4 and 5. This enables LyX use use the scrollwhell on
+       // certain mice for something useful. (Lgb)
+       // Added wheel acceleration detection code. (Rvdk)
+       static Time lastTime = 0;
+       int diff = ev->xbutton.time - lastTime;
+       int scroll = int(1.0 + (4.0/(abs(diff)+1.0))*200.0);
+       switch (button) {
+       case 5:
+               ScrollUp(scroll);
+               break;
+       case 4:
+               ScrollDown(scroll);
+               break;
+       }
+       lastTime = ev->xbutton.time;
+       return 0;
+       }
+ out:
+       last_click_x = x;
+       last_click_y = y;
+       
+       return 0;
+}
+
+
+int BufferView::WorkAreaButtonRelease(FL_OBJECT *ob, Window ,
+                         int /*w*/, int /*h*/, XEvent *ev, void */*d*/)
+{
+       if (_buffer == 0 || screen == 0) return 0;
+
+       int const x = ev->xbutton.x - ob->x;
+       int const y = ev->xbutton.y - ob->y;
+
+       // If we hit an inset, we have the inset coordinates in these
+       // and inset_hit points to the inset.  If we do not hit an
+       // inset, inset_hit is 0, and inset_x == x, inset_y == y.
+       int inset_x = x;
+       int inset_y = y;
+       Inset * inset_hit = checkInsetHit(inset_x, inset_y);
+
+       if (_buffer->the_locking_inset) {
+               // We are in inset locking mode.
+
+               /* LyX does a kind of work-area grabbing for insets.
+                  Only a ButtonPress Event outside the inset will 
+                  force a InsetUnlock. */
+               _buffer->the_locking_inset->
+                       InsetButtonRelease(inset_x, inset_y, 
+                                          ev->xbutton.button);
+               return 0;
+       }
+  
+       selection_possible = false;
+        if (_buffer->text->cursor.par->table) {
+                int cell = _buffer->text->
+                        NumberOfCell(_buffer->text->cursor.par,
+                                     _buffer->text->cursor.pos);
+                if (_buffer->text->cursor.par->table->IsContRow(cell) &&
+                    _buffer->text->cursor.par->table->
+                    CellHasContRow(_buffer->text->cursor.par->table->
+                                   GetCellAbove(cell))<0) {
+                        _buffer->text->CursorUp();
+                }
+        }
+       
+       if (ev->xbutton.button >= 2)
+               return 0;
+
+       // Make sure that the press was not far from the release
+       if ((abs(last_click_x - x) >= 5) ||
+           (abs(last_click_y - y) >= 5)) {
+               return 0;
+       }
+
+       // Did we hit an editable inset?
+       if (inset_hit != 0) {
+               // Inset like error, notes and figures
+               selection_possible = false;
+#ifdef WITH_WARNINGS
+#warning fix this proper in 0.13
+#endif
+               // Following a ref shouldn't issue
+               // a push on the undo-stack
+               // anylonger, now that we have
+               // keybindings for following
+               // references and returning from
+               // references.  IMHO though, it
+               // should be the inset's own business
+               // to push or not push on the undo
+               // stack. They don't *have* to
+               // alter the document...
+               // (Joacim)
+               // ...or maybe the SetCursorParUndo()
+               // below isn't necessary at all anylonger?
+               if (inset_hit->LyxCode() == Inset::REF_CODE) {
+                       _buffer->text->SetCursorParUndo();
+               }
+
+               _owner->getMiniBuffer()->Set(inset_hit->EditMessage());
+               inset_hit->Edit(inset_x, inset_y);
+               return 0;
+       }
+
+       // check whether we want to open a float
+       if (_buffer->text) {
+               bool hit = false;
+               char c = ' ';
+               if (_buffer->text->cursor.pos <
+                   _buffer->text->cursor.par->Last()) {
+                       c = _buffer->text->cursor.par->
+                               GetChar(_buffer->text->cursor.pos);
+               }
+               if (c == LYX_META_FOOTNOTE || c == LYX_META_MARGIN
+                   || c == LYX_META_FIG || c == LYX_META_TAB
+                   || c == LYX_META_WIDE_FIG || c == LYX_META_WIDE_TAB
+                    || c == LYX_META_ALGORITHM){
+                       hit = true;
+               } else if (_buffer->text->cursor.pos - 1 >= 0) {
+                       c = _buffer->text->cursor.par->
+                               GetChar(_buffer->text->cursor.pos - 1);
+                       if (c == LYX_META_FOOTNOTE || c == LYX_META_MARGIN
+                           || c == LYX_META_FIG || c == LYX_META_TAB
+                           || c == LYX_META_WIDE_FIG 
+                           || c == LYX_META_WIDE_TAB
+                           || c == LYX_META_ALGORITHM){
+                               // We are one step too far to the right
+                               _buffer->text->CursorLeft();
+                               hit = true;
+                       }
+               }
+               if (hit == true) {
+                       ToggleFloat();
+                       selection_possible = false;
+                       return 0;
+               }
+       }
+
+       // Do we want to close a float? (click on the float-label)
+       if (_buffer->text->cursor.row->par->footnoteflag ==
+           LyXParagraph::OPEN_FOOTNOTE
+           && _buffer->text->cursor.pos == 0
+           && _buffer->text->cursor.row->previous &&
+           _buffer->text->cursor.row->previous->par->
+           footnoteflag != LyXParagraph::OPEN_FOOTNOTE){
+               LyXFont font (LyXFont::ALL_SANE);
+               font.setSize(LyXFont::SIZE_SMALL);
+
+               int box_x = 20; // LYX_PAPER_MARGIN;
+               box_x += font.textWidth("Mwide-figM", 10);
+
+               int screen_first = screen->first;
+
+               if (x < box_x
+                   && y + screen_first > _buffer->text->cursor.y -
+                   _buffer->text->cursor.row->baseline
+                   && y + screen_first < _buffer->text->cursor.y -
+                   _buffer->text->cursor.row->baseline
+                   + font.maxAscent()*1.2 + font.maxDescent()*1.2) {
+                       ToggleFloat();
+                       selection_possible = false;
+                       return 0;
+               }
+       }
+
+       // Maybe we want to edit a bibitem ale970302
+       if (_buffer->text->cursor.par->bibkey && x < 20 + 
+           bibitemMaxWidth(lyxstyle.TextClass(_buffer->
+                                       params.textclass)->defaultfont)) {
+               _buffer->text->cursor.par->bibkey->Edit(0, 0);
+       }
+
+       return 0;
+}
+
+
+/* 
+ * Returns an inset if inset was hit. 0 otherwise.
+ * If hit, the coordinates are changed relative to the inset. 
+ * Otherwise coordinates are not changed, and false is returned.
+ */
+Inset * BufferView::checkInsetHit(int &x, int &y)
+{
+       if (!getScreen())
+               return 0;
+  
+       int y_tmp = y + getScreen()->first;
+  
+       LyXCursor cursor = _buffer->text->cursor;
+       if (cursor.pos < cursor.par->Last() 
+           && cursor.par->GetChar(cursor.pos) == LYX_META_INSET
+           && cursor.par->GetInset(cursor.pos)
+           && cursor.par->GetInset(cursor.pos)->Editable()) {
+
+               // Check whether the inset really was hit
+               Inset* tmpinset = cursor.par->GetInset(cursor.pos);
+               LyXFont font = _buffer->text->GetFont(cursor.par, cursor.pos);
+               if (x > cursor.x
+                   && x < cursor.x + tmpinset->Width(font) 
+                   && y_tmp > cursor.y - tmpinset->Ascent(font)
+                   && y_tmp < cursor.y + tmpinset->Descent(font)) {
+                       x = x - cursor.x;
+                       // The origin of an inset is on the baseline
+                       y = y_tmp - (cursor.y); 
+                       return tmpinset;
+               }
+       } else if (cursor.pos - 1 >= 0 
+                  && cursor.par->GetChar(cursor.pos - 1) == LYX_META_INSET
+                  && cursor.par->GetInset(cursor.pos - 1)
+                  && cursor.par->GetInset(cursor.pos - 1)->Editable()) {
+               _buffer->text->CursorLeft();
+               Inset * result = checkInsetHit(x, y);
+               if (result == 0) {
+                       _buffer->text->CursorRight();
+                       return 0;
+               } else {
+                       return result;
+               }
+       }
+       return 0;
+}
+
+
+int BufferView::workAreaExpose()
+{
+       if (!work_area || !work_area->form->visible) 
+               return 1;
+
+       // this is a hack to ensure that we only call this through
+       // BufferView::redraw().
+       if (!lgb_hack) {
+               redraw();
+       }
+       
+       static int work_area_width = work_area->w;
+       static int work_area_height = work_area->h;
+
+       bool widthChange = work_area->w != work_area_width;
+       bool heightChange = work_area->h != work_area_height;
+
+       // update from work area
+       work_area_width = work_area->w;
+       work_area_height = work_area->h;
+       if (_buffer != 0) {
+               if (widthChange) {
+                       // All buffers need a resize
+                       bufferlist.resize();
+               } else if (heightChange) {
+                       // Rebuild image of current screen
+                       updateScreen();
+                       // fitCursor() ensures we don't jump back
+                       // to the start of the document on vertical
+                       // resize
+                       fitCursor();
+
+                       // The main window size has changed, repaint most stuff
+                       redraw();
+                       // ...including the minibuffer
+                       _owner->getMiniBuffer()->Init();
+
+               } else if (screen) screen->Redraw();
+       } else {
+               // Grey box when we don't have a buffer
+               fl_winset(FL_ObjWin(work_area));
+               fl_rectangle(1, work_area->x, work_area->y,
+                            work_area->w, work_area->h, FL_GRAY63);
+       }
+
+       // always make sure that the scrollbar is sane.
+       updateScrollbar();
+       _owner->updateLayoutChoice();
+       return 1;
+}
+
+
+// Callback for cursor timer
+void BufferView::CursorToggleCB(FL_OBJECT *ob, long)
+{
+       BufferView *view = (BufferView*) ob->u_vdata;
+       
+       /* quite a nice place for asyncron Inset updating, isn't it? */
+       // actually no! This is run even if no buffer exist... so (Lgb)
+       if (view && !view->_buffer) {
+               goto set_timer_and_return;
+       }
+#ifdef WITH_WARNINGS
+#warning NOTE!
+#endif
+
+       // On my quest to solve the gs rendre hangups I am now
+       // disabling the SIGHUP completely, and will do a wait
+       // now and then instead. If the guess that xforms somehow
+       // destroys something is true, this is likely (hopefully)
+       // to solve the problem...at least I hope so. Lgb
+
+       // ...Ok this seems to work...at least it does not make things
+       // worse so far. However I still see gs processes that hangs.
+       // I would really like to know _why_ they are hanging. Anyway
+       // the solution without the SIGCHLD handler seems to be easier
+       // to debug.
+
+       // When attaching gdb to a a running gs that hangs it shows
+       // that it is waiting for input(?) Is it possible for us to
+       // provide that input somehow? Or figure what it is expecing
+       // to read?
+
+       // One solution is to, after some time, look if there are some
+       // old gs processes still running and if there are: kill them
+       // and re render.
+
+       // Another solution is to provide the user an option to rerender
+       // a picture. This would, for the picture in question, check if
+       // there is a gs running for it, if so kill it, and start a new
+       // rendering process.
+
+       // these comments posted to lyx@via
+//#if 0
+       {
+       int status = 1;
+       int pid = waitpid((pid_t)0, &status, WNOHANG);
+       if (pid == -1) // error find out what is wrong
+               ; // ignore it for now.
+       else if (pid > 0)
+               sigchldhandler(pid, &status);
+       }
+//#endif
+       if (InsetUpdateList) 
+               UpdateInsetUpdateList();
+
+       if (view && !view->screen){
+               goto set_timer_and_return;
+       }
+
+       if (view->lyx_focus && view->work_area_focus) {
+               if (!view->_buffer->the_locking_inset){
+                       view->screen->CursorToggle();
+               } else {
+                       view->_buffer->the_locking_inset->
+                               ToggleInsetCursor();
+               }
+               goto set_timer_and_return;
+       } else {
+               // Make sure that the cursor is visible.
+               if (!view->_buffer->the_locking_inset){
+                       view->screen->ShowCursor();
+               } else {
+                       if (!view->_buffer->the_locking_inset->isCursorVisible())
+                               view->_buffer->the_locking_inset->
+                                       ToggleInsetCursor();
+               }
+
+               // This is only run when work_area_focus or lyx_focus is false.
+               Window tmpwin;
+               int tmp;
+               XGetInputFocus(fl_display, &tmpwin, &tmp);
+               lyxerr.debug(LString("tmpwin: ") + int(tmpwin));
+               lyxerr.debug(LString("window: ")
+                            + int(view->_owner->getForm()->window));
+               lyxerr.debug(LString("work_area_focus: ")
+                            + int(view->work_area_focus));
+               lyxerr.debug(LString("lyx_focus      : ")
+                            + int(view->lyx_focus));
+               if (tmpwin != view->_owner->getForm()->window) {
+                       view->lyx_focus = false;
+                       goto skip_timer;
+               } else {
+                       view->lyx_focus = true;
+                       if (!view->work_area_focus)
+                               goto skip_timer;
+                       else
+                               goto set_timer_and_return;
+               }
+       }
+
+  set_timer_and_return:
+       fl_set_timer(ob, 0.4);
+  skip_timer:
+       return;
+}
+
+
+int BufferView::WorkAreaSelectionNotify(FL_OBJECT *, Window win,
+                           int /*w*/, int /*h*/, XEvent *event, void */*d*/)
+{
+       if (_buffer == 0) return 0;
+       if (event->type != SelectionNotify)
+               return 0;
+
+       Atom tmpatom;
+       unsigned long ul1;
+       unsigned long ul2;
+       unsigned char* uc = 0;
+       int tmpint;
+       screen->HideCursor();
+       BeforeChange();
+       if (event->xselection.type == XA_STRING
+           && event->xselection.property) {
+    
+               if (XGetWindowProperty(
+                       fl_display            /* display */,
+                       win /* w */,
+                       event->xselection.property        /* property */,
+                       0                /* long_offset */,
+                       0                /* long_length */,
+                       false                /* delete */,
+                       XA_STRING                /* req_type */,
+                       &tmpatom               /* actual_type_return */,
+                       &tmpint                /* actual_format_return */,
+                       &ul1      /* nitems_return */,
+                       &ul2      /* bytes_after_return */,
+                       &uc     /* prop_return */
+                       ) != Success) {
+                       return 0;
+               }
+               XFlush(fl_display);
+
+               if (uc){
+                       free(uc);
+                       uc = 0;
+               }
+
+               if (XGetWindowProperty(
+                       fl_display           /* display */,
+                       win              /* w */,
+                       event->xselection.property           /* property */,
+                       0                /* long_offset */,
+                       ul2/4+1                /* long_length */,
+                       True                /* delete */,
+                       XA_STRING                /* req_type */,
+                       &tmpatom               /* actual_type_return */,
+                       &tmpint                /* actual_format_return */,
+                       &ul1      /* nitems_return */,
+                       &ul2      /* bytes_after_return */,
+                       &uc     /* prop_return */
+                       ) != Success) {
+                       return 0;
+               }
+               XFlush(fl_display);
+        
+               if (uc){
+                       if (!ascii_type)
+                               _buffer->text->
+                                       InsertStringA((char*)uc);
+                       else
+                               _buffer->text->
+                                       InsertStringB((char*)uc);
+                       free(uc);
+                       uc = 0;
+               }
+    
+               _buffer->update(1);
+       }
+       return 0;
+}
+
+
+void BufferView::cursorPrevious()
+{
+       if (!currentBuffer()->text->cursor.row->previous) return;
+       
+       long y = getScreen()->first;
+       Row* cursorrow = currentBuffer()->text->cursor.row;
+       currentBuffer()->text->
+         SetCursorFromCoordinates(currentBuffer()->text->
+                                  cursor.x_fix,
+                                  y);
+       currentBuffer()->text->FinishUndo();
+       /* this is to allow jumping over large insets */
+       if ((cursorrow == currentBuffer()->text->cursor.row))
+         currentBuffer()->text->CursorUp();
+       
+       if (currentBuffer()->text->cursor.row->height < work_area->h)
+         getScreen()->Draw(currentBuffer()->text->cursor.y
+                           - currentBuffer()->text->cursor.row->baseline
+                           + currentBuffer()->text->cursor.row->height
+                           - work_area->h +1 );
+}
+
+
+void BufferView::cursorNext()
+{
+       if (!currentBuffer()->text->cursor.row->next) return;
+       
+       long y = getScreen()->first;
+       currentBuffer()->text->GetRowNearY(y);
+       Row* cursorrow = currentBuffer()->text->cursor.row;
+       currentBuffer()->text->
+               SetCursorFromCoordinates(currentBuffer()->text->
+                                        cursor.x_fix, 
+                                        y + work_area->h);
+       currentBuffer()->text->FinishUndo();
+       /* this is to allow jumping over large insets */
+       if ((cursorrow == currentBuffer()->text->cursor.row))
+         currentBuffer()->text->CursorDown();
+       
+       if (currentBuffer()->text->cursor.row->height < work_area->h)
+         getScreen()->Draw(currentBuffer()->text->cursor.y
+                           - currentBuffer()->text->cursor.row->baseline);
+}
+
+
+bool BufferView::available() const
+{
+       if (_buffer && _buffer->text) return true;
+       return false;
+}
+
+
+void BufferView::savePosition()
+{
+       backstack->push(currentBuffer()->getFileName(),
+                       currentBuffer()->text->cursor.x,
+                       currentBuffer()->text->cursor.y);
+}
+
+
+void BufferView::restorePosition()
+{
+       int  x, y;
+       LString fname = backstack->pop(&x, &y);
+       
+       BeforeChange();
+       Buffer *b = (bufferlist.exists(fname)) ? bufferlist.getBuffer(fname):
+               bufferlist.loadLyXFile(fname); // don't ask, just load it
+       setBuffer(b);
+       currentBuffer()->text->SetCursorFromCoordinates(x, y);
+       currentBuffer()->update(0);
+} 
+
diff --git a/src/BufferView.h b/src/BufferView.h
new file mode 100644 (file)
index 0000000..64a2c0d
--- /dev/null
@@ -0,0 +1,158 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#ifndef _BUFFER_VIEW_H
+#define _BUFFER_VIEW_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+
+class LyXView;
+class Buffer;
+class LyXScreen;
+class BackStack;
+class Inset;
+
+///
+class BufferView {
+public:
+       ///
+       BufferView(LyXView *owner, int ,int ,int, int);
+        ///
+        ~BufferView();
+       ///
+       Buffer *currentBuffer() { return _buffer; }
+       ///
+       FL_OBJECT *getWorkArea() { return work_area; }
+       ///
+       void setBuffer(Buffer *b);
+       ///
+       void resize();
+       ///
+       void redraw();
+       ///
+       void fitCursor();
+       ///
+       void update();
+       ///
+       void updateScrollbar();
+       ///
+       void redoCurrentBuffer();
+       ///
+       int resizeCurrentBuffer();
+       ///
+       void gotoError();
+       ///
+       void cursorPrevious();
+       ///
+       void cursorNext();
+       /// 
+       bool available() const;
+       ///
+       LyXView *getOwner() { return _owner; }
+       ///
+       LyXScreen *getScreen()
+       {
+               fl_set_timer(timer_cursor, 0.4);
+               return screen;
+       }
+        ///
+        void savePosition();
+        ///
+        void restorePosition();
+private:
+       /// Update pixmap of screen
+       void updateScreen();
+       ///
+       int workAreaExpose();
+       ///
+       void create_view(int, int, int, int);
+       ///
+       Inset * checkInsetHit(int &x, int &y);
+       /// 
+       int ScrollUp(long time);
+       ///
+       int ScrollDown(long time);
+       ///
+       void ScrollUpOnePage(long /*time*/);
+       ///
+       void ScrollDownOnePage(long /*time*/);
+
+       /// A callback for the up arrow in the scrollbar.
+       static void UpCB(FL_OBJECT *ob, long);
+
+       /// A callback for the slider in the scrollbar.
+       static void ScrollCB(FL_OBJECT *ob, long);
+
+       /// A callback for the down arrow in the scrollbar.
+       static void DownCB(FL_OBJECT *ob, long);
+
+       /** Work area free object handler
+        */
+       static int work_area_handler(FL_OBJECT *, int event,
+                                    FL_Coord, FL_Coord, int key, void *xev);
+       ///
+       int WorkAreaMotionNotify(FL_OBJECT *ob,
+                                Window win,
+                                int w, int h,
+                                XEvent *ev, void *d);
+       ///
+       int WorkAreaSelectionNotify(FL_OBJECT *, Window win,
+                                   int /*w*/, int /*h*/,
+                                   XEvent *event, void */*d*/);
+       ///
+       int WorkAreaButtonPress(FL_OBJECT *ob,
+                               Window win,
+                               int w, int h,
+                               XEvent *ev, void *d);
+       ///
+       int WorkAreaButtonRelease(FL_OBJECT *ob,
+                                 Window win,
+                                 int w, int h,
+                                 XEvent *ev, void *d);
+       ///
+       static void CursorToggleCB(FL_OBJECT *ob, long);
+       ///
+       LyXView *_owner;
+       ///
+       Buffer *_buffer;
+       ///
+       LyXScreen *screen;
+       ///
+       long current_scrollbar_value;
+       ///
+       int work_area_width;
+       ///
+       bool lyx_focus;
+       ///
+       bool work_area_focus;
+       ///
+       FL_OBJECT *work_area;
+       ///
+       FL_OBJECT *figinset_canvas;
+       ///
+       FL_OBJECT *scrollbar;
+       ///
+       FL_OBJECT *button_down;
+       ///
+       FL_OBJECT *button_up;
+       ///
+       FL_OBJECT *timer_cursor;
+        ///
+        BackStack *backstack;
+       ///
+       int last_click_x, last_click_y;
+};
+
+#endif
diff --git a/src/Bullet.C b/src/Bullet.C
new file mode 100644 (file)
index 0000000..82c49e9
--- /dev/null
@@ -0,0 +1,262 @@
+// -*- C++ -*-
+/* Completes the implementation of the Bullet class
+ * It defines the various LaTeX commands etc. required to
+ * generate the bullets in the bullet-panel's.
+ *
+ * This file is part of
+ *======================================================
+ *
+ *           LyX, The Document Processor
+ *
+ *           Copyright (C) 1997-1998 Allan Rae
+ *           and the LyX Team
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "Bullet.h"
+
+// will need these later if still using full text as below
+// \usepackage{latexsym,pifont,amssymb}
+// and wasysym when that panel is created
+
+
+Bullet::Bullet(const int f, const int c, const int s)
+  : font(f), character(c), size(s), user_text(0)
+{
+       if (f < MIN || f >= FONTMAX) {
+               font = MIN;
+       }
+       if (c < MIN || c >= CHARMAX) {
+               character = MIN;
+       }
+       if (s < MIN || s >= SIZEMAX) {
+               size = MIN;
+       }
+       generateText();
+#ifdef DEBUG_AS_DEFAULT
+       testInvariant();
+#endif
+}
+
+
+LString Bullet::getText()
+{
+       if (user_text == 0) {
+               generateText();
+       }
+       return text;
+}
+
+
+bool operator == (const Bullet & b1, const Bullet & b2)
+{
+       bool result = false;
+
+       if (b1.user_text && b2.user_text) {
+               /* both have valid text */
+               if (b1.text == b2.text) {
+                       result = true;
+               }
+       } else if (((b1.character == b2.character) &&
+                         (b1.font == b2.font)) &&
+                        (b1.size == b2.size)) {
+               result = true;
+       }
+       return result;
+}
+
+
+/*--------------------Private Member Functions-------------------*/
+
+
+void Bullet::generateText()
+{
+       // Assumption:
+       // user hasn't defined their own text and/or I haven't generated
+       // the text for the current font/character settings yet
+       // thus the calling member function should say:
+       //    if (user_text == 0) {
+       //       generateText();
+       //    }
+       // Since a function call is more expensive than a conditional
+       // this is more efficient. Besides this function is internal to
+       // the class so it's only the class author that has access --
+       // external users thus can't make mistakes.
+
+       if ((font >= 0) && (character >= 0)) {
+               text = bulletEntry(font, character);
+               if (size >= 0) {
+                       text = bulletSize(size) + text;
+               }
+               user_text = -1;
+               // text is now defined and doesn't need to be recalculated
+               // unless font/character or text is modified
+       }
+}
+
+
+const LString & Bullet::bulletSize(const short & s)
+{
+       // use a parameter rather than hard code `size' in here
+       // in case some future function may want to retrieve
+       // an arbitrary entry.
+       // See additional comments in bulletEntry() below.
+
+       static LString const BulletSize[SIZEMAX] = {
+               "\\tiny",  "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", 
+               "\\large", "\\Large",      "\\LARGE",        "\\huge",  "\\Huge"
+       };
+
+       return BulletSize[s];
+}
+
+
+const LString & Bullet::bulletEntry(const short & f, const short & c)
+{
+       // Despite how this may at first appear the static local variables
+       // are only initialized once..
+       // This is a work-around to avoid the "Static Initialization Problem"
+       // and should work for all compilers. See "C++ FAQs" by Cline and Lomow,
+       // Addison-Wesley, 1994, FAQ-180 pp169-171 for an explanation.
+       // Doing things this way also makes it possible to generate `text' at
+       // the time of construction.  It also encapsulates the conversion
+       // of font, character and size entries to text.
+
+       // The single 2-dim array had to be changed to multiple 1-dim arrays
+       // to get around a compiler bug in an earler version of gcc (< 2.7.2.1)
+       // static LString const BulletPanels[FONTMAX][CHARMAX] = {
+       static LString const BulletPanel0[CHARMAX] = {
+               /* standard */ 
+               "\\normalfont\\bfseries{--}", "\\(\\vdash\\)",
+               "\\(\\dashv\\)", "\\(\\flat\\)", "\\(\\natural\\)",
+               "\\(\\sharp\\)", "\\(\\ast\\)", "\\(\\star\\)", 
+               "\\(\\bullet\\)", "\\(\\circ\\)", "\\(\\cdot\\)",
+               "\\(\\dagger\\)", "\\(\\bigtriangleup\\)",
+               "\\(\\bigtriangledown\\)", "\\(\\triangleleft\\)",
+               "\\(\\triangleright\\)", "\\(\\lhd\\)", "\\(\\rhd\\)",
+               "\\(\\oplus\\)", "\\(\\ominus\\)", "\\(\\otimes\\)",
+               "\\(\\oslash\\)", "\\(\\odot\\)", "\\(\\spadesuit\\)",
+               "\\(\\diamond\\)", "\\(\\Diamond\\)", "\\(\\Box\\)",
+               "\\(\\diamondsuit\\)", "\\(\\heartsuit\\)", 
+               "\\(\\clubsuit\\)", "\\(\\rightarrow\\)", "\\(\\leadsto\\)",
+               "\\(\\rightharpoonup\\)", "\\(\\rightharpoondown\\)", 
+               "\\(\\Rightarrow\\)", "\\(\\succ\\)"
+       };
+       static LString const BulletPanel1[CHARMAX] = {
+               /* amssymb */
+               "\\(\\Rrightarrow\\)", "\\(\\rightarrowtail\\)",
+               "\\(\\twoheadrightarrow\\)", "\\(\\rightsquigarrow\\)",
+               "\\(\\looparrowright\\)", "\\(\\multimap\\)",
+               "\\(\\boxtimes\\)", "\\(\\boxplus\\)", "\\(\\boxminus\\)",
+               "\\(\\boxdot\\)", "\\(\\divideontimes\\)", "\\(\\Vvdash\\)",
+               "\\(\\lessdot\\)", "\\(\\gtrdot\\)", "\\(\\maltese\\)",
+               "\\(\\bigstar\\)", "\\(\\checkmark\\)", "\\(\\Vdash\\)",
+               "\\(\\backsim\\)", "\\(\\thicksim\\)",
+               "\\(\\centerdot\\)", "\\(\\circleddash\\)",
+               "\\(\\circledast\\)", "\\(\\circledcirc\\)",
+               "\\(\\vartriangleleft\\)", "\\(\\vartriangleright\\)",
+               "\\(\\vartriangle\\)", "\\(\\triangledown\\)",
+               "\\(\\lozenge\\)", "\\(\\square\\)", "\\(\\blacktriangleleft\\)",
+               "\\(\\blacktriangleright\\)", "\\(\\blacktriangle\\)",
+               "\\(\\blacktriangledown\\)", "\\(\\blacklozenge\\)",
+               "\\(\\blacksquare\\)"
+       };
+       static LString const BulletPanel2[CHARMAX] = {
+               /* psnfss1 */
+               "\\ding{108}", "\\ding{109}",
+               "\\ding{119}", "\\Pisymbol{psy}{197}",
+               "\\Pisymbol{psy}{196}", "\\Pisymbol{psy}{183}",
+               "\\ding{71}", "\\ding{70}",
+               "\\ding{118}", "\\ding{117}",
+               "\\Pisymbol{psy}{224}", "\\Pisymbol{psy}{215}",
+               "\\ding{111}", "\\ding{112}",
+               "\\ding{113}", "\\ding{114}",
+               "\\Pisymbol{psy}{68}", "\\Pisymbol{psy}{209}",
+               "\\ding{120}", "\\ding{121}",
+               "\\ding{122}", "\\ding{110}",
+               "\\ding{115}", "\\ding{116}",
+               "\\Pisymbol{psy}{42}", "\\ding{67}",
+               "\\ding{66}", "\\ding{82}",
+               "\\ding{81}", "\\ding{228}",
+               "\\ding{162}", "\\ding{163}",
+               "\\ding{166}", "\\ding{167}",
+               "\\ding{226}", "\\ding{227}"
+       };
+       static LString const BulletPanel3[CHARMAX] = {
+               /* psnfss2 */
+               "\\ding{37}", "\\ding{38}",
+               "\\ding{34}", "\\ding{36}",
+               "\\ding{39}", "\\ding{40}",
+               "\\ding{41}", "\\ding{42}",
+               "\\ding{43}", "\\ding{44}",
+               "\\ding{45}", "\\ding{47}",
+               "\\ding{53}", "\\ding{54}",
+               "\\ding{59}", "\\ding{57}",
+               "\\ding{62}", "\\ding{61}",
+               "\\ding{55}", "\\ding{56}",
+               "\\ding{58}", "\\ding{60}",
+               "\\ding{63}", "\\ding{64}",
+               "\\ding{51}", "\\ding{52}",
+               "\\Pisymbol{psy}{170}", "\\Pisymbol{psy}{167}",
+               "\\Pisymbol{psy}{168}", "\\Pisymbol{psy}{169}",
+               "\\ding{164}", "\\ding{165}",
+               "\\ding{171}", "\\ding{168}",
+               "\\ding{169}", "\\ding{170}"
+       };
+       static LString const BulletPanel4[CHARMAX] = {
+               /* psnfss3 */
+               "\\ding{65}", "\\ding{76}",
+               "\\ding{75}", "\\ding{72}",
+               "\\ding{80}", "\\ding{74}",
+               "\\ding{78}", "\\ding{77}",
+               "\\ding{79}", "\\ding{85}",
+               "\\ding{90}", "\\ding{98}",
+               "\\ding{83}", "\\ding{84}",
+               "\\ding{86}", "\\ding{87}",
+               "\\ding{88}", "\\ding{89}",
+               "\\ding{92}", "\\ding{91}",
+               "\\ding{93}", "\\ding{105}",
+               "\\ding{94}", "\\ding{99}",
+               "\\ding{103}", "\\ding{104}",
+               "\\ding{106}", "\\ding{107}",
+               "\\ding{68}", "\\ding{69}",
+               "\\ding{100}", "\\ding{101}",
+               "\\ding{102}", "\\ding{96}",
+               "\\ding{95}", "\\ding{97}"
+       };
+       static LString const BulletPanel5[CHARMAX] = {
+               /* psnfss4 */
+               "\\ding{223}", "\\ding{224}",
+               "\\ding{225}", "\\ding{232}",
+               "\\ding{229}", "\\ding{230}",
+               "\\ding{238}", "\\ding{237}",
+               "\\ding{236}", "\\ding{235}",
+               "\\ding{234}", "\\ding{233}",
+               "\\ding{239}", "\\ding{241}",
+               "\\ding{250}", "\\ding{251}",
+               "\\ding{49}", "\\ding{50}",
+               "\\ding{217}", "\\ding{245}",
+               "\\ding{243}", "\\ding{248}",
+               "\\ding{252}", "\\ding{253}",
+               "\\ding{219}", "\\ding{213}",
+               "\\ding{221}", "\\ding{222}",
+               "\\ding{220}", "\\ding{212}",
+               "\\Pisymbol{psy}{174}", "\\Pisymbol{psy}{222}",
+               "\\ding{254}", "\\ding{242}",
+               "\\ding{231}", "\\Pisymbol{psy}{45}"
+       };  /* LString const BulletPanels[][] */
+
+       static LString const * BulletPanels[FONTMAX] = {
+               BulletPanel0, BulletPanel1,
+               BulletPanel2, BulletPanel3,
+               BulletPanel4, BulletPanel5
+       };
+
+       return BulletPanels[f][c];
+}
diff --git a/src/Bullet.h b/src/Bullet.h
new file mode 100644 (file)
index 0000000..2e4a73a
--- /dev/null
@@ -0,0 +1,278 @@
+// -*- C++ -*-
+/* This is the bullet class definition file.
+ * This file is part of
+ *======================================================
+ *
+ *           LyX, The Document Processor
+ *
+ *           Copyright (C) 1997-1998 Allan Rae
+ *           and the LyX Team
+ *
+ *======================================================*/
+
+//    $Id: Bullet.h,v 1.1 1999/09/27 18:44:36 larsbj Exp $
+
+#ifndef BULLET_H_
+#define BULLET_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+#ifdef DEBUG_AS_DEFAULT
+#include <assert.h>
+#endif
+
+///
+class Bullet {
+public:
+       ///
+       Bullet(const int f = -1, const int c = -1, const int s = -1);
+
+       ///
+       Bullet(const LString &);
+
+       ///
+       ~Bullet();
+
+       ///
+       void setCharacter(const int);
+       ///
+       void setFont(const int);
+       ///
+       void setSize(const int);
+       ///
+       void setText(const LString &);
+       ///
+       int getCharacter() const;
+       ///
+       int getFont() const;
+       ///
+       int getSize() const;
+       ///
+       LString getText() const;
+       ///
+       LString getText();
+       ///
+       char const * c_str();
+       ///
+       Bullet & operator = (const Bullet &);
+       ///
+       friend bool operator == (const Bullet &, const Bullet &);
+       ///
+       friend bool operator != (const Bullet & b1, const Bullet & b2)
+               {
+                       return !(b1 == b2);
+               }
+       
+
+protected:
+#ifdef DEBUG_AS_DEFAULT
+       void testInvariant() const
+               {
+                       assert(font >= MIN);
+                       assert(font < FONTMAX);
+                       assert(character >= MIN);
+                       assert(character < CHARMAX);
+                       assert(size >= MIN);
+                       assert(size < SIZEMAX);
+                       assert(user_text >= -1);
+                       assert(user_text <= 1);
+                       // now some relational/operational tests
+                       if (user_text == 1) {
+                               assert(font == -1 && (character == -1 && size == -1));
+                               //        assert(!text.empty()); // this isn't necessarily an error
+                       }
+                       //      else if (user_text == -1) {
+                       //        assert(!text.empty()); // this also isn't necessarily an error
+                       //      }
+                       //      else {
+                       //        // user_text == 0
+                       //        assert(text.empty()); // not usually true
+                       //      }
+               }
+#endif
+
+private:
+       /**
+         This enum makes adding additional panels or changing panel sizes
+         easier. Since you only need change these values for all tests to
+         be correct for the new values.
+         
+         Note: MAX means the size of the array so to test you need:
+         (x < MAX)  *not* (x <= MAX)
+         */
+       enum {
+               ///
+               MIN = -1,
+               ///
+               FONTMAX = 6,
+               ///
+               CHARMAX = 36,
+               ///
+               SIZEMAX = 10
+       };
+
+       ///
+       void generateText();
+       ///
+       static const LString & bulletSize(const short &);
+       ///
+       static const LString & bulletEntry(const short &, const short &);
+
+       ///
+       short font;
+       ///
+       short character;
+       ///
+       short size;
+       
+       // size, character and font are array indices to access 
+       // the predefined arrays of LaTeX equivalent strings.
+
+       /** flag indicates if user has control of text (1)
+         or if I can use it to generate LStrings (0)
+         or have already (-1)
+         */
+       short user_text; 
+
+       //NOTE: Arranging these four shorts above to be together
+       //      like this should ensure they are in a single cache line
+       /** text may contain a user-defined LaTeX symbol command
+         or one generated internally from the font, character
+         and size settings.
+         */
+       LString text;
+};
+
+
+/*----------------Inline Bullet Member Functions------------------*/
+
+inline Bullet::Bullet(const LString & t) 
+  :  font(MIN), character(MIN), size(MIN), user_text(1), text(t)
+{
+#ifdef DEBUG_AS_DEFAULT
+       testInvariant();
+#endif
+}
+
+
+inline Bullet::~Bullet()
+{}
+
+
+inline void Bullet::setCharacter(const int c)
+{
+       if (c < MIN || c >= CHARMAX) {
+               character = MIN;
+       }
+       else {
+               character = c;
+       }
+       user_text = 0;
+#ifdef DEBUG_AS_DEFAULT
+       testInvariant();
+#endif
+}
+
+
+inline void Bullet::setFont(const int f)
+{
+       if (f < MIN || f >= FONTMAX) {
+               font = MIN;
+       }
+       else {
+               font = f;
+       }
+       user_text = 0;
+#ifdef DEBUG_AS_DEFAULT
+       testInvariant();
+#endif
+}
+
+
+inline void Bullet::setSize(const int s)
+{
+       if (s < MIN || s >= SIZEMAX) {
+               size = MIN;
+       }
+       else {
+               size = s;
+       }
+       user_text = 0;
+#ifdef DEBUG_AS_DEFAULT
+       testInvariant();
+#endif
+}
+
+
+inline void Bullet::setText(const LString & t)
+{
+       font = character = size = MIN;
+       user_text = 1;
+       text = t;
+#ifdef DEBUG_AS_DEFAULT
+       testInvariant();
+#endif
+}
+
+
+inline int Bullet::getCharacter() const
+{
+       return character;
+}
+
+
+inline int Bullet::getFont() const
+{
+       return font;
+}
+
+
+inline int Bullet::getSize() const
+{
+       return size;
+}
+
+
+inline LString Bullet::getText() const
+{
+       return text;
+}
+
+
+inline Bullet & Bullet::operator = (const Bullet & b)
+{
+#ifdef DEBUG_AS_DEFAULT
+       b.testInvariant();
+#endif
+       font = b.font;
+       character = b.character;
+       size = b.size;
+       user_text = b.user_text;
+       text = b.text;
+#ifdef DEBUG_AS_DEFAULT
+    this->testInvariant();
+#endif
+       return *this;
+}
+
+
+inline const char * Bullet::c_str()
+{
+       return this->getText().c_str();
+}
+
+
+/*-----------------End Bullet Member Functions-----------------*/
+
+/** The four LaTeX itemize environment default bullets
+  */
+static Bullet const ITEMIZE_DEFAULTS[4] = { Bullet( 0, 8 ),//"\\(\\bullet\\)"
+                                            Bullet( 0, 0 ),//"\\normalfont\\bfseries{--}"
+                                            Bullet( 0, 6 ),//"\\(\\ast\\)"
+                                            Bullet( 0,10 ) };//"\\(\\cdot\\)"
+#endif /* BULLET_H_ */
diff --git a/src/Chktex.C b/src/Chktex.C
new file mode 100644 (file)
index 0000000..35c6ba5
--- /dev/null
@@ -0,0 +1,99 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor        
+ *          Copyright (C) 1995 Matthias Ettrich
+ *           Copyright (C) 1995-1998 The LyX Team.
+ *
+ *           This file is Copyright (C) 1997-1998
+ *           Asger Alstrup
+ *
+ *======================================================
+ */
+
+#include <config.h>
+
+#include <stdlib.h> // atoi
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "Chktex.h"
+#include "LaTeX.h" // TeXErrors
+#include "filetools.h"
+#include "lyxlex.h"
+#include "FileInfo.h"
+#include "error.h"
+#include "syscall.h"
+#include "syscontr.h"
+#include "pathstack.h"
+#include "gettext.h"
+
+//     $Id: Chktex.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $    
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: Chktex.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+
+/*
+ * CLASS Chktex
+ */
+
+Chktex::Chktex(LString const & chktex, LString const & f, LString const & p)
+               : cmd(chktex), file(f), path(p)
+{
+}
+
+
+int Chktex::run(TeXErrors &terr)
+{
+       // run bibtex
+       LString log = ChangeExtension(file, ".log", true);
+       LString tmp = cmd + " -q -v0 -b0 -x " + file + " -o " + log;
+        Systemcalls one;
+       int result= one.Startscript(Systemcalls::System, tmp);
+       if (result == 0) {
+               result = scanLogFile(terr);
+       } else {
+               result = -1;
+       }
+       return result;
+}
+
+
+int Chktex::scanLogFile(TeXErrors &terr)
+{
+       LString token;
+       int retval = 0;
+
+       LyXLex lex(NULL, 0);
+
+       LString tmp = ChangeExtension(file, ".log", true);
+
+       if (!lex.setFile(tmp)) {
+               // Unable to open file. Return at once
+               return -1;
+       }
+
+       while (lex.IsOK()) {
+               if (lex.EatLine())
+                       token = lex.GetString();
+               else // blank line in the file being read
+                       continue;
+
+               LString srcfile, line, pos, warno, warning;
+               token.split(srcfile, ':');
+               token.split(line, ':');
+               token.split(pos, ':');
+               token.split(warno, ':');
+               token.split(warning, ':');
+
+               int lineno = atoi(line.c_str());
+               warno = _("ChkTeX warning id #") + warno;
+               terr.insertError(lineno, warno, warning);
+               retval++;
+       }
+       return retval;
+}
diff --git a/src/Chktex.h b/src/Chktex.h
new file mode 100644 (file)
index 0000000..5fde426
--- /dev/null
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *
+ *          Copyright (C) 1995 Matthias Ettrich
+ *           Copyright (C) 1995-1998 The LyX Team.
+ *
+ *           This file is Copyright (C) 1997
+ *           Asger Alstrup
+ *
+ *======================================================
+ */
+
+#ifndef _CHKTEX_H
+#define _CHKTEX_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+class LyXLex;
+class TeXErrors;
+
+///
+class Chktex {
+public:
+       /**
+         cmd = the chktex command, file = name of the (temporary) latex file,
+         path = name of the files original path.
+         */
+       Chktex(LString const & cmd, LString const & file,
+              LString const & path);
+       
+       /** Runs chktex.
+         Returns -1 if fail, number of messages otherwise.
+         */
+       int run(TeXErrors &);
+private:
+       ///
+       int scanLogFile(TeXErrors &);
+
+       ///
+       LString cmd;
+
+       ///
+       LString file;
+       
+       ///
+       LString path;
+};
+
+#endif
diff --git a/src/DepTable.C b/src/DepTable.C
new file mode 100644 (file)
index 0000000..15aba4a
--- /dev/null
@@ -0,0 +1,168 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *          Copyright (C) 1995 Matthias Ettrich
+ *           Copyright (C) 1995-1998 The LyX Team.
+ *
+ *           This file is Copyright (C) 1996-1998
+ *           Lars Gullik Bjønnes
+ *
+ * ======================================================
+ */
+
+#include <config.h>
+
+#include "DepTable.h"
+#include "lyxlib.h"
+#include "filetools.h"
+
+DepTable::DepTable()
+{
+       new_sum = 0;
+       old_sum = 0;
+       next = NULL;
+}
+
+
+DepTable::DepTable(LString const & f,
+                  bool upd,
+                  unsigned long one,
+                  unsigned long two)
+{
+       // not quite sure if this is the correct place for MakeAbsPath
+       file = MakeAbsPath(f);
+       new_sum = 0; old_sum = 0;
+       if (one != 0)
+               new_sum = one;
+       if (two != 0)
+               old_sum = two;
+       if (upd) {
+               old_sum = new_sum;
+               new_sum = lyxsum(file.c_str());
+       }
+       if (lyxerr.debugging()) {
+               char tmp1[256];
+               char tmp2[256];
+               sprintf(tmp1, "%lu", new_sum);
+               sprintf(tmp2, "%lu", old_sum);
+               lyxerr.debug("New file inserted in deplog: " + 
+                            file + " " +
+                            tmp1 + " " + tmp2);
+       }
+       next = NULL;
+}
+
+
+void DepTable::insert(LString const & fi,
+                     bool upd,
+                     unsigned long one,
+                     unsigned long two)
+{
+       // not quite sure if this is the correct place for MakeAbsPath
+       LString f = MakeAbsPath(fi);
+       if (f == file) return; // exist already in the log
+       if (next)
+               next->insert(f, upd, one, two);
+       else
+               next = new DepTable(f, upd, one, two);
+}
+               
+
+void DepTable::update()
+{
+       if (!file.empty()) {
+               old_sum = new_sum;
+               new_sum = lyxsum(file.c_str());
+               if (lyxerr.debugging()) {
+                       char tmp1[256];
+                       char tmp2[256];
+                       sprintf(tmp1, "%lu", new_sum);
+                       sprintf(tmp2, "%lu", old_sum);
+                       lyxerr.debug("update: " + file + " " +
+                                    tmp1 + " " + tmp2);
+               }
+       }
+       if (next) next->update();
+}
+
+
+bool DepTable::sumchange()
+{
+       bool ret = false;
+       
+       if (!file.empty()) {
+               if (old_sum != new_sum) ret = true;
+       }
+       if (!ret && next) ret = next->sumchange();
+
+       return ret;
+}
+
+
+bool DepTable::haschanged(LString const & f)
+{
+       // not quite sure if this is the correct place for MakeAbsPath
+       LString fil = MakeAbsPath(f);
+       bool ret = false;
+
+       if (!fil.empty() && !file.empty() && fil == file) {
+               if (new_sum != old_sum && new_sum != 0)
+                       ret = true;
+       }
+       if (!ret && next) ret = next->haschanged(fil);
+       return ret;
+}
+
+
+void DepTable::write(LString const&f)
+{
+       FilePtr fp(f, FilePtr::write);
+       if (fp() && next) next->write(fp());
+}
+
+
+void DepTable::read(LString const &f)
+{
+       FilePtr fp(f, FilePtr::read);
+       if (fp()) { // file opened
+               char nome[256];
+               unsigned long one = 0;
+               unsigned long two = 0;
+               // scan the file line by line
+               // return true if the two numbers on the line is different
+               int ret = 0;
+               while (!feof(fp())) {
+                       ret = fscanf(fp(), "%s %lu %lu",
+                                    nome, &one, &two);
+                       if (ret !=3) continue;
+                       if (lyxerr.debugging()) {
+                               char tmp1[255];
+                               char tmp2[255];
+                               sprintf(tmp1, "%lu", one);
+                               sprintf(tmp2, "%lu", two);
+                               lyxerr.debug(LString("read dep: ") +
+                                            nome + " " + tmp1 +
+                                            " " + tmp2);
+                       }
+                       insert(LString(nome), false, one, two);
+               }
+       }
+}
+
+
+void DepTable::write(FILE * f)
+{
+       if (lyxerr.debugging()) {
+               char tmp1[255];
+               char tmp2[255];
+               sprintf(tmp1, "%lu", new_sum);
+               sprintf(tmp2, "%lu", old_sum);
+               lyxerr.print("Write dep: " + file + " " +
+                            tmp1 + " " + tmp2);
+       }
+       fprintf(f, "%s %lu %lu\n", file.c_str(),
+               new_sum, old_sum);
+       if (next)
+               next->write(f);
+}
diff --git a/src/DepTable.h b/src/DepTable.h
new file mode 100644 (file)
index 0000000..49cd4e7
--- /dev/null
@@ -0,0 +1,63 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *          Copyright (C) 1995 Matthias Ettrich
+ *        
+ *           This file is Copyright (C) 1996-1998
+ *           Lars Gullik Bjønnes
+ *
+ * ======================================================
+ */
+
+#ifndef _DEP_TABLE_H
+#define _DEP_TABLE_H
+
+#include "LString.h"
+#include <stdio.h>
+
+///
+class DepTable {
+public:
+       ///
+       DepTable();
+       ///
+       /** This one is a little bit harder since we need the absolute
+         filename. Should we insert files with .sty .cls etc as
+         extension? */
+       void insert(LString const &f,
+                   bool upd = false,
+                   unsigned long one = 0,
+                   unsigned long two = 0);
+       ///
+       void update();
+
+       ///
+       void write(LString const &f);
+       ///
+       void read(LString const &f);
+       /// returns true if any of the files has changed
+       bool sumchange();
+       ///
+       bool haschanged(LString const &fil);
+private:
+       ///
+       DepTable(LString const &f,
+                bool upd,
+                unsigned long one,
+                unsigned long two);
+       ///
+       LString file;
+       /// The files new checksum
+       unsigned long new_sum;
+       /// The files old checksum
+       unsigned long old_sum;
+       ///
+       DepTable *next;
+               
+       ///
+       void write(FILE *f);
+};
+
+#endif
diff --git a/src/FileInfo.C b/src/FileInfo.C
new file mode 100644 (file)
index 0000000..125e651
--- /dev/null
@@ -0,0 +1,400 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include "FileInfo.h"
+
+//     $Id: FileInfo.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $  
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: FileInfo.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+#if !S_IRUSR
+# if S_IREAD
+#  define S_IRUSR S_IREAD
+# else
+#  define S_IRUSR 00400
+# endif
+#endif
+
+#if !S_IWUSR
+# if S_IWRITE
+#  define S_IWUSR S_IWRITE
+# else
+#  define S_IWUSR 00200
+# endif
+#endif
+
+#if !S_IXUSR
+# if S_IEXEC
+#  define S_IXUSR S_IEXEC
+# else
+#  define S_IXUSR 00100
+# endif
+#endif
+
+#ifdef STAT_MACROS_BROKEN
+#undef S_ISBLK
+#undef S_ISCHR
+#undef S_ISDIR
+#undef S_ISFIFO
+#undef S_ISLNK
+#undef S_ISMPB
+#undef S_ISMPC
+#undef S_ISNWK
+#undef S_ISREG
+#undef S_ISSOCK
+#endif 
+
+#if !defined(S_ISBLK) && defined(S_IFBLK)
+#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+#endif
+#if !defined(S_ISCHR) && defined(S_IFCHR)
+#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+#endif
+#if !defined(S_ISDIR) && defined(S_IFDIR)
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+#if !defined(S_ISREG) && defined(S_IFREG)
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif
+#if !defined(S_ISFIFO) && defined(S_IFIFO)
+#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+#endif
+#if !defined(S_ISLNK) && defined(S_IFLNK)
+#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#endif
+#if !defined(S_ISSOCK) && defined(S_IFSOCK)
+#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+#endif
+#if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */
+#define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
+#define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
+#endif
+#if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */
+#define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
+#endif
+
+// Since major is a function on SVR4, we can't use `ifndef major'. 
+// might want to put MAJOR_IN_MKDEV for SYSV
+#ifdef MAJOR_IN_MKDEV
+#include <sys/mkdev.h>
+#define HAVE_MAJOR
+#endif
+#ifdef MAJOR_IN_SYSMACROS
+#include <sys/sysmacros.h>
+#define HAVE_MAJOR
+#endif
+#ifdef major           
+#define HAVE_MAJOR
+#endif
+
+#ifndef HAVE_MAJOR
+#define major(dev)  (((dev) >> 8) & 0xff)
+#define minor(dev)  ((dev) & 0xff)
+#define makedev(maj, min)  (((maj) << 8) | (min))
+#endif
+#undef HAVE_MAJOR
+
+
+FileInfo::FileInfo()
+{
+       init();
+}
+
+
+FileInfo::FileInfo(LString const &path, bool link)
+       : fname(path)
+{
+       init();
+       dostat(link);
+}
+
+
+FileInfo::FileInfo(int fildes)
+{
+       init();
+       status = fstat(fildes, buf);
+       if (status) err = errno;
+}
+
+
+FileInfo::~FileInfo()
+{
+       delete[] buf;
+}
+
+
+void FileInfo::init()
+{
+       status = 0;
+       err = NoErr;
+       buf = (struct stat*) new char[sizeof(struct stat)];
+}
+
+
+void FileInfo::dostat(bool link)
+{
+       if (link) {
+               status = lstat(fname.c_str(), buf);
+       } else {
+               status = stat(fname.c_str(), buf);
+       }
+       if (status) err = errno;
+}
+
+
+FileInfo& FileInfo::newFile(LString const &path, bool link)
+{
+       fname = path;
+       
+       status = 0;
+       err = NoErr;
+
+       dostat(link);
+
+       return *this;
+}
+
+
+FileInfo& FileInfo::newFile(int fildes)
+{
+       status = 0;
+       err = NoErr;
+       status = fstat(fildes, buf);
+       if (status) err = errno;
+       return *this;
+}
+
+
+char const *FileInfo::typeIndicator() const
+{
+       if (S_ISDIR(buf->st_mode)) return ("/");
+#ifdef S_ISLNK
+       if (S_ISLNK(buf->st_mode)) return ("@");
+#endif
+#ifdef S_ISFIFO
+       if (S_ISFIFO(buf->st_mode)) return ("|");
+#endif
+#ifdef S_ISSOCK
+       if (S_ISSOCK(buf->st_mode)) return ("=");
+#endif
+       if (S_ISREG(buf->st_mode) && (buf->st_mode & (S_IEXEC | S_IXGRP | S_IXOTH)))
+               return ("*");
+       return "";
+}
+
+
+mode_t FileInfo::getMode() const
+{
+       return buf->st_mode;
+}
+
+long FileInfo::getBlockSize() const
+{
+#ifndef __EMX__
+       return buf->st_blksize; /* Preferred I/O block size */
+#else
+#warning May be fixed in 0.13 (SMiyata)
+       return 512; /* Assume HPFS */
+#endif
+}
+
+void FileInfo::modeString(char *szString) const
+{
+       szString[0] = typeLetter();
+       flagRWX((buf->st_mode & 0700) << 0, &szString[1]);
+       flagRWX((buf->st_mode & 0070) << 3, &szString[4]);
+       flagRWX((buf->st_mode & 0007) << 6, &szString[7]);
+       setSticky(szString);
+       szString[10] = 0;
+}
+
+
+char FileInfo::typeLetter() const
+{
+#ifdef S_ISBLK
+       if (S_ISBLK(buf->st_mode)) return 'b';
+#endif
+       if (S_ISCHR(buf->st_mode)) return 'c';
+       if (S_ISDIR(buf->st_mode)) return 'd';
+       if (S_ISREG(buf->st_mode)) return '-';
+#ifdef S_ISFIFO
+       if (S_ISFIFO(buf->st_mode)) return 'p';
+#endif
+#ifdef S_ISLNK
+       if (S_ISLNK(buf->st_mode)) return 'l';
+#endif
+#ifdef S_ISSOCK
+       if (S_ISSOCK(buf->st_mode)) return 's';
+#endif
+#ifdef S_ISMPC
+       if (S_ISMPC(buf->st_mode)) return 'm';
+#endif
+#ifdef S_ISNWK
+       if (S_ISNWK(buf->st_mode)) return 'n';
+#endif
+       return '?';
+}
+
+
+void FileInfo::flagRWX(unsigned short i, char *szString) const
+{
+       szString[0] = (i & S_IRUSR) ? 'r' : '-';
+       szString[1] = (i & S_IWUSR) ? 'w' : '-';
+       szString[2] = (i & S_IXUSR) ? 'x' : '-';
+}
+
+
+void FileInfo::setSticky(char *szString) const
+{
+#ifdef S_ISUID
+       if (buf->st_mode & S_ISUID) {
+               if (szString[3] != 'x') szString[3] = 'S';
+               else szString[3] = 's';
+       }
+#endif
+#ifdef S_ISGID
+       if (buf->st_mode & S_ISGID) {
+               if (szString[6] != 'x') szString[6] = 'S';
+               else szString[6] = 's';
+       }
+#endif
+#ifdef S_ISVTX
+       if (buf->st_mode & S_ISVTX) {
+               if (szString[9] != 'x') szString[9] = 'T';
+               else szString[9] = 't';
+       }
+#endif
+}
+
+
+time_t FileInfo::getModificationTime() const
+{
+       return buf->st_mtime;
+}
+
+
+time_t FileInfo::getAccessTime() const
+{
+       return buf->st_atime;
+}
+
+
+time_t  FileInfo::getStatusChangeTime() const
+{
+       return buf->st_ctime;
+}
+
+
+nlink_t FileInfo::getNumberOfLinks() const
+{
+       return buf->st_nlink;
+}
+
+
+uid_t  FileInfo::getUid() const
+{
+       return buf->st_uid;
+}
+
+
+gid_t  FileInfo::getGid() const
+{
+       return buf->st_gid;
+}
+
+
+off_t FileInfo::getSize() const
+{
+       return buf->st_size;
+}
+
+
+int FileInfo::getError() const
+{
+       return err;
+}
+
+
+bool FileInfo::isOK() const
+{
+       // DEC cxx 6.0 chokes on this bizarre construct (compiler bug)
+       // return (status) ? false : true;
+       // So I replaced it with a simpler one (JMarc)
+       return status == 0;
+}
+
+
+bool FileInfo::isLink() const
+{
+       return S_ISLNK(buf->st_mode);
+}
+
+
+bool FileInfo::isRegular() const
+{
+       return S_ISREG(buf->st_mode);
+}
+
+
+bool FileInfo::isDir() const
+{
+       return S_ISDIR(buf->st_mode);
+}
+
+
+bool FileInfo::isChar() const
+{
+       return S_ISCHR(buf->st_mode);
+}
+
+
+bool FileInfo::isBlock() const
+{
+       return S_ISBLK(buf->st_mode);
+}
+
+
+bool FileInfo::isFifo() const
+{
+       return S_ISFIFO(buf->st_mode);
+}
+
+
+bool FileInfo::isSocket() const
+{
+#ifdef S_ISSOCK
+       return S_ISSOCK(buf->st_mode);
+#else
+       return false;
+#endif
+}
+
+
+bool FileInfo::access(int p)
+{
+       // if we don't have a filename we fail
+       if (fname.empty()) return false;
+       
+       if (::access(fname.c_str(), p) == 0)
+               return true;
+       else {
+               // If we were really kind, we would also tell why
+               // the file access failed.
+               return false;
+       }
+}
diff --git a/src/FileInfo.h b/src/FileInfo.h
new file mode 100644 (file)
index 0000000..5ed6084
--- /dev/null
@@ -0,0 +1,140 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 1996 Matthias Ettrich
+*           and the LyX Team.
+*
+*======================================================*/
+
+#ifndef _FILE_INFO_H
+#define _FILE_INFO_H
+
+#include <unistd.h>
+#include <time.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "LString.h"
+
+/** Use objects of this class to get information about files. */
+class FileInfo {
+public:
+       ///
+       FileInfo();
+
+       /** Get information about file.
+       If link is true, the information is about the link itself, not
+       the file that is obtained by tracing the links. */
+       FileInfo(LString const &path, bool link = false);
+
+       ///
+       FileInfo(int fildes);
+
+       ///
+       ~FileInfo();
+
+       ///
+       FileInfo& newFile(LString const &path, bool link = false);
+
+       ///
+        FileInfo& newFile(int fildes);
+       
+       /// returns a character describing file type (ls -F)
+       char const *typeIndicator() const;
+
+       ///
+       mode_t getMode() const;
+
+       ///
+       long getBlockSize() const;
+       
+       /// constructs standard mode string (ls style)
+       void modeString(char *szString) const;
+       
+       /// returns a letter describing a file type (ls style)
+       char typeLetter() const;
+       
+       /// builds 'rwx' string describing file access rights
+       void flagRWX(unsigned short i, char *szString) const;
+       
+       /// updates mode string to match suid/sgid/sticky bits
+       void setSticky(char *szString) const;
+
+       ///
+       time_t getModificationTime() const;
+
+       ///
+       time_t getAccessTime() const;
+
+       ///
+       time_t getStatusChangeTime() const;
+
+       ///
+       off_t getSize() const;
+
+       ///
+       nlink_t getNumberOfLinks() const;
+
+       ///
+       uid_t getUid() const;
+       ///
+       gid_t getGid() const;
+       ///
+       bool isOK() const;
+       ///
+       enum perm_test {
+               rperm = R_OK, // test for read permission
+               wperm = W_OK, // test for write permission
+               xperm = X_OK, // test for execute (search) permission
+               eperm = F_OK  // test for existence of file
+       };
+       ///
+       bool access(int p);
+       ///
+       bool writable() { return access(FileInfo::wperm); }
+       ///
+       bool readable() { return access(FileInfo::rperm); }
+       ///
+       bool executable() { return access(FileInfo::xperm); }
+       ///
+       bool exist() { return access(FileInfo::eperm); }
+       ///
+       bool isLink() const;
+       ///
+       bool isRegular() const;
+       ///
+       bool isDir() const;
+       ///
+       bool isChar() const;
+       ///
+       bool isBlock() const;
+       ///
+       bool isFifo() const;
+       ///
+       bool isSocket() const;
+       ///
+       int getError() const;
+       ///
+       enum {
+               ///
+               NoErr = -1
+       };
+private:
+       ///
+       void init();
+       ///
+       void dostat(bool);
+       ///
+       struct stat *buf;
+       ///
+       int status;
+       ///
+       int err;
+       ///
+       LString fname;
+};
+
+#endif
+
diff --git a/src/FontInfo.C b/src/FontInfo.C
new file mode 100644 (file)
index 0000000..71cf6e0
--- /dev/null
@@ -0,0 +1,149 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1997 Asger Alstrup
+ *           and the LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+#include <math.h>      // fabs()
+#include <stdlib.h>    // atoi()
+
+#ifdef __GNUG__
+#pragma implementation "FontInfo.h"
+#endif
+
+#include "FontInfo.h"
+#include "error.h"
+#include "lyxrc.h"     // lyxrc.use_scalable_fonts
+extern LyXRC * lyxrc;
+
+/// Load font close to this size
+LString FontInfo::getFontname(int size)
+{
+       if (!exist())
+               return LString();
+
+       int closestind = -1;
+       double error = 100000;
+
+       for (int i=0; i<matches; i++) {
+               if (sizes[i] == 0) {
+                       // Scalable font should not be considered close
+               } else if (sizes[i] == size) {
+                       lyxerr.debug(LString("Exact font match with\n")
+                                             + strings[i], Error::FONT);
+                       return strings[i];
+               } else if (fabs(sizes[i] - size - 0.1) < error) {
+                       error = fabs(sizes[i] - size - 0.1);
+                       closestind = i;
+               }
+       }
+
+       if (scalable && lyxrc->use_scalable_fonts) {
+               // We can use scalable
+               LString font = resize(strings[scaleindex], size);
+               lyxerr.debug("Using scalable font to get\n"
+                             + font, Error::FONT);
+               return font;
+       }
+
+       // Did any fonts get close?
+       if (closestind == -1) {
+               // No, and we are not allowed to use scalables, so...
+               return LString();
+       }
+
+       // We use the closest match
+       lyxerr.debug(LString("Using closest font match to get size ") + size 
+                     + " with\n" + strings[closestind], Error::FONT);
+       return strings[closestind];
+}
+
+/// Build newly sized font string 
+LString FontInfo::resize(LString const & font, int size) const {
+       // Find the position of the size spec
+       int cut=0, before=0, after=0;
+       for (int i=0; i<font.length(); i++) {
+               if (font[i] == '-') {
+                       cut++;
+                       if (cut==7) {
+                               before = i;
+                       } else if (cut==8) {
+                               after = i;
+                               break;
+                       }
+               }
+       }
+
+       LString head = font;
+       head.substring(0, before);
+       LString tail = font;
+       tail.substring(after,tail.length()-1);
+       return head + size + tail;
+}
+
+/// Set new pattern
+void FontInfo::setPattern(LString const & pat)
+{
+       release();
+       init();
+       pattern = pat;
+}
+
+/// Query font in X11
+void FontInfo::query()
+{
+       if (queried)
+               return;
+
+       if (pattern.empty()) {
+               lyxerr.print("Can not use empty font name for font query.");
+               queried = true;
+               return;
+       }
+
+       char ** list = XListFonts(fl_display, pattern.c_str(), 100, &matches);
+
+       if (list == 0) {
+               // No fonts matched
+               scalable = false;
+               sizes = 0;
+       } else {
+               release();
+               sizes = new int[matches];
+               strings = new LString[matches];
+
+               // We have matches. Run them through
+               for(int i=0; i<matches; i++) {
+                       LString name(list[i]);
+                       sizes[i] = atoi(name.token('-',7).c_str());
+                       strings[i] = name;
+                       if (sizes[i] == 0) {
+                               if (scaleindex == -1) {
+                                       scaleindex = i;
+                               }
+                               scalable = true;
+                       };
+               };
+               XFreeFontNames(list);
+       }
+       queried = true;
+}
+
+/// Release allocated stuff
+void FontInfo::release()
+{
+       if (sizes) {
+               delete [] sizes;
+               sizes = 0;
+       }
+       if (strings) {
+               delete [] strings;
+               strings = 0;
+       }
+}
diff --git a/src/FontInfo.h b/src/FontInfo.h
new file mode 100644 (file)
index 0000000..338733e
--- /dev/null
@@ -0,0 +1,102 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1997 Asger Alstrup
+ *           and the LyX Team.
+ *
+ *======================================================*/
+
+#ifndef _FONTINFO_H_
+#define _FONTINFO_H_ 
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+/** This class manages a font.
+The idea is to create a FontInfo object with a font name pattern with a 
+wildcard at the size field. Then this object can host request for font-
+instances of any given size. If no exact match is found, the closest size
+is chosen instead. If the font is scalable, the flag lyxrc->use_scalable_fonts
+determines whether to allow scalable fonts to give an exact match. */
+class FontInfo {
+public:
+       ///
+       FontInfo() { init(); }
+
+       ///
+       FontInfo(LString const & pat)
+       : pattern(pat) { init(); }
+
+       /// Destructor
+       ~FontInfo() { release(); }
+
+       /// Does any font match our pattern?
+       bool exist() {
+               query();
+               return matches != 0;
+       }
+
+       /// Is this font scalable?
+       bool isScalable() {
+               query();
+               return scalable;
+       }
+
+       /// Get existing pattern
+       LString getPattern() const { return pattern; }
+
+       /// Set new pattern
+       void setPattern(LString const & pat);
+
+       /** Return full name of font close to this size.
+         If impossible, result is the empty string */
+       LString getFontname(int size);
+private:
+       /// Font pattern (with wildcard for size)
+       LString pattern;
+
+       /// Available size list
+       int * sizes;
+
+       /// Corresponding name list
+       LString * strings;
+
+       /// Number of matches
+       int matches;
+
+       /// Did we query X about this font?
+       bool queried;
+
+       /// Is this font scalable?
+       bool scalable;
+
+       /// Which index points to scalable font entry?
+       int scaleindex;
+
+       /// Initialize empty record
+       void init()
+       {
+               sizes = 0;
+               strings = 0;
+               matches = 0;
+               queried = false;
+               scalable = false;
+               scaleindex = -1;
+       }
+
+       /// Release allocated stuff
+       void release();
+
+       /// Ask X11 about this font pattern
+       void query();
+
+       /// Build newly sized font string 
+       LString resize(LString const &, int size) const;
+};
+#endif
diff --git a/src/FontLoader.C b/src/FontLoader.C
new file mode 100644 (file)
index 0000000..a46495f
--- /dev/null
@@ -0,0 +1,250 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1997 Asger Alstrup
+ *           and the LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+#include <math.h>      // fabs()
+#include <stdlib.h>    // atoi()
+
+#ifdef __GNUG__
+#pragma implementation "FontLoader.h"
+#endif
+
+#include "gettext.h"
+#include "FontLoader.h"
+#include "FontInfo.h"
+#include "error.h"
+#include "lyxrc.h"     // lyxrc.font_*
+extern LyXRC * lyxrc;
+#include "minibuffer.h"
+extern MiniBuffer *minibuffer;
+
+// Initialize font loader
+FontLoader::FontLoader()
+{
+       reset();
+}
+
+// Destroy font loader
+FontLoader::~FontLoader()
+{
+       unload();
+}
+
+// Update fonts after zoom, dpi, font names, or norm change
+// For now, we just ditch all fonts we have. Later, we should
+// reuse the ones that are already loaded.
+void FontLoader::update()
+{
+       unload();
+}
+
+// Reset font loader
+void FontLoader::reset()
+{
+       // Clear font infos, font structs and font metrics
+       for (int i1=0; i1<4; i1++)
+               for (int i2=0; i2<2; i2++)
+                       for (int i3=0; i3<4; i3++) {
+                               fontinfo[i1][i2][i3] = 0;
+                               for (int i4=0; i4<10; i4++) {
+                                       fontstruct[i1][i2][i3][i4] = 0;
+                               }
+                       }
+}
+
+// Unload all fonts
+void FontLoader::unload() 
+{
+       // Unload all fonts
+       for (int i1=0; i1<4; i1++)
+               for (int i2=0; i2<2; i2++)
+                       for (int i3=0; i3<4; i3++) {
+                               if (fontinfo[i1][i2][i3]) {
+                                       delete fontinfo[i1][i2][i3];
+                                       fontinfo[i1][i2][i3] = 0;
+                               }
+                               for (int i4=0; i4<10; i4++) {
+                                       if (fontstruct[i1][i2][i3][i4]) {
+                                               XFreeFont(fl_display, fontstruct[i1][i2][i3][i4]);
+                                               fontstruct[i1][i2][i3][i4] = 0;
+                                       }
+                               }
+                       }
+}
+
+// Get font info
+/* Takes care of finding which font that can match the given request. Tries
+different alternatives. */
+void FontLoader::getFontinfo(LyXFont::FONT_FAMILY family, 
+                            LyXFont::FONT_SERIES series, 
+                            LyXFont::FONT_SHAPE shape)
+{
+       // Do we have the font info already?
+       if (fontinfo[family][series][shape] != 0)
+               return;
+
+       // Special code for the symbol family
+       if (family == LyXFont::SYMBOL_FAMILY){
+               fontinfo[family][series][shape] = new FontInfo("-*-symbol-*");
+               return;
+       }
+
+       // Normal font. Let's search for an existing name that matches.
+       LString ffamily;
+       LString fseries;
+       LString fshape;
+       LString norm = lyxrc->font_norm;
+       LString fontname;
+
+       FontInfo * fi = new FontInfo();
+       fontinfo[family][series][shape] = fi;
+
+       for (int cfam=0; cfam < 2; cfam++) {
+               // Determine family name
+               switch (family) {
+               case LyXFont::ROMAN_FAMILY:
+                       switch (cfam) {
+                       case 0: ffamily = lyxrc->roman_font_name; break;
+                       case 1: ffamily = "-*-times";
+                       default: cfam = 100;
+                       }
+                       break;
+               case LyXFont::SANS_FAMILY:
+                       switch (cfam) {
+                       case 0: ffamily = lyxrc->sans_font_name; break;
+                       case 1: ffamily = "-*-helvetica";
+                       default: cfam = 100;
+                       }
+                       break;
+               case LyXFont::TYPEWRITER_FAMILY:
+                       switch (cfam) {
+                       case 0: ffamily = lyxrc->typewriter_font_name; break;
+                       case 1: ffamily = "-*-courier";
+                       default: cfam = 100;
+                       }
+                       break;
+               default: ;
+               }
+
+               for (int cser=0; cser < 4; cser++) {
+                       // Determine series name
+                       switch (series) {
+                       case LyXFont::MEDIUM_SERIES:
+                               switch (cser) {
+                               case 0: fseries = "-medium"; break;
+                               case 1: fseries = "-book"; break;
+                               case 2: fseries = "-light";
+                               default: cser = 100;
+                               }
+                               break;
+                       case LyXFont::BOLD_SERIES:
+                               switch (cser) {
+                               case 0: fseries = "-bold"; break;
+                               case 1: fseries = "-black"; break;
+                               case 2: fseries = "-demi"; break;
+                               case 3: fseries = "-demibold";
+                               default: cser = 100;
+                               }
+                               break;
+                       default: ;
+                       }
+
+                       for (int csha=0; csha < 2; csha++) {
+                               // Determine shape name
+                               switch (shape) {
+                               case LyXFont::UP_SHAPE:
+                               case LyXFont::SMALLCAPS_SHAPE:
+                                       switch (csha) {
+                                       case 0: fshape = "-r";
+                                       default: csha = 100;
+                                       }
+                                       break;
+                               case LyXFont::ITALIC_SHAPE:
+                                       switch (csha) {
+                                       case 0: fshape = "-i"; break;
+                                       case 1: fshape = "-o";
+                                       default: csha = 100;
+                                       }
+                                       break;
+                               case LyXFont::SLANTED_SHAPE:
+                                       switch (csha) {
+                                       case 0: fshape = "-o"; break;
+                                       case 1: fshape = "-i";
+                                       default: csha = 100;
+                                       }
+                                       break;
+                               default: ;
+                               }
+                               //
+                               fontname = ffamily + fseries + fshape +
+                                          "-normal-*-*-*-*-*-*-*-" + norm;
+                               fi->setPattern(fontname);
+                               if (fi->exist()) {
+                                       return;
+                               }
+                       }
+               }
+       }
+}
+
+/// Do load font
+XFontStruct* FontLoader::doLoad(LyXFont::FONT_FAMILY family, 
+                               LyXFont::FONT_SERIES series, 
+                               LyXFont::FONT_SHAPE shape, 
+                               LyXFont::FONT_SIZE size)
+{
+       getFontinfo(family,series,shape);
+       int fsize = (int) ( (lyxrc->font_sizes[size] * lyxrc->dpi * 
+                               (lyxrc->zoom/100.0) ) / 72.27 + 0.5 );
+
+       LString font = fontinfo[family][series][shape]->getFontname(fsize);
+
+       if (font.empty()) {
+               lyxerr.print("No font matches request. Using 'fixed'.");
+               lyxerr.print("Start LyX as 'lyx -dbg 515' to get more information.");
+               font = "fixed";
+       }
+
+       minibuffer->Store();
+       minibuffer->Set(_("Loading font into X-Server..."));
+
+       XFontStruct* fs = XLoadQueryFont(fl_display, font.c_str());
+
+       if (fs == 0) {
+               if (font=="fixed") {
+                       lyxerr.print("We're doomed. Can't get 'fixed' font.");
+               } else {
+                       lyxerr.print("Could not get font. Using 'fixed'.");
+                       fs = XLoadQueryFont(fl_display, "fixed");
+               }
+       } else {
+               if (lyxerr.debugging(Error::FONT)) {
+                       // Tell user the font matching
+                       LyXFont f;
+                       f.setFamily(family);
+                       f.setSeries(series);
+                       f.setShape(shape);
+                       f.setSize(size);
+                       // The rest of the attributes are not interesting
+                       f.setEmph(LyXFont::INHERIT);
+                       f.setUnderbar(LyXFont::INHERIT);
+                       f.setNoun(LyXFont::INHERIT);
+                       f.setLatex(LyXFont::INHERIT);
+                       f.setColor(LyXFont::INHERIT_COLOR);
+                       lyxerr.print(LString("Font '") + f.stateText() 
+                                     + "' matched by\n" + font + '\n');
+               }
+       }
+       minibuffer->Reset();
+
+       fontstruct[family][series][shape][size] = fs;
+       return fs;
+}
diff --git a/src/FontLoader.h b/src/FontLoader.h
new file mode 100644 (file)
index 0000000..853e2e4
--- /dev/null
@@ -0,0 +1,74 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *           Copyright (C) 1997 Asger Alstrup
+ *                     and the LyX Team.
+ *
+ *======================================================*/
+
+#ifndef _FONTLOADER_H_
+#define _FONTLOADER_H_ 
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+#include "lyxfont.h"
+class LString;
+class FontInfo;
+
+/** This class takes care of loading fonts. It uses FontInfo to make intelligent
+guesses about matching font size, and it tries different tags itself in order
+to match the font loading demands.  Later, I plan to extend this with support 
+for T1Lib, probably via a new class building on this. (Asger) */
+class FontLoader {
+public:
+       ///
+       FontLoader();
+
+       ///
+       ~FontLoader();
+
+       /// Update fonts after zoom, dpi, font names, or norm change
+       void update();
+
+       /// Load font
+       XFontStruct* load(LyXFont::FONT_FAMILY family, 
+                         LyXFont::FONT_SERIES series, 
+                         LyXFont::FONT_SHAPE shape, 
+                         LyXFont::FONT_SIZE size)
+       {
+               if (fontstruct[family][series][shape][size]!=0)
+                       return fontstruct[family][series][shape][size];
+               else
+                       return doLoad(family,series,shape,size);
+       };
+private:
+       /// Array of font structs
+       XFontStruct* fontstruct[4][2][4][10];
+
+       /// Array of font infos
+       FontInfo * fontinfo[4][2][4];
+
+       /// Reset font handler
+       void reset();
+
+       /// Unload all fonts
+       void unload();
+
+       /// Get font info
+       void getFontinfo(LyXFont::FONT_FAMILY family, 
+                        LyXFont::FONT_SERIES series, 
+                        LyXFont::FONT_SHAPE shape);
+
+       /** Does the actual loading of a font. Updates fontstruct. */
+       XFontStruct* doLoad(LyXFont::FONT_FAMILY family, 
+                           LyXFont::FONT_SERIES series, 
+                           LyXFont::FONT_SHAPE shape, 
+                           LyXFont::FONT_SIZE size);
+};
+#endif
diff --git a/src/ImportLaTeX.C b/src/ImportLaTeX.C
new file mode 100644 (file)
index 0000000..0151a1b
--- /dev/null
@@ -0,0 +1,59 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor        
+ *          Copyright (C) 1995 Matthias Ettrich
+ *           Copyright (C) 1995-1998 The LyX Team.
+ *
+ *           This file is Copyright (C) 1998
+ *           Asger Alstrup
+ *
+ *======================================================
+ */
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "ImportLaTeX.h"
+#include "lyxrc.h"
+#include "syscall.h"
+#include "filetools.h"
+#include "bufferlist.h"
+
+extern LyXRC * lyxrc;
+extern BufferList bufferlist;
+
+//     $Id: ImportLaTeX.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: ImportLaTeX.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+
+/*
+ * CLASS ImportLaTeX
+ */
+
+ImportLaTeX::ImportLaTeX(LString const & file)
+               : file(file)
+{
+}
+
+
+Buffer * ImportLaTeX::run()
+{
+       // run reLyX
+       LString tmp = lyxrc->relyx_command + " -f " + file;
+        Systemcalls one;
+       Buffer * buf = 0;
+       int result= one.Startscript(Systemcalls::System, tmp);
+       if (result==0) {
+               LString filename = ChangeExtension(file, ".lyx", false);
+               // File was generated without problems. Load it.
+               buf = bufferlist.loadLyXFile(filename);
+       }
+       return buf;
+}
diff --git a/src/ImportLaTeX.h b/src/ImportLaTeX.h
new file mode 100644 (file)
index 0000000..9e332aa
--- /dev/null
@@ -0,0 +1,43 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *
+ *           Copyright (C) 1995-1998 The LyX Team.
+ *
+ *           This file is Copyright (C) 1998
+ *           Asger Alstrup
+ *
+ *======================================================
+ */
+
+#ifndef _IMPORTLATEX_H
+#define _IMPORTLATEX_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+class Buffer;
+
+///
+class ImportLaTeX {
+public:
+       /**
+         file = name and path of the latex file
+         */
+       ImportLaTeX(LString const & file);
+       
+       /** Imports the document.
+         Return 0 if fail.
+         */
+       Buffer * run();
+private:
+       ///
+       LString file;
+};
+
+#endif
diff --git a/src/ImportNoweb.C b/src/ImportNoweb.C
new file mode 100644 (file)
index 0000000..0fd226a
--- /dev/null
@@ -0,0 +1,81 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor        
+ *          Copyright (C) 1995 Matthias Ettrich
+ *           Copyright (C) 1995-1999 The LyX Team.
+ *
+ *           This file is Copyright (C) 1999
+ *           Kayvan A. Sylvan
+ *
+ *======================================================
+ */
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "ImportNoweb.h"
+#include "lyxrc.h"
+#include "syscall.h"
+#include "filetools.h"
+#include "bufferlist.h"
+
+extern LyXRC * lyxrc;
+extern BufferList bufferlist;
+
+//     $Id: ImportNoweb.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: ImportNoweb.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+/*
+ * Implementation the ImportNoweb methods.
+ */
+
+Buffer * ImportNoweb::run()
+{
+       // run reLyX -n
+       LString tmp = lyxrc->relyx_command + " -n -c " +
+                                       documentclass() + " -f " + file;
+        Systemcalls one;
+       Buffer * buf = 0;
+       int result= one.Startscript(Systemcalls::System, tmp);
+       if (result==0) {
+               LString filename = file + ".lyx";
+               // File was generated without problems. Load it.
+               buf = bufferlist.loadLyXFile(filename);
+       }
+       return buf;
+}
+
+// Provide the literate documentclass by parsing the file.
+//
+LString ImportNoweb::documentclass()
+{
+       LString result = "literate-article"; // Default
+
+       FilePtr inputfile(file, FilePtr::read); 
+       if (!inputfile()) return "nofile"; // Should not happen!
+
+       char buf[BUFSIZE], *p, *q;
+
+       while(!feof(inputfile())) {
+               (void)fgets(buf, BUFSIZE, inputfile());
+               if ((p = strstr(buf, "\\documentclass"))) {
+                       while ((*p) && (*p != '{'))
+                               p++;
+                       q = p++;
+                       while ((*q) && (*q != '}'))
+                               q++;
+                       *q = '\0';
+                       result = p;
+                       result = "literate-" + result;
+               }
+       }
+
+       return result;
+}
diff --git a/src/ImportNoweb.h b/src/ImportNoweb.h
new file mode 100644 (file)
index 0000000..f6d18c2
--- /dev/null
@@ -0,0 +1,49 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *
+ *           Copyright (C) 1995-1999 The LyX Team.
+ *
+ *           This file is Copyright (C) 1999
+ *           Kayvan A. Sylvan
+ *
+ *======================================================
+ */
+
+#ifndef _IMPORTNOWEB_H
+#define _IMPORTNOWEB_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+class Buffer;
+
+///
+class ImportNoweb {
+public:
+       /**
+         file = name and path of the noweb file to import
+         */
+       ImportNoweb(LString const & file) : file(file) {};
+       
+       /** Imports the document.
+         Return 0 if fail.
+         */
+       Buffer * run();
+private:
+       ///
+       LString file;
+       ///
+       LString documentclass();
+       ///
+       enum{ 
+               BUFSIZE = 512 
+       };
+};
+
+#endif
diff --git a/src/LString.C b/src/LString.C
new file mode 100644 (file)
index 0000000..1457e73
--- /dev/null
@@ -0,0 +1,591 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "LString.h"
+#endif
+
+// #include <assert.h> // Hmm, make depend crashes with this one in. (Asger)
+#include "LString.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+//     $Id: LString.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $   
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: LString.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+static const unsigned short xtra = 4;
+// The extra space is used to reduce the number of allocations
+// and copies required if a string is unshared. The performance
+// boost can be considerable -- in some tests using LyX I found
+// a 97% reduction in the runtime of operator+=(char) in some
+// code for writing LaTeX files using LStrings.
+// This was originally implemented using:
+//     xtra = 4 - (sizeof(srep) + len) % 4;
+// where len is the length of the new string.
+// This was intended to ensure the string was always aligned
+// within 4-byte boundaries but after testing with xtra = 4,
+// and finding a significant improvement I decided to just
+// leave it at 4. ARRae.
+
+LString::LString()
+{
+       static srep empty_rep;
+       
+       p = &empty_rep;
+       empty_rep.n++;
+}
+
+
+LString::LString(char const *s)
+{
+       static srep empty_rep;
+       
+       if (s && *s) {
+               // > 99 %
+               register unsigned int const len = strlen(s);
+               p = (srep *) new char[sizeof(srep) + len + xtra];
+               p->l = len;
+               p->n = 0;
+               p->e = xtra;
+               memcpy(p->s, s, len + 1);
+       } else {
+               // < 1 %
+               p = &empty_rep;
+               empty_rep.n++;
+       }
+}
+
+
+LString::LString(char const c)
+{
+       static srep empty_rep;
+
+       if (c) {
+               p = (srep *) new char[sizeof(srep) + 1 + xtra];
+               p->l = 1;
+               p->n = 0;
+               p->e = xtra;
+               p->s[0] = c;
+               p->s[1] = '\0';
+       } else {
+               p = &empty_rep;
+               empty_rep.n++;
+       }
+}
+
+
+LString& LString::operator=(char const *s)
+{
+       static srep empty_rep;
+//     assert(p);
+
+       lose(); // disconnect self
+
+       if (s && *s) {
+               register unsigned int const len = strlen(s);
+               p = (srep *) new char[sizeof(srep) + len + xtra];
+               p->l = len;
+               p->n = 0;
+               p->e = xtra;
+               memcpy(p->s, s, len + 1);
+       } else {
+               p = &empty_rep;
+               empty_rep.n++;
+       }
+       
+       return *this;
+}
+
+
+LString& LString::operator=(LString const &x)
+{
+//     assert(p);
+       x.p->n++; // protect against ``st = st''
+
+        lose(); // disconnect self
+
+       p = x.p;
+       return *this;
+}
+
+
+LString& LString::operator=(char c)
+{
+       static srep empty_rep;
+
+//     assert(p);
+
+       lose(); // disconnect self
+
+       if (c) {
+               p = (srep *) new char[sizeof(srep) + 1 + xtra];
+               p->l = 1;
+               p->n = 0;
+               p->e = xtra;
+               p->s[0] = c;
+               p->s[1] = '\0';
+       } else {
+               p = &empty_rep;
+               empty_rep.n++;
+       }
+
+       return *this;
+}
+
+
+LString &LString::clean()
+{
+       static srep empty_rep;
+
+       lose();
+       p = &empty_rep;
+       empty_rep.n++;
+       return *this;
+}
+
+
+
+char& LString::operator[](int i)
+{
+#ifdef DEVEL_VERSION
+       if (i < 0 || i >= length()) {
+               fprintf(stderr,"LString::operator[]: Index out of range: '%s' %d\n", p->s, i);
+               abort();
+       }
+#endif
+
+       if (p->n > 0) { // clone to maintain value semantics
+               srep * np = (srep *) new char[sizeof(srep) + p->l];
+               np->l = p->l;
+               np->n = 0;
+               np->e = 0;
+               memcpy(np->s, p->s, length() + 1);
+               p->n--;
+               p = np;
+       }
+       return p->s[i];
+}
+
+#ifndef const
+char const& LString::operator[](int i) const
+{
+#ifdef DEVEL_VERSION
+       if (i < 0 || i >= length()) {
+               fprintf(stderr,"LString::operator[] const: Index out of range: '%s' i:%d.\n",p->s,i);
+               abort();
+       }
+#endif
+
+       return p->s[i];
+}
+#endif /* ndef const */
+
+LString &LString::operator+=(LString const & x)
+{
+       if (x.empty()) return *this;
+
+       register unsigned int const len = length() + x.length();
+       if (p->n || p->e < x.length()) {
+               srep *np = (srep *) new char[sizeof(srep) + len + xtra];
+               np->l = len;
+               np->n = 0;
+               np->e = xtra;
+               memcpy(np->s, p->s, length());
+               memcpy(np->s + length(), x.p->s, x.length() + 1);
+               lose(); // disconnect self
+               p = np;
+       } else {
+               // in cases where x += x and x is short the
+               // explicit setting of the '\0' stops any problems
+               memcpy(p->s + length(), x.p->s, x.length());
+               p->s[len] = '\0';
+               p->l += x.length();
+               p->e -= x.length();
+       }
+
+       return *this;
+}
+
+
+LString &LString::operator+=(char const *x)
+{
+       if (!x || *x==0) return *this;
+
+       register unsigned int const xlen = strlen(x);
+       register unsigned int const len = length() + xlen;
+       if (p->n || p->e < xlen) {
+               srep *np = (srep *) new char[sizeof(srep) + len + xtra];
+               np->l = len;
+               np->n = 0;
+               np->e = xtra;
+               memcpy(np->s, p->s, length());
+               memcpy(np->s + length(), x, xlen + 1);
+               lose(); // disconnect self
+               p = np;
+       } else {
+               // Explicitly setting the '\0' stops any
+               // problems caused by x += x.c_str()
+               memcpy(p->s + length(), x, xlen);
+               p->s[len] = '\0';
+               p->l += xlen;
+               p->e -= xlen;
+       }
+
+       return *this;
+}
+
+
+LString &LString::operator+=(char c)
+{
+       register unsigned int const len = length() + 1;
+       if (!p->n && p->e) {
+               // 80% (from profiling)
+               // This is where all the speed gains are made.
+               p->s[length()] = c;
+               p->s[len] = '\0';
+               p->l = len;
+               p->e -= 1;
+       } else {
+               // 20%
+               srep *np = (srep *) new char[sizeof(srep) + len + xtra];
+               np->l = len;
+               np->n = 0;
+               np->e = xtra;
+               memcpy(np->s, p->s, length());
+               np->s[length()] = c;
+               np->s[len] = '\0';
+               lose(); // disconnect self
+               p = np;
+       }
+
+       return *this;
+}
+
+
+LString &LString::operator+=(int i)
+{
+       return this->operator+=((long)i);
+}
+
+
+LString &LString::operator+=(long i)
+{
+       unsigned int tmplen = 0;
+       long a = i;
+       // calculate the length of i
+       if (!i) {
+               tmplen = 1;
+       } else {
+               if (a < 0) {
+                       tmplen++; // minus sign
+                       a = -a; // switch sign
+               }
+               while(a >= 1) { a = a/10; tmplen++;}
+       }
+       char *str = new char[tmplen + 1];
+       sprintf(str, "%ld", i);
+       this->operator+=(str);
+       delete[] str;
+
+       return *this;
+}
+
+
+char * LString::copy() const
+{
+       char * new_string = new char[length()+1];
+       memcpy(new_string, p->s, length() + 1);
+       return new_string;
+}
+
+
+bool LString::contains(char const *a) const
+{
+       return strstr(p->s, a) != NULL;
+}
+
+
+LString& LString::substring(int i1, int i2)
+{
+#ifdef DEVEL_VERSION
+       if (i1 > i2 || i1 >= length() || i2 >= length()) {
+               fprintf(stderr,
+                       "LString::substring: Wrong indexing in substring:"
+                       " '%s' i1=%d i2=%d\n", p->s, i1, i2);
+               abort();
+       }
+#endif
+
+       if (i1==i2)
+               this->operator=(p->s[i1]);
+       else {
+               char *str = new char[i2 - i1 +2];
+               int i;
+               for (i=0; i1<=i2; str[i++] = p->s[i1++]);
+               str[i] = 0;
+               this->operator=(str);
+               delete[] (char*)str;
+       }
+       return *this;
+}
+
+
+// ale970405+lasgoutt-970425
+LString LString::token(char delim, int n) const
+{
+       int k=0, i;
+        LString tokbuf;
+
+        tokbuf = *this;   
+       // Find delimiter or end of string
+       for (i = 0; i < tokbuf.length(); i++) {
+               if (tokbuf[i] == delim) {
+                       if (n > 0) {
+                               k = i+1;
+                               n--;
+                       } else break;
+               }
+       }
+
+       // Return the token if not empty
+       if (n == 0 && k<i){
+               return tokbuf.substring(k, i-1);
+       } else {
+               return LString();
+       }
+}
+
+
+// this could probably be faster and/or cleaner, but it seems to work (JMarc)
+int LString::tokenPos(char delim, LString const &tok)
+{
+       int i=0;
+       LString str = *this;
+       LString tmptok;
+
+       while (!str.empty()) {
+               str.split(tmptok, delim);
+               if (tok==tmptok)
+                       return i;
+               i++;
+       }
+       return -1;
+}
+
+
+LString& LString::split(LString & piece, char delim)
+{
+       int i=0;
+       // Find delimiter or end of string
+       while (i<length() && p->s[i] != delim)
+               i++;
+       // If not the first, we go for a substring
+       if (i>0) {
+               piece = *this;
+               piece.substring(0, i-1);
+       } else
+               piece.clean();
+
+       if (i < length()-1)
+               this->substring(i+1, length()-1);
+       else
+               clean();
+       return *this;
+}
+
+
+LString& LString::split(char delim)
+{
+       int i=0;
+       // Find delimiter or end of string
+       while (i<length() && p->s[i] != delim)
+               i++;
+
+       if (i < length()-1)
+               this->substring(i+1, length()-1);
+       else
+               clean();
+       return *this;
+}
+
+
+// ale970521
+LString& LString::rsplit(LString & piece, char delim)
+{
+       int i=length()-1;
+       // Find delimiter or begin of string
+       while (i>=0 && p->s[i] != delim)
+               i--;
+       // If not the last, we go for a substring
+       if (i < length()-1) {
+               piece = *this;
+               piece.substring(0, i-1);
+               this->substring(i+1, length()-1);
+       } else {
+               piece.clean();
+               clean();
+       }
+       return *this;
+}
+
+
+LString& LString::strip(char const c)
+{
+       int i=length()-1;
+       for (; i>=0 && p->s[i] == c; i--);
+       if (i<0) 
+               clean();
+       else
+               this->substring(0, i);
+       return *this;
+}
+
+
+LString& LString::frontStrip(char const c)
+{
+       int i=0;
+       while (i < length() && p->s[i] == c) i++;
+       if (i > 0)
+               if (i == length())
+                       clean();
+               else
+                       this->substring (i, length()-1);
+       return *this;
+}
+
+
+bool LString::prefixIs(char const * pre) const
+{
+       if ((int) strlen(pre) > length())
+               return false;
+       else
+               return strncmp(p->s, pre, strlen(pre))==0;
+}
+
+
+bool LString::suffixIs(char c) const
+{
+       if (empty()) return false;
+       return p->s[length()-1] == c;
+}
+
+
+bool LString::suffixIs(char const * suf) const
+{
+       int suflen = (int) strlen(suf);
+       if (suflen > length())
+               return false;
+       else
+               return strncmp(p->s + (length()-suflen), suf, suflen)==0;
+}
+
+
+LString& LString::subst(char oldchar, char newchar)
+{
+       for (int i=0; i<length() ; i++)
+               if (p->s[i]==oldchar)
+                       p->s[i]=newchar;
+       return *this;
+}
+
+
+LString& LString::subst(char const * oldstr, LString const & newstr)
+{
+       LString lstr = *this;
+       char * str = lstr.copy();
+       char * first;
+      
+       while((first=strstr(str,oldstr))){
+               if (first==str) lstr.clean();
+               else lstr.substring(0,first-str-1);
+               lstr+=newstr;
+               lstr+=first+strlen(oldstr);
+               delete[] (char*)str;
+               str = lstr.copy();
+       }
+       delete[] (char*)str;
+       return *this=lstr;
+}
+
+
+LString& LString::lowercase()
+{
+       for (int i=0; i<length() ; i++)
+               p->s[i] = tolower((unsigned char) p->s[i]);
+       return *this;
+}
+
+
+bool LString::regexMatch(LString const & pattern) const
+{
+       if (pattern.empty())
+               return true;
+       if (empty())
+               return false;
+       
+       int si=0, pi=0;
+       int const sl = length();
+       int const pl = pattern.length();        
+
+       while (si < sl && pi < pl) {
+               if (pattern[pi]=='*') {
+                       // Skip all consequtive *s
+                       while (pattern[pi] == '*') {
+                               pi++;
+                               if (pi == pl)
+                                       return true;
+                       }
+
+                       // Get next chunk of pattern to match
+                       LString temp= pattern;
+                       temp.substring(pi, pl-1);
+                       LString chunk;
+                       temp.split(chunk, '*');
+
+                       if (!chunk.empty() && pattern[pl-1] == '*' && 
+                           temp.empty())
+                               temp = '*';
+
+                       if (temp.empty()) {
+                               // Last chunk, see if tail matches
+                               temp = *this;
+                               temp.substring(sl - chunk.length(), sl - 1);
+                               return temp == chunk;
+                       } else {
+                               // Middle chunk, see if we can find a match
+                               bool match = false;
+                               while (!match && si<sl) {
+                                       temp = *this;
+                                       temp.substring(si, sl - 1);
+                                       match = temp.prefixIs(chunk.c_str());
+                                       si++;
+                               };
+                               if (!match)
+                                       return false;
+                               si += chunk.length()-1;
+                               pi += chunk.length();
+                               if (si==sl && pi==pl-1)
+                                       return true;
+                       }
+               } else if (operator[](si++) != pattern[pi++]) {
+                               return false;
+               }
+       }
+       if (pi < pl || si < sl)
+               return false;   
+       return true;
+}
diff --git a/src/LString.h b/src/LString.h
new file mode 100644 (file)
index 0000000..a9cbe39
--- /dev/null
@@ -0,0 +1,396 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 1996 Matthias Ettrich
+ *           and the LyX Team.
+ *
+ *======================================================*/
+
+// This one is heavily based on the string class in The C++
+// Programming Language by Bjarne Stroustrup
+
+#ifndef _LSTRING_H_
+#define _LSTRING_H_ 
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <config.h> // needed at least for compiler that do not
+                   // understand 'explicit' (JMarc)
+#ifdef _AIX
+// AIX has strange ideas about where definitions like strcasecmp
+// should go (JMarc)
+#include <strings.h>
+#else
+#include <string.h>
+#endif
+
+/** A string class for LyX
+  
+  This is a permanent String class. It was supposed to be superseeded
+  with QString when we switch to the Qt library, but now it's so developed
+  that it is as good as theirs (or maybe even better :-)
+
+  Notes for usage:
+
+  When you declare an LString, it is initially empty. There is no need to
+  do things like #LString a= "";#, especially not in constructors.
+
+  If you want to use a default empty LString as a parameter, use
+  
+       #void foo(LString par = LString());     // Correct#
+  
+  rather than
+
+       #void foo(LString par = "");    // WRONG!#
+       #void foo(LString par = 0);     // WRONG!#
+
+  (The last one is only wrong because some compilers can't handle it.)
+
+  Methods that take an index as parameter all follow this rule: Valid indexes
+  go from 0 to length()-1.
+  \begin{tabular}{rl}
+  Correct: & #foo.substring(0, length()-1);# \\
+  Wrong:   & #bar.substring(0, length());#
+  \end{tabular}
+  
+  It is important that you declare LStrings as const if possible, because
+  some methods are much more efficient in const versions.
+  
+  If you want to check whether a string is empty, do
+
+       #if (foo.empty()) something right#
+
+  rather than something along the lines of
+
+       #if (!foo) completely wrong#
+
+  When you use the #.copy()# method, LString calls "#new []#", so you have to
+  release the memory with #delete[]#. Don't preallocate memory.
+
+  When you want to copy an LString, just do
+  
+       #LString a, b = "String";#
+       #a = b; // That's it!#
+
+  not something like
+  
+       #LString a, b = "String";#
+       #a = b.copy(); // This leaks.#
+  
+  The class automatically handles deep copying when required.
+*/
+class LString {
+public:
+       /**@name Constructors and Deconstructors */
+       //@{
+       /// #LString x;#
+       LString();
+       /// #LString x(LString ...)#
+       LString(LString const &);
+       /// #LString x("abc")#
+       LString(char const*);
+       /// #LString x('a')# 
+       explicit LString(char const);
+       // not all C++ compilers understands explicit as of now
+
+       ///
+       ~LString();
+       //@}
+
+       /**@name Operators */
+       //@{
+       ///
+       LString& operator=(LString const &);
+       ///
+       LString& operator=(char const *);
+       ///
+       LString& operator=(char);
+
+       ///
+       char& operator[](int);
+#ifndef const
+       ///
+       char const& operator[](int) const;
+#endif
+       ///
+       LString& operator+=(LString const &);
+       ///
+       LString& operator+=(char const*);
+       ///
+       LString& operator+=(char);
+       ///
+       LString& operator+=(int);
+       ///
+       LString& operator+=(long);
+       //@}
+
+       /**@name Methods */
+       //@{
+       ///  to comply with the STL strings
+       bool empty() const;
+       ///
+       //bool isEmpty() const;
+       ///
+       //bool notEmpty() const;
+       ///
+       int length() const;
+
+       // should be renamed to erase() (STL)
+        /** equivalent to  *this = empty. But usable outside LString
+            implementation */
+       LString &clean();
+
+       /// This should be renamed to c_str()
+       char const* c_str() const;
+
+       // we should make the caller supply the storage to copy into. (STL)
+       /** This one returns a verbatim copy. Only temporary.
+         The caller should call delete [] when done with the string
+         */
+       char * copy() const;
+
+       ///
+       bool contains(char const *) const;
+
+       // Remove and replace (STL)
+       /// Truncate to substring. I.e. #"abcdef".substring(2,4)="cde"#
+       LString& substring(int i1, int i2);
+           
+       /** Splits the string by the first delim.
+         Splits the string by the first appearance of delim.
+           The leading string up to delim is returned in piece (not including
+           delim), while the original string is cut from after the delimiter.
+           Example:
+           #s1=""; s2="a;bc".split(s1, ';') -> s1=="a"; s2 == "bc";#
+       */
+       LString& split(LString& piece, char delim);
+       /// Same as split but does not return a piece
+       LString& split(char delim);
+        /// Same as split but uses the last delim.
+       LString& rsplit(LString& piece, char delim);
+       
+       /** Extracts a token from this string at the nth delim.
+           Doesn't modify the original string. Similar to strtok.
+           Example:
+           #"a;bc;d".token(';', 1) == "bc";#
+           #"a;bc;d".token(';', 2) == "d";#
+       */
+       LString token(char delim, int n=0) const;
+
+       /** Search a token in this string using the delim.
+           Doesn't modify the original string. Returns -1 in case of
+           failure. 
+           Example:
+           #"a;bc;d".tokenPos(';', "bc") == 1;#
+           #"a;bc;d".token(';', "d") == 2;#
+       */
+       int tokenPos(char delim, LString const &tok);
+
+       /** Strips characters off the end of a string.
+           #"abccc".strip('c') = "ab".#
+       */
+       LString& strip(char const c = ' ');
+
+       /** Strips characters of the beginning of a string.
+         #"cccba".frontstrip('c') = "ba"#. */
+       LString& frontStrip(char const c = ' ');
+       
+       /// Does the string start with this prefix?
+       bool prefixIs(char const *) const;
+
+       /// Does the string end with this char?
+       bool suffixIs(char) const;
+
+       /// Does the string end with this suffix?
+       bool suffixIs(char const *) const;
+       
+       /// Substitute all "oldchar"s with "newchar"
+       LString& subst(char oldchar, char newchar);
+
+       /// Substitutes all instances of oldstr with newstr
+       LString& subst(char const * oldstr, LString const & newstr);
+       /** Compares a string and a (simple) regular expression
+         The only element allowed is "*" for any string of characters
+         */
+       bool regexMatch(LString const & pattern) const;
+
+       /// Lowercases a string
+       LString& lowercase();
+
+       /// Counts how many of character c there is in string
+       int countChar(const char c) const;
+
+       /// Position of the character c from the beggining
+       int charPos(const char c) const;
+           
+       //@}
+
+       /**@name Friends */
+       //@{
+       
+       ///
+       friend bool operator==(LString const &x, char const *s)
+       {
+               if (s == 0 || !(*s)) 
+                       return x.p->s[0] == '\0';
+               else
+                       return strcmp(x.p->s, s) == 0;
+       }
+       
+       ///
+       friend bool operator==(LString const &x, LString const &y)
+       {
+               return strcmp(x.p->s, y.p->s) == 0;
+       }
+       
+       ///
+       friend bool operator!=(LString const &x, char const *s)
+       {
+               if (s == 0 || !(*s)) 
+                       return x.p->s[0] != '\0';
+               else
+                       return strcmp(x.p->s, s) != 0;
+       }
+       
+       ///
+       friend bool operator!=(LString const &x, LString const &y)
+       {
+               return strcmp(x.p->s, y.p->s) != 0;
+       }
+       //@}
+
+protected:
+private:
+       /// A string representation
+       struct srep {
+               /// Length
+               unsigned int l;
+               /// Reference count (number of references - 1)
+               unsigned short n;
+               /// Extra space at end of allocated string
+               unsigned short e;
+               /// Data. At least 1 char for trailing null.
+               char s[1];
+               ///
+               srep() { n = 0; l = 0; e = 0; s[0] = '\0'; }
+       };
+
+       /** The empty srep is a local static in each function that
+           needs one. There is no "global" empty srep but LString
+           doesn't need one (no code actually relies upon a single
+           empty srep).
+           This overcomes *all* "static initialization" problems,
+           at maximum speed, with a small overhead of 6 local static
+           empty_reps.
+        */
+// This is the only other option (or a variant of this anyway)
+// I originally offered this style of empty_rep in 9709 but
+// it was rejected for requiring too many function calls and pointer operations(!)
+// and because another implementation was to be trialed (which has since
+// apparently failed for some compilers). ARRae
+//     static srep& empty_rep()
+//             {
+//                     static srep mt;
+//                     return mt;
+//             }
+
+       /// A string is a pointer to it's representation
+       srep *p;
+       ///
+        void lose();
+};
+
+
+inline LString::LString(LString const &x)
+{
+       x.p->n++;
+       p = x.p;
+}
+
+
+inline void LString::lose()
+{
+       if (p->n-- == 0) {
+               delete[] (char*)p;
+       }
+}
+
+inline LString::~LString()
+{
+   lose();
+}
+
+
+inline int LString::length() const
+{
+       return p->l;
+}
+
+
+inline bool LString::empty() const
+{
+       return p->l == 0;
+}
+
+
+inline int LString::countChar(const char c) const
+{
+       int n = 0;
+       for (int i=0; i < length(); i++)
+               if (operator[](i) == c) n++;
+       return n;
+}
+
+
+inline LString operator+(LString const &x, LString const &y)
+{
+       LString str(x);
+       str += y;
+       return str;
+}
+
+
+inline LString operator+(LString const &x, char const &y)
+{
+       LString str(x);
+       str += y;
+       return str;
+}
+
+
+inline LString operator+(LString const &x, int const &y)
+{
+       LString str(x);
+       str += y;
+       return str;
+}
+
+
+inline LString operator+(LString const &x, long const &y)
+{
+       LString str(x);
+       str += y;
+       return str;
+}
+
+inline char const* LString::c_str() const
+{
+       return (char const*)p->s;
+}
+
+
+inline int LString::charPos(const char c) const
+{
+        for (int i=0; i < length(); i++) {
+               if (operator[](i) == c) return i;
+       }
+        return -1;
+}
+        
+#endif
diff --git a/src/LaTeX.C b/src/LaTeX.C
new file mode 100644 (file)
index 0000000..69ce0b6
--- /dev/null
@@ -0,0 +1,733 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor        
+ *          Copyright (C) 1995 Matthias Ettrich
+ *           Copyright (C) 1995-1999 The LyX Team.
+ *
+ *           This file is Copyright (C) 1996-1999
+ *           Lars Gullik Bjønnes
+ *
+ *======================================================
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "filetools.h"
+#include "LaTeX.h"
+#include "lyxlex.h"
+#include "FileInfo.h"
+#include "error.h"
+#include "lyxlib.h"
+#include "syscall.h"
+#include "syscontr.h"
+#include "pathstack.h"
+#include "bufferlist.h"
+#include "minibuffer.h"
+#include "gettext.h"
+
+//     $Id: LaTeX.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $     
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: LaTeX.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+extern BufferList bufferlist;
+
+struct texfile_struct {
+       LaTeX::TEX_FILES file;
+       char const *extension;
+};
+
+static
+const texfile_struct all_files[] = {
+       { LaTeX::AUX, ".aux"},
+       { LaTeX::BBL, ".bbl"},
+       { LaTeX::DVI, ".dvi"},
+       { LaTeX::GLO, ".glo"},
+       { LaTeX::IDX, ".idx"},
+       { LaTeX::IND, ".ind"},
+       { LaTeX::LOF, ".lof"},
+       { LaTeX::LOA, ".loa"},
+       { LaTeX::LOG, ".log"},
+       { LaTeX::LOT, ".lot"},
+       { LaTeX::TOC, ".toc"},
+       { LaTeX::LTX, ".ltx"},
+       { LaTeX::TEX, ".tex"}
+};
+
+// This should perhaps be placed in LyXLex
+static
+LString readLine(FILE *file)
+{
+       if (feof(file))
+               return LString();
+
+       int i = 0;
+       char s[512];
+
+       do {
+               s[i] = fgetc(file);
+               i++;
+       } while (!feof(file) && s[i-1] != '\n' && i<510);
+       s[i] = '\0';
+       LString tmp;
+       if (i == 1 && feof(file))
+               ;
+       else
+               tmp = s;
+
+       return tmp;
+}
+
+
+
+/*
+ * CLASS TEXERRORS
+ */
+
+// I did not leave this inlined because DEC cxx does not like
+// variables declarations in inlined code (JMarc)
+TeXErrors::~TeXErrors()
+{
+       Error *tmp;
+       while (errors) {
+               tmp = errors->next_error;
+               delete errors;
+               errors = tmp;
+       }
+}
+
+
+void TeXErrors::scanError(LyXLex &lex)
+{
+       LString token = lex.GetString();
+       // Sometimes the error string goes over more than one
+       // line, and we need to get them all.
+       LString errstr;
+       LString tmp = readLine(lex.getFile()).frontStrip();
+       if (tmp == "\n" || tmp.empty()) {
+               tmp = readLine(lex.getFile()).frontStrip();
+               if (tmp.contains("See the LaTeX manual")) {
+                       do {
+                               tmp = readLine(lex.getFile());
+                       } while (!tmp.empty() && !tmp.contains("..."));
+               }
+               tmp = readLine(lex.getFile()).frontStrip();
+       }
+
+       while ((tmp != "\n" || !errstr.contains("l."))
+               && !tmp.prefixIs("! ")
+               && !tmp.contains("(job aborted")
+               && !tmp.empty()) {
+               errstr += tmp;
+               tmp = readLine(lex.getFile()).frontStrip();
+       }
+       lyxerr.debug("tmp: " + errstr);
+       int line = 0;
+       // unfortunately the error line is not always given
+       // by "l.###" in the beginning of the error string
+       // therefore we must search for "l.###" in the error
+       // msg.
+       if (errstr.contains("l.")) {
+               // We make a const copy to make [] fast. (Asger)
+               LString const es = errstr;
+               for (int i = 2; i < es.length(); i++) {
+                       if (es[i-2] == 'l' && es[i-1] == '.' &&
+                           (es[i] >= '0' && es[i]<= '9')) {
+                               line = atoi(es.c_str() + i);
+                               break;
+                       }
+               }
+       }
+       insertError(line, token, errstr);
+
+       if (tmp.prefixIs("! ")) {
+               scanError(lex);
+       }
+}
+
+
+bool TeXErrors::getFirstError(int *line, LString *text)
+{
+        next_error = errors;
+        if (next_error) {
+                *line = next_error->error_in_line;
+                *text = next_error->error_desc + "\n" + next_error->error_text;
+                next_error = next_error->next_error;
+                return true;
+        }
+        return false;
+}
+
+
+bool TeXErrors::getNextError(int *line, LString *text)
+{
+        if (next_error) {
+                *line = next_error->error_in_line;
+                *text = next_error->error_desc + "\n" + next_error->error_text;
+                next_error = next_error->next_error;
+                return true;
+        }
+        return false;
+}
+
+
+void TeXErrors::insertError(int line, LString const &error_desc,
+                           LString const &error_text)
+{
+        Error *newerr = new Error(line, error_desc, error_text);
+        if (errors) {
+                Error *tmperr = errors;
+                while (tmperr->next_error) tmperr = tmperr->next_error;
+                tmperr->next_error = newerr;
+        } else {
+                errors = newerr;
+        }
+}
+
+
+void TeXErrors::printErrors()
+{
+        lyxerr.print("Printing errors.");
+        if (errors) {
+                Error *tmperr = errors;
+                do {
+                        lyxerr.print(LString("Error in line ")
+                                    + tmperr->error_in_line
+                                    + ": " + tmperr->error_desc
+                                    + '\n' + tmperr->error_text);
+                       //%d: %s\n%s\n", tmperr->error_in_line,
+                       //     tmperr->error_desc.c_str(),
+                       //     tmperr->error_text.c_str());
+                        tmperr = tmperr->next_error;
+                } while (tmperr);
+        }
+}
+
+
+void TeXErrors::printWarnings()
+{
+}
+
+
+void TeXErrors::printStatus()
+{
+        lyxerr.print("Error struct:");
+        lyxerr.print(LString("   status: ") + int(status));
+        lyxerr.print(LString("   no err: ") + int(number_of_errors));
+        if (status == LaTeX::NO_ERRORS)  lyxerr.print("NO_ERRORS");
+        if (status & LaTeX::NO_LOGFILE)  lyxerr.print("NO_LOGFILE");
+        if (status & LaTeX::NO_OUTPUT)   lyxerr.print("NO_OUTPUT");
+        if (status & LaTeX::UNDEF_REF)   lyxerr. print("UNDEF_REF");
+        if (status & LaTeX::RERUN)       lyxerr. print("RERUN");
+        if (status & LaTeX::TEX_ERROR)   lyxerr.print("TEX_ERROR");
+        if (status & LaTeX::TEX_WARNING) lyxerr.print("TEX_WARNING");
+        if (status & LaTeX::NO_FILE)     lyxerr.print("NO_FILE");
+}
+
+
+/*
+ * CLASS LaTeX
+ */
+
+LaTeX::LaTeX(LString const & latex, LString const & f, LString const & p)
+               : cmd(latex), file(f), path(p)
+{
+       tex_files = NO_FILES;
+       file_count = sizeof(all_files) / sizeof(texfile_struct);
+       num_errors = 0;
+       depfile = file + ".dep";
+}
+
+
+int LaTeX::run(TeXErrors &terr, MiniBuffer *minib)
+       // We know that this function will only be run if the lyx buffer
+       // has been changed. We also know that a newly written .tex file
+       // is always different from the previous one because of the date
+       // in it. However it seems safe to run latex (at least) on time each
+       // time the .tex file changes.
+{
+       int scanres = LaTeX::NO_ERRORS;
+       unsigned int count = 0; // number of times run
+       num_errors = 0; // just to make sure.
+       const unsigned int MAX_RUN = 6;
+       DepTable head; // empty head
+       bool rerun = false; // rerun requested
+       
+       // The class LaTeX does not know the temp path.
+       bufferlist.updateIncludedTeXfiles(GetCWD());
+       
+       // Never write the depfile if an error was encountered.
+       
+       // 0
+       // first check if the file dependencies exist:
+       //     ->If it does exist
+       //             check if any of the files mentioned in it have
+       //             changed (done using a checksum).
+       //                 -> if changed:
+       //                        run latex once and
+       //                        remake the dependency file
+       //                 -> if not changed:
+       //                        just return there is nothing to do for us.
+       //     ->if it doesn't exist
+       //             make it and
+       //             run latex once (we need to run latex once anyway) and
+       //             remake the dependency file.
+       //
+       FileInfo fi(depfile);
+       if (fi.exist()) {
+               // Read the dep file:
+               head.read(depfile);
+               // Update the checksums
+               head.update();
+               
+               lyxerr.debug("Dependency file exists", Error::LATEX);
+               if (head.sumchange()) {
+                       lyxerr.debug("Dependency file has changed", 
+                                    Error::LATEX);
+                       lyxerr.debug(LString(_("Run #")) + int(++count), 
+                                    Error::LATEX);
+                       minib->Set(LString(_("LaTeX run number ")) + int(count));
+                       minib->Store();
+                       this->operator()();
+                       scanres = scanLogFile(terr);
+                       if (scanres & LaTeX::ERRORS) return scanres; // return on error
+               } else {
+                       lyxerr.debug("return no_change", Error::LATEX);
+                       return LaTeX::NO_CHANGE;
+               }
+       } else {
+               lyxerr.debug("Dependency file does not exist",
+                            Error::LATEX);
+               lyxerr.debug(LString(_("Run #")) + int(++count),
+                            Error::LATEX); 
+               head.insert(file, true);
+               minib->Set(LString(_("LaTeX run number ")) + int(count));
+               minib->Store();
+               this->operator()();
+               scanres = scanLogFile(terr);
+               if (scanres & LaTeX::ERRORS) return scanres; // return on error
+       }
+
+       // update the dependencies.
+       deplog(head); // reads the latex log
+       deptex(head); // checks for latex files
+       head.update();
+
+       // 0.5
+       // At this point we must run external programs if needed.
+       // makeindex will be run if a .idx file changed or was generated.
+       // And if there were undefined citations or changes in references
+       // the .aux file is checked for signs of bibtex. Bibtex is then run
+       // if needed.
+       
+       // run makeindex
+       if (head.haschanged(ChangeExtension(file, ".idx", true))) {
+               // no checks for now
+               minib->Set(_("Running MakeIndex."));
+               minib->Store();
+               rerun=runMakeIndex(ChangeExtension(file,".idx",true));
+       }
+
+       // run bibtex
+       if (scanres & LaTeX::UNDEF_CIT || scanres & LaTeX::RERUN) {
+               // Here we must scan the .aux file and look for
+               // "\bibdata" and/or "\bibstyle". If one of those
+               // tags is found -> run bibtex and set rerun = true;
+               // no checks for now
+               minib->Set(_("Running BibTeX."));
+               minib->Store();
+               rerun = runBibTeX(ChangeExtension(file, ".aux", true));
+       }
+       
+       // 1
+       // we know on this point that latex has been run once (or we just
+       // returned) and the question now is to decide if we need to run
+       // it any more. This is done by asking if any of the files in the
+       // dependency file has changed. (remember that the checksum for
+       // a given file is reported to have changed if it just was created)
+       //     -> if changed or rerun == true:
+       //             run latex once more and
+       //             update the dependency structure
+       //     -> if not changed:
+       //             we does nothing at this point
+       //
+       if (rerun || head.sumchange()) {
+               rerun = false;
+               lyxerr.debug("Dep. file has changed or rerun requested", 
+                            Error::LATEX);
+               lyxerr.debug(LString("Run #") + int(++count),
+                            Error::LATEX);
+               minib->Set(LString(_("LaTeX run number ")) + int(count));
+               minib->Store();
+               this->operator()();
+               scanres = scanLogFile(terr);
+               if (scanres & LaTeX::ERRORS) return scanres; // return on error
+               // update the depedencies
+               deplog(head); // reads the latex log
+               head.update();
+       } else {
+               lyxerr.debug("Dep. file has NOT changed", Error::LATEX);
+       }
+
+       // 1.5
+       // The inclusion of files generated by external programs like
+       // makeindex or bibtex might have done changes to pagenumbereing,
+       // etc. And because of this we must run the external programs
+       // again to make sure everything is redone correctly.
+       // Also there should be no need to run the external programs any
+       // more after this.
+       
+       // run makeindex if the <file>.idx has changed or was generated.
+       if (head.haschanged(ChangeExtension(file, ".idx", true))) {
+               // no checks for now
+               minib->Set(_("Running MakeIndex."));
+               minib->Store();
+               rerun = runMakeIndex(ChangeExtension(file, ".idx", true));
+       }
+       
+       // 2
+       // we will only run latex more if the log file asks for it.
+       // or if the sumchange() is true.
+       //     -> rerun asked for:
+       //             run latex and
+       //             remake the dependency file
+       //             goto 2 or return if max runs are reached.
+       //     -> rerun not asked for:
+       //             just return (fall out of bottom of func)
+       //
+       while ((head.sumchange() || rerun || (scanres & LaTeX::RERUN)) 
+              && count < MAX_RUN) {
+               // Yes rerun until message goes away, or until
+               // MAX_RUNS are reached.
+               rerun = false;
+               lyxerr.debug(LString(_("Run #")) + int(++count), Error::LATEX);
+               minib->Set(LString(_("LaTeX run number ")) + int(count));
+               minib->Store();
+               this->operator()();
+               scanres = scanLogFile(terr);
+               if (scanres & LaTeX::ERRORS) return scanres; // return on error
+               // keep this updated
+               head.update();
+       }
+
+       // Write the dependencies to file.
+       head.write(depfile);
+       lyxerr.debug("Done.", Error::LATEX);
+       return scanres;
+}
+
+
+int LaTeX::operator()()
+{
+#ifndef __EMX__
+       LString tmp = cmd + ' ' + file + " > /dev/null";
+#else // cmd.exe (OS/2) causes SYS0003 error at "/dev/null"
+       LString tmp = cmd + ' ' + file + " > nul";
+#endif
+        Systemcalls one;
+       return one.Startscript(Systemcalls::System, tmp);
+}
+
+
+bool LaTeX::runMakeIndex(LString const &file)
+{
+       lyxerr.debug("idx file has been made,"
+                     " running makeindex on file "
+                     + file, Error::LATEX);
+
+       // It should be possible to set the switches for makeindex
+       // sorting style and such. It would also be very convenient
+       // to be able to make style files from within LyX. This has
+       // to come for a later time. (0.13 perhaps?)
+       LString tmp = "makeindex -c -q ";
+       tmp += file;
+       Systemcalls one;
+       one.Startscript(Systemcalls::System, tmp);
+       return true;
+}
+
+
+bool LaTeX::runBibTeX(LString const &file)
+{
+       LyXLex lex(NULL, 0);
+       LString token;
+       if (!lex.setFile(file)) {
+               // unable to open .aux file
+               // return at once
+               return false;
+       }
+
+       while (lex.IsOK()) {
+               if (lex.EatLine())
+                       token=lex.GetString();
+               else // blank line in the file being read
+                       continue;
+
+               if (token.contains("\\bibdata{")) {
+                       // run bibtex and
+                       LString tmp="bibtex ";
+                       tmp += ChangeExtension(file, LString(), true);
+                       Systemcalls one;
+                       one.Startscript(Systemcalls::System, tmp);
+                       return true;
+               }
+               
+       }
+       // bibtex was not run.
+       return false;
+}
+
+
+int LaTeX::scanLogFile(TeXErrors &terr)
+{
+       LString token;
+       int retval = NO_ERRORS;
+       
+       LyXLex lex(NULL, 0);
+
+       LString tmp = ChangeExtension(file, ".log", true);
+       
+       if (!lex.setFile(tmp)) {
+               // unable to open file
+               // return at once
+               retval |= NO_LOGFILE;
+               return retval;
+       }
+       
+       while (lex.IsOK()) {
+               if (lex.EatLine())
+                       token = lex.GetString();
+               else // blank line in the file being read
+                       continue;
+
+               lyxerr.debug(token, Error::LATEX);
+               
+               if (token.prefixIs("LaTeX Warning:")) {
+                       // Here shall we handle different
+                       // types of warnings
+                       retval |= LATEX_WARNING;
+                       lyxerr.debug("LaTeX Warning.", Error::LATEX);
+                       if (token.contains("Rerun to get cross-references")) {
+                               retval |= RERUN;
+                               lyxerr.debug("We should rerun.", Error::LATEX);
+                       } else if (token.contains("Citation")
+                                  && token.contains("on page")
+                                  && token.contains("undefined")) {
+                               retval |= UNDEF_CIT;
+                       }
+               } else if (token.prefixIs("Package")) {
+                       // Package warnings
+                       retval |= PACKAGE_WARNING;
+                       if (token.contains("natbib Warning:")) {
+                               // Natbib warnings
+                               if (token.contains("Citation")
+                                   && token.contains("on page")
+                                   && token.contains("undefined")) {
+                                       retval |= UNDEF_CIT;
+                               }
+                       } else if (token.contains("Rerun LaTeX.")) {
+                               // at least longtable.sty might use this.
+                               retval |= RERUN;
+                       }
+               } else if (token.prefixIs("! LaTeX Error:")) {
+                       // Here shall we handle different
+                       // types of errors
+                       retval |= LATEX_ERROR;
+                       lyxerr.debug("LaTeX Error.", Error::LATEX);
+                       // this is not correct yet
+                       terr.scanError(lex);
+                       num_errors++;
+               } else if (token.prefixIs("! ")) {
+                       // Ok, we have something that looks like a TeX Error
+                       // but what do we really have.
+
+                       // Just get the error description:
+                       LString desc(token);
+                       desc.substring(2, desc.length() - 1);
+
+                       if (desc.contains("Undefined control sequence")) {
+                               retval |= TEX_ERROR;
+                               lyxerr.debug("TeX Error.", Error::LATEX);
+                               terr.scanError(lex);
+                               num_errors++;
+                       } else {
+                               // get the next line
+                               lex.next();
+                               LString tmp = lex.GetString();
+                               if (tmp.prefixIs("l.")) {
+                               // we have a latex error
+                                       retval |=  TEX_ERROR;
+                                       lyxerr.debug("TeX Error.", Error::LATEX);
+                               // get the line number:
+                                       int line = 0;
+                                       sscanf(tmp.c_str(), "l.%d", &line);
+                               // get the rest of the message:
+                                       LString errstr;
+                                       lex.EatLine();
+                                       tmp = lex.GetString();
+                                       while ((tmp != "\n" || !errstr.contains("l."))
+                                              && !tmp.prefixIs("! ")
+                                              && !tmp.contains("(job aborted")
+                                              && !tmp.empty()) {
+                                               errstr += tmp;
+                                               errstr += "\n";
+                                               lex.EatLine();
+                                               tmp = lex.GetString();
+                                       }
+                                       terr.insertError(line, desc, errstr);
+                                       num_errors++;
+                               }
+                       }
+               } else {
+                       // information messages, TeX warnings and other
+                       // warnings we have not caught earlier.
+                       if (token.prefixIs("Overfull ")) {
+                               retval |= TEX_WARNING;
+                       } else if (token.prefixIs("Underfull ")) {
+                               retval |= TEX_WARNING;
+                       } else if (token.contains("Rerun to get citations")) {
+                               // Natbib seems to use this.
+                               retval |= RERUN;
+                       } else if (token.contains("No pages of output")) {
+                               // A dvi file was not created
+                               retval |= NO_OUTPUT;
+                       } else if (token.contains("That makes 100 errors")) {
+                               // More than 100 errors were reprted
+                               retval |= TOO_MANY_ERRORS;
+                       }
+               }
+       }       
+       return retval;
+}
+
+
+void LaTeX::deplog(DepTable & head)
+{
+       // This function reads the LaTeX log file end extracts all the external
+       // files used by the LaTeX run. The files are then entered into the
+       // dependency file.
+
+       LString logfile = ChangeExtension(file, ".log", true);
+       FilePtr in(logfile, FilePtr::read);
+       bool not_eof = true;
+       if (in()) while (not_eof) { // We were able to open the file
+               // Now we read chars until we find a '('
+               int c;
+               do {
+                       c = fgetc(in());
+               } while (c != EOF && c != '(');
+               if (c == EOF) { 
+                       // Nothing more we can do
+                       not_eof = false; 
+                       continue;
+               } 
+
+               // We now have c == '(', we now read the the sequence of
+               // chars until reaching EOL, or ' ' and put that into a string.
+
+               LString foundfile;
+               c = fgetc(in());
+               while (c != '\n' && c != ' ' && c != ')') {
+                       foundfile += char(c);
+                       c = fgetc(in());
+               }
+               if (foundfile.empty()) continue;
+
+               lyxerr.debug("Found file: " 
+                            + foundfile,
+                            Error::LATEX);
+               // Ok now we found a file.
+               // Now we should make sure that
+               // this is a file that we can
+               // access through the normal
+               // paths:
+               // (1) foundfile is an
+               //     absolute path and should
+               //     be inserted.
+               if (AbsolutePath(foundfile)) {
+                       lyxerr.debug("AbsolutePath file: " 
+                                    + foundfile,
+                                    Error::LATEX);
+                       // On inital insert we want to do the update at once
+                       // since this file can not be a file generated by
+                       // the latex run.
+                       head.insert(foundfile, true);
+                       continue;
+               }
+
+               // (2) foundfile is in the tmpdir
+               //     insert it into head
+               if (FileInfo(OnlyFilename(foundfile)).exist()) {
+                       if (foundfile.suffixIs(".aux")) {
+                               lyxerr.debug("We don't want "
+                                            + OnlyFilename(foundfile)
+                                            + " in the dep file",
+                                            Error::LATEX);
+                       } else if (foundfile.suffixIs(".tex")) {
+                               // This is a tex file generated by LyX
+                               // and latex is not likely to change this
+                               // during its runs.
+                               lyxerr.debug("Tmpdir TeX file: "
+                                            + OnlyFilename(foundfile),
+                                            Error::LATEX);
+                               head.insert(foundfile, true);
+                       } else {
+                               lyxerr.debug("In tmpdir file:"
+                                            + OnlyFilename(foundfile),
+                                            Error::LATEX);
+                               head.insert(OnlyFilename(foundfile));
+                       }
+                       continue;
+               }
+
+               // (3) the foundfile can be
+               //     found in the same dir
+               //     as the .lyx file and
+               //     should be inserted.
+               PathPush(path);
+               if (FileInfo(foundfile).exist()) {
+                       lyxerr.print("LyX Strange: this should actually never"
+                                    " happen anymore, this it should be"
+                                    " handled by the Absolute check.");
+                       lyxerr.debug("Same Directory file: " 
+                                    + foundfile,
+                                    Error::LATEX);
+                       head.insert(foundfile);
+                       PathPop();
+                       continue;
+               }
+               PathPop();
+               
+               lyxerr.debug("Not a file or we are unable to find it.",
+                            Error::LATEX);
+
+
+       }
+}
+
+
+void LaTeX::deptex(DepTable &head)
+{
+       int except = AUX|LOG|DVI|BBL|IND|GLO; 
+       LString tmp;
+       FileInfo fi;
+       for (int i = 0; i < file_count; i++) {
+               if (!(all_files[i].file & except)) {
+                       tmp = ChangeExtension(file,
+                                             all_files[i].extension,
+                                             true);
+                       lyxerr.debug("deptex: " + tmp, Error::LATEX);
+                       if (fi.newFile(tmp).exist())
+                               head.insert(tmp);
+               }
+       }
+}
diff --git a/src/LaTeX.h b/src/LaTeX.h
new file mode 100644 (file)
index 0000000..5eea18b
--- /dev/null
@@ -0,0 +1,239 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor        
+ *          Copyright 1995 Matthias Ettrich
+ *           Copyright 1995-1996 The Lyx Team
+ *
+ *           This file is Copyright (C) 1996-1999
+ *           Lars Gullik Bjønnes
+ *
+ *======================================================
+ */
+
+#ifndef _LATEX_H
+#define _LATEX_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+#include "DepTable.h"
+
+class LyXLex;
+class MiniBuffer;
+
+///
+class TeXErrors {
+public:
+       ///
+       TeXErrors() {
+               errors = NULL;
+               next_error = NULL;
+               status = 0;
+               number_of_errors = 0;
+       }
+       ///
+       ~TeXErrors(); 
+       ///
+       void scanError(LyXLex &);
+       ///
+       bool getFirstError(int *line, LString *text);
+       ///
+       bool getNextError(int *line, LString *text);
+       ///
+       void insertError(int line, LString const &error_desc,
+                        LString const &error_text);
+       ///
+       void printErrors();
+       ///
+       void printWarnings();
+       ///
+       void printStatus();
+       ///
+       int getStatus() { return status; }
+private:
+       ///
+       friend class LaTeX;
+       ///
+       int status;
+       ///
+       int number_of_errors;
+       ///
+       struct Error {
+               ///
+               Error () {
+                       next_error = NULL;
+                       error_in_line = 0;
+               }
+               ///
+               Error(int line, LString const &desc, LString const &text) {
+                       next_error = NULL;
+                       error_in_line = line;
+                       error_desc = desc;
+                       error_text = text;
+               }
+               ///
+               ~Error() {
+               }
+               ///
+               Error *next_error;
+               /// what line in the TeX file the error occured in
+               int error_in_line;
+               /// The kind of error
+               LString error_desc;
+               /// The line/cmd that caused the error.
+               LString error_text;
+       };
+       ///
+       Error *errors;
+       ///
+       Error *next_error;
+};
+
+
+///
+class LaTeX {
+public:
+       /** All the different files produced by TeX.
+         
+         This is the files mentioned on page 208-9 in Lamports book +
+         .ltx and .tex files.
+        */
+       enum TEX_FILES {
+               ///
+               NO_FILES = 0,
+               /// used for table of contents et.al.
+               AUX = 1,
+               /// written by BibTeX
+               BBL = 2,
+               /// LaTeX's output
+               DVI = 4,
+               /// glossary (not supported by LyX so far)
+               GLO = 8,
+               ///index
+               IDX = 16,
+               /// written by makeindex
+               IND = 32,
+               /// list of figures
+               LOF = 64,
+               /// the LaTeX log file
+               LOG = 128,
+               /// list of tables
+               LOT = 256,
+               /// table of contents
+               TOC = 512,
+               /// latex files
+               LTX = 1024,
+               /// tex files
+               TEX = 2048,
+               /// list of algorithms
+               LOA = 4096
+       };
+       
+       /** Return values from scanLogFile() and run() (to come)
+
+         This enum should be enlarged a bit so that one could
+         get more feedback from the LaTeX run.
+         */
+       enum log_status {
+               ///
+               NO_ERRORS = 0,
+               ///
+               NO_LOGFILE = 1,
+               ///
+               NO_OUTPUT = 2,
+               ///
+               UNDEF_REF = 4, // Reference '...' on page ... undefined.
+               ///
+               UNDEF_CIT = 8, // Citation '...' on page ... undefined.
+               ///
+               RERUN = 16, // Label(s) may have changed. Rerun to get...
+               ///
+               TEX_ERROR = 32,
+               ///
+               TEX_WARNING = 64,
+               ///
+               LATEX_ERROR = 128,
+               ///
+               LATEX_WARNING = 256,
+               ///
+               PACKAGE_WARNING = 512,
+               ///
+               NO_FILE = 1024,
+               ///
+               NO_CHANGE = 2048,
+               ///
+               TOO_MANY_ERRORS = 4096,
+               ///
+               ERRORS = TEX_ERROR + LATEX_ERROR,
+               ///
+               WARNINGS = TEX_WARNING + LATEX_WARNING + PACKAGE_WARNING
+       };
+       
+
+       /**
+         cmd = the latex command, file = name of the (temporary) latex file,
+         path = name of the files original path.
+         */
+       LaTeX(LString const & cmd, LString const & file, LString const & path);
+       
+       /// runs LaTeX several times
+       int run(TeXErrors &, MiniBuffer *);
+
+       ///
+       int getNumErrors() { return num_errors;}
+
+       /// use this for running LaTeX once
+       int operator() ();
+protected:
+       /** The dependency file.
+         
+         We store the file dependencies in this file.
+         the depency file is on the format:
+         <file> <new checksum> <old checksum>
+       */
+       LString depfile;
+
+       ///
+       LaTeX() {}
+       
+       ///
+       LaTeX(LaTeX const &) {}
+       
+       ///
+       void deplog(DepTable & head);
+
+       ///
+       void deptex(DepTable & head);
+       
+       ///
+       int scanLogFile(TeXErrors &);
+
+       ///
+       bool runMakeIndex(LString const &);
+
+       ///
+       bool runBibTeX(LString const &);
+       
+       ///
+       LString cmd;
+
+       ///
+       LString file;
+       
+       ///
+       LString path;
+       ///
+       TEX_FILES tex_files;
+       
+       ///
+       int file_count;
+
+       // used by scanLogFile
+       int num_errors;
+};
+
+#endif
diff --git a/src/LaTeXFeatures.C b/src/LaTeXFeatures.C
new file mode 100644 (file)
index 0000000..bf34d5a
--- /dev/null
@@ -0,0 +1,256 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 the LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "LaTeXFeatures.h"
+#endif
+
+#include "LString.h"
+#include "error.h"
+#include "lyx_sty.h"
+#include "lyxrc.h"
+#include "LaTeXFeatures.h"
+#include "bufferparams.h"
+#include "layout.h"
+
+extern LyXRC* lyxrc;
+
+LaTeXFeatures::LaTeXFeatures(int n) 
+{
+       // packages
+       color = false;
+       graphics = false;
+       setspace = false;
+       makeidx = false;
+       verbatim = false;
+       longtable = false;
+       algorithm = false;
+       rotating = false;
+       amssymb = false;
+       latexsym = false;
+       pifont = false;
+       subfigure = false;
+       floatflt = false;
+       url = false;
+       
+       // commands
+       lyx = false;
+       lyxline = false;
+       noun = false;
+       lyxarrow = false;
+
+       // quotes
+       quotesinglbase = false;
+       quotedblbase = false;
+       guilsinglleft = false;
+       guilsinglright = false;
+       guillemotleft = false;
+       guillemotright = false;
+
+       // Math mode
+       amsstyle = false;
+       binom = false;
+       boldsymbol = false;
+    
+       // special features
+       LyXParagraphIndent = false;
+       NeedLyXFootnoteCode = false;
+       NeedLyXMinipageIndent = false;
+
+       // layouts
+       layout = new bool[n];
+       for (int i = n; i--;) 
+               layout[i] = false;
+}
+
+
+LString LaTeXFeatures::getPackages(BufferParams const &params)
+{
+       LString packages;
+       LyXTextClass *tclass = lyxstyle.TextClass(params.textclass);
+
+       // color.sty
+       if (color) {
+               if (params.graphicsDriver == "default")
+                       packages +="\\usepackage{color}\n";
+               else
+                       packages += "\\usepackage[" 
+                               + params.graphicsDriver + "]{color}\n";
+       }
+               
+       // makeidx.sty
+       if (makeidx) {
+               if (! tclass->provides_makeidx
+                   && params.language != "french") // french provides
+                                                   // \index !
+                       packages += "\\usepackage{makeidx}\n";
+               packages += "\\makeindex\n";
+       }
+
+       // graphics.sty
+       if (graphics && params.graphicsDriver != "none") {
+               if (params.graphicsDriver == "default")
+                       packages += "\\usepackage{graphics}\n";
+               else
+                       packages += "\\usepackage[" 
+                               + params.graphicsDriver + "]{graphics}\n";
+       }
+
+       //verbatim.sty
+       if (verbatim)
+               packages += "\\usepackage{verbatim}\n";
+
+       if (algorithm) {
+               packages += "\\usepackage{algorithm}\n";
+       }
+
+       // setspace.sty
+       if ((params.spacing.getSpace() != Spacing::Single)
+           || setspace) {
+               packages += "\\usepackage{setspace}\n";
+       }
+       switch (params.spacing.getSpace()) {
+       case Spacing::Single:
+               // we dont use setspace.sty so dont print anything
+               //packages += "\\singlespacing\n";
+               break;
+       case Spacing::Onehalf:
+               packages += "\\onehalfspacing\n";
+               break;
+       case Spacing::Double:
+               packages += "\\doublespacing\n";
+               break;
+       case Spacing::Other:
+               char value[30];
+               sprintf(value, "%.2f", params.spacing.getValue());
+               packages += LString("\\setstretch{") 
+                         + value + "}\n";
+               break;
+       }
+
+       //longtable.sty
+       if (longtable)
+               packages += "\\usepackage{longtable}\n";
+
+       //rotating.sty
+       if (rotating)
+               packages += "\\usepackage{rotating}\n";
+
+       // amssymb.sty
+       if (amssymb)
+               packages += "\\usepackage{amssymb}\n";
+
+       // latexsym.sty
+       if (latexsym)
+               packages += "\\usepackage{latexsym}\n";
+
+       // pifont.sty
+       if (pifont)
+               packages += "\\usepackage{pifont}\n";
+
+       // subfigure.sty
+       if (subfigure)
+               packages += "\\usepackage{subfigure}\n";
+
+       // floatflt.sty
+       if (floatflt)
+               packages += "\\usepackage{floatflt}\n";
+
+       // url.sty
+       if (url && ! tclass->provides_url)
+               packages += "\\IfFileExists{url.sty}{\\usepackage{url}}\n"
+                           "                      {\\newcommand{\\url}{\\texttt}}\n";
+       
+       return packages;
+}
+
+
+LString LaTeXFeatures::getMacros(BufferParams const & /* params */)
+{
+       LString macros;
+
+       // always include this
+       if (true || lyx) 
+               macros += lyx_def + '\n';
+
+       if (lyxline) 
+               macros += lyxline_def + '\n';
+
+       if (noun) {
+               macros += noun_def + '\n';
+       }
+
+       if (lyxarrow) {
+               macros += lyxarrow_def + '\n';
+       }
+
+       // quotes. 
+       if (quotesinglbase)
+               macros += quotesinglbase_def + '\n';
+       if (quotedblbase)
+               macros += quotedblbase_def + '\n';
+       if (guilsinglleft)
+               macros += guilsinglleft_def + '\n';
+       if (guilsinglright)
+               macros += guilsinglright_def + '\n';
+       if (guillemotleft)
+               macros += guillemotleft_def + '\n';
+       if (guillemotright)
+               macros += guillemotright_def + '\n';
+    
+        // Math mode    
+       if (boldsymbol && !amsstyle)
+               macros += boldsymbol_def + '\n';
+       if (binom && !amsstyle)
+               macros += binom_def + '\n';
+
+       // other
+        if (NeedLyXMinipageIndent) 
+               macros += minipageindent_def;
+        if (LyXParagraphIndent) 
+               macros += paragraphindent_def;
+        if (NeedLyXFootnoteCode) 
+               macros += floatingfootnote_def;
+
+       return macros;
+}
+
+
+LString LaTeXFeatures::getTClassPreamble(BufferParams const &params)
+{
+       // the text class specific preamble 
+       LyXTextClass *tclass = lyxstyle.TextClass(params.textclass);
+       LString tcpreamble = tclass->preamble;
+
+       int l;
+       for (l = 0 ; l < tclass->number_of_defined_layouts ; l++) {
+               if (layout[l] 
+                   && !tclass->style[l].preamble.empty())
+                       tcpreamble += tclass->style[l].preamble;
+       }
+
+       return tcpreamble;
+}      
+
+
+void LaTeXFeatures::showStruct(BufferParams &params) {
+       lyxerr.print("LyX needs the following commands when LaTeXing:");
+       // packs
+       lyxerr.print("***** Packages:");
+       lyxerr.print(getPackages(params));
+       lyxerr.print("***** Macros:");
+       lyxerr.print(getMacros(params));
+       lyxerr.print("***** Textclass stuff:");
+       lyxerr.print(getTClassPreamble(params));
+       lyxerr.print("***** done.");
+}
diff --git a/src/LaTeXFeatures.h b/src/LaTeXFeatures.h
new file mode 100644 (file)
index 0000000..9b001b7
--- /dev/null
@@ -0,0 +1,132 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 the LyX Team.
+*
+*======================================================*/
+
+#ifndef _LATEXFEATURES_H
+#define _LATEXFEATURES_H
+
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+class LString;
+class BufferParams; 
+class LyXTextClass;
+
+/** The packages and commands that a buffer needs. This struct
+  contains an entry for each of the latex packages and
+  commands that a buffer might need. This struct is supposed to be
+  extended as the need arises. Remember to update the validate function
+  in buffer.C and paragraph.C when you do so. */
+struct LaTeXFeatures {
+       ///
+       LaTeXFeatures(int n) ;
+       ///
+       ~LaTeXFeatures() {
+               delete[] layout;
+       }
+       /// The packaes needed by the document
+       LString getPackages(BufferParams const &params);
+       /// The macros definitions needed by the document
+       LString getMacros(BufferParams const &params);
+       /// The definitions needed by the document's textclass
+       LString getTClassPreamble(BufferParams const &params);
+
+       ///
+       void showStruct(BufferParams &params);
+
+       //@Man: Packages
+       //@{
+       ///
+       bool color;     // color.sty
+       ///
+       bool graphics;  // graphics.sty
+       ///
+       bool setspace;  // setspace.sty
+       ///
+       bool makeidx;   // makeind.sty
+       ///
+       bool verbatim;  // verbatim.sty
+       ///
+       bool longtable; // longtable.sty
+       ///
+       bool algorithm; // algorithm.sty
+       ///
+       bool rotating;  // rotating.sty
+       ///
+       bool amssymb;   // amssymb.sty
+       ///
+       bool latexsym;   // latexsym.sty
+       ///
+       bool pifont;    // pifont.sty
+       ///
+       bool subfigure; // subfigure.sty
+       ///
+       bool floatflt;  // floatflt.sty
+       ///
+       bool url;       // url.sty
+       //@}
+
+       
+       //@Man: Commands
+       //@{
+       ///
+       bool lyx;
+       ///
+       bool lyxline;
+       /// \noun
+       bool noun;
+       /// \lyxarrow
+       bool lyxarrow;
+       //@}
+       
+       //@Man: Quotes
+       //@{
+       ///
+       bool quotesinglbase;
+       ///
+       bool quotedblbase;
+       ///
+       bool guilsinglleft;
+       ///
+       bool guilsinglright;
+       ///
+       bool guillemotleft;
+       ///
+       bool guillemotright;
+       //@}
+       
+       //@Man: Math mode
+       //@{
+       ///
+       bool amsstyle;
+       ///
+       bool boldsymbol;
+       ///
+       bool binom;
+       //@}
+       
+       //@Man: Layouts
+       //@{
+       bool *layout;
+       //@}
+       
+       //@Man: Special features
+       //@{
+       bool LyXParagraphIndent;
+       ///
+       bool NeedLyXFootnoteCode;
+       ///
+       bool NeedLyXMinipageIndent;
+       //@}
+};
+
+#endif
diff --git a/src/LaTeXLog.C b/src/LaTeXLog.C
new file mode 100644 (file)
index 0000000..e62c417
--- /dev/null
@@ -0,0 +1,69 @@
+#include <config.h>
+
+#include <stdlib.h>
+#include FORMS_H_LOCATION
+#include "buffer.h"
+#include "latexoptions.h"
+#include "lyx_main.h"
+#include "LString.h"
+#include "FileInfo.h"
+#include "filetools.h"
+#include "pathstack.h"
+#include "lyxrc.h"
+#include "BufferView.h"
+#include "gettext.h"
+
+//     $Id: LaTeXLog.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $  
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: LaTeXLog.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+/* Prototypes */
+extern FD_LaTeXLog *fd_latex_log;
+extern BufferView *current_view;
+
+void ShowLatexLog()
+{
+    LString filename, fname, bname, path;
+    bool use_build = false;
+
+    filename = current_view->currentBuffer()->getFileName();
+    if (!filename.empty()) {
+       fname = SpaceLess(ChangeExtension(filename, ".log", true));
+       bname = SpaceLess(ChangeExtension(filename, lyxrc->literate_extension + ".out", true));
+       path = OnlyPath(filename);
+       if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)) {
+               path = current_view->currentBuffer()->tmppath;
+       }
+       FileInfo f_fi(path + fname), b_fi(path + bname);
+       if (b_fi.exist())
+           if ( ! f_fi.exist()
+                || f_fi.getModificationTime() < b_fi.getModificationTime())
+               use_build = true; // If no Latex log or Build log is newer, show Build log
+       PathPush(path); // path to LaTeX file
+    }
+    if (!fl_load_browser(fd_latex_log->browser_latexlog,
+                        (use_build)?bname.c_str():fname.c_str()))
+        fl_add_browser_line(fd_latex_log->browser_latexlog, _("NO LATEX LOG FILE!"));
+    if (fd_latex_log->LaTeXLog->visible) {
+       fl_raise_form(fd_latex_log->LaTeXLog);
+    }
+    else {
+       fl_show_form(fd_latex_log->LaTeXLog,
+                    FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
+                    (use_build)?_("Build Program Log"):_("LaTeX Log"));
+    }
+    if (!filename.empty())
+        PathPop();
+}
+
+void LatexLogClose(FL_OBJECT *, long)
+{
+    fl_hide_form(fd_latex_log->LaTeXLog);
+}
+
+void LatexLogUpdate(FL_OBJECT *, long)
+{
+    ShowLatexLog();
+}
diff --git a/src/Literate.C b/src/Literate.C
new file mode 100644 (file)
index 0000000..d77447f
--- /dev/null
@@ -0,0 +1,204 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor        
+ *          Copyright (C) 1995 Matthias Ettrich
+ *           Copyright (C) 1995-1998 The LyX Team.
+ *
+ *           This file is Copyright (C) 1996-1998
+ *           Lars Gullik Bjønnes
+ *
+ *======================================================
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "filetools.h"
+#include "LaTeX.h"
+#include "Literate.h"
+#include "lyxlex.h"
+#include "FileInfo.h"
+#include "error.h"
+#include "lyxlib.h"
+#include "syscall.h"
+#include "syscontr.h"
+#include "pathstack.h"
+#include "bufferlist.h"
+#include "minibuffer.h"
+#include "gettext.h"
+
+//     $Id: Literate.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $  
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: Literate.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+extern BufferList bufferlist;
+
+Literate::Literate(LString const & latex, LString const & f, LString const & p, 
+                  LString const & l, 
+                  LString const & literate, LString const & literate_f, 
+                  LString const & build, LString const & build_f)
+                   : LaTeX (latex, f, p),
+                    litfile(l),
+                    literate_cmd(literate), literate_filter(literate_f), 
+                    build_cmd(build), build_filter(build_f)
+{
+}
+
+
+int Literate::weave(TeXErrors &terr, MiniBuffer *minib)
+{
+        int scanres = Literate::NO_ERRORS;
+        LString tmp1, tmp2;
+        int ret1, ret2;
+        Systemcalls one, two;
+
+        // The class LaTeX does not know the temp path.
+        bufferlist.updateIncludedTeXfiles(GetCWD());
+        
+        lyxerr.debug(LString(_("Weaving document")),
+                     Error::LATEX);
+        minib->Set(LString(_("Weaving document")));
+        minib->Store();
+
+        // Run the literate program to convert \literate_extension file to .tex file
+        //
+        tmp1 = literate_cmd + " < " + litfile + " > " + file + " 2> " + litfile + ".out";
+        tmp2 = literate_filter + " < " + litfile + ".out" + " > " + litfile + ".log";
+        ret1 = one.Startscript(Systemcalls::System, tmp1);
+        ret2 = two.Startscript(Systemcalls::System, tmp2);
+        lyxerr.debug(LString(_("LITERATE")) + " {" + tmp1 + "} {" + tmp2 + "}");
+       scanres = scanLiterateLogFile(terr);
+       if (scanres & Literate::ERRORS) return scanres; // return on literate error
+
+       return run(terr, minib);
+}
+
+
+int Literate::build(TeXErrors &terr, MiniBuffer *minib)
+        // We know that this function will only be run if the lyx buffer
+        // has been changed. 
+{
+        int scanres = Literate::NO_ERRORS;
+        num_errors = 0; // just to make sure.
+        // DepTable head; // empty head // unused
+        // bool rerun = false; // rerun requested // unused
+        LString tmp1, tmp2;
+        int ret1, ret2;
+        Systemcalls one, two;
+        
+        // The class LaTeX does not know the temp path.
+        bufferlist.updateIncludedTeXfiles(GetCWD());
+        
+        lyxerr.debug(LString(_("Building program")), 
+                     Error::LATEX);
+        minib->Set(LString(_("Building program")));
+        minib->Store();
+
+        // Run the build program
+        //
+        tmp1 = build_cmd + ' ' + litfile + " > " + litfile + ".out 2>&1";
+        tmp2 = build_filter + " < " + litfile + ".out" + " > " + litfile + ".log";
+        ret1 = one.Startscript(Systemcalls::System, tmp1);
+        ret2 = two.Startscript(Systemcalls::System, tmp2);
+        scanres = scanBuildLogFile(terr);
+        lyxerr.debug("Done.", Error::LATEX);
+
+        return scanres;
+}
+
+
+int Literate::scanLiterateLogFile(TeXErrors &terr)
+{
+        LString token;
+        int retval = NO_ERRORS;
+        
+        LyXLex lex(NULL, 0);
+        LString tmp = litfile + ".log";
+        
+        if (!lex.setFile(tmp)) {
+                // unable to open file
+                // return at once
+                retval |= NO_LOGFILE;
+                return retval;
+        }
+        
+        while (lex.IsOK()) {
+                if (lex.EatLine())
+                        token = lex.GetString();
+                else // blank line in the file being read
+                        continue;
+                lyxerr.debug(token, Error::LATEX);
+                
+                if (token.prefixIs("Build Warning:")) {
+                        // Here shall we handle different
+                        // types of warnings
+                        retval |= LATEX_WARNING;
+                        lyxerr.debug("Build Warning.", Error::LATEX);
+                } else if (token.prefixIs("! Build Error:")) {
+                        // Here shall we handle different
+                        // types of errors
+                        retval |= LATEX_ERROR;
+                        lyxerr.debug("Build Error.", Error::LATEX);
+                        // this is not correct yet
+                        terr.scanError(lex);
+                        num_errors++;
+                }
+        }       
+        return retval;
+}
+
+
+int Literate::scanBuildLogFile(TeXErrors &terr)
+{
+        LString token;
+        int retval = NO_ERRORS;
+        
+        LyXLex lex(NULL, 0);
+        LString tmp = litfile + ".log";
+        
+        if (!lex.setFile(tmp)) {
+                // unable to open file
+                // return at once
+                retval |= NO_LOGFILE;
+                return retval;
+        }
+        
+        while (lex.IsOK()) {
+                if (lex.EatLine())
+                        token = lex.GetString();
+                else // blank line in the file being read
+                        continue;
+                lyxerr.debug(token, Error::LATEX);
+                
+                if (token.prefixIs("Build Warning:")) {
+                        // Here shall we handle different
+                        // types of warnings
+                        retval |= LATEX_WARNING;
+                        lyxerr.debug("Build Warning.", Error::LATEX);
+                } else if (token.prefixIs("! Build Error:")) {
+                        // Here shall we handle different
+                        // types of errors
+                        retval |= LATEX_ERROR;
+                        lyxerr.debug("Build Error.", Error::LATEX);
+                        // this is not correct yet
+                        terr.scanError(lex);
+                        num_errors++;
+                }
+        }       
+        return retval;
+}
+
+
diff --git a/src/Literate.h b/src/Literate.h
new file mode 100644 (file)
index 0000000..e901375
--- /dev/null
@@ -0,0 +1,61 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor        
+ *          Copyright (C) 1995 Matthias Ettrich
+ *
+ *           This file is Copyright (C) 1996-1998
+ *           Lars Gullik Bjønnes
+ *
+ *======================================================
+ */
+
+#ifndef _LITERATE_H
+#define _LITERATE_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+#include "DepTable.h"
+
+///
+class Literate: public LaTeX {
+public:
+       Literate(LString const & cmd, LString const & file, LString const & path,
+                LString const & litfile,
+                LString const & literate_cmd, LString const & literate_filter, 
+                LString const & build_cmd, LString const & build_filter);
+       
+        /// runs literate and latex
+        int weave(TeXErrors &, MiniBuffer *);
+
+        ///
+        int scanLiterateLogFile(TeXErrors &);
+
+        /// runs literate and build
+        int build(TeXErrors &, MiniBuffer *);
+
+        ///
+        int scanBuildLogFile(TeXErrors &);
+
+private:
+        ///
+        LString litfile;
+        
+        ///
+        LString literate_cmd;
+        ///
+        LString literate_filter;
+        ///
+        LString build_cmd;
+        ///
+        LString build_filter;
+};
+
+#endif
diff --git a/src/LyXAction.C b/src/LyXAction.C
new file mode 100644 (file)
index 0000000..750312f
--- /dev/null
@@ -0,0 +1,755 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "LyXAction.h"
+#include "error.h"
+#include "gettext.h"
+
+ /*  
+     NAMING RULES FOR USER-COMMANDS
+     Here's the set of rules to apply when a new command name is introduced:
+     1) Use the object.event order. That is, use `word-forward'
+        instead of `forward-word'.
+     2) Don't introduce an alias for an already named object. Same for events.
+     3) Forward movement or focus is called `forward' (not `right').
+     4) Backward movement or focus is called `backward' (not `left').
+     5) Upward movement of focus is called `up'.
+     6) Downward movement is called `down'.
+     7) The begin of an object is called `begin' (not `start').
+     8) The end of an object is called `end'.
+     (May 19 1996, 12:04, RvdK)
+ */
+
+// These are globals. 
+LyXAction lyxaction;
+
+
+/* This table is sorted alphabetically [asierra 14Jan96] */
+/* This table MUST be sorted alphabetically, incidentally! */ 
+kb_func_table const lyx_func_table[] = {
+       { "accent-acute",                         LFUN_ACUTE },
+       { "accent-breve",                         LFUN_BREVE },
+       { "accent-caron",                         LFUN_CARON },
+       { "accent-cedilla",                       LFUN_CEDILLA },
+       { "accent-circle",                        LFUN_CIRCLE },
+       { "accent-circumflex",                    LFUN_CIRCUMFLEX },
+       { "accent-dot",                           LFUN_DOT },
+       { "accent-grave",                         LFUN_GRAVE },
+       { "accent-hungarian-umlaut",              LFUN_HUNG_UMLAUT },
+       { "accent-macron",                        LFUN_MACRON },
+       { "accent-ogonek",                        LFUN_OGONEK },
+       { "accent-special-caron",                 LFUN_SPECIAL_CARON },
+       { "accent-tie",                           LFUN_TIE },
+       { "accent-tilde",                         LFUN_TILDE },
+       { "accent-umlaut",                        LFUN_UMLAUT },
+       { "accent-underbar",                      LFUN_UNDERBAR },
+       { "accent-underdot",                      LFUN_UNDERDOT },
+       { "accent-vector",                        LFUN_VECTOR }, 
+       { "appendix",                         LFUN_APPENDIX }, 
+       { "apropos",                              LFUN_APROPOS },
+       { "backward-select",                      LFUN_LEFTSEL },
+       { "bibtex-database-add",                  LFUN_BIBDB_ADD },
+       { "bibtex-database-del",                  LFUN_BIBDB_DEL },
+       { "bibtex-insert",                        LFUN_INSERT_BIBTEX },
+       { "bibtex-style",                         LFUN_BIBTEX_STYLE },
+       { "break-line",                           LFUN_BREAKLINE },
+       { "break-paragraph",                      LFUN_BREAKPARAGRAPH },
+       { "break-paragraph-keep-layout",          LFUN_BREAKPARAGRAPHKEEPLAYOUT },
+       { "break-paragraph-skip",                 LFUN_BREAKPARAGRAPH_SKIP },
+       { "buffer-auto-save",                     LFUN_AUTOSAVE },
+       { "buffer-begin",                         LFUN_BEGINNINGBUF },
+       { "buffer-begin-select",                  LFUN_BEGINNINGBUFSEL },
+       { "buffer-child-insert",                  LFUN_CHILDINSERT },  // ale970521
+       { "buffer-child-open",                    LFUN_CHILDOPEN },  // ale970528
+       { "buffer-chktex",                        LFUN_RUNCHKTEX }, // Asger 971030
+       { "buffer-close",                         LFUN_CLOSEBUFFER },         
+       { "buffer-end",                           LFUN_ENDBUF },
+       { "buffer-end-select",                    LFUN_ENDBUFSEL },
+       { "buffer-export",                        LFUN_EXPORT },
+       { "buffer-fax",                           LFUN_FAX },
+       { "buffer-float-insert",                  LFUN_INSERTFOOTNOTE },
+       { "buffer-import",                        LFUN_IMPORT },
+       { "buffer-itemize-bullets-select",        LFUN_BUFFERBULLETSSELECT },
+       { "buffer-new",                           LFUN_MENUNEW },     
+       { "buffer-new-template",                  LFUN_MENUNEWTMPLT },
+       { "buffer-open",                          LFUN_MENUOPEN },    
+       { "buffer-previous",                      LFUN_PREVBUFFER },  
+       { "buffer-print",                         LFUN_MENUPRINT },   
+       { "buffer-reload",                        LFUN_MENURELOAD },   
+       { "buffer-toggle-read-only",              LFUN_READ_ONLY_TOGGLE },
+       { "buffer-typeset",                       LFUN_RUNLATEX },        // Alejandro's proposal
+       { "buffer-typeset-ps",                    LFUN_RUNDVIPS },
+       { "buffer-view",                          LFUN_PREVIEW },
+       { "buffer-view-ps",                       LFUN_PREVIEWPS },
+       { "buffer-write",                         LFUN_MENUWRITE },   
+       { "buffer-write-as",                      LFUN_MENUWRITEAS }, 
+        { "build-program",                        LFUN_BUILDPROG },
+       { "cancel",                               LFUN_CANCEL },
+       { "char-backward",                        LFUN_LEFT },
+       { "char-forward",                         LFUN_RIGHT },
+        { "citation-insert",                     LFUN_INSERT_CITATION },
+       { "command-execute",                      LFUN_EXEC_COMMAND },
+       { "command-prefix",                       LFUN_PREFIX },
+       { "copy",                                 LFUN_COPY },
+       { "cut",                                  LFUN_CUT },
+       { "delete-backward",                      LFUN_BACKSPACE },
+       { "delete-backward-skip",                 LFUN_BACKSPACE_SKIP },
+       { "delete-forward",                       LFUN_DELETE },
+       { "delete-forward-skip",                  LFUN_DELETE_SKIP },
+       { "depth-decrement",                      LFUN_DEPTH_MIN },
+       { "depth-increment",                      LFUN_DEPTH_PLUS },  
+       { "depth-next",                           LFUN_DEPTH },
+       { "dots-insert",                          LFUN_LDOTS },
+       { "down",                                 LFUN_DOWN },                 
+       { "down-select",                          LFUN_DOWNSEL },
+       { "drop-layouts-choice",                  LFUN_DROP_LAYOUTS_CHOICE },
+       { "end-of-sentence-period-insert",        LFUN_END_OF_SENTENCE },
+       { "error-next",                           LFUN_GOTOERROR },   
+       { "error-remove-all",                     LFUN_REMOVEERRORS },
+       { "figure-insert",                        LFUN_FIGURE },
+       { "file-insert",                          LFUN_FILE_INSERT },
+       { "file-insert-ascii",                    LFUN_FILE_INSERT_ASCII },
+       { "file-new",                             LFUN_FILE_NEW },
+       { "file-open",                            LFUN_FILE_OPEN },
+       { "find-replace",                         LFUN_MENUSEARCH },  
+       { "font-bold",                            LFUN_BOLD },        
+       { "font-code",                            LFUN_CODE },        
+       { "font-default",                         LFUN_DEFAULT },
+       { "font-emph",                            LFUN_EMPH },
+       { "font-free",                            LFUN_FREE },
+       { "font-noun",                            LFUN_NOUN },
+       { "font-roman",                           LFUN_ROMAN },
+       { "font-sans",                            LFUN_SANS },
+       { "font-size",                            LFUN_FONT_SIZE },
+       { "font-state",                           LFUN_FONT_STATE }, 
+       { "font-underline",                       LFUN_UNDERLINE },   
+       { "footnote-insert",                      LFUN_FOOTMELT },    
+       { "forward-select",                       LFUN_RIGHTSEL },
+       { "hfill-insert",                         LFUN_HFILL },
+       { "html-insert",                          LFUN_HTMLURL },
+       { "hyphenation-point-insert",             LFUN_HYPHENATION },
+       { "index-insert",                         LFUN_INDEX_INSERT },
+       { "index-insert-last",                    LFUN_INDEX_INSERT_LAST },
+       { "index-print",                          LFUN_INDEX_PRINT },
+       { "inset-latex-insert",                   LFUN_INSERT_INSET_LATEX },
+       { "keymap-off",                           LFUN_KMAP_OFF },
+       { "keymap-primary",                       LFUN_KMAP_PRIM },
+       { "keymap-secondary",                     LFUN_KMAP_SEC },
+       { "keymap-toggle",                        LFUN_KMAP_TOGGLE },
+       { "label-insert",                         LFUN_INSERT_LABEL },
+       { "latex-view-log",                       LFUN_LATEX_LOG },
+       { "layout",                               LFUN_LAYOUT },
+       { "layout-character",                     LFUN_LAYOUT_CHARACTER },
+       { "layout-copy",                          LFUN_LAYOUT_COPY },
+       { "layout-document",                      LFUN_LAYOUT_DOCUMENT },
+       //{ "layout-number",                      LFUN_LAYOUTNO }, // internal only
+       { "layout-paper",                         LFUN_LAYOUT_PAPER },
+       { "layout-paragraph",                     LFUN_LAYOUT_PARAGRAPH },
+       { "layout-paste",                         LFUN_LAYOUT_PASTE },
+       { "layout-preamble",                      LFUN_LAYOUT_PREAMBLE },
+       { "layout-quotes",                        LFUN_LAYOUT_QUOTES },
+       { "layout-save-default",                  LFUN_LAYOUT_SAVE_DEFAULT },
+       { "layout-table",                         LFUN_LAYOUT_TABLE },
+       { "line-begin",                           LFUN_HOME },        
+       { "line-begin-select",                    LFUN_HOMESEL },     
+       { "line-delete-forward",                  LFUN_DELETE_LINE_FORWARD },  
+       { "line-end",                             LFUN_END },         
+       { "line-end-select",                      LFUN_ENDSEL },
+       { "loa-insert",                           LFUN_LOA_INSERT },
+       { "lof-insert",                           LFUN_LOF_INSERT },
+       { "lot-insert",                           LFUN_LOT_INSERT },
+       { "lyx-quit",                             LFUN_QUIT },
+       { "marginpar-insert",                     LFUN_MARGINMELT },  
+       { "mark-off",                             LFUN_MARK_OFF },    
+       { "mark-on",                              LFUN_MARK_ON },     
+       { "mark-toggle",                          LFUN_SETMARK }, 
+       { "math-delim",                           LFUN_MATH_DELIM },
+       { "math-display",                         LFUN_MATH_DISPLAY }, // Alejandro's proposal
+       { "math-greek",                           LFUN_GREEK },   
+       { "math-greek-toggle",                    LFUN_GREEK_TOGGLE },   
+       { "math-insert",                          LFUN_INSERT_MATH },   
+       { "math-limits",                          LFUN_MATH_LIMITS },
+        { "math-macro",                           LFUN_MATH_MACRO },
+        { "math-macro-arg",                       LFUN_MATH_MACROARG },
+       { "math-matrix",                          LFUN_INSERT_MATRIX }, 
+       { "math-mode",                            LFUN_MATH_MODE },
+       { "math-nonumber",                        LFUN_MATH_NONUMBER },
+       { "math-number",                          LFUN_MATH_NUMBER }, 
+       { "math-size",                            LFUN_MATH_SIZE }, 
+       { "melt",                                 LFUN_MELT },            // Needs better name. What about "float-disolve" or "float-extract" (Lgb)
+       { "menu-open",                            LFUN_MENU_OPEN_BY_NAME },
+       { "menu-separator-insert",                LFUN_MENU_SEPARATOR },
+       { "meta-prefix",                          LFUN_META_FAKE },
+       { "note-insert",                          LFUN_INSERT_NOTE },
+       { "note-next",                            LFUN_GOTONOTE },
+       { "open-stuff",                           LFUN_OPENSTUFF },       // Needs better name.
+       { "paragraph-down",                       LFUN_DOWN_PARAGRAPH },
+       { "paragraph-down-select",                LFUN_DOWN_PARAGRAPHSEL },
+       { "paragraph-up",                         LFUN_UP_PARAGRAPH },
+       { "paragraph-up-select",                  LFUN_UP_PARAGRAPHSEL },
+        { "parent-insert",                       LFUN_PARENTINSERT },
+       { "paste",                                LFUN_PASTE },
+       { "primary-selection-paste",              LFUN_PASTESELECTION },
+       { "protected-space-insert",               LFUN_PROTECTEDSPACE },
+       { "quote-insert",                         LFUN_QUOTE },
+       { "reconfigure",                          LFUN_RECONFIGURE },
+       { "redo",                                 LFUN_REDO },
+        { "reference-back",                       LFUN_REFBACK },
+        { "reference-goto",                       LFUN_REFGOTO }, 
+       { "reference-insert",                     LFUN_INSERT_REF },
+       { "reference-toggle",                     LFUN_REFTOGGLE },
+       { "screen-down",                          LFUN_NEXT },        
+       { "screen-down-select",                   LFUN_NEXTSEL },     
+       { "screen-recenter",                      LFUN_CENTER },
+       { "screen-up",                            LFUN_PRIOR },       
+       { "screen-up-select",                     LFUN_PRIORSEL },    
+       { "self-insert",                          LFUN_SELFINSERT },
+       { "server-char-after",                    LFUN_CHARATCURSOR },
+       { "server-get-font",                      LFUN_GETFONT },
+       { "server-get-latex",                     LFUN_GETLATEX },
+       { "server-get-layout",                    LFUN_GETLAYOUT },
+       { "server-get-name",                      LFUN_GETNAME },
+       { "server-get-tip",                       LFUN_GETTIP },
+       { "server-get-xy",                        LFUN_GETXY },
+       { "server-goto-file-row",                 LFUN_GOTOFILEROW },
+       { "server-notify",                        LFUN_NOTIFY },
+       { "server-set-xy",                        LFUN_SETXY },
+       { "spellchecker",                         LFUN_SPELLCHECK },  
+       { "symbol-insert",                        LFUN_INSERT_MATH },
+       { "tab-forward",                          LFUN_TAB },
+       { "tab-insert",                           LFUN_TABINSERT },
+       { "table-insert",                         LFUN_TABLE },
+       { "tex-mode",                             LFUN_TEX },
+       { "toc-insert",                           LFUN_TOC_INSERT },
+       { "toc-view",                             LFUN_TOCVIEW },
+       { "toggle-cursor-follows-scrollbar",      LFUN_TOGGLECURSORFOLLOW },
+       { "toolbar-add-to",                       LFUN_ADD_TO_TOOLBAR },
+       { "toolbar-push",                         LFUN_PUSH_TOOLBAR },
+       { "undo",                                 LFUN_UNDO },
+       { "up",                                   LFUN_UP },          
+       { "up-select",                            LFUN_UPSEL },
+       { "url-insert",                           LFUN_URL },
+       { "vc-check-in",                          LFUN_VC_CHECKIN }, 
+       { "vc-check-out",                         LFUN_VC_CHECKOUT }, 
+       { "vc-history",                           LFUN_VC_HISTORY }, 
+       { "vc-register",                          LFUN_VC_REGISTER }, 
+       { "vc-revert",                            LFUN_VC_REVERT }, 
+       { "vc-undo-last",                         LFUN_VC_UNDO }, 
+       { "word-backward",                        LFUN_WORDLEFT },
+       { "word-backward-select",                 LFUN_WORDLEFTSEL },
+       { "word-capitalize",                      LFUN_CAPITALIZE_WORD },
+       { "word-delete-backward",                 LFUN_DELETE_WORD_BACKWARD },
+       { "word-delete-forward",                  LFUN_DELETE_WORD_FORWARD }, 
+       { "word-find-backward",                   LFUN_WORDFINDBACKWARD },
+       { "word-find-forward",                    LFUN_WORDFINDFORWARD },
+       { "word-forward",                         LFUN_WORDRIGHT },
+       { "word-forward-select",                  LFUN_WORDRIGHTSEL },
+       { "word-lowcase",                         LFUN_LOWCASE_WORD },
+       { "word-upcase",                          LFUN_UPCASE_WORD }
+};
+
+
+/* 
+   This table contains the actions that modify a buffer and therefore
+   are not allowed for RO files. Do you think we have too much tables?
+   Each single integer in this table replaces 5 lines of code in lyxfunc
+   that include at least 3 function calls (several integers in the 
+   code segment).
+   The table could in the near future be expanded adding a second integer 
+   field with attributes using these tags:
+
+enum FUNC_ATTRIB {
+    LFAT_NONE=0,     // Nothing special
+    LFAT_ISRO=1,     // Is readonly (does not modify a buffer)
+    LFAT_ISIA=2,     // Is interactive (requires a GUI)
+    LFAT_REQARG=4,   // Requires argument
+    LFAT_ISMO=8,     // Only math mode
+    LFAT_ETCETC
+};
+
+struct {
+    kb_action action;
+    unsigned  attrib; 
+};
+
+Alejandro-970604
+*/
+
+kb_action func_attrib_table[] = {
+       LFUN_ACUTE,
+       LFUN_AUTOSAVE,
+       LFUN_BACKSPACE,
+       LFUN_BACKSPACE_SKIP,
+       LFUN_BIBDB_ADD,
+       LFUN_BIBDB_DEL,
+       LFUN_BIBTEX_STYLE,
+       LFUN_BOLD,
+       LFUN_BREAKLINE,
+       LFUN_BREAKPARAGRAPH,
+       LFUN_BREAKPARAGRAPHKEEPLAYOUT,
+       LFUN_BREAKPARAGRAPH_SKIP,
+       LFUN_BREVE,
+       LFUN_BUFFERBULLETSSELECT,
+       LFUN_CAPITALIZE_WORD,
+       LFUN_CARON,
+       LFUN_CEDILLA,
+       LFUN_CHILDINSERT,
+       LFUN_CIRCLE,
+       LFUN_CIRCUMFLEX,
+       LFUN_CODE,
+       LFUN_CUT,
+       LFUN_DEFAULT,
+       LFUN_DELETE,
+       LFUN_DELETE_LINE_FORWARD,
+       LFUN_DELETE_SKIP,
+       LFUN_DELETE_WORD_BACKWARD,
+       LFUN_DELETE_WORD_FORWARD,
+       LFUN_DEPTH,
+       LFUN_DEPTH_MIN,
+       LFUN_DEPTH_PLUS,
+       LFUN_DOT,
+       LFUN_EMPH,
+       LFUN_END_OF_SENTENCE,
+       LFUN_FIGURE,
+       LFUN_FILE_INSERT,
+       LFUN_FILE_INSERT_ASCII,
+       LFUN_FONT_SIZE,
+       LFUN_FOOTMELT,
+       LFUN_FREE,
+       LFUN_GRAVE,
+       LFUN_HFILL,
+       LFUN_HTMLURL,
+       LFUN_HUNG_UMLAUT,
+       LFUN_HYPHENATION,
+       LFUN_INDEX_INSERT,
+       LFUN_INDEX_INSERT_LAST,
+       LFUN_INDEX_PRINT,
+       LFUN_INSERTFOOTNOTE,
+       LFUN_INSERT_BIBTEX,
+       LFUN_INSERT_CITATION,
+       LFUN_INSERT_INSET_LATEX,
+       LFUN_INSERT_LABEL,
+       LFUN_INSERT_MATH,
+       LFUN_INSERT_MATRIX,
+       LFUN_INSERT_NOTE,
+       LFUN_INSERT_REF,
+       LFUN_LAYOUT,
+       LFUN_LAYOUTNO,
+       LFUN_LAYOUT_CHARACTER,
+       LFUN_LAYOUT_PASTE,
+       LFUN_LAYOUT_QUOTES,
+       LFUN_LDOTS,
+       LFUN_LOA_INSERT,
+       LFUN_LOF_INSERT,
+       LFUN_LOT_INSERT,
+       LFUN_LOWCASE_WORD,
+       LFUN_MACRON,
+       LFUN_MARGINMELT,
+       LFUN_MATH_DELIM,
+       LFUN_MATH_DISPLAY,
+       LFUN_MATH_MACRO,
+       LFUN_MATH_MACROARG,
+       LFUN_MATH_MODE,
+       LFUN_MATH_NONUMBER,
+       LFUN_MATH_NUMBER,
+       LFUN_MATH_SIZE,
+       LFUN_MELT,
+       LFUN_MENU_SEPARATOR,
+       LFUN_NOUN,
+       LFUN_OGONEK,
+       LFUN_PARENTINSERT,
+       LFUN_PASTE,
+       LFUN_PASTESELECTION,
+       LFUN_PROTECTEDSPACE,
+       LFUN_QUOTE,
+       LFUN_REDO,
+       LFUN_REFTOGGLE,
+       LFUN_ROMAN,
+       LFUN_SANS,
+       LFUN_SELFINSERT,
+       LFUN_SPECIAL_CARON,
+       LFUN_TABINSERT,
+       LFUN_TABLE,
+       LFUN_TEX,
+       LFUN_TIE,
+       LFUN_TILDE,
+       LFUN_TOC_INSERT,
+       LFUN_UMLAUT,
+       LFUN_UNDERBAR,
+       LFUN_UNDERDOT,
+       LFUN_UNDERLINE,
+       LFUN_UNDO,
+       LFUN_UNKNOWN_ACTION,
+       LFUN_UPCASE_WORD,
+       LFUN_URL,
+       LFUN_VECTOR,
+       LFUN_WORDFINDFORWARD,
+       LFUN_WORDFINDBACKWARD
+};
+
+int LyXAction::psd_idx = 0;
+kb_func_table const * LyXAction::lyx_func_table = &::lyx_func_table[0];
+kb_func_table* LyXAction::lyx_func_args = 0;
+/* === code ============================================================== */
+
+/* This routines allow binding actions with argument.
+ * Provisionally a fixed size array and global functions are used.
+ * [asierra 20Jan96]
+ */
+#define MAX_PSEUDO_ACTION 128
+
+
+LyXAction::LyXAction()
+{
+       lyx_func_args= new kb_func_table[MAX_PSEUDO_ACTION];
+        funcCount = sizeof(::lyx_func_table) / sizeof(::kb_func_table);
+}
+
+
+LyXAction::~LyXAction()
+{
+       if (lyx_func_args) {
+// This is wrong, so I'll just disable it for now.
+// The problem is that we might free memory twice in some situations...
+// It's better to leak a bit that to crash. (Asger)
+//             for (int i=0; i < psd_idx; i++) {
+//                     free(lyx_func_args[i].name);
+//             }
+               delete[] lyx_func_args;
+               lyx_func_args = 0;
+       }
+}
+
+
+// Search for an existent pseudoaction, return -1 if it doesn't exist.
+int  LyXAction::searchActionArg(kb_action action, char const *arg)
+{
+       kb_func_table *tb = &lyx_func_args[0];
+       for (int i=0; i<psd_idx; i++) {
+               if (action==tb->action && !strcmp(tb->name, arg)) {      
+
+                       lyxerr.debug(LString("Pseudoaction already exist[") 
+                                    + int(action) + '|' 
+                                    + PTR_AS_INT(arg) + ']',
+                                    Error::KEY);
+
+                       return LFUN_LASTACTION+i;
+               }
+               tb++;
+       }
+       return -1;
+}
+
+
+// Returns a pseudo-action given an action and its argument.
+int LyXAction::getPseudoAction(kb_action action, char const *arg)
+{
+       // Check if the pseudo-action already exist.
+       int psdaction = searchActionArg(action, arg);
+   
+       if (psdaction >= 0) return psdaction;
+
+       if (psd_idx>=MAX_PSEUDO_ACTION) {
+               lyxerr.print("Lyx Error: No more pseudo-actions allowed");
+               lyxerr.print("           Tell the developers.");
+               return -1;
+       }
+       lyx_func_args[psd_idx].name = strdup(arg);
+       lyx_func_args[psd_idx].action = action;
+       psd_idx++;
+       return LFUN_LASTACTION+psd_idx-1;
+}
+
+
+// Retrieves the real action and its argument.
+int LyXAction::retrieveActionArg(int i, char const** arg)
+{
+       i -= LFUN_LASTACTION;
+       if (i >= 0 &&  i <psd_idx) {
+               *arg = lyx_func_args[i].name;
+               return (int)lyx_func_args[i].action;
+       } else {
+               lyxerr.print("Lyx Error: Unrecognized pseudo-action");
+               return -1;
+       }
+}
+
+
+// Returns an action tag from a string.
+int LyXAction::LookupFunc(char const *func)
+{
+       if (!func) 
+               return LFUN_UNKNOWN_ACTION;         
+       if (func[0] == '\0')
+               return LFUN_NOACTION;
+   /* In the scan loop below, l can never become r, so set r one past the last
+      valid func table slot. RVDK_PATCH_5 */
+       int k, l= 0, r = funcCount;
+       int action = LFUN_UNKNOWN_ACTION;
+       char *arg = strchr(func, ' ');
+
+       if (arg) *(arg++) = '\0';      
+
+       while (l < r) {
+               last_action_idx = (l+r)/2;
+               k = strcmp(lyx_func_table[last_action_idx].name, func);
+               if (k==0) {
+                       action = lyx_func_table[last_action_idx].action;
+                       break;
+               } else
+                       if (k<0) l = last_action_idx+1; else r = last_action_idx;
+       }
+       if (arg && action >= 0) {
+               action = getPseudoAction((kb_action)action, arg);
+               lyxerr.debug(LString("Pseudo action_arg[")
+                            + int(action) + '|' 
+                            + PTR_AS_INT(arg) + ']',Error::KEY);
+       }
+       return action;
+}
+
+
+int LyXAction::getApproxFunc(char const *func)
+{
+    int action = LookupFunc(func);
+    if (action<0) {
+       int k = strncmp(lyx_func_table[last_action_idx].name,
+                       func, strlen(func));
+       if (k<0 && last_action_idx<funcCount-1) 
+         last_action_idx++;
+       else if (k>0 && last_action_idx>0)
+         last_action_idx--;
+       
+       action = lyx_func_table[last_action_idx].action;
+    } else if (last_action_idx<funcCount-1)
+      last_action_idx++;
+    
+    return action;
+}
+
+
+char const *LyXAction::getApproxFuncName(char const *func)
+{
+    getApproxFunc(func);
+    return lyx_func_table[last_action_idx].name;
+}
+
+
+char const *LyXAction::getActionName(int action) const
+{
+       // why LFUN_LASTACTION -1? Because LFUN_LASTACTION is too
+       // large an because there is one internal command, hence
+       // lyx_func_table is 2 less then LFUN_LASTACTION (Lgb)
+    for (int i=0; i < funcCount; i++) {
+       if (lyx_func_table[i].action==action)
+         return lyx_func_table[i].name;
+    }
+    
+    // Hmm.. let's see whether this is a pseudoaction
+    action -= LFUN_LASTACTION;
+    if (action>=0 && action<psd_idx) {
+       return lyx_func_args[action].name;
+    }
+    
+    return "";
+}
+
+
+// Returns one line help associated with function
+// Now the missing strings are replaced by the command names. (Alejandro)
+char const *LyXAction::helpText(kb_action action) const
+{
+        static bool is_sorted = false;
+       static kb_func_table helpTexts[LFUN_LASTACTION] =
+       {
+               { _("Describe command"), LFUN_APROPOS },
+               { _("Select previous char"), LFUN_LEFTSEL },
+               { _("Insert bibtex"), LFUN_INSERT_BIBTEX },
+               { _("Autosave"), LFUN_AUTOSAVE },
+               { _("Go to beginning of document"), LFUN_BEGINNINGBUF },
+               { _("Select to beginning of document"), LFUN_BEGINNINGBUFSEL },
+               { _("Close"), LFUN_CLOSEBUFFER },
+               { _("Go to end of document"), LFUN_ENDBUF },
+               { _("Select to end of document"), LFUN_ENDBUFSEL },
+               { _("Fax"), LFUN_FAX },
+               { _("New document"), LFUN_MENUNEW },
+               { _("New document from template"), LFUN_MENUNEWTMPLT },
+               { _("Open"), LFUN_MENUOPEN },
+               { _("Switch to previous document"), LFUN_PREVBUFFER },
+               { _("Print"), LFUN_MENUPRINT },
+               { _("Revert to saved"), LFUN_MENURELOAD },
+               { _("Update DVI"), LFUN_RUNLATEX },
+               { _("Update PostScript"), LFUN_RUNDVIPS },
+               { _("View DVI"), LFUN_PREVIEW },
+               { _("View PostScript"), LFUN_PREVIEWPS },
+                { _("Build program"), LFUN_BUILDPROG },
+               { _("Check TeX"), LFUN_RUNCHKTEX },
+               { _("Save"), LFUN_MENUWRITE },
+               { _("Save As"), LFUN_MENUWRITEAS },
+               { _("Cancel"), LFUN_CANCEL },
+               { _("Go one char back"), LFUN_LEFT },
+               { _("Go one char forward"), LFUN_RIGHT },
+               { _("Insert citation"), LFUN_INSERT_CITATION },
+               { _("Execute command"), LFUN_EXEC_COMMAND },
+               { _("Copy"), LFUN_COPY },
+               { _("Cut"), LFUN_CUT },
+               { _("Decrement environment depth"), LFUN_DEPTH_MIN },
+               { _("Increment environment depth"), LFUN_DEPTH_PLUS },
+               { _("Change environment depth"), LFUN_DEPTH },
+               { _("Change itemize bullet settings"), LFUN_BUFFERBULLETSSELECT },
+               { _("Go down"), LFUN_DOWN },
+               { _("Select next line"), LFUN_DOWNSEL },
+               { _("Choose Paragraph Environment"), LFUN_DROP_LAYOUTS_CHOICE },
+               { _("Go to next error"), LFUN_GOTOERROR },
+               { _("Insert Figure"), LFUN_FIGURE },
+               { _("Find & Replace"), LFUN_MENUSEARCH },
+               { _("Toggle cursor does/doesn't follow the scrollbar"), LFUN_TOGGLECURSORFOLLOW },
+               { _("Toggle bold"), LFUN_BOLD },
+               { _("Toggle code style"), LFUN_CODE },
+               { _("Default font style"), LFUN_DEFAULT },
+               { _("Toggle emphasize"), LFUN_EMPH },
+               { _("Toggle user defined style"), LFUN_FREE },
+               { _("Toggle noun style"), LFUN_NOUN },
+               { _("Toggle roman font style"), LFUN_ROMAN },
+               { _("Toggle sans font style"), LFUN_SANS },
+               { _("Set font size"), LFUN_FONT_SIZE },
+               { _("Show font state"), LFUN_FONT_STATE },
+               { _("Toggle font underline"), LFUN_UNDERLINE },
+               { _("Insert Footnote"), LFUN_FOOTMELT },
+               { _("Select next char"), LFUN_RIGHTSEL },
+               { _("Insert horizontal fill"), LFUN_HFILL },
+               { _("Insert hyphenation point"), LFUN_HYPHENATION },
+               { _("Insert ... dots"), LFUN_LDOTS },
+               { _("Insert end of sentence period"), LFUN_END_OF_SENTENCE },
+               { _("Turn off keymap"), LFUN_KMAP_OFF },
+               { _("Use primary keymap"), LFUN_KMAP_PRIM },
+               { _("Use secondary keymap"), LFUN_KMAP_SEC },
+               { _("Toggle keymap"), LFUN_KMAP_TOGGLE },
+               { _("Insert Label"), LFUN_INSERT_LABEL },
+               { _("Copy paragraph environment type"), LFUN_LAYOUT_COPY },
+               { _("Paste paragraph environment type"), LFUN_LAYOUT_PASTE },
+               { _("Specify paper size and margins"), LFUN_LAYOUT_PAPER },
+               { _("Go to beginning of line"), LFUN_HOME },
+               { _("Select to beginning of line"), LFUN_HOMESEL },
+               { _("Go to end of line"), LFUN_END },
+               { _("Select to end of line"), LFUN_ENDSEL },
+               { _("Exit"), LFUN_QUIT },
+               { _("Insert Margin note"), LFUN_MARGINMELT },
+               { _("Math Greek"), LFUN_GREEK },   
+               { _("Math mode"), LFUN_MATH_MODE },
+               { _("Go one paragraph down"), LFUN_DOWN_PARAGRAPH },
+               { _("Select next paragraph"), LFUN_DOWN_PARAGRAPHSEL },
+               { _("Go one paragraph up"), LFUN_UP_PARAGRAPH },
+               { _("Select previous paragraph"), LFUN_UP_PARAGRAPHSEL },
+               { _("Paste"), LFUN_PASTE },
+               { _("Insert protected space"), LFUN_PROTECTEDSPACE },
+               { _("Insert quote"), LFUN_QUOTE },
+               { _("Reconfigure"), LFUN_RECONFIGURE },
+               { _("Redo"), LFUN_REDO },
+               { _("Insert cross reference"), LFUN_INSERT_REF },
+               { _("Insert Table"), LFUN_TABLE },
+               { _("Toggle TeX style"), LFUN_TEX },
+               { _("Undo"), LFUN_UNDO },
+               { _("Melt"), LFUN_MELT },
+               { _("Import document"), LFUN_IMPORT },
+               { _("Remove all error boxes"), LFUN_REMOVEERRORS },
+               { _("Insert menu separator"), LFUN_MENU_SEPARATOR }
+//             { "reference-back", LFUN_REFBACK },
+//             { "reference-goto", LFUN_REFGOTO }, 
+       };
+        
+        // Sort to make it faster
+        if (!is_sorted) {
+               int i=0; 
+               while (i < LFUN_LASTACTION-1) {
+                   if (helpTexts[i].action == 0) {
+                       helpTexts[i].action = (kb_action)i;
+                       helpTexts[i].name = getActionName(i);
+                       i++;
+                   } else if (helpTexts[i].action != i) {
+                       int k = helpTexts[i].action;
+                       kb_func_table tmp = helpTexts[k];
+                       helpTexts[k] = helpTexts[i];
+                       helpTexts[i] = tmp;
+                       if (k < i) i++;
+                   } else {
+                       i++;
+                   }
+               }
+               is_sorted = true;
+       }
+
+       if (action <=1 || action >=funcCount)
+               goto no_desc;
+               
+        if (helpTexts[action].action == action) {
+           return helpTexts[action].name;
+       } 
+       //        + LString(' ') + int(is_ro) + LString(']'));
+  no_desc:
+       // In an ideal world, this never happens:
+       return _("No description available!");
+}
+
+
+// Function to compare items from the attrib table.
+int actioncomp(const void *a, const void *b)
+{
+    int const *ia=(int const*)a, *ib=(int const*)b;
+    return (*ia)-(*ib);
+}
+
+bool LyXAction::isFuncRO(kb_action action) const
+{
+    static bool is_sorted = false;    
+    static int fCount = sizeof(::func_attrib_table) / sizeof(kb_action);
+    
+    if (!is_sorted) {
+       qsort(func_attrib_table, fCount, sizeof(kb_action), actioncomp);
+       is_sorted = true;
+//     for (int i=0; i<fCount; i++) 
+//       fprintf(stdout, "%d: %d\n", i, func_attrib_table[i]);
+    }
+
+    int m, k, l= 0, r = fCount;
+    int is_ro = false;
+
+    while (l < r) {
+       m = (l+r)/2;
+       k = func_attrib_table[m] - action;
+       if (k==0) {
+           is_ro = true;
+           break;
+       } else
+         if (k<0) l = m+1; else r = m;
+    }
+    lyxerr.debug(LString("RO[") + int(action)
+                 + LString(" ") + int(is_ro) + LString("]"));
+    return is_ro;
+}
+
diff --git a/src/LyXAction.h b/src/LyXAction.h
new file mode 100644 (file)
index 0000000..2c1bda9
--- /dev/null
@@ -0,0 +1,93 @@
+// -*- C++ -*-
+#ifndef _LYXACTION_H_
+#define _LYXACTION_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "commandtags.h"
+
+class LString;
+
+/// Command name - action   
+struct kb_func_table {
+       ///
+       char const *name;
+       ///
+       kb_action action;
+};
+
+
+/** This class encapsulates LyX action and user command operations.
+ */
+class LyXAction {
+public:
+       ///
+       LyXAction();
+       ///
+       ~LyXAction();
+    
+       /** Returns an action tag from a string. Returns kb_action.
+         Include arguments in func_name ONLY if you
+         want to create new pseudo actions. */
+       int LookupFunc(char const *func_name); 
+
+        /** Returns an action tag which name is the most similar to a string.
+           Don't include arguments, they would be ignored. */
+        int getApproxFunc(char const *func);
+
+        /** Returns an action name the most similar to a string.
+           Don't include arguments, they would be ignored. */
+        const char *getApproxFuncName(char const *func);
+
+       /// Returns a pseudo-action given an action and its argument.
+       int getPseudoAction(kb_action action, char const *arg);
+
+       /// Retrieves the real action and its argument.
+       int retrieveActionArg(int i, char const **arg);
+    
+       /// Search for an existent pseudoaction, return -1 if it doesn't exist.
+       int searchActionArg(kb_action action, char const *arg);
+
+       /// Check if a value is a pseudo-action. 
+       bool isPseudoAction(int);
+    
+       /// Not sure if this function should be here 
+       int bindKey(char const* seq, int action);
+       
+       /// Return the name associated with command
+       char const *getActionName(int action) const;
+
+       /// Return one line help text associated with command
+       char const *helpText(kb_action action) const;
+
+        /// True if the command is Read Only (not allowed for RO buffers)
+       bool isFuncRO(kb_action action) const;
+
+private:
+     
+        ///  Standard commands
+        static kb_func_table const * lyx_func_table;
+       /// Number of commands
+       int funcCount;
+       ///  Pseudoactions
+       static kb_func_table *lyx_func_args;
+       ///  Pseudoaction index
+       static int psd_idx; 
+       /// Last action index found
+       int last_action_idx;
+};
+     
+
+/* --------------------   Inlines  ------------------ */
+    
+     
+inline
+bool LyXAction::isPseudoAction(int a) 
+{ 
+       return (a >= (int)LFUN_LASTACTION); 
+}
+     
+
+#endif
diff --git a/src/LyXSendto.C b/src/LyXSendto.C
new file mode 100644 (file)
index 0000000..6c9058a
--- /dev/null
@@ -0,0 +1,116 @@
+#include <config.h>
+
+#include FORMS_H_LOCATION
+#include "print_form.h"
+#include "lyx_main.h"
+#include "lyxrc.h"
+#include "LString.h"
+#include "filetools.h"
+#include "pathstack.h"
+#include "buffer.h"
+#include "lyx_gui_misc.h"
+#include "syscall.h"
+#include "gettext.h"
+#include "lyx_cb.h"
+
+//     $Id: LyXSendto.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $ 
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: LyXSendto.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+/* Prototypes */
+extern FD_form_sendto *fd_form_sendto;
+extern BufferView *current_view;
+extern int MakeDVIOutput(Buffer *buffer);
+extern bool MenuRunDvips(Buffer *buffer, bool wait);
+
+// Whereas this feature is under the menu item File->Export->Custom,
+// I kept the old name sendto in the code because I am lazy (JMarc)
+
+void MenuSendto()
+{
+    // do this only if the command is empty
+    if (!fl_get_input(fd_form_sendto->input_cmd) &&
+        !lyxrc->custom_export_command.empty())
+        fl_set_input(fd_form_sendto->input_cmd,
+                     lyxrc->custom_export_command.c_str());
+    if (fd_form_sendto->form_sendto->visible) {
+        fl_raise_form(fd_form_sendto->form_sendto);
+    } else {  
+        fl_show_form(fd_form_sendto->form_sendto,
+                     FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
+                     _("Send Document to Command"));
+    }
+}
+
+void SendtoApplyCB(FL_OBJECT *, long)
+{
+    if (!current_view->available())
+        return;
+
+    LString command = fl_get_input(fd_form_sendto->input_cmd);
+    if (command.empty())
+        return;
+    Buffer *buffer = current_view->currentBuffer();
+    if (fl_get_button(fd_form_sendto->radio_ftype_dvi) ||
+        fl_get_button(fd_form_sendto->radio_ftype_ps)) {
+        ProhibitInput();
+        // Generate dvi file and check if there are errors in the .lyx file
+        if (MakeDVIOutput(buffer) > 0) {
+            AllowInput();
+            return;
+        }
+        AllowInput();
+    }
+    LString ftypeext;
+    if (fl_get_button(fd_form_sendto->radio_ftype_lyx))
+        ftypeext = ".lyx";
+    else if (fl_get_button(fd_form_sendto->radio_ftype_latex))
+        ftypeext = ".tex";
+    else if (fl_get_button(fd_form_sendto->radio_ftype_dvi))
+        ftypeext = ".dvi";
+    else if (fl_get_button(fd_form_sendto->radio_ftype_ascii))
+        ftypeext = ".txt";
+    else {
+        ftypeext = ".ps_tmp";
+        if (!MenuRunDvips(buffer, true)) {
+           return;
+       }
+    }
+    LString fname = SpaceLess(ChangeExtension(buffer->getFileName(), 
+                                             ftypeext, true));
+    if (!command.contains("$$FName"))
+        command = "( " + command + " ) <$$FName";
+    command.subst("$$FName",fname);
+    command += " &"; // execute in background
+    // push directorypath, if necessary 
+    LString path = OnlyPath(buffer->getFileName());
+    if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)){
+        path = buffer->tmppath;
+    }
+    PathPush(path);
+    // save the .lyx file in tmp_dir if this filetype is requested
+    if (fl_get_button(fd_form_sendto->radio_ftype_lyx))
+        buffer->writeFile(fname,true);
+    // if the .tex file is requested save it to the tempdir
+    // as now we don't do the MakeDVIOutput anymore
+    if (fl_get_button(fd_form_sendto->radio_ftype_latex))
+        buffer->makeLaTeXFile(fname,path,false);
+    // create the .txt file in tmp_dir if this filetype is requested
+    if (fl_get_button(fd_form_sendto->radio_ftype_ascii))
+        buffer->writeFileAscii(fname, lyxrc->ascii_linelen);
+    Systemcalls one(Systemcalls::System, command);    
+    PathPop();
+}
+
+void SendtoCancelCB(FL_OBJECT *, long)
+{
+    fl_hide_form(fd_form_sendto->form_sendto);
+}
+
+void SendtoOKCB(FL_OBJECT *ob, long data)
+{
+    SendtoCancelCB(ob,data);
+    SendtoApplyCB(ob,data);
+}
diff --git a/src/LyXView.C b/src/LyXView.C
new file mode 100644 (file)
index 0000000..651a859
--- /dev/null
@@ -0,0 +1,363 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "LyXView.h"
+#include "lyx_main.h"
+#include "lyxlookup.h"
+#include "toolbar.h"
+#include "minibuffer.h"
+#include "lyxfunc.h"
+#include "lyx.xpm"
+#include "error.h"
+#include "layout_forms.h"
+#include "intl.h"
+#include "lyxrc.h"
+#include "lyxscreen.h"
+#include "filetools.h"        // OnlyFilename()
+#include "layout.h"
+#include "lyxtext.h"
+
+//     $Id: LyXView.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $   
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: LyXView.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+extern FD_form_document *fd_form_document;
+FD_form_main *fd_form_main; /* a pointer to the one in LyXView
+                              should be removed as soon as possible */
+
+MiniBuffer *minibuffer;/* a pointer to the one in LyXView
+                         should be removed as soon as possible */
+
+extern void AutoSave();
+extern char updatetimer;
+extern void QuitLyX();
+int current_layout = 0;
+
+// This is very temporary
+BufferView *current_view;
+
+
+LyXView::LyXView(int width, int height)
+{
+       fd_form_main = create_form_form_main(width,height);
+       fl_set_form_atclose(_form, atCloseMainFormCB, NULL);
+       lyxerr.debug("Initializing LyXFunc");
+       lyxfunc = new LyXFunc(this);
+       intl = new Intl;
+}
+
+
+LyXView::~LyXView()
+{
+       delete menus;
+       delete toolbar;
+       delete bufferview;
+       delete minibuffer;
+       delete lyxfunc;
+       delete intl;
+}
+
+/// Redraw the main form.
+void LyXView::redraw() {
+       lyxerr.debug("LyXView::redraw()");
+       fl_redraw_form(_form);
+       minibuffer->Activate();
+}
+
+
+// Callback for update timer
+void LyXView::UpdateTimerCB(FL_OBJECT *ob, long)
+{
+       LyXView *view = (LyXView*) ob->u_vdata;
+       if (!view->currentView()->available()) 
+               return;
+       if (!view->currentView()->getScreen() || !updatetimer)
+               return;
+
+       view->currentView()->getScreen()->HideCursor();
+       view->currentBuffer()->update(-2);
+       /* This update can happen, even when the work area has lost
+        * the focus. So suppress the cursor in that case */
+       updatetimer = 0;
+}
+
+
+// Callback for autosave timer
+void LyXView::AutosaveTimerCB(FL_OBJECT *, long)
+{
+       lyxerr.debug("Running AutoSave()");
+       AutoSave();
+}
+
+
+/// Reset autosave timer
+void LyXView::resetAutosaveTimer()
+{
+       if (lyxrc->autosave)
+               fl_set_timer(_form_main->timer_autosave, lyxrc->autosave);
+}
+
+
+// Callback for close main form from window manager
+int LyXView::atCloseMainFormCB(FL_FORM *, void *)
+{
+       QuitLyX();
+       return FL_IGNORE;
+}
+
+
+void LyXView::setPosition(int x, int y)
+{
+       fl_set_form_position(_form, x, y);
+}
+
+
+void LyXView::show(int place, int border, char const* title)
+{
+       fl_show_form(_form, place, border, title);
+       minibuffer->Init();
+       InitLyXLookup(fl_display, _form->window);
+}
+
+
+FD_form_main *LyXView::create_form_form_main(int width, int height)
+       /* to make this work as it should, .lyxrc should have been
+        * read first; OR maybe this one should be made dynamic.
+        * Hmmmm. Lgb. 
+        * We will probably not have lyxrc before the main form is
+        * initialized, because error messages from lyxrc parsing 
+        * are presented (and rightly so) in GUI popups. Asger. 
+        */
+{
+       FL_OBJECT *obj;
+       
+       FD_form_main *fdui = (FD_form_main *)
+               fl_calloc(1, sizeof(FD_form_main));
+
+       _form_main = fdui;
+
+       // the main form
+       _form = fdui->form_main = fl_bgn_form(FL_NO_BOX, width, height);
+       fdui->form_main->u_vdata = (void*) this;
+       obj = fl_add_box(FL_FLAT_BOX,0,0,width,height,"");
+       fl_set_object_color(obj,FL_MCOL,FL_MCOL);
+
+       // Parameters for the appearance of the main form
+       const int air = 2;
+       const int bw = abs(fl_get_border_width());
+       
+       //
+       // THE MENUBAR
+       //
+
+       menus = new Menus(this, air);
+
+       //
+       // TOOLBAR
+       //
+
+       toolbar = new Toolbar(lyxrc->toolbar, this, air, 30 + air + bw);
+
+       // Setup the toolbar
+       toolbar->set(true);
+
+       //
+       // WORKAREA
+       //
+
+       const int ywork = 60 + 2*air + bw;
+       const int workheight = height - ywork - (25 + 2*air);
+
+       ::current_view = bufferview = new BufferView(this, air, ywork,
+                                                    width - 3*air,
+                                                    workheight);
+
+       //
+       // MINIBUFFER
+       //
+
+       minibuffer = new MiniBuffer(this, air, height-(25+air), 
+                                         width-(2*air), 25);
+       ::minibuffer = minibuffer; // to be removed later
+
+
+       //
+       // TIMERS
+       //
+       
+       // timer_autosave
+       fdui->timer_autosave = obj = fl_add_timer(FL_HIDDEN_TIMER,
+                                                 0,0,0,0,"Timer");
+       fl_set_object_callback(obj,AutosaveTimerCB,0);
+       
+       // timer_update
+       fdui->timer_update = obj = fl_add_timer(FL_HIDDEN_TIMER,
+                                               0,0,0,0,"Timer");
+       fl_set_object_callback(obj,UpdateTimerCB,0);
+       obj->u_vdata = (void*) this;
+
+       //
+       // Misc
+       //
+
+        //  assign an icon to main form
+        unsigned int w, h;
+        Pixmap lyx_p, lyx_mask;
+        lyx_p = fl_create_from_pixmapdata(fl_root,
+                                         lyx_xpm,
+                                         &w,
+                                         &h,
+                                         &lyx_mask,
+                                         0,
+                                         0,
+                                         0); // this leaks
+        fl_set_form_icon(fdui->form_main, lyx_p, lyx_mask);
+
+       // set min size
+       fl_set_form_minsize(fdui->form_main, 50, 50);
+       
+       fl_end_form();
+
+       return fdui;
+}
+
+
+void LyXView::init()
+{
+       // Set the textclass choice
+       invalidateLayoutChoice();
+       updateLayoutChoice();
+       UpdateDocumentClassChoice();
+       
+       // Start autosave timer
+       if (lyxrc->autosave)
+               fl_set_timer(_form_main->timer_autosave, lyxrc->autosave);
+       
+       
+       // Install the raw callback for keyboard events 
+       fl_register_raw_callback(_form,
+                                KeyPressMask,
+                                KeyPressMask_raw_callback);
+        intl->InitKeyMapper(lyxrc->use_kbmap);
+}
+
+
+void LyXView::invalidateLayoutChoice()
+{
+       last_textclass = -1;
+}
+
+
+void LyXView::updateLayoutChoice()
+{
+       /* update the layout display */
+       if (!toolbar->combox) return;
+
+       // this has a bi-effect that the layouts are not showed when no
+       // document is loaded.
+       if (bufferview==0 || bufferview->currentBuffer()==0) {
+               toolbar->combox->clear();
+               toolbar->combox->Redraw();
+               return; 
+       }
+
+       // If textclass is different, we need to update the list
+       if (toolbar->combox->empty() ||
+           (last_textclass != currentBuffer()->params.textclass)) {
+               toolbar->combox->clear();
+               for (int i = 0;
+                    lyxstyle.NameOfLayout(currentBuffer()->
+                                          params.textclass, i) !="@@end@@";
+                    i++) {
+                       LyXLayout *layout = lyxstyle.
+                               Style(currentBuffer()->params.textclass, i);
+                       if (layout->obsoleted_by.empty())
+                               toolbar->combox->addline(layout->name.c_str());
+                       else
+                               toolbar->combox->addline(("@N"+layout->name).c_str());
+               }
+               last_textclass = currentBuffer()->params.textclass;
+               current_layout = 0;
+       }
+       // we need to do this.
+       toolbar->combox->Redraw();
+       
+       char layout = currentBuffer()->text->cursor.par->GetLayout();
+
+       if (layout != current_layout){
+               toolbar->combox->select(layout + 1);
+               current_layout = layout;
+       }
+}
+
+
+void LyXView::UpdateDocumentClassChoice()
+{
+       /* update the document class display in the document form */
+       int i;
+       if (fd_form_document) {
+               fl_clear_choice(fd_form_document->choice_class);
+               for (i = 0; lyxstyle.DescOfClass (i)!="@@end@@"; i++) {
+                       fl_addto_choice(fd_form_document->choice_class,
+                                       lyxstyle.DescOfClass(i).c_str());
+               }
+       }
+}
+
+
+// This is necessary, since FL_FREE-Objects doesn't get all keypress events
+// as FL_KEYBOARD events :-(   Matthias 280596
+int LyXView::KeyPressMask_raw_callback(FL_FORM *fl, void *xev)
+{
+       LyXView *view = (LyXView*) fl->u_vdata;
+       int retval = 0;  // 0 means XForms should have a look at this event
+
+       // funny. Even though the raw_callback is registered with KeyPressMask,
+       // also KeyRelease-events are passed through:-(
+       // [It seems that xforms puts them in pairs... (JMarc)]
+       if (((XEvent*)xev)->type == KeyPress
+           && view->bufferview->getWorkArea()->focus
+           && view->bufferview->getWorkArea()->active)
+               retval = view->getLyXFunc()->processKeyEvent((XEvent*)xev);
+
+       return retval;
+}
+
+
+// Updates the title of the window with the filename of the current document
+void LyXView::updateWindowTitle() {
+       static LString last_title="LyX";
+       LString title = "LyX";
+
+       if (currentView()->available()) {
+               LString cur_title = currentBuffer()->getFileName();
+               if (!cur_title.empty()){
+                       title += ": " + OnlyFilename(cur_title);
+                       if (!currentBuffer()->isLyxClean())
+                               title += _(" (Changed)");
+                       if (currentBuffer()->isReadonly())
+                               title += _(" (read only)");
+               }
+       }
+       // Don't update title if it's the same as last time
+       if (title != last_title) {
+               fl_set_form_title(_form, title.c_str());
+               last_title = title;
+       }
+}
diff --git a/src/LyXView.h b/src/LyXView.h
new file mode 100644 (file)
index 0000000..8bc0463
--- /dev/null
@@ -0,0 +1,146 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#ifndef _LyXView_H_
+#define _LyXView_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+#include "lyx.h"
+#include "buffer.h"
+#include "menus.h"
+#include "BufferView.h"
+class LyXFunc;
+class Toolbar;
+class MiniBuffer;
+class Intl;
+
+///
+struct  FD_form_main {
+       ///
+       FL_FORM *form_main;
+       ///
+       FL_OBJECT *timer_autosave;
+       ///
+       FL_OBJECT *timer_update;
+       ///
+       void *vdata;
+       ///
+       long ldata;
+};
+
+
+
+/**
+  This class is the form containing the view of the buffer. The actual buffer
+  view is supposed (at least IMHO) to be another class, that shows its output
+  in one or more LyXView's.
+ */
+class LyXView {
+public:
+       /// constructor
+       LyXView(int w, int h);
+
+       /// destructor
+       ~LyXView();
+
+       /// Where to place the form.
+       void setPosition(int, int);
+
+       /// Show the main form.
+       void show(int, int, char const* t= "LyX");
+
+       /// init (should probably be removed later) (Lgb)
+       void init();
+
+       /// Redraw the main form.
+       void redraw();
+
+       /// returns the buffer currently shown in the main form.
+       Buffer *currentBuffer(){ return bufferview->currentBuffer();}
+
+       ///
+       BufferView *currentView() { return bufferview; }
+
+       /// returns a pointer to the form.
+       FL_FORM *getForm() { return _form; }
+
+       /// return a pointer to the toolbar
+       Toolbar *getToolbar() { return toolbar; }
+
+       /// return a pointer to the lyxfunc
+       LyXFunc *getLyXFunc() { return lyxfunc; }
+
+       /// return a pointer to the minibuffer
+       MiniBuffer *getMiniBuffer() { return minibuffer; }
+
+       ///
+       Menus *getMenus() { return menus; }
+
+       ///
+       Intl *getIntl() { return intl; }
+
+       ///
+       void updateLayoutChoice();
+
+       /// Updates the title of the window
+       void updateWindowTitle();
+
+       /// Reset autosave timer
+       void resetAutosaveTimer();
+private:
+       /// 
+       LyXFunc *lyxfunc;
+       /// 
+       Toolbar *toolbar;
+       /// 
+       MiniBuffer *minibuffer;
+       ///
+       Menus *menus;
+       ///
+       Intl *intl;
+
+       /** This is supposed to be a pointer or a list of pointers to the
+          BufferViews currently being shown in the LyXView. So far
+          this is not used, but that should change pretty soon. (Lgb) */
+       BufferView *bufferview;
+       ///
+       void invalidateLayoutChoice();
+       ///
+       void UpdateDocumentClassChoice();
+       ///
+       static int KeyPressMask_raw_callback(FL_FORM *, void *xev);
+       /// makes the main form.
+       FD_form_main *create_form_form_main(int width, int height);
+
+       /** This callback is run when a close event is sent from the
+         window manager. */
+       static int atCloseMainFormCB(FL_FORM *, void *);
+       /// A callback
+       static void AutosaveTimerCB(FL_OBJECT *, long);
+       /// A callback
+       static void UpdateTimerCB(FL_OBJECT *, long);
+       /// A pointer to the form.      
+       FD_form_main *_form_main;
+       /// A pointer to the form.      
+       FL_FORM *_form;
+
+       /** The last textclass layout list in the layout choice selector
+         This should probably be moved to the toolbar, but for now it's
+       here. (Asger) */
+       int last_textclass;
+};
+
+
+#endif
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..6695dd9
--- /dev/null
@@ -0,0 +1,197 @@
+AUTOMAKE_OPTIONS = foreign
+SUBDIRS = mathed insets
+DISTCLEANFILES = libintl.h config.h
+MAINTAINERCLEANFILES = Makefile.in config.h.in
+bin_PROGRAMS = lyx
+lyx_LDADD = mathed/mathed.o insets/insets.o @INTLLIBS@ @LYX_LIBS@
+lyx_DEPENDENCIES = mathed insets
+EXTRA_DIST = config.h.in stamp-h.in
+ETAGS_ARGS = --c++
+INCLUDES = -I${top_srcdir}/images
+lyx_SOURCES = \
+       BackStack.h \
+       BufferView.C \
+       BufferView.h \
+       Bullet.C \
+       Bullet.h \
+       Chktex.C \
+       Chktex.h \
+       DepTable.C \
+       DepTable.h \
+       FileInfo.C \
+       FileInfo.h \
+       FontInfo.C \
+       FontInfo.h \
+       FontLoader.C \
+       FontLoader.h \
+       ImportLaTeX.C \
+       ImportLaTeX.h \
+       ImportNoweb.C \
+       ImportNoweb.h \
+       LString.C \
+       LString.h \
+       LaTeX.C \
+       LaTeX.h \
+       LaTeXFeatures.C \
+       LaTeXFeatures.h \
+       LaTeXLog.C \
+       Literate.C \
+       Literate.h \
+       LyXAction.C \
+       LyXAction.h \
+       LyXSendto.C \
+       LyXView.C \
+       LyXView.h \
+       Makefile.in \
+       PaperLayout.C \
+       ParagraphExtra.C \
+       Redraw \
+       Spacing.C \
+       Spacing.h \
+       TableLayout.C \
+       bibforms.h \
+       bmtable.C \
+       bmtable.h \
+       broken_const.h \
+       broken_headers.h \
+       buffer.C \
+       buffer.h \
+       bufferlist.C \
+       bufferlist.h \
+       bufferparams.C \
+       bufferparams.h \
+       bullet_forms.C \
+       bullet_forms.h \
+       bullet_forms_cb.C \
+       chset.C \
+       chset.h \
+       combox.C \
+       combox.h \
+       commandtags.h \
+       config.h.in \
+       credits.C \
+       credits.h \
+       credits_form.C \
+       credits_form.h \
+       definitions.h \
+       error.C \
+       error.h \
+       figure.h \
+       filedlg.C \
+       filedlg.h \
+       filetools.C \
+       filetools.h \
+       form1.C \
+       form1.h \
+       gettext.h \
+       include_form.h \
+       intl.C \
+       intl.h \
+       kbmap.C \
+       kbmap.h \
+       lastfiles.C \
+       lastfiles.h \
+       latexoptions.C \
+       latexoptions.h \
+       layout.C \
+       layout.h \
+       layout_forms.C \
+       layout_forms.h \
+       lyx.C \
+       lyx.h \
+       lyx_cb.C \
+       lyx_cb.h \
+       lyx_gui.C \
+       lyx_gui.h \
+       lyx_gui_misc.C \
+       lyx_gui_misc.h \
+       lyx_main.C \
+       lyx_main.h \
+       lyx_sendfax.C \
+       lyx_sendfax.h \
+       lyx_sendfax_main.C \
+       lyx_sty.C \
+       lyx_sty.h \
+       lyxcursor.h \
+       lyxdraw.C \
+       lyxdraw.h \
+       lyxfont.C \
+       lyxfont.h \
+       lyxfr0.C \
+       lyxfr0.h \
+       lyxfr1.C \
+       lyxfr1.h \
+       lyxfunc.C \
+       lyxfunc.h \
+       lyxlex.C \
+       lyxlex.h \
+       lyxlib.h \
+       lyxlookup.C \
+       lyxlookup.h \
+       lyxparagraph.h \
+       lyxrc.C \
+       lyxrc.h \
+       lyxrow.h \
+       lyxscreen.h \
+       lyxserver.C \
+       lyxserver.h \
+       lyxsum.C \
+       lyxtext.h \
+       lyxvc.C \
+       lyxvc.h \
+       main.C \
+       menus.C \
+       menus.h \
+       minibuffer.C \
+       minibuffer.h \
+       nt_defines.h \
+       os2_defines.h \
+       os2_errortable.h \
+       paragraph.C \
+       pathstack.C \
+       pathstack.h \
+       print_form.C \
+       print_form.h \
+       screen.C \
+       sp_form.C \
+       sp_form.h \
+       spellchecker.C \
+       spellchecker.h \
+       syscall.C \
+       syscall.h \
+       syscontr.C \
+       syscontr.h \
+       syssingleton.C \
+       table.C \
+       table.h \
+       tex-accent.C \
+       tex-accent.h \
+       tex-defs.h \
+       tex-strings.C \
+       tex-strings.h \
+       texoptions.C \
+       texrow.C \
+       texrow.h \
+       text.C \
+       text2.C \
+       textutils.h \
+       toolbar.C \
+       toolbar.h \
+       trans.C \
+       trans.h \
+       trans_decl.h \
+       trans_mgr.C \
+       trans_mgr.h \
+       undo.h \
+       version.h \
+       vms_defines.h \
+       vspace.C \
+       vspace.h
+
+lyx_main.o: lyx_main.C lyx_main.h config.h version.h error.h gettext.h
+       $(CXXCOMPILE) -DLYX_DIR=\"$(LYX_DIR)\" -DTOP_SRCDIR=\"$(top_srcdir)\" \
+       -DLYX_NAME=\"$(PACKAGE)\" -c $(top_srcdir)/src/lyx_main.C
+
+main.o: main.C config.h lyx_main.h gettext.h LString.h filetools.h
+       $(CXXCOMPILE) -DPACKAGE=\"$(PACKAGE)\" -DLOCALEDIR=\"$(localedir)\" \
+       -c ${top_srcdir}/src/main.C
diff --git a/src/PaperLayout.C b/src/PaperLayout.C
new file mode 100644 (file)
index 0000000..655bfd9
--- /dev/null
@@ -0,0 +1,285 @@
+#include <config.h>
+
+#include <stdlib.h>
+
+#include "definitions.h"
+#include FORMS_H_LOCATION
+#include "layout_forms.h"
+#include "lyx_main.h"
+#include "lyxrc.h"
+#include "LString.h"
+#include "filetools.h"
+#include "buffer.h"
+#include "minibuffer.h"
+#include "vspace.h"
+#include "lyx_gui_misc.h"
+#include "BufferView.h"
+#include "gettext.h"
+
+//     $Id: PaperLayout.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $       
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: PaperLayout.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+/* Prototypes */
+extern FD_form_paper *fd_form_paper;
+extern MiniBuffer *minibuffer;
+extern BufferView *current_view;
+
+
+inline void DeactivatePaperButtons ()
+{
+       fl_deactivate_object (fd_form_paper->button_ok);
+       fl_deactivate_object (fd_form_paper->button_apply);
+       fl_set_object_lcol (fd_form_paper->button_ok, FL_INACTIVE);
+       fl_set_object_lcol (fd_form_paper->button_apply, FL_INACTIVE);
+}
+
+
+inline void ActivatePaperButtons ()
+{
+       fl_activate_object (fd_form_paper->button_ok);
+       fl_activate_object (fd_form_paper->button_apply);
+       fl_set_object_lcol (fd_form_paper->button_ok, FL_BLACK);
+       fl_set_object_lcol (fd_form_paper->button_apply, FL_BLACK);
+}
+
+
+inline void DisablePaperLayout()
+{
+        DeactivatePaperButtons();
+        fl_deactivate_object (fd_form_paper->choice_paperpackage);
+       fl_deactivate_object (fd_form_paper->greoup_radio_orientation);
+       fl_deactivate_object (fd_form_paper->radio_portrait);
+       fl_deactivate_object (fd_form_paper->radio_landscape);
+       fl_deactivate_object (fd_form_paper->choice_papersize2);
+       fl_deactivate_object (fd_form_paper->push_use_geometry);
+       fl_deactivate_object (fd_form_paper->input_custom_width);
+       fl_deactivate_object (fd_form_paper->input_custom_height);
+       fl_deactivate_object (fd_form_paper->input_top_margin);
+       fl_deactivate_object (fd_form_paper->input_bottom_margin);
+       fl_deactivate_object (fd_form_paper->input_left_margin);
+       fl_deactivate_object (fd_form_paper->input_right_margin);
+       fl_deactivate_object (fd_form_paper->input_head_height);
+       fl_deactivate_object (fd_form_paper->input_head_sep);
+       fl_deactivate_object (fd_form_paper->input_foot_skip);
+       fl_deactivate_object (fd_form_paper->text_warning);
+}
+
+
+inline void EnablePaperLayout()
+{
+        ActivatePaperButtons();
+        fl_activate_object (fd_form_paper->choice_paperpackage);
+       fl_activate_object (fd_form_paper->greoup_radio_orientation);
+       fl_activate_object (fd_form_paper->radio_portrait);
+       fl_activate_object (fd_form_paper->radio_landscape);
+       fl_activate_object (fd_form_paper->choice_papersize2);
+       fl_activate_object (fd_form_paper->push_use_geometry);
+       fl_activate_object (fd_form_paper->input_custom_width);
+       fl_activate_object (fd_form_paper->input_custom_height);
+       fl_activate_object (fd_form_paper->input_top_margin);
+       fl_activate_object (fd_form_paper->input_bottom_margin);
+       fl_activate_object (fd_form_paper->input_left_margin);
+       fl_activate_object (fd_form_paper->input_right_margin);
+       fl_activate_object (fd_form_paper->input_head_height);
+       fl_activate_object (fd_form_paper->input_head_sep);
+       fl_activate_object (fd_form_paper->input_foot_skip);
+       fl_activate_object (fd_form_paper->text_warning);
+}
+
+
+static void checkMarginValues()
+{
+       int allEmpty;
+    
+       fl_hide_object(fd_form_paper->text_warning);
+       ActivatePaperButtons();
+#if 0
+       val = fl_get_choice(fd_form_paper->choice_papersize2)-1;
+       if (val == VM_PAPER_DEFAULT)
+               return;
+#endif
+       allEmpty = (!strlen(fl_get_input(fd_form_paper->input_top_margin)) &&
+                   !strlen(fl_get_input(fd_form_paper->input_bottom_margin)) &&
+                   !strlen(fl_get_input(fd_form_paper->input_left_margin)) &&
+                   !strlen(fl_get_input(fd_form_paper->input_right_margin)) &&
+                   !strlen(fl_get_input(fd_form_paper->input_head_height)) &&
+                   !strlen(fl_get_input(fd_form_paper->input_head_sep)) &&
+                   !strlen(fl_get_input(fd_form_paper->input_foot_skip)) &&
+                   !strlen(fl_get_input(fd_form_paper->input_custom_width)) &&
+                   !strlen(fl_get_input(fd_form_paper->input_custom_height)));
+       if (!allEmpty) {
+               fl_set_button(fd_form_paper->push_use_geometry, 1);
+       }
+}
+
+
+bool UpdateLayoutPaper()
+{
+       bool update = true;
+       if (!current_view->available())
+               update = false;
+
+       if (update) {
+               BufferParams * params = &current_view->currentBuffer()->params;
+
+               fl_set_choice(fd_form_paper->choice_papersize2,
+                             params->papersize2 + 1);
+               fl_set_choice(fd_form_paper->choice_paperpackage,
+                             params->paperpackage + 1);
+               fl_set_button(fd_form_paper->push_use_geometry,
+                             params->use_geometry);
+               fl_set_button(fd_form_paper->radio_portrait, 0);
+               fl_set_button(fd_form_paper->radio_landscape, 0);
+               if (params->orientation == ORIENTATION_LANDSCAPE)
+                       fl_set_button(fd_form_paper->radio_landscape, 1);
+               else
+                       fl_set_button(fd_form_paper->radio_portrait, 1);
+   
+               fl_set_input(fd_form_paper->input_custom_width,
+                            params->paperwidth.c_str());
+               fl_set_input(fd_form_paper->input_custom_height,
+                            params->paperheight.c_str());
+               fl_set_input(fd_form_paper->input_left_margin,
+                            params->leftmargin.c_str());
+               fl_set_input(fd_form_paper->input_top_margin,
+                            params->topmargin.c_str());
+               fl_set_input(fd_form_paper->input_right_margin,
+                            params->rightmargin.c_str());
+               fl_set_input(fd_form_paper->input_bottom_margin,
+                            params->bottommargin.c_str());
+               fl_set_input(fd_form_paper->input_head_height,
+                            params->headheight.c_str());
+               fl_set_input(fd_form_paper->input_head_sep,
+                            params->headsep.c_str());
+               fl_set_input(fd_form_paper->input_foot_skip,
+                            params->footskip.c_str());
+               fl_set_focus_object(fd_form_paper->form_paper,
+                                   fd_form_paper->choice_papersize2);
+               fl_hide_object(fd_form_paper->text_warning);
+               if (current_view->currentBuffer()->isReadonly()) {
+                       DisablePaperLayout();
+                       fl_set_object_label(fd_form_paper->text_warning,
+                                           _("Document is read-only."
+                                             "  No changes to layout"
+                                             " permitted."));
+                       fl_show_object(fd_form_paper->text_warning);
+               } else {
+                       EnablePaperLayout();
+               }
+       } else if (fd_form_paper->form_paper->visible) {
+               fl_hide_form(fd_form_paper->form_paper);
+       }
+       return update;
+}
+
+
+void MenuLayoutPaper()
+{
+       if (UpdateLayoutPaper()) {
+               if (fd_form_paper->form_paper->visible) {
+                       fl_raise_form(fd_form_paper->form_paper);
+               } else {
+                       fl_show_form(fd_form_paper->form_paper,
+                                    FL_PLACE_MOUSE
+                                    | FL_FREE_SIZE,FL_FULLBORDER,
+                                    _("Paper Layout"));
+               }
+       }
+}
+
+
+void PaperApplyCB(FL_OBJECT *, long)
+{
+       if (! current_view->available()) 
+               return;
+       
+       BufferParams *params = &current_view->currentBuffer()->params;
+       
+       const FD_form_paper* fd = fd_form_paper;
+    
+       params->papersize2 = fl_get_choice(fd->choice_papersize2)-1;
+       params->paperpackage = fl_get_choice(fd->choice_paperpackage)-1;
+       params->use_geometry = fl_get_button(fd_form_paper->push_use_geometry);
+       if (fl_get_button(fd_form_paper->radio_landscape))
+               params->orientation = ORIENTATION_LANDSCAPE;
+       else
+               params->orientation = ORIENTATION_PORTRAIT;
+       params->paperwidth = fl_get_input(fd->input_custom_width);
+       params->paperheight = fl_get_input(fd->input_custom_height);
+       params->leftmargin = fl_get_input(fd->input_left_margin);
+       params->topmargin = fl_get_input(fd->input_top_margin);
+       params->rightmargin = fl_get_input(fd->input_right_margin);
+       params->bottommargin = fl_get_input(fd->input_bottom_margin);
+       params->headheight = fl_get_input(fd->input_head_height);
+       params->headsep = fl_get_input(fd->input_head_sep);
+       params->footskip = fl_get_input(fd->input_foot_skip);
+       current_view->currentBuffer()->setPaperStuff();
+       minibuffer->Set(_("Paper layout set"));
+       current_view->currentBuffer()->markDirty();
+       
+       return;
+}
+
+
+void PaperCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_paper->form_paper);
+}
+
+
+void PaperOKCB(FL_OBJECT *ob, long data)
+{
+       PaperCancelCB(ob,data);
+       PaperApplyCB(ob,data);
+}
+
+
+void PaperMarginsCB(FL_OBJECT *ob, long)
+{
+       const FD_form_paper
+               *fd = fd_form_paper;
+       LString
+               str;
+       char
+               val;
+    
+       checkMarginValues();
+       if (ob == fd->choice_papersize2) {
+               val = fl_get_choice(fd->choice_papersize2)-1;
+               if (val == VM_PAPER_DEFAULT) {
+                       fl_set_button(fd->push_use_geometry, 0);
+                       checkMarginValues();
+               } else {
+                       if ((val != VM_PAPER_USLETTER) && (val != VM_PAPER_USLEGAL) &&
+                           (val != VM_PAPER_USEXECUTIVE) && (val != VM_PAPER_A4) &&
+                           (val != VM_PAPER_A5) && (val != VM_PAPER_B5)) {
+                               fl_set_button(fd->push_use_geometry, 1);
+                       }
+                       fl_set_choice(fd->choice_paperpackage, PACKAGE_NONE + 1);
+               }
+       } else if (ob == fd->choice_paperpackage) {
+               val = fl_get_choice(fd->choice_paperpackage)-1;
+               if (val != PACKAGE_NONE) {
+                       fl_set_choice(fd->choice_papersize2, VM_PAPER_DEFAULT + 1);
+                       fl_set_button(fd->push_use_geometry, 0);
+               }
+       } else if ((ob==fd->input_custom_width) || (ob==fd->input_custom_height) ||
+                  (ob==fd->input_left_margin) || (ob==fd->input_right_margin) ||
+                  (ob==fd->input_top_margin) || (ob==fd->input_bottom_margin) ||
+                  (ob==fd->input_head_height) || (ob==fd->input_head_sep) ||
+                  (ob==fd->input_foot_skip)) {
+               str = fl_get_input(ob);
+               if (!str.empty() && !isValidLength(str)) {
+                       fl_set_object_label(fd_form_paper->text_warning,
+                                           _("Warning: Invalid Length"
+                                             " (valid example: 10mm)"));
+                       fl_show_object(fd_form_paper->text_warning);
+                       DeactivatePaperButtons();
+               } else if (!str.empty())
+                       fl_set_button(fd->push_use_geometry, 1);
+       }
+       return;
+}
diff --git a/src/ParagraphExtra.C b/src/ParagraphExtra.C
new file mode 100644 (file)
index 0000000..db10b5f
--- /dev/null
@@ -0,0 +1,326 @@
+#include <config.h>
+
+#include <stdlib.h>
+#include "definitions.h"
+#include FORMS_H_LOCATION
+#include "layout_forms.h"
+#include "LString.h"
+#include "minibuffer.h"
+#include "vspace.h"
+#include "buffer.h"
+#include "BufferView.h"
+#include "lyxparagraph.h"
+#include "gettext.h"
+#include "lyxtext.h"
+
+//     $Id: ParagraphExtra.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $    
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: ParagraphExtra.C,v 1.1 1999/09/27 18:44:36 larsbj Exp $";
+#endif /* lint */
+
+/* Prototypes */
+extern FD_form_paragraph_extra *fd_form_paragraph_extra;
+extern MiniBuffer *minibuffer;
+extern BufferView *current_view;
+extern void BeforeChange();
+static bool CheckInputWidth();
+
+inline void DeactivateParagraphExtraButtons ()
+{
+       fl_deactivate_object (fd_form_paragraph_extra->button_ok);
+       fl_deactivate_object (fd_form_paragraph_extra->button_apply);
+       fl_set_object_lcol (fd_form_paragraph_extra->button_ok, FL_INACTIVE);
+       fl_set_object_lcol (fd_form_paragraph_extra->button_apply, FL_INACTIVE);
+}
+
+inline void ActivateParagraphExtraButtons ()
+{
+       fl_activate_object (fd_form_paragraph_extra->button_ok);
+       fl_activate_object (fd_form_paragraph_extra->button_apply);
+       fl_set_object_lcol (fd_form_paragraph_extra->button_ok, FL_BLACK);
+       fl_set_object_lcol (fd_form_paragraph_extra->button_apply, FL_BLACK);
+}
+
+inline void DisableParagraphExtra ()
+{
+        DeactivateParagraphExtraButtons();
+       fl_deactivate_object (fd_form_paragraph_extra->input_pextra_width);
+       fl_deactivate_object (fd_form_paragraph_extra->input_pextra_widthp);
+       fl_deactivate_object (fd_form_paragraph_extra->group_alignment);
+       fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_top);
+       fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_middle);
+       fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_bottom);
+       fl_deactivate_object (fd_form_paragraph_extra->text_warning);
+       fl_deactivate_object (fd_form_paragraph_extra->group_extraopt);
+       fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_indent);
+       fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_minipage);
+       fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_floatflt);
+       fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_hfill);
+       fl_deactivate_object (fd_form_paragraph_extra->radio_pextra_startmp);
+}      
+
+inline void EnableParagraphExtra ()
+{
+        ActivateParagraphExtraButtons();
+       fl_activate_object (fd_form_paragraph_extra->input_pextra_width);
+       fl_activate_object (fd_form_paragraph_extra->input_pextra_widthp);
+       fl_activate_object (fd_form_paragraph_extra->group_alignment);
+       fl_activate_object (fd_form_paragraph_extra->radio_pextra_top);
+       fl_activate_object (fd_form_paragraph_extra->radio_pextra_middle);
+       fl_activate_object (fd_form_paragraph_extra->radio_pextra_bottom);
+       fl_activate_object (fd_form_paragraph_extra->text_warning);
+       fl_activate_object (fd_form_paragraph_extra->group_extraopt);
+       fl_activate_object (fd_form_paragraph_extra->radio_pextra_indent);
+       fl_activate_object (fd_form_paragraph_extra->radio_pextra_minipage);
+       fl_activate_object (fd_form_paragraph_extra->radio_pextra_floatflt);
+       fl_activate_object (fd_form_paragraph_extra->radio_pextra_hfill);
+       fl_activate_object (fd_form_paragraph_extra->radio_pextra_startmp);
+}      
+
+bool UpdateParagraphExtra()
+{
+    bool update = false;
+    if (current_view->getScreen() && current_view->available()) {
+        update = true;
+        LyXParagraph* par = current_view->currentBuffer()->text->cursor.par;
+
+       EnableParagraphExtra();
+
+        fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
+        fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
+        fl_set_input(fd_form_paragraph_extra->input_pextra_width,
+                     par->pextra_width.c_str());
+        fl_set_input(fd_form_paragraph_extra->input_pextra_widthp,
+                     par->pextra_widthp.c_str());
+        switch(par->pextra_alignment) {
+          case MINIPAGE_ALIGN_TOP:
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_top,1);
+            break;
+          case MINIPAGE_ALIGN_MIDDLE:
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_middle,1);
+            break;
+          case MINIPAGE_ALIGN_BOTTOM:
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_bottom,1);
+            break;
+        }
+        fl_set_button(fd_form_paragraph_extra->radio_pextra_hfill,
+                      par->pextra_hfill);
+        fl_set_button(fd_form_paragraph_extra->radio_pextra_startmp,
+                      par->pextra_start_minipage);
+        CheckInputWidth();
+        if (par->pextra_type == PEXTRA_INDENT) {
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,1);
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,0);
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_floatflt,0);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
+        } else if (par->pextra_type == PEXTRA_MINIPAGE) {
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,0);
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,1);
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_floatflt,0);
+            fl_activate_object(fd_form_paragraph_extra->radio_pextra_top);
+            fl_activate_object(fd_form_paragraph_extra->radio_pextra_middle);
+            fl_activate_object(fd_form_paragraph_extra->radio_pextra_bottom);
+        } else if (par->pextra_type == PEXTRA_FLOATFLT) {
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,0);
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,0);
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_floatflt,1);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
+        } else {
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,0);
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,0);
+            fl_deactivate_object(fd_form_paragraph_extra->input_pextra_width);
+            fl_deactivate_object(fd_form_paragraph_extra->input_pextra_widthp);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
+        }
+        if (par->pextra_type == PEXTRA_NONE)
+            ActivateParagraphExtraButtons();
+    }
+    fl_hide_object(fd_form_paragraph_extra->text_warning);
+
+    if (current_view->currentBuffer()->isReadonly()) {
+      DisableParagraphExtra();
+      fl_set_object_label(fd_form_paragraph_extra->text_warning,
+                         _("Document is read-only.  No changes to layout permitted."));
+      fl_show_object(fd_form_paragraph_extra->text_warning);
+    }
+    if (!update && fd_form_paragraph_extra->form_paragraph_extra->visible) {
+      fl_hide_form(fd_form_paragraph_extra->form_paragraph_extra);
+    }
+    return update;
+}
+
+void ParagraphExtraOpen(FL_OBJECT *, long)
+{
+    if (UpdateParagraphExtra()) {
+        if (fd_form_paragraph_extra->form_paragraph_extra->visible) {
+            fl_raise_form(fd_form_paragraph_extra->form_paragraph_extra);
+        } else {
+            fl_show_form(fd_form_paragraph_extra->form_paragraph_extra,
+                         FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
+                         _("ParagraphExtra Layout"));
+        }
+    }
+}
+
+void ParagraphExtraApplyCB(FL_OBJECT *, long)
+{
+    if (current_view->getScreen() && current_view->available()) {
+        const FD_form_paragraph_extra* fd = fd_form_paragraph_extra;
+        const char
+            *width = fl_get_input(fd->input_pextra_width),
+            *widthp = fl_get_input(fd->input_pextra_widthp);
+        LyXText
+            *text = current_view->currentBuffer()->text;
+        int
+            type = PEXTRA_NONE,
+            alignment = 0;
+        bool
+            hfill = false,
+            start_minipage = false;
+
+        if (fl_get_button(fd_form_paragraph_extra->radio_pextra_indent)) {
+            type = PEXTRA_INDENT;
+        } else if (fl_get_button(fd_form_paragraph_extra->radio_pextra_minipage)) {
+            type = PEXTRA_MINIPAGE;
+            hfill = fl_get_button(fd_form_paragraph_extra->radio_pextra_hfill);
+            start_minipage =
+                fl_get_button(fd_form_paragraph_extra->radio_pextra_startmp);
+            if (fl_get_button(fd_form_paragraph_extra->radio_pextra_top))
+                alignment = MINIPAGE_ALIGN_TOP;
+            else if (fl_get_button(fd_form_paragraph_extra->radio_pextra_middle))
+                alignment = MINIPAGE_ALIGN_MIDDLE;
+            else if (fl_get_button(fd_form_paragraph_extra->radio_pextra_bottom))
+                alignment = MINIPAGE_ALIGN_BOTTOM;
+        } else if (fl_get_button(fd_form_paragraph_extra->radio_pextra_floatflt)) {
+            type = PEXTRA_FLOATFLT;
+        }
+        text->SetParagraphExtraOpt(type,width,widthp,alignment,hfill,
+                                   start_minipage);
+//        current_view->redoCurrentBuffer();
+       current_view->currentBuffer()->update(1);
+       minibuffer->Set(_("ParagraphExtra layout set"));
+//     current_view->currentBuffer()->markDirty();
+    }
+    return;
+}
+
+void ParagraphExtraCancelCB(FL_OBJECT *, long)
+{
+    fl_hide_form(fd_form_paragraph_extra->form_paragraph_extra);
+}
+
+void ParagraphExtraOKCB(FL_OBJECT *ob, long data)
+{
+    ParagraphExtraCancelCB(ob,data);
+    ParagraphExtraApplyCB(ob,data);
+}
+
+void CheckPExtraOptCB(FL_OBJECT *ob, long)
+{
+    int
+        n;
+    LString
+        s1, s2;
+    
+    ActivateParagraphExtraButtons();
+    CheckInputWidth();
+    if (ob == fd_form_paragraph_extra->radio_pextra_indent) {
+        n = fl_get_button(fd_form_paragraph_extra->radio_pextra_indent);
+        if (n) {
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,0);
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_floatflt,0);
+            fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
+            fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
+        } else {
+            fl_deactivate_object(fd_form_paragraph_extra->input_pextra_width);
+            fl_deactivate_object(fd_form_paragraph_extra->input_pextra_widthp);
+            ActivateParagraphExtraButtons();
+        }
+    } else if (ob == fd_form_paragraph_extra->radio_pextra_minipage) {
+        n = fl_get_button(fd_form_paragraph_extra->radio_pextra_minipage);
+        if (n) {
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,0);
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_floatflt,0);
+            fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
+            fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
+            fl_activate_object(fd_form_paragraph_extra->radio_pextra_top);
+            fl_activate_object(fd_form_paragraph_extra->radio_pextra_middle);
+            fl_activate_object(fd_form_paragraph_extra->radio_pextra_bottom);
+        } else {
+            fl_deactivate_object(fd_form_paragraph_extra->input_pextra_width);
+            fl_deactivate_object(fd_form_paragraph_extra->input_pextra_widthp);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
+            ActivateParagraphExtraButtons();
+        }
+    } else if (ob == fd_form_paragraph_extra->radio_pextra_floatflt) {
+        n = fl_get_button(fd_form_paragraph_extra->radio_pextra_floatflt);
+        if (n) {
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_indent,0);
+            fl_set_button(fd_form_paragraph_extra->radio_pextra_minipage,0);
+            fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
+            fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
+            fl_activate_object(fd_form_paragraph_extra->radio_pextra_top);
+            fl_activate_object(fd_form_paragraph_extra->radio_pextra_middle);
+            fl_activate_object(fd_form_paragraph_extra->radio_pextra_bottom);
+        } else {
+            fl_deactivate_object(fd_form_paragraph_extra->input_pextra_width);
+            fl_deactivate_object(fd_form_paragraph_extra->input_pextra_widthp);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_top);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_middle);
+            fl_deactivate_object(fd_form_paragraph_extra->radio_pextra_bottom);
+            ActivateParagraphExtraButtons();
+        }
+    }
+    return;
+}
+
+static bool CheckInputWidth()
+{
+    LString
+        s1,s2;
+
+    s1 = fl_get_input(fd_form_paragraph_extra->input_pextra_width);
+    s2 = fl_get_input(fd_form_paragraph_extra->input_pextra_widthp);
+    if (s1.empty() && s2.empty()) {
+        fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
+        fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
+        fl_hide_object(fd_form_paragraph_extra->text_warning);
+        DeactivateParagraphExtraButtons();
+        return false;
+    }
+    if (!s1.empty()) { // LyXLength parameter
+        fl_activate_object(fd_form_paragraph_extra->input_pextra_width);
+        fl_deactivate_object(fd_form_paragraph_extra->input_pextra_widthp);
+        if (!isValidLength(s1)) {
+            DeactivateParagraphExtraButtons();
+            fl_set_object_label(fd_form_paragraph_extra->text_warning,
+                                _("Warning: Invalid Length (valid example: 10mm)"));
+            fl_show_object(fd_form_paragraph_extra->text_warning);
+            return false;
+        }
+    } else { // !s2.empty() % parameter
+        fl_deactivate_object(fd_form_paragraph_extra->input_pextra_width);
+        fl_activate_object(fd_form_paragraph_extra->input_pextra_widthp);
+        if ((atoi(s2.c_str()) < 0 ) || (atoi(s2.c_str()) > 100)) {
+            DeactivateParagraphExtraButtons();
+            fl_set_object_label(fd_form_paragraph_extra->text_warning,
+                                _("Warning: Invalid percent value (0-100)"));
+            fl_show_object(fd_form_paragraph_extra->text_warning);
+            return false;
+        }
+    }
+    fl_hide_object(fd_form_paragraph_extra->text_warning);
+    return true;
+}
diff --git a/src/Redraw b/src/Redraw
new file mode 100644 (file)
index 0000000..e11b1f7
--- /dev/null
@@ -0,0 +1,61 @@
+BufferView.C:          screen->first = screen->TopCursorVisible();
+BufferView.C:  if (screen) screen->FitCursor();
+BufferView.C:  if (screen) screen->Update();
+BufferView.C:          cbsf = screen->first;
+BufferView.C:  screen->first = screen->TopCursorVisible(); /* this will scroll the
+BufferView.C:  screen->HideCursor();
+BufferView.C:  view->screen->Draw(view->current_scrollbar_value);
+BufferView.C:          if (vbt->cursor.y < view->screen->first + height) {
+BufferView.C:                                                view->screen->first +
+BufferView.C:                   view->screen->first + view->work_area->h - height) {
+BufferView.C:                                                view->screen->first +
+BufferView.C:  long y = screen->first;
+BufferView.C:  long y = screen->first;
+BufferView.C:                          view->screen->HideCursor();
+BufferView.C:                          view->screen->
+BufferView.C:                          view->screen->
+BufferView.C:                  view->screen->HideCursor(); 
+BufferView.C:                  view->screen->ToggleSelection(); 
+BufferView.C:                  view->screen->ToggleSelection(false); 
+BufferView.C:          screen->HideCursor();
+BufferView.C:                                           screen->first);
+BufferView.C:          screen->ToggleToggle();
+BufferView.C:          if (screen->FitCursor())
+BufferView.C:          screen->ShowCursor();
+BufferView.C:  screen->HideCursor();
+BufferView.C:  screen->HideCursor();
+BufferView.C:             _buffer->text->MouseHitInTable(x, y+screen->first))) {
+BufferView.C:                                                    screen->first);
+BufferView.C:                          screen->first;
+BufferView.C:                          screen->ToggleSelection();
+BufferView.C:                          screen->Update();
+BufferView.C:  int screen_first = screen->first;
+BufferView.C:  screen->ToggleSelection();
+BufferView.C:  screen->Update();
+BufferView.C:  if (screen->FitCursor()){
+BufferView.C:          } else if (screen) screen->Redraw();
+BufferView.C:                  view->screen->CursorToggle();
+BufferView.C:                  view->screen->ShowCursor();
+BufferView.C:          int screen_first = screen->first;
+LyXAction.C:   { "screen-down",                          LFUN_NEXT },        
+LyXAction.C:   { "screen-down-select",                   LFUN_NEXTSEL },     
+LyXAction.C:   { "screen-recenter",                      LFUN_CENTER },
+LyXAction.C:   { "screen-up",                            LFUN_PRIOR },       
+LyXAction.C:   { "screen-up-select",                     LFUN_PRIORSEL },    
+lyx.C:  //fdui->form_screen->fdui = fdui;
+lyx_cb.C:      lyxrc->roman_font_name = fl_get_input(fd_form_screen->input_roman);
+lyx_cb.C:      lyxrc->sans_font_name = fl_get_input(fd_form_screen->input_sans);
+lyx_cb.C:      lyxrc->typewriter_font_name = fl_get_input(fd_form_screen->input_typewriter);
+lyx_cb.C:      lyxrc->font_norm = fl_get_input(fd_form_screen->input_font_norm);
+lyx_cb.C:      lyxrc->zoom = atoi(fl_get_input(fd_form_screen->intinput_size));
+lyx_cb.C:      fl_hide_form(fd_form_screen->form_screen);
+lyx_gui.C:     fl_set_form_atclose(fd_form_screen->form_screen,
+menus.C:       fl_set_input(fd_form_screen->input_roman, 
+menus.C:       fl_set_input(fd_form_screen->input_sans, 
+menus.C:       fl_set_input(fd_form_screen->input_typewriter,
+menus.C:       fl_set_input(fd_form_screen->input_font_norm, 
+menus.C:       fl_set_input(fd_form_screen->intinput_size, tmpstring);
+menus.C:       if (fd_form_screen->form_screen->visible) {
+menus.C:               fl_raise_form(fd_form_screen->form_screen);
+menus.C:               fl_show_form(fd_form_screen->form_screen,
+text.C:    * This touches only the screen-update. Otherwise we would may have
diff --git a/src/Spacing.C b/src/Spacing.C
new file mode 100644 (file)
index 0000000..9893f1a
--- /dev/null
@@ -0,0 +1,21 @@
+#include <config.h>
+
+#include <stdio.h>
+#include "Spacing.h"
+
+/// how can I put this inside of Spacing (class)
+static
+char const *spacing_string[] = {"single", "onehalf", "double", "other"};
+
+
+void Spacing::writeFile(FILE *file)
+{
+       if (getSpace() == Spacing::Other) {
+               fprintf(file, "\\spacing %s %.2f \n",
+                       spacing_string[getSpace()],
+                       getValue());
+       } else {
+               fprintf(file, "\\spacing %s \n",
+                       spacing_string[getSpace()]);
+       }       
+}
diff --git a/src/Spacing.h b/src/Spacing.h
new file mode 100644 (file)
index 0000000..724b03f
--- /dev/null
@@ -0,0 +1,89 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 1996 Matthias Ettrich
+*           and the LyX Team.
+*
+*======================================================*/
+
+#ifndef _SPACING_H
+#define _SPACING_H
+
+#include <stdio.h>
+
+///
+class Spacing {
+public:
+       ///
+       enum Space {
+               ///
+               Single,
+               ///
+               Onehalf,
+               ///
+               Double,
+               ///
+               Other
+       };
+       ///
+       Spacing()
+       {
+               space = Single;
+               value = getValue();
+       }
+       ///
+       float getValue() const
+       {
+               switch(space) {
+               case Single: return 1.0;
+               case Onehalf: return 1.25;
+               case Double: return 1.667;
+               case Other: return value;
+               }
+               return 1.0;
+       }
+       ///
+       Spacing::Space getSpace() const
+       {
+               return space;
+       }
+       ///
+       void set(Spacing::Space sp, float val= 1.0)
+       {
+               space = sp;
+               if (sp == Other) {
+                       switch(int(val*1000 + 0.5)) {
+                       case 1000: space = Single; break;
+                       case 1250: space = Onehalf; break;
+                       case 1667: space = Double; break;
+                       default: value = val; break;
+                       }
+               }
+       }
+       ///
+       void set(Spacing::Space sp, char const* val)
+       {
+               float fval;
+               sscanf(val,"%f",&fval);
+               set(sp,fval);
+       }
+       ///
+       void writeFile(FILE *file);
+       ///
+       friend bool operator!=(Spacing const &a, Spacing const &b)
+       {
+               if (a.space == b.space && a.getValue() == b.getValue())
+                       return false;
+               return true;
+       }
+private:
+       ///
+       Space space;
+       ///
+       float value;
+};
+
+#endif
diff --git a/src/TableLayout.C b/src/TableLayout.C
new file mode 100644 (file)
index 0000000..bac99ba
--- /dev/null
@@ -0,0 +1,481 @@
+#include <config.h>
+
+#include <stdlib.h>
+#include "definitions.h"
+#include FORMS_H_LOCATION
+#include "layout_forms.h"
+#include "lyx_main.h"
+#include "lyxrc.h"
+#include "LString.h"
+#include "filetools.h"
+#include "buffer.h"
+#include "vspace.h"
+#include "lyx_gui_misc.h"
+#include "BufferView.h"
+#include "lyxscreen.h"
+#include "gettext.h"
+#include "lyxtext.h"
+
+//     $Id: TableLayout.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $       
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: TableLayout.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+extern void BeforeChange();
+
+/* Prototypes */
+extern FD_form_table_options *fd_form_table_options;
+extern FD_form_table_extra *fd_form_table_extra;
+extern BufferView *current_view;
+
+static int
+    Confirmed = false,
+    ActCell;
+// hack to keep the cursor from jumping to the end of the text in the Extra
+// form input fields during editing. The values in LyXTable itself is changed in
+// real-time, but we have no callbacks for the input fields, so I simply
+// store and restore the cursor position for now. (too much of a hazzle to
+// do it proper; we'll trash all this code in 1.1 anyway)
+    static int
+       extra_col_cursor_x, // need no y's, one-line input fields
+       extra_multicol_cursor_x;
+// Joacim
+
+bool UpdateLayoutTable(int flag)
+{
+    bool update = true;
+    if (!current_view->getScreen() || !current_view->available())
+        update = false;
+    
+    if (update && current_view->currentBuffer()->text->cursor.par->table) {
+        int
+            align,
+            cell,
+            column,row;
+        char
+            buf[12];
+        LString
+            pwidth, special;
+    
+        LyXTable *table = current_view->currentBuffer()->text->cursor.par->table;
+
+        cell = current_view->currentBuffer()->text->
+            NumberOfCell(current_view->currentBuffer()->text->cursor.par, 
+                         current_view->currentBuffer()->text->cursor.pos);
+        ActCell = cell;
+        column = table->column_of_cell(cell)+1;
+        fl_set_object_label(fd_form_table_options->text_warning,"");
+        Confirmed = false;
+        fl_activate_object(fd_form_table_extra->input_special_alignment);
+        fl_activate_object(fd_form_table_extra->input_special_multialign);
+        fl_activate_object(fd_form_table_options->input_column_width);
+        sprintf(buf,"%d",column);
+        fl_set_input(fd_form_table_options->input_table_column, buf);
+        fl_deactivate_object(fd_form_table_options->input_table_column);
+        row = table->row_of_cell(cell)+1;
+        sprintf(buf,"%d",row);
+        fl_set_input(fd_form_table_options->input_table_row, buf);
+        fl_deactivate_object(fd_form_table_options->input_table_row);
+        if (table->IsMultiColumn(cell))
+            fl_set_button(fd_form_table_options->radio_multicolumn, 1);
+        else
+            fl_set_button(fd_form_table_options->radio_multicolumn, 0);
+        if (table->RotateCell(cell))
+            fl_set_button(fd_form_table_options->radio_rotate_cell, 1);
+        else
+            fl_set_button(fd_form_table_options->radio_rotate_cell, 0);
+        if (table->TopLine(cell))
+            fl_set_button(fd_form_table_options->radio_border_top, 1);
+        else
+            fl_set_button(fd_form_table_options->radio_border_top, 0);
+        if (table->BottomLine(cell))
+            fl_set_button(fd_form_table_options->radio_border_bottom, 1);
+        else
+            fl_set_button(fd_form_table_options->radio_border_bottom, 0);
+        if (table->LeftLine(cell))
+            fl_set_button(fd_form_table_options->radio_border_left, 1);
+        else
+            fl_set_button(fd_form_table_options->radio_border_left, 0);
+        if (table->RightLine(cell))
+            fl_set_button(fd_form_table_options->radio_border_right, 1);
+        else
+            fl_set_button(fd_form_table_options->radio_border_right, 0);
+        align = table->GetAlignment(cell);
+        fl_set_button(fd_form_table_options->radio_align_left, 0);
+        fl_set_button(fd_form_table_options->radio_align_right, 0);
+        fl_set_button(fd_form_table_options->radio_align_center, 0);
+        special = table->GetAlignSpecial(cell,LyXTable::SET_SPECIAL_COLUMN);
+        if (flag)
+       {
+            fl_set_input(fd_form_table_extra->input_special_alignment,
+                         special.c_str());
+           fl_set_input_cursorpos(fd_form_table_extra->input_special_alignment,
+                   extra_col_cursor_x, 0); // restore the cursor
+       }
+        if (current_view->currentBuffer()->isReadonly()) 
+            fl_deactivate_object(fd_form_table_extra->input_special_alignment);
+        special = table->GetAlignSpecial(cell,LyXTable::SET_SPECIAL_MULTI);
+        if (flag)
+       {
+            fl_set_input(fd_form_table_extra->input_special_multialign,
+                         special.c_str());
+           fl_set_input_cursorpos(fd_form_table_extra->input_special_multialign,
+                   extra_multicol_cursor_x, 0); // restore the cursor
+       }
+        if (current_view->currentBuffer()->isReadonly()) 
+            fl_deactivate_object(fd_form_table_extra->input_special_multialign);
+        pwidth = table->GetPWidth(cell);
+        if (flag)
+            fl_set_input(fd_form_table_options->input_column_width,pwidth.c_str());
+        if (current_view->currentBuffer()->isReadonly()) 
+            fl_deactivate_object(fd_form_table_options->input_column_width);
+        if (!pwidth.empty()) {
+            fl_activate_object(fd_form_table_options->radio_linebreak_cell);
+           fl_set_object_lcol(fd_form_table_options->radio_linebreak_cell,
+                              FL_BLACK);
+            fl_set_button(fd_form_table_options->radio_linebreak_cell,
+                          table->Linebreaks(table->FirstVirtualCell(cell)));
+        } else {
+            fl_deactivate_object(fd_form_table_options->radio_linebreak_cell);
+           fl_set_object_lcol(fd_form_table_options->radio_linebreak_cell,
+                              FL_INACTIVE);
+            fl_set_button(fd_form_table_options->radio_linebreak_cell,0);
+        }
+        if ((!pwidth.empty() && !table->IsMultiColumn(cell)) ||
+            (align == LYX_ALIGN_LEFT))
+            fl_set_button(fd_form_table_options->radio_align_left, 1);
+        else if (align == LYX_ALIGN_RIGHT)
+            fl_set_button(fd_form_table_options->radio_align_right, 1);
+        else
+            fl_set_button(fd_form_table_options->radio_align_center, 1);
+        if (!pwidth.empty() && !table->IsMultiColumn(cell)) {
+            fl_deactivate_object(fd_form_table_options->radio_align_left);
+            fl_deactivate_object(fd_form_table_options->radio_align_right);
+            fl_deactivate_object(fd_form_table_options->radio_align_center);
+           fl_set_object_lcol(fd_form_table_options->radio_align_left,
+                              FL_INACTIVE);
+           fl_set_object_lcol(fd_form_table_options->radio_align_right,
+                              FL_INACTIVE);
+           fl_set_object_lcol(fd_form_table_options->radio_align_center,
+                              FL_INACTIVE);
+        } else {
+            fl_activate_object(fd_form_table_options->radio_align_left);
+            fl_activate_object(fd_form_table_options->radio_align_right);
+            fl_activate_object(fd_form_table_options->radio_align_center);
+           fl_set_object_lcol(fd_form_table_options->radio_align_left,
+                              FL_BLACK);
+           fl_set_object_lcol(fd_form_table_options->radio_align_right,
+                              FL_BLACK);
+           fl_set_object_lcol(fd_form_table_options->radio_align_center,
+                              FL_BLACK);
+        }
+        fl_set_button(fd_form_table_options->radio_longtable,table->IsLongTable());
+        if (table->IsLongTable()) {
+            fl_activate_object(fd_form_table_options->radio_lt_firsthead);
+            fl_activate_object(fd_form_table_options->radio_lt_head);
+            fl_activate_object(fd_form_table_options->radio_lt_foot);
+            fl_activate_object(fd_form_table_options->radio_lt_lastfoot);
+            fl_activate_object(fd_form_table_options->radio_lt_newpage);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_firsthead,
+                              FL_BLACK);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_head,
+                              FL_BLACK);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_foot,
+                              FL_BLACK);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_lastfoot,
+                              FL_BLACK);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_newpage,
+                              FL_BLACK);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead,
+                          table->RowOfLTFirstHead(cell));
+            fl_set_button(fd_form_table_options->radio_lt_head,
+                          table->RowOfLTHead(cell));
+            fl_set_button(fd_form_table_options->radio_lt_foot,
+                          table->RowOfLTFoot(cell));
+            fl_set_button(fd_form_table_options->radio_lt_lastfoot,
+                          table->RowOfLTLastFoot(cell));
+            fl_set_button(fd_form_table_options->radio_lt_newpage,
+                          table->LTNewPage(cell));
+        } else {
+            fl_deactivate_object(fd_form_table_options->radio_lt_firsthead);
+            fl_deactivate_object(fd_form_table_options->radio_lt_head);
+            fl_deactivate_object(fd_form_table_options->radio_lt_foot);
+            fl_deactivate_object(fd_form_table_options->radio_lt_lastfoot);
+            fl_deactivate_object(fd_form_table_options->radio_lt_newpage);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
+            fl_set_button(fd_form_table_options->radio_lt_head,0);
+            fl_set_button(fd_form_table_options->radio_lt_foot,0);
+            fl_set_button(fd_form_table_options->radio_lt_lastfoot,0);
+            fl_set_button(fd_form_table_options->radio_lt_newpage,0);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_firsthead,
+                              FL_INACTIVE);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_head,
+                              FL_INACTIVE);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_foot,
+                              FL_INACTIVE);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_lastfoot,
+                              FL_INACTIVE);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_newpage,
+                              FL_INACTIVE);
+        }
+        fl_set_button(fd_form_table_options->radio_rotate_table,table->RotateTable());
+    } else if (fd_form_table_options->form_table_options->visible) {
+        fl_hide_form(fd_form_table_options->form_table_options);
+    }
+    return update;
+}
+
+void OpenLayoutTableExtra()
+{
+    if (fd_form_table_extra->form_table_extra->visible) {
+        fl_raise_form(fd_form_table_extra->form_table_extra);
+    } else {
+        fl_show_form(fd_form_table_extra->form_table_extra,
+                     FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
+                     _("Table Extra Form"));
+    }
+}
+
+void MenuLayoutTable(int flag)
+{
+    if (UpdateLayoutTable(flag)) {
+        if (fd_form_table_options->form_table_options->visible) {
+            fl_raise_form(fd_form_table_options->form_table_options);
+        }
+        else {
+            fl_show_form(fd_form_table_options->form_table_options,
+                         FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
+                         _("Table Layout"));
+        }
+    }
+}
+
+void TableOptionsCB(FL_OBJECT *ob, long)
+{
+    LyXTable
+        *table = 0;
+    int
+        cell,
+        s,
+        num = 0;
+    LString
+        special,
+        str;
+
+    if (!current_view->available()
+       ||
+       !(table = current_view->currentBuffer()->text->cursor.par->table)) 
+      {
+        MenuLayoutTable(0);
+       return;
+      }
+    cell = current_view->currentBuffer()->text->
+        NumberOfCell(current_view->currentBuffer()->text->cursor.par, 
+                     current_view->currentBuffer()->text->cursor.pos);
+    if (ActCell != cell) {
+        MenuLayoutTable(0);
+        fl_set_object_label(fd_form_table_options->text_warning,
+                            _("Warning: Wrong Cursor position, updated window"));
+        fl_show_object(fd_form_table_options->text_warning);
+       extra_col_cursor_x=0; // would rather place it at the end, but...
+       extra_multicol_cursor_x=0;
+        return;
+    }
+    // No point in processing directives that you can't do anything with
+    // anyhow, so exit now if the buffer is read-only.
+    if (current_view->currentBuffer()->isReadonly()) {
+      MenuLayoutTable(0);
+      return;
+    }
+    
+    if (ob != fd_form_table_options->button_table_delete) {
+        fl_set_object_label(fd_form_table_options->text_warning,"");
+        Confirmed = false;
+    }
+    str = fl_get_input(fd_form_table_options->input_column_width);
+    if (!str.empty() && !isValidLength(str)) {
+        fl_set_object_label(fd_form_table_options->text_warning,
+                            _("Warning: Invalid Length (valid example: 10mm)"));
+        fl_show_object(fd_form_table_options->text_warning);
+        return;
+    }
+    if (((ob==fd_form_table_options->button_delete_row) && (table->rows<=1)) ||
+        ((ob==fd_form_table_options->button_delete_column) && (table->columns<=1)))
+        ob = fd_form_table_options->button_table_delete;
+    if (ob == fd_form_table_options->button_append_row)
+        num = LyXTable::APPEND_ROW;
+    else if (ob == fd_form_table_options->button_append_column)
+        num = LyXTable::APPEND_COLUMN;
+    else if (ob == fd_form_table_options->button_delete_row)
+        num = LyXTable::DELETE_ROW;
+    else if (ob == fd_form_table_options->button_delete_column)
+        num = LyXTable::DELETE_COLUMN;
+    else if (ob == fd_form_table_options->button_set_borders)
+        num = LyXTable::SET_ALL_LINES;
+    else if (ob == fd_form_table_options->button_unset_borders)
+        num = LyXTable::UNSET_ALL_LINES;
+    else if (ob == fd_form_table_options->radio_border_top)
+        num = LyXTable::TOGGLE_LINE_TOP;
+    else if (ob == fd_form_table_options->radio_border_bottom)
+        num = LyXTable::TOGGLE_LINE_BOTTOM;
+    else if (ob == fd_form_table_options->radio_border_left)
+        num = LyXTable::TOGGLE_LINE_LEFT;
+    else if (ob == fd_form_table_options->radio_border_right)
+        num = LyXTable::TOGGLE_LINE_RIGHT;
+    else if (ob == fd_form_table_options->radio_align_left)
+        num = LyXTable::ALIGN_LEFT;
+    else if (ob == fd_form_table_options->radio_align_right)
+        num = LyXTable::ALIGN_RIGHT;
+    else if (ob == fd_form_table_options->radio_align_center)
+        num = LyXTable::ALIGN_CENTER;
+    else if ((ob==fd_form_table_options->button_table_delete) && !Confirmed) {
+        fl_set_object_label(fd_form_table_options->text_warning,
+                            _("Confirm: press Delete-Button again"));
+        Confirmed = true;
+        return;
+    } else if ((ob == fd_form_table_options->button_table_delete) 
+              && Confirmed) {
+        num = LyXTable::DELETE_TABLE;
+        Confirmed = false;
+    } else if (ob == fd_form_table_options->radio_multicolumn)
+        num = LyXTable::MULTICOLUMN;
+    else if (ob == fd_form_table_options->radio_longtable) {
+        s=fl_get_button(fd_form_table_options->radio_longtable);
+        if (s) {
+            num = LyXTable::SET_LONGTABLE;
+            fl_activate_object(fd_form_table_options->radio_lt_firsthead);
+            fl_activate_object(fd_form_table_options->radio_lt_head);
+            fl_activate_object(fd_form_table_options->radio_lt_foot);
+            fl_activate_object(fd_form_table_options->radio_lt_lastfoot);
+            fl_activate_object(fd_form_table_options->radio_lt_newpage);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead,
+                          table->RowOfLTFirstHead(cell));
+            fl_set_button(fd_form_table_options->radio_lt_head,
+                          table->RowOfLTHead(cell));
+            fl_set_button(fd_form_table_options->radio_lt_foot,
+                          table->RowOfLTFoot(cell));
+            fl_set_button(fd_form_table_options->radio_lt_lastfoot,
+                          table->RowOfLTLastFoot(cell));
+            fl_set_button(fd_form_table_options->radio_lt_firsthead,
+                          table->LTNewPage(cell));
+        } else {
+           num = LyXTable::UNSET_LONGTABLE;
+            fl_deactivate_object(fd_form_table_options->radio_lt_firsthead);
+            fl_deactivate_object(fd_form_table_options->radio_lt_head);
+            fl_deactivate_object(fd_form_table_options->radio_lt_foot);
+            fl_deactivate_object(fd_form_table_options->radio_lt_lastfoot);
+            fl_deactivate_object(fd_form_table_options->radio_lt_newpage);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
+            fl_set_button(fd_form_table_options->radio_lt_firsthead,0);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_firsthead,
+                              FL_INACTIVE);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_head,
+                              FL_INACTIVE);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_foot,
+                              FL_INACTIVE);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_lastfoot,
+                              FL_INACTIVE);
+           fl_set_object_lcol(fd_form_table_options->radio_lt_newpage,
+                              FL_INACTIVE);
+        }
+    } else if (ob == fd_form_table_options->radio_rotate_table) {
+        s=fl_get_button(fd_form_table_options->radio_rotate_table);
+       if (s)
+            num = LyXTable::SET_ROTATE_TABLE;
+       else
+           num = LyXTable::UNSET_ROTATE_TABLE;
+    } else if (ob == fd_form_table_options->radio_rotate_cell) {
+        s=fl_get_button(fd_form_table_options->radio_rotate_cell);
+       if (s)
+            num = LyXTable::SET_ROTATE_CELL;
+       else
+           num = LyXTable::UNSET_ROTATE_CELL;
+    } else if (ob == fd_form_table_options->radio_linebreak_cell) {
+        num = LyXTable::SET_LINEBREAKS;
+    } else if (ob == fd_form_table_options->radio_lt_firsthead) {
+        num = LyXTable::SET_LTFIRSTHEAD;
+    } else if (ob == fd_form_table_options->radio_lt_head) {
+        num = LyXTable::SET_LTHEAD;
+    } else if (ob == fd_form_table_options->radio_lt_foot) {
+        num = LyXTable::SET_LTFOOT;
+    } else if (ob == fd_form_table_options->radio_lt_lastfoot) {
+        num = LyXTable::SET_LTLASTFOOT;
+    } else if (ob == fd_form_table_options->radio_lt_newpage) {
+        num = LyXTable::SET_LTNEWPAGE;
+    } else if (ob == fd_form_table_options->button_table_extra) {
+        OpenLayoutTableExtra();
+        return;
+    } else if (ob == fd_form_table_extra->input_special_alignment) {
+        special=fl_get_input(fd_form_table_extra->input_special_alignment);
+       int dummy;
+       fl_get_input_cursorpos(ob, &extra_col_cursor_x, &dummy);
+        num = LyXTable::SET_SPECIAL_COLUMN;
+    } else if (ob == fd_form_table_extra->input_special_multialign) {
+        special=fl_get_input(fd_form_table_extra->input_special_multialign);
+       int dummy;
+       fl_get_input_cursorpos(ob, &extra_multicol_cursor_x, &dummy);
+        num = LyXTable::SET_SPECIAL_MULTI;
+    } else
+        return;
+    if (current_view->available()){
+        current_view->getScreen()->HideCursor();
+        if (!current_view->currentBuffer()->text->selection){
+            BeforeChange(); 
+            current_view->currentBuffer()->update(-2);
+        }
+        if ((num == LyXTable::SET_SPECIAL_COLUMN) ||
+            (num == LyXTable::SET_SPECIAL_MULTI))
+            current_view->currentBuffer()->text->TableFeatures(num,special);
+        else
+            current_view->currentBuffer()->text->TableFeatures(num);
+        current_view->currentBuffer()->update(1);
+    }
+    if (num == LyXTable::DELETE_TABLE)
+        fl_hide_form(fd_form_table_options->form_table_options);
+    else
+        UpdateLayoutTable(true);
+    return;
+}
+
+void TableOptCloseCB(FL_OBJECT *, long)
+{
+    fl_hide_form(fd_form_table_options->form_table_options);
+    return;
+}
+
+void TableSpeCloseCB(FL_OBJECT *, long)
+{
+    fl_hide_form(fd_form_table_extra->form_table_extra);
+    return;
+}
+
+void SetPWidthCB(FL_OBJECT *ob, long)
+{
+    fl_set_object_label(fd_form_table_options->text_warning,"");
+    Confirmed = false;
+    if (ob == fd_form_table_options->input_column_width) {
+        LString
+            str;
+        str = fl_get_input(ob);
+        if (!str.empty() && !isValidLength(str)) {
+            fl_set_object_label(fd_form_table_options->text_warning,
+                            _("Warning: Invalid Length (valid example: 10mm)"));
+            fl_show_object(fd_form_table_options->text_warning);
+            return;
+        }
+        if (current_view->available()){
+            current_view->getScreen()->HideCursor();
+            if (!current_view->currentBuffer()->text->selection){
+                BeforeChange(); 
+                current_view->currentBuffer()->update(-2);
+            }
+            current_view->currentBuffer()->text->TableFeatures(LyXTable::SET_PWIDTH,str);
+            current_view->currentBuffer()->update(1);
+        }
+        MenuLayoutTable(0); // update for alignment
+    }
+}
diff --git a/src/atexit.C b/src/atexit.C
new file mode 100644 (file)
index 0000000..9d99f38
--- /dev/null
@@ -0,0 +1,12 @@
+/* Wrapper to implement ANSI C's atexit using SunOS's on_exit. */
+/* This function is in the public domain.  --Mike Stump. */
+
+#ifndef NEED_on_exit
+int atexit(void (*f)())
+{
+  /* If the system doesn't provide a definition for atexit, use on_exit
+     if the system provides that.  */
+  on_exit (f, 0);
+  return 0;
+}
+#endif
diff --git a/src/bibforms.h b/src/bibforms.h
new file mode 100644 (file)
index 0000000..9c80ec8
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef FD_citation_form_h_
+#define FD_citation_form_h_
+/* Header file generated with fdesign. */
+
+
+/**** Forms and Objects ****/
+
+typedef struct {
+       FL_FORM *citation_form;
+       void *vdata;
+       long ldata;
+       FL_OBJECT *key;
+       FL_OBJECT *label;
+} FD_citation_form;
+
+
+typedef struct {
+       FL_FORM *bibitem_form;
+       void *vdata;
+       long ldata;
+       FL_OBJECT *key;
+       FL_OBJECT *label;
+} FD_bibitem_form;
+
+#endif /* FD_citation_form_h_ */
diff --git a/src/bmtable.C b/src/bmtable.C
new file mode 100644 (file)
index 0000000..163bc0b
--- /dev/null
@@ -0,0 +1,482 @@
+/*
+ *  File:        bmtable.c
+ *  Purpose:     Implementation of the XForms object bmtable. 
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     November 1995
+ *  Description: A bitmap table uses a single bitmap to simulate a 2d array 
+ *               of bitmap buttons. It can be used to build bitmap menus.
+ *               
+ *  Copyright (C) 1995,1996 Alejandro Aguilar Sierra 
+ *
+ *  You are free to use and modify this code under the terms of
+ *  the GNU General Public Licence version 2 or later. 
+ *  
+ */ 
+
+#include <config.h>
+
+//     $Id: bmtable.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $   
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: bmtable.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+#include <stdlib.h>
+#include "bmtable.h"
+#include XPM_H_LOCATION
+
+typedef struct   {   
+   int nx, ny;   /* Dimensions of the table */
+   int dx, dy;   /* Size of each item */ 
+   int bx, by;   /* Bitmap's position */
+   int bw, bh;   /* Bitmap dimensions */
+   char* bdata;  /* Bitmap data */
+   int maxi;     /* Number of items */
+   int i;        /* Current position */
+   int mousebut; /* mouse button pushed */  
+   Pixmap pix;   /* Pixmap from data (temporal) */
+} BMTABLE_SPEC;
+                 
+
+static int handle_bitmaptable(FL_OBJECT *ob, int event, FL_Coord mx, 
+                             FL_Coord my, int key, void *xev);
+
+
+FL_OBJECT *fl_create_bmtable(int type, FL_Coord x, FL_Coord y, 
+                                FL_Coord w, FL_Coord h, char const *label)
+{
+   FL_OBJECT *ob;
+   
+   ob = fl_make_object(FL_BMTABLE, type, x, y, w, h, label, handle_bitmaptable);
+   ob->boxtype = FL_BMTABLE_BOXTYPE;
+   ob->spec = fl_calloc(1, sizeof(BMTABLE_SPEC));
+   ((BMTABLE_SPEC *)ob->spec)->pix = 0;
+   ((BMTABLE_SPEC *)ob->spec)->bdata= 0;
+   ((BMTABLE_SPEC *)ob->spec)->mousebut= -1;
+   return ob;
+}
+
+
+FL_OBJECT *fl_add_bmtable(int type, FL_Coord x, FL_Coord y, 
+                             FL_Coord w, FL_Coord h, char const *label)
+{
+   FL_OBJECT *ob;
+   
+   ob = fl_create_bmtable(type, x, y, w,h, label);  
+   fl_add_object(fl_current_form, ob); 
+   
+   return ob;
+}
+
+
+static void draw_bitmaptable(FL_OBJECT *ob)
+{
+       int i, j, lx;
+       FL_Coord mx, my;
+       FL_Coord xx, yy, ww, hh;
+       BMTABLE_SPEC *sp = (BMTABLE_SPEC *)ob->spec;
+       if (!sp) return;
+       GC gc = fl_state[fl_get_vclass()].gc[0];
+   
+       /* draw the bounding box first */
+       lx = sp->maxi % sp->nx;
+       fl_drw_box(ob->boxtype, ob->x, ob->y, ob->w, ob->h, ob->col1, ob->bw);
+       if (lx) {
+               i = FL_abs(ob->bw);
+               xx = ob->x+ sp->dx*lx + i;
+               yy = ob->y+ (sp->ny-1)*sp->dy+i;
+               ww = ob->x+ob->w - xx - i;
+               hh = ob->y+ob->h-yy-i;
+               fl_drw_frame(FL_DOWN_FRAME, xx, yy, ww, hh, ob->col1, ob->bw);
+               fl_rectf(xx, yy, ww+i, hh+i, ob->col1);
+       }
+    
+       /* draw the background bitmap */
+       if (sp->bdata)  {
+               if (!sp->pix) {
+                       sp->pix =  XCreatePixmapFromBitmapData(fl_display, fl_winget(), 
+                                       sp->bdata, sp->bw, sp->bh,
+                                       fl_get_flcolor(ob->lcol), fl_get_flcolor(ob->col1),
+                                       DefaultDepth(fl_display, DefaultScreen(fl_display)));
+                       XFlush(fl_display);
+               }
+       }
+       if (sp->pix) {
+               /* Adjust position */ 
+               if (sp->bx < FL_abs(ob->bw) + 1) {
+                       xx = FL_abs(ob->bw) - sp->bx + 1;
+                       mx = ob->x + FL_abs(ob->bw) + 1;
+               } else  {
+                       xx =0;
+                       mx = ob->x + sp->bx;
+               }
+               if (sp->by < FL_abs(ob->bw) + 1)  {      
+                       yy = FL_abs(ob->bw) - sp->by + 1;
+                       my = ob->y + FL_abs(ob->bw) + 1;
+               } else   {
+                       yy =0;
+                       my = ob->y + sp->by;
+               }                 
+               ww = (mx + sp->bw < ob->x + ob->w - FL_abs(ob->bw)) ? 
+                       sp->bw: ob->x + ob->w - FL_abs(ob->bw) - mx;
+               hh = (my + sp->bh < ob->y + ob->h - FL_abs(ob->bw)) ?
+                       sp->bh: ob->y + ob->h - FL_abs(ob->bw) - my; 
+      
+               i = FL_abs(ob->bw);
+               j = hh - ((lx) ? sp->dy+2*i: 0);
+               XCopyArea(fl_display, sp->pix, fl_winget(), gc, xx, yy, ww, j, mx, my);
+               XFlush(fl_display);
+               if (lx) {
+                       XCopyArea(fl_display, sp->pix, fl_winget(), gc, xx,
+                                         yy+j, lx*sp->dx-2*i, hh-j, mx, my+j);
+                       XFlush(fl_display);
+               }
+       }
+   
+   
+       /* draw the grid if type > FLAT */
+       if (ob->type > FL_BMTABLE_FLAT)  {
+               mx = ob->x + ob->w; 
+               my = ob->y + ob->h; 
+               ww = ob->w; 
+               for (yy=ob->y; yy<=my; yy+=sp->dy) {
+                       if (ob->boxtype!=FL_FLAT_BOX && (yy==ob->y || yy>my-sp->dy)) 
+                               continue;
+                       if (lx>0 && yy>=my-sp->dy - sp->dy/2)
+                               ww = lx*sp->dx;
+                       fl_diagline(ob->x, yy, ww, 1, FL_BOTTOM_BCOL); 
+                       fl_diagline(ob->x, yy+1, ww-2, 1, FL_TOP_BCOL); 
+               }          
+               hh = ob->h;
+               for (xx=ob->x; xx<=mx; xx+=sp->dx)  {
+                       if (ob->boxtype!=FL_FLAT_BOX && (xx==ob->x || xx>mx-sp->dx))
+                               continue;
+                       if (lx>0 && xx>=ob->x+lx*sp->dx)
+                               hh = (sp->ny-1)*sp->dy;
+                       fl_diagline(xx, ob->y, 1, hh, FL_RIGHT_BCOL);
+                       fl_diagline(xx+1, ob->y+1, 1, hh-2, FL_LEFT_BCOL);
+               }        
+       }  
+   
+       /* Simulate a pushed button */
+       if (ob->pushed && 0 <= sp->i && sp->i < sp->maxi)  {  
+               i = sp->i % sp->nx;
+               j = sp->i/sp->nx;
+               ww = sp->dx-2*FL_abs(ob->bw);
+               hh = sp->dy-2*FL_abs(ob->bw);
+               xx = ob->x + sp->dx*i + FL_abs(ob->bw);
+               yy = ob->y + sp->dy*j + FL_abs(ob->bw);
+               fl_drw_frame(FL_DOWN_FRAME, xx, yy, ww, hh, ob->col1, ob->bw);
+       }
+}
+
+
+static int handle_bitmaptable(FL_OBJECT *ob, int event, FL_Coord mx, 
+                             FL_Coord my, int key, void */*xev*/)
+{
+       int i, j;
+       BMTABLE_SPEC *sp = (BMTABLE_SPEC *)ob->spec;
+   
+       switch (event)  {
+    case FL_DRAW: 
+               draw_bitmaptable(ob);
+               break;
+    case FL_MOUSE:
+               if (!ob->belowmouse) {    /* This never happens. Why? */
+                       sp->i = -1;
+                       fl_redraw_object(ob);
+                       break;
+               }
+               i = (mx - ob->x)/sp->dx;  j = (my - ob->y)/sp->dy;
+               if (i>=0 && i< sp->nx && j>=0 && j< sp->ny)   {
+                       i += j*sp->nx;
+                       if (i >= sp->maxi) i = -1;
+                       if (sp->i !=  i)  {
+                               sp->i = i;
+                               fl_redraw_object(ob);
+                       }
+               }
+               break;        
+    case FL_PUSH:
+               sp->mousebut = key;
+               i = (mx - ob->x)/sp->dx + ((my - ob->y)/sp->dy)*sp->nx; 
+               if (0 <= i && i < sp->maxi)  {
+                       sp->i =  i;
+                       fl_redraw_object(ob);
+               } else
+                       sp->i =  -1; 
+               break;
+    case FL_RELEASE:    
+               fl_redraw_object(ob);
+               return 1;
+    case FL_FREEMEM:
+           if (sp->pix) {
+                   XFreePixmap(fl_display, sp->pix);
+                   XFlush(fl_display);
+           }
+               fl_free(((BMTABLE_SPEC*)ob->spec));      
+               break;
+       }
+       return 0;
+}
+
+
+/*
+ * The table has nx columns of dx width each and ny rows of dy height each. 
+ * Initially the position of the firts item is supposed to be the same that
+ * the object position (x, y), and the number of items is supposed to be
+ * exactly nx*ny.
+ * 
+ * The user could change these later. See below.
+ */ 
+void fl_set_bmtable_data(FL_OBJECT *ob, int nx, int ny, int bw, int bh, 
+                       char *bdata)
+{
+   BMTABLE_SPEC *sp = (BMTABLE_SPEC *)ob->spec;
+   if (sp) {
+     sp->nx = nx;
+     sp->ny = ny; 
+     sp->bx = FL_abs(ob->bw);
+     sp->by = FL_abs(ob->bw);
+     sp->dx = ob->w/nx; 
+     sp->dy = ob->h/ny;
+     sp->i = -1;
+     sp->maxi = sp->nx * sp->ny;
+     sp->bw = bw;
+     sp->bh = bh;
+     sp->bdata = bdata;
+   }
+}
+
+
+void fl_set_bmtable_pixmap_data(FL_OBJECT *ob, int nx, int ny,
+                       char **pdata)
+{
+       BMTABLE_SPEC *sp = (BMTABLE_SPEC *)ob->spec;
+       extern Colormap color_map;
+       if (sp) {
+               sp->nx = nx;
+               sp->ny = ny; 
+               sp->bx = FL_abs(ob->bw);
+               sp->by = FL_abs(ob->bw);
+               sp->dx = ob->w/nx; 
+               sp->dy = ob->h/ny;
+               sp->i = -1;
+               sp->maxi = sp->nx * sp->ny;
+               sp->bdata = 0;
+               Pixmap dummy_shapemask = 0;
+               XpmAttributes dumb_attributes= {0};
+               dumb_attributes.colormap = color_map;
+               dumb_attributes.closeness = 30000;
+               dumb_attributes.valuemask = XpmColormap | XpmCloseness;
+               if (XCreatePixmapFromData(fl_display, fl_winget(), pdata,
+                                         &(sp->pix), &dummy_shapemask,
+                                         &dumb_attributes) == XpmSuccess) {
+                       sp->bw = dumb_attributes.width;
+                       sp->bh = dumb_attributes.height;
+                       XpmFreeAttributes(&dumb_attributes);
+                       if (dummy_shapemask) {
+                               XFreePixmap(fl_display, dummy_shapemask);
+                       }
+               }
+               XFlush(fl_display);
+       }
+}
+
+
+/*
+ *  This function works only for X11R6 or later
+ */
+#if XlibSpecificationRelease > 5 
+
+void fl_set_bmtable_file(FL_OBJECT *ob, int nx, int ny, char const *filename)
+{      
+   int bw, bh, xh, yh;
+   char *bdata;
+   
+   if(XReadBitmapFileData(filename, (unsigned int *) &bw, (unsigned int *) &bh,
+        (unsigned char **) &bdata, &xh, &yh)==BitmapSuccess)
+     fl_set_bmtable_data(ob, nx, ny, bw, bh, bdata);
+   XFlush(fl_display);
+}
+
+#else
+
+void fl_set_bmtable_file(FL_OBJECT *, int, int, char const *) 
+{
+  fprintf(stderr, "Set bmtable file: Sorry, I need X11 release 6 to do " 
+          "work!\n");
+}
+
+#endif
+
+
+
+void fl_set_bmtable_pixmap_file(FL_OBJECT *ob, int nx, int ny, char const *filename)
+{      
+       extern Colormap color_map;
+       BMTABLE_SPEC *sp = (BMTABLE_SPEC *)ob->spec;
+       if (sp) {
+               sp->nx = nx;
+               sp->ny = ny; 
+               sp->bx = FL_abs(ob->bw);
+               sp->by = FL_abs(ob->bw);
+               sp->dx = ob->w/nx; 
+               sp->dy = ob->h/ny;
+               sp->i = -1;
+               sp->maxi = sp->nx * sp->ny;
+               sp->bdata = 0;
+
+               Pixmap dummy_shapemask = 0;
+               XpmAttributes dumb_attributes= {0};
+               dumb_attributes.colormap = color_map;
+               dumb_attributes.closeness = 30000;
+               dumb_attributes.valuemask = XpmColormap | XpmCloseness;
+   
+               if (XReadPixmapFile(fl_display, fl_winget(), (char *)filename,
+                                   &(sp->pix), &dummy_shapemask,
+                                   &dumb_attributes) == XpmSuccess) {
+                       sp->bw = dumb_attributes.width;
+                       sp->bh = dumb_attributes.height;
+                       XpmFreeAttributes(&dumb_attributes);
+                       if (dummy_shapemask) {
+                               XFreePixmap(fl_display, dummy_shapemask);
+                       }
+               }
+               XFlush(fl_display);
+       }
+}
+
+
+/*
+ * This function allows to adjust the position of the first item and its
+ * size (dx, dy). The input values are incremental, not absolute.
+ */
+void fl_set_bmtable_adjust(FL_OBJECT *ob, int px, int py, int dx, int dy)
+{
+   BMTABLE_SPEC *sp = (BMTABLE_SPEC *)ob->spec;   
+   if (sp) {
+     sp->bx += px;
+     sp->by += py;                         
+     sp->dx += dx;
+     sp->dy += dy;
+   }
+}
+
+/* 
+ * This function returns the table's selected position.
+ */
+int fl_get_bmtable(FL_OBJECT *ob)
+{ 
+   if ((BMTABLE_SPEC *)ob->spec)
+     return  ((BMTABLE_SPEC *)ob->spec)->i;
+   else 
+     return 0;
+}
+
+
+/* 
+ * You can change the max number of items if you want.
+ */
+void fl_set_bmtable_maxitems(FL_OBJECT *ob, int i)
+{
+   if (i>0 && (BMTABLE_SPEC *)ob->spec)
+     ((BMTABLE_SPEC *)ob->spec)->maxi = i;
+}   
+
+
+int fl_get_bmtable_maxitems(FL_OBJECT *ob)
+{
+   if ((BMTABLE_SPEC *)ob->spec)
+     return  ((BMTABLE_SPEC *)ob->spec)->maxi;
+   else
+     return 0;
+}
+
+
+void fl_replace_bmtable_item(FL_OBJECT */*ob*/, int /*id*/, int  /*cw*/, int /*ch*/, char */*data*/)
+{
+   fprintf(stderr, "Replace bmtable item: Sorry, not yet implemented!\n");
+}
+
+
+void fl_get_bmtable_item(FL_OBJECT */*ob*/, int /*id*/, int */*cw*/, int */*ch*/, char */*data*/)
+{
+   fprintf(stderr, "Get bmtable item: Sorry, not yet implemented!\n");
+}  
+
+void fl_set_bmtable(FL_OBJECT *ob, int pushed, int pos)
+{
+   if ((BMTABLE_SPEC *)ob->spec)
+     ((BMTABLE_SPEC *)ob->spec)->i = (pushed) ? pos: -1;
+}
+
+
+int fl_get_bmtable_numb(FL_OBJECT *ob)
+{
+   if ((BMTABLE_SPEC *)ob->spec)
+     return ((BMTABLE_SPEC *)ob->spec)->mousebut;
+   else
+     return 0;
+}
+
+
+Pixmap fl_get_bmtable_pixmap(FL_OBJECT *ob)
+{
+   if ((BMTABLE_SPEC *)ob->spec)
+     return ((BMTABLE_SPEC *)ob->spec)->pix;
+   else
+     return 0;
+}
+
+
+void fl_draw_bmtable_item(FL_OBJECT *ob, int i, Drawable d, int xx, int yy)
+{
+   int x, y, w, h;
+   GC gc = fl_state[fl_get_vclass()].gc[0];
+   BMTABLE_SPEC *sp = (BMTABLE_SPEC *)ob->spec;
+   
+   if (sp && sp->pix) {
+      x = (i % sp->nx)*sp->dx + FL_abs(ob->bw);
+      y = (i/sp->nx)*sp->dy + FL_abs(ob->bw);
+      w = sp->dx-2*FL_abs(ob->bw);
+      h = sp->dy-2*FL_abs(ob->bw);      
+      XCopyArea(fl_display, sp->pix, d, gc, x, y, w, h, xx, yy);
+      XFlush(fl_display);
+   }
+}
+
+/* Free the current bitmap and pixmap in preparation for installing a new one */
+void fl_free_bmtable_bitmap(FL_OBJECT *ob)
+{
+  BMTABLE_SPEC *sp = (BMTABLE_SPEC *)ob->spec;
+
+  /* dump the temporary pixmap */
+  if (sp && sp->pix) { 
+    XFreePixmap(fl_display, sp->pix);
+    XFlush(fl_display);
+    sp->pix = 0;
+  }
+
+  /* and free the space taken by bdata etc. */
+  if (sp && sp->bdata) {
+    fl_free(sp->bdata);
+    sp->bdata = 0;
+  }
+}
+
+/* Free the current pixmap in preparation for installing a new one */
+/* This is needed when using data instead of files to set bitmaps  */
+void fl_free_bmtable_pixmap(FL_OBJECT *ob)
+{
+  BMTABLE_SPEC *sp = (BMTABLE_SPEC *)ob->spec;
+
+  /* dump the temporary pixmap */
+  if (sp && sp->pix) { 
+    XFreePixmap(fl_display, sp->pix);
+    XFlush(fl_display);
+    sp->pix = 0;
+  }
+}
+
+
diff --git a/src/bmtable.h b/src/bmtable.h
new file mode 100644 (file)
index 0000000..edb340d
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ *  File:        bmtable.h
+ *  Purpose:     Declaration of the XForms object bmtable. 
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     November 1995
+ *  Description: A bitmap table uses a single bitmap to simulate a 2d array 
+ *               of bitmap buttons. It can be used to build bitmap menus.
+ *               
+ *  Copyright (C) 1995,1996 Alejandro Aguilar Sierra 
+ *
+ *  You are free to use and modify this code under the terms of
+ *  the GNU General Public Licence version 2 or later. 
+ * 
+ */ 
+
+#ifndef __BMTABLE_H__
+#define __BMTABLE_H__ 
+
+#include FORMS_H_LOCATION
+
+///
+#define FL_BMTABLE 1500
+/// A flat bitmap table
+#define FL_BMTABLE_FLAT 0
+/// A grided bitmap table
+#define FL_BMTABLE_GRID 1
+
+
+/*  Same as fl_bitmapbutton */
+
+
+/**
+ *  normal bmtable default
+ */
+#define FL_BMTABLE_BOXTYPE     FL_UP_BOX
+
+///
+FL_OBJECT *fl_create_bmtable(int, FL_Coord, FL_Coord, 
+                            FL_Coord, FL_Coord, char const *);
+///
+FL_OBJECT *fl_add_bmtable(int, FL_Coord, FL_Coord, 
+                         FL_Coord, FL_Coord, char const *);
+
+/** Same as fl_get_button_numb() */
+int fl_get_bmtable_numb(FL_OBJECT *ob);
+///
+void fl_set_bmtable(FL_OBJECT *, int pushed, int pos);
+
+/** Number of columns and rows, and the background bitmap */
+void fl_set_bmtable_data(FL_OBJECT *, int, int, int, int , char *);
+///
+void fl_set_bmtable_pixmap_data(FL_OBJECT *, int, int, char **);
+///
+void fl_set_bmtable_file(FL_OBJECT *, int, int, char const *);
+///
+void fl_set_bmtable_pixmap_file(FL_OBJECT *, int, int, char const *);
+
+/** Adjust bitmap origin (ox, oy) and cell dimensions (dx, dy) incrementally */
+void fl_set_bmtable_adjust(FL_OBJECT *, int ox, int oy, int dx, int dy);
+
+/** The number of items is by default nc x nr, but you can change it */
+void fl_set_bmtable_maxitems(FL_OBJECT *, int);
+///
+int fl_get_bmtable_maxitems(FL_OBJECT *); 
+
+/** Returns the index of the selected item or -1 if none was selected */
+int fl_get_bmtable(FL_OBJECT *);
+
+/** Replace an item's sub_bitmap at id position */
+void fl_replace_bmtable_item(FL_OBJECT *ob, int id, int  cw, int ch, char *data); 
+
+/** Get the sub_bitmap from id position. You must alloc memory for the data. */ 
+void fl_get_bmtable_item(FL_OBJECT *ob, int id, int *cw, int *ch, char *data);
+
+/** Returns a pixmap from the table, if available. */
+Pixmap fl_get_bmtable_pixmap(FL_OBJECT *);
+
+/** Draws a single item on a drawable */ 
+void fl_draw_bmtable_item(FL_OBJECT *ob, int i, Drawable d, int xx, int yy);
+
+/** Free the current bitmap in preparation for installing a new one */
+void fl_free_bmtable_bitmap(FL_OBJECT *ob);
+
+/** Free the current pixmap in preparation for installing a new one */
+void fl_free_bmtable_pixmap(FL_OBJECT *ob);
+
+#endif  /* __BMTABLE_H__ */
+
diff --git a/src/broken_const.h b/src/broken_const.h
new file mode 100644 (file)
index 0000000..3e9697a
--- /dev/null
@@ -0,0 +1,20 @@
+/* -*- C++ -*- */
+/* This file is part of
+* ======================================================
+* 
+*           LyX, the High Level Word Processor
+*        
+*           Copyright (C) 1995,1996 Matthias Ettrich
+*
+*======================================================
+ broken_const.h -- inhibits the `const' keyword for compilation */
+
+#ifdef const
+#undef const
+#endif /* const */
+#define const
+#ifdef __CONSTVALUE2
+#undef __CONSTVALUE2
+#define        __CONSTVALUE2   /* We don't want empty __attribute__ (()). */
+#endif /* __CONSTVALUE2 */
+
diff --git a/src/broken_headers.h b/src/broken_headers.h
new file mode 100644 (file)
index 0000000..d2e51ee
--- /dev/null
@@ -0,0 +1,30 @@
+/* -*- C++ -*- */
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team
+*======================================================
+ A few prototypes missing from Sun and SCO 3.2v4 header files */
+
+#ifndef _BROKEN_HEADERS_H
+#define _BROKEN_HEADERS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef HAVE_MEMMOVE
+void bcopy(unsigned char *b1, unsigned char *b2, int length);
+#endif
+
+int readlink(char const *path, char *buf, int bufsiz);
+int strcasecmp(char const *s1, char const *s2);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _BROKEN_HEADERS_H */
diff --git a/src/buffer.C b/src/buffer.C
new file mode 100644 (file)
index 0000000..2d9e0a1
--- /dev/null
@@ -0,0 +1,3990 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *
+ *          Copyright (C) 1995 Matthias Ettrich
+ *           Copyright (C) 1995-1998 The LyX Team.
+ *
+ *           This file is Copyright (C) 1996-1998
+ *           Lars Gullik Bjønnes
+ *
+ *======================================================
+ */
+
+// Change Log:
+// ===========
+// 23/03/98   Heinrich Bauer (heinrich.bauer@t-mobil.de)
+// Spots marked "changed Heinrich Bauer, 23/03/98" modified due to the
+// following bug: dvi file export did not work after printing (or previewing)
+// and vice versa as long as the same file was concerned. This happened
+// every time the LyX-file was left unchanged between the two actions mentioned
+// above.
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#ifdef __GNUG__
+#pragma implementation "buffer.h"
+#endif
+
+#include "definitions.h"
+#include "buffer.h"
+#include "bufferlist.h"
+#include "lyx_main.h"
+#include "lyx_gui_misc.h"
+#include "lyxrc.h"
+#include "lyxlex.h"
+#include "tex-strings.h"
+#include "layout.h"
+#include "lyx_cb.h"
+#include "minibuffer.h"
+#include "lyxfont.h"
+#include "mathed/formulamacro.h"
+#include "insets/lyxinset.h"
+#include "insets/inseterror.h"
+#include "insets/insetlabel.h"
+#include "insets/insetref.h"
+#include "insets/inseturl.h"
+#include "insets/insetinfo.h"
+#include "insets/insetquotes.h"
+#include "insets/insetlatex.h"
+#include "insets/insetlatexaccent.h"
+#include "insets/insetbib.h" 
+#include "insets/insetindex.h" 
+#include "insets/insetinclude.h"
+#include "insets/insettoc.h"
+#include "insets/insetlof.h"
+#include "insets/insetlot.h"
+#include "insets/insetloa.h"
+#include "insets/insetparent.h"
+#include "insets/insetspecialchar.h"
+#include "insets/figinset.h"
+#include "filetools.h"
+#include "pathstack.h"
+#include "LaTeX.h"
+#include "Literate.h"
+#include "Chktex.h"
+#include "LyXView.h"
+#include "error.h"
+#include "LaTeXFeatures.h"
+#include "syscall.h"
+#include "lyxlib.h"
+#include "FileInfo.h"
+#include "lyxtext.h"
+#include "gettext.h"
+
+
+//     $Id: buffer.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $    
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: buffer.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+
+// Uncomment this line to enable a workaround for the weird behaviour
+// of the cursor between a displayed inset and last character
+// at the upper line. (Alejandro 20.9.96)
+// #define BREAK_BEFORE_INSET
+
+/* Lars, when changing this file sometime in the future to a list,
+ * please check out the figinsets-sideeffects described at the
+ * beginning of figinset.C    Matthias (04.07.1996)
+ */
+
+
+// all these externs should eventually be removed.
+extern BufferList bufferlist;
+extern void SmallUpdate(signed char);
+extern unsigned char GetCurrentTextClass();
+extern void BeforeChange();
+
+static const float LYX_FORMAT = 2.15;
+
+extern int tex_code_break_column;
+
+extern void FreeUpdateTimer();
+
+
+Buffer::Buffer(LString const & file, LyXRC *lyxrc, bool ronly)
+{
+       filename = file;
+       filepath = OnlyPath(file);
+       paragraph = NULL;
+       text = NULL;
+       the_locking_inset = NULL;
+       lyx_clean = true;
+       bak_clean = true;
+       dvi_clean_orgd = false;  // Heinrich Bauer, 23/03/98
+       dvi_clean_tmpd = false;  // Heinrich Bauer, 23/03/98
+       dep_clean = NULL;
+       read_only = ronly;
+       inset_slept = false;
+       users = 0;
+       lyxvc.setBuffer(this);
+       lyxerr.debug("Buffer::Buffer()");
+       if (read_only || (lyxrc && lyxrc->use_tempdir)) {
+               tmppath = CreateBufferTmpDir();
+       } else tmppath.clean();
+}
+
+
+Buffer::~Buffer()
+{
+       lyxerr.debug("Buffer::~Buffer()");
+       // here the buffer should take care that it is
+       // saved properly, before it goes into the void.
+
+       // make sure that views using this buffer
+       // forgets it.
+       if (users)
+               users->setBuffer(0);
+       
+       if (!tmppath.empty()) {
+               DestroyBufferTmpDir(tmppath);
+       }
+       
+       LyXParagraph *par = paragraph;
+       LyXParagraph *tmppar;
+       while (par) {
+               tmppar = par->next;
+               delete par;
+               par = tmppar;
+       }
+       paragraph = NULL;
+       delete text;
+}
+
+
+bool Buffer::saveParamsAsDefaults()
+{
+       LString fname = AddName(AddPath(user_lyxdir, "templates/"),
+                               "defaults.lyx");
+       Buffer defaults = Buffer(fname);
+       
+       // Use the current buffer's parameters as default
+       defaults.params.Copy(params);
+       // add an empty paragraph. Is this enough?
+       defaults.paragraph = new LyXParagraph();
+
+       return defaults.writeFile(defaults.filename,false);
+}
+
+
+/// Update window titles of all users
+// Should work on a list
+void Buffer::updateTitles()
+{
+       if (users) users->getOwner()->updateWindowTitle();
+}
+
+
+/// Reset autosave timer of all users
+// Should work on a list
+void Buffer::resetAutosaveTimers()
+{
+       if (users) users->getOwner()->resetAutosaveTimer();
+}
+
+
+void Buffer::setFileName(LString const & newfile)
+{
+       filename = MakeAbsPath(newfile);
+       filepath = OnlyPath(filename);
+       setReadonly(IsFileWriteable(filename) == 0);
+       updateTitles();
+}
+
+void Buffer::InsetUnlock()
+{
+       if (the_locking_inset) {
+               if (!inset_slept) the_locking_inset->InsetUnlock();
+               the_locking_inset = NULL;
+               text->FinishUndo();
+               inset_slept = false;
+       }
+}
+
+
+// Inserts a file into current document
+bool Buffer::insertLyXFile(LString const & filen)
+       //
+       // (c) CHT Software Service GmbH
+       // Uwe C. Schroeder
+       //
+       // Insert a Lyxformat - file into current buffer
+       //
+       // Moved from lyx_cb.C (Lgb)
+{
+       if (filen.empty()) return false;
+
+       LString filename = MakeAbsPath(filen);
+
+       // check if file exist
+       FileInfo fi(filename);
+
+       if (!fi.exist() || !fi.readable()) {
+               WriteAlert(_("Error!"),
+                          _("Cannot open specified file:"),
+                          MakeDisplayPath(filename,50));
+               return false;
+       }
+       
+       BeforeChange();
+
+       FilePtr myfile(filename, FilePtr::read);
+       if (!myfile()) {
+               WriteAlert(_("Error!"),
+                          _("Cannot open specified file:"),
+                          MakeDisplayPath(filename,50));
+               return false;
+       }
+       LyXLex lex(NULL, 0);
+       lex.setFile(myfile);
+       int c = fgetc(myfile());
+       ungetc(c, myfile);
+
+       bool res = true;
+
+       if (c=='#') {
+               lyxerr.debug("Will insert file with header");
+               res = readFile(lex, text->cursor.par);
+       } else {
+               lyxerr.debug("Will insert file without header");
+               res = readLyXformat2(lex, text->cursor.par);
+       }
+       resize();
+       return res;
+}
+
+
+//
+// Uwe C. Schroeder
+// changed to be public and have one parameter
+// if par = NULL normal behavior
+// else insert behavior
+// Returns false if "\the_end" is not read for formats >= 2.13. (Asger)
+bool Buffer::readLyXformat2(LyXLex &lex, LyXParagraph *par)
+{
+       LString tmptok;
+       Inset *inset = 0;
+       int pos = 0;
+       int tmpret, tmpret2;
+       char depth = 0; // signed or unsigned?
+       LyXParagraph::footnote_flag footnoteflag = LyXParagraph::NO_FOOTNOTE;
+       LyXParagraph::footnote_kind footnotekind = LyXParagraph::FOOTNOTE;
+       bool the_end_read = false;
+
+       LyXParagraph *return_par = NULL;
+       LyXFont font = LyXFont(LyXFont::ALL_INHERIT);
+
+       // If we are inserting, we cheat and get a token in advance
+       bool has_token = false;
+       LString pretoken;
+
+       if(!par) {
+               par = new LyXParagraph();
+       } else {
+               text->BreakParagraph();
+               return_par = text->FirstParagraph();
+               pos=0;
+               markDirty();
+               // We don't want to adopt the parameters from the
+               // document we insert, so we skip until the text begins:
+               while (lex.IsOK()) {
+                       lex.nextToken();
+                       pretoken = lex.GetString();
+                       if (pretoken == "\\layout") {
+                               has_token = true;
+                               break;
+                       }
+               }
+       }
+
+       while (lex.IsOK()) {
+               if (has_token) {
+                       has_token = false;
+               } else {
+                       lex.nextToken();
+                       pretoken = lex.GetString();
+               }
+
+               // Profiling show this should give a lot: (Asger)
+               LString const token = pretoken;
+
+               if (token.empty())
+                       continue;
+               else if (token[0] != '\\') {
+                       int n = token.length();
+                       for (int i=0; i < n; i++) {
+                               par->InsertChar(pos, token[i]);
+                               par->SetFont(pos, font);
+                               pos++;
+                       }
+               } else if (token == "\\i") {
+                       inset = new InsetLatexAccent;
+                       inset->Read(lex);
+                       par->InsertChar(pos, LYX_META_INSET); 
+                       
+                       par->InsertInset(pos, inset);
+                       par->SetFont(pos, font);
+                       pos++;
+               } else if (token == "\\layout") {
+                       if (!return_par) 
+                               return_par = par;
+                       else 
+                               par = new LyXParagraph(par);
+                       pos = 0;
+                       lex.EatLine();
+                       par->layout =
+                               lyxstyle.NumberOfLayout(params.textclass,
+                                                       lex.GetString());
+                       if (par->layout == -1) // layout not found
+                               // use default layout "Standard" (0)
+                               par->layout = 0;
+                       // Test whether the layout is obsolete.
+                       LyXLayout* layout = lyxstyle.Style(params.textclass,
+                                                          par->layout); 
+                       if (!layout->obsoleted_by.empty())
+                               par->layout = 
+                                       lyxstyle.NumberOfLayout(params.textclass, 
+                                                               layout->obsoleted_by);
+                       par->footnoteflag = footnoteflag;
+                       par->footnotekind = footnotekind;
+                       par->depth = depth;
+                       font = LyXFont(LyXFont::ALL_INHERIT);
+               } else if (token == "\\end_float") {
+                       if (!return_par) 
+                               return_par = par;
+                       else 
+                               par = new LyXParagraph(par);
+                       footnotekind = LyXParagraph::FOOTNOTE;
+                       footnoteflag = LyXParagraph::NO_FOOTNOTE;
+                       pos = 0;
+                       lex.EatLine();
+                       par->layout = LYX_DUMMY_LAYOUT;
+                       font = LyXFont(LyXFont::ALL_INHERIT);
+               } else if (token == "\\begin_float") {
+                       tmpret = lex.FindToken(string_footnotekinds);
+                       if (tmpret == -1) tmpret++;
+                       if (tmpret != LYX_LAYOUT_DEFAULT) 
+                               footnotekind = (LyXParagraph::footnote_kind)tmpret; // bad
+                       if (footnotekind == LyXParagraph::FOOTNOTE
+                           || footnotekind == LyXParagraph::MARGIN)
+                               footnoteflag = LyXParagraph::CLOSED_FOOTNOTE;
+                       else 
+                               footnoteflag = LyXParagraph::OPEN_FOOTNOTE;
+               } else if (token == "\\begin_deeper") {
+                       depth++;
+               } else if (token == "\\end_deeper") {
+                       if (!depth) {
+                               lex.printError("\\end_deeper: "
+                                              "depth is already null");
+                       }
+                       else
+                               depth--;
+               } else if (token == "\\begin_preamble") {
+                       params.readPreamble(lex);
+               } else if (token == "\\textclass") {
+                       lex.EatLine();
+                       params.textclass = lyxstyle.NumberOfClass(lex.GetString());
+                       if (params.textclass == -1) {
+                               lex.printError("Unknown textclass `$$Token'");
+                               params.textclass = 0;
+                       }
+                       if (!lyxstyle.Load(params.textclass)) {
+                               // if the textclass wasn't loaded properly
+                               // we need to either substitute another
+                               // or stop loading the file.
+                               // I can substitute but I don't see how I can
+                               // stop loading... ideas??  ARRae980418
+                               WriteAlert(_("Textclass Loading Error!"),
+                                          LString(_("Can't load textclass ")) +
+                                          lyxstyle.NameOfClass(params.textclass),
+                                          _("-- substituting default"));
+                               params.textclass = 0;
+                       }
+               } else if (token == "\\options") {
+                       lex.EatLine();
+                       params.options = lex.GetString();
+               } else if (token == "\\language") {
+                       params.readLanguage(lex);           
+               } else if (token == "\\fontencoding") {
+                       lex.EatLine();
+               } else if (token == "\\inputencoding") {
+                       lex.EatLine();
+                       params.inputenc = lex.GetString();
+               } else if (token == "\\graphics") {
+                       params.readGraphicsDriver(lex);
+               } else if (token == "\\fontscheme") {
+                       lex.EatLine();
+                       params.fonts = lex.GetString();
+               } else if (token == "\\noindent") {
+                       par->noindent = true;
+               } else if (token == "\\fill_top") {
+                       par->added_space_top = VSpace(VSpace::VFILL);
+               } else if (token == "\\fill_bottom") {
+                       par->added_space_bottom = VSpace(VSpace::VFILL);
+               } else if (token == "\\line_top") {
+                       par->line_top = true;
+               } else if (token == "\\line_bottom") {
+                       par->line_bottom = true;
+               } else if (token == "\\pagebreak_top") {
+                       par->pagebreak_top = true;
+               } else if (token == "\\pagebreak_bottom") {
+                       par->pagebreak_bottom = true;
+               } else if (token == "\\start_of_appendix") {
+                       par->start_of_appendix = true;
+               } else if (token == "\\paragraph_separation") {
+                       tmpret = lex.FindToken(string_paragraph_separation);
+                       if (tmpret == -1) tmpret++;
+                       if (tmpret != LYX_LAYOUT_DEFAULT) 
+                               params.paragraph_separation = tmpret;
+               } else if (token == "\\defskip") {
+                       lex.nextToken();
+                       params.defskip = VSpace(lex.GetString());
+               } else if (token == "\\no_isolatin1") {
+                       lex.nextToken();
+               } else if (token == "\\no_babel") {
+                       lex.nextToken();
+               } else if (token == "\\no_epsfig") {
+                       lex.nextToken();
+               } else if (token == "\\epsfig") { // obsolete
+                       // Indeed it is obsolete, but we HAVE to be backwards
+                       // compatible until 0.14, because otherwise all figures
+                       // in existing documents are irretrivably lost. (Asger)
+                       params.readGraphicsDriver(lex);
+               } else if (token == "\\quotes_language") {
+                       tmpret = lex.FindToken(string_quotes_language);
+                       if (tmpret == -1) tmpret++;
+                       if (tmpret != LYX_LAYOUT_DEFAULT) {
+                               InsetQuotes::quote_language tmpl =
+                                       InsetQuotes::EnglishQ;
+                               switch(tmpret) {
+                               case 0:
+                                       tmpl = InsetQuotes::EnglishQ;
+                                       break;
+                               case 1:
+                                       tmpl = InsetQuotes::SwedishQ;
+                                       break;
+                               case 2:
+                                       tmpl = InsetQuotes::GermanQ;
+                                       break;
+                               case 3:
+                                       tmpl = InsetQuotes::PolishQ;
+                                       break;
+                               case 4:
+                                       tmpl = InsetQuotes::FrenchQ;
+                                       break;
+                               case 5:
+                                       tmpl = InsetQuotes::DanishQ;
+                                       break;  
+                               }
+                               params.quotes_language = tmpl;
+                       }
+               } else if (token == "\\quotes_times") {
+                       lex.nextToken();
+                       switch(lex.GetInteger()) {
+                       case 1: 
+                               params.quotes_times = InsetQuotes::SingleQ; 
+                               break;
+                       case 2: 
+                               params.quotes_times = InsetQuotes::DoubleQ; 
+                               break;
+                       }
+                } else if (token == "\\papersize") {
+                        if (format > 2.13)
+                                tmpret = lex.FindToken(string_papersize);
+                        else
+                                tmpret = lex.FindToken(string_oldpapersize);
+                       if (tmpret == -1)
+                                tmpret++;
+                        else
+                                params.papersize2 = tmpret;
+                } else if (token == "\\paperpackage") {
+                       tmpret = lex.FindToken(string_paperpackages);
+                       if (tmpret == -1) {
+                                tmpret++;
+                                params.paperpackage = PACKAGE_NONE;
+                        } else
+                                params.paperpackage = tmpret;
+               } else if (token == "\\use_geometry") {
+                       lex.nextToken();
+                       params.use_geometry = lex.GetInteger();
+               } else if (token == "\\use_amsmath") {
+                       lex.nextToken();
+                       params.use_amsmath = lex.GetInteger();
+               } else if (token == "\\paperorientation") {
+                       tmpret = lex.FindToken(string_orientation);
+                       if (tmpret == -1) tmpret++;
+                       if (tmpret != LYX_LAYOUT_DEFAULT) 
+                               params.orientation = tmpret;
+               } else if (token == "\\paperwidth") {
+                       lex.next();
+                       params.paperwidth = lex.GetString();
+               } else if (token == "\\paperheight") {
+                       lex.next();
+                       params.paperheight = lex.GetString();
+               } else if (token == "\\leftmargin") {
+                       lex.next();
+                       params.leftmargin = lex.GetString();
+               } else if (token == "\\topmargin") {
+                       lex.next();
+                       params.topmargin = lex.GetString();
+               } else if (token == "\\rightmargin") {
+                       lex.next();
+                       params.rightmargin = lex.GetString();
+               } else if (token == "\\bottommargin") {
+                       lex.next();
+                       params.bottommargin = lex.GetString();
+               } else if (token == "\\headheight") {
+                       lex.next();
+                       params.headheight = lex.GetString();
+               } else if (token == "\\headsep") {
+                       lex.next();
+                       params.headsep = lex.GetString();
+               } else if (token == "\\footskip") {
+                       lex.next();
+                       params.footskip = lex.GetString();
+               } else if (token == "\\paperfontsize") {
+                       lex.nextToken();
+                       params.fontsize = lex.GetString();
+                       params.fontsize.strip();
+               } else if (token == "\\papercolumns") {
+                       lex.nextToken();
+                       params.columns = lex.GetInteger();
+               } else if (token == "\\papersides") {
+                       lex.nextToken();
+                       params.sides = lex.GetInteger();
+               } else if (token == "\\paperpagestyle") {
+                       lex.nextToken();
+                       params.pagestyle = lex.GetString();
+                       params.pagestyle.strip();
+               } else if (token == "\\bullet") {
+                       lex.nextToken();
+                       int index = lex.GetInteger();
+                       lex.nextToken();
+                       int temp_int = lex.GetInteger();
+                       params.user_defined_bullets[index].setFont(temp_int);
+                       params.temp_bullets[index].setFont(temp_int);
+                       lex.nextToken();
+                       temp_int = lex.GetInteger();
+                       params.user_defined_bullets[index].setCharacter(temp_int);
+                       params.temp_bullets[index].setCharacter(temp_int);
+                       lex.nextToken();
+                       temp_int = lex.GetInteger();
+                       params.user_defined_bullets[index].setSize(temp_int);
+                       params.temp_bullets[index].setSize(temp_int);
+                       lex.nextToken();
+                       LString temp_str = lex.GetString();
+                       if (temp_str != "\\end_bullet") {
+                               // this element isn't really necessary for
+                               // parsing but is easier for humans
+                               // to understand bullets. Put it back and
+                               // set a debug message?
+                               lex.printError("\\end_bullet expected, got" + temp_str);
+                               //how can I put it back?
+                       }
+               } else if (token == "\\bulletLaTeX") {
+                       lex.nextToken();
+                       int index = lex.GetInteger();
+                       lex.next();
+                       LString temp_str = lex.GetString(), sum_str;
+                       while (temp_str != "\\end_bullet") {
+                               // this loop structure is needed when user
+                               // enters an empty string since the first
+                               // thing returned will be the \\end_bullet
+                               // OR
+                               // if the LaTeX entry has spaces. Each element
+                               // therefore needs to be read in turn
+                               sum_str += temp_str;
+                               lex.next();
+                               temp_str = lex.GetString();
+                       }
+                       params.user_defined_bullets[index].setText(sum_str);
+                       params.temp_bullets[index].setText(sum_str);
+               } else if (token == "\\secnumdepth") {
+                       lex.nextToken();
+                       params.secnumdepth = lex.GetInteger();
+               } else if (token == "\\tocdepth") {
+                       lex.nextToken();
+                       params.tocdepth = lex.GetInteger();
+               } else if (token == "\\baselinestretch") { // now obsolete
+                       lex.nextToken(); // should not be used directly
+                       // anymore.
+                       // Will probably keep a kind of support just for
+                       // compability.
+                       params.spacing.set(Spacing::Other, lex.GetFloat());
+               } else if (token == "\\spacing") {
+                       lex.next();
+                       LString tmp = lex.GetString().strip();
+                       if (tmp == "single") {
+                               params.spacing.set(Spacing::Single);
+                       } else if (tmp == "onehalf") {
+                               params.spacing.set(Spacing::Onehalf);
+                       } else if (tmp == "double") {
+                               params.spacing.set(Spacing::Double);
+                       } else if (tmp == "other") {
+                               lex.next();
+                               params.spacing.set(Spacing::Other,
+                                                  lex.GetFloat());
+                       } else {
+                               lex.printError("Unknown spacing token: '$$Token'");
+                       }
+               } else if (token == "\\float_placement") {
+                       lex.nextToken();
+                       params.float_placement = lex.GetString();
+               } else if (token == "\\cursor") {
+                       // this is obsolete, so we just skip it.
+                       lex.nextToken();
+               } else if (token == "\\family") { 
+                       lex.next();
+                       font.setLyXFamily(lex.GetString());
+               } else if (token == "\\series") {
+                       lex.next();
+                       font.setLyXSeries(lex.GetString());
+               } else if (token == "\\shape") {
+                       lex.next();
+                       font.setLyXShape(lex.GetString());
+               } else if (token == "\\size") {
+                       lex.next();
+                       font.setLyXSize(lex.GetString());
+               } else if (token == "\\latex") {
+                       lex.next();
+                       LString tok = lex.GetString();
+                       // This is dirty, but gone with LyX3. (Asger)
+                       if (tok == "no_latex")
+                               font.setLatex(LyXFont::OFF);
+                       else if (tok == "latex")
+                               font.setLatex(LyXFont::ON);
+                       else if (tok == "default")
+                               font.setLatex(LyXFont::INHERIT);
+                       else
+                               lex.printError("Unknown LaTeX font flag "
+                                              "`$$Token'");
+               } else if (token == "\\emph") {
+                       lex.next();
+                       font.setEmph(font.setLyXMisc(lex.GetString()));
+               } else if (token == "\\bar") {
+                       lex.next();
+                       LString tok = lex.GetString();
+                       // This is dirty, but gone with LyX3. (Asger)
+                       if (tok == "under")
+                               font.setUnderbar(LyXFont::ON);
+                       else if (tok == "no")
+                               font.setUnderbar(LyXFont::OFF);
+                       else if (tok == "default")
+                               font.setUnderbar(LyXFont::INHERIT);
+                       else
+                               lex.printError("Unknown bar font flag "
+                                              "`$$Token'");
+               } else if (token == "\\noun") {
+                       lex.next();
+                       font.setNoun(font.setLyXMisc(lex.GetString()));
+               } else if (token == "\\color") {
+                       lex.next();
+                       font.setLyXColor(lex.GetString());
+               } else if (token == "\\align") {
+                       tmpret = lex.FindToken(string_align);
+                       if (tmpret == -1) tmpret++;
+                       if (tmpret != LYX_LAYOUT_DEFAULT) {
+                               tmpret2 = 1;
+                               for (; tmpret>0; tmpret--)
+                                       tmpret2 = tmpret2 * 2;
+                               par->align = tmpret2;
+                       }
+               } else if (token == "\\added_space_top"){
+                       lex.nextToken();
+                       par->added_space_top = lex.GetString();
+               } else if (token == "\\added_space_bottom") {
+                       lex.nextToken();
+                       par->added_space_bottom = lex.GetString();
+                } else if (token == "\\pextra_type") {
+                        lex.nextToken();
+                        par->pextra_type = lex.GetInteger();
+                } else if (token == "\\pextra_width") {
+                        lex.nextToken();
+                       par->pextra_width = lex.GetString();
+                } else if (token == "\\pextra_widthp") {
+                        lex.nextToken();
+                       par->pextra_widthp = lex.GetString();
+                } else if (token == "\\pextra_alignment") {
+                        lex.nextToken();
+                        par->pextra_alignment = lex.GetInteger();
+                } else if (token == "\\pextra_hfill") {
+                        lex.nextToken();
+                        par->pextra_hfill = lex.GetInteger();
+                } else if (token == "\\pextra_start_minipage") {
+                        lex.nextToken();
+                        par->pextra_start_minipage = lex.GetInteger();
+               } else if (token == "\\labelwidthstring") {
+                       lex.EatLine();
+                       par->labelwidthstring = lex.GetString();
+                       /* do not delete this token, it is still needed! */ 
+               } else if (token == "\\end_inset") {
+                       /* simple ignore this. The insets do not have
+                        *  to read this */
+                       // but insets should read it, it is a part of
+                       //the inset isn't it? Lgb.
+               } else if (token == "\\begin_inset") {
+                       lex.next();
+                       tmptok = lex.GetString();
+                       /* test the different insets */ 
+                       if (tmptok == "Quotes") {
+                               inset = new InsetQuotes;
+                               inset->Read(lex);
+                               par->InsertChar(pos, LYX_META_INSET); 
+                               par->InsertInset(pos, inset);
+                               par->SetFont(pos, font);
+                               pos++;
+                       } else if (tmptok == "Latex") {
+                               // This one is on its way out
+                               lex.EatLine();
+                               tmptok = lex.GetString().strip();
+                               //lyxerr.print(LString(tmptok[0]));
+                               if (tmptok[0] == '\\') {
+                                       // then this latex is a
+                                       // latex command
+                                       InsetCommand *tmpinset =
+                                               new InsetCommand();
+                                       tmpinset->scanCommand(tmptok);
+                                       inset = tmpinset;
+                               } else {
+                                       // This should not use InsetLaTexDel
+                                       // it should rather insert text into
+                                       // the paragraph and mark it as tex.
+                                       inset = new InsetLatex(tmptok);
+                               }
+                               par->InsertChar(pos, LYX_META_INSET); 
+                               par->InsertInset(pos, inset);
+                               par->SetFont(pos, font);
+                               pos++;
+                       } else if (tmptok == "LatexDel") {
+                               // This one is on its way out...
+                               lex.EatLine();
+                               tmptok = lex.GetString().strip();
+                               //lyxerr.print(LString(tmptok[0]));
+                               if (tmptok == "\\tableofcontents") {
+                                       inset = new InsetTOC(this);
+                               } else if (tmptok == "\\listoffigures") {
+                                       inset = new InsetLOF(this);
+                               } else if (tmptok == "\\listoftables") {
+                                       inset = new InsetLOT(this);
+                               } else if (tmptok == "\\listofalgorithms") {
+                                       inset = new InsetLOA(this);
+                               } else if (tmptok.contains("\\ref{")
+                                          || tmptok.contains("\\pageref{")) {
+                                       inset = new InsetRef(tmptok, this);
+                               } else if (tmptok.contains("\\url{")
+                                          || tmptok.contains("\\htmlurl{")) {
+                                       LString cont,opt,tmptmptok,cmdname;
+                                       lex.next();
+                                       while(lex.IsOK() && lex.GetString() != "\\end_inset" ) {
+                                               lex.next();
+                                       }
+                                       lex.next();
+                                       while(lex.IsOK()) {
+                                               tmptmptok=lex.GetString();
+                                               if(tmptmptok[0] == '\\') {
+                                                       if( tmptmptok == "\\backslash")
+                                                               opt += '\\';
+                                                       else
+                                                               break;
+                                               }
+                                               else
+                                                       opt += tmptmptok;
+                                               opt += ' ';
+                                               lex.next();
+                                       }
+                                       while(lex.IsOK() && lex.GetString() != "\\end_inset" ) {
+                                               lex.next();
+                                       }
+                                       lex.next();
+                                       while(lex.IsOK()) {
+                                               tmptmptok=lex.GetString();
+                                               if(tmptmptok[0] == '\\') {
+                                                       if( tmptmptok == "\\backslash")
+                                                               cont += '\\';
+                                                       else
+                                                               break;
+                                               }
+                                               else
+                                                       cont += tmptmptok;
+                                               cont += ' ';
+                                               lex.next();
+                                       }
+                                       while(lex.IsOK() && lex.GetString() != "\\end_inset" ) {
+                                               lex.next();
+                                       }
+                                       if(tmptok.contains("\\url{"))
+                                               cmdname = LString("url");
+                                       else
+                                               cmdname = LString("htmlurl");
+                                       cont.strip();
+                                       opt.strip();
+                                       inset = new InsetUrl(cmdname,cont,opt);
+                               } else if (tmptok[0] == '\\') {
+                                       // then this latex del is a
+                                       // latex command
+                                       InsetCommand *tmpinset =
+                                               new InsetCommand();
+                                       tmpinset->scanCommand(tmptok);
+                                       inset = tmpinset;
+                               } 
+                               par->InsertChar(pos, LYX_META_INSET); 
+                               par->InsertInset(pos, inset);
+                               par->SetFont(pos, font);
+                               pos++;
+                       } else if (tmptok == "\\i") {
+                               inset = new InsetLatexAccent;
+                               inset->Read(lex);
+                               par->InsertChar(pos, LYX_META_INSET); 
+                               par->InsertInset(pos, inset);
+                               par->SetFont(pos, font);
+                               pos++;
+                       } else if (tmptok == "FormulaMacro") {
+                               inset = new InsetFormulaMacro;
+                               inset->Read(lex);
+                               par->InsertChar(pos, LYX_META_INSET); 
+                               par->InsertInset(pos, inset);
+                               par->SetFont(pos, font);
+                               pos++;
+                       } else if (tmptok == "Formula") {
+                               inset = new InsetFormula;
+                               inset->Read(lex);
+                               par->InsertChar(pos, LYX_META_INSET); 
+                               par->InsertInset(pos, inset);
+                               par->SetFont(pos, font);
+                               pos++;
+                       } else if (tmptok == "Figure") {
+                               inset = new InsetFig(100,100, this);
+                               inset->Read(lex);
+                               par->InsertChar(pos, LYX_META_INSET); 
+                               par->InsertInset(pos, inset);
+                               par->SetFont(pos, font);
+                               pos++;
+                       } else if (tmptok == "Label") {
+                               // Kept for compability. Remove in 0.13.
+                               if (lex.EatLine()) {
+                                       LString tmp;
+                                       tmp += "\\label{";
+                                       tmp += lex.GetString();
+                                       tmp += '}';
+                                       inset = new InsetLabel(tmp);
+                                       par->InsertChar(pos, LYX_META_INSET); 
+                                       par->InsertInset(pos, inset);
+                                       par->SetFont(pos, font);
+                                       pos++;
+                               }
+                       } else if (tmptok == "Info") {
+                               inset = new InsetInfo;
+                               inset->Read(lex);
+                               par->InsertChar(pos, LYX_META_INSET); 
+                               par->InsertInset(pos, inset);
+                               par->SetFont(pos, font);
+                               pos++;
+                       } else if (tmptok == "Include") {
+                               inset = new InsetInclude(LString(), this);
+                               inset->Read(lex);
+                               par->InsertChar(pos, LYX_META_INSET); 
+                               par->InsertInset(pos, inset);
+                               par->SetFont(pos, font);
+                               pos++;
+                       } else if (tmptok == "LatexCommand") {
+                               InsetCommand inscmd;
+                               inscmd.Read(lex);
+                               if (inscmd.getCmdName()=="cite") {
+                                       inset = new InsetCitation(inscmd.getContents(), inscmd.getOptions());
+                               } else if (inscmd.getCmdName()=="bibitem") {
+                                       lex.printError("Wrong place for bibitem");
+                                       inset = inscmd.Clone();
+                               } else if (inscmd.getCmdName()=="BibTeX") {
+                                       inset = new InsetBibtex(inscmd.getContents(), inscmd.getOptions(), this);
+                               } else if (inscmd.getCmdName()=="index") {
+                                       inset = new InsetIndex(inscmd.getContents());
+                               } else if (inscmd.getCmdName()=="include") {
+                                       inset = new InsetInclude(inscmd.getContents(), this);
+                               } else if (inscmd.getCmdName()=="label") {
+                                       inset = new InsetLabel(inscmd.getCommand());
+                               } else if (inscmd.getCmdName()=="url"
+                                          || inscmd.getCmdName()=="htmlurl") {
+                                       inset = new InsetUrl(inscmd.getCommand());
+                               } else if (inscmd.getCmdName() == "ref"
+                                          || inscmd.getCmdName() == "pageref") {
+                                       if (!inscmd.getOptions().empty() || !inscmd.getContents().empty()) {
+                                               inset = new InsetRef(inscmd, this);
+                                       }
+                                       /* This condition comes from a temporary solution
+                                          to the latexdel ref inset that was transformed to an empty ref
+                                          inset plus the body surronded by latexdel insets */
+                                       else {
+                                               LString cont,opt,tmptmptok,cmdname;
+                                               lex.next();
+                                               while(lex.IsOK() && lex.GetString() != "\\end_inset" ) {
+                                                       lex.next();
+                                               }
+                                               lex.next();
+                                               while(lex.IsOK()) {
+                                                       tmptmptok=lex.GetString();
+                                                       if(tmptmptok[0] == '\\') {
+                                                               if( tmptmptok == "\\backslash")
+                                                                       opt += '\\';
+                                                               else
+                                                                       break;
+                                                       }
+                                                       else
+                                                               opt += tmptmptok;
+                                                       opt += ' ';
+                                                       lex.next();
+                                               }
+                                               while(lex.IsOK() && lex.GetString() != "\\end_inset" ) {
+                                                       lex.next();
+                                               }
+                                               lex.next();
+                                               while(lex.IsOK()) {
+                                                       tmptmptok=lex.GetString();
+                                                       if(tmptmptok[0] == '\\') {
+                                                               if( tmptmptok == "\\backslash")
+                                                                       cont += '\\';
+                                                               else
+                                                                       break;
+                                                       }
+                                                       else
+                                                               cont += tmptmptok;
+                                                       cont += ' ';
+                                                       lex.next();
+                                               }
+                                               while(lex.IsOK() && lex.GetString() != "\\end_inset" ) {
+                                                       lex.next();
+                                               }
+
+                                               cont.strip();
+                                               opt.strip();
+                                               cmdname =  "\\" + inscmd.getCmdName();
+                                               cmdname += "["  + cont  + "]";
+                                               cmdname += "{"  + opt + "}";
+                                               inset = new InsetRef(cmdname,this);
+                                       }
+                               } else if (inscmd.getCmdName()=="tableofcontents") {
+                                       inset = new InsetTOC(this);
+                               } else if (inscmd.getCmdName()=="listoffigures") {
+                                       inset = new InsetLOF(this);
+                               } else if (inscmd.getCmdName()=="listofalgorithms") {
+                                       inset = new InsetLOA(this);
+                               } else if (inscmd.getCmdName()=="listoftables") {
+                                       inset = new InsetLOT(this);
+                               } else if (inscmd.getCmdName()=="printindex") {
+                                       inset = new InsetPrintIndex(this);
+                               } else if (inscmd.getCmdName()=="lyxparent") {
+                                       inset = new InsetParent(inscmd.getContents(),this);
+                               } else 
+                                       // The following three are only for compatibility
+                                       if (inscmd.getCmdName()=="-") {
+                                               inset = new InsetSpecialChar(InsetSpecialChar::HYPHENATION);
+                                       } else if (inscmd.getCmdName()=="@.") {
+                                               inset = new InsetSpecialChar(InsetSpecialChar::END_OF_SENTENCE);
+                                       } else if (inscmd.getCmdName()=="ldots") {
+                                               inset = new InsetSpecialChar(InsetSpecialChar::LDOTS);
+                                       } else
+                                               inset = inscmd.Clone();
+                              
+                               if (inset) {
+                                       par->InsertChar(pos, LYX_META_INSET);
+                                       par->InsertInset(pos, inset);
+                                       par->SetFont(pos, font);
+                                       pos++;
+                               }
+                       }
+               } else if (token == "\\InsetQuotes") {
+                       inset = new InsetQuotes;
+                       inset->Read(lex);
+                       par->InsertChar(pos, LYX_META_INSET); 
+                       par->InsertInset(pos, inset);
+                       par->SetFont(pos, font);
+                       pos++;
+               } else if (token == "\\InsetLatex") {
+                       inset = new InsetLatex;
+                       inset->Read(lex);
+                       par->InsertChar(pos, LYX_META_INSET); 
+                       par->InsertInset(pos, inset);
+                       par->SetFont(pos, font);
+                       pos++;
+               } else if (token == "\\InsetLatexDel") {
+                       lex.printError(_("Warning: Ignoring Old Inset"));
+               } else if (token == "\\InsetFormula") {
+                       inset = new InsetFormula;
+                       inset->Read(lex);
+                       par->InsertChar(pos, LYX_META_INSET); 
+                       par->InsertInset(pos, inset);
+                       par->SetFont(pos, font);
+                       pos++;
+               } else if (token == "\\SpecialChar") {
+                       inset = new InsetSpecialChar;
+                       inset->Read(lex);
+                       par->InsertChar(pos, LYX_META_INSET); 
+                       par->InsertInset(pos, inset);
+                       par->SetFont(pos, font);
+                       pos++;
+               } else if (token == "\\Figure") {
+                       inset = new InsetFig(100,100, this);
+                       inset->Read(lex);
+                       par->InsertChar(pos, LYX_META_INSET); 
+                       par->InsertInset(pos, inset);
+                       par->SetFont(pos, font);
+                       pos++;
+               } else if (token == "\\newline") {
+                       par->InsertChar(pos, LYX_META_NEWLINE);
+                       par->SetFont(pos, font);
+                       pos++;
+               } else if (token == "\\LyXTable") {
+                       par->table = new LyXTable(lex);
+               } else if (token == "\\hfill") {
+                       par->InsertChar(pos, LYX_META_HFILL);
+                       par->SetFont(pos, font);
+                       pos++;
+               } else if (token == "\\protected_separator") {
+                       par->InsertChar(pos, LYX_META_PROTECTED_SEPARATOR);
+                       par->SetFont(pos, font);
+                       pos++;
+               } else if (token == "\\bibitem") {  // ale970302
+                       if (!par->bibkey)
+                               par->bibkey = new InsetBibKey;
+                       par->bibkey->Read(lex);                 
+               }else if (token == "\\backslash") {
+                       par->InsertChar(pos, '\\');
+                       par->SetFont(pos, font);
+                       pos++;
+               }else if (token == "\\the_end") {
+                       the_end_read = true;
+               } else {
+                       // This should be insurance for the future: (Asger)
+                       lex.printError("Unknown token `$$Token'. "
+                                      "Inserting as text.");
+                       int n = token.length();
+                       for (int i=0; i < n; i++) {
+                               par->InsertChar(pos, token[i]);
+                               par->SetFont(pos, font);
+                               pos++;
+                       }
+               }
+       }
+   
+       if (!return_par)
+               return_par = par;
+
+       paragraph = return_par;
+       
+       return the_end_read;
+}
+
+
+bool Buffer::readFile(LyXLex &lex, LyXParagraph *par)
+{
+       LString token;
+
+       if (lex.IsOK()) {
+               lex.next();
+               token = lex.GetString();
+               if (token == "\\lyxformat") { // the first token _must_ be...
+                       lex.next();
+                       format = lex.GetFloat();
+                       if (format > 1) {
+                               if (LYX_FORMAT - format > 0.05) {
+                                       printf(_("Warning: need lyxformat %.2f but found %.2f\n"),
+                                              LYX_FORMAT, format);
+                               }
+                               if (format - LYX_FORMAT > 0.05) {
+                                       printf(_("ERROR: need lyxformat %.2f but found %.2f\n"),
+                                              LYX_FORMAT, format);
+                               }
+                               bool the_end = readLyXformat2(lex, par);
+                               // Formats >= 2.13 support "\the_end" marker
+                               if (format < 2.13)
+                                       the_end = true;
+                                // Formats >= 2.14 changed papersize stuff
+                                if (format < 2.14) {
+                                        setOldPaperStuff();
+                                } else {
+                                        setPaperStuff();
+                                }
+                               if (!the_end)
+                                       WriteAlert(_("Warning!"),
+                                                  _("Reading of document is not complete"),
+                                                  _("Maybe the document is truncated"));
+                               // We simulate a safe reading anyways to allow
+                               // users to take the chance... (Asger)
+                               return true;
+                       } // format < 1
+                       else {
+                               WriteAlert(_("ERROR!"),
+                                          _("Old LyX file format found. "
+                                            "Use LyX 0.10.x to read this!"));
+                               return false;
+                       }
+
+               } else { // "\\lyxformat" not found
+                       WriteAlert(_("ERROR!"), _("Not a LyX file!"));
+               }
+       } else
+               WriteAlert(_("ERROR!"), _("Unable to read file!"));
+       return false;
+}
+                   
+
+// Returns false if unsuccesful
+bool Buffer::writeFile(LString const & filename, bool flag)
+{
+       // if flag is false writeFile will not create any GUI
+       // warnings, only stderr.
+       // Needed for autosave in background or panic save (Matthias 120496)
+
+       if (read_only && (filename == this->filename)) {
+               // Here we should come with a question if we should
+               // perform the write anyway.
+               if (flag)
+                       lyxerr.print(_("Error! Document is read-only: ") + filename);
+               else
+                       WriteAlert(_("Error! Document is read-only: "), filename);
+               return false;
+       }
+
+       FileInfo finfo(filename);
+       if (finfo.exist() && !finfo.writable()) {
+               // Here we should come with a question if we should
+               // try to do the save anyway. (i.e. do a chmod first)
+               if (flag)
+                       lyxerr.print(_("Error! Cannot write file: ") + filename);
+               else
+                       WriteFSAlert(_("Error! Cannot write file: "), filename);
+               return false;
+       }
+
+       FilePtr file(filename, FilePtr::truncate);
+       if (!file()) {
+               if (flag)
+                       lyxerr.print(_("Error! Cannot write file: ") + filename);
+               else
+                       WriteFSAlert(_("Error! Cannot write file: "), filename);
+               return false;
+       }
+       // The top of the file should not be written by params.
+       // collect some very important information
+       LString userName(getUserName()) ;
+
+       // write out a comment in the top of the file
+       fprintf(file,
+               "#This file was created by <%s> %s",
+               userName.c_str(),(char*)date());
+       fprintf(file,
+               "#LyX 1.0 (C) 1995-1999 Matthias Ettrich"
+               " and the LyX Team\n");
+       
+       // at the very beginning the used lyx format
+       fprintf(file, "\\lyxformat %.2f\n", LYX_FORMAT);
+
+       // now write out the buffer parameters.
+       params.writeFile(file);
+
+       char footnoteflag = 0;
+       char depth = 0;
+
+       // this will write out all the paragraphs
+       // using recursive descent.
+       paragraph->writeFile(file, params, footnoteflag, depth);
+
+       // Write marker that shows file is complete
+       fprintf(file, "\n\\the_end\n");
+       if (file.close()) {
+               if (flag)
+                       lyxerr.print(_("Error! Could not close file properly: ")
+                                    +  filename);
+               else
+                       WriteFSAlert(_("Error! Could not close file properly: "),
+                                    filename);
+               return false;
+       }
+       return true;
+}
+
+
+void Buffer::writeFileAscii(LString const & filename, int linelen) 
+{
+       FilePtr file(filename, FilePtr::write);
+       LyXFont
+               font1, font2;
+       Inset
+               *inset;
+       LyXParagraph
+               *par = paragraph;
+       char
+               c,
+               footnoteflag = 0,
+               depth = 0;
+
+       LString
+               fname1,
+               tmp;
+       
+       int
+               i,j,h,
+               ltype=0,
+               ltype_depth=0,
+               noparbreak=0,
+               islatex=0,
+               *clen=NULL,
+               actcell=0,
+               actpos=0,
+               cell=0,
+               cells=0,
+               currlinelen=0;
+       long
+               fpos=0;
+       bool
+               ref_printed = false;
+   
+   
+       if (!file()) {
+               WriteFSAlert(_("Error: Cannot write file:"), filename);
+               return;
+       }
+       fname1=TmpFileName();
+       while (par) {
+               noparbreak = 0;
+               islatex = 0;
+               if (par->footnoteflag != LyXParagraph::NO_FOOTNOTE ||
+                   !par->previous ||
+                   par->previous->footnoteflag == LyXParagraph::NO_FOOTNOTE){
+        
+                       /* begins a footnote environment ? */ 
+                       if (footnoteflag != par->footnoteflag) {
+                               footnoteflag = par->footnoteflag;
+                               if (footnoteflag) {
+                                       j=strlen(string_footnotekinds[par->footnotekind])+4;
+                                       if (currlinelen+j > linelen)
+                                               fprintf(file,"\n");
+                                       fprintf(file, "([%s] ", 
+                                               string_footnotekinds[par->footnotekind]);
+                                       currlinelen += j;
+                               }
+                       }
+        
+                       /* begins or ends a deeper area ?*/ 
+                       if (depth != par->depth) {
+                               if (par->depth > depth) {
+                                       while (par->depth > depth) {
+                                               depth++;
+                                       }
+                               }
+                               else {
+                                       while (par->depth < depth) {
+                                               depth--;
+                                       }
+                               }
+                       }
+        
+                       /* First write the layout */
+                       tmp = lyxstyle.NameOfLayout(params.textclass,par->layout);
+                       if (tmp == "Itemize") {
+                               ltype = 1;
+                               ltype_depth = depth+1;
+                       } else if (tmp =="Enumerate") {
+                               ltype = 2;
+                               ltype_depth = depth+1;
+                       } else if (strstr(tmp.c_str(),"ection")) {
+                               ltype = 3;
+                               ltype_depth = depth+1;
+                       } else if (strstr(tmp.c_str(),"aragraph")) {
+                               ltype = 4;
+                               ltype_depth = depth+1;
+                       } else if (tmp == "Description") {
+                               ltype = 5;
+                               ltype_depth = depth+1;
+                       } else if (tmp == "Abstract") {
+                               ltype = 6;
+                               ltype_depth = 0;
+                       } else if (tmp == "Bibliography") {
+                               ltype = 7;
+                               ltype_depth = 0;
+                       } else {
+                               ltype = 0;
+                               ltype_depth = 0;
+                       }
+        
+                       /* maybe some vertical spaces */ 
+
+                       /* the labelwidthstring used in lists */ 
+        
+                       /* some lines? */ 
+        
+                       /* some pagebreaks? */ 
+        
+                       /* noindent ? */ 
+        
+                       /* what about the alignment */ 
+               }
+               else {
+                       /* dummy layout, that means a footnote ended */ 
+                       footnoteflag = LyXParagraph::NO_FOOTNOTE;
+                       fprintf(file, ") ");
+                       noparbreak = 1;
+               }
+      
+               /* It might be a table */ 
+               if (par->table){
+                       if (!lyxrc->ascii_roff_command.empty() &&
+                            lyxrc->ascii_roff_command != "none") {
+                               RoffAsciiTable(file,par);
+                               par = par->next;
+                               continue;
+                       }
+                       cell = 1;
+                        actcell = 0;
+                       cells = par->table->columns;
+                       clen = new int [cells];
+                       memset(clen,0,sizeof(int)*cells);
+                       for (i = 0, j = 0, h=1; i < par->last; i++, h++) {
+                               c = par->GetChar(i);
+                               if (c == LYX_META_INSET) {
+                                       if ((inset = par->GetInset(i))) {
+                                               FilePtr fp(fname1,
+                                                          FilePtr::write);
+                                               if (!fp()) {
+                                                       WriteFSAlert(_("Error: Cannot open temporary file:"), fname1);
+                                                       return;
+                                               }
+                                               inset->Latex(fp,-1);
+                                               h += ftell(fp) - 1;
+                                               remove(fname1.c_str());
+                                       }
+                               } else if (c == LYX_META_NEWLINE) {
+                                       if (clen[j] < h)
+                                               clen[j] = h;
+                                       h = 0;
+                                       j = (++j) % par->table->NumberOfCellsInRow(actcell);
+                                        actcell++;
+                               }
+                       }
+                       if (clen[j] < h)
+                               clen[j] = h;
+               }
+      
+               font1 = LyXFont(LyXFont::ALL_INHERIT);
+                actcell=0;
+               for (i = 0,actpos=1; i < par->last; i++, actpos++) {
+                       if (!i && !footnoteflag && !noparbreak){
+                               fprintf(file, "\n\n");
+                               for(j=0; j<depth; j++)
+                                       fprintf(file, "  ");
+                               currlinelen = depth*2;
+                               switch(ltype) {
+                               case 0: /* Standart */
+                               case 4: /* (Sub)Paragraph */
+                                case 5: /* Description */
+                                       break;
+                               case 6: /* Abstract */
+                                       fprintf(file, "Abstract\n\n");
+                                       break;
+                               case 7: /* Bibliography */
+                                       if (!ref_printed) {
+                                               fprintf(file, "References\n\n");
+                                               ref_printed = true;
+                                       }
+                                       break;
+                               default:
+                                       fprintf(file,"%s ",par->labelstring.c_str());
+                                       break;
+                               }
+                               if (ltype_depth > depth) {
+                                       for(j=ltype_depth-1; j>depth; j--)
+                                               fprintf(file, "  ");
+                                       currlinelen += (ltype_depth-depth)*2;
+                               }
+                               if (par->table) {
+                                       for(j=0;j<cells;j++) {
+                                               fputc('+',file);
+                                               for(h=0; h<(clen[j]+1); h++)
+                                                       fputc('-',file);
+                                       }
+                                       fprintf(file,"+\n");
+                                       for(j=0; j<depth; j++)
+                                               fprintf(file, "  ");
+                                       currlinelen = depth*2;
+                                       if (ltype_depth > depth) {
+                                               for(j=ltype_depth; j>depth; j--)
+                                                       fprintf(file, "  ");
+                                               currlinelen += (ltype_depth-depth)*2;
+                                       }
+                                       fprintf(file,"| ");
+                               }
+                       }
+                       font2 = par->GetFontSettings(i);
+                       if (font1.latex() != font2.latex()) {
+                               if (font2.latex() == LyXFont::OFF)
+                                       islatex = 0;
+                               else
+                                       islatex = 1;
+                       }
+                       else {
+                               islatex = 0;
+                       }
+                       c = par->GetChar(i);
+                       if (islatex)
+                               continue;
+                       switch (c) {
+                       case LYX_META_INSET:
+                               if ((inset = par->GetInset(i))) {
+                                       fpos = ftell(file);
+                                       inset->Latex(file,-1);
+                                       currlinelen += (ftell(file) - fpos);
+                                       actpos += (ftell(file) - fpos) - 1;
+                               }
+                               break;
+                       case LYX_META_NEWLINE:
+                               if (par->table) {
+                                       if (par->table->NumberOfCellsInRow(actcell) <= cell) {
+                                               for(j=actpos;j<clen[cell-1];j++)
+                                                       fputc(' ',file);
+                                               fprintf(file," |\n");
+                                               for(j=0; j<depth; j++)
+                                                       fprintf(file, "  ");
+                                               currlinelen = depth*2;
+                                               if (ltype_depth > depth) {
+                                                       for(j=ltype_depth; j>depth; j--)
+                                                               fprintf(file, "  ");
+                                                       currlinelen += (ltype_depth-depth)*2;
+                                               }
+                                               for(j=0;j<cells;j++) {
+                                                       fputc('+',file);
+                                                       for(h=0; h<(clen[j]+1); h++)
+                                                               fputc('-',file);
+                                               }
+                                               fprintf(file,"+\n");
+                                               for(j=0; j<depth; j++)
+                                                       fprintf(file, "  ");
+                                               currlinelen = depth*2;
+                                               if (ltype_depth > depth) {
+                                                       for(j=ltype_depth; j>depth; j--)
+                                                               fprintf(file, "  ");
+                                                       currlinelen += (ltype_depth-depth)*2;
+                                               }
+                                               fprintf(file,"| ");
+                                               cell = 1;
+                                       } else {
+                                               for(j=actpos; j<clen[cell-1]; j++)
+                                                       fputc(' ',file);
+                                               fprintf(file, " | ");
+                                               cell++;
+                                       }
+                                        actcell++;
+                                       currlinelen = actpos = 0;
+                               } else {
+                                       fprintf(file, "\n");
+                                       for(j=0; j<depth; j++)
+                                               fprintf(file, "  ");
+                                       currlinelen = depth*2;
+                                       if (ltype_depth > depth) {
+                                               for(j=ltype_depth; j>depth; j--)
+                                                       fprintf(file, "  ");
+                                               currlinelen += (ltype_depth-depth)*2;
+                                       }
+                               }
+                               break;
+                       case LYX_META_HFILL: 
+                               fprintf(file, "\t");
+                               break;
+                       case LYX_META_PROTECTED_SEPARATOR:
+                               fprintf(file, " ");
+                               break;
+                       case '\\': 
+                               fprintf(file, "\\");
+                               break;
+                       default:
+                               if (currlinelen > (linelen-10) \
+                                    && c==' ' && (i+2 < par->last)) {
+                                       fprintf(file, "\n");
+                                       for(j=0; j<depth; j++)
+                                               fprintf(file, "  ");
+                                       currlinelen = depth*2;
+                                       if (ltype_depth > depth) {
+                                               for(j=ltype_depth; j>depth; j--)
+                                                       fprintf(file, "  ");
+                                               currlinelen += (ltype_depth-depth)*2;
+                                       }
+                               } else if (c != '\0')
+                                       fprintf(file, "%c", c);
+                               else if (c == '\0')
+                                       lyxerr.debug("writeAsciiFile: NULL char in structure.");
+                               currlinelen++;
+                               break;
+                       }
+               }
+               if (par->table) {
+                       for(j=actpos;j<clen[cell-1];j++)
+                               fputc(' ',file);
+                       fprintf(file," |\n");
+                       for(j=0; j<depth; j++)
+                               fprintf(file, "  ");
+                       currlinelen = depth*2;
+                       if (ltype_depth > depth) {
+                               for(j=ltype_depth; j>depth; j--)
+                                       fprintf(file, "  ");
+                               currlinelen += (ltype_depth-depth)*2;
+                       }
+                       for(j=0;j<cells;j++) {
+                               fputc('+',file);
+                               for(h=0; h<(clen[j]+1); h++)
+                                       fputc('-',file);
+                       }
+                       fprintf(file,"+\n");
+                       delete [] clen;    
+               }      
+               par = par->next;
+       }
+   
+       fprintf(file, "\n");
+}
+
+
+void Buffer::makeLaTeXFile(LString const & filename, 
+                          LString const & original_path,
+                          bool nice, bool only_body)
+{
+       lyxerr.debug("makeLaTeXFile...", Error::LATEX);
+       params.textclass = GetCurrentTextClass();
+       niceFile = nice; // this will be used by Insetincludes.
+
+       tex_code_break_column = lyxrc->ascii_linelen;
+
+        LyXTextClass *tclass = lyxstyle.TextClass(params.textclass);
+  
+       FilePtr file(filename, FilePtr::write);
+       if (!file()) {
+               WriteFSAlert(_("Error: Cannot write file:"),filename);
+               return;
+       }
+
+       // validate the buffer.
+       lyxerr.debug("  Validating buffer...", Error::LATEX);
+       LaTeXFeatures features(tclass->number_of_defined_layouts);
+       validate(features);
+       lyxerr.debug("  Buffer validation done.", Error::LATEX);
+       
+       texrow.reset();
+       // The starting paragraph of the coming rows is the 
+       // first paragraph of the document. (Asger)
+       texrow.start(paragraph, 0);
+
+       LString userName(getUserName());
+       LString LFile;
+       
+       if (!only_body && nice) {
+               LFile += "%% This LaTeX-file was created by <";
+               LFile += userName + "> " + (char*)date();
+               LFile += "%% LyX 1.0 (C) 1995-1999 by Matthias Ettrich and the LyX Team\n";
+               LFile += "\n%% Do not edit this file unless you know what you are doing.\n";
+               texrow.newline();
+               texrow.newline();
+               texrow.newline();
+               texrow.newline();
+       }
+       lyxerr.debug("lyx header finished");
+       // There are a few differences between nice LaTeX and usual files:
+       // usual is \batchmode, uses \listfiles and has a 
+       // special input@path to allow the including of figures
+       // with either \input or \includegraphics (what figinsets do).
+       // batchmode is not set if there is a tex_code_break_column.
+       // In this case somebody is interested in the generated LaTeX,
+       // so this is OK. input@path is set when the actual parameter
+       // original_path is set. This is done for usual tex-file, but not
+       // for nice-latex-file. (Matthias 250696)
+       if (!only_body) {
+               if (!nice){
+                       // code for usual, NOT nice-latex-file
+                       LFile += "\\batchmode\n"; // changed
+                       // from \nonstopmode
+                       texrow.newline();
+                       // We don't need listfiles anymore
+                       //LFile += "\\listfiles\n";
+                       //texrow.newline();
+               }
+               if (!original_path.empty()) {
+                       LFile += "\\makeatletter\n";
+                       texrow.newline();
+                       LFile += "\\def\\input@path{{" + original_path
+                                + "/}}\n";
+                       texrow.newline();
+                       LFile += "\\makeatother\n";
+                       texrow.newline();
+               }
+               
+               LFile += "\\documentclass";
+               
+               LString options; // the document class options.
+               
+               if (tclass->opt_fontsize.tokenPos('|',params.fontsize) >= 0) {
+                       // only write if existing in list (and not default)
+                       options += params.fontsize;
+                       options += "pt,";
+               }
+               
+               
+               if (!params.use_geometry &&
+                   (params.paperpackage == PACKAGE_NONE)) {
+                       switch (params.papersize) {
+                       case PAPER_A4PAPER:
+                               options += "a4paper,";
+                               break;
+                       case PAPER_USLETTER:
+                               options += "letterpaper,";
+                               break;
+                       case PAPER_A5PAPER:
+                               options += "a5paper,";
+                               break;
+                       case PAPER_B5PAPER:
+                               options += "b5paper,";
+                               break;
+                       case PAPER_EXECUTIVEPAPER:
+                               options += "executivepaper,";
+                               break;
+                       case PAPER_LEGALPAPER:
+                               options += "legalpaper,";
+                               break;
+                       }
+               }
+
+               // if needed
+               if (params.sides != tclass->sides) {
+                       if (params.sides == 2)
+                               options += "twoside,";
+                       else
+                               options += "oneside,";
+               }
+
+               // if needed
+               if (params.columns != tclass->columns) {
+                       if (params.columns == 2)
+                               options += "twocolumn,";
+                       else
+                               options += "onecolumn,";
+               }
+
+               if (!params.use_geometry && params.orientation == ORIENTATION_LANDSCAPE)
+                       options += "landscape,";
+               
+               // language should be a parameter to \documentclass
+               if (params.language != "default") {
+                       options += params.language + ',';
+               }
+               
+               // the user-defined options
+               if (!params.options.empty()) {
+                       options += params.options + ',';
+               }
+               
+               if (!options.empty()){
+                       options.strip(',');
+                       LFile += '[';
+                       LFile += options;
+                       LFile += ']';
+               }
+               
+               LFile += '{';
+               LFile += lyxstyle.LatexnameOfClass(params.textclass);
+               LFile += "}\n";
+               texrow.newline();
+               // end of \documentclass defs
+               
+               // font selection must be done before loading fontenc.sty
+               if (params.fonts != "default") {
+                       LFile += "\\usepackage{" + params.fonts + "}\n";
+                       texrow.newline();
+               }
+               // this one is not per buffer
+               if (lyxrc->fontenc != "default") {
+                       LFile += "\\usepackage[" + lyxrc->fontenc
+                                + "]{fontenc}\n";
+                       texrow.newline();
+               }
+               if (params.inputenc != "default") {
+                       LFile += "\\usepackage[" + params.inputenc
+                                + "]{inputenc}\n";
+                       texrow.newline();
+               }
+               
+               /* at the very beginning the text parameters */
+               if (params.paperpackage != PACKAGE_NONE) {
+                       switch (params.paperpackage) {
+                       case PACKAGE_A4:
+                               LFile += "\\usepackage{a4}\n";
+                               texrow.newline();
+                               break;
+                       case PACKAGE_A4WIDE:
+                               LFile += "\\usepackage{a4wide}\n";
+                               texrow.newline();
+                               break;
+                       case PACKAGE_WIDEMARGINSA4:
+                               LFile += "\\usepackage[widemargins]{a4}\n";
+                               texrow.newline();
+                               break;
+                       }
+               }
+               if (params.use_geometry) {
+                       LFile += "\\usepackage{geometry}\n";
+                       texrow.newline();
+                       LFile += "\\geometry{verbose";
+                       if (params.orientation == ORIENTATION_LANDSCAPE)
+                               LFile += ",landscape";
+                       switch (params.papersize2) {
+                       case VM_PAPER_CUSTOM:
+                               if (!params.paperwidth.empty())
+                                       LFile += ",paperwidth="
+                                                + params.paperwidth;
+                               if (!params.paperheight.empty())
+                                       LFile += ",paperheight="
+                                                + params.paperheight;
+                               break;
+                       case VM_PAPER_USLETTER:
+                               LFile += ",letterpaper";
+                               break;
+                       case VM_PAPER_USLEGAL:
+                               LFile += ",legalpaper";
+                               break;
+                       case VM_PAPER_USEXECUTIVE:
+                               LFile += ",executivepaper";
+                               break;
+                       case VM_PAPER_A3:
+                               LFile += ",a3paper";
+                               break;
+                       case VM_PAPER_A4:
+                               LFile += ",a4paper";
+                               break;
+                       case VM_PAPER_A5:
+                               LFile += ",a5paper";
+                               break;
+                       case VM_PAPER_B3:
+                               LFile += ",b3paper";
+                               break;
+                       case VM_PAPER_B4:
+                               LFile += ",b4paper";
+                               break;
+                       case VM_PAPER_B5:
+                               LFile += ",b5paper";
+                               break;
+                       default:
+                               // default papersize ie VM_PAPER_DEFAULT
+                               switch (lyxrc->default_papersize) {
+                               case PAPER_DEFAULT: // keep compiler happy
+                               case PAPER_USLETTER:
+                                       LFile += ",letterpaper";
+                                       break;
+                               case PAPER_LEGALPAPER:
+                                       LFile += ",legalpaper";
+                                       break;
+                               case PAPER_EXECUTIVEPAPER:
+                                       LFile += ",executivepaper";
+                                       break;
+                               case PAPER_A3PAPER:
+                                       LFile += ",a3paper";
+                                       break;
+                               case PAPER_A4PAPER:
+                                       LFile += ",a4paper";
+                                       break;
+                               case PAPER_A5PAPER:
+                                       LFile += ",a5paper";
+                                       break;
+                               case PAPER_B5PAPER:
+                                       LFile += ",b5paper";
+                                       break;
+                               }
+                       }
+                       if (!params.topmargin.empty())
+                               LFile += ",tmargin=" + params.topmargin;
+                       if (!params.bottommargin.empty())
+                               LFile += ",bmargin=" + params.bottommargin;
+                       if (!params.leftmargin.empty())
+                               LFile += ",lmargin=" + params.leftmargin;
+                       if (!params.rightmargin.empty())
+                               LFile += ",rmargin=" + params.rightmargin;
+                       if (!params.headheight.empty())
+                               LFile += ",headheight=" + params.headheight;
+                       if (!params.headsep.empty())
+                               LFile += ",headsep=" + params.headsep;
+                       if (!params.footskip.empty())
+                               LFile += ",footskip=" + params.footskip;
+                       LFile += "}\n";
+                       texrow.newline();
+               }
+               if (params.use_amsmath
+                   && !lyxstyle.LatexnameOfClass(params.textclass).prefixIs("ams")) {
+                       LFile += "\\usepackage{amsmath}\n";
+               }
+
+               if (tclass->opt_pagestyle.tokenPos('|',params.pagestyle) >= 0) {
+                       if (params.pagestyle == "fancy") {
+                               LFile += "\\usepackage{fancyhdr}\n";
+                               texrow.newline();
+                       }
+                       LFile += "\\pagestyle{" + params.pagestyle + "}\n";
+                       texrow.newline();
+               }
+
+               // We try to load babel late, in case it interferes
+               // with other packages.
+               if (params.language != "default") {
+                       LFile += "\\usepackage{babel}\n";
+                       texrow.newline();
+               }
+
+               if (params.secnumdepth != tclass->secnumdepth) {
+                       LFile += "\\setcounter{secnumdepth}{";
+                       LFile += params.secnumdepth;
+                       LFile += "}\n";
+                       texrow.newline();
+               }
+               if (params.tocdepth != tclass->tocdepth) {
+                       LFile += "\\setcounter{tocdepth}{";
+                       LFile += params.tocdepth;
+                       LFile += "}\n";
+                       texrow.newline();
+               }
+               
+               if (params.paragraph_separation) {
+                       switch (params.defskip.kind()) {
+                       case VSpace::SMALLSKIP: 
+                               LFile += "\\setlength\\parskip{\\smallskipamount}\n";
+                               break;
+                       case VSpace::MEDSKIP:
+                               LFile += "\\setlength\\parskip{\\medskipamount}\n";
+                               break;
+                       case VSpace::BIGSKIP:
+                               LFile += "\\setlength\\parskip{\\bigskipamount}\n";
+                               break;
+                       case VSpace::LENGTH:
+                               LFile += "\\setlength\\parskip{"
+                                        + params.defskip.length().asLatexString()
+                                        + "}\n";
+                               break;
+                       default: // should never happen // Then delete it.
+                               LFile += "\\setlength\\parskip{\\medskipamount}\n";
+                               break;
+                       }
+                       texrow.newline();
+                       
+                       LFile += "\\setlength\\parindent{0pt}\n";
+                       texrow.newline();
+               }
+
+               // Write out what we've generated so far...and reset LFile
+               fwrite(LFile.c_str(), sizeof(char), LFile.length(), file);
+               LFile.clean(); 
+
+               // Now insert the LyX specific LaTeX commands...
+               LString preamble, tmppreamble;
+
+               // The optional packages;
+               preamble = features.getPackages(params);
+
+               // this might be useful...
+               preamble += "\n\\makeatletter\n\n";
+
+               // Some macros LyX will need
+               tmppreamble = features.getMacros(params);
+
+               if (!tmppreamble.empty()) {
+                       preamble += "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
+                               "LyX specific LaTeX commands.\n"
+                               + tmppreamble + '\n';
+               }
+
+               // the text class specific preamble 
+               tmppreamble = features.getTClassPreamble(params);
+               if (!tmppreamble.empty()) {
+                       preamble += "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
+                               "Textclass specific LaTeX commands.\n"
+                               + tmppreamble + '\n';
+               }
+
+               /* the user-defined preamble */
+               if (!params.preamble.empty()) {
+                       preamble += "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "
+                               "User specified LaTeX commands.\n"
+                               + params.preamble + '\n';
+               }
+
+               preamble += "\\makeatother\n\n";
+
+               // Itemize bullet settings need to be last in case the user
+               // defines their own bullets that use a package included
+               // in the user-defined preamble -- ARRae
+               for (int i = 0; i < 4; ++i) {
+                       if (params.user_defined_bullets[i] != ITEMIZE_DEFAULTS[i]) {
+                               preamble += "\\renewcommand\\labelitemi";
+                               switch (i) {
+                                       // `i' is one less than the item to modify
+                               case 0:
+                                       break;
+                               case 1:
+                                       preamble += 'i';
+                                       break;
+                               case 2:
+                                       preamble += "ii";
+                                       break;
+                               case 3:
+                                       preamble += 'v';
+                                       break;
+                               }
+                               preamble += "[0]{" + params.user_defined_bullets[i].getText() + "}\n";
+                       }
+               }
+
+               for (int j = preamble.countChar('\n'); j-- ;) {
+                       texrow.newline();
+               }
+
+               // A bit faster than printing a char at a time I think.
+               fwrite(preamble.c_str(), sizeof(char),
+                      preamble.length(), file);
+
+               // make the body.
+               LFile += "\\begin{document}\n\n";
+               texrow.newline();
+               texrow.newline();
+       } // only_body
+       lyxerr.debug("preamble finished, now the body.");
+       
+       bool was_title = false;
+       bool already_title = false;
+       LString ftnote;
+       TexRow ft_texrow;
+       int ftcount = 0;
+       int loop_count = 0;
+
+       LyXParagraph *par = paragraph;
+
+       // if only_body
+       while (par) {
+               ++loop_count;
+               if (par->IsDummy())
+                       lyxerr.debug("Error in MakeLateXFile.", Error::LATEX);
+               LyXLayout * layout = lyxstyle.Style(params.textclass,
+                                                   par->layout);
+           
+               if (layout->intitle) {
+                       if (already_title) {
+                               lyxerr.print("Error in MakeLatexFile: You"
+                                            " should not mix title layouts"
+                                            " with normal ones.");
+                       } else
+                               was_title = true;
+               } else if (was_title && !already_title) {
+                       LFile += "\\maketitle\n";
+                       texrow.newline();
+                       already_title = true;
+                       was_title = false;                  
+               }
+               // We are at depth 0 so we can just use
+               // ordinary \footnote{} generation
+               // flag this with ftcount
+               ftcount = -1;
+               if (layout->isEnvironment()
+                    || par->pextra_type != PEXTRA_NONE) {
+                       par = par->TeXEnvironment(LFile, texrow,
+                                                 ftnote, ft_texrow, ftcount);
+               } else {
+                       par = par->TeXOnePar(LFile, texrow,
+                                            ftnote, ft_texrow, ftcount);
+               }
+
+               // Write out what we've generated...and reset LFile
+               if (ftcount >= 1) {
+                       if (ftcount > 1) {
+                               LFile += "\\addtocounter{footnote}{-";
+                               LFile += ftcount - 1;
+                               LFile += '}';
+                       }
+                       LFile += ftnote;
+                       texrow += ft_texrow;
+                       ftnote.clean();
+                       ft_texrow.reset();
+                       ftcount = 0;
+               }
+               if (loop_count == 2) {
+                       // fwrite()ing every second time through the loop
+                       // gains a few extra % of speed; going higher than
+                       // 2 will slow things down again.  I'll look at
+                       // LFile.length() in a future revision.  ARRae
+                       fwrite(LFile.c_str(), sizeof(char),
+                              LFile.length(), file);
+                       LFile.clean();
+                       loop_count = 0;
+               }
+       }
+
+       // It might be that we only have a title in this document
+       if (was_title && !already_title) {
+               LFile += "\\maketitle\n";
+               texrow.newline();
+       }
+
+       if (!only_body) {
+               LFile += "\\end{document}\n";
+               texrow.newline();
+       
+               lyxerr.debug("makeLaTeXFile...done", Error::LATEX);
+       } else {
+               lyxerr.debug("LaTeXFile for inclusion made.", Error::LATEX);
+       }
+
+       // Just to be sure. (Asger)
+       texrow.newline();
+
+       // Write out what we've generated...and reset LFile
+       fwrite(LFile.c_str(), sizeof(char), LFile.length(), file);
+       LFile.clean();
+
+       // tex_code_break_column's value is used to decide
+       // if we are in batchmode or not (within mathed_write()
+       // in math_write.C) so we must set it to a non-zero
+       // value when we leave otherwise we save incorrect .lyx files.
+       tex_code_break_column = lyxrc->ascii_linelen;
+
+       if (file.close()) {
+               WriteFSAlert(_("Error! Could not close file properly:"), filename);
+       }
+       lyxerr.debug("Finished making latex file.");
+}
+
+
+bool Buffer::isLatex()
+{
+       return lyxstyle.TextClass(params.textclass)->output_type == LATEX;
+}
+
+
+bool Buffer::isLinuxDoc()
+{
+       return lyxstyle.TextClass(params.textclass)->output_type == LINUXDOC;
+}
+
+
+bool Buffer::isLiterate()
+{
+       return lyxstyle.TextClass(params.textclass)->output_type == LITERATE;
+}
+
+
+bool Buffer::isDocBook()
+{
+       return lyxstyle.TextClass(params.textclass)->output_type == DOCBOOK;
+}
+
+
+bool Buffer::isSGML()
+{
+       return lyxstyle.TextClass(params.textclass)->output_type == LINUXDOC ||
+              lyxstyle.TextClass(params.textclass)->output_type == DOCBOOK;
+}
+
+
+void Buffer::sgmlOpenTag(FILE * file,int depth,LString & latexname)
+{
+       static char *space[] = {" ","  ","   ","    ","     ","      ","       ",
+                        "        ","         ","          ","          "};
+
+       fprintf(file,"%s<%s>\n",space[depth],latexname.c_str());
+}
+
+
+void Buffer::sgmlCloseTag(FILE * file,int depth,LString & latexname)
+{
+       static char *space[] = {" ","  ","   ","    ","     ","      ","       ",
+                        "        ","         ","          ","          "};
+
+       fprintf(file,"%s</%s>\n",space[depth],latexname.c_str());
+}
+
+
+void Buffer::makeLinuxDocFile(LString const & filename, int column)
+{
+       LyXParagraph *par = paragraph;
+
+       LString top_element=lyxstyle.LatexnameOfClass(params.textclass);
+       LString environment_stack[10];
+        LString item_name;
+
+       int depth=0;              /* paragraph depth */
+
+       FilePtr file(filename, FilePtr::write);
+       tex_code_break_column = column; 
+
+       if (!file()) {
+               WriteAlert(_("LYX_ERROR:"), _("Cannot write file"), filename);
+               return;
+       }
+   
+       //ResetTexRow();
+       texrow.reset();
+   
+       if (params.preamble.empty()) {
+               fprintf(file, "<!doctype linuxdoc system>\n\n");
+       }
+       else {
+               fprintf(file, "<!doctype linuxdoc system \n [ %s \n]>\n\n", 
+                       params.preamble.c_str() );
+       }
+
+        LString userName(getUserName());
+       fprintf(file, "<!-- LinuxDoc file was created by LyX 1.0 (C) 1995-1999 ");
+       fprintf(file, "by <%s> %s -->\n", userName.c_str(), (char *)date());
+
+       if(params.options.empty())
+               sgmlOpenTag(file,0,top_element);
+       else {
+               LString top = top_element;
+               top += " ";
+               top += params.options;
+               sgmlOpenTag(file,0,top);
+       }
+
+       while (par) {
+               int desc_on=0;            /* description mode*/
+               LyXLayout *style=lyxstyle.Style(GetCurrentTextClass(), par->layout);
+               par->AutoDeleteInsets();
+
+               /* treat <toc> as a special case for compatibility with old code */
+               if (par->GetChar(0) == LYX_META_INSET) {
+                       Inset *inset = par->GetInset(0);
+                       char  lyx_code = inset->LyxCode();
+                       if (lyx_code ==Inset::TOC_CODE){
+                               LString temp= "toc";
+                               sgmlOpenTag(file, depth, temp);
+
+                               par = par->next;
+                               linuxDocHandleFootnote(file, par, depth);
+                               continue;
+                       }
+               }
+
+               /* environment tag closing */
+               for( ;depth > par->depth; depth--) {
+                       sgmlCloseTag(file,depth,environment_stack[depth]);
+                       environment_stack[depth].clean();
+               }
+
+               /* write opening SGML tags */
+               switch(style->latextype) {
+               case LATEX_PARAGRAPH:
+                       if(depth == par->depth 
+                          && !environment_stack[depth].empty()) {
+                               sgmlCloseTag(file,depth,environment_stack[depth]);
+                               environment_stack[depth].clean();
+                               if(depth) 
+                                       depth--;
+                               else
+                                       fprintf(file,"</p>");
+                       }
+                       sgmlOpenTag(file,depth,style->latexname);
+                       break;
+
+               case LATEX_COMMAND:
+                       if (depth!=0)
+                               LinuxDocError(par, 0, _("Error : Wrong depth for LatexType Command.\n"));
+
+                       if (!environment_stack[depth].empty()){
+                               sgmlCloseTag(file,depth,environment_stack[depth]);
+                               fprintf(file, "</p>");
+                       }
+
+                       environment_stack[depth].clean();
+                       sgmlOpenTag(file,depth, style->latexname);
+                       break;
+
+               case LATEX_ENVIRONMENT:
+               case LATEX_ITEM_ENVIRONMENT:
+                       if(depth == par->depth 
+                          && environment_stack[depth]!=style->latexname 
+                          && !environment_stack[depth].empty()) {
+
+                               sgmlCloseTag(file,depth,environment_stack[depth]);
+                               environment_stack[depth].clean();
+                       }
+                       if (depth < par->depth) {
+                              depth = par->depth;
+                              environment_stack[depth].clean();
+                       }
+                       if (environment_stack[depth] != style->latexname) {
+                               if(depth==0) {
+                                       LString temp="p";
+                                       sgmlOpenTag(file,depth,temp);
+                               }
+                               environment_stack[depth]= style->latexname;
+                               sgmlOpenTag(file,depth,environment_stack[depth]);
+                       }
+                       if(style->latextype == LATEX_ENVIRONMENT) break;
+
+                       desc_on =(style->labeltype == LABEL_MANUAL);
+
+                       if(desc_on)
+                               item_name="tag";
+                       else
+                               item_name="item";
+
+                       sgmlOpenTag(file,depth+1,item_name);
+                       break;
+               default:
+                       sgmlOpenTag(file,depth,style->latexname);
+                       break;
+               }
+
+               do {
+                       SimpleLinuxDocOnePar(file, par, desc_on, depth);
+
+                       par = par->next;
+                       linuxDocHandleFootnote(file,par,depth);
+               }
+               while(par && par->IsDummy());
+
+               fprintf(file,"\n");
+               /* write closing SGML tags */
+               switch(style->latextype) {
+               case LATEX_COMMAND:
+               case LATEX_ENVIRONMENT:
+               case LATEX_ITEM_ENVIRONMENT:
+                       break;
+               default:
+                       sgmlCloseTag(file,depth,style->latexname);
+                       break;
+               }
+
+
+       }
+   
+       
+       /* Close open tags */
+       for(;depth>0;depth--)
+               sgmlCloseTag(file,depth,environment_stack[depth]);
+
+       if(!environment_stack[depth].empty())
+               sgmlCloseTag(file,depth,environment_stack[depth]);
+
+       fprintf(file, "\n\n");
+       sgmlCloseTag(file,0,top_element);
+
+       if (file.close()) {
+               WriteFSAlert(_("Error! Could not close file properly:"),
+                            filename);
+       }
+}
+
+
+void Buffer::linuxDocHandleFootnote(FILE *file,LyXParagraph* &par, int const depth)
+{
+       LString tag="footnote";
+
+       while (par && par->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
+               sgmlOpenTag(file,depth+1,tag);
+               SimpleLinuxDocOnePar(file, par, 0,depth+1);
+               sgmlCloseTag(file,depth+1,tag);
+               par = par->next;
+       }
+}
+
+void Buffer::DocBookHandleCaption(FILE *file, LString &inner_tag,
+                                 int const depth, int desc_on,
+                                 LyXParagraph* &par)
+{
+       LyXParagraph *tpar = par;
+       LString tmp_par, extra_par;
+       while (tpar && (tpar->footnoteflag != LyXParagraph::NO_FOOTNOTE) &&
+              (tpar->layout != lyxstyle.NumberOfLayout(params.textclass,"Caption")))
+               tpar = tpar->next;
+       if (tpar &&
+           tpar->layout==lyxstyle.NumberOfLayout(params.textclass,"Caption")) {
+               sgmlOpenTag(file,depth+1,inner_tag);
+           SimpleDocBookOnePar(tmp_par,extra_par,tpar,desc_on,depth+2);
+               tmp_par.strip();
+               tmp_par.frontStrip();
+               fprintf(file,"%s",tmp_par.c_str());
+               sgmlCloseTag(file,depth+1,inner_tag);
+               if(!extra_par.empty())
+                       fprintf(file,"%s",extra_par.c_str());
+       }
+}
+
+void Buffer::DocBookHandleFootnote(FILE *file,LyXParagraph* &par, int const depth)
+{
+       LString tag,inner_tag;
+       LString tmp_par,extra_par;
+       bool inner_span;
+       int desc_on=4;
+
+       // This is not how I like to see enums. They should not be anonymous
+       // and variables of its type should not be declared right after the
+       // last brace. (Lgb)
+       enum {
+               NO_ONE,
+               FOOTNOTE_LIKE,
+               MARGIN_LIKE,
+               FIG_LIKE,
+               TAB_LIKE
+       } last=NO_ONE, present=FOOTNOTE_LIKE;
+
+       while (par && par->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
+               if(last==present) {
+                       if(inner_span) {
+                               if(!tmp_par.empty()) {
+                                       fprintf(file,"%s",tmp_par.c_str());
+                                       tmp_par.clean();
+                                       sgmlCloseTag(file,depth+1,inner_tag);
+                                       sgmlOpenTag(file,depth+1,inner_tag);
+                               }
+                       }
+                       else
+                               fprintf(file,"\n");
+               } else {
+                       fprintf(file,"%s",tmp_par.c_str());
+                       if(!inner_tag.empty()) sgmlCloseTag(file,depth+1,inner_tag);
+                       if(!extra_par.empty()) fprintf(file,"%s",extra_par.c_str());
+                       if(!tag.empty()) sgmlCloseTag(file,depth,tag);
+                       extra_par.clean();
+
+                       switch (par->footnotekind) {
+                       case LyXParagraph::FOOTNOTE:
+                       case LyXParagraph::ALGORITHM:
+                               tag="footnote";
+                               inner_tag="para";
+                               present=FOOTNOTE_LIKE;
+                               inner_span=true;
+                               break;
+                       case LyXParagraph::MARGIN:
+                               tag="sidebar";
+                               inner_tag="para";
+                               present=MARGIN_LIKE;
+                               inner_span=true;
+                               break;
+                       case LyXParagraph::FIG:
+                       case LyXParagraph::WIDE_FIG:
+                               tag="figure";
+                               inner_tag="title";
+                               present=FIG_LIKE;
+                               inner_span=false;
+                               break;
+                       case LyXParagraph::TAB:
+                       case LyXParagraph::WIDE_TAB:
+                               tag="table";
+                               inner_tag="title";
+                               present=TAB_LIKE;
+                               inner_span=false;
+                               break;
+                       }
+                       sgmlOpenTag(file,depth,tag);
+                       if ((present == TAB_LIKE) || (present == FIG_LIKE)) {
+                               DocBookHandleCaption(file, inner_tag, depth,
+                                                    desc_on, par);
+                               inner_tag.clean();
+                       } else {
+                               sgmlOpenTag(file,depth+1,inner_tag);
+                       }
+               }
+               // ignore all caption here, we processed them above!!!
+               if (par->layout != lyxstyle.NumberOfLayout(params.textclass,
+                                                          "Caption")) {
+                       SimpleDocBookOnePar(tmp_par,extra_par,par,
+                                           desc_on,depth+2);
+               }
+               tmp_par.strip();
+               tmp_par.frontStrip();
+
+               last=present;
+               par = par->next;
+       }
+       fprintf(file,"%s",tmp_par.c_str());
+       if(!inner_tag.empty()) sgmlCloseTag(file,depth+1,inner_tag);
+       if(!extra_par.empty()) fprintf(file,"%s",extra_par.c_str());
+       if(!tag.empty()) sgmlCloseTag(file,depth,tag);
+
+}
+
+
+/* push a tag in a style stack */
+void Buffer::push_tag(FILE *file, char const *tag,
+                     int& pos, char stack[5][3])
+{
+       int j;
+
+       /* pop all previous tags */
+       for (j=pos; j>=0; j--)
+               fprintf(file, "</%s>", stack[j]); 
+
+       /* add new tag */
+       sprintf(stack[++pos], "%s", tag);
+
+       /* push all tags */
+       for (j=0; j<=pos; j++)
+               fprintf(file, "<%s>", stack[j]);
+}
+
+
+// pop a tag from a style stack
+void Buffer::pop_tag(FILE *file, char const * tag,
+                    int& pos, char stack[5][3])
+{
+       int j;
+
+       // pop all tags till specified one
+       for (j=pos; (j>=0) && (strcmp(stack[j], tag)); j--)
+               fprintf(file, "</%s>", stack[j]);
+
+       // closes the tag
+       fprintf(file, "</%s>", tag);
+
+       // push all tags, but the specified one
+       for (j=j+1; j<=pos; j++) {
+               fprintf(file, "<%s>", stack[j]);
+               strcpy(stack[j-1], stack[j]);
+       }
+       pos --;
+}
+
+
+/* handle internal paragraph parsing -- layout already processed */
+
+// checks, if newcol chars should be put into this line
+// writes newline, if necessary.
+static
+void linux_doc_line_break(FILE *file, unsigned int &colcount, const unsigned int newcol)
+{
+       colcount += newcol;
+       if (colcount > lyxrc->ascii_linelen) {
+               fprintf(file, "\n");
+               colcount = newcol; // assume write after this call
+       }
+}
+
+
+void Buffer::SimpleLinuxDocOnePar(FILE *file, LyXParagraph *par, int desc_on, int const depth)
+{
+       LyXFont font1,font2;
+       char c;
+       Inset *inset;
+       int main_body, j;
+       LyXLayout * style = lyxstyle.Style(params.textclass, par->GetLayout());
+
+       char family_type = 0;               // family font flag 
+       bool is_bold     = false;           // series font flag 
+       char shape_type  = 0;               // shape font flag 
+       bool is_em = false;                 // emphasis (italic) font flag 
+
+       int stack_num = -1;          // style stack position 
+       char stack[5][3];            // style stack 
+        unsigned int char_line_count = 5;     // Heuristic choice ;-) 
+
+       if (style->labeltype != LABEL_MANUAL)
+               main_body = 0;
+       else
+               main_body = par->BeginningOfMainBody();
+
+       /* gets paragraph main font */
+       if (main_body > 0)
+               font1 = style->labelfont;
+       else
+               font1 = style->font;
+
+  
+       /* parsing main loop */
+       for (int i = 0; i < par->last; i++) {
+
+               /* handle quote tag */
+               if (i == main_body && !par->IsDummy()) {
+                       if (main_body > 0)
+                               font1 = style->font;
+               }
+
+               font2 = par->getFont(i);
+
+               if (font1.family() != font2.family()) {
+                       switch(family_type) {
+                       case 0:
+                               if (font2.family() == LyXFont::TYPEWRITER_FAMILY) {
+                                       push_tag(file, "tt", stack_num, stack);
+                                       family_type=1;
+                               }
+                               else if (font2.family() == LyXFont::SANS_FAMILY) {
+                                       push_tag(file, "sf", stack_num, stack);
+                                       family_type=2;
+                               }
+                               break;
+                       case 1:
+                               pop_tag(file, "tt", stack_num, stack);
+                               if (font2.family() == LyXFont::SANS_FAMILY) {
+                                       push_tag(file, "sf", stack_num, stack);
+                                       family_type=2;
+                               }
+                               else {
+                                       family_type=0;
+                               }
+                               break;
+                       case 2:
+                               pop_tag(file, "sf", stack_num, stack);
+                               if (font2.family() == LyXFont::TYPEWRITER_FAMILY) {
+                                       push_tag(file, "tt", stack_num, stack);
+                                       family_type=1;
+                               }
+                               else {
+                                       family_type=0;
+                               }
+                       }
+               }
+
+               /* handle bold face */
+               if (font1.series() != font2.series()) {
+                       if (font2.series() == LyXFont::BOLD_SERIES) {
+                               push_tag(file, "bf", stack_num, stack);
+                               is_bold = true;
+                       }
+                       else if (is_bold) {
+                               pop_tag(file, "bf", stack_num, stack);
+                               is_bold = false;
+                       }
+               }
+
+               /* handle italic and slanted fonts */
+               if (font1.shape() != font2.shape()) {
+                       switch(shape_type) {
+                       case 0:
+                               if (font2.shape() == LyXFont::ITALIC_SHAPE) {
+                                       push_tag(file, "it", stack_num, stack);
+                                       shape_type=1;
+                               }
+                               else if (font2.shape() == LyXFont::SLANTED_SHAPE) {
+                                       push_tag(file, "sl", stack_num, stack);
+                                       shape_type=2;
+                               }
+                               break;
+                       case 1:
+                               pop_tag(file, "it", stack_num, stack);
+                               if (font2.shape() == LyXFont::SLANTED_SHAPE) {
+                                       push_tag(file, "sl", stack_num, stack);
+                                       shape_type=2;
+                               }
+                               else {
+                                       shape_type=0;
+                               }
+                               break;
+                       case 2:
+                               pop_tag(file, "sl", stack_num, stack);
+                               if (font2.shape() == LyXFont::ITALIC_SHAPE) {
+                                       push_tag(file, "it", stack_num, stack);
+                                       shape_type=1;
+                               }
+                               else {
+                                       shape_type=0;
+                               }
+                       }
+               }
+               /* handle <em> tag */
+               if (font1.emph() != font2.emph()) {
+                       if (font2.emph() == LyXFont::ON) {
+                               push_tag(file, "em", stack_num, stack);
+                               is_em = true;
+                       } else if (is_em) {
+                               pop_tag(file, "em", stack_num, stack);
+                               is_em = false;
+                       }
+               }
+
+               c = par->GetChar(i);
+      
+               if (font2.latex() == LyXFont::ON) {
+                       // "TeX"-Mode on ==> SGML-Mode on.
+                       if (c!='\0')
+                               fprintf(file, "%c", c); // see LaTeX-Generation...
+                       char_line_count++;
+               } else if (c == LYX_META_INSET) {
+                       inset = par->GetInset(i);
+                       LString tmp_out;
+                       inset->Linuxdoc(tmp_out);
+                       fprintf(file,"%s",tmp_out.c_str());
+               }
+               else {
+                       LString sgml_string;
+                       if (par->linuxDocConvertChar(c, sgml_string)
+                           && !style->free_spacing) { // in freespacing
+                                                    // mode, spaces are
+                                                    // non-breaking characters
+                               // char is ' '
+                               if (desc_on == 1) {
+                                       char_line_count++;
+                                       linux_doc_line_break(file, char_line_count, 6);
+                                       fprintf(file, "</tag>");
+                                       desc_on = 2;
+                               }
+                               else  {
+                                       linux_doc_line_break(file, char_line_count, 1);
+                                       fprintf(file, "%c", c);
+                               }
+                       }
+                       else {
+                               fprintf(file, "%s", sgml_string.c_str());
+                               char_line_count += sgml_string.length();
+                       }
+               }
+               font1 = font2;
+       }
+
+       /* needed if there is an optional argument but no contents */ 
+       if (main_body > 0 && main_body == par->last) {
+               font1 = style->font;
+       }
+
+       /* pop all defined Styles */
+       for (j=stack_num; j>=0; j--) {
+               linux_doc_line_break(file, 
+                                    char_line_count, 
+                                    3+strlen(stack[j]));
+               fprintf(file, "</%s>", stack[j]);
+       }
+
+       /* resets description flag correctly */
+       switch(desc_on){
+       case 1:
+               /* <tag> not closed... */
+               linux_doc_line_break(file, char_line_count, 6);
+               fprintf(file, "</tag>");
+               break;
+       case 2:
+               /* fprintf(file, "</p>");*/
+               break;
+       }
+}
+
+
+/* print an error message */
+void Buffer::LinuxDocError(LyXParagraph *par, int pos,
+                          char const *message) 
+{
+       InsetError *new_inset;
+
+       /* insert an error marker in text */
+       new_inset = new InsetError(message);
+       par->InsertChar(pos, LYX_META_INSET);
+       par->InsertInset(pos, new_inset);
+}
+
+// This constant defines the maximum number of 
+// environment layouts that can be nesteded.
+// The same applies for command layouts.
+// These values should be more than enough.
+//           José Matos (1999/07/22)
+
+enum { MAX_NEST_LEVEL = 25};
+
+void Buffer::makeDocBookFile(LString const & filename, int column)
+{
+       LyXParagraph *par = paragraph;
+
+       LString top_element=lyxstyle.LatexnameOfClass(params.textclass);
+       LString environment_stack[MAX_NEST_LEVEL];
+       LString environment_inner[MAX_NEST_LEVEL];
+       LString command_stack[MAX_NEST_LEVEL];
+       bool command_flag=false;
+       int command_depth=0,command_base,cmd_depth;
+
+        LString item_name,command_name;
+       LString c_depth,c_params,tmps;
+
+       int depth=0;              /* paragraph depth */
+
+       FilePtr file(filename, FilePtr::write);
+       tex_code_break_column = column; 
+
+       if (!file()) {
+               WriteAlert(_("LYX_ERROR:"), _("Cannot write file"), filename);
+               return;
+       }
+   
+       //ResetTexRow();
+       texrow.reset();
+
+       fprintf(file, "<!doctype %s public \"-//OASIS//DTD DocBook V3.1//EN\"",top_element.c_str());
+
+       if (params.preamble.empty())
+               fprintf(file, ">\n\n");
+       else
+               fprintf(file, "\n [ %s \n]>\n\n",params.preamble.c_str() );
+
+        LString userName(getUserName());
+       fprintf(file,
+               "<!-- DocBook file was created by LyX 1.0 (C) 1995-1999\n");
+       fprintf(file, "by <%s> %s -->\n", userName.c_str(), (char *)date());
+
+       if(params.options.empty())
+               sgmlOpenTag(file,0,top_element);
+       else {
+               LString top = top_element;
+               top += " ";
+               top += params.options;
+               sgmlOpenTag(file,0,top);
+       }
+
+       while (par) {
+               int desc_on=0;            /* description mode*/
+               LyXLayout * style = lyxstyle.Style(GetCurrentTextClass(),
+                                                  par->layout);
+               par->AutoDeleteInsets();
+
+               /* environment tag closing */
+               for( ;depth > par->depth; depth--) {
+                       if(environment_inner[depth] != "!-- --") {
+                               item_name="listitem";
+                               sgmlCloseTag(file,command_depth+depth,
+                                            item_name);
+                               if( environment_inner[depth] == "varlistentry")
+                                       sgmlCloseTag(file,depth+command_depth,
+                                                    environment_inner[depth]);
+                       }
+                       sgmlCloseTag(file,depth+command_depth,
+                                    environment_stack[depth]);
+                       environment_stack[depth].clean();
+                       environment_inner[depth].clean();
+               }
+
+               if(depth == par->depth
+                  && environment_stack[depth]!=style->latexname 
+                  && !environment_stack[depth].empty()) {
+                       if(environment_inner[depth] != "!-- --") {
+                               item_name="listitem";
+                               sgmlCloseTag(file,command_depth+depth,
+                                            item_name);
+                               if( environment_inner[depth] == "varlistentry")
+                                       sgmlCloseTag(file,depth+command_depth,
+                                                    environment_inner[depth]);
+                       }
+                       
+                       sgmlCloseTag(file,depth+command_depth,
+                                    environment_stack[depth]);
+                       
+                       environment_stack[depth].clean();
+                       environment_inner[depth].clean();
+                }
+
+               // Write opening SGML tags.
+               switch(style->latextype) {
+               case LATEX_PARAGRAPH:
+                       if(style->latexname != "dummy")
+                               sgmlOpenTag(file, depth+command_depth,
+                                           style->latexname);
+                       break;
+
+               case LATEX_COMMAND:
+                       if (depth!=0)
+                               LinuxDocError(par, 0,
+                                             _("Error : Wrong depth for "
+                                               "LatexType Command.\n"));
+                       
+                       command_name=style->latexname;
+                       
+                       tmps=style->latexparam;
+                       c_params=tmps.split(c_depth,'|');
+                       
+                       cmd_depth=atoi(c_depth.c_str());
+                       
+                       if(command_flag) {
+                               if(cmd_depth<command_base) {
+                                       for(int j = command_depth;
+                                           j >= command_base; j--)
+                                               if(!command_stack[j].empty())
+                                                       sgmlCloseTag(file,j,command_stack[j]);
+                                       command_depth=command_base=cmd_depth;
+                               }
+                               else if(cmd_depth<=command_depth) {
+                                       for(int j= command_depth;
+                                           j >= cmd_depth; j--)
+
+                                               if(!command_stack[j].empty())
+                                                       sgmlCloseTag(file,j,command_stack[j]);
+                                       command_depth=cmd_depth;
+                               }
+                               else
+                                       command_depth=cmd_depth;
+                       }
+                       else {
+                               command_depth = command_base = cmd_depth;
+                               command_flag = true;
+                       }
+                       command_stack[command_depth]=command_name;
+
+                       // treat label as a special case for
+                       // more WYSIWYM handling.
+                       if (par->GetChar(0) == LYX_META_INSET) {
+                               Inset *inset = par->GetInset(0);
+                               char  lyx_code = inset->LyxCode();
+                               if (lyx_code ==Inset::LABEL_CODE){
+                                       command_name+= " id=\"";
+                                       command_name+=((InsetCommand *) inset)->getContents();
+                                       command_name+="\"";
+                                       desc_on=3;
+                               }
+                       }
+
+                       sgmlOpenTag(file,depth+command_depth, command_name);
+                       item_name="title";
+                       sgmlOpenTag(file,depth+1+command_depth,item_name);
+                       break;
+
+               case LATEX_ENVIRONMENT:
+               case LATEX_ITEM_ENVIRONMENT:
+                       if (depth < par->depth) {
+                               depth = par->depth;
+                               environment_stack[depth].clean();
+                       }
+
+                       if (environment_stack[depth] != style->latexname) {
+                               environment_stack[depth]= style->latexname;
+                               environment_inner[depth]= "!-- --";
+                               sgmlOpenTag(file, depth + command_depth,
+                                           environment_stack[depth]);
+                       } else {
+                               if(environment_inner[depth] != "!-- --") {
+                                       item_name="listitem";
+                                       sgmlCloseTag(file,
+                                                    command_depth + depth,
+                                                    item_name);
+                                       if (environment_inner[depth] == "varlistentry")
+                                               sgmlCloseTag(file,
+                                                            depth+command_depth,
+                                                            environment_inner[depth]);
+                               }
+                       }
+                       
+                       if(style->latextype == LATEX_ENVIRONMENT) {
+                               if(!style->latexparam.empty())
+                                       sgmlOpenTag(file, depth+command_depth,
+                                                   style->latexparam);
+                               break;
+                       }
+
+                       desc_on =(style->labeltype == LABEL_MANUAL);
+
+                       if(desc_on)
+                               environment_inner[depth]="varlistentry";
+                       else
+                               environment_inner[depth]="listitem";
+
+                       sgmlOpenTag(file,depth+1+command_depth,
+                                   environment_inner[depth]);
+
+                       if(desc_on) {
+                               item_name="term";
+                               sgmlOpenTag(file,depth+1+command_depth,
+                                           item_name);
+                       }
+                       else {
+                               item_name="para";
+                               sgmlOpenTag(file,depth+1+command_depth,
+                                           item_name);
+                       }
+                       break;
+               default:
+                       sgmlOpenTag(file,depth+command_depth,style->latexname);
+                       break;
+               }
+
+               do {
+                       LString tmp_par,extra_par;
+
+                       SimpleDocBookOnePar(tmp_par,extra_par, par, desc_on,
+                                           depth+1+command_depth);
+                       fprintf(file,"%s",tmp_par.c_str());
+
+                       par = par->next;
+                       DocBookHandleFootnote(file,par, depth+1+command_depth);
+               }
+               while(par && par->IsDummy());
+
+               LString end_tag;
+               /* write closing SGML tags */
+               switch(style->latextype) {
+               case LATEX_COMMAND:
+                       end_tag="title";
+                       sgmlCloseTag(file,depth+command_depth,end_tag);
+                       break;
+               case LATEX_ENVIRONMENT:
+                       if(!style->latexparam.empty())
+                               sgmlCloseTag(file,depth+command_depth,
+                                            style->latexparam);
+                       break;
+               case LATEX_ITEM_ENVIRONMENT:
+                       if(desc_on==1) break;
+                       end_tag="para";
+                       sgmlCloseTag(file,depth+1+command_depth,end_tag);
+                       break;
+               case LATEX_PARAGRAPH:
+                       if( style->latexname != "dummy")
+                               sgmlCloseTag(file,depth+command_depth,
+                                            style->latexname);
+                       break;
+               default:
+                       sgmlCloseTag(file,depth+command_depth,
+                                    style->latexname);
+                       break;
+               }
+       }
+
+       // Close open tags
+       for(;depth>0;depth--)
+               sgmlCloseTag(file,depth+command_depth,
+                            environment_stack[depth]);
+
+       if(!environment_stack[depth].empty())
+               sgmlCloseTag(file,depth+command_depth,
+                            environment_stack[depth]);
+
+       for(int j=command_depth;j>=command_base;j--)
+               if(!command_stack[j].empty())
+                       sgmlCloseTag(file,j,command_stack[j]);
+
+       fprintf(file, "\n\n");
+       sgmlCloseTag(file,0,top_element);
+
+       if (file.close()) {
+               WriteFSAlert(_("Error! Could not close file properly:"),
+                            filename);
+       }
+}
+
+
+void Buffer::SimpleDocBookOnePar(LString & file, LString & extra,
+                                LyXParagraph * par, int & desc_on,
+                                int const depth) 
+{
+       if (par->table) {
+               par->SimpleDocBookOneTablePar(file, extra, desc_on, depth);
+               return;
+       }
+       LyXFont font1,font2;
+       char c;
+       Inset *inset;
+       int main_body, j;
+       LString emph="emphasis";
+       bool emph_flag=false;
+       int char_line_count=0;
+
+       LyXLayout * style = lyxstyle.Style(params.textclass, par->GetLayout());
+
+       if (style->labeltype != LABEL_MANUAL)
+               main_body = 0;
+       else
+               main_body = par->BeginningOfMainBody();
+
+       /* gets paragraph main font */
+       if (main_body > 0)
+               font1 = style->labelfont;
+       else
+               font1 = style->font;
+
+       char_line_count = depth;
+       if(!style->free_spacing)
+               for (j=0;j< depth;j++)
+                       file += ' ';
+
+       /* parsing main loop */
+       for (int i = 0; i < par->last; i++) {
+
+               font2 = par->getFont(i);
+
+               /* handle <emphasis> tag */
+               if (font1.emph() != font2.emph() && i) {
+                       if (font2.emph() == LyXFont::ON) {
+                               file += "<emphasis>";
+                               emph_flag=true;
+                       }else {
+                               file += "</emphasis>";
+                               emph_flag=false;
+                       }
+               }
+      
+               c = par->GetChar(i);
+
+               if (c == LYX_META_INSET) {
+                       inset = par->GetInset(i);
+                       LString tmp_out;
+                       inset->DocBook(tmp_out);
+                       //
+                       // This code needs some explanation:
+                       // Two insets are treated specially
+                       //   label if it is the first element in a command paragraph
+                       //         desc_on==3
+                       //   graphics inside tables or figure floats can't go on
+                       //   title (the equivalente in latex for this case is caption
+                       //   and title should come first
+                       //         desc_on==4
+                       //
+                       if(desc_on!=3 || i!=0) {
+                               if(tmp_out[0]=='@') {
+                                       if(desc_on==4)
+                                               extra += tmp_out.frontStrip('@');
+                                       else
+                                               file += tmp_out.frontStrip('@');
+                               }
+                               else
+                                       file += tmp_out;
+                       }
+               } else if (font2.latex() == LyXFont::ON) {
+                       // "TeX"-Mode on ==> SGML-Mode on.
+                       if (c!='\0')
+                               file += c;
+                       char_line_count++;
+               }
+               else {
+                       LString sgml_string;
+                       if (par->linuxDocConvertChar(c, sgml_string)
+                           && !style->free_spacing) { // in freespacing
+                                                    // mode, spaces are
+                                                    // non-breaking characters
+                               // char is ' '
+                               if (desc_on == 1) {
+                                       char_line_count++;
+                                       file += '\n';
+                                       file += "</term><listitem><para>";
+                                       desc_on = 2;
+                               }
+                               else  {
+                                       file += c;
+                               }
+                       }
+                       else {
+                               file += sgml_string;
+                       }
+               }
+               font1 = font2;
+       }
+
+       /* needed if there is an optional argument but no contents */ 
+       if (main_body > 0 && main_body == par->last) {
+               font1 = style->font;
+       }
+
+       if (emph_flag) {
+               file += "</emphasis>";
+       }
+       
+       /* resets description flag correctly */
+       switch(desc_on){
+       case 1:
+               /* <term> not closed... */
+               file += "</term>";
+               break;
+       }
+       file += '\n';
+}
+
+
+bool Buffer::removeAutoInsets()
+{
+       LyXParagraph *par = paragraph;
+
+       LyXCursor cursor = text->cursor;
+       LyXCursor tmpcursor = cursor;
+       cursor.par = tmpcursor.par->ParFromPos(tmpcursor.pos);
+       cursor.pos = tmpcursor.par->PositionInParFromPos(tmpcursor.pos);
+
+       bool a = false;
+       while (par) {
+               if (par->AutoDeleteInsets()){
+                       a = true;
+                       if (par->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE){
+                               /* this is possible now, since SetCursor takes
+                                  care about footnotes */
+                               text->SetCursorIntern(par, 0);
+                               text->RedoParagraphs(text->cursor, text->cursor.par->Next());
+                               text->FullRebreak();
+                       }
+               }
+               par = par->next;
+       }
+       /* avoid forbidden cursor positions caused by error removing */ 
+       if (cursor.pos > cursor.par->Last())
+               cursor.pos = cursor.par->Last();
+       text->SetCursorIntern(cursor.par, cursor.pos);
+
+       return a;
+}
+
+
+int Buffer::runLaTeX()
+{
+       if (!text) return 0;
+
+       ProhibitInput();
+
+       // get LaTeX-Filename
+       LString name = SpaceLess(ChangeExtension (filename, ".tex", true));
+
+       LString path = OnlyPath(filename);
+
+       LString org_path = path;
+       if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)) {
+               path = tmppath;  
+       }
+
+       PathPush(path); // path to LaTeX file
+       users->getOwner()->getMiniBuffer()->Set(_("Running LaTeX..."));   
+
+       // Remove all error insets
+       bool a = removeAutoInsets();
+
+       // generate the LaTeX file if necessary
+       //if (!isDviClean() || a) {
+       //      makeLaTeXFile(name, org_path, false);
+       //      markDviDirty();
+       //}
+
+       // Always generate the LaTeX file
+       makeLaTeXFile(name, org_path, false);
+       markDviDirty();
+
+       // do the LaTex run(s)
+       TeXErrors terr;
+       LaTeX latex(lyxrc->latex_command, name, filepath);
+       int res = latex.run(terr,users->getOwner()->getMiniBuffer()); // running latex
+
+       // check return value from latex.run().
+       if ((res & LaTeX::NO_LOGFILE)) {
+               WriteAlert(_("LaTeX did not work!"),
+                          _("Missing log file:"), name);
+       } else if ((res & LaTeX::ERRORS)) {
+               users->getOwner()->getMiniBuffer()->Set(_("Done"));
+               // Insert all errors as errors boxes
+               insertErrors(terr);
+               
+               // Dvi should also be kept dirty if the latex run
+               // ends up with errors. However it should be possible
+               // to view a dirty dvi too.
+       } else {
+               //no errors or any other things to think about so:
+               users->getOwner()->getMiniBuffer()->Set(_("Done"));
+               markDviClean();
+       }
+
+       // if we removed error insets before we ran LaTeX or if we inserted
+       // error insets after we ran LaTeX this must be run:
+        if (a || (res & LaTeX::ERRORS)){
+                users->redraw();
+                users->fitCursor();
+                users->updateScrollbar();
+        }
+        AllowInput();
+        PathPop(); // path to LaTeX file
+        return latex.getNumErrors();
+}
+
+
+int Buffer::runLiterate()
+{
+       if (!text) return 0;
+
+       ProhibitInput();
+
+       // get LaTeX-Filename
+       LString name = SpaceLess(ChangeExtension (filename, ".tex", true));
+        // get Literate-Filename
+        LString lit_name = SpaceLess(ChangeExtension (filename, lyxrc->literate_extension, true));
+
+       LString path = OnlyPath(filename);
+
+       LString org_path = path;
+       if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)) {
+               path = tmppath;  
+       }
+
+       PathPush(path); // path to Literate file
+       users->getOwner()->getMiniBuffer()->Set(_("Running Literate..."));   
+
+       // Remove all error insets
+       bool a = removeAutoInsets();
+
+       // generate the Literate file if necessary
+       if (!isDviClean() || a) {
+               makeLaTeXFile(lit_name, org_path, false);
+               markDviDirty();
+       }
+
+       TeXErrors terr;
+        Literate literate(lyxrc->latex_command, name, filepath, 
+                         lit_name,
+                         lyxrc->literate_command, lyxrc->literate_error_filter,
+                         lyxrc->build_command, lyxrc->build_error_filter);
+       int res = literate.weave(terr,users->getOwner()->getMiniBuffer());
+
+       // check return value from literate.weave().
+       if ((res & Literate::NO_LOGFILE)) {
+               WriteAlert(_("Literate command did not work!"),
+                          _("Missing log file:"), name);
+       } else if ((res & Literate::ERRORS)) {
+               users->getOwner()->getMiniBuffer()->Set(_("Done"));
+               // Insert all errors as errors boxes
+               insertErrors(terr);
+               
+               // Dvi should also be kept dirty if the latex run
+               // ends up with errors. However it should be possible
+               // to view a dirty dvi too.
+       } else {
+               //no errors or any other things to think about so:
+               users->getOwner()->getMiniBuffer()->Set(_("Done"));
+               markDviClean();
+       }
+
+       // if we removed error insets before we ran LaTeX or if we inserted
+       // error insets after we ran LaTeX this must be run:
+        if (a || (res & Literate::ERRORS)){
+                users->redraw();
+                users->fitCursor();
+                users->updateScrollbar();
+        }
+        AllowInput();
+        PathPop(); // path to LaTeX file
+        return literate.getNumErrors();
+}
+
+
+int Buffer::buildProgram()
+{
+        if (!text) return 0;
+        ProhibitInput();
+        // get LaTeX-Filename
+        LString name = SpaceLess(ChangeExtension (filename, ".tex", true));
+        // get Literate-Filename
+        LString lit_name = SpaceLess(ChangeExtension (filename, lyxrc->literate_extension, true));
+        LString path = OnlyPath(filename);
+        LString org_path = path;
+        if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)) {
+                path = tmppath;  
+        }
+        PathPush(path); // path to Literate file
+        users->getOwner()->getMiniBuffer()->Set(_("Building Program..."));   
+        // Remove all error insets
+        bool a = removeAutoInsets();
+        // generate the LaTeX file if necessary
+        if (!isNwClean() || a) {
+                makeLaTeXFile(lit_name, org_path, false);
+                markNwDirty();
+        }
+        TeXErrors terr;
+        Literate literate(lyxrc->latex_command, name, filepath, 
+                         lit_name,
+                         lyxrc->literate_command, lyxrc->literate_error_filter,
+                         lyxrc->build_command, lyxrc->build_error_filter);
+        int res = literate.build(terr,users->getOwner()->getMiniBuffer());
+        // check return value from literate.build().
+        if ((res & Literate::NO_LOGFILE)) {
+                WriteAlert(_("Build did not work!"),
+                           _("Missing log file:"), name);
+        } else if ((res & Literate::ERRORS)) {
+                users->getOwner()->getMiniBuffer()->Set(_("Done"));
+                // Insert all errors as errors boxes
+                insertErrors(terr);
+                
+                // Literate files should also be kept dirty if the literate 
+                // command run ends up with errors.
+        } else {
+                //no errors or any other things to think about so:
+                users->getOwner()->getMiniBuffer()->Set(_("Done"));
+                markNwClean();
+        }
+        // if we removed error insets before we ran Literate/Build or if we inserted
+        // error insets after we ran Literate/Build this must be run:
+       if (a || (res & Literate::ERRORS)){
+               users->redraw();
+               users->fitCursor();
+               users->updateScrollbar();
+       }
+       AllowInput();
+       PathPop(); // path to LaTeX file
+
+       return literate.getNumErrors();
+}
+
+
+// This should be enabled when the Chktex class is implemented. (Asger)
+// chktex should be run with these flags disabled: 3, 22, 25, 30, 38(?)
+// Other flags: -wall -v0 -x
+int Buffer::runChktex()
+{
+       if (!text) return 0;
+
+       ProhibitInput();
+
+       // get LaTeX-Filename
+       LString name = SpaceLess(ChangeExtension (filename, ".tex", true));
+       LString path = OnlyPath(filename);
+
+       LString org_path = path;
+       if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)) {
+               path = tmppath;  
+       }
+
+       PathPush(path); // path to LaTeX file
+       users->getOwner()->getMiniBuffer()->Set(_("Running chktex..."));
+
+       // Remove all error insets
+       bool a = removeAutoInsets();
+
+       // Generate the LaTeX file if neccessary
+       if (!isDviClean() || a) {
+               makeLaTeXFile(name, org_path, false);
+               markDviDirty();
+       }
+
+       TeXErrors terr;
+       Chktex chktex(lyxrc->chktex_command, name, filepath);
+       int res = chktex.run(terr); // run chktex
+
+       if (res == -1) {
+               WriteAlert(_("chktex did not work!"),
+                          _("Could not run with file:"), name);
+       } else if (res > 0) {
+               // Insert all errors as errors boxes
+               insertErrors(terr);
+       }
+
+       // if we removed error insets before we ran chktex or if we inserted
+       // error insets after we ran chktex, this must be run:
+       if (a || res){
+               users->redraw();
+               users->fitCursor();
+               users->updateScrollbar();
+       }
+       AllowInput();
+       PathPop(); // path to LaTeX file
+
+       return res;
+}
+
+
+extern void AllFloats(char, char);
+
+
+void Buffer::insertErrors(TeXErrors &terr)
+{
+       // Save the cursor position
+       LyXCursor cursor = text->cursor;
+
+       // Now traverse all the errors and insert them
+       bool firsterror = true;
+       bool more = true;
+
+       // This is drastic, but it's the only fix, I could find. (Asger)
+       AllFloats(1,0);
+       AllFloats(1,1);
+
+       while (more) {
+               LString errortext;
+               int errorrow = 0;
+
+               if (firsterror) {
+                       more = terr.getFirstError(&errorrow, &errortext);
+                       firsterror = false;
+               } else {
+                       more = terr.getNextError(&errorrow, &errortext);
+               }
+
+               if (!more)
+                       break;
+
+               // Insert error string for row number
+               int tmpid = -1; 
+               int tmppos = -1;
+
+               texrow.getIdFromRow(errorrow, tmpid, tmppos);
+
+               LyXParagraph* texrowpar;
+
+               if (tmpid == -1) {
+                       texrowpar = text->FirstParagraph();
+                       tmppos = 0;
+               } else {
+                       texrowpar = text->GetParFromID(tmpid);
+               }
+
+               if (texrowpar == 0)
+                       continue;
+
+               InsetError *new_inset = new InsetError(errortext);
+
+               text->SetCursorIntern(texrowpar, tmppos);
+               text->InsertInset(new_inset);
+               text->FullRebreak();
+       }
+       // Restore the cursor position
+       text->SetCursorIntern(cursor.par, cursor.pos);
+}
+
+
+void Buffer::setCursorFromRow (int row)
+{
+       int tmpid = -1; 
+       int tmppos = -1;
+
+       texrow.getIdFromRow(row, tmpid, tmppos);
+
+       LyXParagraph* texrowpar;
+
+       if (tmpid == -1) {
+               texrowpar = text->FirstParagraph();
+               tmppos = 0;
+       } else {
+               texrowpar = text->GetParFromID(tmpid);
+       }
+       text->SetCursor(texrowpar, tmppos);
+}
+
+
+void Buffer::RoffAsciiTable(FILE *file, LyXParagraph *par)
+{
+       LyXFont
+               font1 =  LyXFont(LyXFont::ALL_INHERIT),
+               font2;
+       Inset
+               *inset;
+       int
+               i,j,
+               cell = 0;
+       char
+               c;
+       LString
+               fname1,
+               fname2;
+       FILE
+               *fp,*fp2;
+       
+       fname1 = TmpFileName(LString(),"RAT1");
+       fname2 = TmpFileName(LString(),"RAT2");
+       if (!(fp=fopen(fname1.c_str(),"w"))) {
+               WriteAlert(_("LYX_ERROR:"),
+                          _("Cannot open temporary file:"), fname1);
+               return;
+       }
+       par->table->RoffEndOfCell(fp, -1);
+       for (i = 0; i < par->last; i++) {
+               c = par->GetChar(i);
+               if (par->table->IsContRow(cell)) {
+                       if (c == LYX_META_NEWLINE)
+                               cell++;
+                       continue;
+               }
+               font2 = par->GetFontSettings(i);
+               if (font1.latex() != font2.latex()) {
+                       if (font2.latex() != LyXFont::OFF)
+                               continue;
+               }
+               switch (c) {
+               case LYX_META_INSET:
+                       if ((inset = par->GetInset(i))) {
+                               if (!(fp2=fopen(fname2.c_str(),"w+"))) {
+                                       WriteAlert(_("LYX_ERROR:"),
+                                                  _("Cannot open temporary file:"), fname2);
+                                       fclose(fp);
+                                       remove(fname1.c_str());
+                                       return;
+                               }
+                               inset->Latex(fp2,-1);
+                               rewind(fp2);
+                               c = fgetc(fp2);
+                               while(!feof(fp2)) {
+                                       if (c == '\\')
+                                               fprintf(fp,"\\\\");
+                                       else
+                                               fputc(c,fp);
+                                       c = fgetc(fp2);
+                               }
+                               fclose(fp2);
+                       }
+                       break;
+               case LYX_META_NEWLINE:
+                       if (par->table->CellHasContRow(cell)>=0)
+                               par->RoffContTableRows(fp, i+1,cell);
+                       par->table->RoffEndOfCell(fp, cell);
+                       cell++;
+                       break;
+               case LYX_META_HFILL: 
+                       break;
+               case LYX_META_PROTECTED_SEPARATOR:
+                       break;
+               case '\\': 
+                       fprintf(fp, "\\\\");
+                       break;
+               default:
+                       if (c != '\0')
+                               fprintf(fp, "%c", c);
+                       else if (c == '\0')
+                               lyxerr.debug("RoffAsciiTable:"
+                                            " NULL char in structure.");
+                       break;
+               }
+       }
+       par->table->RoffEndOfCell(fp, cell);
+       fclose(fp);
+       LString cmd = lyxrc->ascii_roff_command + " >" + fname2;
+       cmd.subst("$$FName",fname1);
+       Systemcalls one(Systemcalls::System, cmd);
+       if (!(lyxerr.debugging(Error::ROFF))) {
+               remove(fname1.c_str());
+       }
+       if (!(fp=fopen(fname2.c_str(),"r"))) {
+               WriteFSAlert(_("Error! Can't open temporary file:"), fname2);
+               return;
+       }
+       // now output the produced file
+       fprintf(file, "\n\n");
+       c = fgetc(fp);
+       if (feof(fp))
+               WriteAlert(_("Error!"),
+                          _("Error executing *roff command on table"));
+       // overread leading blank lines
+       while(!feof(fp) && (c == '\n'))
+               c = fgetc(fp);
+       while(!feof(fp)) {
+               for(j=0; j<par->depth; j++)
+                       fprintf(file, "  ");
+               while(!feof(fp) && (c != '\n')) {
+                       fputc(c,file);
+                       c = fgetc(fp);
+               }
+               fputc('\n',file);
+               // overread trailing blank lines
+               while(!feof(fp) && (c == '\n'))
+                       c = fgetc(fp);
+       }
+       fclose(fp);
+       remove(fname2.c_str());
+}
+
+/// changed Heinrich Bauer, 23/03/98
+bool Buffer::isDviClean()
+{
+  if (lyxrc->use_tempdir)
+    return dvi_clean_tmpd;
+  else
+    return dvi_clean_orgd;
+}
+
+/// changed Heinrich Bauer, 23/03/98
+void Buffer::markDviClean()
+{
+  if (lyxrc->use_tempdir)
+    dvi_clean_tmpd = true;
+  else
+    dvi_clean_orgd = true;
+}
+
+/// changed Heinrich Bauer, 23/03/98
+void Buffer::markDviDirty()
+{
+  if (lyxrc->use_tempdir)
+    dvi_clean_tmpd = false;
+  else
+    dvi_clean_orgd = false;
+}
+
+void Buffer::update(signed char f)
+{
+       if (!users) return;
+       
+       users->getOwner()->updateLayoutChoice();
+
+       if (!text->selection && f > -3)
+               text->sel_cursor = text->cursor;
+       
+       FreeUpdateTimer();
+       text->FullRebreak();
+       users->update();
+
+       if (f != 3 && f != -3) {
+               users->fitCursor();
+               users->updateScrollbar();
+       }
+
+       if (f==1 || f==-1) {
+               if (isLyxClean()) {
+                       markDirty();
+                       users->getOwner()->getMiniBuffer()->setTimer(4);
+               } else {
+                       markDirty();
+               }
+       }
+}
+
+
+void Buffer::validate(LaTeXFeatures &features)
+{
+       LyXParagraph *par = paragraph;
+        LyXTextClass *tclass = lyxstyle.TextClass(params.textclass);
+    
+        // AMS Style is at document level
+    
+        features.amsstyle = (params.use_amsmath ||
+                            tclass->provides_amsmath);
+    
+       while (par) {
+               // We don't use "lyxerr.debug" because of speed. (Asger)
+               if (lyxerr.debugging(Error::LATEX))
+                       lyxerr.print(LString("Paragraph: ") + long(par));
+
+               // Now just follow the list of paragraphs and run
+               // validate on each of them.
+               par->validate(features);
+
+               // and then the next paragraph
+               par = par->next;
+       }
+
+       // the bullet shapes are buffer level not paragraph level
+       // so they are tested here
+       for (int i = 0; i < 4; ++i) {
+               if (params.user_defined_bullets[i] != ITEMIZE_DEFAULTS[i]) {
+                       int font = params.user_defined_bullets[i].getFont();
+                       if (font == 0) {
+                               int c = params.user_defined_bullets[i].getCharacter();
+                               if (c == 16
+                                  || c == 17
+                                  || c == 25
+                                  || c == 26
+                                  || c == 31) {
+                                       features.latexsym = true;
+                               }
+                       }
+                       if (font == 1) {
+                               features.amssymb = true;
+                       }
+                       else if ((font >= 2 && font <=5)) {
+                               features.pifont = true;
+                       }
+               }
+       }
+       
+       if (lyxerr.debugging(Error::LATEX)) {
+               features.showStruct(params);
+       }
+}
+
+
+void Buffer::setPaperStuff()
+{
+       char c1, c2;
+       params.papersize = PAPER_DEFAULT;
+       c1 = params.paperpackage;
+       if (c1 == PACKAGE_NONE) {
+               c2 = params.papersize2;
+               if (c2 == VM_PAPER_USLETTER)
+                       params.papersize = PAPER_USLETTER;
+               else if (c2 == VM_PAPER_USLEGAL)
+                       params.papersize = PAPER_LEGALPAPER;
+               else if (c2 == VM_PAPER_USEXECUTIVE)
+                       params.papersize = PAPER_EXECUTIVEPAPER;
+               else if (c2 == VM_PAPER_A3)
+                       params.papersize = PAPER_A3PAPER;
+               else if (c2 == VM_PAPER_A4)
+                       params.papersize = PAPER_A4PAPER;
+               else if (c2 == VM_PAPER_A5)
+                       params.papersize = PAPER_A5PAPER;
+               else if ((c2 == VM_PAPER_B3) || (c2 == VM_PAPER_B4) ||
+                        (c2 == VM_PAPER_B5))
+                       params.papersize = PAPER_B5PAPER;
+       } else if ((c1 == PACKAGE_A4) || (c1 == PACKAGE_A4WIDE) ||
+                  (c1 == PACKAGE_WIDEMARGINSA4))
+               params.papersize = PAPER_A4PAPER;
+}
+
+
+void Buffer::setOldPaperStuff()
+{
+       char c;
+
+       c = params.papersize = params.papersize2;
+       params.papersize2 = VM_PAPER_DEFAULT;
+       params.paperpackage = PACKAGE_NONE;
+       if (c == OLD_PAPER_A4PAPER)
+               params.papersize2 = VM_PAPER_A4;
+       else if (c == OLD_PAPER_A4)
+               params.paperpackage = PACKAGE_A4;
+       else if (c == OLD_PAPER_A4WIDE)
+               params.paperpackage = PACKAGE_A4WIDE;
+       else if (c == OLD_PAPER_WIDEMARGINSA4)
+               params.paperpackage = PACKAGE_WIDEMARGINSA4;
+       else if (c == OLD_PAPER_USLETTER)
+               params.papersize2 = VM_PAPER_USLETTER;
+       else if (c == OLD_PAPER_A5PAPER)
+               params.papersize2 = VM_PAPER_A5;
+       else if (c == OLD_PAPER_B5PAPER)
+               params.papersize2 = VM_PAPER_B5;
+       else if (c == OLD_PAPER_EXECUTIVEPAPER)
+               params.papersize2 = VM_PAPER_USEXECUTIVE;
+       else if (c == OLD_PAPER_LEGALPAPER)
+               params.papersize2 = VM_PAPER_USLEGAL;
+       setPaperStuff();
+}
+
+
+void Buffer::insertInset(Inset *inset, LString const &lout,
+                        bool no_table)
+{
+       // check for table/list in tables
+       if (no_table && text->cursor.par->table){
+               WriteAlert(_("Impossible Operation!"),
+                          _("Cannot insert table/list in table."),
+                          _("Sorry."));
+               return;
+       }
+       // not quite sure if we want this...
+       text->SetCursorParUndo();
+       text->FreezeUndo();
+       
+       BeforeChange();
+       if (!lout.empty()) {
+               update(-2);
+               text->BreakParagraph();
+               update(-1);
+               
+               if (text->cursor.par->Last()) {
+                       text->CursorLeft();
+                       
+                       text->BreakParagraph();
+                       update(-1);
+               }
+
+               int lay = lyxstyle.NumberOfLayout(params.textclass, lout);
+               if (lay == -1) // layout not found
+                       // use default layout "Standard" (0)
+                       lay = 0;
+               
+               text->SetLayout(lay);
+               
+               text->SetParagraph(0, 0,
+                                  0, 0,
+                                  VSpace(VSpace::NONE), VSpace(VSpace::NONE),
+                                  LYX_ALIGN_LAYOUT, 
+                                  LString(),
+                                  0);
+               update(-1);
+               
+               text->current_font.setLatex(LyXFont::OFF);
+       }
+       
+       text->InsertInset(inset);
+       update(-1);
+
+// Commenting these two lines fixes the problem with new display inset
+// inside a paragraph, not sure why. (ale 971117)
+//     if (inset->Display())
+//             text->CursorRight();
+       
+       text->UnFreezeUndo();   
+}
+
+
+// Open and lock an updatable inset
+void Buffer::open_new_inset(UpdatableInset* new_inset)
+{
+       BeforeChange();
+       text->FinishUndo();
+       insertInset(new_inset);
+       text->CursorLeft();
+       update(1);
+       new_inset->Edit(0,0);
+}
+
+
+/* This function should be in Buffer because it's a buffer's property (ale) */
+LString Buffer::getIncludeonlyList(char delim)
+{
+       LString list;
+       LyXParagraph *par = paragraph;
+       int pos;
+       Inset* inset;
+       while (par){
+               pos = -1;
+               while ((inset = par->ReturnNextInsetPointer(pos))){
+                       if (inset->LyxCode()==Inset::INCLUDE_CODE) {
+                               InsetInclude *insetinc = (InsetInclude*)inset;
+                               if (insetinc->isInclude() 
+                                   && insetinc->isNoLoad()) {
+                                       if (!list.empty())
+                                               list += delim;
+                                       list += ChangeExtension(insetinc->getContents(), LString(), true);
+                               }
+                       }
+                       pos++;
+               } 
+               par = par->next;
+       }
+       lyxerr.debug(LString("Includeonly(") + list + ')');
+       return list;
+}
+
+
+/* This is also a buffer property (ale) */ 
+LString Buffer::getReferenceList(char delim)
+{
+       /// if this is a child document and the parent is already loaded
+       /// Use the parent's list instead  [ale990407]
+       if (!params.parentname.empty() && bufferlist.exists(params.parentname)) {
+               Buffer *tmp = bufferlist.getBuffer(params.parentname);
+               if (tmp)
+                 return tmp->getReferenceList(delim);
+       }
+
+       LyXParagraph *par = paragraph;
+       int pos;
+       Inset* inset;
+        LString list;
+       while (par){
+               pos = -1;
+               while ((inset = par->ReturnNextInsetPointer(pos))){     
+                       for (int i = 0; i < inset->GetNumberOfLabels(); i++) {
+                               if (!list.empty())
+                                       list += delim;
+                               list += inset->getLabel(i);
+                       }
+                       pos++;
+               } 
+               par = par->next;
+       }
+       lyxerr.debug(LString("References(") + list + LString(')'));
+       return list;
+}
+
+
+/* This is also a buffer property (ale) */ 
+LString Buffer::getBibkeyList(char delim)
+{
+       /// if this is a child document and the parent is already loaded
+       /// Use the parent's list instead  [ale990412]
+        if (!params.parentname.empty() && bufferlist.exists(params.parentname)) {
+               Buffer *tmp = bufferlist.getBuffer(params.parentname);
+               if (tmp)
+                       return tmp->getBibkeyList(delim);
+       }
+
+       LString bibkeys;
+       LyXParagraph *par = paragraph;
+       while (par) {
+               if (par->bibkey) {
+                       if (!bibkeys.empty())
+                               bibkeys += delim;
+                       bibkeys += par->bibkey->getContents();
+               }
+               par = par->next;
+       }
+
+       // Might be either using bibtex or a child has bibliography
+       if (bibkeys.empty()) {
+               par = paragraph;
+               while (par) {
+                       Inset *inset;
+                       int pos = -1;
+
+                       // Search for Bibtex or Include inset
+                       while ((inset = par->ReturnNextInsetPointer(pos))) {
+                               if (inset-> LyxCode()==Inset::BIBTEX_CODE) {
+                                       if (!bibkeys.empty())
+                                               bibkeys += delim;
+                                       bibkeys += ((InsetBibtex*)inset)->getKeys();
+                               } else if (inset-> LyxCode()==Inset::INCLUDE_CODE) {
+                                       LString bk = ((InsetInclude*)inset)->getKeys();
+                                       if (!bk.empty()) {
+                                               if (!bibkeys.empty())
+                                                       bibkeys += delim;
+                                               bibkeys += bk;
+                                       }
+                               }
+                               pos++;
+                       }
+                       par = par->next;
+               }
+       }
+       lyxerr.debug(LString("Bibkeys(") + bibkeys + LString(')'));
+       return bibkeys;
+}
+
+
+/* This is also a buffer property (ale) */
+// Not so sure about that. a goto Label function can not be buffer local, just
+// think how this will work in a multiwindo/buffer environment, all the
+// cursors in all the views showing this buffer will move. (Lgb)
+// OK, then no cursor action should be allowed in buffer. (ale)
+bool Buffer::gotoLabel(const LString &label)
+
+{
+        LyXParagraph *par = paragraph;
+        int pos;
+        Inset* inset;
+       LString list;
+        while (par) {
+                pos = -1;
+                while ((inset = par->ReturnNextInsetPointer(pos))){     
+                        for (int i = 0; i < inset->GetNumberOfLabels(); i++) {
+                               if (label==inset->getLabel(i)) {
+                                       BeforeChange();
+                                       text->SetCursor(par, pos);
+                                       text->sel_cursor = text->cursor;
+                                       update(0);
+                                       return true;
+                               }
+                       }
+                        pos++;
+                } 
+                par = par->next;
+       }
+       return false;
+}
+
+
+bool Buffer::isDepClean(LString const & name) const
+{
+       DEPCLEAN* item = dep_clean;
+       while (item && item->master != name)
+               item = item->next;
+       if (!item) return true;
+       return item->clean;
+}
+
+
+void Buffer::markDepClean(LString const & name)
+{
+       if (!dep_clean) {
+               dep_clean = new DEPCLEAN;
+               dep_clean->clean = true;
+               dep_clean->master = name;
+               dep_clean->next = NULL;
+       } else {
+               DEPCLEAN* item = dep_clean;
+               while (item && item->master != name)
+                       item = item->next;
+               if (item) {
+                       item->clean = true;
+               } else {
+                       item = new DEPCLEAN;
+                       item->clean = true;
+                       item->master = name;
+                       item->next = NULL;;
+               }
+       }
+       //return false; // why use that in a void method??
+}
diff --git a/src/buffer.h b/src/buffer.h
new file mode 100644 (file)
index 0000000..efcfea6
--- /dev/null
@@ -0,0 +1,468 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor         
+*          Copyright (C) 1995 Matthias Ettrich
+*
+*           This file is Copyleft (C) 1996
+*           Lars Gullik Bjønnes
+*
+*======================================================*/
+// Change Log:
+// ===========
+// 23/03/98   Heinrich Bauer (heinrich.bauer@t-mobil.de)
+// Spots marked "changed Heinrich Bauer, 23/03/98" modified due to the
+// following bug: dvi file export did not work after printing (or previewing)
+// and vice versa as long as the same file was concerned. This happened
+// every time the LyX-file was left unchanged between the two actions mentioned
+// above.
+
+#ifndef _BUFFER_H_
+#define _BUFFER_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "undo.h"
+#include "BufferView.h"
+#include "lyxvc.h"
+#include "bufferparams.h"
+#include "texrow.h"
+#include "lyxtext.h"
+
+class LyXRC;
+class TeXErrors;
+class LaTeXFeatures;
+
+extern void updateAllVisibleBufferRelatedPopups();
+extern void WarnReadonly();
+
+///
+struct DEPCLEAN {
+       ///
+       bool clean;
+       ///
+       LString master;
+       ///
+       DEPCLEAN *next;
+};
+
+/** The buffer object.
+  The is is the buffer object. It contains all the informations about
+  a document loaded into LyX. I am not sure if the class is complete or
+  minimal, probably not.
+  */
+class Buffer {
+public:
+       /**@name Constructors and destructor */
+       //@{
+       ///
+       Buffer(LString const & file, LyXRC * lyxrc = NULL, bool b= false);
+       
+       ///
+       ~Buffer();
+       //@}
+
+       /**@name Methods */
+       //@{
+
+       /** save the buffer's parameters as user default
+         This function saves a file user_lyxdir/templates/defaults.lyx 
+         which parameters are those of the current buffer. This file
+         is used as a default template when creating a new
+         file. Returns true on success.
+         */
+       bool saveParamsAsDefaults();
+
+       /// should be changed to work for a list.
+       void resize()
+       {
+               if (users) {
+                       users->resize();
+               } else if (text) {
+                       delete text;
+                       text = 0;
+               }
+       }
+
+       /// Update window titles of all users
+       void updateTitles();
+
+       /// Reset autosave timers for all users
+       void resetAutosaveTimers();
+
+       /** Adds the BufferView to the users list.
+         Later this func will insert the BufferView into a real list,
+         not just setting a pointer.
+         */
+       void addUser(BufferView *u) { users = u; }
+
+       /** Removes the BufferView from the users list.
+         Since we only can have one at the moment, we just reset it.
+         */
+       void delUser(BufferView *){ users = 0; }
+
+       ///
+       void update(signed char f);
+
+       ///
+       void redraw(void){
+              users->redraw(); 
+              users->fitCursor(); 
+              users->updateScrollbar(); }
+
+        /// Open and lock an updatable inset
+        void open_new_inset(UpdatableInset*);
+
+       ///
+       void loadAutoSaveFile();
+       
+       /** Reads a file. 
+           Returns false if it fails.
+           If par is given, the file is inserted. */
+       bool readFile(LyXLex &, LyXParagraph *par = 0);
+       
+       /** Reads a file without header.
+           Returns false, if file is not completely read.
+           If par is given, the file is inserted. */
+       bool readLyXformat2(LyXLex &,LyXParagraph *par = 0);
+
+       /// Inserts a lyx file at cursor position. Returns false if it fails.
+       bool insertLyXFile(LString const & filename);
+
+       /// Write file. Returns false if unsuccesful.
+       bool writeFile(LString const &, bool);
+       
+       ///
+       void writeFileAscii(LString const & , int);
+       
+       ///
+       void makeLaTeXFile(LString const & filename,
+                          LString const & original_path,
+                          bool nice, bool only_body = false);
+
+       ///
+       int runLaTeX();
+
+        ///
+        int runLiterate();
+
+        ///
+        int buildProgram();
+
+       ///
+       int runChktex();
+
+       ///
+       void makeLinuxDocFile(LString const & filename, int column);
+       ///
+       void makeDocBookFile(LString const & filename, int column);
+
+       /// returns the main language for the buffer (document)
+       LString GetLanguage() const {
+               return params.language;
+       }
+       
+       ///
+       bool isLyxClean() const { return lyx_clean; }
+       
+       /// changed Heinrich Bauer, 23/03/98
+       bool isDviClean();
+       
+        ///
+        bool isNwClean() const { return nw_clean; }
+       
+       ///
+       bool isBakClean() const { return bak_clean; }
+       
+       ///
+       bool isDepClean(LString const & name) const;
+       
+       ///
+       void markLyxClean() { 
+               if (!lyx_clean) {
+                       lyx_clean = true; 
+                       updateTitles();
+               }
+               // if the .lyx file has been saved, we don't need an
+               // autosave 
+               bak_clean = true;
+       }
+
+       /// changed Heinrich Bauer, 23/03/98
+       void markDviClean();
+       
+        ///
+        void markNwClean() { nw_clean = true; }
+       
+       ///
+       void markBakClean() { bak_clean = true; }
+       
+       ///
+       void markDepClean(LString const & name);
+       
+       ///
+       void markDviDirty();
+       
+        ///
+        void markNwDirty() { nw_clean = false; }
+       
+       ///
+       void markDirty() {
+               if (lyx_clean) {
+                       lyx_clean = false;
+                       updateTitles();
+               }
+               dvi_clean_tmpd = false;
+               dvi_clean_orgd = false;
+                nw_clean = false;
+               bak_clean = false;
+               DEPCLEAN* tmp = dep_clean;
+               while (tmp) {
+                       tmp->clean = false;
+                       tmp = tmp->next;
+               }
+       }
+
+       ///
+       LString getFileName() const { return filename; }
+
+       /// Change name of buffer. Updates "read-only" flag.
+       void setFileName(LString const & newfile);
+
+       /// Name of the document's parent
+       void setParentName(LString const &);
+
+       /// Is buffer read-only?
+       bool isReadonly() { return read_only; }
+
+       /// Set buffer read-only flag
+       void setReadonly(bool flag = true) 
+       {
+               if (read_only != flag) {
+                       read_only = flag; 
+                       updateTitles();
+                       updateAllVisibleBufferRelatedPopups();
+               }
+               if (read_only) {
+                       WarnReadonly();
+               }
+       }
+
+       /// returns true if the buffer contains a LaTeX document
+       bool isLatex();
+       /// returns true if the buffer contains a LinuxDoc document
+       bool isLinuxDoc();
+       /// returns true if the buffer contains a DocBook document
+       bool isDocBook();
+       /// returns true if the buffer contains either a LinuxDoc or DocBook document
+       bool isSGML();
+        /// returns true if the buffer contains a Wed document
+        bool isLiterate();
+
+       ///
+       void setPaperStuff();
+
+       ///
+       void setOldPaperStuff();
+       
+       /** Validate a buffer for LaTeX.
+         This validates the buffer, and returns a struct for use by
+         makeLaTeX and others. Its main use is to figure out what commands
+         and packages need to be included in the LaTeX file. It (should)
+         also check that the needed constructs are there (i.e. that the \refs
+         points to coresponding \labels). It should perhaps inset "error"
+         insets to help the user correct obvious mistakes.
+        */
+       void validate(LaTeXFeatures&); //the correct parameters to be
+                                      //included later 
+
+       /** Insert an inset into the buffer
+         Insert inset into buffer, placing it in a layout of lout,
+         if no_table make sure that it doesn't end up in a table. */
+       void insertInset(Inset *, LString const &lout=LString(), 
+                        bool no_table = false);
+
+        ///
+        void setCursorFromRow (int);
+
+       ///
+       LString getIncludeonlyList(char delim=',');
+       ///
+       LString getReferenceList(char delim='|');
+       ///
+       LString getBibkeyList(char delim='|');
+       ///
+       bool gotoLabel(const LString&);
+
+       /// removes all autodeletable insets
+       bool removeAutoInsets();
+
+       /** This will clearly have to change later. Later we can have more
+         than one user per buffer. */
+       BufferView* getUser() const { return users; }
+
+        //@}
+
+       /// Does this mean that this is buffer local?
+        UndoStack undostack;
+       
+       /// Does this mean that this is buffer local? 
+        UndoStack redostack;
+       
+       ///
+       BufferParams params;
+       
+       /** is a list of paragraphs.
+        */
+       LyXParagraph *paragraph;
+       
+       /** This holds the mapping between buffer paragraphs and screen rows.
+           Should be moved to BufferView. (Asger)
+        */
+       LyXText *text;
+
+       ///
+       UpdatableInset* the_locking_inset;
+
+       /// RCS object
+       LyXVC lyxvc;
+
+       /// where the temporaries go if we want them
+       LString tmppath;
+
+       ///
+       LString filepath;
+
+       /** While writing as LaTeX, tells whether we are
+           doing a 'nice' LaTeX file */
+       bool niceFile;
+protected:
+       ///
+        void InsetUnlock();
+       
+       ///
+        inline void InsetSleep();
+       
+       ///
+        inline void InsetWakeup();
+       
+       ///
+        bool inset_slept;
+       
+       ///
+        int  slx;
+       ///
+       int sly;
+private:
+       ///
+       void insertErrors(TeXErrors &);
+       
+        ///
+        void linuxDocHandleFootnote(FILE *file,LyXParagraph* &par, int const depth);
+        ///
+       void DocBookHandleCaption(FILE *file, LString &inner_tag,
+                                 int const depth, int desc_on,
+                                 LyXParagraph* &par);
+        ///
+       void DocBookHandleFootnote(FILE *file,LyXParagraph* &par, int const depth);
+       ///
+        void sgmlOpenTag(FILE * file,int depth,LString & latexname);
+        ///
+        void sgmlCloseTag(FILE * file,int depth,LString & latexname);
+       ///
+       void LinuxDocError(LyXParagraph *par, int pos, char const *message);
+        ///
+       void SimpleLinuxDocOnePar(FILE *file, LyXParagraph *par, int desc_on, int const depth);
+        ///
+       void SimpleDocBookOnePar(LString &file, LString &extra, LyXParagraph *par, int & desc_on, int const depth);
+
+       /// LinuxDoc.
+       void push_tag(FILE *file, char const *tag, int& pos, char stack[5][3]);
+       
+       /// LinuxDoc.
+       void pop_tag(FILE *file, char const * tag, int& pos, char stack[5][3]);
+
+       ///
+       void RoffAsciiTable(FILE *file, LyXParagraph *par);
+
+       /// is save needed
+       bool lyx_clean;
+       
+       /// is autosave needed
+       bool bak_clean;
+       
+       /// do we need to run LaTeX, changed 23/03/98, Heinrich Bauer
+       /// We have to distinguish between TeX-runs executed in the original
+       /// directory (in which the original LyX-file resides) and TeX-runs
+       /// executed in a temporary directory. The first situation is valid
+       /// for a dvi-export, the latter one for printing or previewing.
+       bool dvi_clean_orgd;
+       bool dvi_clean_tmpd;
+
+        /// do we need to run weave/tangle
+        bool nw_clean;
+
+       /// is regenerating .tex necessary
+       DEPCLEAN *dep_clean;
+
+       /// buffer is r/o
+       bool read_only;
+
+       /// name of the file the buffer is associated with.
+       LString filename;
+
+       /// Format number of buffer
+       float format;
+       
+       /** A list of views using this buffer.
+         Why not keep a list of the BufferViews that use this buffer?
+
+         At least then we don't have to do a lot of magic like:
+         buffer->lyx_gui->bufferview->updateLayoutChoice. Just ask each
+         of the buffers in the list of users to do a updateLayoutChoice.
+         */
+       BufferView *users;
+
+       ///
+       friend class BufferList;
+       ///
+        friend class BufferView;
+
+       /// Used when typesetting to place errorboxes.
+       TexRow texrow;
+};
+
+
+inline  
+void Buffer::InsetSleep()
+{
+    if (the_locking_inset && !inset_slept) {
+       the_locking_inset->GetCursorPos(slx, sly);
+        the_locking_inset->InsetUnlock();
+       inset_slept = true;
+    }
+}
+
+
+inline  
+void Buffer::InsetWakeup()
+{
+    if (the_locking_inset && inset_slept) {
+       the_locking_inset->Edit(slx, sly);
+       inset_slept = false;
+    }  
+}
+
+
+inline  
+void Buffer::setParentName(LString const &name)
+{
+    params.parentname = name;    
+}
+
+
+#endif
diff --git a/src/bufferlist.C b/src/bufferlist.C
new file mode 100644 (file)
index 0000000..a38e4bd
--- /dev/null
@@ -0,0 +1,675 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Word Processor
+ *
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team. 
+ *
+ *           This file is Copyleft (C) 1996-1998
+ *           Lars Gullik Bjønnes
+ *
+ *======================================================
+ */
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include <config.h>
+#include <sys/types.h>
+#include <utime.h>
+#include "bufferlist.h"
+#include "lyx_main.h"
+#include "minibuffer.h"
+#include "FileInfo.h"
+#include "filetools.h"
+#include "lyx_gui_misc.h"
+#include "lastfiles.h"
+#include "error.h"
+#include "lyxrc.h"
+#include "lyxscreen.h"
+#include "lyxtext.h"
+#include "lyx_cb.h"
+#include "gettext.h"
+
+//     $Id: bufferlist.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $        
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: bufferlist.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+extern BufferView *current_view;
+extern MiniBuffer *minibuffer;
+extern void SmallUpdate(signed char);
+extern void BeforeChange();
+extern int RunLinuxDoc(int, LString const &);
+
+//
+// Class BufferStorage
+//
+
+BufferStorage::BufferStorage()
+{
+       // Initialize the buffer array
+       for (int i=NUMBER_OF_BUFFERS-1; i >=0; i--) {
+               buffer[i] = 0;
+       }       
+}
+
+
+bool BufferStorage::isEmpty()
+{
+       for (int i=NUMBER_OF_BUFFERS-1; i >=0; i--) {
+               if (buffer[i]) return false;
+       }
+       return true;
+}
+
+
+void BufferStorage::release(Buffer* buf)
+{
+       int i=0;
+       for (i=0; i<NUMBER_OF_BUFFERS; i++)
+               if (buffer[i] == buf) break;
+       Buffer *tmpbuf = buffer[i];
+       buffer[i] = 0;
+       delete tmpbuf;
+}
+
+
+Buffer* BufferStorage::newBuffer(LString const &s,
+                                LyXRC *lyxrc,
+                                bool ronly)
+{
+       int i=0;
+       while (i < NUMBER_OF_BUFFERS - 1
+              && buffer[i]) i++;
+       buffer[i] = new Buffer(s, lyxrc, ronly);
+       buffer[i]->params.useClassDefaults();
+       lyxerr.debug(LString("Assigning to buffer ") + i, Error::ANY);
+       return buffer[i];
+}
+
+
+//
+// Class BufferStrorage_Iter
+//
+
+Buffer* BufferStorage_Iter::operator() ()
+{
+       int i=0;
+       for (i=index; i < BufferStorage::NUMBER_OF_BUFFERS; i++) {
+               if (cs->buffer[i]) {
+                       index = i+1;
+                       return cs->buffer[i];
+               }
+       }
+       return 0;       
+}
+
+
+Buffer* BufferStorage_Iter::operator[] (int a)
+{
+       // a is >=1
+       if (a<=0) return 0;
+       
+       int i=0;
+       while (a--) {
+               while(!cs->buffer[i++]);
+       }
+       if (i-1 < BufferStorage::NUMBER_OF_BUFFERS)
+               return cs->buffer[i-1];
+       return 0;       
+}
+
+
+//
+// Class BufferList
+//
+BufferList::BufferList()
+{
+       _state = BufferList::OK;
+}
+
+
+BufferList::~BufferList()
+{
+       // I am sure something should be done here too.
+}
+
+
+bool BufferList::isEmpty()
+{
+       return bstore.isEmpty();
+}
+
+extern void MenuWrite(Buffer*);
+
+bool BufferList::QwriteAll()
+{
+        bool askMoreConfirmation = false;
+        LString unsaved;
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       while ((b=biter())) {
+               if (!b->isLyxClean()) {
+                       switch(AskConfirmation(_("Changes in document:"),
+                                              MakeDisplayPath(b->filename,50),
+                                              _("Save document?"))) {
+                       case 1: // Yes
+                               MenuWrite(b);
+                               break;
+                       case 2: // No
+                               askMoreConfirmation = true;
+                               unsaved += MakeDisplayPath(b->filename,50);
+                               unsaved += "\n";
+                                break;
+                       case 3: // Cancel
+                               return false;
+                       }
+               }
+       }
+        if (askMoreConfirmation &&
+            lyxrc->exit_confirmation &&
+            !AskQuestion(_("Some documents were not saved:"),
+                         unsaved, _("Exit anyway?"))) {
+                return false;
+        }
+
+        return true;
+}
+
+
+// Should probably be moved to somewhere else: BufferView? LyXView?
+bool BufferList::write(Buffer *buf, bool makeBackup)
+{
+       minibuffer->Set(_("Saving document"),
+                       MakeDisplayPath(buf->filename),"...");
+
+       // We don't need autosaves in the immediate future. (Asger)
+       buf->resetAutosaveTimers();
+
+       // make a backup
+       if (makeBackup) {
+               LString s = buf->filename + '~';
+               // Rename is the wrong way of making a backup,
+               // this is the correct way.
+               /* truss cp fil fil2:
+                  lstat("LyXVC3.lyx", 0xEFFFF898)                 Err#2 ENOENT
+                  stat("LyXVC.lyx", 0xEFFFF688)                   = 0
+                  open("LyXVC.lyx", O_RDONLY)                     = 3
+                  open("LyXVC3.lyx", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 4
+                  fstat(4, 0xEFFFF508)                            = 0
+                  fstat(3, 0xEFFFF508)                            = 0
+                  read(3, " # T h i s   f i l e   w".., 8192)     = 5579
+                  write(4, " # T h i s   f i l e   w".., 5579)    = 5579
+                  read(3, 0xEFFFD4A0, 8192)                       = 0
+                  close(4)                                        = 0
+                  close(3)                                        = 0
+                  chmod("LyXVC3.lyx", 0100644)                    = 0
+                  lseek(0, 0, SEEK_CUR)                           = 46440
+                  _exit(0)
+                */
+
+               // Should proabaly have some more error checking here.
+               // Should be cleaned up in 0.13, at least a bit.
+               // Doing it this way, also makes the inodes stay the same.
+               // This is still not a very good solution, in particular we
+               // might loose the owner of the backup.
+               FileInfo finfo(buf->filename);
+               if (finfo.exist()) {
+                       mode_t fmode = finfo.getMode();
+
+                       struct utimbuf *times =
+                               (struct utimbuf*)new char[sizeof(struct utimbuf)];
+                       times->actime = finfo.getAccessTime();
+                       times->modtime = finfo.getModificationTime();
+                       long blksize = finfo.getBlockSize();
+                       lyxerr.debug(LString("BlockSize: ") + int(blksize));
+                       FilePtr fin(buf->filename,FilePtr::read);
+                       FilePtr fout(s,FilePtr::truncate);
+                       if (fin() && fout()) {
+                               char * cbuf = new char[blksize+1];
+                               size_t c_read = 0;
+                               size_t c_write = 0;
+                               do {
+                                       c_read = fread(cbuf, 1, blksize, fin);
+                                       if (c_read != 0)
+                                               c_write =
+                                                       fwrite(cbuf, 1, c_read, fout);
+                               } while (c_read);
+                               fin.close();
+                               fout.close();
+                               chmod(s.c_str(), fmode);
+                               
+                               if (utime(s.c_str(), times)) {
+                                       lyxerr.print("utime error.");
+                               }
+                               delete [] cbuf;
+                       } else {
+                               lyxerr.print("LyX was not able to make backupcopy. Beware.");
+                       }
+                       delete[] times;
+               }
+       }
+       
+       if (buf->writeFile(buf->filename,false)) {
+               buf->markLyxClean();
+
+               minibuffer->Set(_("Document saved as"),
+                               MakeDisplayPath(buf->filename));
+
+               // now delete the autosavefile
+               LString a = OnlyPath(buf->filename);
+               a += '#';
+               a += OnlyFilename(buf->filename);
+               a += '#';
+               FileInfo fileinfo(a);
+               if (fileinfo.exist()) {
+                       if (remove(a.c_str()) != 0) {
+                               WriteFSAlert(_("Could not delete "
+                                              "auto-save file!"), a);
+                       }
+               }
+       } else {
+               // Saving failed, so backup is not backup
+               if (makeBackup) {
+                       LString s = buf->filename + '~';
+                       rename(s.c_str(), buf->filename.c_str());
+               }
+               minibuffer->Set(_("Save failed!"));
+               return false;
+       }
+
+       return true;
+}
+
+
+void BufferList::closeAll()
+{
+       _state = BufferList::CLOSING;
+       
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       while ((b=biter())) {
+               close(b);
+       }
+       _state = BufferList::OK;
+}
+
+
+void BufferList::resize()
+{
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       while ((b=biter())) {
+               b->resize();
+       }
+}
+
+
+bool BufferList::close(Buffer *buf)
+{
+        buf->InsetUnlock();
+       
+       if (buf->paragraph && !buf->isLyxClean() && !quitting) {
+               ProhibitInput();
+                switch(AskConfirmation(_("Changes in document:"),
+                              MakeDisplayPath(buf->filename,50),
+                                      _("Save document?"))){
+               case 1: // Yes
+                       if (write(buf)) {
+                               lastfiles->newFile(buf->filename);
+                       } else {
+                               AllowInput();
+                               return false;
+                       }
+                        break;
+               case 3: // Cancel
+                        AllowInput();
+                        return false;
+                }
+               AllowInput();
+       }
+
+       bstore.release(buf);
+       return true;
+}
+
+
+void BufferList::makePup(int pup)
+       /* This should be changed to return a char const *const
+          in the same way as for lastfiles.[hC]
+          */
+{
+       int ant=0;
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       while ((b=biter())) {
+               LString relbuf = MakeDisplayPath(b->filename,30);
+               fl_addtopup(pup, relbuf.c_str());
+               ant++;
+       }
+       if (ant == 0) fl_addtopup(pup,_("No Documents Open!%t"));
+}
+
+
+Buffer* BufferList::first()
+{
+       BufferStorage_Iter biter(bstore);
+       return biter();
+}
+
+
+Buffer* BufferList::getBuffer(int choice)
+{
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       b = biter[choice];
+           
+       // Be careful, this could be 0.    
+       return b;
+}
+
+
+void BufferList::updateInset(Inset *inset, bool mark_dirty)
+{
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       while ((b=biter())) {
+               if (b->text && b->text->UpdateInset(inset)) {
+                       if (mark_dirty)
+                               b->markDirty();
+                       break;
+               }
+       }
+}
+
+
+int BufferList::unlockInset(UpdatableInset *inset)
+{
+       if (!inset) return 1;
+       
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       while ((b=biter())) {
+               if (b->the_locking_inset == inset) {
+                       b->InsetUnlock();
+                       return 0;
+               }
+       }
+       return 1;
+}
+
+
+void BufferList::updateIncludedTeXfiles(LString const & mastertmpdir)
+{
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       while ((b=biter())) {
+               if (!b->isDepClean(mastertmpdir)) {
+                       LString writefile = mastertmpdir;
+                       writefile += '/';
+                       writefile += ChangeExtension(b->getFileName(), ".tex", true);
+                       b->makeLaTeXFile(writefile,mastertmpdir,false,true);
+                       b->markDepClean(mastertmpdir);
+               }
+       }
+}
+
+
+void BufferList::emergencyWriteAll()
+{
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       while ((b=biter())) {
+               if (!b->isLyxClean()) {
+                       bool madeit=false;
+                       
+                       lyxerr.print(_("lyx: Attempting to save"
+                                     " document ")
+                                     + b->filename
+                                     + _(" as..."));
+                       
+                       for (int i=0; i<3 && !madeit; i++) {
+                               LString s;
+                               
+                               // We try to save three places:
+                               // 1) Same place as document.
+                               // 2) In HOME directory.
+                               // 3) In "/tmp" directory.
+                               if (i==0) {
+                                       s = b->filename;
+                               } else if (i==1) {
+                                       s = AddName(getEnvPath("HOME"),
+                                                   b->filename);
+                               } else { // MakeAbsPath to prepend the current drive letter on OS/2
+                                       s = AddName(MakeAbsPath("/tmp/"),
+                                                   b->filename);
+                               }
+                               s += ".emergency";
+                               
+                               lyxerr.print(LString("  ") + (i+1) + ") " + s);
+                               
+                               if (b->writeFile(s,true)) {
+                                       b->markLyxClean();
+                                       lyxerr.print(_("  Save seems successful. Phew."));
+                                       madeit = true;
+                               } else if (i != 2) {
+                                       lyxerr.print(_("  Save failed! Trying..."));
+                               } else {
+                                       lyxerr.print(_("  Save failed! Bummer. Document is lost."));
+                               }
+                       }
+               }
+       }
+}
+
+
+Buffer* BufferList::readFile(LString const & s, bool ronly)
+{
+       Buffer *b = bstore.newBuffer(s, lyxrc, ronly);
+
+       LString ts = s;
+       LString e = OnlyPath(s);
+       LString a = e;
+       // File information about normal file
+       FileInfo fileInfo2(s);
+
+       // Check if emergency save file exists and is newer.
+       e += OnlyFilename(s) + ".emergency";
+       FileInfo fileInfoE(e);
+
+       bool use_emergency = false;
+
+       if (fileInfoE.exist() && fileInfo2.exist()) {
+               if (fileInfoE.getModificationTime()
+                   > fileInfo2.getModificationTime()) {
+                       if (AskQuestion(_("An emergency save of this document exists!"),
+                                       MakeDisplayPath(s,50),
+                                       _("Try to load that instead?"))) {
+                               ts = e;
+                               // the file is not saved if we load the
+                               // emergency file.
+                               b->markDirty();
+                               use_emergency = true;
+                       } else {
+                               // Here, we should delete the emergency save
+                               unlink(e.c_str());
+                       }
+               }
+       }
+
+       if (!use_emergency) {
+               // Now check if autosave file is newer.
+               a += '#';
+               a += OnlyFilename(s);
+               a += '#';
+               FileInfo fileInfoA(a);
+               if (fileInfoA.exist() && fileInfo2.exist()) {
+                       if (fileInfoA.getModificationTime()
+                           > fileInfo2.getModificationTime()) {
+                               if (AskQuestion(_("Autosave file is newer."),
+                                               MakeDisplayPath(s,50),
+                                               _("Load that one instead?"))) {
+                                       ts = a;
+                                       // the file is not saved if we load the
+                                       // autosave file.
+                                       b->markDirty();
+                               } else {
+                                       // Here, we should delete the autosave
+                                       unlink(a.c_str());
+                               }
+                       }
+               }
+       }
+       // not sure if this is the correct place to begin LyXLex
+       LyXLex lex(NULL, 0);
+       lex.setFile(ts);
+       if (b->readFile(lex))
+               return b;
+       else {
+               bstore.release(b);
+               return 0;
+       }
+}
+
+
+bool BufferList::exists(LString const & s)
+{
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       while ((b=biter())) {
+               if (b->filename == s)
+                       return true;
+       }
+       return false;
+}
+
+
+Buffer* BufferList::getBuffer(LString const &s)
+{
+       BufferStorage_Iter biter(bstore);
+       Buffer *b=0;
+       while ((b=biter())) {
+               if (b->filename ==s)
+                       return b;
+       }
+       return 0;
+}
+
+
+Buffer* BufferList::newFile(LString const & name, LString tname)
+{
+       /* get a free buffer */ 
+       Buffer *b = bstore.newBuffer(name, lyxrc);
+
+       // use defaults.lyx as a default template if it exists.
+       if (tname.empty()) {
+               tname = LibFileSearch("templates", "defaults.lyx");
+       }
+       if (!tname.empty() && IsLyXFilename(tname)){
+               bool templateok = false;
+               LyXLex lex(NULL,0);
+               lex.setFile(tname);
+               if (lex.IsOK()) {
+                       if (b->readFile(lex)) {
+                               templateok = true;
+                       }
+               }
+               if (!templateok) {
+                       WriteAlert(_("Error!"),_("Unable to open template"), 
+                                  MakeDisplayPath(tname));
+                       // no template, start with empty buffer
+                       b->paragraph = new LyXParagraph();
+               }
+       }
+       else {  // start with empty buffer
+               b->paragraph = new LyXParagraph();
+       }
+
+       b->markDirty();
+       b->setReadonly(false);
+       
+       return b;
+}
+
+
+Buffer* BufferList::loadLyXFile(LString const & filename, bool tolastfiles)
+{
+       // make sure our path is absolute
+       LString s = MakeAbsPath(filename);
+
+       // Is this done too early?
+       // Is it LinuxDoc?
+       if (IsSGMLFilename(s)) {
+               FileInfo fi(s);
+               if (fi.exist() && fi.readable()) {
+                       if (!RunLinuxDoc(-1, s)) {
+                               s = ChangeExtension (s, ".lyx", false);
+                       } else { // sgml2lyx failed
+                               WriteAlert(_("Error!"),
+                                          _("Could not convert file"),s);
+                               return 0;
+                       }
+               } else {
+                       // just change the extension and it will be
+                       // handled like a regular lyx file that does
+                       // not exist.
+                       s = ChangeExtension(s, ".lyx", false);
+               }
+       }
+       
+       // file already open?
+       if (exists(s)) {
+               if (AskQuestion(_("Document is already open:"), 
+                               MakeDisplayPath(s,50),
+                               _("Do you want to reload that document?"))) {
+                       // Reload is accomplished by closing and then loading
+                       if (!close(getBuffer(s))) {
+                               return 0;
+                       }
+                       // Fall through to new load. (Asger)
+               } else {
+                       // Here, we pretend that we just loaded the 
+                       // open document
+                       return getBuffer(s);
+               }
+       }
+       Buffer *b=0;
+       bool ro = false;
+       switch (IsFileWriteable(s)) {
+       case 0:
+               minibuffer->Set(_("File `")+MakeDisplayPath(s,50)+
+                               _("' is read-only."));
+               ro = true;
+               // Fall through
+       case 1:
+               b=readFile(s, ro);
+               if (b) {
+                       b->lyxvc.file_found_hook(s);
+               }
+               break; //fine- it's r/w
+       case -1:
+               // Here we probably should run
+               if (LyXVC::file_not_found_hook(s)) {
+                       // Ask if the file should be checked out for
+                       // viewing/editing, if so: load it.
+                       lyxerr.print("Do you want to checkout?");
+               }
+               if (AskQuestion(_("Cannot open specified file:"), 
+                               MakeDisplayPath(s,50),
+                               _("Create new document with this name?")))
+               {
+                       // Find a free buffer
+                       b = newFile(s,LString());
+               }
+               break;
+       }
+
+       if (b && tolastfiles)
+               lastfiles->newFile(b->getFileName());
+
+       return b;
+}
diff --git a/src/bufferlist.h b/src/bufferlist.h
new file mode 100644 (file)
index 0000000..ae43d4e
--- /dev/null
@@ -0,0 +1,174 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor         
+*          Copyright (C) 1995 Matthias Ettrich
+*
+*           This file is Copyleft (C) 1996
+*           Lars Gullik Bjønnes
+*
+*======================================================*/
+
+#ifndef _BUFFER_LIST_H_
+#define _BUFFER_LIST_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "buffer.h"
+#include "error.h"
+
+/** A class to hold all the buffers in a structure
+  The point of this class is to hide from bufferlist what kind
+  of structure the buffers are stored in. Should be no concern for
+  bufferlist if the buffers is in a array or in a linked list.
+
+  This class should ideally be enclosed inside class BufferList, but that
+  gave me an "internal gcc error".
+  */
+class BufferStorage {
+public:
+       ///
+       BufferStorage();
+       ///
+       bool isEmpty();
+       ///
+       void release(Buffer* buf);
+       ///
+       Buffer* newBuffer(LString const &s, LyXRC *, bool =false);
+private:
+       enum {
+               /** The max number of buffers there are possible to have
+                   loaded at the same time. (this only applies when we use an
+                   array)
+               */
+               NUMBER_OF_BUFFERS = 50
+       };
+       
+       /** The Bufferlist is currently implemented as a static array.
+         The buffers are new'ed and deleted as reqested.
+         */
+       Buffer *buffer[NUMBER_OF_BUFFERS];
+       ///
+       friend class BufferStorage_Iter;
+};
+
+/// An Iterator class for BufferStorage
+class BufferStorage_Iter {
+public:
+       ///
+       BufferStorage_Iter(const BufferStorage & bs)
+       { cs=&bs; index=0;}
+       /// next
+       Buffer* operator() ();
+       ///
+       Buffer* operator[] (int a);
+private:
+       ///
+       const BufferStorage *cs;
+       ///
+       unsigned char index;
+};
+
+
+
+/** The class governing all the open buffers
+  This class governs all the currently open buffers. Currently all the buffer
+  are located in a static array, soon this will change and we will have a
+  linked list instead.
+ */
+class BufferList {
+public:
+       ///
+       BufferList();
+
+       ///
+       ~BufferList();
+
+       /// state info
+       enum list_state {
+               ///
+               OK,
+               ///
+               CLOSING
+       };
+
+       /// returns the state of the bufferlist
+       list_state getState() { return _state; }
+       
+       /** loads a LyX file or...
+         If the optional argument tolastfiles is false (default is
+            true), the file name will not be added to the last opened
+           files list
+           */  
+       Buffer* loadLyXFile(LString const & filename, 
+                           bool tolastfiles = true);
+       
+       ///
+       bool isEmpty();
+
+       /// Saves buffer. Returns false if unsuccesful.
+       bool write(Buffer *, bool makeBackup = true);
+
+       ///
+        bool QwriteAll();
+
+       /// Close all open buffers.
+       void closeAll();
+
+       ///
+       void resize();
+
+       /// Read a file into a buffer readonly or not.
+       Buffer* readFile(LString const &, bool ro);
+
+       /// Make a new file (buffer) using a template
+       Buffer* newFile(LString const &, LString);
+
+       /** This one must be moved to some other place.
+        */
+       void makePup(int);
+
+       ///** Later with multiple frames this should not be here.
+       // */
+       //Buffer* switchBuffer(Buffer *from, int);
+
+       ///
+       void updateInset(Inset*, bool = true);
+
+       ///
+       int unlockInset(UpdatableInset*);
+
+       ///
+       void updateIncludedTeXfiles(LString const &);
+
+       ///
+       void emergencyWriteAll();
+
+       /** closes buffer
+         Returns false if operation was canceled
+         */
+       bool close(Buffer *);
+
+       ///
+       Buffer* first();
+       
+       /// returns true if the buffer exists already
+       bool exists(LString const &);
+
+       /// returns a pointer to the buffer with the given name.
+       Buffer* getBuffer(LString const &);
+       /// returns a pointer to the buffer with the given number.
+       Buffer* getBuffer(int);
+
+private:
+       ///
+       BufferStorage bstore;
+       
+       ///
+       list_state _state;
+};
+
+#endif
diff --git a/src/bufferparams.C b/src/bufferparams.C
new file mode 100644 (file)
index 0000000..1478f96
--- /dev/null
@@ -0,0 +1,306 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation "bufferparams.h"
+#endif
+
+#include "bufferparams.h"
+#include "tex-strings.h"
+#include "layout.h"
+#include "vspace.h"
+#include "error.h"
+#include "lyxlib.h"
+
+//     $Id: bufferparams.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $      
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: bufferparams.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+
+BufferParams::BufferParams()
+{
+       paragraph_separation = LYX_PARSEP_INDENT;
+       defskip = VSpace(VSpace::MEDSKIP); 
+       quotes_language = InsetQuotes::EnglishQ;
+       quotes_times = InsetQuotes::DoubleQ;
+       fontsize = "default";
+       textclass = 0; 
+        /*  PaperLayout */
+       papersize = PAPER_DEFAULT;
+        papersize2 = VM_PAPER_DEFAULT; /* DEFAULT */
+        paperpackage = PACKAGE_NONE;
+       orientation = ORIENTATION_PORTRAIT;
+        use_geometry = false;
+        use_amsmath = false;
+       secnumdepth = 3;
+       tocdepth = 3;
+       language = "default";
+       fonts = "default";
+       inputenc = "default";
+       graphicsDriver = "default";
+       sides = 1;
+       columns = 1;
+       pagestyle = "default";
+       for(int iter = 0; iter < 4; iter++) {
+               user_defined_bullets[iter] = temp_bullets[iter] 
+                                          = ITEMIZE_DEFAULTS[iter];
+       }
+       allowAccents=false;
+}
+
+
+void BufferParams::Copy(BufferParams const &p)
+{
+       paragraph_separation = p.paragraph_separation;
+       defskip = p.defskip;
+       quotes_language = p.quotes_language;
+       quotes_times = p.quotes_times;
+       fontsize = p.fontsize;
+       textclass = p.textclass;
+       papersize = p.papersize;
+        papersize2 = p.papersize2;
+        paperpackage = p.paperpackage;
+       orientation = p.orientation;
+        use_geometry = p.use_geometry;
+        paperwidth = p.paperwidth;
+        paperheight = p.paperheight;
+        leftmargin = p.leftmargin;
+        topmargin = p.topmargin;
+        rightmargin = p.rightmargin;
+        bottommargin = p.bottommargin;
+        headheight = p.headheight;
+        headsep = p.headsep;
+        footskip = p.footskip;
+       graphicsDriver = p.graphicsDriver;
+       fonts = p.fonts;
+       spacing = p.spacing;
+       secnumdepth = p.secnumdepth;
+       tocdepth = p.tocdepth;
+       language = p.language;
+       inputenc = p.inputenc;
+       preamble = p.preamble;
+       options = p.options;
+       float_placement = p.float_placement;
+       columns = p.columns;
+       sides = p.sides;
+       pagestyle = p.pagestyle;
+
+       // WARNING destructor will deallocate paragraph!!
+       // this is not good and will cause an error somewhere else.
+       //paragraph = p.paragraph; 
+
+       for (int i = 0; i < 4; ++i) {
+               temp_bullets[i] = p.temp_bullets[i];
+               user_defined_bullets[i] = p.user_defined_bullets[i];
+       }
+
+       allowAccents=p.allowAccents;
+        use_amsmath = p.use_amsmath;
+}
+
+
+void BufferParams::writeFile(FILE *file)
+{
+       // The top of the file is written by the buffer.
+       // Prints out the buffer info into the .lyx file given by file
+
+       // the textclass
+       fprintf(file, "\\textclass %s\n",
+               lyxstyle.NameOfClass(textclass).c_str());
+       
+       // then the the preamble
+       if (!preamble.empty()) {
+               fprintf(file, "\\begin_preamble\n");
+               {
+                       // remove '\n' from the end of preamble
+                       preamble.strip('\n');
+                       
+                       // write out the whole preamble  in one go
+                       fwrite(preamble.c_str(),
+                              sizeof(char),
+                              preamble.length(),
+                              file);
+                       fprintf(file, "\n\\end_preamble\n");
+               }
+       }
+      
+       /* the options */ 
+       if (!options.empty()) {
+               fprintf(file,
+                       "\\options %s\n",
+                       options.c_str());
+       }
+   
+       /* then the text parameters */ 
+       fprintf(file, "\\language %s\n", language.c_str());
+       fprintf(file, "\\inputencoding %s\n", inputenc.c_str());
+       fprintf(file, "\\fontscheme %s\n", fonts.c_str());
+       fprintf(file, "\\graphics %s\n", graphicsDriver.c_str());
+
+       if (!float_placement.empty()) {
+               fprintf(file,
+                       "\\float_placement %s\n",
+                       float_placement.c_str());
+       }
+       fprintf(file, "\\paperfontsize %s\n", fontsize.c_str());
+
+       spacing.writeFile(file);
+
+       fprintf(file, "\\papersize %s\n", string_papersize[papersize2]);
+       fprintf(file, "\\paperpackage %s\n",
+                string_paperpackages[paperpackage]);
+       fprintf(file, "\\use_geometry %d\n",use_geometry);
+       fprintf(file, "\\use_amsmath %d\n",use_amsmath);
+       fprintf(file, "\\paperorientation %s\n",
+               string_orientation[orientation]);
+        if (!paperwidth.empty())
+            fprintf(file, "\\paperwidth %s\n",
+                    VSpace(paperwidth).asLyXCommand().c_str());
+        if (!paperheight.empty())
+            fprintf(file, "\\paperheight %s\n",
+                    VSpace(paperheight).asLyXCommand().c_str());
+        if (!leftmargin.empty())
+            fprintf(file, "\\leftmargin %s\n",
+                    VSpace(leftmargin).asLyXCommand().c_str());
+        if (!topmargin.empty())
+            fprintf(file, "\\topmargin %s\n",
+                    VSpace(topmargin).asLyXCommand().c_str());
+        if (!rightmargin.empty())
+            fprintf(file, "\\rightmargin %s\n",
+                    VSpace(rightmargin).asLyXCommand().c_str());
+        if (!bottommargin.empty())
+            fprintf(file, "\\bottommargin %s\n",
+                    VSpace(bottommargin).asLyXCommand().c_str());
+        if (!headheight.empty())
+            fprintf(file, "\\headheight %s\n",
+                    VSpace(headheight).asLyXCommand().c_str());
+        if (!headsep.empty())
+            fprintf(file, "\\headsep %s\n",
+                    VSpace(headsep).asLyXCommand().c_str());
+        if (!footskip.empty())
+            fprintf(file, "\\footskip %s\n",
+                    VSpace(footskip).asLyXCommand().c_str());
+       fprintf(file, "\\secnumdepth %d\n", secnumdepth);
+       fprintf(file, "\\tocdepth %d\n", tocdepth);
+       fprintf(file, "\\paragraph_separation %s\n",
+               string_paragraph_separation[paragraph_separation]);
+       fprintf(file, "\\defskip %s\n", defskip.asLyXCommand().c_str());
+       fprintf(file, "\\quotes_language %s\n",
+               string_quotes_language[quotes_language]);
+       switch(quotes_times) {
+       case InsetQuotes::SingleQ: 
+               fprintf(file, "\\quotes_times 1\n"); break;
+       case InsetQuotes::DoubleQ: 
+               fprintf(file, "\\quotes_times 2\n"); break;
+       }               
+       fprintf(file, "\\papercolumns %d\n", columns);
+       fprintf(file, "\\papersides %d\n", sides);
+       fprintf(file, "\\paperpagestyle %s\n", pagestyle.c_str());
+       for (int i = 0; i < 4; ++i) {
+               if (user_defined_bullets[i] != ITEMIZE_DEFAULTS[i]) {
+                       if (user_defined_bullets[i].getFont() != -1) {
+                               fprintf(file, "\\bullet %d\n\t%d\n\t%d\n\t%d\n\\end_bullet\n",
+                                               i,
+                                               user_defined_bullets[i].getFont(),
+                                               user_defined_bullets[i].getCharacter(),
+                                               user_defined_bullets[i].getSize());
+                       }
+                       else {
+                               fprintf(file, "\\bulletLaTeX %d\n\t%s\n\\end_bullet\n",
+                                               i,
+                                               user_defined_bullets[i].c_str());
+                       }
+               }
+       }
+}
+
+
+void BufferParams::useClassDefaults() {
+       LyXTextClass *tclass = lyxstyle.TextClass(textclass);
+
+       sides = tclass->sides;
+       columns = tclass->columns;
+       pagestyle = tclass->pagestyle;
+       options = tclass->options;
+       secnumdepth = tclass->secnumdepth;
+       tocdepth = tclass->tocdepth;
+}
+
+
+void BufferParams::readPreamble(LyXLex &lex)
+{
+       if (lex.GetString() != "\\begin_preamble")
+               lyxerr.print("Error (BufferParams::readPreamble):"
+                             "consistency check failed.");
+
+       preamble = lex.getLongString("\\end_preamble");
+}
+
+
+void BufferParams::readLanguage(LyXLex &lex)
+{
+       LString tmptok;
+       LString test;
+       int n = 0;
+       
+       if (!lex.next()) return;
+       
+       tmptok = lex.GetString();
+       // check if tmptok is part of tex_babel in tex-defs.h
+       while (true) {
+               test = tex_babel[n++];
+               
+               if (test == tmptok) {
+                       language = tmptok;
+                       break;
+               }
+               else if (test.empty()) {
+                       lyxerr.print("Warning: language `"
+                                     + tmptok + "' not recognized!");
+                       lyxerr.print("         Setting language to `default'.");
+                       language = "default";
+                       break;   
+               }      
+       }
+}
+
+
+void BufferParams::readGraphicsDriver(LyXLex &lex)
+{
+       LString tmptok;
+       LString test;
+       int n=0;
+       
+       
+       if (!lex.next()) return;
+       
+       tmptok = lex.GetString();
+       // check if tmptok is part of tex_graphics in tex_defs.h
+       while (true) {
+               test = tex_graphics[n++];
+               
+               if (test == tmptok) {    
+                       graphicsDriver = tmptok;
+                       break;
+               }      
+               else if (test == "last_item") {
+                       lex.printError(
+                               "Warning: graphics driver `$$Token' not recognized!\n"
+                               "         Setting graphics driver to `default'.\n");
+                       graphicsDriver = "default";
+                       break;
+               }      
+       }
+}
diff --git a/src/bufferparams.h b/src/bufferparams.h
new file mode 100644 (file)
index 0000000..e2f6933
--- /dev/null
@@ -0,0 +1,154 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 1996 Matthias Ettrich
+ *           and the LyX Team.
+ *
+ *======================================================*/
+
+#ifndef _BUFFERPARAMS_H
+#define _BUFFERPARAMS_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+#include "lyxlex.h"
+#include "vspace.h"
+#include "Spacing.h"
+#include "Bullet.h"
+#include "insets/insetquotes.h"
+
+/**
+  This class contains all the parameters for this a buffer uses. Some
+  work needs to be done on this class to make it nice. Now everything
+  is in public.
+  */
+class BufferParams {
+public:
+       //@Man: Constructors and Deconstructors
+       //@{
+       ///
+       BufferParams();
+       // ///
+       //BufferParams(const BufferParams&);
+       //@}
+
+       /// Dummy destructor to shut up gcc
+       virtual ~BufferParams() {}
+       
+       ///
+       void writeFile(FILE *);
+
+
+       ///
+       void useClassDefaults();
+
+       ///
+       VSpace getDefSkip() const { return defskip; }
+
+       ///
+       void setDefSkip(VSpace vs) { defskip = vs; }
+       
+       /** Wether paragraphs are separated by using a indent like in
+         articles or by using a little skip like in letters.
+         */
+       char paragraph_separation; // add approp. signedness
+       ///
+       InsetQuotes::quote_language quotes_language;
+       ///
+       InsetQuotes::quote_times quotes_times;
+       ///
+       LString fontsize; 
+       ///
+       signed char textclass;
+
+       /* this are for the PaperLayout */
+   ///
+       char papersize; /* the general papersize (papersize2 or paperpackage */ // add approp. signedness
+        ///
+        char papersize2; /* the selected Geometry papersize */ // add approp. signedness
+        ///
+        char paperpackage; /* a special paperpackage .sty-file */ // add approp. signedness
+        ///
+       char orientation; // add approp. signedness
+       ///
+        bool use_geometry;
+        ///
+        LString paperwidth;
+        ///
+        LString paperheight;
+        ///
+        LString leftmargin;
+        ///
+        LString topmargin;
+        ///
+        LString rightmargin;
+        ///
+        LString bottommargin;
+        ///
+        LString headheight;
+        ///
+        LString headsep;
+        ///
+        LString footskip;
+        
+        /* some LaTeX options */
+       /// The graphics driver
+       LString graphicsDriver;
+       ///
+       LString fonts;
+       ///
+       Spacing spacing;
+       ///
+       signed char secnumdepth;
+       ///
+       signed char tocdepth;
+       ///
+       LString language;
+       ///
+       LString inputenc;
+       ///
+       LString preamble;
+       ///
+       LString options;
+       ///
+       LString float_placement;
+       ///
+       char columns; // add approp. signedness
+       ///
+       char sides; // add approp. signedness
+       ///
+       LString pagestyle;
+       ///
+       Bullet temp_bullets[4];
+       ///
+       Bullet user_defined_bullets[4];
+       ///
+       void Copy(BufferParams const &p);
+       ///
+       virtual void readPreamble(LyXLex &);
+       ///
+       virtual void readLanguage(LyXLex &);
+       ///
+       virtual void readGraphicsDriver(LyXLex &);
+       /// do we allow accents on all chars in this buffer
+       bool allowAccents;
+       ///
+        bool use_amsmath;
+       /// Time ago we agreed that this was a buffer property [ale990407]
+        LString parentname;
+protected:
+private:
+       ///
+       friend class Buffer;
+       /** This is the amount of space used for paragraph_separation "skip",
+         and for detached paragraphs in "indented" documents. */
+       VSpace defskip;
+};
+
+#endif
diff --git a/src/bullet_forms.C b/src/bullet_forms.C
new file mode 100644 (file)
index 0000000..acacaf3
--- /dev/null
@@ -0,0 +1,122 @@
+// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "bullet_forms.h"
+#include "bmtable.h"
+#include "filetools.h"
+
+extern int mono_video;
+
+FD_form_bullet *create_form_form_bullet(void)
+{
+  FL_OBJECT *obj;
+  FD_form_bullet *fdui = (FD_form_bullet *) fl_calloc(1, sizeof(FD_form_bullet));
+
+  fdui->form_bullet = fl_bgn_form(FL_NO_BOX, 370, 390);
+  fl_set_border_width(-1);
+  obj = fl_add_box(FL_UP_BOX,0,0,370,390,"");
+  // make the border thick again to improve the bmtable looks
+  fl_set_border_width(-3);
+  fdui->bmtable_bullet_panel = obj = fl_add_bmtable(1, 90, 105, 265, 180, "");
+     fl_set_object_callback(obj, BulletBMTableCB, 0);
+     fl_set_object_lcol(obj, FL_BLUE);
+     fl_set_object_boxtype(obj, FL_UP_BOX);
+     if (mono_video) {
+        fl_set_bmtable_file(obj, 6, 6,
+                           LibFileSearch("images",
+                                         "standard.xbm").c_str());
+     }
+     else {
+        fl_set_bmtable_pixmap_file(obj, 6, 6,
+                                  LibFileSearch("images",
+                                                "standard.xpm").c_str());
+    }
+
+  fl_set_border_width(-1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,95,20,255,70,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,0,340,370,50,"");
+  fdui->choice_bullet_size = obj = fl_add_choice(FL_NORMAL_CHOICE,15,45,65,30,idex(_("Size|#z")));fl_set_button_shortcut(obj,scex(_("Size|#z")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP);
+    fl_set_object_callback(obj,ChoiceBulletSizeCB,0);
+  fdui->button_ok = obj = fl_add_button(FL_RETURN_BUTTON,25,350,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,BulletOKCB,0);
+  fdui->button_apply = obj = fl_add_button(FL_NORMAL_BUTTON,135,350,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,BulletApplyCB,0);
+  fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON,245,350,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,BulletCancelCB,0);
+  fdui->input_bullet_latex = obj = fl_add_input(FL_NORMAL_INPUT,80,300,275,30,idex(_("LaTeX|#L")));fl_set_button_shortcut(obj,scex(_("LaTeX|#L")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,FL_FIXED_STYLE);
+    fl_set_input_return(obj, FL_RETURN_CHANGED);
+    fl_set_input_maxchars(obj,80);
+    fl_set_object_callback(obj,InputBulletLaTeXCB,0);
+
+  fdui->radio_bullet_depth = fl_bgn_group();
+  fdui->radio_bullet_depth_1 = obj = fl_add_button(FL_RADIO_BUTTON,105,35,55,40,idex(_("1|#1")));fl_set_button_shortcut(obj,scex(_("1|#1")),1);
+    fl_set_object_lsize(obj,FL_LARGE_SIZE);
+    fl_set_object_callback(obj,BulletDepthCB,0);
+    fl_set_button(obj, 1);
+  fdui->radio_bullet_depth_2 = obj = fl_add_button(FL_RADIO_BUTTON,165,35,55,40,idex(_("2|#2")));fl_set_button_shortcut(obj,scex(_("2|#2")),1);
+    fl_set_object_lsize(obj,FL_LARGE_SIZE);
+    fl_set_object_callback(obj,BulletDepthCB,1);
+  fdui->radio_bullet_depth_3 = obj = fl_add_button(FL_RADIO_BUTTON,225,35,55,40,idex(_("3|#3")));fl_set_button_shortcut(obj,scex(_("3|#3")),1);
+    fl_set_object_lsize(obj,FL_LARGE_SIZE);
+    fl_set_object_callback(obj,BulletDepthCB,2);
+  fdui->radio_bullet_depth_4 = obj = fl_add_button(FL_RADIO_BUTTON,285,35,55,40,idex(_("4|#4")));fl_set_button_shortcut(obj,scex(_("4|#4")),1);
+    fl_set_object_lsize(obj,FL_LARGE_SIZE);
+    fl_set_object_callback(obj,BulletDepthCB,3);
+  fl_end_group();
+
+  obj = fl_add_text(FL_NORMAL_TEXT,105,10,85,20,_("Bullet Depth"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+
+  fdui->radio_bullet_panel = fl_bgn_group();
+  fdui->radio_bullet_panel_standard = obj = fl_add_button(FL_RADIO_BUTTON,15,105,65,30,idex(_("Standard|#S")));fl_set_button_shortcut(obj,scex(_("Standard|#S")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+    fl_set_object_callback(obj,BulletPanelCB,0);
+    fl_set_button(obj, 1);
+  fdui->radio_bullet_panel_maths = obj = fl_add_button(FL_RADIO_BUTTON,15,135,65,30,idex(_("Maths|#M")));fl_set_button_shortcut(obj,scex(_("Maths|#M")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+    fl_set_object_callback(obj,BulletPanelCB,1);
+  fdui->radio_bullet_panel_ding2 = obj = fl_add_button(FL_RADIO_BUTTON,15,195,65,30,idex(_("Ding 2|#i")));fl_set_button_shortcut(obj,scex(_("Ding 2|#i")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+    fl_set_object_callback(obj,BulletPanelCB,3);
+  fdui->radio_bullet_panel_ding3 = obj = fl_add_button(FL_RADIO_BUTTON,15,225,65,30,idex(_("Ding 3|#n")));fl_set_button_shortcut(obj,scex(_("Ding 3|#n")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+    fl_set_object_callback(obj,BulletPanelCB,4);
+  fdui->radio_bullet_panel_ding4 = obj = fl_add_button(FL_RADIO_BUTTON,15,255,65,30,idex(_("Ding 4|#g")));fl_set_button_shortcut(obj,scex(_("Ding 4|#g")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+    fl_set_object_callback(obj,BulletPanelCB,5);
+  fdui->radio_bullet_panel_ding1 = obj = fl_add_button(FL_RADIO_BUTTON,15,165,65,30,idex(_("Ding 1|#D")));fl_set_button_shortcut(obj,scex(_("Ding 1|#D")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+    fl_set_object_callback(obj,BulletPanelCB,2);
+  fl_end_group();
+
+  fl_end_form();
+
+  //fdui->form_bullet->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
diff --git a/src/bullet_forms.h b/src/bullet_forms.h
new file mode 100644 (file)
index 0000000..5c92931
--- /dev/null
@@ -0,0 +1,50 @@
+/** Header file generated with fdesign on Mon Apr 12 19:09:41 1999.**/
+
+#ifndef FD_form_bullet_h_
+#define FD_form_bullet_h_
+
+/** Callbacks, globals and object handlers **/
+extern void ChoiceBulletSizeCB(FL_OBJECT *, long);
+extern void BulletOKCB(FL_OBJECT *, long);
+extern void BulletApplyCB(FL_OBJECT *, long);
+extern void BulletCancelCB(FL_OBJECT *, long);
+extern void InputBulletLaTeXCB(FL_OBJECT *, long);
+extern void BulletDepthCB(FL_OBJECT *, long);
+extern void BulletPanelCB(FL_OBJECT *, long);
+extern void BulletBMTableCB(FL_OBJECT *, long);
+
+
+/**** Additional routines ****/
+
+extern void bulletForm();
+extern bool updateBulletForm(); 
+
+/**** Forms and Objects ****/
+typedef struct {
+       FL_FORM *form_bullet;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *bmtable_bullet_panel;
+       FL_OBJECT *choice_bullet_size;
+       FL_OBJECT *button_ok;
+       FL_OBJECT *button_apply;
+       FL_OBJECT *button_cancel;
+       FL_OBJECT *input_bullet_latex;
+       FL_OBJECT *radio_bullet_depth;
+       FL_OBJECT *radio_bullet_depth_1;
+       FL_OBJECT *radio_bullet_depth_2;
+       FL_OBJECT *radio_bullet_depth_3;
+       FL_OBJECT *radio_bullet_depth_4;
+       FL_OBJECT *radio_bullet_panel;
+       FL_OBJECT *radio_bullet_panel_standard;
+       FL_OBJECT *radio_bullet_panel_maths;
+       FL_OBJECT *radio_bullet_panel_ding2;
+       FL_OBJECT *radio_bullet_panel_ding3;
+       FL_OBJECT *radio_bullet_panel_ding4;
+       FL_OBJECT *radio_bullet_panel_ding1;
+} FD_form_bullet;
+
+extern FD_form_bullet * create_form_form_bullet(void);
+
+#endif /* FD_form_bullet_h_ */
diff --git a/src/bullet_forms_cb.C b/src/bullet_forms_cb.C
new file mode 100644 (file)
index 0000000..d3c6317
--- /dev/null
@@ -0,0 +1,254 @@
+/* Bullet form callbacks */
+#include <config.h>
+#include <stdlib.h>
+#include FORMS_H_LOCATION
+#include XPM_H_LOCATION
+#include "bullet_forms.h"
+#include "bmtable.h"
+#include "buffer.h"
+#include "bufferparams.h"
+#include "filetools.h"
+#include "gettext.h"
+#include "lyx_gui_misc.h" // CancelCloseBoxCB + WriteAlert
+
+extern int mono_video;
+extern BufferView *current_view;
+FD_form_bullet *fd_form_bullet;
+
+static int current_bullet_panel;
+static int current_bullet_depth;
+
+/** Creates or raises the bullet popup and sets appropriate form values
+  */
+void bulletForm()
+{
+       if (!fd_form_bullet) {
+               if (!mono_video 
+                   && (XpmVersion < 4
+                       || (XpmVersion == 4 && XpmRevision < 7))) {
+                       WriteAlert(_("Sorry, your libXpm is too old."),
+                       _("This feature requires xpm-4.7 (a.k.a 3.4g) or newer."),
+                       _("Try running LyX in mono mode (lyx  -Mono)."));
+                       return;
+               }
+               fd_form_bullet = create_form_form_bullet();
+               fl_addto_choice(fd_form_bullet->choice_bullet_size,
+                               _(" default | tiny | script | footnote | small |"
+                               " normal | large | Large | LARGE | huge | Huge"));
+               fl_set_choice(fd_form_bullet->choice_bullet_size, 1);
+               fl_set_form_atclose(fd_form_bullet->form_bullet,
+                                   CancelCloseBoxCB, NULL);
+       }
+
+       if (updateBulletForm()) {
+               // Show form
+               if (fd_form_bullet->form_bullet->visible) {
+                       fl_raise_form(fd_form_bullet->form_bullet);
+               }
+               else {
+                       fl_show_form(fd_form_bullet->form_bullet,
+                                    FL_PLACE_MOUSE,FL_FULLBORDER,
+                                    _("Itemize Bullet Selection"));
+               }
+       }
+}
+
+bool updateBulletForm()
+{
+       bool update = true;
+       if (!fd_form_bullet) {
+               return false;
+       }
+       if (!current_view->available()) {
+               update = false;
+       } else if (current_view->currentBuffer()->isReadonly()
+                  || current_view->currentBuffer()->isLinuxDoc()) {
+               fl_deactivate_object (fd_form_bullet->button_ok);
+               fl_deactivate_object (fd_form_bullet->button_apply);
+               fl_set_object_lcol (fd_form_bullet->button_ok, FL_INACTIVE);
+               fl_set_object_lcol (fd_form_bullet->button_apply, FL_INACTIVE);
+               fl_deactivate_object (fd_form_bullet->bmtable_bullet_panel);
+               fl_deactivate_object (fd_form_bullet->choice_bullet_size);
+               fl_deactivate_object (fd_form_bullet->input_bullet_latex);
+               update = false;
+       } else {
+               fl_activate_object (fd_form_bullet->button_ok);
+               fl_activate_object (fd_form_bullet->button_apply);
+               fl_set_object_lcol (fd_form_bullet->button_ok, FL_BLACK);
+               fl_set_object_lcol (fd_form_bullet->button_apply, FL_BLACK);
+               fl_activate_object (fd_form_bullet->bmtable_bullet_panel);
+               fl_activate_object (fd_form_bullet->choice_bullet_size);
+               fl_activate_object (fd_form_bullet->input_bullet_latex);
+       }
+
+       if (update) {
+               // any settings that need doing each time
+               fl_set_button(fd_form_bullet->radio_bullet_depth_1, 1);
+               fl_set_input(fd_form_bullet->input_bullet_latex,
+                            current_view->currentBuffer()
+                            ->params.user_defined_bullets[0].c_str());
+               fl_set_choice(fd_form_bullet->choice_bullet_size,
+                             current_view->currentBuffer()
+                             ->params.user_defined_bullets[0].getSize() + 2);
+       } else {
+               if (fd_form_bullet->form_bullet->visible) {
+                       fl_hide_form(fd_form_bullet->form_bullet);
+               }
+       }
+       return update;
+}
+
+/*---------------------------------------*/
+/* callbacks for form form_bullet        */
+
+void BulletOKCB(FL_OBJECT *ob, long data)
+{
+       BulletApplyCB(ob, data);
+       BulletCancelCB(ob, data);
+}
+
+
+void BulletApplyCB(FL_OBJECT * /*ob*/, long /*data*/ )
+{
+       /* update the bullet settings */
+       BufferParams & param = current_view->currentBuffer()->params;
+
+       // a little bit of loop unrolling
+       param.user_defined_bullets[0] = param.temp_bullets[0];
+       param.user_defined_bullets[1] = param.temp_bullets[1];
+       param.user_defined_bullets[2] = param.temp_bullets[2];
+       param.user_defined_bullets[3] = param.temp_bullets[3];
+       current_view->currentBuffer()->markDirty();
+}
+
+
+void BulletCancelCB(FL_OBJECT * /*ob*/, long /*data*/ )
+{
+       fl_hide_form(fd_form_bullet->form_bullet);
+       // this avoids confusion when reopening
+       BufferParams & param = current_view->currentBuffer()->params;
+       param.temp_bullets[0] = param.user_defined_bullets[0];
+       param.temp_bullets[1] = param.user_defined_bullets[1];
+       param.temp_bullets[2] = param.user_defined_bullets[2];
+       param.temp_bullets[3] = param.user_defined_bullets[3];
+}
+
+
+void InputBulletLaTeXCB(FL_OBJECT *, long)
+{
+  /* fill-in code for callback */
+       BufferParams & param = current_view->currentBuffer()->params;
+
+       param.temp_bullets[current_bullet_depth].setText(
+               fl_get_input(fd_form_bullet->input_bullet_latex));
+}
+
+
+void ChoiceBulletSizeCB(FL_OBJECT * ob, long /*data*/ )
+{
+       BufferParams & param = current_view->currentBuffer()->params;
+
+       // convert from 1-6 range to -1-4 
+       param.temp_bullets[current_bullet_depth].setSize(fl_get_choice(ob) - 2);
+       fl_set_input(fd_form_bullet->input_bullet_latex,
+                                param.temp_bullets[current_bullet_depth].c_str());
+}
+
+
+void BulletDepthCB(FL_OBJECT *ob, long data)
+{
+       /* Should I do the following:                                 */
+       /*  1. change to the panel that the current bullet belongs in */
+       /*  2. show that bullet as selected                           */
+       /*  3. change the size setting to the size of the bullet in Q.*/
+       /*  4. display the latex equivalent in the latex box          */
+       /*                                                            */
+       /* I'm inclined to just go with 3 and 4 at the moment and     */
+       /* maybe try to support the others later                      */
+       BufferParams & param = current_view->currentBuffer()->params;
+
+       switch (fl_get_button_numb(ob)) {
+       case 3:
+               // right mouse button resets to default
+               param.temp_bullets[data] = ITEMIZE_DEFAULTS[data];
+       default:
+               current_bullet_depth = data;
+               fl_set_input(fd_form_bullet->input_bullet_latex,
+                            param.temp_bullets[data].c_str());
+               fl_set_choice(fd_form_bullet->choice_bullet_size,
+                             param.temp_bullets[data].getSize() + 2);
+       }
+}
+
+
+void BulletPanelCB(FL_OBJECT * /*ob*/, long data)
+{
+       /* Here we have to change the background pixmap to that selected */
+       /* by the user. (eg. standard.xpm, psnfss1.xpm etc...)           */
+
+       if (data != current_bullet_panel) {
+               fl_freeze_form(fd_form_bullet->form_bullet);
+               current_bullet_panel = data;
+
+               /* free the current pixmap */
+               fl_free_bmtable_pixmap(fd_form_bullet->bmtable_bullet_panel);
+               LString new_panel;
+               switch (data) {
+                       /* display the new one */
+               case 0 :
+                       new_panel = "standard";
+                       break;
+               case 1 :
+                       new_panel = "amssymb";
+                       break;
+               case 2 :
+                       new_panel = "psnfss1";
+                       break;
+               case 3 :
+                       new_panel = "psnfss2";
+                       break;
+               case 4 :
+                       new_panel = "psnfss3";
+                       break;
+               case 5 :
+                       new_panel = "psnfss4";
+                       break;
+               default :
+                       /* something very wrong happened */
+                       // play it safe for now but should be an exception
+                       current_bullet_panel = 0;  // standard panel
+                       new_panel = "standard";
+                       break;
+               }
+               if (mono_video) {
+                       new_panel += ".xbm";
+                       fl_set_bmtable_file(fd_form_bullet->bmtable_bullet_panel, 6, 6,
+                              LibFileSearch("images", new_panel.c_str()).c_str());
+               }
+               else {
+                       new_panel += ".xpm";
+                       fl_set_bmtable_pixmap_file(fd_form_bullet->bmtable_bullet_panel, 6, 6,
+                              LibFileSearch("images", new_panel.c_str()).c_str());
+               }
+               fl_redraw_object(fd_form_bullet->bmtable_bullet_panel);
+               fl_unfreeze_form(fd_form_bullet->form_bullet);
+       }
+}
+
+
+void BulletBMTableCB(FL_OBJECT *ob, long /*data*/ )
+{
+       /* handle the user input by setting the current bullet depth's pixmap */
+       /* to that extracted from the current chosen position of the BMTable  */
+       /* Don't forget to free the button's old pixmap first.                */
+
+       BufferParams & param = current_view->currentBuffer()->params;
+       int bmtable_button = fl_get_bmtable(ob);
+
+       /* try to keep the button held down till another is pushed */
+       /*  fl_set_bmtable(ob, 1, bmtable_button); */
+       param.temp_bullets[current_bullet_depth].setFont(current_bullet_panel);
+       param.temp_bullets[current_bullet_depth].setCharacter(bmtable_button);
+       fl_set_input(fd_form_bullet->input_bullet_latex,
+                    param.temp_bullets[current_bullet_depth].c_str());
+}
diff --git a/src/chset.C b/src/chset.C
new file mode 100644 (file)
index 0000000..3c9464d
--- /dev/null
@@ -0,0 +1,118 @@
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "chset.h"
+#include "filetools.h"
+#include "lyxlex.h"
+#include "error.h"
+
+
+CharacterSet::CharacterSet()
+{
+       map_=NULL;
+}
+
+
+CharacterSet::~CharacterSet()
+{
+       freeMap();
+}
+
+
+void CharacterSet::freeMap()
+{
+       Cdef* t;
+       while(map_) {
+               t=map_;
+               map_=map_->next;
+               delete t;
+       }
+
+       name_.clean();
+}
+
+
+bool CharacterSet::loadFile(const LString& fname)
+{
+       freeMap();
+    
+       if (fname.empty() || fname=="ascii") 
+               return true;    // ascii 7-bit
+
+       // open definition file
+       lyxerr.debug("Opening keymap file "+ fname+ ".cdef",Error::KBMAP);
+       LString filename = LibFileSearch("kbd", fname.c_str(), "cdef");
+       FilePtr f(filename, FilePtr::read);
+       if (filename.empty() || !f()) {
+               lyxerr.print("Unable to open keymap file");
+               return true;            // no definition, use 7-bit ascii
+       }
+
+       name_=fname;
+
+       // now read the file
+       LyXLex lex(NULL,0);
+       lex.setFile(f());
+
+       bool error=false;
+       LString str;
+       int n;
+       
+       while(lex.IsOK() && !error) {
+               
+               switch(lex.lex()){
+               case LyXLex::LEX_FEOF :
+                       lyxerr.debug("End of parsing of .cdef file",
+                                    Error::KBMAP);
+                       break;
+               default:
+                       // Get Integer
+                       n=lex.GetInteger();
+                       if (n<0) {
+                               error=true;
+                               continue;
+                       }
+       
+                       // Get String
+                       lex.next(true);
+                       str=lex.GetString();
+
+                       Cdef* tempc=new Cdef;
+                       tempc->str=str;
+                       tempc->ic=n;
+                       tempc->next=map_;
+                       map_=tempc;
+       
+                       if (lyxerr.debugging(Error::KBMAP))
+                               fprintf(stderr, "Chardef: %d to [%s]\n", 
+                                       n, tempc->str.c_str());
+                       break;
+               }
+       }
+       
+       return false;
+}
+
+
+bool CharacterSet::encodeString(LString& str)
+{
+       Cdef *t=map_;
+    
+       while(t) {
+               if (t->str==str) {
+                       str=LString(t->ic);
+                       break;
+               }
+               t=t->next;
+       }
+       return (t!=NULL);
+}
+
+
+LString CharacterSet::getName()
+{
+       return name_;
+}
diff --git a/src/chset.h b/src/chset.h
new file mode 100644 (file)
index 0000000..6156606
--- /dev/null
@@ -0,0 +1,44 @@
+// -*- C++ -*-
+#ifndef _Chset_h_
+#define _Chset_h_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+///
+class CharacterSet {
+public:
+       ///
+       CharacterSet();
+       ///
+       ~CharacterSet();
+       
+       ///
+       bool loadFile(const LString&);
+       ///
+       LString getName();
+       ///
+       bool encodeString(LString&);
+private:
+       ///
+       LString name_;
+       
+       ///
+       struct Cdef {
+               ///
+               unsigned char ic;
+               ///
+               LString str;
+               ///
+               Cdef *next;
+       };
+       
+       ///
+       Cdef *map_;
+       ///
+       void freeMap();
+};
+#endif
diff --git a/src/combox.C b/src/combox.C
new file mode 100644 (file)
index 0000000..6c3b435
--- /dev/null
@@ -0,0 +1,503 @@
+// -*- C++ -*-
+/*
+ *  Combox: A combination of two objects (a button and a browser) is
+ *          encapsulated to get a combobox-like object. All XForms 
+ *          functions are hidden.         
+ * 
+ *  GNU Copyleft (C) 1996 Alejandro Aguilar Sierra <asierra@servidor.unam.mx>
+ *                        and the LyX Team.
+ * 
+ *  Dependencies:  Only XForms, but created to be used with LyX.
+ * 
+ */ 
+
+/* Change log:
+ *  
+ *  2/06/1996,   Alejandro Aguilar Sierra 
+ *    Created and tested.
+ *  
+ *  4/06/1996,   Alejandro Aguilar Sierra 
+ *    Added droplist mode (a button with a black down arrow at right)
+ *    and support for middle and right buttons, as XForms choice object.
+ *
+ *  6/06/1996,   Lars Gullik Bjønnes
+ *    Added a combox with an input object. and a pre and a post handle.
+ * 
+ *  22/07/96,    Alejandro Aguilar Sierra 
+ *    Assigned to the browser its own popup window. No more need of
+ *    external pre and post handlers to simulate the wanted behaviour.
+ * 
+ */ 
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "combox.h"
+#include <string.h>
+
+#include "error.h"
+
+//     $Id: combox.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $    
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: combox.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+
+Combox::Combox(combox_type t): type(t)
+{
+   browser = button = 0;
+   callback = 0;
+   label = 0;
+   cb_arg = 0;
+   _pre = 0;
+   _post = 0;
+   sel = 0;
+   form = 0;
+}
+
+
+Combox::~Combox()
+{
+   remove();
+}
+
+
+void Combox::clear()
+{
+       if (browser) fl_clear_browser(browser);   
+       sel = 0;
+       if (type == FL_COMBOX_INPUT)
+               fl_set_input(label, "");
+       else
+               fl_set_object_label(label, "");
+       is_empty = true;
+}
+
+
+void Combox::remove()
+{
+       //lyxerr.print(LString("Button: ") + int(button));
+       if (button) {
+               fl_delete_object(button);
+               fl_free_object(button); 
+       }
+       
+       //lyxerr.print(LString("Label: ") + int(label));
+       if (label && label!=button) {
+               fl_delete_object(label);
+               fl_free_object(label); 
+       }
+       
+       //lyxerr.print(LString("Form: ") + int(form));
+       //lyxerr.print(LString("Browser: ") + int(browser));
+       if (form && browser) {
+          fl_delete_object(browser);
+          fl_free_object(browser);
+          fl_free_form(form);
+       }
+       button = 0; 
+       browser = 0; 
+       label = 0;
+       form = 0;
+       sel = 0;
+       is_empty = true;
+}
+
+
+void Combox::addline(char const* text)
+{
+       if (!browser) return;
+       fl_add_browser_line(browser, text);
+       
+       // By default the first item is selected
+       if (!sel) {
+               sel = 1;
+               if (type == FL_COMBOX_INPUT)
+                       fl_set_input(label, text);
+               else
+                       fl_set_object_label(label, text); 
+       }
+       is_empty = false;
+}
+
+
+bool Combox::select_text(char const* t)
+{
+       if (!browser || !t) return false;
+       for (int i=1; i<=fl_get_browser_maxline(browser); i++) {
+               if (!strcmp(t, fl_get_browser_line(browser, i))) {
+                       select(i);
+                       return true;
+               }
+       }
+       return false;  // t does not exist in browser
+}
+
+
+void Combox::select(int i)
+{
+       if (!browser || !button) return;
+       if (i>0 && i<=fl_get_browser_maxline(browser)) sel = i; 
+       fl_deactivate_object(button);
+       
+       if (type == FL_COMBOX_INPUT)
+               fl_set_input(label, fl_get_browser_line(browser, sel));
+       else
+               fl_set_object_label(label, fl_get_browser_line(browser, sel)); 
+       fl_activate_object(button); 
+}
+
+
+void Combox::add(int x, int y, int w, int hmin, int hmax)
+{  
+       FL_OBJECT *obj;
+       
+       switch(type) {
+       case FL_COMBOX_DROPLIST:
+       {
+               button = obj = fl_add_button(FL_NORMAL_BUTTON,
+                                            x+w-22,y,22,hmin,"@2->");
+               fl_set_object_color(obj,FL_MCOL, FL_MCOL);
+               fl_set_object_dblbuffer(obj, 1);
+               fl_set_object_callback(obj,combo_cb,0);
+               label = obj = fl_add_button(FL_NORMAL_TEXT,x,y,w-22,hmin,"");
+               fl_set_object_boxtype(obj,FL_DOWN_BOX);
+               fl_set_object_color(obj,FL_MCOL,FL_BLACK);
+               fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+               fl_set_object_dblbuffer(obj, 1);
+               fl_set_object_callback(obj,combo_cb,0);
+               break;
+       }
+       case FL_COMBOX_NORMAL:
+       {
+               button = obj = fl_add_button(FL_NORMAL_BUTTON,x,y,w,hmin,"");
+               fl_set_object_color(obj,FL_MCOL, FL_MCOL);
+               fl_set_object_boxtype(obj,FL_DOWN_BOX);
+               fl_set_object_callback(obj,combo_cb,0);
+               fl_set_object_color(obj,FL_MCOL,FL_BLACK);
+               label = button;
+               break;
+       }
+       case FL_COMBOX_INPUT:
+       {
+               button = obj = fl_add_button(FL_NORMAL_BUTTON,
+                                            x+w-22,y,22,hmin,"@2->");
+               fl_set_object_color(obj,FL_MCOL, FL_MCOL);
+               fl_set_object_callback(obj,combo_cb,0);
+               label = obj = fl_add_input(FL_NORMAL_INPUT,x,y,w-22,hmin,"");
+               fl_set_object_boxtype(obj,FL_DOWN_BOX);
+               fl_set_object_return(obj, FL_RETURN_END_CHANGED);
+               fl_set_object_callback(obj,input_cb,0);
+               //fl_set_object_color(obj,FL_MCOL,FL_BLACK);
+               //fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+               break;
+       }
+       } // end of switch
+
+       label->u_vdata = (void*)this;
+       button->u_vdata = (void*)this;
+
+       // Hmm, it seems fl_create_browser is broken in xforms 0.86.
+       // We have to work around that by creating the dropped browser form
+       // at this point already. However, this means that we have
+       // to do a little hacking: (Asger)
+       FL_FORM * current_form = fl_current_form;
+       fl_end_form();
+
+       bw = w+20; bh = hmax-hmin-12;
+
+       form = fl_bgn_form(FL_NO_BOX, bw, bh);
+       browser = obj = fl_add_browser(FL_HOLD_BROWSER, 0, 0, bw,bh,"");
+       fl_set_object_boxtype(obj,FL_UP_BOX);
+       fl_set_object_color(obj,FL_MCOL, FL_YELLOW);
+       fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
+       fl_set_object_callback(obj,combo_cb,2);
+       fl_end_form();
+       browser->u_vdata = (void*)this;
+       form->u_vdata = browser;
+       fl_register_raw_callback(form, ButtonPressMask|KeyPressMask,peek_event);
+
+       // And revert to adding to the old form (Asger)
+       fl_addto_form(current_form);
+}
+
+
+static Window save_window;
+
+
+void Combox::Redraw()
+{
+       if (browser) fl_redraw_object(browser);
+       if (button) fl_redraw_object(button);
+       if (label) fl_redraw_object(label);
+}
+void Combox::Show()
+{
+       if (_pre) _pre();
+       
+       int tmp;
+       XGetInputFocus(fl_display, &save_window, &tmp); //BUG-Fix Dietmar
+       XFlush(fl_display);
+       if (button && type != FL_COMBOX_NORMAL) {
+               fl_set_object_label(button, "@2<-");          
+               fl_redraw_object(button);
+       }
+       int x = label->form->x + label->x, y = label->form->y + label->y;
+       fl_set_form_position(form, x, y + label->h);
+       fl_show_form(form, FL_PLACE_POSITION, FL_NOBORDER, "");
+        if (sel>0) {
+               fl_set_browser_topline(browser, sel);
+               fl_select_browser_line(browser, sel);
+       }
+       XGrabPointer(fl_display, form->window, false,
+                    ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
+                    GrabModeAsync, GrabModeAsync,
+                    0, 0,0);
+       XFlush(fl_display);
+}
+
+void Combox::Hide(int who)
+{  
+       if (!who && browser && label) {
+               sel = fl_get_browser(browser);
+               
+               if (type == FL_COMBOX_INPUT)
+                       fl_set_input(label, fl_get_browser_line(browser, sel));
+               else
+                       fl_set_object_label(label,
+                                           fl_get_browser_line(browser, sel));         
+               if (callback) callback(sel,cb_arg);
+       }
+        XUngrabPointer(fl_display, 0);
+       XFlush(fl_display);
+        if (form) {
+               fl_hide_form(form);
+               XSetInputFocus(fl_display, save_window,
+                              RevertToParent, CurrentTime); // BUG-FIX-Dietmar
+               XFlush(fl_display);
+        }
+       if (button) {
+               if (type != FL_COMBOX_NORMAL){
+                       fl_set_object_label(button, "@2->");
+                       fl_redraw_object(button);
+               }
+       } 
+        if (_post) _post();
+}
+
+
+void Combox::activate()
+{
+       if (browser) fl_activate_object(browser);
+       if (button) fl_activate_object(button);
+       if (label) fl_activate_object(label);
+}
+
+
+void Combox::deactivate()
+{
+       if (browser) fl_deactivate_object(browser);
+       if (button) fl_deactivate_object(button);
+       if (label) fl_deactivate_object(label);
+}
+
+void Combox::input_cb(FL_OBJECT *ob, long)
+{
+       Combox *combo = (Combox*)ob->u_vdata;
+
+       char const *text = fl_get_input(ob);
+
+       combo->addto(text);
+       combo->is_empty = false;
+}
+
+
+void Combox::combo_cb(FL_OBJECT *ob, long data)
+{
+       Combox *combo = (Combox*)ob->u_vdata;
+       switch (data) {
+       case 0:
+       {  
+               int i = combo->get();
+               switch (fl_get_button_numb(ob)) {
+               case 2: 
+               {
+                       combo->select(--i); 
+                       if (combo->callback)
+                               combo->callback(combo->sel,
+                                               combo->cb_arg);
+                       break;
+               }
+               case 3: 
+               {
+                       combo->select(++i);  
+                       if (combo->callback)
+                               combo->callback(combo->sel,
+                                               combo->cb_arg);
+                       break;
+               }
+               default: combo->Show(); break;
+               }
+               break;
+       }
+       case 2:
+               combo->Hide();
+               break;
+       }
+}
+
+
+int Combox::peek_event(FL_FORM * form, void *xev)
+{
+       FL_OBJECT *ob = (FL_OBJECT *)form->u_vdata;
+       Combox *combo = (Combox*)ob->u_vdata;
+       
+#if FL_REVISION < 86
+       if(((XEvent *)xev)->type==ButtonPress && !ob->belowmouse)
+#endif
+#if FL_REVISION > 85
+// I don't know why belowmouse does not work, but it doesn't. (Asger)
+               if (((XEvent *) xev)->type == ButtonPress && (
+                       ((XEvent *)xev)->xbutton.x - ob->x < 0 ||
+                       ((XEvent *)xev)->xbutton.x - ob->x > ob->w ||
+                       ((XEvent *)xev)->xbutton.y - ob->y < 0 ||
+                       ((XEvent *)xev)->xbutton.y - ob->y > ob->h))
+#endif
+       {
+               combo->Hide(1); 
+               return 1;
+       }
+               
+       if (((XEvent*)xev)->type != KeyPress) return 0;
+       
+       char s_r[10];
+       static int num_bytes;
+       KeySym keysym_return;
+       num_bytes = XLookupString(&((XEvent*)xev)->xkey, s_r, 10, 
+                                 &keysym_return, NULL);
+       XFlush(fl_display);
+       switch (keysym_return) {
+       case XK_Down:
+               if (fl_get_browser(combo->browser) <
+                   fl_get_browser_maxline(combo->browser))
+                       fl_select_browser_line(combo->browser,
+                                              fl_get_browser(combo->browser)+1);
+               if (fl_get_browser(combo->browser)>=
+                   fl_get_browser_topline(combo->browser) +
+                   fl_get_browser_screenlines(combo->browser))
+                       fl_set_browser_topline(combo->browser,
+                                              fl_get_browser(combo->browser)
+                                              - fl_get_browser_screenlines(combo->browser)+1);
+               if (fl_get_browser(combo->browser)<
+                   fl_get_browser_topline(combo->browser))
+                       fl_set_browser_topline(combo->browser,
+                                              fl_get_browser(combo->browser));
+               return 1; 
+       case XK_Up:
+               if (fl_get_browser(combo->browser) > 1)
+                       fl_select_browser_line(combo->browser,
+                                              fl_get_browser(combo->browser)-1);
+               if (fl_get_browser(combo->browser)>=
+                   fl_get_browser_topline(combo->browser) +
+                   fl_get_browser_screenlines(combo->browser))
+                       fl_set_browser_topline(combo->browser,
+                                              fl_get_browser(combo->browser)
+                                              - fl_get_browser_screenlines(combo->browser)+1);
+               if (fl_get_browser(combo->browser) <
+                   fl_get_browser_topline(combo->browser))
+                       fl_set_browser_topline(combo->browser,
+                                              fl_get_browser(combo->browser));
+               return 1;
+       case XK_Return:
+               combo->Hide();
+               return 1;
+       case XK_Escape:
+               combo->Hide(1);
+               return 1;
+       }
+       return 0;  
+}
+       
+
+#ifdef TESTCOMBO
+typedef struct {
+       FL_FORM *test;
+       FL_OBJECT *bar;
+       void *vdata;
+       long ldata;
+} FD_test;
+
+//Combox combo(FL_COMBOX_DROPLIST);
+Combox combo(FL_COMBOX_INPUT);
+
+FD_test *fd_test;
+   
+FD_test *create_form_test(void)
+{
+   FL_OBJECT *obj;
+   FD_test *fdui = (FD_test *) fl_calloc(1, sizeof(*fdui));
+   
+   fdui->test = fl_bgn_form(FL_NO_BOX, 320, 190);
+   obj = fl_add_box(FL_UP_BOX,0,0,320,190,"");
+   obj = fl_add_box(FL_DOWN_BOX,10,50,300,110,"");
+   obj = fl_add_button(FL_NORMAL_BUTTON,250,10,50,30,_("Done"));
+   combo.add(10,15,120,25,135); 
+   fl_end_form();
+
+  return fdui;
+}
+
+void combo_cb(int i)
+{
+   fprintf(stderr, "selected %d:%s\n", i, combo.getline());
+}
+
+int main(int argc, char *argv[])
+{
+       //int n1;
+   
+   // Same defaults as in lyx 
+   FL_IOPT cntl;
+   cntl.buttonFontSize = FL_NORMAL_SIZE;
+   cntl.browserFontSize = FL_NORMAL_SIZE;
+   cntl.labelFontSize = FL_NORMAL_SIZE;
+   cntl.choiceFontSize = FL_NORMAL_SIZE;
+   cntl.inputFontSize = FL_NORMAL_SIZE;
+   cntl.borderWidth = -2;
+   fl_set_defaults(FL_PDButtonFontSize, &cntl);  
+   fl_set_defaults(FL_PDBrowserFontSize, &cntl);  
+   fl_set_defaults(FL_PDLabelFontSize, &cntl);  
+   fl_set_defaults(FL_PDChoiceFontSize, &cntl);  
+   fl_set_defaults(FL_PDInputFontSize, &cntl);  
+   fl_set_defaults(FL_PDBorderWidth, &cntl);
+   fl_initialize(&argc, argv, 0, 0, 0);
+   
+   fd_test = create_form_test();
+
+   /* fill-in form initialization code */
+   combo.addline("Title");
+   combo.addline("Author");
+   combo.addline("Date");
+   combo.addline("Abstract");
+   combo.addline("Chapter");
+   combo.addline("Section");
+   combo.addline("Subsection");
+   combo.addline("List");
+   combo.addline("Description");
+   combo.addline("Verse");
+   combo.addline("Verbatim");
+   combo.setcallback(combo_cb);
+//   combo.select(4);
+   
+   /* show the first form */
+   fl_show_form(fd_test->test,FL_PLACE_CENTER,FL_FULLBORDER,"test");
+   fl_do_forms();
+   return 0;
+}
+
+#endif
diff --git a/src/combox.h b/src/combox.h
new file mode 100644 (file)
index 0000000..e0683ef
--- /dev/null
@@ -0,0 +1,216 @@
+// -*- C++ -*-
+/*
+ *  Combox: A combination of two objects (a button and a browser) is
+ *          encapsulated to get a combobox-like object. All XForms 
+ *          functions are hidden.         
+ * 
+ *  GNU Copyleft (C) 1996 Alejandro Aguilar Sierra <asierra@servidor.unam.mx>
+ *                        and the LyX Team.
+ * 
+ *  Dependencies:  Only XForms, but created to be used with LyX.
+ * 
+ */ 
+
+/* Change log:
+ *  
+ *  2/06/1996,   Alejandro Aguilar Sierra 
+ *    Created and tested.
+ *  
+ *  4/06/1996,   Alejandro Aguilar Sierra 
+ *    Added droplist mode (a button with a black down arrow at right)
+ *    and support for middle and right buttons, as XForms choice object.
+ */ 
+
+#ifndef _COMBOX_H_
+#define _COMBOX_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+
+///
+enum combox_type {
+       ///
+       FL_COMBOX_NORMAL,
+       ///
+       FL_COMBOX_DROPLIST,
+       ///
+       FL_COMBOX_INPUT
+};
+
+/// callback prototype
+typedef void (*FL_COMBO_CB) (int, void*);
+/// pre post prototype
+typedef void (*FL_COMBO_PRE_POST) ();
+
+
+///
+class Combox {
+public:
+       ///
+       Combox(combox_type t=FL_COMBOX_NORMAL);
+       ///
+       ~Combox();
+
+       /** To add this object to a form. Note that there are two heights
+        for normal (button) and expanded (browser) mode each. */
+       void add(int x, int y, int w, int hmin, int hmax);
+       
+       /// Add lines. Same as for fl_browser object
+       void addline(char const*);
+       /// Add lines. Same as for fl_browser object
+       void addto(char const*);
+       
+       /// Returns the selected item
+       int get();
+   
+       /// Returns a pointer to the selected line of text
+       char const*getline();
+   
+       ///  Select an arbitrary item
+       void select(int);
+       ///
+        bool select_text(char const*);
+   
+       ///  Clear all the list
+       void clear();
+
+       /// Is the combox cleared (empty)
+       bool empty() { return is_empty; }
+       
+       /// Remove the objects from the form they are in. 
+       void remove();
+
+       /**  Assign a callback to this object. The callback should be a void
+        function with a int and a void pointer as parameters. */
+       void setcallback(FL_COMBO_CB, void *);
+   
+        ///  Pre handler
+       void setpre(FL_COMBO_PRE_POST);
+       /// Post handler
+       void setpost(FL_COMBO_PRE_POST);
+       
+       ///  XForms attributes
+       void resize(unsigned);
+       ///
+       void gravity(unsigned, unsigned);
+       ///
+       void activate();
+       ///
+       void deactivate();
+       ///
+        void shortcut(char const*, int);
+       ///
+       void Redraw();
+       ///
+       void Show();
+ protected:
+        /// At least Hide should not be public
+       void Hide(int who = 0);
+       ///
+       FL_OBJECT *browser;
+ private:
+       ///
+       combox_type type;
+       ///
+        int bw, bh;
+       ///
+       int sel;
+       ///
+       bool is_empty;
+       ///
+       static void combo_cb(FL_OBJECT *, long);
+       ///
+       static void input_cb(FL_OBJECT *, long);
+       ///
+        static int  peek_event(FL_FORM *, void *);
+       ///
+       FL_COMBO_CB callback;
+       ///
+       void *cb_arg;
+       ///
+       FL_COMBO_PRE_POST _pre;
+       ///
+       FL_COMBO_PRE_POST _post;
+       ///
+       FL_OBJECT *button;
+       ///
+       FL_OBJECT *label;
+       ///
+        FL_FORM* form;
+};
+
+
+
+//-----------------  Inline methods  --------------------------- 
+
+inline
+void Combox::addto(char const* text)
+{
+       if (browser) {
+               fl_addto_browser(browser, text);
+               is_empty = false;
+       }
+}
+
+inline
+void Combox::resize(unsigned r)
+{
+   fl_set_object_resize(button, r);
+   if (label!=button) fl_set_object_resize(label, r); 
+}
+
+inline
+void Combox::gravity(unsigned g1, unsigned g2)
+{
+   fl_set_object_gravity(button, g1, g2);
+   if (label!=button) fl_set_object_gravity(label, g1, g2); 
+}
+
+inline
+void Combox::shortcut(char const* s, int i)
+{
+   if (button)
+      fl_set_object_shortcut(button,s,i);
+}
+
+inline
+void Combox::setcallback(FL_COMBO_CB cb, void *a = NULL)
+{
+   callback = cb;
+   cb_arg = a;
+}
+
+inline
+void Combox::setpre(FL_COMBO_PRE_POST cb)
+{
+       _pre = cb;
+}
+
+inline
+void Combox::setpost(FL_COMBO_PRE_POST cb)
+{
+       _post = cb;
+}
+
+inline
+int Combox::get()
+{
+   return sel;
+}
+
+inline
+char const*Combox::getline()
+{
+    if (type==FL_COMBOX_INPUT) 
+      return fl_get_input(label);
+    else
+      return ((browser) ? fl_get_browser_line(browser, sel): (char const*)NULL);
+}
+
+#endif
+
+
diff --git a/src/commandtags.h b/src/commandtags.h
new file mode 100644 (file)
index 0000000..0418b0d
--- /dev/null
@@ -0,0 +1,244 @@
+// -*- C++ -*-
+/* ======================================================================= *\
+   Docu   : To add a new function:
+   - add a new enum constant immediately before LFUN_LASTACTION
+   - add an appropriate line to lyx_func_table in LyXAction.C
+   - add a branch to the switch in LyXFunc::Dispath() in lyxfunc.C
+   - add a help text in LyXAction::getHelp() in LyXAction.C
+   \* ======================================================================= */
+
+#ifndef _COMMANDTAGS_H_
+#define _COMMANDTAGS_H_
+
+
+/** These are all the lyxfunctions (as enums).
+ */
+enum kb_action {
+       LFUN_UNKNOWN_ACTION = -1,
+       LFUN_NOACTION = 0,
+       LFUN_PREFIX,
+       LFUN_CENTER,
+       LFUN_MENUNEW,
+       LFUN_MENUOPEN,
+       LFUN_MENUWRITE,
+       LFUN_MENUWRITEAS,
+       LFUN_MENUPRINT,
+       LFUN_MENUSENDTO,
+       LFUN_RUNLATEX,
+        LFUN_BUILDPROG,
+       LFUN_TOCVIEW,
+       LFUN_PREVIEW,
+       LFUN_PREVIEWPS,
+       LFUN_CLOSEBUFFER,
+       LFUN_QUIT,
+       LFUN_AUTOSAVE,
+       LFUN_UNDO,
+       LFUN_REDO,
+       LFUN_MENUSEARCH,
+       LFUN_PASTE,
+       LFUN_PASTESELECTION,
+       LFUN_CUT,
+       LFUN_COPY,
+       LFUN_GOTOERROR,
+       LFUN_GOTONOTE,
+       LFUN_OPENSTUFF,
+       LFUN_HYPHENATION,
+       LFUN_HFILL,
+       LFUN_DEPTH,
+       LFUN_FREE,
+       LFUN_TEX,
+       LFUN_FOOTMELT,
+       LFUN_MARGINMELT,
+       LFUN_PREVBUFFER,
+       LFUN_EMPH,
+       LFUN_BOLD,
+       LFUN_ROMAN,
+       LFUN_NOUN,
+       LFUN_RIGHT,
+       LFUN_LEFT,
+       LFUN_UP,
+       LFUN_DOWN,
+       LFUN_PRIOR,
+       LFUN_NEXT,
+       LFUN_HOME,
+       LFUN_END,
+       LFUN_TAB,
+       LFUN_WORDRIGHT,
+       LFUN_WORDLEFT,
+       LFUN_BEGINNINGBUF,
+       LFUN_ENDBUF,
+       LFUN_RIGHTSEL,
+       LFUN_LEFTSEL,
+       LFUN_UPSEL,
+       LFUN_DOWNSEL,
+       LFUN_PRIORSEL,
+       LFUN_NEXTSEL,
+       LFUN_HOMESEL,
+       LFUN_ENDSEL,
+       LFUN_WORDRIGHTSEL,
+       LFUN_WORDLEFTSEL,
+       LFUN_BEGINNINGBUFSEL,
+       LFUN_ENDBUFSEL,
+       LFUN_PROTECTEDSPACE,
+       LFUN_SETMARK,
+       LFUN_DELETE,
+       LFUN_BACKSPACE,
+       LFUN_BREAKLINE,
+       LFUN_BREAKPARAGRAPH,
+       LFUN_BREAKPARAGRAPHKEEPLAYOUT,
+       LFUN_QUOTE,
+       LFUN_CIRCUMFLEX,
+       LFUN_GRAVE,
+       LFUN_ACUTE,
+       LFUN_TILDE,
+       LFUN_CEDILLA,
+       LFUN_MACRON,
+       LFUN_UNDERBAR,
+       LFUN_UNDERDOT,
+       LFUN_CIRCLE,
+       LFUN_TIE,
+       LFUN_BREVE,
+       LFUN_CARON,
+       LFUN_SPECIAL_CARON,
+       LFUN_HUNG_UMLAUT,
+       LFUN_UMLAUT,
+       LFUN_DOT,
+       LFUN_OGONEK,
+       LFUN_VECTOR,        //  Alejandro 040696
+       LFUN_SELFINSERT,
+       LFUN_GETBUFNAME,
+       LFUN_GETXY,
+       LFUN_SETXY,
+       LFUN_CHARATCURSOR,
+       LFUN_LINEATCURSOR,
+       LFUN_GETLAYOUT,
+       LFUN_GETFONT,
+       LFUN_GETLATEX,
+       LFUN_GETNAME,
+       LFUN_NOTIFY,
+        LFUN_GOTOFILEROW,   // Edmar 12/23/98
+       LFUN_INSERT_INSET_LATEX,
+       LFUN_INSERT_NOTE,
+       LFUN_KMAP_OFF,
+       LFUN_KMAP_PRIM,
+       LFUN_KMAP_SEC,
+       LFUN_KMAP_TOGGLE,
+       LFUN_INSERT_MATH,
+       LFUN_INSERT_MATRIX,
+       LFUN_GREEK,
+       LFUN_MATH_LIMITS,  
+       LFUN_GREEK_TOGGLE,
+       LFUN_MATH_DELIM,    //  Alejandro 180696
+       LFUN_MATH_DISPLAY,  // was INSERT_EQUATION  Alejandro 180696
+       LFUN_MATH_MODE,     //  Alejandro 040696
+       LFUN_MATH_NUMBER,   //  Alejandro 040696
+       LFUN_MATH_NONUMBER,   //  Alejandro 180696
+       LFUN_MATH_SIZE,   //  Alejandro 150896
+       LFUN_MATH_MACRO,  // ale970510
+       LFUN_MATH_MACROARG,  // ale970510
+       LFUN_FIGURE,
+       LFUN_TABLE,
+       LFUN_MELT,
+       LFUN_DELETE_WORD_FORWARD,
+       LFUN_DELETE_WORD_BACKWARD,
+       LFUN_DELETE_LINE_FORWARD,
+       LFUN_MARK_OFF,
+       LFUN_MARK_ON,
+       LFUN_LAYOUT,
+       LFUN_LAYOUTNO,    // Lgb 97-06-10
+       LFUN_LAYOUT_CHARACTER,
+       LFUN_LAYOUT_PARAGRAPH,
+       LFUN_LAYOUT_DOCUMENT,
+       LFUN_LAYOUT_PAPER,
+       LFUN_LAYOUT_TABLE,
+       LFUN_LAYOUT_QUOTES,
+       LFUN_LAYOUT_PREAMBLE,
+        LFUN_LAYOUT_SAVE_DEFAULT,
+       LFUN_DROP_LAYOUTS_CHOICE,
+       LFUN_CODE,
+       LFUN_SANS,
+       LFUN_DEFAULT,
+       LFUN_UNDERLINE,
+       LFUN_FONT_SIZE,
+       LFUN_FONT_STATE,
+       LFUN_UPCASE_WORD,
+       LFUN_LOWCASE_WORD,
+       LFUN_CAPITALIZE_WORD,
+       LFUN_INSERT_LABEL,
+       LFUN_INSERT_REF,
+       LFUN_PUSH_TOOLBAR,
+       LFUN_ADD_TO_TOOLBAR,
+       LFUN_DEPTH_MIN,                // RVDK_PATCH_5
+       LFUN_DEPTH_PLUS,                     // RVDK_PATCH_5
+       LFUN_MENU_OPEN_BY_NAME,              // RVDK_PATCH_5
+       LFUN_SPELLCHECK,                     // RVDK_PATCH_5
+       LFUN_CANCEL,                         // RVDK_PATCH_5
+       LFUN_META_FAKE,                      // RVDK_PATCH_5
+       LFUN_EXEC_COMMAND,
+       LFUN_FILE_INSERT,
+       LFUN_FILE_INSERT_ASCII,         // CFO-G 1997-11-19
+       LFUN_FILE_NEW,
+       LFUN_FILE_OPEN,
+       LFUN_UP_PARAGRAPH,              // Asger 1996-10-01
+       LFUN_UP_PARAGRAPHSEL,           // Asger 1996-10-01
+       LFUN_DOWN_PARAGRAPH,            // Asger 1996-10-01
+       LFUN_DOWN_PARAGRAPHSEL,         // Asger 1996-10-01
+       LFUN_BREAKPARAGRAPH_SKIP,
+       LFUN_BACKSPACE_SKIP,
+       LFUN_DELETE_SKIP,
+       LFUN_MENUNEWTMPLT,              // Asger 1997-02-02
+       LFUN_RUNDVIPS,                  // Asger 1997-02-02
+       LFUN_MENURELOAD,                // Asger 1997-02-02
+       LFUN_FAX,                       // Asger 1997-02-10
+       LFUN_RECONFIGURE,               // Asger 1997-02-14
+       LFUN_INSERT_CITATION,           // AAS 97-02-23
+       LFUN_INSERT_BIBTEX,             // AAS 97-02-23
+       LFUN_INDEX_INSERT,              // Lgb 97-02-27
+       LFUN_INDEX_INSERT_LAST,         // Reh 98-09-17
+       LFUN_INDEX_PRINT,               // Lgb 97-02-27
+       LFUN_APROPOS,                   // Asger 1997-02-27
+       LFUN_LATEX_LOG,                 // Lgb 97-04-05
+       LFUN_LAYOUT_COPY,               // Asger 1997-05-04
+       LFUN_LAYOUT_PASTE,              // Asger 1997-05-04
+       LFUN_TABINSERT,                 // Ale 970515
+       LFUN_CHILDINSERT,               // Ale 970521
+       LFUN_CHILDOPEN,                 // Ale 970528
+       LFUN_TOC_INSERT,                // Lgb 97-05-27
+       LFUN_LOA_INSERT,                // Bernhard 97-08-07
+       LFUN_LOF_INSERT,                // Lgb 97-05-27
+       LFUN_LOT_INSERT,                // Lgb 97-05-27
+       LFUN_READ_ONLY_TOGGLE,          // Lgb 97-05-27    
+       LFUN_BIBDB_ADD,                 // Ale 970530   
+       LFUN_BIBDB_DEL,                 // Ale 970530
+       LFUN_BIBTEX_STYLE,              // Ale 970530
+       LFUN_GETTIP,                    // Ale 970603
+       LFUN_VC_REGISTER,               // Lgb 97-07-01
+       LFUN_VC_CHECKIN,                // Lgb 97-07-01
+       LFUN_VC_CHECKOUT,               // Lgb 97-07-01
+       LFUN_VC_REVERT,                 // Lgb 97-07-01
+       LFUN_VC_UNDO,                   // Lgb 97-07-01
+       LFUN_VC_HISTORY,                // Lgb 97-07-01
+       LFUN_REFTOGGLE,                 // Ale 970723
+       LFUN_EXPORT,                    // Lgb 97-07-29
+       LFUN_INSERTFOOTNOTE,            // Bernhard 97-08-07
+       LFUN_REFGOTO,                   // Ale 970806
+       LFUN_REFBACK,                   // Ale 970806
+       LFUN_PARENTINSERT,              // Ale 970813
+       LFUN_REMOVEERRORS,              // Asger 970906
+       LFUN_LDOTS,                     // Asger 970929
+       LFUN_END_OF_SENTENCE,           // Asger 970929
+       LFUN_RUNCHKTEX,                 // Asger 971030
+       LFUN_BUFFERBULLETSSELECT,       // ARRae 971018
+       LFUN_TOGGLECURSORFOLLOW,        // ARRae 971202
+       LFUN_HTMLURL,                   // CFO-G 971121
+       LFUN_URL,                       // CFO-G 971121
+       LFUN_WORDFINDFORWARD,           // Etienne 980216
+       LFUN_WORDFINDBACKWARD,          // Etienne 980220
+       LFUN_APPENDIX, // ettrich 980505
+       LFUN_IMPORT,                    // Asger 980724
+       LFUN_MENU_SEPARATOR,            // Asger 990220
+       LFUN_LASTACTION  /* this marks the end of the table */
+};
+
+#endif
+
diff --git a/src/credits.C b/src/credits.C
new file mode 100644 (file)
index 0000000..f5f7d7a
--- /dev/null
@@ -0,0 +1,108 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+
+#include "credits.h"
+#include "credits_form.h"
+
+#include "LString.h"
+#include "filetools.h"
+#include "lyx_gui_misc.h" // CancelCloseBoxCB
+#include "gettext.h"
+
+//     $Id: credits.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $   
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: credits.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+/* extern */
+extern LString system_lyxdir;
+
+/**** Forms and Objects ****/
+
+static FD_form_credits *fd_form_credits = NULL;
+static FD_copyright *fd_form_copyright = NULL;
+
+void CreditsOKCB(FL_OBJECT *, long) {
+      fl_hide_form(fd_form_credits->form_credits);
+      fl_free_form(fd_form_credits->form_credits);
+      fd_form_credits->form_credits = NULL;
+}
+
+/*---------------------------------------*/
+/* read credits from file and display them */
+void ShowCredits()
+{
+       /* generate the credits form if it doesn't exist */
+       if (!fd_form_credits || !fd_form_credits->form_credits) {
+               
+               /* read the credits into the browser */ 
+               
+               /* try file LYX_DIR/CREDITS */ 
+               LString real_file = AddName (system_lyxdir, "CREDITS");
+               fd_form_credits = create_form_form_credits();
+               fl_set_form_atclose(fd_form_credits->form_credits,
+                                   CancelCloseBoxCB, NULL);
+
+               if (!fl_load_browser(fd_form_credits->browser_credits, 
+                                    real_file.c_str())) {
+                       fl_add_browser_line(fd_form_credits->browser_credits,
+                                           _("ERROR: LyX wasn't able to read"
+                                           " CREDITS file"));
+                       fl_add_browser_line(fd_form_credits->browser_credits, "");
+                       fl_add_browser_line(fd_form_credits->browser_credits,
+                                           _("Please install correctly to estimate"
+                                           " the great"));
+                       fl_add_browser_line(fd_form_credits->browser_credits,
+                                           _("amount of work other people have done"
+                                           " for the LyX project."));
+               }
+       }
+
+       if (fd_form_credits->form_credits->visible) {
+               fl_raise_form(fd_form_credits->form_credits);
+       } else {
+               fl_show_form(fd_form_credits->form_credits,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
+                            _("Credits"));
+       }
+}
+
+// Callback for copyright and warranty form
+void CopyrightOKCB(FL_OBJECT *, long) {
+       fl_hide_form(fd_form_copyright->copyright);
+       fl_free_form(fd_form_copyright->copyright);
+       fd_form_copyright->copyright = NULL;
+}
+
+// Show copyright and warranty form
+void ShowCopyright()
+{
+       if (!fd_form_copyright || !fd_form_copyright->copyright) {
+               fd_form_copyright = create_form_copyright();
+               fl_set_form_atclose(fd_form_copyright->copyright, 
+                                   CancelCloseBoxCB, NULL);
+       }
+
+       // Funny emotional remark by Asger deleted. (Lgb)
+       
+       if (fd_form_copyright->copyright->visible) {
+               fl_raise_form(fd_form_copyright->copyright);
+       } else {
+               fl_show_form(fd_form_copyright->copyright,
+                            FL_PLACE_MOUSE, FL_FULLBORDER,
+                            _("Copyright and Warranty"));
+       }
+}
diff --git a/src/credits.h b/src/credits.h
new file mode 100644 (file)
index 0000000..81fd401
--- /dev/null
@@ -0,0 +1,8 @@
+// -*- C++ -*-
+#ifndef _CREDITS_H
+#define _CREDITS_H
+
+void ShowCredits();
+void ShowCopyright();
+
+#endif
diff --git a/src/credits_form.C b/src/credits_form.C
new file mode 100644 (file)
index 0000000..c6ddea8
--- /dev/null
@@ -0,0 +1,75 @@
+// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "credits_form.h"
+
+FD_form_credits *create_form_form_credits(void)
+{
+  FL_OBJECT *obj;
+  FD_form_credits *fdui = (FD_form_credits *) fl_calloc(1, sizeof(FD_form_credits));
+
+  fdui->form_credits = fl_bgn_form(FL_NO_BOX, 500, 330);
+  obj = fl_add_box(FL_UP_BOX,0,0,500,330,"");
+  obj = fl_add_button(FL_RETURN_BUTTON,180,290,140,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_South, FL_South);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+    fl_set_object_callback(obj,CreditsOKCB,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,10,40,480,30,_("Matthias"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_ITALIC_STYLE);
+    fl_set_object_gravity(obj, FL_NorthWest, FL_NorthEast);
+  obj = fl_add_text(FL_NORMAL_TEXT,10,10,480,30,_("All these people have contributed to the LyX project. Thanks,"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+    fl_set_object_gravity(obj, FL_NorthWest, FL_NorthEast);
+  fdui->browser_credits = obj = fl_add_browser(FL_NORMAL_BROWSER,10,80,480,200,"");
+    fl_set_object_gravity(obj, FL_NorthWest, FL_SouthEast);
+  fl_end_form();
+
+  //fdui->form_credits->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_copyright *create_form_copyright(void)
+{
+  FL_OBJECT *obj;
+  FD_copyright *fdui = (FD_copyright *) fl_calloc(1, sizeof(FD_copyright));
+
+  fdui->copyright = fl_bgn_form(FL_NO_BOX, 450, 430);
+  obj = fl_add_box(FL_UP_BOX,0,0,450,430,"");
+  obj = fl_add_text(FL_NORMAL_TEXT,10,10,430,50,_("LyX is Copyright (C) 1995 by Matthias Ettrich,\n1995-1999 LyX Team"));
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+    fl_set_object_gravity(obj, FL_NorthWest, FL_NorthEast);
+  obj = fl_add_text(FL_NORMAL_TEXT,10,70,430,110,_("This program is free software; you can redistribute it\nand/or modify it under the terms of the GNU General\nPublic License as published by the Free Software\nFoundation; either version 2 of the License, or\n(at your option) any later version."));
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+  obj = fl_add_button(FL_RETURN_BUTTON,160,390,140,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_South, FL_South);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+    fl_set_object_callback(obj,CopyrightOKCB,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,10,190,430,190,_("LyX is distributed in the hope that it will\nbe useful, but WITHOUT ANY WARRANTY;\nwithout even the implied warranty of MERCHANTABILITY\nor FITNESS FOR A PARTICULAR PURPOSE.\nSee the GNU General Public License for more details.\nYou should have received a copy of\nthe GNU General Public License\nalong with this program; if not, write to\nthe Free Software Foundation, Inc.,\n675 Mass Ave, Cambridge, MA 02139, USA."));
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+  fl_end_form();
+
+  //fdui->copyright->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
diff --git a/src/credits_form.h b/src/credits_form.h
new file mode 100644 (file)
index 0000000..58ac099
--- /dev/null
@@ -0,0 +1,31 @@
+/** Header file generated with fdesign on Mon Apr 12 19:09:41 1999.**/
+
+#ifndef FD_form_credits_h_
+#define FD_form_credits_h_
+
+/** Callbacks, globals and object handlers **/
+extern void CreditsOKCB(FL_OBJECT *, long);
+
+extern void CopyrightOKCB(FL_OBJECT *, long);
+
+
+/**** Forms and Objects ****/
+typedef struct {
+       FL_FORM *form_credits;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *browser_credits;
+} FD_form_credits;
+
+extern FD_form_credits * create_form_form_credits(void);
+typedef struct {
+       FL_FORM *copyright;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+} FD_copyright;
+
+extern FD_copyright * create_form_copyright(void);
+
+#endif /* FD_form_credits_h_ */
diff --git a/src/definitions.h b/src/definitions.h
new file mode 100644 (file)
index 0000000..fb80eda
--- /dev/null
@@ -0,0 +1,184 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+#ifndef _DEFINITIONS_H
+#define _DEFINITIONS_H
+
+// NOTE:
+// We are trying to get rid of the global enums below, so try to _not_
+// add any more of them. Preferably enums should be located inside classes.
+// (i.e. class FooBar {
+//            enum some {
+//                more,
+//                thing
+//            };
+//        }
+//  to be accesed as FooBar::more and FooBar::thing
+
+// ALL the enums below should be given names, this to get better typechecking.
+// some don't have names now because this cause warings when compiling.
+
+
+///
+enum { // no good name for this
+       ///
+        LYX_ENVIRONMENT_DEFAULT = 97,
+       ///
+       LYX_LAYOUT_DEFAULT = 99
+};
+// Could this cause confusion that both DUMMY_LAYOUT and  LAYOUT_DEFAULT has
+// the same value? (Lgb)
+///
+#define LYX_DUMMY_LAYOUT 99
+
+///
+enum LYX_META_KIND {
+       ///
+       LYX_META_FOOTNOTE = 1,
+       ///
+       LYX_META_MARGIN,
+       ///
+       LYX_META_FIG,
+       ///
+       LYX_META_TAB,
+       ///
+       LYX_META_ALGORITHM,
+       ///
+       LYX_META_WIDE_FIG,
+       ///
+       LYX_META_WIDE_TAB,
+       ///
+       LYX_META_HFILL,
+       ///
+       LYX_META_NEWLINE,
+       ///
+       LYX_META_PROTECTED_SEPARATOR,
+       ///
+       LYX_META_INSET
+};
+
+///
+enum LYX_PARSEP {
+       ///
+       LYX_PARSEP_INDENT,
+       ///
+       LYX_PARSEP_SKIP
+};
+
+///
+enum OLD_LYX_PAPER_SIZE {
+       ///
+       OLD_PAPER_A4PAPER,
+       ///
+       OLD_PAPER_A4,
+       ///
+       OLD_PAPER_A4WIDE,
+       ///
+       OLD_PAPER_WIDEMARGINSA4,
+       ///
+       OLD_PAPER_USLETTER,
+       ///
+       OLD_PAPER_A5PAPER,
+       ///
+       OLD_PAPER_B5PAPER,
+       ///
+       OLD_PAPER_EXECUTIVEPAPER,
+       ///
+       OLD_PAPER_LEGALPAPER
+};
+
+///
+enum LYX_PAPER_SIZE {
+       ///
+       PAPER_DEFAULT,
+       ///
+       PAPER_USLETTER,
+       ///
+       PAPER_LEGALPAPER,
+       ///
+       PAPER_EXECUTIVEPAPER,
+       ///
+       PAPER_A3PAPER,
+       ///
+       PAPER_A4PAPER,
+       ///
+       PAPER_A5PAPER,
+       ///
+       PAPER_B5PAPER
+};
+
+///
+enum LYX_VMARGIN_PAPER_TYPE {
+       ///
+       VM_PAPER_DEFAULT,
+       ///
+       VM_PAPER_CUSTOM,
+       ///
+       VM_PAPER_USLETTER,
+       ///
+       VM_PAPER_USLEGAL,
+       ///
+       VM_PAPER_USEXECUTIVE,
+       ///
+       VM_PAPER_A3,
+       ///
+       VM_PAPER_A4,
+       ///
+       VM_PAPER_A5,
+       ///
+       VM_PAPER_B3,
+       ///
+       VM_PAPER_B4,
+       ///
+       VM_PAPER_B5
+};
+
+///
+enum LYX_PAPER_PACKAGES {
+       ///
+       PACKAGE_NONE,
+       ///
+       PACKAGE_A4,
+       ///
+       PACKAGE_A4WIDE,
+       ///
+       PACKAGE_WIDEMARGINSA4
+};
+
+///
+enum LYX_PAPER_ORIENTATION {
+       ///
+       ORIENTATION_PORTRAIT,
+       ///
+       ORIENTATION_LANDSCAPE
+};
+
+///
+enum LYX_PEXTRA_TYPE {
+       ///
+        PEXTRA_NONE,
+       ///
+        PEXTRA_INDENT,
+       ///
+        PEXTRA_MINIPAGE,
+       ///
+       PEXTRA_FLOATFLT
+};
+
+///
+enum LYX_MINIPAGE_ALIGNMENT {
+       ///
+        MINIPAGE_ALIGN_TOP,
+       ///
+        MINIPAGE_ALIGN_MIDDLE,
+       ///
+        MINIPAGE_ALIGN_BOTTOM
+};
+
+#endif
diff --git a/src/error.C b/src/error.C
new file mode 100644 (file)
index 0000000..a38bd43
--- /dev/null
@@ -0,0 +1,42 @@
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "error.h"
+#include <stdio.h>
+
+//     $Id: error.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $     
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: error.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+Error::Error(int level) // should loglevel also be an argument?
+{
+       debuglevel = level;
+       loglevel = 0;
+}
+
+
+void Error::setDebugLevel(int level)
+{
+       debuglevel = level;
+}
+
+
+void Error::debug(LString const & msg, int level)
+{
+       if (debuglevel & level)
+               print(msg);
+       // should also print to the logfile
+}
+
+void Error::print(LString const & msg)
+{
+       if (!msg.empty()) 
+               fprintf(stderr, "%s\n", msg.c_str());
+}
+
+
diff --git a/src/error.h b/src/error.h
new file mode 100644 (file)
index 0000000..96a3f80
--- /dev/null
@@ -0,0 +1,79 @@
+// -*- C++ -*-
+
+#ifndef _ERROR_H_
+#define _ERROR_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+///
+class Error
+{
+public:
+       ///
+       enum DEBUG_LEVELS {
+               ///
+               INFO       = (1),        // 1
+               ///
+               INIT       = (1 << 1),   // 2
+               ///
+               KEY        = (1 << 2),   // 4
+               ///
+               TOOLBAR    = (1 << 3),   // 8
+               ///
+               LEX_PARSER = (1 << 4),   // 16
+               ///
+               LYXRC      = (1 << 5),   // 32
+               ///
+               KBMAP      = (1 << 6),   // 64
+               ///
+               LATEX      = (1 << 7),   // 128
+               ///
+               MATHED     = (1 << 8),   // 256 // Alejandro, please use this.
+               ///
+               FONT       = (1 << 9),   // 512
+               ///
+               TCLASS     = (1 << 10),  // 1024
+               ///
+               LYXVC      = (1 << 11),  // 2048
+               ///
+               ROFF       = (1 << 12),  // 4096
+               ///
+               LYXSERVER  = (1 << 13),  // 8192
+               ///
+               ALL        = (65535),    // 2^16-1
+               ///
+               ANY        = ALL
+       };
+       ///
+       Error(int level = 0);
+       ///
+       void setDebugLevel(int level);
+       /// Not implemented yet.
+       void setLogLevel(int level);
+       /// Not implemented yet.
+       void setLogFile(LString const & filename);
+       ///
+       void debug(LString const & msg, int level = INFO); // or ANY?
+       ///
+       bool debugging(int level = INFO) // or ANY?
+       {
+               return (bool)(debuglevel & level);
+       }
+       ///
+       void print(LString const & msg);
+protected:
+private:
+       ///
+       int debuglevel;
+       ///
+       int loglevel;
+};
+
+/// The global instance of the Error class.
+extern Error lyxerr;
+
+#endif
diff --git a/src/figure.h b/src/figure.h
new file mode 100644 (file)
index 0000000..8a096b1
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef FD_form_figure_h_
+#define FD_form_figure_h_
+/* Header file generated with fdesign. */
+
+/**** Callback routines ****/
+
+extern void FigureOKCB(FL_OBJECT *, long);
+extern void FigureApplyCB(FL_OBJECT *, long);
+extern void FigureCancelCB(FL_OBJECT *, long);
+
+
+/**** Forms and Objects ****/
+
+typedef struct {
+       FL_FORM *form_figure;
+       FL_OBJECT *group_radio_fugre;
+       FL_OBJECT *radio_postscript;
+       FL_OBJECT *radio_latex;
+       void *vdata;
+       long ldata;
+} FD_form_figure;
+
+extern FD_form_figure * create_form_form_figure(void);
+
+#endif /* FD_form_figure_h_ */
diff --git a/src/filedlg.C b/src/filedlg.C
new file mode 100644 (file)
index 0000000..7572348
--- /dev/null
@@ -0,0 +1,762 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+//     $Id: filedlg.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $   
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: filedlg.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <pwd.h>
+#include <grp.h>
+#include <string.h>
+
+#include "lyx_gui_misc.h" // CancelCloseCB
+#include "FileInfo.h"
+#include "gettext.h"
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#if HAVE_DIRENT_H
+# include <dirent.h>
+# define NAMLEN(dirent) strlen((dirent)->d_name)
+#else
+# define dirent direct
+# define NAMLEN(dirent) (dirent)->d_namlen
+# if HAVE_SYS_NDIR_H
+#  include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+#  include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+#  include <ndir.h>
+# endif
+#endif
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+
+#ifdef BROKEN_HEADERS
+extern "C" int gettimeofday(struct timeval *,struct timezone *);
+#define remove(a) unlink(a)      
+#endif
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "filetools.h"
+#include "filedlg.h"
+#include "definitions.h"
+
+static const long SIX_MONTH_SEC = 6L * 30L * 24L * 60L * 60L; // six months, in seconds
+static const long ONE_HOUR_SEC = 60L * 60L;
+
+// *** User cache class implementation
+
+// global instance (user cache root)
+UserCache lyxUserCache = UserCache(LString(),0,0);
+
+
+// Add: creates a new user entry
+UserCache *UserCache::Add(uid_t ID)
+{
+       LString pszNewName;
+       struct passwd *pEntry;
+
+       // gets user name
+       if ((pEntry = getpwuid(ID)))
+               pszNewName = pEntry->pw_name;
+       else {
+               pszNewName = LString() + int(ID); // We don't have int cast to LString
+       }
+
+       // adds new node
+       return new UserCache(pszNewName, ID, pRoot);
+}
+
+
+UserCache::UserCache(LString const & pszName, uid_t ID, UserCache *pRoot)
+{
+       // links node
+       if (pRoot) {
+               this->pRoot = pRoot;
+               pNext = pRoot->pNext;
+               pRoot->pNext = this;
+       } else {
+               this->pRoot = this;
+               pNext = NULL;
+       }
+
+       // stores data
+       this->pszName = pszName;
+       this->ID = ID;
+}
+
+
+UserCache::~UserCache()
+{
+       if (pNext) delete pNext;
+}
+
+
+// Find: seeks user name from user ID
+LString UserCache::Find(uid_t ID)
+{
+       if ((!pszName.empty()) && (this->ID == ID)) return pszName; 
+       if (pNext) return pNext->Find(ID);
+
+       return pRoot->Add(ID)->pszName;
+}
+
+
+// *** Group cache class implementation
+
+// global instance (group cache root)
+GroupCache lyxGroupCache = GroupCache(LString(),0,0);
+
+// Add: creates a new group entry
+GroupCache *GroupCache::Add(gid_t ID)
+{
+       LString pszNewName;
+       struct group *pEntry;
+
+       // gets user name
+       if ((pEntry = getgrgid(ID))) pszNewName = pEntry->gr_name;
+       else {
+               pszNewName = LString() + int(ID); // We don't have int cast to LString
+       }
+
+       // adds new node
+       return new GroupCache(pszNewName, ID, pRoot);
+}
+
+
+GroupCache::GroupCache(LString const & pszName, gid_t ID, GroupCache *pRoot)
+{
+       // links node
+       if (pRoot) {
+               this->pRoot = pRoot;
+               pNext = pRoot->pNext;
+               pRoot->pNext = this;
+       } else {
+               this->pRoot = this;
+               pNext = NULL;
+       }
+
+       // stores data
+       this->pszName = pszName;
+       this->ID = ID;
+}
+
+
+GroupCache::~GroupCache()
+{
+       if (pNext) delete pNext;
+}
+
+
+// Find: seeks group name from group ID
+LString GroupCache::Find(gid_t ID)
+{
+       if ((!pszName.empty()) && (this->ID == ID)) return pszName; 
+       if (pNext) return pNext->Find(ID);
+
+       return pRoot->Add(ID)->pszName;
+}
+
+// *** LyXDirEntry internal structure implementation
+
+// ldeCompProc: compares two LyXDirEntry objects content (used for qsort)
+int LyXDirEntry::ldeCompProc(const LyXDirEntry *r1, 
+                            const LyXDirEntry *r2)
+{
+       bool r1d = r1->pszName.suffixIs('/'); 
+       bool r2d = r2->pszName.suffixIs('/');
+       if (r1d && !r2d) return -1;
+       if (!r1d && r2d) return 1;
+       return strcmp(r1->pszName.c_str(), r2->pszName.c_str());
+}
+
+// *** LyXFileDlg class implementation
+
+// static members
+FD_FileDlg *LyXFileDlg::pFileDlgForm = NULL;
+LyXFileDlg *LyXFileDlg::pCurrentDlg = NULL;
+
+
+// Reread: updates dialog list to match class directory
+void LyXFileDlg::Reread()
+{
+       int i;
+       DIR *pDirectory;
+       struct dirent *pDirEntry;
+       LString File, Buffer;   
+       char szMode[15], szTime[40];
+       FileInfo fileInfo;
+       
+       // Opens directory
+       pDirectory = opendir(pszDirectory.c_str());
+       if (!pDirectory) {
+               WriteFSAlert(_("Warning! Couldn't open directory."), 
+                            pszDirectory);
+               pszDirectory = GetCWD();
+               pDirectory = opendir(pszDirectory.c_str());
+       }
+
+       // Clear the present namelist
+       if (pCurrentNames) {
+               delete [] pCurrentNames;
+               pCurrentNames = 0;
+       }
+
+       // Updates display
+       fl_hide_object(pFileDlgForm->List);
+       fl_clear_browser(pFileDlgForm->List);
+       fl_set_input(pFileDlgForm->DirBox, pszDirectory.c_str());
+
+       // Splits complete directory name into directories and compute depth
+       iDepth = 0;
+       LString line, Temp;
+       File = pszDirectory;
+       if (File != "/") {
+               File.split(Temp, '/');
+       }
+       while (!File.empty() || !Temp.empty()) {
+               LString dline = "@b"+line + Temp + '/';         
+               fl_add_browser_line(pFileDlgForm->List, dline.c_str());
+               File.split(Temp, '/');
+               line += ' ';
+               iDepth++;
+       }
+
+       // Allocate names array
+       iNumNames = 0;
+       rewinddir(pDirectory);
+       while ((readdir(pDirectory))) ++iNumNames;
+       pCurrentNames = new LyXDirEntry[iNumNames];
+
+       // Parses all entries of the given subdirectory
+       iNumNames = 0;
+       time_t curTime = time(NULL);
+       rewinddir(pDirectory);
+       while ((pDirEntry = readdir(pDirectory))) {
+
+               bool isLink = false, isDir = false;
+
+               // If the pattern doesn't start with a dot, skip hidden files
+               if (!pszMask.empty() && pszMask[0] != '.' && 
+                   pDirEntry->d_name[0] == '.')
+                        continue;
+
+               // Gets filename
+               LString fname = pDirEntry->d_name;
+
+               // Under all circumstances, "." and ".." are not wanted
+               if (fname == "." || fname == "..")
+                       continue;
+
+               // gets file status
+               File = AddName(pszDirectory, fname);
+
+               fileInfo.newFile(File, true);
+
+               fileInfo.modeString(szMode);
+               unsigned int nlink = fileInfo.getNumberOfLinks();
+               LString user =  lyxUserCache.Find(fileInfo.getUid());
+               LString group = lyxGroupCache.Find(fileInfo.getGid());
+
+               time_t modtime = fileInfo.getModificationTime();
+               strcpy(szTime, ctime(&modtime));
+               
+               if (curTime > fileInfo.getModificationTime() + SIX_MONTH_SEC
+                   || curTime < fileInfo.getModificationTime()
+                   + ONE_HOUR_SEC) {
+                       // The file is fairly old or in the future. POSIX says
+                       // the cutoff is 6 months old. Allow a 1 hour slop
+                       // factor for what is considered "the future", to
+                       // allow for NFS server/client clock disagreement.
+                       // Show the year instead of the time of day.
+                       strcpy(szTime+10, szTime+19);
+                       szTime[15] = 0;
+               } else
+                       szTime[16] = 0;
+               
+               char szHeadBuf[128];              
+               sprintf(szHeadBuf, "%s %u %s %s %s ", szMode, 
+                       nlink,
+                       user.c_str(),
+                       group.c_str(),
+                       szTime + 4);            
+               Buffer = szHeadBuf;
+
+               Buffer += pDirEntry->d_name;
+               Buffer += fileInfo.typeIndicator();
+
+               if ((isLink = fileInfo.isLink())) {
+                 LString Link;
+
+                 if (LyXReadLink(File,Link)) {
+                      Buffer += " -> ";
+                      Buffer += Link;
+
+                      // This gives the FileType of the file that
+                      // is really pointed too after resolving all
+                      // symlinks. This is not necessarily the same
+                      // as the type of Link (which could again be a
+                      // link). Is that intended?
+                      //                              JV 199902
+                      fileInfo.newFile(File);
+                      Buffer += fileInfo.typeIndicator();
+                 }
+               }
+
+               // filters files according to pattern and type
+               if (fileInfo.isRegular()
+                   || fileInfo.isChar()
+                   || fileInfo.isBlock()
+                   || fileInfo.isFifo()) {
+                       if (!fname.regexMatch(pszMask))
+                               continue;
+               } else if (!(isDir = fileInfo.isDir()))
+                       continue;
+
+               // Note pszLsEntry is an LString!
+               pCurrentNames[iNumNames].pszLsEntry = Buffer;
+
+               // creates used name
+               LString temp = fname;
+               if (isDir) temp += '/';
+               pCurrentNames[iNumNames].pszName = temp;
+
+               // creates displayed name
+               temp = pDirEntry->d_name;
+               if (isLink)
+                       temp += '@';
+               else
+                       temp += fileInfo.typeIndicator();
+               
+               pCurrentNames[iNumNames++].pszDisplayed = temp;
+       }
+
+       closedir(pDirectory);
+
+       // Sort the names
+       qsort(pCurrentNames, iNumNames, sizeof(LyXDirEntry), 
+             (int (*)(const void *, const void *))LyXDirEntry::ldeCompProc);
+
+       // Add them to directory box
+       for (i = 0; i < iNumNames; ++i) {
+               LString temp = line + pCurrentNames[i].pszDisplayed;
+               fl_add_browser_line(pFileDlgForm->List, temp.c_str());
+       }
+       fl_set_browser_topline(pFileDlgForm->List,iDepth);
+       fl_show_object(pFileDlgForm->List);
+       iLastSel = -1;
+}
+
+
+// SetDirectory: sets dialog current directory
+void LyXFileDlg::SetDirectory(LString const & Path)
+{
+       if (!pszDirectory.empty()) {
+               LString TempPath = ExpandPath(Path); // Expand ~/
+               TempPath = MakeAbsPath(TempPath, pszDirectory);
+               pszDirectory = MakeAbsPath(TempPath);
+       } else pszDirectory = MakeAbsPath(Path);
+}
+
+
+// SetMask: sets dialog file mask
+void LyXFileDlg::SetMask(LString const & NewMask)
+{
+       pszMask = NewMask;
+       fl_set_input(pFileDlgForm->PatBox, pszMask.c_str());
+}
+
+
+// SetInfoLine: sets dialog information line
+void LyXFileDlg::SetInfoLine(LString const & Line)
+{
+       pszInfoLine = Line;
+       fl_set_object_label(pFileDlgForm->FileInfo, pszInfoLine.c_str());
+}
+
+
+LyXFileDlg::LyXFileDlg()
+{
+       pCurrentNames = 0;
+       pszDirectory = MakeAbsPath(LString('.'));
+       pszMask = '*';
+
+       // Creates form if necessary. 
+       if (!pFileDlgForm) {
+               pFileDlgForm = create_form_FileDlg();
+               // Set callbacks. This means that we don't need a patch file
+               fl_set_object_callback(pFileDlgForm->DirBox,
+                                      LyXFileDlg::FileDlgCB,0);
+               fl_set_object_callback(pFileDlgForm->PatBox,
+                                      LyXFileDlg::FileDlgCB,1);
+               fl_set_object_callback(pFileDlgForm->List,
+                                      LyXFileDlg::FileDlgCB,2);
+               fl_set_object_callback(pFileDlgForm->Filename,
+                                      LyXFileDlg::FileDlgCB,3);
+               fl_set_object_callback(pFileDlgForm->Rescan,
+                                      LyXFileDlg::FileDlgCB,10);
+               fl_set_object_callback(pFileDlgForm->Home,
+                                      LyXFileDlg::FileDlgCB,11);
+               fl_set_object_callback(pFileDlgForm->User1,
+                                      LyXFileDlg::FileDlgCB,12);
+               fl_set_object_callback(pFileDlgForm->User2,
+                                      LyXFileDlg::FileDlgCB,13);
+               
+               // Make sure pressing the close box doesn't crash LyX. (RvdK)
+               fl_set_form_atclose(pFileDlgForm->FileDlg, CancelCB, NULL);
+               // Register doubleclick callback
+               fl_set_browser_dblclick_callback(pFileDlgForm->List,
+                                                DoubleClickCB,0);
+       }
+       fl_hide_object(pFileDlgForm->User1);
+       fl_hide_object(pFileDlgForm->User2);
+}
+
+
+LyXFileDlg::~LyXFileDlg()
+{
+       // frees directory entries
+       if (pCurrentNames) {
+               delete [] pCurrentNames;
+       }
+}
+
+
+// SetButton: sets file selector user button action
+void LyXFileDlg::SetButton(int iIndex, LString const & pszName, 
+                          LString const & pszPath)
+{
+       FL_OBJECT *pObject;
+       LString *pTemp;
+
+       if (iIndex == 0) {
+               pObject = pFileDlgForm->User1;
+               pTemp = &pszUserPath1;
+       } else if (iIndex == 1) {                       
+               pObject = pFileDlgForm->User2;
+               pTemp = &pszUserPath2;
+       } else return;
+
+       if (!pszName.empty() && !pszPath.empty()) {
+               fl_set_object_label(pObject, pszName.c_str());
+               fl_show_object(pObject);
+               *pTemp = pszPath;
+       } else {
+               fl_hide_object(pObject);
+               *pTemp = LString();
+       }
+}
+
+
+// GetDirectory: gets last dialog directory
+LString LyXFileDlg::GetDirectory() 
+{
+       if (!pszDirectory.empty())
+               return pszDirectory;
+       else
+               return LString('.');
+}
+
+
+// RunDialog: handle dialog during file selection
+bool LyXFileDlg::RunDialog()
+{
+       force_cancel = false;
+       force_ok = false;
+       
+        // event loop
+        while(true) {
+
+                FL_OBJECT * pObject = fl_do_forms();
+
+                if (pObject == pFileDlgForm->Ready) {
+                       if (HandleOK())
+                               return true;
+               } else if (pObject == pFileDlgForm->Cancel 
+                          || force_cancel) 
+                       return false;
+               else if (force_ok)
+                       return true;
+       }
+}
+
+
+// XForms objects callback (static)
+void LyXFileDlg::FileDlgCB(FL_OBJECT *, long lArgument)
+{
+       if (!pCurrentDlg) return;
+
+       switch (lArgument) {
+
+       case 0: // get directory
+               pCurrentDlg->SetDirectory(fl_get_input(pFileDlgForm->DirBox));
+               pCurrentDlg->Reread();
+               break;
+
+       case 1: // get mask
+               pCurrentDlg->SetMask(fl_get_input(pFileDlgForm->PatBox));
+               pCurrentDlg->Reread();
+               break;
+
+       case 2: // list
+               pCurrentDlg->HandleListHit();
+               break;  
+
+       case 10: // rescan
+               pCurrentDlg->SetDirectory(fl_get_input(pFileDlgForm->DirBox));
+               pCurrentDlg->SetMask(fl_get_input(pFileDlgForm->PatBox));
+               pCurrentDlg->Reread();
+               break;
+
+       case 11: // home
+               pCurrentDlg->SetDirectory(getEnvPath("HOME"));
+               pCurrentDlg->SetMask(fl_get_input(pFileDlgForm->PatBox));
+               pCurrentDlg->Reread();
+               break;
+
+       case 12: // user button 1
+               if (!pCurrentDlg->pszUserPath1.empty()) {
+                       pCurrentDlg->SetDirectory(pCurrentDlg->pszUserPath1);
+                       pCurrentDlg->SetMask(fl_get_input(pFileDlgForm->PatBox));
+                       pCurrentDlg->Reread();
+               }
+               break;
+
+       case 13: // user button 2
+               if (!pCurrentDlg->pszUserPath2.empty()) {
+                       pCurrentDlg->SetDirectory(pCurrentDlg->pszUserPath2);
+                       pCurrentDlg->SetMask(fl_get_input(pFileDlgForm->PatBox));
+                       pCurrentDlg->Reread();
+               }
+               break;
+
+       }
+}
+
+
+// Handle callback from list
+void LyXFileDlg::HandleListHit()
+{
+       // set info line
+       int iSelect = fl_get_browser(pFileDlgForm->List);
+       if (iSelect > iDepth)  {
+               SetInfoLine(pCurrentNames[iSelect - iDepth - 1].pszLsEntry);
+       } else {
+               SetInfoLine(LString());
+       }
+}
+
+
+// Callback for double click in list
+void LyXFileDlg::DoubleClickCB(FL_OBJECT *, long)
+{
+       if (pCurrentDlg->HandleDoubleClick())
+               // Simulate click on OK button
+               pCurrentDlg->Force(false);
+}
+
+
+// Handle double click from list
+bool LyXFileDlg::HandleDoubleClick()
+{
+       bool isDir;
+       LString pszTemp;
+       int iSelect;  
+
+       // set info line
+       isDir = true;
+       iSelect = fl_get_browser(pFileDlgForm->List);
+       if (iSelect > iDepth)  {
+               pszTemp = pCurrentNames[iSelect - iDepth - 1].pszName;
+               SetInfoLine(pCurrentNames[iSelect - iDepth - 1].pszLsEntry);
+               if (!pszTemp.suffixIs('/')) {
+                       isDir = false;
+                       fl_set_input(pFileDlgForm->Filename, pszTemp.c_str());
+               }
+       } else if (iSelect !=0) {
+               SetInfoLine(LString());
+       } else
+               return true;
+
+       // executes action
+       if (isDir) {
+
+               int i;
+               LString Temp;
+
+               // builds new directory name
+               if (iSelect > iDepth) {
+                       // Directory deeper down
+                       // First, get directory with trailing /
+                       Temp = fl_get_input(pFileDlgForm->DirBox);
+                       if (!Temp.suffixIs('/'))
+                               Temp += '/';
+                       Temp += pszTemp;
+               } else {
+                       // Directory higher up
+                       Temp.clean();
+                       for (i = 0; i < iSelect; ++i) {
+                               LString piece = fl_get_browser_line(pFileDlgForm->List, i+1);
+                               // The '+2' is here to count the '@b' (JMarc)
+                               Temp += piece.substring(i+2, piece.length()-1);
+                       }
+               }
+
+               // assigns it
+               SetDirectory(Temp);
+               Reread();
+               return false;
+       }
+       return true;
+}
+
+
+// Handle OK button call
+bool LyXFileDlg::HandleOK()
+{
+       LString pszTemp;
+
+       // mask was changed
+       pszTemp = fl_get_input(pFileDlgForm->PatBox);
+       if (pszTemp!=pszMask) {
+               SetMask(pszTemp);
+               Reread();
+               return false;
+       }
+
+       // directory was changed
+       pszTemp = fl_get_input(pFileDlgForm->DirBox);
+       if (pszTemp!=pszDirectory) {
+               SetDirectory(pszTemp);
+               Reread();
+               return false;
+       }
+       
+       // Handle return from list
+       int select = fl_get_browser(pFileDlgForm->List);
+       if (select > iDepth) {
+               LString temp = pCurrentNames[select - iDepth - 1].pszName;
+               if (!temp.suffixIs('/')) {
+                       // If user didn't type anything, use browser
+                       LString name = fl_get_input(pFileDlgForm->Filename);
+                       if (name.empty()) {
+                               fl_set_input(pFileDlgForm->Filename, temp.c_str());
+                       }
+                       return true;
+               }
+       }
+       
+       // Emulate a doubleclick
+       return HandleDoubleClick();
+}
+
+
+// Handle Cancel CB from WM close
+int LyXFileDlg::CancelCB(FL_FORM *, void *)
+{
+       // Simulate a click on the cancel button
+       pCurrentDlg->Force(true);
+       return FL_IGNORE;
+}
+
+
+// Simulates a click on OK/Cancel
+void LyXFileDlg::Force(bool cancel)
+{
+       if (cancel) {
+               force_cancel = true;
+               fl_set_button(pFileDlgForm->Cancel, 1);
+       } else {
+               force_ok = true;
+               fl_set_button(pFileDlgForm->Ready, 1);
+       }
+       // Start timer to break fl_do_forms loop soon
+       fl_set_timer(pFileDlgForm->timer, 0.1);
+}
+
+
+// Select: launches dialog and returns selected file
+LString LyXFileDlg::Select(LString const & title, LString const & path, 
+                          LString const & mask, LString const & suggested)
+{
+       bool isOk;
+
+       // handles new mask and path
+       isOk = true;
+       if (!mask.empty()) {
+               SetMask(mask);
+               isOk = false;
+       }
+       if (!path.empty()) {
+               SetDirectory(path);
+               isOk = false;
+       }
+       if (!isOk) Reread();
+       else {
+               fl_select_browser_line(pFileDlgForm->List, 1);
+               fl_set_browser_topline(pFileDlgForm->List, 1);
+       }
+
+       // checks whether dialog can be started
+       if (pCurrentDlg) return LString();
+       pCurrentDlg = this;
+
+       // runs dialog
+       SetInfoLine (LString());
+       fl_set_input(pFileDlgForm->Filename, suggested.c_str());
+       fl_set_button(pFileDlgForm->Cancel, 0);
+       fl_set_button(pFileDlgForm->Ready, 0);
+       fl_set_focus_object(pFileDlgForm->FileDlg, pFileDlgForm->Filename);
+       fl_deactivate_all_forms();
+       fl_show_form(pFileDlgForm->FileDlg, FL_PLACE_MOUSE | FL_FREE_SIZE,
+                    FL_FULLBORDER, title.c_str());
+
+       isOk = RunDialog();
+
+       fl_hide_form(pFileDlgForm->FileDlg);
+       fl_activate_all_forms();
+       pCurrentDlg = NULL;
+
+       // Returns filename or LString() if no valid selection was made
+       if (!isOk || !fl_get_input(pFileDlgForm->Filename)[0]) return LString();
+
+       pszFileName = fl_get_input(pFileDlgForm->Filename);
+
+       if (!AbsolutePath(pszFileName)) {
+               pszFileName = AddName(fl_get_input(pFileDlgForm->DirBox), 
+                                     pszFileName);
+       }
+       return pszFileName;
+}
diff --git a/src/filedlg.h b/src/filedlg.h
new file mode 100644 (file)
index 0000000..a8a75eb
--- /dev/null
@@ -0,0 +1,157 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 1996 Matthias Ettrich
+*           and the LyX Team.
+*
+*======================================================*/
+
+#ifndef __FILEDLG_H__
+#define __FILEDLG_H__
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+// necessary for xForms related stuff
+#include FORMS_H_LOCATION
+#include "form1.h"
+
+
+/// User cache class definition
+class UserCache
+{
+public:
+       ///
+       UserCache(LString const & pszName = LString(), uid_t ID = 0, 
+                 UserCache *pRoot = NULL);
+       ///
+       ~UserCache();
+       // interface
+       /// seeks user name from user ID
+       LString Find(uid_t ID);
+private:
+       ///
+       uid_t ID;
+       ///
+       LString pszName;
+       ///
+       UserCache *pNext, *pRoot;
+       // internal methods
+       /// creates a new user entry
+       UserCache *Add(uid_t ID);
+};
+extern UserCache lyxUserCache;
+
+
+/// Group cache class definition
+class GroupCache
+{
+public:
+       ///
+       GroupCache(LString const & pszName = LString(), gid_t ID = 0,
+                  GroupCache *pRoot = NULL);
+       ///
+       ~GroupCache();
+       // interface
+       /// seeks group name from group ID
+       LString Find(gid_t ID);
+
+private:
+       ///
+       gid_t ID;
+       ///
+       LString pszName;
+       ///
+       GroupCache *pNext, *pRoot;
+       // internal methods
+       /// creates a new group entry
+       GroupCache *Add(gid_t ID);
+};
+extern GroupCache lyxGroupCache;
+
+
+/// LyXDirEntry internal structure definition
+class LyXDirEntry
+{
+private:
+       friend class LyXFileDlg;    
+       LString pszName;
+       LString pszDisplayed;
+       LString pszLsEntry;
+       /// compares two LyXDirEntry objects content (used by qsort)
+       static int ldeCompProc(const LyXDirEntry *r1, const LyXDirEntry *r2);
+       LyXDirEntry() {};
+};
+
+
+/// FileDlg class definition
+class LyXFileDlg 
+{
+public:
+       ///
+       LyXFileDlg();
+       ///
+       ~LyXFileDlg();
+       /// sets file selector user button action
+       void SetButton(int iIndex, LString const & pszName = LString(), 
+                      LString const & pszPath = LString());
+       /// gets last dialog directory
+       LString GetDirectory();
+       /// launches dialog and returns selected file
+       LString Select(LString const & pszTitle = LString(),
+                      LString const & pszPath = LString(),
+                      LString const & pszMask = LString(), 
+                      LString const & pszSuggested = LString());
+       /// XForms objects callback (static)
+       static void FileDlgCB(FL_OBJECT *, long);
+       /// Callback for double click in list
+       static void DoubleClickCB(FL_OBJECT *, long);
+private:
+       // data
+       static FD_FileDlg *pFileDlgForm;
+       static LyXFileDlg *pCurrentDlg;
+       LString pszUserPath1;
+       LString pszUserPath2;
+       LString pszDirectory;
+       LString pszMask;
+       LString pszFileName;
+       int iDepth;
+       int iLastSel;
+       long lLastTime;
+       LString pszInfoLine;
+       LyXDirEntry *pCurrentNames;
+       int iNumNames;
+
+       bool force_cancel;
+       bool force_ok;
+
+       // internal functions
+       /// updates dialog list to match class directory
+       void Reread();
+       /// sets dialog current directory
+       void SetDirectory(LString const & pszPath);
+       /// sets dialog file mask
+       void SetMask(LString const & pszNewMask);
+       /// sets dialog information line
+       void SetInfoLine(LString const & pszLine);
+       /// handle dialog during file selection
+       bool RunDialog();
+       /// Handle callback from list
+       void HandleListHit();
+       /// Handle double click from list
+       bool HandleDoubleClick();
+       /// Handle OK button call
+       bool HandleOK();
+       /// Handle Cancel CB from WM close
+       static int CancelCB(FL_FORM *, void *);
+       /// Simulates a click on OK/Cancel
+       void Force(bool);
+};
+
+#endif
diff --git a/src/filetools.C b/src/filetools.C
new file mode 100644 (file)
index 0000000..b9243b7
--- /dev/null
@@ -0,0 +1,963 @@
+/*
+       filetools.C (former paths.C) - part of LyX project
+       General path-mangling functions 
+       Copyright (C) 1996 Ivan Schreter
+       Parts Copyright (C) 1996 Dirk Niggemann
+        Parts Copyright (C) 1985, 1990, 1993 Free Software Foundation, Inc.
+       Parts Copyright (C) 1996 Asger Alstrup
+       
+       See also filetools.H.
+
+       lyx-filetool.C : tools functions for file/path handling
+       this file is part of LyX, the High Level Word Processor
+       copyright (C) 1995-1996, Matthias Ettrich and the LyX Team
+
+*/
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <ctype.h>
+#include <errno.h>        // I know it's OS/2 specific (SMiyata)
+
+#ifdef __GNUG__
+#pragma implementation "filetools.h"
+#endif
+
+#include "filetools.h"
+#include "lyx_gui_misc.h"
+#include "FileInfo.h"
+#include "pathstack.h"        // I know it's OS/2 specific (SMiyata)
+#include "gettext.h"
+
+// Which part of this is still necessary? (JMarc).
+#if HAVE_DIRENT_H
+# include <dirent.h>
+# define NAMLEN(dirent) strlen((dirent)->d_name)
+#else
+# define dirent direct
+# define NAMLEN(dirent) (dirent)->d_namlen
+# if HAVE_SYS_NDIR_H
+#  include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+#  include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+#  include <ndir.h>
+# endif
+#endif
+
+//     $Id: filetools.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $ 
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: filetools.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+
+extern LString system_lyxdir;
+extern LString build_lyxdir;
+extern LString user_lyxdir;
+extern LString system_tempdir;
+
+
+bool IsLyXFilename(LString const & filename)
+{
+       return filename.contains(".lyx");
+}
+
+
+bool IsSGMLFilename(LString const & filename)
+{
+       return filename.contains(".sgml");
+}
+
+
+// Substitutes spaces with underscores in filename (and path)
+LString SpaceLess(LString const & file)
+{
+       LString name = OnlyFilename(file);
+       LString path = OnlyPath(file);
+       
+       for (int i=0; i<name.length(); i++) {
+               name[i] &= 0x7f;
+               if (!isalnum(name[i]) && name[i] != '.')
+                       name[i] = '_';
+       }
+       LString temp = AddName(path, name);
+       // Replace spaces with underscores, also in directory
+       // No!!! I checked it that it is not necessary.
+       // temp.subst(' ','_');
+
+       return temp;
+}
+
+
+/// Returns an unique name to be used as a temporary file. 
+LString TmpFileName(LString const & dir, LString const & mask)
+{// With all these temporary variables, it should be safe enough :-) (JMarc)
+       LString tmpdir; 
+       if (dir.empty())
+               tmpdir = system_tempdir;
+       else
+               tmpdir = dir;
+       LString tmpfl = AddName(tmpdir, mask);
+
+       // find a uniq postfix for the filename...
+       // using the pid, and...
+       tmpfl += int(getpid());
+       // a short string...
+       LString ret;
+       FileInfo fnfo;
+       for (int a='a'; a<= 'z'; a++)
+               for (int b='a'; b<= 'z'; b++)
+                       for (int c='a'; c<= 'z'; c++) {
+                               // if this is not enough I have no idea what
+                               // to do.
+                               ret = tmpfl + char(a) + char(b) + char(c);
+                               // check if the file exist
+                               if (!fnfo.newFile(ret).exist())
+                                       return ret;
+                       }
+       lyxerr.print("Not able to find a uniq tmpfile name.");
+       return LString();
+}
+
+
+// Is a file readable ?
+bool IsFileReadable (LString const & path)
+{
+       FileInfo file(path);
+       if (file.isOK() && file.isRegular() && file.readable())
+               return true;
+       else
+               return false;
+}
+
+
+// Is a file read_only?
+// return 1 read-write
+//       0 read_only
+//      -1 error (doesn't exist, no access, anything else) 
+int IsFileWriteable (LString const & path)
+{
+       FilePtr fp(path, FilePtr::update);
+       if (!fp()) {
+               if ((errno == EACCES) || (errno == EROFS)) {
+                       //fp = FilePtr(path, FilePtr::read);
+                       fp.reopen(path, FilePtr::read);
+                       if (fp()) {
+                               return 0;
+                       }
+               }
+               return -1;
+       }
+       return 1;
+}
+
+
+//returns 1: dir writeable
+//       0: not writeable
+//      -1: error- couldn't find out
+int IsDirWriteable (LString const & path)
+{
+        LString tmpfl = TmpFileName(path);
+
+       if (tmpfl.empty()) {
+               WriteFSAlert(_("LyX Internal Error!"), 
+                            _("Could not test if directory is writeable"));
+               return -1;
+       } else {
+       FilePtr fp(tmpfl, FilePtr::truncate);
+       if (!fp()) {
+               if (errno == EACCES) {
+                       return 0;
+               } else { 
+                       WriteFSAlert(_("LyX Internal Error!"), 
+                                    _("Cannot open directory test file"));
+                       return -1;
+               }
+               }
+       }
+               if (remove (tmpfl.c_str())) {
+                       WriteFSAlert(_("LyX Internal Error!"), 
+                                   _("Created test file but cannot remove it?"));
+                       return -1;
+       }
+       return 1;
+}
+
+
+// Uses a string of paths separated by ";"s to find a file to open.
+// Can't cope with pathnames with a ';' in them. Returns full path to file.
+// If path entry begins with $$LyX/, use system_lyxdir
+// If path entry begins with $$User/, use user_lyxdir
+// Example: "$$User/doc;$$LyX/doc"
+LString FileOpenSearch (LString const & path, LString const & name, 
+                       LString const & ext)
+{
+       LString real_file, path_element;
+       LString tmppath = path;
+       bool notfound = true;
+
+       tmppath.split(path_element, ';');
+       
+       while (notfound && !path_element.empty()) {
+               path_element = CleanupPath(path_element);
+               if (!path_element.suffixIs('/'))
+                       path_element+='/';
+               path_element.subst("$$LyX",system_lyxdir);
+               path_element.subst("$$User",user_lyxdir);
+               
+               real_file = FileSearch(path_element, name, ext);
+
+               if (real_file.empty()) {
+                 tmppath.split(path_element, ';');
+               } else {
+                 notfound = false;
+               }
+       }
+#ifdef __EMX__
+       if (ext.empty() && notfound) {
+               real_file = FileOpenSearch(path, name, "exe");
+               if (notfound) real_file = FileOpenSearch(path, name, "cmd");
+       }
+#endif
+       return real_file;
+}
+
+
+// Returns the real name of file name in directory path, with optional
+// extension ext.  
+LString FileSearch(LString const & path, LString const & name, 
+                  LString const & ext)
+{
+        LString fullname;
+       LString tmp;
+
+       // if `name' is an absolute path, we ignore the setting of `path'
+       // Expand Environmentvariables in 'name'
+       LString tmpname = ReplaceEnvironmentPath(name);
+       fullname = MakeAbsPath(tmpname,path);
+
+       // search first without extension, then with it.
+       if (IsFileReadable(fullname))
+               return fullname;
+       else if(ext.empty()) 
+               return LString();
+       else { // Is it not more reasonable to use ChangeExtension()? (SMiyata)
+               fullname += '.';
+               fullname += ext;
+               if (IsFileReadable(fullname))
+                       return fullname;
+               else 
+                       return LString();
+       }
+}
+
+
+// Search the file name.ext in the subdirectory dir of
+//   1) user_lyxdir
+//   2) build_lyxdir (if not empty)
+//   3) system_lyxdir
+LString LibFileSearch(LString const & dir, LString const & name, 
+                     LString const & ext)
+{
+        LString fullname = FileSearch(AddPath(user_lyxdir,dir), name,
+                                     ext); 
+       if (!fullname.empty())
+               return fullname;
+
+       if (!build_lyxdir.empty()) 
+         fullname = FileSearch(AddPath(build_lyxdir,dir), 
+                               name, ext);
+       if (!fullname.empty())
+               return fullname;
+
+       return FileSearch(AddPath(system_lyxdir,dir), name, ext);
+}
+
+LString i18nLibFileSearch(LString const & dir, LString const & name, 
+                         LString const & ext)
+{
+       LString lang = LString(getenv("LANG")).token('_',0);
+
+       if (lang.empty())
+               return LibFileSearch(dir, name, ext);
+       else {
+               LString tmp = LibFileSearch(dir, lang + '_' + name,
+                                           ext);
+               if (!tmp.empty())
+                       return tmp;
+               else
+                       return LibFileSearch(dir, name, ext);
+       }
+}
+
+
+static
+int DeleteAllFilesInDir (LString const & path)
+{
+       DIR * dir;
+       struct dirent *de;
+       dir = opendir(path.c_str());
+       if (!dir) {
+               WriteFSAlert (_("Error! Cannot open directory:"), path);
+               return -1;
+       }
+       while ((de = readdir(dir))) {
+               LString temp = de->d_name;
+               if (temp=="." || temp=="..") 
+                       continue;
+               LString unlinkpath = AddName (path, temp);
+
+               lyxerr.debug("Deleting file: " + unlinkpath);
+
+               if (remove (unlinkpath.c_str()))
+                       WriteFSAlert (_("Error! Could not remove file:"), 
+                                     unlinkpath);
+        }
+       closedir (dir);
+       return 0;
+}
+
+
+static
+LString CreateTmpDir (LString const & tempdir, LString const & mask)
+{
+       LString tmpfl = TmpFileName(tempdir, mask);
+       
+       if ((tmpfl.empty()) || mkdir (tmpfl.c_str(), 0777)) {
+               WriteFSAlert(_("Error! Couldn't create temporary directory:"),
+                            tempdir);
+               return LString();
+       }
+       return MakeAbsPath(tmpfl);
+}
+
+
+static
+int DestroyTmpDir (LString const & tmpdir, bool Allfiles)
+{
+       if ((Allfiles) && (DeleteAllFilesInDir (tmpdir))) return -1;
+       if (rmdir(tmpdir.c_str())) { 
+#ifdef __EMX__
+               if (errno == EBUSY) {
+                       chdir(user_lyxdir.c_str()); // They are in the same drive.
+                       if (!rmdir(tmpdir.c_str())) return 0;
+               }
+#endif
+               WriteFSAlert(_("Error! Couldn't delete temporary directory:"), 
+                            tmpdir);
+               return -1;
+       }
+       return 0; 
+} 
+
+
+LString CreateBufferTmpDir (LString const & pathfor)
+{
+       return CreateTmpDir (pathfor, "lyx_bufrtmp");
+}
+
+
+int DestroyBufferTmpDir (LString const & tmpdir)
+{
+       return DestroyTmpDir (tmpdir, true);
+}
+
+
+LString CreateLyXTmpDir (LString const & deflt)
+{
+        LString t;
+        
+       if ((!deflt.empty()) && (deflt!="/tmp")) {
+               if (mkdir (deflt.c_str(), 0777)) {
+#ifdef __EMX__
+                        PathPush(user_lyxdir);
+#endif
+                       t = CreateTmpDir (deflt.c_str(), "lyx_tmp");
+#ifdef __EMX__
+                        PathPop();
+#endif
+                        return t;
+               } else
+                        return deflt;
+       } else {
+#ifdef __EMX__
+               PathPush(user_lyxdir);
+#endif
+               t = CreateTmpDir ("/tmp", "lyx_tmp");
+#ifdef __EMX__
+               PathPop();
+#endif
+               return t;
+       }
+}
+
+
+int DestroyLyXTmpDir (LString const & tmpdir)
+{
+       return DestroyTmpDir (tmpdir, false); // Why false?
+}
+
+
+// Creates directory. Returns true if succesfull
+bool createDirectory(LString const & path, int permission)
+{
+       LString temp = CleanupPath(path);
+       
+       // Cut off trailing /s
+       temp.strip('/');
+
+       if (temp.empty()) {
+               WriteAlert(_("Internal error!"),
+                          _("Call to createDirectory with invalid name"));
+               return false;
+       }
+
+       if (mkdir(temp.c_str(), permission)) {
+               WriteFSAlert (_("Error! Couldn't create directory:"), temp);
+               return false;
+       }
+       return true;
+}
+
+
+// Returns current working directory
+LString GetCWD ()
+{
+       int n = 256;    // Assume path is less than 256 chars
+       char * err;
+       char * tbuf = new char [n];
+       LString result;
+       
+       // Safe. Hopefully all getcwds behave this way!
+       while (((err = getcwd (tbuf, n)) == NULL) && (errno == ERANGE)) {
+               // Buffer too small, double the buffersize and try again
+               delete[] tbuf;
+               n = 2*n;
+               tbuf = new char [n];
+       }
+
+       if (err) result = tbuf;
+       delete[] tbuf;
+       return result;
+}
+
+
+// Strip filename from path name
+LString OnlyPath(LString const &Filename)
+{
+       // If empty filename, return empty
+       if (Filename.empty()) return Filename;
+
+       // Find last / or start of filename
+       int j = Filename.length() - 1;
+       LString temp = CleanupPath(Filename);
+       for (; j > 0 && temp[j] != '/'; j--);
+
+       if (temp[j] != '/')
+               return "./";
+       else {
+               // Strip to pathname
+               return temp.substring(0, j);
+       }
+}
+
+
+// Convert relative path into absolute path based on a basepath.
+// If relpath is absolute, just use that.
+// If basepath is empty, use CWD as base.
+LString MakeAbsPath(LString const &RelPath, LString const &BasePath)
+{
+       // checks for already absolute path
+       if (AbsolutePath(RelPath))
+#ifdef __EMX__
+               if(RelPath[0]!='/' || RelPath[0]!='\\')
+#endif
+               return RelPath;
+
+       // Copies given paths
+       LString TempRel = CleanupPath(RelPath);
+
+       LString TempBase;
+
+       if (!BasePath.empty()) {
+#ifndef __EMX__
+               TempBase = BasePath;
+#else
+               char* with_drive = new char[_MAX_PATH];
+               _abspath(with_drive, BasePath.c_str(), _MAX_PATH);
+               TempBase = with_drive;
+               delete[] with_drive;
+#endif
+       } else
+               TempBase = GetCWD(); //safer_getcwd();
+#ifdef __EMX__
+       if (AbsolutePath(TempRel))
+               return TempBase.substring(0,1) + TempRel;
+#endif
+
+       // Handle /./ at the end of the path
+       while(TempBase.suffixIs("/./"))
+               TempBase.substring(0,TempBase.length()-3);
+
+       // processes relative path
+       LString RTemp = TempRel;
+       LString Temp;
+
+       while (!RTemp.empty()) {
+               // Split by next /
+               RTemp.split(Temp, '/');
+               
+               if (Temp==".") continue;
+               if (Temp=="..") {
+                       // Remove one level of TempBase
+                       int i = TempBase.length()-2;
+#ifndef __EMX__
+                       if (i<0) i=0;
+                       while (i>0 && TempBase[i] != '/') i--;
+                       if (i>0)
+#else
+                               if (i<2) i=2;
+                       while (i>2 && TempBase[i] != '/') i--;
+                       if (i>2)
+#endif
+                               TempBase.substring(0, i);
+                       else
+                               TempBase += '/';
+               } else {
+                       // Add this piece to TempBase
+                       if (!TempBase.suffixIs('/'))
+                               TempBase += '/';
+                       TempBase += Temp;
+               }
+       }
+
+       // returns absolute path
+       return TempBase;        
+}
+
+
+// Correctly append filename to the pathname.
+// If pathname is '.', then don't use pathname.
+// Chops any path of filename.
+LString AddName(LString const &Path, LString const &FileName)
+{
+       // Get basename
+       LString Basename = OnlyFilename(FileName);
+
+       LString buf;
+
+       if (Path != "." && Path != "./" && !Path.empty()) {
+               buf = CleanupPath(Path);
+               if (!Path.suffixIs('/'))
+                       buf += '/';
+       }
+
+       return buf + Basename;
+}
+
+
+// Strips path from filename
+LString OnlyFilename(LString const &Filename)
+{
+       // If empty filename, return empty
+       if (Filename.empty()) return Filename;
+
+       int j;
+       // Find last / or start of filename
+       LString temp = CleanupPath(Filename);
+       for (j=Filename.length()-1; temp[j] != '/' && j>0; j--);
+
+       // Skip potential /
+       if (j!=0) j++;
+
+       // Strip to basename
+       return temp.substring(j, temp.length()-1);
+}
+
+
+// Is a filename/path absolute?
+bool AbsolutePath(LString const &path)
+{
+#ifndef __EMX__
+       return (!path.empty() && path[0]=='/');
+#else
+       return (!path.empty() && (path[0]=='/' || (isalpha((unsigned char) path[0]) && path[1]==':')));
+#endif
+}
+
+
+// Create absolute path. If impossible, don't do anything
+// Supports ./ and ~/. Later we can add support for ~logname/. (Asger)
+LString ExpandPath(LString const &path)
+{
+       // checks for already absolute path
+       LString RTemp = ReplaceEnvironmentPath(path);
+       if (AbsolutePath(RTemp))
+               return RTemp;
+
+       LString Temp;
+       LString copy(RTemp);
+
+       // Split by next /
+       RTemp.split(Temp, '/');
+
+       if (Temp==".") {
+               return GetCWD() + '/' + RTemp;
+       } else if (Temp=="~") {
+               return getEnvPath("HOME") + '/' + RTemp;
+       } else if (Temp=="..") {
+               return MakeAbsPath(copy);
+       } else
+               // Don't know how to handle this
+               return copy;
+}
+
+
+// Normalize a path
+// Constracts path/../path
+// Can't handle "../../" or "/../" (Asger)
+LString NormalizePath(LString const &path)
+{
+       LString TempBase;
+       LString RTemp;
+       LString Temp;
+
+       if (AbsolutePath(path))
+               RTemp = path;
+       else
+               // Make implicit current directory explicit
+               RTemp = "./" +path;
+
+       while (!RTemp.empty()) {
+               // Split by next /
+               RTemp.split(Temp, '/');
+               
+               if (Temp==".") {
+                       TempBase = "./";
+               } else if (Temp=="..") {
+                       // Remove one level of TempBase
+                       int i = TempBase.length()-2;
+                       while (i>0 && TempBase[i] != '/')
+                               i--;
+                       if (i>=0 && TempBase[i] == '/')
+                               TempBase.substring(0, i);
+                       else
+                               TempBase = "../";
+               } else {
+                       TempBase += Temp + '/';
+               }
+       }
+
+       // returns absolute path
+       return TempBase;        
+}
+
+LString CleanupPath(LString const &path) 
+{
+#ifdef __EMX__   /* SMiyata: This should fix searchpath bug. */
+       LString temppath(path);
+       temppath.subst('\\', '/');
+       temppath.subst("//", "/");
+       temppath.lowercase();
+       return temppath;
+#else // On unix, nothing to do
+       return path;
+#endif
+}
+
+
+//
+// Search ${...} as Variable-Name inside the string and replace it with
+// the denoted environmentvariable
+// Allow Variables according to 
+//  variable :=  '$' '{' [A-Za-z_]{[A-Za-z_0-9]*} '}'
+//
+
+LString ReplaceEnvironmentPath(LString const &path)
+{
+// 
+// CompareChar: Environmentvariables starts with this character
+// PathChar:    Next path component start with this character
+// while CompareChar found do:
+//       Split String with PathChar
+//      Search Environmentvariable
+//      if found: Replace Strings
+//
+       const char CompareChar = '$';
+       const char FirstChar = '{'; 
+       const char EndChar = '}'; 
+       const char UnderscoreChar = '_'; 
+       const LString EndString(EndChar);
+       const LString FirstString(FirstChar);
+       const LString CompareString(CompareChar);
+       const LString RegExp("*}*"); // Exist EndChar inside a String?
+
+       if (path.empty()) return path; // nothing to do.
+
+// first: Search for a '$' - Sign.
+       LString copy(path);
+    LString result1(copy);    // for split-calls
+       LString result0 = copy.split(result1, CompareChar);
+       while (!result0.empty()) {
+               LString copy1(result0); // contains String after $
+               
+               // Check, if there is an EndChar inside original String.
+               
+               if (!copy1.regexMatch(RegExp)) {
+                       // No EndChar inside. So we are finished
+                       result1 += CompareString + result0;
+                       result0 = LString();
+                       continue;
+               }
+
+               LString res1;
+               LString res0 = copy1.split(res1, EndChar);
+               // Now res1 holds the environmentvariable
+               // First, check, if Contents is ok.
+               if (res1.empty()) { // No environmentvariable. Continue Loop.
+                       result1 += CompareString + FirstString;
+                       result0  = res0;
+                       continue;
+               }
+               // check contents of res1
+               const char *res1_contents = res1.c_str();
+               if (*res1_contents != FirstChar) {
+                       // Again No Environmentvariable
+                       result1 += CompareString;
+                       result0  = res0;
+               }
+
+               // Check for variable names
+               // Situation ${} is detected as "No Environmentvariable"
+               const char *cp1 = res1_contents+1;
+               bool result = isalpha((unsigned char) *cp1) || (*cp1 == UnderscoreChar);
+               ++cp1;
+               while (*cp1 && result) {
+                       result = isalnum((unsigned char) *cp1) || 
+                               (*cp1 == UnderscoreChar); 
+                       ++cp1;
+               }
+
+               if (!result) {
+                       // no correct variable name
+                       result1 += CompareString + res1 + EndString;
+                       result0  = res0.split(res1, CompareChar);
+                       result1 += res1;
+                       continue;
+               }
+            
+               char *env = getenv(res1_contents+1);
+               if (env) {
+                       // Congratulations. Environmentvariable found
+                       result1 += env;
+               } else {
+                       result1 += CompareString + res1 + EndString;
+               }
+               // Next $-Sign?
+               result0  = res0.split(res1, CompareChar);
+               result1 += res1;
+       } 
+       return result1;
+}  // ReplaceEnvironmentPath
+
+
+// Make relative path out of two absolute paths
+LString MakeRelPath(LString const & abspath0, LString const & basepath0)
+// Makes relative path out of absolute path. If it is deeper than basepath,
+// it's easy. If basepath and abspath share something (they are all deeper
+// than some directory), it'll be rendered using ..'s. If they are completely
+// different, then the absolute path will be used as relative path.
+{
+       // This is a hack. It should probaly be done in another way. Lgb.
+       LString abspath = CleanupPath(abspath0);
+       LString basepath = CleanupPath(basepath0);
+       if (abspath.empty())
+               return "<unknown_path>";
+
+       const int abslen = abspath.length();
+       const int baselen = basepath.length();
+       
+       // Find first different character
+       int i = 0;
+       while (i < abslen && i < baselen && abspath[i] == basepath[i]) ++i;
+
+       // Go back to last /
+       if (i < abslen && i < baselen
+           || (i<abslen && abspath[i] != '/' && i==baselen)
+           || (i<baselen && basepath[i] != '/' && i==abslen))
+       {
+               if (i) --i;     // here was the last match
+               while (i && abspath[i] != '/') --i;
+       }
+
+       if (i == 0) {
+               // actually no match - cannot make it relative
+               return abspath;
+       }
+
+       // Count how many dirs there are in basepath above match
+       // and append as many '..''s into relpath
+       LString buf;
+       int j = i;
+       while (j < baselen) {
+               if (basepath[j] == '/') {
+                       if (j+1 == baselen) break;
+                       buf += "../";
+               }
+               ++j;
+       }
+
+       // Append relative stuff from common directory to abspath
+       if (abspath[i] == '/') ++i;
+       for (; i<abslen; ++i)
+               buf += abspath[i];
+       // Remove trailing /
+       if (buf.suffixIs('/'))
+               buf.substring(0,buf.length()-2);
+       // Substitute empty with .
+       if (buf.empty())
+               buf = '.';
+       return buf;
+}
+
+
+// Append sub-directory(ies) to a path in an intelligent way
+LString AddPath(LString const & path, LString const & path_2)
+{
+       LString buf;
+       LString path2 = CleanupPath(path_2);
+
+       if (!path.empty() && path != "." && path != "./") {
+               buf = CleanupPath(path);
+               if (!path.suffixIs('/'))
+                       buf += '/';
+       }
+
+       if (!path2.empty()){
+               int p2start = 0;
+               while (path2[p2start] == '/') p2start++;
+
+               int p2end = path2.length()-1;
+               while (path2[p2end] == '/') p2end--;
+
+               LString tmp = path2;
+               tmp.substring(p2start,p2end);
+               buf += tmp + '/';
+       }
+       return buf;
+}
+
+
+/* 
+ Change extension of oldname to extension.
+ Strips path off if no_path == true.
+ If no extension on oldname, just appends.
+ */
+LString ChangeExtension(LString const & origname, LString const & extension, 
+                       bool no_path) 
+{ 
+       LString oldname = CleanupPath(origname);
+       int n = oldname.length()-1;
+       int dot;
+
+       // Make sure the extension includes the dot, if not empty
+       LString ext;
+       if (!extension.empty() && extension[0] != '.')
+               ext = "." + extension;
+       else
+               ext = extension;
+
+       // Go back to the first dot not crossing any /
+       for (dot=n; dot>=0 && oldname[dot]!='.' && oldname[dot]!='/'; dot--);
+   
+       if (dot==-1 || oldname[dot]!='.')
+               // If no extension was found, we use the end of the string
+               dot = n;
+       else
+               // Remove the dot, because the new extension includes it
+               dot--;
+
+       // "path" points to last / or 0 if path is wanted
+       int path = 0;
+       if (no_path) {
+               for (path=dot; path && oldname[path]!='/';path--);
+               if (oldname[path]=='/')
+                       path++;
+       } else 
+               path = 0;
+
+       LString result = oldname;
+       result.substring(path,dot);
+       if (!ext.empty())
+               result += ext;
+       return result;
+}
+
+
+// Creates a nice compact path for displaying
+LString MakeDisplayPath (LString const & path, int threshold)
+{
+       const int l1 = path.length();
+
+       // First, we try a relative path compared to home
+       LString home = getEnvPath("HOME");
+       LString relhome = MakeRelPath(path, home);
+
+       int l2 = relhome.length();
+
+       LString prefix;
+
+       // If we backup from home or don't have a relative path,
+       // this try is no good
+       if (relhome.prefixIs("../") || AbsolutePath(relhome)) {
+               // relative path was no good, just use the original path
+               relhome = path;
+               l2 = l1;
+       } else {
+               prefix = "~/";
+       }
+
+       // Is the path too long?
+       if (l2 > threshold) {
+               // Yes, shortend it
+               prefix += ".../";
+               
+               LString temp;
+               
+               while (relhome.length()>threshold)
+                       relhome.split(temp, '/');
+
+               // Did we shortend everything away?
+               if (relhome.empty()) {
+                       // Yes, filename in itself is too long.
+                       // Pick the start and the end of the filename.
+                       relhome = OnlyFilename(path);
+                       LString head = relhome;
+                       head.substring(0, threshold/2 - 3);
+
+                       LString tail = relhome;
+                       l2 = tail.length();
+                       tail.substring(l2 - threshold/2 -2, l2 - 1);
+
+                       relhome = head + "..." + tail;
+               }
+       }
+       return prefix + relhome;
+}
+
+bool LyXReadLink(LString const & File, LString & Link)
+{
+       char LinkBuffer[512];
+                // Should be PATH_MAX but that needs autconf support
+       int nRead;
+       nRead = readlink(File.c_str(), LinkBuffer,sizeof(LinkBuffer)-1);
+       if (nRead <= 0)
+               return false;
+       LinkBuffer[nRead] = 0;
+       Link = LinkBuffer;
+       return true;
+}
diff --git a/src/filetools.h b/src/filetools.h
new file mode 100644 (file)
index 0000000..4a33ade
--- /dev/null
@@ -0,0 +1,289 @@
+// -*- C++-*-
+/* lyx-filetool.h : tools functions for file/path handling
+   this file is part of LyX, the High Level Word Processor
+   copyright (C) 1995-1997, Matthias Ettrich and the LyX Team
+*/
+
+#ifndef __LYX_FILETOOL_H__
+#define __LYX_FILETOOL_H__
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <errno.h>
+#include "error.h"
+#include "LString.h"
+
+/** A file class.
+  Use this instead of FILE *, it gives a much better structure.
+  It should prehaps do a bit more error checking than it does now.
+  Currently it is a verbatim copy from p309 of Bjarne Stroupstrups
+  The C++ Programming Language. + some additions.
+ */
+class FilePtr {
+public:
+       ///
+       enum file_mode {
+               read,
+               write,
+               update,
+               truncate
+       };
+       ///
+       FilePtr(LString const &name, file_mode mode)
+       {
+               init();
+               do_open(name, mode);
+       }
+       ///
+       FilePtr(FILE *pp) { init(); p = pp; }
+       ///
+       ~FilePtr() { close(); }
+
+       /** Use this if you want to rebind the FilePtr to another file.
+        */
+       FilePtr& reopen(LString const &name, file_mode mode) {
+               // close the file it it is already open
+               close();
+               // Now open the file.
+               do_open(name, mode);
+
+               return *this;
+       }
+       /** Close the file.
+         Use this with some carefullness. After it has been used
+         the FilePtr is unusable. Only use it if it is important
+         that the file is closed before the FilePtr goes out
+         of scope. */
+       int close() { 
+               if (p) {
+                       int result = fclose(p); 
+                       p = 0; 
+                       return result;
+               } else 
+                       return 0;
+       }
+       /// automatic converson to FILE* if that is needed.
+       operator FILE*() { return p; }
+       ///
+       FilePtr& operator=(FILE *f) { p=f; return *this;}
+       ///
+       FILE *operator()() { return p; }
+private:
+       ///
+       void do_open(LString const &name, file_mode mode) {
+               char modestr[3];
+               
+               switch(mode) {
+                       // do appropiate #ifdef here so support EMX
+#ifndef __EMX__
+               case read: strcpy(modestr, "r"); break;
+               case write: strcpy(modestr, "w"); break;
+#else
+               case read: strcpy(modestr,"rt"); break; // Can read both DOS & UNIX text files.
+               case write: strcpy(modestr,"w"); break; // Write UNIX text files.
+#endif
+                       
+               case update: strcpy(modestr, "r+"); break;
+               case truncate: strcpy(modestr, "w+"); break;
+               }
+               // Should probably be rewritten to use open(2)
+               if((p = fopen(name.c_str(), modestr))) {
+                       // file succesfully opened.
+                       if (fcntl(fileno(p),F_SETFD,FD_CLOEXEC) == -1) {
+                               p = 0;
+                       }
+               } else {
+                       // we have an error let's check what it is.
+                       switch(errno) {
+                       case EINVAL:
+                               // Internal LyX error.
+                               lyxerr.print("FilePtr: Wrong parameter given to fopen.");
+                               break;
+                       default:
+                               // unknown error
+                               break;
+                       }
+               }
+       }
+       ///
+       void init() { p = 0; }
+       ///
+       FILE *p;
+};
+
+
+///
+LString CreateBufferTmpDir (LString const & pathfor = LString());
+
+/// Creates directory. Returns true on succes.
+bool createDirectory(LString const & name, int permissions);
+
+///
+LString CreateLyXTmpDir (LString const & deflt);
+
+///
+int DestroyBufferTmpDir (LString const & tmpdir);
+
+///
+int DestroyLyXTmpDir (LString const & tmpdir);
+
+/** Find file by searching several directories.
+  Uses a string of paths separated by ";"s to find a file to open.
+    Can't cope with pathnames with a ';' in them. Returns full path to file.
+    If path entry begins with $$LyX/, use system_lyxdir.
+    If path entry begins with $$User/, use user_lyxdir.
+    Example: "$$User/doc;$$LyX/doc".
+*/
+LString FileOpenSearch (LString const & path, LString const & name, 
+                       LString const & ext = LString());
+
+/** Returns the real name of file name in directory path, with optional
+  extension ext.
+  The file is searched in the given path (unless it is an absolute
+  file name), first directly, and then with extension .ext (if given).
+  */
+LString FileSearch(LString const & path, LString const & name, 
+                  LString const & ext = LString());
+
+/** Is directory read only?
+  returns 
+    1: dir writeable
+    0: not writeable
+   -1: error- couldn't find out, or unsure
+  */
+int IsDirWriteable (LString const & path);
+
+/** Is a file readable ?
+  Returns true if the file `path' is readable.
+ */
+bool IsFileReadable (LString const & path);
+
+/** Is file read only?
+  returns
+    1: read-write
+    0: read_only
+   -1: error (doesn't exist, no access, anything else)
+  */
+int IsFileWriteable (LString const & path);
+
+///
+bool IsLyXFilename(LString const & filename);
+
+///
+bool IsSGMLFilename(LString const & filename);
+
+/** Returns the path of a library data file.
+  Search the file name.ext in the subdirectory dir of
+  \begin{enumerate}
+    \item user_lyxdir
+    \item build_lyxdir (if not empty)
+    \item system_lyxdir
+  \end{enumerate}
+    The third parameter `ext' is optional.
+*/
+LString LibFileSearch(LString const & dir, LString const & name, 
+                     LString const & ext = LString());
+
+/** Same as LibFileSearch(), but tries first to find an
+  internationalized version of the file by prepending $LANG_ to the
+  name 
+  */
+LString i18nLibFileSearch(LString const & dir, LString const & name, 
+                         LString const & ext = LString());
+
+/// Substitutes spaces with underscores in filename (and path)
+LString SpaceLess(LString const & file);
+
+/** Returns an unique name to be used as a temporary file. If given,
+  'mask' should the prefix to the temporary file, the rest of the
+  temporary filename will be made from the pid and three letters.
+  */
+LString TmpFileName(LString const & dir = LString(), 
+                   LString const & mask = "lyx_tmp");
+
+/// Is a filename/path absolute?
+bool AbsolutePath(LString const &path);
+
+/// Add a filename to a path. Any path from filename is stripped first.
+LString AddName(LString const &Path, LString const &Filename);
+
+/// Append sub-directory(ies) to path in an intelligent way
+LString AddPath(LString const & path, LString const & path2);
+
+/** Change extension of oldname to extension.
+ If no_path is true, the path is stripped from the filename.
+ If oldname does not have an extension, it is appended.
+ If the extension is empty, any extension is removed from the name.
+ */
+LString ChangeExtension(LString const & oldname, LString const & extension, 
+                       bool no_path);
+
+/// Create absolute path. If impossible, don't do anything
+LString ExpandPath(LString const &path);
+
+/// gets current working directory
+LString GetCWD();
+
+/// A helper function.
+inline LString getEnvPath(char const *name)
+{
+       LString pathlist;
+       pathlist = getenv(name);
+#ifndef __EMX__
+       pathlist.subst(':', ';');
+#else
+       pathlist.subst('\\', '/');
+#endif
+       return pathlist.strip(';');
+}
+
+/** Convert relative path into absolute path based on a basepath.
+  If relpath is absolute, just use that.
+  If basepath doesn't exist use CWD.
+  */
+LString MakeAbsPath(LString const &RelPath = LString(), 
+                   LString const &BasePath = LString());
+
+/** Creates a nice compact path for displaying. The parameter
+  threshold, if given, specifies the maximal length of the path.
+  */
+LString MakeDisplayPath(LString const & path, int threshold=1000);
+
+/** Makes relative path out of absolute path.
+  If it is deeper than basepath,
+  it's easy. If basepath and abspath share something (they are all deeper
+  than some directory), it'll be rendered using ..'s. If they are completely
+  different, then the absolute path will be used as relative path
+  WARNING: the absolute path and base path must really be absolute paths!!!
+  */
+LString MakeRelPath(LString const & abspath, LString const & basepath);
+
+/// Strip filename from path name
+LString OnlyPath(LString const &Filename);
+
+/// Normalize a path. Constracts path/../path
+LString NormalizePath(LString const &path);
+
+/// Strips path from filename
+LString OnlyFilename(LString const &Filename);
+
+/// Cleanup a path if necessary. Currently only useful with OS/2
+LString CleanupPath(LString const &path) ;
+
+/** Check and Replace Environmentvariables ${NAME} in Path.
+    Replaces all occurences of these, if they are found in the
+    environment.
+    Variables are defined by Var := '${' [a-zA-Z_][a-zA-Z_0-9]* '}'
+*/
+LString ReplaceEnvironmentPath(LString const &path);
+
+/* Set Link to the path File Points to as a symbolic link.
+   Return True if succesfull, False other wise */
+bool LyXReadLink(LString const & file, LString & Link);
+
+#endif
diff --git a/src/form1.C b/src/form1.C
new file mode 100644 (file)
index 0000000..abe396b
--- /dev/null
@@ -0,0 +1,362 @@
+// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "form1.h"
+
+FD_KeyMap *create_form_KeyMap(void)
+{
+  FL_OBJECT *obj;
+  FD_KeyMap *fdui = (FD_KeyMap *) fl_calloc(1, sizeof(FD_KeyMap));
+
+  fdui->KeyMap = fl_bgn_form(FL_NO_BOX, 400, 400);
+  obj = fl_add_box(FL_UP_BOX,0,0,400,400,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,200,210,190,140,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  fdui->AcceptChset = obj = fl_add_button(FL_NORMAL_BUTTON,210,280,170,30,idex(_("Set Charset|#C")));fl_set_button_shortcut(obj,scex(_("Set Charset|#C")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->ChsetErr = obj = fl_add_text(FL_NORMAL_TEXT,210,310,170,30,_("Charset not found!"));
+    fl_set_object_lcol(obj,FL_RED);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE+FL_EMBOSSED_STYLE);
+  fdui->KeymapErr = obj = fl_add_text(FL_NORMAL_TEXT,290,60,100,90,_("Error:\n\nKeymap\nnot found"));
+    fl_set_object_lcol(obj,FL_RED);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE+FL_EMBOSSED_STYLE);
+  fdui->Charset = obj = fl_add_input(FL_NORMAL_INPUT,210,240,170,30,idex(_("Character set:|#H")));fl_set_button_shortcut(obj,scex(_("Character set:|#H")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,210,180,100,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,20,380,170,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+  fdui->Accept = obj = fl_add_button(FL_RETURN_BUTTON,130,360,120,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->OtherKeymap = obj = fl_add_input(FL_NORMAL_INPUT,120,70,160,30,idex(_("Other...|#O")));fl_set_button_shortcut(obj,scex(_("Other...|#O")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+  fdui->OtherKeymap2 = obj = fl_add_input(FL_NORMAL_INPUT,120,150,160,30,idex(_("Other...|#T")));fl_set_button_shortcut(obj,scex(_("Other...|#T")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,10,90,20,_("Language"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+    fl_set_object_resize(obj, FL_RESIZE_NONE);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,200,80,20,_("Mapping"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+
+  fdui->KeyMapOn = fl_bgn_group();
+  fdui->KeyOnBtn = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,250,180,30,idex(_("Primary key map|#r")));fl_set_button_shortcut(obj,scex(_("Primary key map|#r")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->KeyOffBtn = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,220,180,30,idex(_("No key mapping|#N")));fl_set_button_shortcut(obj,scex(_("No key mapping|#N")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->KeyOnBtn2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,280,180,30,idex(_("Secondary key map|#e")));fl_set_button_shortcut(obj,scex(_("Secondary key map|#e")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  obj = fl_add_text(FL_NORMAL_TEXT,20,110,100,30,_("Secondary"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_RIGHT|FL_ALIGN_INSIDE);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,30,100,30,_("Primary"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_RIGHT|FL_ALIGN_INSIDE);
+  fl_end_form();
+
+  //fdui->KeyMap->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_Figure *create_form_Figure(void)
+{
+  FL_OBJECT *obj;
+  FD_Figure *fdui = (FD_Figure *) fl_calloc(1, sizeof(FD_Figure));
+
+  fdui->Figure = fl_bgn_form(FL_NO_BOX, 420, 390);
+  obj = fl_add_box(FL_UP_BOX,0,0,420,390,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,230,220,180,80,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,230,60,180,140,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,244,200,56,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,60,200,160,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  fdui->EpsFile = obj = fl_add_input(FL_NORMAL_INPUT,80,10,230,30,idex(_("EPS file|#E")));fl_set_button_shortcut(obj,scex(_("EPS file|#E")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,2);
+  fdui->Preview = obj = fl_add_button(FL_NORMAL_BUTTON,270,350,140,30,idex(_("Full Screen Preview|#v")));fl_set_button_shortcut(obj,scex(_("Full Screen Preview|#v")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,1);
+  fdui->Browse = obj = fl_add_button(FL_NORMAL_BUTTON,320,10,90,30,idex(_("Browse...|#B")));fl_set_button_shortcut(obj,scex(_("Browse...|#B")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,0);
+  fdui->Width = obj = fl_add_input(FL_FLOAT_INPUT,20,180,80,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,2);
+  fdui->Height = obj = fl_add_input(FL_FLOAT_INPUT,120,180,80,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,2);
+  fdui->ApplyBtn = obj = fl_add_button(FL_NORMAL_BUTTON,100,350,60,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,7);
+  fdui->OkBtn = obj = fl_add_button(FL_RETURN_BUTTON,10,350,70,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,8);
+  fdui->CancelBtn = obj = fl_add_button(FL_NORMAL_BUTTON,180,350,70,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,9);
+  fdui->Frame = obj = fl_add_checkbutton(FL_PUSH_BUTTON,230,230,180,30,idex(_("Display Frame|#F")));fl_set_button_shortcut(obj,scex(_("Display Frame|#F")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,53);
+  fdui->Translations = obj = fl_add_checkbutton(FL_PUSH_BUTTON,230,260,180,30,idex(_("Do Translations|#r")));fl_set_button_shortcut(obj,scex(_("Do Translations|#r")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,54);
+  obj = fl_add_text(FL_NORMAL_TEXT,240,210,70,20,_("Options"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->Angle = obj = fl_add_input(FL_FLOAT_INPUT,100,260,80,30,idex(_("Angle:|#L")));fl_set_button_shortcut(obj,scex(_("Angle:|#L")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,2);
+
+  fdui->HeightGrp = fl_bgn_group();
+  // xgettext:no-c-format      
+  fdui->page2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,110,130,110,30,idex(_("% of Page|#g")));
+    // xgettext:no-c-format
+    fl_set_button_shortcut(obj,scex(_("% of Page|#g")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,23);
+  fdui->Default2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,110,70,80,30,idex(_("Default|#t")));fl_set_button_shortcut(obj,scex(_("Default|#t")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,20);
+  fdui->cm2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,110,90,60,30,idex(_("cm|#m")));fl_set_button_shortcut(obj,scex(_("cm|#m")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,21);
+  fdui->in2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,110,110,80,30,idex(_("inches|#h")));fl_set_button_shortcut(obj,scex(_("inches|#h")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,22);
+  fl_end_group();
+
+  obj = fl_add_text(FL_NORMAL_TEXT,237,50,53,20,_("Display"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->HeightLabel = obj = fl_add_text(FL_NORMAL_TEXT,120,50,60,20,_("Height"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->WidthLabel = obj = fl_add_text(FL_NORMAL_TEXT,20,50,60,20,_("Width"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,230,90,30,_("Rotation"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+
+  fdui->DisplayGrp = fl_bgn_group();
+  fdui->Wysiwyg3 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,230,130,180,30,idex(_("Display in Color|#D")));fl_set_button_shortcut(obj,scex(_("Display in Color|#D")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,63);
+  fdui->Wysiwyg0 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,230,160,180,30,idex(_("Do not display this figure|#y")));fl_set_button_shortcut(obj,scex(_("Do not display this figure|#y")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,3);
+  fdui->Wysiwyg2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,230,100,180,30,idex(_("Display as Grayscale|#i")));fl_set_button_shortcut(obj,scex(_("Display as Grayscale|#i")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,43);
+  fdui->Wysiwyg1 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,230,70,180,30,idex(_("Display as Monochrome|#s")));fl_set_button_shortcut(obj,scex(_("Display as Monochrome|#s")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,33);
+  fl_end_group();
+
+
+  fdui->WidthGrp = fl_bgn_group();
+  fdui->Default1 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,70,80,30,idex(_("Default|#U")));fl_set_button_shortcut(obj,scex(_("Default|#U")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,10);
+  fdui->cm1 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,90,60,30,idex(_("cm|#c")));fl_set_button_shortcut(obj,scex(_("cm|#c")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,11);
+  fdui->in1 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,110,80,30,idex(_("inches|#n")));fl_set_button_shortcut(obj,scex(_("inches|#n")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,12);
+  // xgettext:no-c-format
+  fdui->page1 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,130,110,30,idex(_("% of Page|#P")));
+    // xgettext:no-c-format
+    fl_set_button_shortcut(obj,scex(_("% of Page|#P")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,13);
+  // xgettext:no-c-format
+  fdui->column1 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,150,110,30,idex(_("% of Column|#o")));
+    // xgettext:no-c-format
+    fl_set_button_shortcut(obj,scex(_("% of Column|#o")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,14);
+  fl_end_group();
+
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,310,400,30,"");
+  fdui->Subcaption = obj = fl_add_input(FL_NORMAL_INPUT,150,310,260,30,idex(_("Caption|#k")));fl_set_button_shortcut(obj,scex(_("Caption|#k")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,2);
+  fdui->Subfigure = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,310,90,30,idex(_("Subfigure|#q")));fl_set_button_shortcut(obj,scex(_("Subfigure|#q")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,GraphicsCB,70);
+  fl_end_form();
+
+  //fdui->Figure->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_FileDlg *create_form_FileDlg(void)
+{
+  FL_OBJECT *obj;
+  FD_FileDlg *fdui = (FD_FileDlg *) fl_calloc(1, sizeof(FD_FileDlg));
+
+  fdui->FileDlg = fl_bgn_form(FL_NO_BOX, 440, 380);
+  obj = fl_add_box(FL_UP_BOX,0,0,440,380,"");
+  fdui->FileInfo = obj = fl_add_text(FL_NORMAL_TEXT,10,260,420,30,"");
+    fl_set_object_boxtype(obj,FL_SHADOW_BOX);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_gravity(obj, FL_SouthWest, FL_SouthEast);
+    fl_set_object_resize(obj, FL_RESIZE_X);
+  fdui->DirBox = obj = fl_add_input(FL_NORMAL_INPUT,100,10,330,30,idex(_("Directory:|#D")));fl_set_button_shortcut(obj,scex(_("Directory:|#D")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_NorthWest, FL_NorthEast);
+    fl_set_object_resize(obj, FL_RESIZE_X);
+  fdui->PatBox = obj = fl_add_input(FL_NORMAL_INPUT,100,40,330,30,idex(_("Pattern:|#P")));fl_set_button_shortcut(obj,scex(_("Pattern:|#P")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_NorthWest, FL_NorthEast);
+    fl_set_object_resize(obj, FL_RESIZE_X);
+  fdui->List = obj = fl_add_browser(FL_HOLD_BROWSER,10,80,320,170,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP);
+    fl_set_object_gravity(obj, FL_NorthWest, FL_SouthEast);
+  fdui->Filename = obj = fl_add_input(FL_NORMAL_INPUT,100,300,330,30,idex(_("Filename:|#F")));fl_set_button_shortcut(obj,scex(_("Filename:|#F")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthWest, FL_SouthEast);
+    fl_set_object_resize(obj, FL_RESIZE_X);
+  fdui->Rescan = obj = fl_add_button(FL_NORMAL_BUTTON,340,80,90,30,idex(_("Rescan|#R#r")));fl_set_button_shortcut(obj,scex(_("Rescan|#R#r")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
+  fdui->Home = obj = fl_add_button(FL_NORMAL_BUTTON,340,120,90,30,idex(_("Home|#H#h")));fl_set_button_shortcut(obj,scex(_("Home|#H#h")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
+  fdui->User1 = obj = fl_add_button(FL_NORMAL_BUTTON,340,160,90,30,idex(_("User1|#1")));fl_set_button_shortcut(obj,scex(_("User1|#1")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
+  fdui->User2 = obj = fl_add_button(FL_NORMAL_BUTTON,340,200,90,30,idex(_("User2|#2")));fl_set_button_shortcut(obj,scex(_("User2|#2")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_NorthEast, FL_NorthEast);
+  fdui->Ready = obj = fl_add_button(FL_RETURN_BUTTON,220,340,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+  fdui->Cancel = obj = fl_add_button(FL_NORMAL_BUTTON,330,340,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+  fdui->timer = obj = fl_add_timer(FL_HIDDEN_TIMER,10,350,20,20,"");
+    fl_set_object_gravity(obj, FL_SouthWest, FL_SouthWest);
+  fl_end_form();
+
+  //fdui->FileDlg->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_table *create_form_form_table(void)
+{
+  FL_OBJECT *obj;
+  FD_form_table *fdui = (FD_form_table *) fl_calloc(1, sizeof(FD_form_table));
+
+  fdui->form_table = fl_bgn_form(FL_NO_BOX, 310, 130);
+  obj = fl_add_box(FL_UP_BOX,0,0,310,130,"");
+  fdui->button_ok = obj = fl_add_button(FL_RETURN_BUTTON,10,90,90,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOKCB,0);
+  fdui->button_apply = obj = fl_add_button(FL_NORMAL_BUTTON,110,90,90,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableApplyCB,0);
+  fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON,210,90,90,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableCancelCB,0);
+  fdui->slider_columns = obj = fl_add_valslider(FL_HOR_SLIDER,80,50,220,30,_("Columns"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT);
+    fl_set_object_resize(obj, FL_RESIZE_X);
+  fdui->slider_rows = obj = fl_add_valslider(FL_HOR_SLIDER,80,10,220,30,_("Rows"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT);
+    fl_set_object_resize(obj, FL_RESIZE_X);
+  fl_end_form();
+
+  //fdui->form_table->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_search *create_form_form_search(void)
+{
+  FL_OBJECT *obj;
+  FD_form_search *fdui = (FD_form_search *) fl_calloc(1, sizeof(FD_form_search));
+
+  fdui->form_search = fl_bgn_form(FL_NO_BOX, 440, 160);
+  obj = fl_add_box(FL_UP_BOX,0,0,440,160,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,300,10,130,80,"");
+  fdui->input_search = obj = fl_add_input(FL_NORMAL_INPUT,110,10,180,30,idex(_("Find|#n")));fl_set_button_shortcut(obj,scex(_("Find|#n")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_NorthWest, FL_NorthEast);
+    fl_set_object_resize(obj, FL_RESIZE_X);
+  fdui->input_replace = obj = fl_add_input(FL_NORMAL_INPUT,110,40,180,30,idex(_("Replace with|#W")));fl_set_button_shortcut(obj,scex(_("Replace with|#W")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_West, FL_East);
+    fl_set_object_resize(obj, FL_RESIZE_X);
+  obj = fl_add_button(FL_NORMAL_BUTTON,200,80,90,30,idex(_("@>|#F")));fl_set_button_shortcut(obj,scex(_("@>|#F")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,SearchForwardCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,110,80,90,30,idex(_("@<|#B")));fl_set_button_shortcut(obj,scex(_("@<|#B")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,SearchBackwardCB,0);
+  fdui->replace_button = obj = fl_add_button(FL_NORMAL_BUTTON,110,120,90,30,idex(_("Replace|#R#r")));fl_set_button_shortcut(obj,scex(_("Replace|#R#r")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,SearchReplaceCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,350,120,80,30,idex(_("Close|^[")));fl_set_button_shortcut(obj,scex(_("Close|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthWest, FL_SouthWest);
+    fl_set_object_callback(obj,SearchCancelCB,0);
+  fdui->btnCaseSensitive = obj = fl_add_checkbutton(FL_PUSH_BUTTON,300,20,150,30,idex(_("Case sensitive|#s#S")));fl_set_button_shortcut(obj,scex(_("Case sensitive|#s#S")),1);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+  fdui->btnMatchWord = obj = fl_add_checkbutton(FL_PUSH_BUTTON,300,50,150,30,idex(_("Match word|#M#m")));fl_set_button_shortcut(obj,scex(_("Match word|#M#m")),1);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+  fdui->replaceall_button = obj = fl_add_button(FL_NORMAL_BUTTON,200,120,90,30,idex(_("Replace All|#A#a")));fl_set_button_shortcut(obj,scex(_("Replace All|#A#a")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,SearchReplaceAllCB,0);
+  fl_end_form();
+
+  //fdui->form_search->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
diff --git a/src/form1.h b/src/form1.h
new file mode 100644 (file)
index 0000000..cf2ab3f
--- /dev/null
@@ -0,0 +1,129 @@
+/** Header file generated with fdesign on Fri Apr 30 16:14:04 1999.**/
+
+#ifndef FD_KeyMap_h_
+#define FD_KeyMap_h_
+
+/** Callbacks, globals and object handlers **/
+
+extern void GraphicsCB(FL_OBJECT *, long);
+
+
+extern void TableOKCB(FL_OBJECT *, long);
+extern void TableApplyCB(FL_OBJECT *, long);
+extern void TableCancelCB(FL_OBJECT *, long);
+
+extern void SearchForwardCB(FL_OBJECT *, long);
+extern void SearchBackwardCB(FL_OBJECT *, long);
+extern void SearchReplaceCB(FL_OBJECT *, long);
+extern void SearchCancelCB(FL_OBJECT *, long);
+extern void SearchReplaceAllCB(FL_OBJECT *, long);
+
+
+/**** Forms and Objects ****/
+typedef struct {
+       FL_FORM *KeyMap;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *AcceptChset;
+       FL_OBJECT *ChsetErr;
+       FL_OBJECT *KeymapErr;
+       FL_OBJECT *Charset;
+       FL_OBJECT *Accept;
+       FL_OBJECT *OtherKeymap;
+       FL_OBJECT *OtherKeymap2;
+       FL_OBJECT *KeyMapOn;
+       FL_OBJECT *KeyOnBtn;
+       FL_OBJECT *KeyOffBtn;
+       FL_OBJECT *KeyOnBtn2;
+} FD_KeyMap;
+
+extern FD_KeyMap * create_form_KeyMap(void);
+typedef struct {
+       FL_FORM *Figure;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *EpsFile;
+       FL_OBJECT *Preview;
+       FL_OBJECT *Browse;
+       FL_OBJECT *Width;
+       FL_OBJECT *Height;
+       FL_OBJECT *ApplyBtn;
+       FL_OBJECT *OkBtn;
+       FL_OBJECT *CancelBtn;
+       FL_OBJECT *Frame;
+       FL_OBJECT *Translations;
+       FL_OBJECT *Angle;
+       FL_OBJECT *HeightGrp;
+       FL_OBJECT *page2;
+       FL_OBJECT *Default2;
+       FL_OBJECT *cm2;
+       FL_OBJECT *in2;
+       FL_OBJECT *HeightLabel;
+       FL_OBJECT *WidthLabel;
+       FL_OBJECT *DisplayGrp;
+       FL_OBJECT *Wysiwyg3;
+       FL_OBJECT *Wysiwyg0;
+       FL_OBJECT *Wysiwyg2;
+       FL_OBJECT *Wysiwyg1;
+       FL_OBJECT *WidthGrp;
+       FL_OBJECT *Default1;
+       FL_OBJECT *cm1;
+       FL_OBJECT *in1;
+       FL_OBJECT *page1;
+       FL_OBJECT *column1;
+       FL_OBJECT *Subcaption;
+       FL_OBJECT *Subfigure;
+} FD_Figure;
+
+extern FD_Figure * create_form_Figure(void);
+typedef struct {
+       FL_FORM *FileDlg;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *FileInfo;
+       FL_OBJECT *DirBox;
+       FL_OBJECT *PatBox;
+       FL_OBJECT *List;
+       FL_OBJECT *Filename;
+       FL_OBJECT *Rescan;
+       FL_OBJECT *Home;
+       FL_OBJECT *User1;
+       FL_OBJECT *User2;
+       FL_OBJECT *Ready;
+       FL_OBJECT *Cancel;
+       FL_OBJECT *timer;
+} FD_FileDlg;
+
+extern FD_FileDlg * create_form_FileDlg(void);
+typedef struct {
+       FL_FORM *form_table;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *button_ok;
+       FL_OBJECT *button_apply;
+       FL_OBJECT *button_cancel;
+       FL_OBJECT *slider_columns;
+       FL_OBJECT *slider_rows;
+} FD_form_table;
+
+extern FD_form_table * create_form_form_table(void);
+typedef struct {
+       FL_FORM *form_search;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *input_search;
+       FL_OBJECT *input_replace;
+       FL_OBJECT *replace_button;
+       FL_OBJECT *btnCaseSensitive;
+       FL_OBJECT *btnMatchWord;
+       FL_OBJECT *replaceall_button;
+} FD_form_search;
+
+extern FD_form_search * create_form_form_search(void);
+
+#endif /* FD_KeyMap_h_ */
diff --git a/src/gettext.h b/src/gettext.h
new file mode 100644 (file)
index 0000000..db7e61e
--- /dev/null
@@ -0,0 +1,62 @@
+// -*- C++ -*-
+#ifndef _GETTEXT_H_
+#define _GETTEXT_H_
+
+/*
+ * Native Language Support
+ *
+ * The general idea is that any string that should be translated is handled
+ * as follows:
+ *     _("string")
+ *
+ * Static strings are special, obviously and must be flagged as follows:
+ *     static str = N_("string");
+ *
+ * And wherever they are used:
+ *     _(str)
+ *
+ * Every file where there are strings needs:
+ *     #include "gettext.h"
+ *
+ * Remember to mention each of these files in "po/POFILES.in"
+ *
+ * The main() needs a locale_init() and a gettext_init() in the beginning.
+ */
+
+/*
+ * General translation notes:
+ *   Commands/options are not translated
+ *   Debug messages are not translated
+ *   Panic/fatal (that should not happen) messages need not be translated
+ */
+
+#ifdef ENABLE_NLS
+
+#  if HAVE_GETTEXT
+#    include <libintl.h>      // use the header already in the system *EK*
+#    ifdef HAVE_LOCALE_H
+#      include <locale.h>        // for LC_MESSAGES
+#    endif
+#  else
+#    include "../intl/libintl.h"
+#  endif
+
+#  define _(str) gettext(str)
+#  define N_(str) (str)              // for detecting static strings
+
+#  ifdef HAVE_LC_MESSAGES
+                                // LC_TIME, LC_CTYPE, even LC_ALL
+#    define locale_init() { setlocale (LC_MESSAGES, ""); setlocale (LC_CTYPE, "");}
+#  else
+#    define locale_init()
+#  endif
+#  define gettext_init() { bindtextdomain (PACKAGE, lyx_localedir.c_str()); \
+       textdomain (PACKAGE); }
+#else
+#  define _(str) (str)
+#  define N_(str) (str)
+#  define locale_init()
+#  define gettext_init()
+#endif
+
+#endif
diff --git a/src/include_form.h b/src/include_form.h
new file mode 100644 (file)
index 0000000..eb333f4
--- /dev/null
@@ -0,0 +1,28 @@
+#ifndef FD_include_h_
+#define FD_include_h_
+/* Header file generated with fdesign. */
+
+/**** Callback routines ****/
+
+extern void include_cb(FL_OBJECT *, long);
+
+
+/**** Forms and Objects ****/
+
+typedef struct {
+       FL_FORM *include;
+       void *vdata;
+       long ldata;
+       FL_OBJECT *browsebt;
+       FL_OBJECT *flag1;
+       FL_OBJECT *input;
+       FL_OBJECT *flag41;
+       FL_OBJECT *include_grp;
+       FL_OBJECT *flag4;
+       FL_OBJECT *flag2;
+       FL_OBJECT *flag3;
+} FD_include;
+
+extern FD_include * create_form_include(void);
+
+#endif /* FD_include_h_ */
diff --git a/src/insets/Makefile.am b/src/insets/Makefile.am
new file mode 100644 (file)
index 0000000..cfa7465
--- /dev/null
@@ -0,0 +1,50 @@
+AUTOMAKE_OPTIONS = foreign
+MAINTAINERCLEANFILES = Makefile.in
+noinst_PROGRAMS = insets.o
+LIBS=
+LDFLAGS=
+ETAGS_ARGS = --c++
+INCLUDES = -I${srcdir}/../
+CXXLINK = $(LD) -r -o $(noinst_PROGRAMS)
+
+insets_o_SOURCES = \
+       figinset.C \
+       figinset.h \
+       inset.C \
+       insetbib.C \
+       insetbib.h \
+       insetcommand.C \
+       insetcommand.h \
+       inseterror.C \
+       inseterror.h \
+       insetinclude.C \
+       insetinclude.h \
+       insetindex.C \
+       insetindex.h \
+       insetinfo.C \
+       insetinfo.h \
+       insetlabel.C \
+       insetlabel.h \
+       insetlatex.C \
+       insetlatex.h \
+       insetlatexaccent.C \
+       insetlatexaccent.h \
+       insetloa.C \
+       insetloa.h \
+       insetlof.C \
+       insetlof.h \
+       insetlot.C \
+       insetlot.h \
+       insetparent.C \
+       insetparent.h \
+       insetquotes.C \
+       insetquotes.h \
+       insetref.C \
+       insetref.h \
+       insetspecialchar.C \
+       insetspecialchar.h \
+       insettoc.C \
+       insettoc.h \
+       inseturl.C \
+       inseturl.h \
+       lyxinset.h
\ No newline at end of file
diff --git a/src/insets/figinset.C b/src/insets/figinset.C
new file mode 100644 (file)
index 0000000..1e884f1
--- /dev/null
@@ -0,0 +1,2197 @@
+/*
+ *     figinset.C - part of LyX project
+ */
+
+extern int     reverse_video;
+extern long int background_pixels;
+
+/*  Rework of path-handling (Matthias 04.07.1996 )
+ * ------------------------------------------------
+ *   figinsets keep an absolute path to the eps-file.
+ *   For the user alway a relative path appears
+ *   (in lyx-file, latex-file and edit-popup).
+ *   To calculate this relative path the path to the
+ *   document where the figinset is in is needed. 
+ *   This is done by a reference to the buffer, called
+ *   figinset::cbuffer. To be up to date the cbuffer
+ *   is sometimes set to the current buffer 
+ *   bufferlist.current(), when it can be assumed that
+ *   this operation happens in the current buffer. 
+ *   This is true for InsetFig::Edit(...), 
+ *   InsetFig::InsetFig(...), InsetFig::Read(...),
+ *   InsetFig::Write and InsetFig::Latex(...).
+ *   Therefore the bufferlist has to make sure that
+ *   during these operations bufferlist.current() 
+ *   returns the buffer where the figinsets are in.
+ *   This made few changes in buffer.C necessary.
+ *
+ * The above is not totally valid anymore. (Lgb)
+ */
+
+
+#include <config.h>
+
+#include <unistd.h>
+#include <signal.h>
+#include <sys/wait.h>
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include <ctype.h>
+#include <math.h>
+
+#include "form1.h"
+#include "figinset.h"
+#include "lyx.h"
+#include "lyx_main.h"
+#include "buffer.h"
+#include "filedlg.h"
+#include "filetools.h"
+#include "LyXView.h" // just because of form_main
+#include "error.h"
+#include "lyxdraw.h"
+#include "LaTeXFeatures.h"
+#include "lyxrc.h"
+#include "gettext.h"
+#include "lyx_gui_misc.h" // CancelCloseBoxCB
+#include "FileInfo.h"
+
+//     $Id: figinset.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $  
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: figinset.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+extern BufferView *current_view;
+static volatile bool alarmed;
+
+extern FL_OBJECT *figinset_canvas;
+inline
+void waitalarm(int)
+{
+       alarmed = true;
+}
+
+extern char **environ; // is this only redundtant on linux systems? Lgb.
+extern void UpdateInset(Inset* inset, bool mark_dirty = true);
+// better for asyncron updating:
+void PutInsetIntoInsetUpdateList(Inset* inset);
+extern void ProhibitInput();
+extern void AllowInput();
+
+#define DEG2PI 57.295779513
+#define figallocchunk 32
+
+static int figinsref = 0;      /* number of figures */
+static int figarrsize = 0;     /* current max number of figures */
+static int bmpinsref = 0;      /* number of bitmaps */
+static int bmparrsize = 0;     /* current max number of bitmaps */
+
+struct queue {
+       float rx, ry;           /* resolution x and y */
+       int ofsx, ofsy;         /* x and y translation */
+       figdata *data;          /* we are doing it for this data */
+       queue *next;            /* next item in queue */
+};
+
+struct pidwait {
+       int pid;                /* pid to wait for */
+       pidwait *next;  /* next */
+};
+
+#define MAXGS 3                        /* maximum 3 gs's at a time */
+
+static Figref **figures;       /* all the figures */
+static figdata **bitmaps;      /* all the bitmaps */
+static queue *gsqueue = NULL;  /* queue for ghostscripting */
+static int gsrunning = 0;      /* currently so many gs's are running */
+static bool bitmap_waiting = false; /* bitmaps are waiting finished */
+static char bittable[256];     /* bit reversion table */
+
+static bool gs_color;                  // do we allocate colors for gs?
+static bool color_visual;              // is the visual color?
+static bool gs_xcolor = false;         // allocated extended colors
+static unsigned long gs_pixels[128];   // allocated pixels
+static int gs_num_pixels;              // number of pixels allocated
+static int gs_spc;                     // shades per color
+static bool gs_gray;                   // is grayscale?
+static int gs_allcolors;               // number of all colors
+
+static pidwait *pw = NULL;             // pid wait list
+
+
+extern FD_form_main *fd_form_main;
+extern Colormap color_map;
+
+void addpidwait(int pid)
+{
+       // adds pid to pid wait list
+       register pidwait *p = new pidwait;
+
+       p->pid = pid;
+       p->next = pw;
+       pw = p;
+
+       if (lyxerr.debugging()) {
+               lyxerr.print(LString("Pids to wait for: ") + int(p->pid));
+               while (p->next) {
+                       p = p->next;
+                       lyxerr.print(LString() + int(p->pid));
+               }
+       }
+}
+
+
+int GhostscriptMsg(FL_OBJECT *, Window, int, int,
+                  XEvent *ev, void *)
+{
+       int i;
+       char tmp[128];
+
+       XClientMessageEvent *e = (XClientMessageEvent*) ev;
+
+       if(lyxerr.debugging()) {
+               fprintf(stderr,
+                       "ClientMessage, win:[xx] gs:[%ld] pm:[%ld]\n",
+                       e->data.l[0], e->data.l[1]);
+       }
+
+       // just kill gs, that way it will work for sure
+       for (i = 0; i < bmpinsref; ++i)
+               if ((long)bitmaps[i]->bitmap == (long)e->data.l[1]) {
+                       // found the one
+                       figdata *p = bitmaps[i];
+                       p->gsdone = true;
+
+                       // first update p->bitmap, if necessary
+                       if (p->bitmap != None && p->flags > (1|8) && gs_color && p->wid) {
+                               // query current colormap and re-render
+                               // the pixmap with proper colors
+                               XColor *cmap;
+                               XWindowAttributes wa;
+                               register XImage *im;
+                               int i, y, wid1, spc1 = gs_spc-1,
+                                       spc2 = gs_spc*gs_spc, wid = p->wid,
+                                       forkstat;
+                               Display *tmpdisp;
+                               GC gc = getGC(gc_copy);
+
+                               XGetWindowAttributes(fl_display, fl_get_canvas_id(
+                                       figinset_canvas), &wa);
+                               XFlush(fl_display);
+                               if (lyxerr.debugging()) {
+                                       fprintf(stderr,
+                                               "Starting image translation %ld %d %dx%d %d %d\n",
+                                              p->bitmap, p->flags, p->wid, p->hgh, wa.depth,
+                                              XYPixmap);
+                               }
+                               // now fork rendering process
+                               forkstat = fork();
+                               if (forkstat == -1) {
+                                       lyxerr.debug("Cannot fork, using slow "
+                                                     "method for pixmap translation.");
+                                       tmpdisp = fl_display;
+                               } else if (forkstat > 0) {
+                                       // register child
+                                       if (lyxerr.debugging()) {
+                                               lyxerr.print(
+                                                       LString("Spawned child ")
+                                                       + int(forkstat));
+                                       }
+                                       addpidwait(forkstat);
+                                       break; // in parent process
+                               } else {
+                                       tmpdisp = XOpenDisplay(XDisplayName(NULL));
+                                       XFlush(tmpdisp);
+                               }
+                               im = XGetImage(tmpdisp, p->bitmap, 0, 0,
+                                              p->wid, p->hgh, (1<<wa.depth)-1, XYPixmap);
+                               XFlush(tmpdisp);
+                               if (lyxerr.debugging()) {
+                                       lyxerr.print("Got the image");
+                               }
+                               if (!im) {
+                                       if (lyxerr.debugging()) {
+                                               lyxerr.print("Error getting the image");
+                                       }
+                                       goto noim;
+                               }
+                               // query current colormap
+                               cmap = (XColor *) malloc(gs_allcolors*sizeof(XColor));
+                               for (i = 0; i < gs_allcolors; ++i) cmap[i].pixel = i;
+                               XQueryColors(tmpdisp, color_map, cmap, gs_allcolors);
+                               XFlush(tmpdisp);
+                               wid1 = p->wid - 1;
+                               // now we process all the image
+                               for (y = 0; y < p->hgh; ++y) {
+                                       register int x;
+                                       for (x = 0; x < wid; ++x) {
+                                               register XColor* pc;
+                                               pc = cmap + XGetPixel(im, x, y);
+                                               XFlush(tmpdisp);
+                                               XPutPixel(im, x, y, gs_pixels[((pc->red+6553)*
+                                                                              spc1/65535)*spc2+((pc->green+6553)*
+                                                                                                spc1/65535)*gs_spc+((pc->blue+6553)*
+                                                                                                                    spc1/65535)]);
+                                               XFlush(tmpdisp);
+                                       }
+                               }
+                               if (lyxerr.debugging()) {
+                                       lyxerr.print("Putting image back");
+                               }
+                               XPutImage(tmpdisp, p->bitmap, gc, im, 0, 0,
+                                         0, 0, p->wid, p->hgh);
+                               XDestroyImage(im);
+                               if (lyxerr.debugging()) {
+                                       lyxerr.print("Done translation");
+                               }
+                         noim:
+                               if (lyxerr.debugging()) {
+                                       lyxerr.print(LString("Killing gs ") 
+                                                    + int(p->gspid));
+                               }
+                               kill(p->gspid, SIGHUP);
+
+                               sprintf(tmp, "%s/~lyxgs%d.ps",
+                                       system_tempdir.c_str(), 
+                                       p->gspid);
+                               unlink(tmp);
+                               if (forkstat == 0) {
+                                       XCloseDisplay(tmpdisp);
+                                       _exit(0);
+                               }
+                       } else {
+                               if (lyxerr.debugging()) {
+                                       lyxerr.print(LString("Killing gs ") 
+                                                    +int(p->gspid));
+                               }
+                               kill(p->gspid, SIGHUP);
+
+                               sprintf(tmp, "%s/~lyxgs%d.ps", 
+                                       system_tempdir.c_str(),
+                                       p->gspid);
+                               unlink(tmp);
+                       }
+                       break;
+               }
+       return 0;
+}
+
+
+static void AllocColors(int num)
+// allocate color cube numxnumxnum, if possible
+{
+       XColor xcol;
+       int i;
+
+       if (lyxerr.debugging()) {
+               printf("Allocating color cube %dx%dx%d\n", num, num, num);
+       }
+
+       if (num <= 1) {
+               lyxerr.print("Error allocating color colormap.");
+               gs_color = false;
+               return;
+       }
+       if (num > 5) num = 5;
+       for (i = 0; i < num*num*num; ++i) {
+               xcol.red = 65535*(i/(num*num))/(num-1);
+               xcol.green = 65535*((i/num) % num)/(num-1);
+               xcol.blue = 65535*(i % num)/(num-1);
+               xcol.flags = DoRed | DoGreen | DoBlue;
+               if (!XAllocColor(fl_display, color_map, &xcol)) {
+                       if (i) XFreeColors(fl_display, color_map,
+                                          gs_pixels, i, 0);
+                       if(lyxerr.debugging()) {
+                               lyxerr.print(LString("Cannot allocate color cube " )
+                                            + int(num));
+                       }
+                       AllocColors(num-1);
+                       return;
+               }
+               gs_pixels[i] = xcol.pixel;
+       }
+       gs_color = true;
+       gs_gray = false;
+       gs_spc = num;
+       gs_num_pixels = num*num*num;
+}
+
+
+static void AllocGrays(int num)
+// allocate grayscale ramp
+{
+       XColor xcol;
+       int i;
+
+       if (lyxerr.debugging()) {
+               lyxerr.print(LString("Allocating grayscale ramp ") 
+                            + int(num));
+       }
+
+       if (num < 4) {
+               lyxerr.print("Error allocating grayscale colormap.");
+               gs_color = false;
+               return;
+       }
+       if (num > 128) num = 128;
+       for (i = 0; i < num; ++i) {
+               xcol.red = xcol.green = xcol.blue = 65535*i/(num-1);
+               xcol.flags = DoRed | DoGreen | DoBlue;
+               if (!XAllocColor(fl_display, color_map, &xcol)) {
+                       if (i) XFreeColors(fl_display, color_map,
+                                          gs_pixels, i, 0);
+                       if (lyxerr.debugging()) {
+                               lyxerr.print(LString("Cannot allocate grayscale ") 
+                                            + int(num));
+                       }
+                       AllocGrays(num/2);
+                       return;
+               }
+               gs_pixels[i] = xcol.pixel;
+       }
+       gs_color = true;
+       gs_gray = false;
+       gs_num_pixels = num;
+}
+
+
+void InitFigures()
+{
+       unsigned int i, j, k;
+       Visual *vi;
+
+       bmparrsize = figarrsize = figallocchunk;
+       figures = (Figref**) malloc(sizeof(Figref*)*figallocchunk);
+       bitmaps = (figdata**) malloc(sizeof(figdata*)*figallocchunk);
+
+       for (i = 0; i < 256; ++i) {
+               k = 0;
+               for (j = 0; j < 8; ++j)
+                       if (i & (1 << (7-j))) k |= 1 << j;
+               bittable[i] = (char) ~k;
+       }
+
+       fl_add_canvas_handler(figinset_canvas, ClientMessage,
+                             GhostscriptMsg, fd_form_main);
+
+       // now we have to init color_map
+       if (!color_map) color_map = DefaultColormap(fl_display,
+                                                   DefaultScreen(fl_display));
+       // allocate color cube on pseudo-color display
+       // first get visual
+       gs_color = false;
+
+       vi = DefaultVisual(fl_display, DefaultScreen(fl_display));
+       if (lyxerr.debugging()) {
+               printf("Visual ID: %ld, class: %d, bprgb: %d, mapsz: %d\n", 
+                      vi->visualid, vi->c_class, 
+                      vi->bits_per_rgb, vi->map_entries);
+       }
+       color_visual = ( (vi->c_class == StaticColor) ||
+               (vi->c_class == PseudoColor) ||
+               (vi->c_class == TrueColor) ||
+               (vi->c_class == DirectColor) );
+       if ((vi->c_class & 1) == 0) return;
+       // now allocate colors
+       if (vi->c_class == GrayScale) {
+               // allocate grayscale
+               AllocGrays(vi->map_entries/2);
+       } else {
+               // allocate normal color
+               int i = 5;
+               while (i*i*i*2 > vi->map_entries) --i;
+               AllocColors(i);
+       }
+       gs_allcolors = vi->map_entries;
+}
+
+
+void DoneFigures()
+{
+       free(figures);
+       free(bitmaps);
+       figarrsize = 0;
+       bmparrsize = 0;
+
+       lyxerr.debug("Unregistering figures...");
+
+       fl_remove_canvas_handler(figinset_canvas, ClientMessage,
+                                GhostscriptMsg);
+
+       if (gs_color) {
+               lyxerr.debug("Freeing up the colors...");
+               XFreeColors(fl_display, color_map, gs_pixels,
+                           gs_num_pixels, 0);
+               /******????????????????? what's planes in this case ??????***/
+       }
+}
+
+
+int FindBmpIndex(figdata *tmpdata)
+{
+       int i = 0;
+       while (i < bmpinsref) {
+               if (bitmaps[i] == tmpdata) return i;
+               ++i;
+       }
+       return i;
+}
+
+
+static void chpixmap(Pixmap, int, int)
+{
+       Display* tempdisp = XOpenDisplay(XDisplayName(NULL));
+
+       // here read the pixmap and change all colors to those we
+       // have allocated
+
+       XCloseDisplay(tempdisp);
+}
+
+
+static void freefigdata(figdata *tmpdata)
+{
+       int i;
+
+       tmpdata->ref--;
+       if (tmpdata->ref) return;
+
+       if (tmpdata->gspid > 0) {
+               int pid = tmpdata->gspid;
+               char buf[128];
+               // change Pixmap according to our allocated colormap
+               chpixmap(tmpdata->bitmap, tmpdata->wid, tmpdata->hgh);
+               // kill ghostscript and unlink it's files
+               tmpdata->gspid = -1;
+               kill(pid, SIGKILL);
+               sprintf(buf, "%s/~lyxgs%d.ps", system_tempdir.c_str(), pid);
+               unlink(buf);
+       }
+
+       if (tmpdata->bitmap) XFreePixmap(fl_display, tmpdata->bitmap);
+       delete tmpdata;
+       i = FindBmpIndex(tmpdata);
+       --bmpinsref;
+       while (i < bmpinsref) {
+               bitmaps[i] = bitmaps[i+1];
+               ++i;
+       }
+}
+
+
+static void runqueue()
+{
+       // run queued requests for ghostscript, if any
+       if (!gsrunning && gs_color && !gs_xcolor) {
+               // here alloc all colors, so that gs will use only
+               // those we allocated for it
+               // *****
+               gs_xcolor = true;
+       }
+       
+       while (gsrunning < MAXGS) {
+               queue *p;
+               int pid;
+               char tbuf[384], tbuf2[80];
+               Atom *prop;
+               int nprop, i;
+
+               if (!gsqueue) {
+                       if (!gsrunning && gs_xcolor) {
+                               // de-allocate rest of colors
+                               // *****
+                               gs_xcolor = false;
+                       }
+                       return;
+               }
+               p = gsqueue;
+
+               if (!p->data) {
+                       delete p;
+                       continue;
+               }
+
+               pid = fork();
+               
+               if (pid == -1) {
+                       if (lyxerr.debugging()) {
+                               lyxerr.print("GS start error! Cannot fork.");
+                       }
+                       p->data->broken = true;
+                       p->data->reading = false;
+                       return;
+               }
+               if (pid == 0) { // child
+                       char **env, rbuf[80], gbuf[40];
+                       int ne = 0;
+                       Display* tempdisp = XOpenDisplay(XDisplayName(NULL));
+
+                       // create translation file
+                       sprintf(tbuf, "%s/~lyxgs%d.ps", system_tempdir.c_str(),
+                               int(getpid()));
+                       
+                       FilePtr f(tbuf, FilePtr::write);
+                       fprintf(f, "gsave clippath pathbbox grestore\n"
+                               "4 dict begin\n"
+                               "/ury exch def /urx exch def /lly exch def " 
+                               "/llx exch def\n"
+                               "%g %g translate\n"
+                               "%g rotate\n"
+                               "%g %g translate\n"
+                               "%g %g scale\n"
+                               "%d %d translate\nend\n",
+                               p->data->wid / 2.0, p->data->hgh / 2.0,
+                               p->data->angle,
+                               - (p->data->raw_wid / 2.0), -(p->data->raw_hgh / 2.0),
+                               p->rx / 72.0, p->ry / 72.0,
+                               -p->ofsx, -p->ofsy
+                               );
+
+                       // DON'T EVER remove this!!
+                       f.close(); // was this all? (Lgb)
+                       
+                       // gs process - set ghostview environment first
+                       sprintf(tbuf2, "GHOSTVIEW=%ld %ld", fl_get_canvas_id(
+                               figinset_canvas), p->data->bitmap);
+
+                       // now set up ghostview property on a window
+                       sprintf(tbuf, "0 0 0 0 %d %d 72 72 0 0 0 0",
+                               p->data->wid, p->data->hgh);
+//#warning BUG seems that the only bug here might be the hardcoded dpi.. Bummer!
+                       
+                       if (lyxerr.debugging()) {
+                               lyxerr.print(LString("Will set GHOSTVIEW"
+                                                    " property to [") +
+                                            tbuf + "]");
+                       }
+                       // wait until property is deleted if executing multiple
+                       // ghostscripts
+                       for (;;) {
+                               // grab server to prevent other child interfering
+                               // with setting GHOSTVIEW property
+                               if (lyxerr.debugging()) {
+                                       lyxerr.print("Grabbing the server");
+                               }
+                               XGrabServer(tempdisp);
+                               prop = XListProperties(tempdisp, fl_get_canvas_id(
+                                       figinset_canvas), &nprop);
+                               if (!prop) break;
+
+                               bool err = true;
+                               for (i = 0; i < nprop; ++i) {
+                                       char *p = XGetAtomName(tempdisp, prop[i]);
+                                       if (strcmp(p, "GHOSTVIEW") == 0) {
+                                               err = false;
+                                               break;
+                                       }
+                                       XFree(p);
+                               }
+                               XFree((char *)prop);    /* jc: */
+                               if (err) break;
+                               // release the server
+                               XUngrabServer(tempdisp);
+                               XFlush(tempdisp);
+                               // ok, property found, we must wait until ghostscript
+                               // deletes it
+                               if (lyxerr.debugging()) {
+                                       lyxerr.print("Releasing the server");
+                                       lyxerr.print(LString('[') +
+                                                     int(getpid()) +
+                                                     "] GHOSTVIEW property"
+                                                     " found. Waiting.");
+                               }
+#ifdef WITH_WARNINGS
+#warning What is this doing? (wouldn't a sleep(1); work too?')
+#endif
+                               alarm(1);
+                               alarmed = false;
+                               signal(SIGALRM, waitalarm);
+                               while (!alarmed) pause();
+                       }
+
+                       XChangeProperty(tempdisp, 
+                                       fl_get_canvas_id(figinset_canvas),
+                                       XInternAtom(tempdisp, "GHOSTVIEW", false),
+                                       XInternAtom(tempdisp, "STRING", false),
+                                       8, PropModeAppend, 
+                                       (unsigned char *) tbuf,
+                                       strlen(tbuf));
+                       
+                       switch (p->data->flags & 3) {
+                       case 0: tbuf[0] = 'H'; break; // Hidden
+                       case 1: tbuf[0] = 'M'; break; // Mono
+                       case 2: tbuf[0] = 'G'; break; // Gray
+                       case 3:
+                               if (color_visual) 
+                                       tbuf[0] = 'C'; // Color
+                               else 
+                                       tbuf[0] = 'G'; // Gray
+                               break;
+                       }
+
+                       if (reverse_video) {
+                               sprintf(tbuf+1, " %ld %ld", WhitePixelOfScreen(
+                                       DefaultScreenOfDisplay(fl_display)),
+                                       background_pixels);
+                       } else {
+                               sprintf(tbuf+1, " %ld %ld", BlackPixelOfScreen(
+                                       DefaultScreenOfDisplay(fl_display)),
+                                       background_pixels);
+                       }
+
+                       XChangeProperty(tempdisp, 
+                                       fl_get_canvas_id(figinset_canvas),
+                                       XInternAtom(tempdisp, "GHOSTVIEW_COLORS", false),
+                                       XInternAtom(tempdisp, "STRING", false),
+                                       8, PropModeReplace, 
+                                       (unsigned char *) tbuf,
+                                       strlen(tbuf));
+                       XUngrabServer(tempdisp);
+                       XFlush(tempdisp);
+                       if (lyxerr.debugging()) {
+                               lyxerr.print("Releasing the server");
+                       }
+                       XCloseDisplay(tempdisp);
+
+                       // set up environment
+                       while (environ[ne]) ++ne;
+                       env = (char **) malloc(sizeof(char*)*(ne+2));
+                       env[0] = tbuf2;
+                       memcpy(&env[1], environ, sizeof(char*)*(ne+1));
+                       environ = env;
+
+                       // now make gs command
+                       // close(0);
+                       // close(1); do NOT close. If GS writes out
+                       // errors it would hang. (Matthias 290596) 
+                       sprintf(rbuf, "-r%gx%g", p->rx, p->ry);
+                       sprintf(gbuf, "-g%dx%d", p->data->wid, p->data->hgh);
+                       // now chdir into dir with .eps file, to be on the safe
+                       // side
+                       chdir(OnlyPath(p->data->fname).c_str());
+                       // make temp file name
+                       sprintf(tbuf, "%s/~lyxgs%d.ps", system_tempdir.c_str(),
+                               int(getpid()));
+                       if (lyxerr.debugging()) {
+                               printf("starting gs %s %s, pid: %d\n", tbuf,
+                                      p->data->fname.c_str(), int(getpid()));
+                       }
+
+                       int err = execlp(lyxrc->ps_command.c_str(), 
+                                        lyxrc->ps_command.c_str(), 
+                                        "-sDEVICE=x11",
+                                        "-dNOPAUSE", "-dQUIET",
+                                        "-dSAFER", 
+                                        rbuf, gbuf, tbuf, 
+                                        p->data->fname.c_str(), 
+                                        "showpage.ps", "quit.ps", "-", NULL);
+                       // if we are still there, an error occurred.
+                       lyxerr.print(LString("Error executing ghostscript. ")
+                                    +"Code: "+err);
+                       lyxerr.debug("Cmd: " 
+                                    + lyxrc->ps_command
+                                    +" -sDEVICE=x11 "
+                                    + tbuf + LString(' ')
+                                    + p->data->fname);
+                       _exit(0);       // no gs?
+               }
+               // normal process (parent)
+               if (lyxerr.debugging()) {
+                       lyxerr.print(LString("GS [") + int(pid) + "] started");
+               }
+               gsqueue = gsqueue->next;
+               gsrunning++;
+               p->data->gspid = pid;
+               delete p;
+       }
+}
+
+
+static void addwait(int psx, int psy, int pswid, int pshgh, figdata *data)
+{
+       // recompute the stuff and put in the queue
+       queue *p, *p2;
+       p = new queue;
+       p->ofsx = psx;
+       p->ofsy = psy;
+       p->rx = ((float)data->raw_wid*72)/pswid;
+       p->ry = ((float)data->raw_hgh*72)/pshgh;
+
+       p->data = data;
+       p->next = NULL;
+
+       // now put into queue
+       p2 = gsqueue;
+       if (!gsqueue) gsqueue = p;
+       else {
+               while (p2->next) p2 = p2->next;
+               p2->next = p;
+       }
+
+       // if possible, run the queue
+       runqueue();
+}
+
+
+static figdata *getfigdata(int wid, int hgh, LString const & fname, 
+                          int psx, int psy, int pswid, int pshgh, 
+                          int raw_wid, int raw_hgh, float angle, char flags)
+{
+       /* first search for an exact match with fname and width/height */
+       int i = 0;
+       figdata *p;
+       XWindowAttributes wa;
+
+       if (fname.empty()) return NULL;
+
+       while (i < bmpinsref) {
+               if (bitmaps[i]->wid == wid && bitmaps[i]->hgh == hgh &&
+                   bitmaps[i]->flags == flags && bitmaps[i]->fname==fname &&
+                   bitmaps[i]->angle == angle) {
+                       bitmaps[i]->ref++;
+                       return bitmaps[i];
+               }
+               ++i;
+       }
+       /* not found -> create new record or return NULL if no record */
+       ++bmpinsref;
+       if (bmpinsref > bmparrsize) {
+               // allocate more space
+               bmparrsize += figallocchunk;
+               figdata **tmp = (figdata**) malloc(sizeof(figdata*)*bmparrsize);
+               memcpy(tmp, bitmaps, sizeof(figdata*)*(bmparrsize-figallocchunk));
+               free(bitmaps);
+               bitmaps = tmp;
+       }
+       p = new figdata;
+       bitmaps[bmpinsref-1] = p;
+       p->wid = wid;
+       p->hgh = hgh;
+       p->raw_wid = raw_wid;
+       p->raw_hgh = raw_hgh;
+       p->angle = angle;
+       p->fname = fname;
+       p->flags = flags;
+       XGetWindowAttributes(fl_display, fl_get_canvas_id(
+               figinset_canvas), &wa);
+
+       if (lyxerr.debugging()) {
+               printf("Create pixmap disp:%d scr:%d w:%d h:%d depth:%d\n",
+                      PTR_AS_INT(fl_display), DefaultScreen(fl_display), 
+                      wid, hgh, wa.depth);
+       }
+       
+       p->ref = 1;
+       p->reading = false;
+       p->broken = false;
+       p->gspid = -1;
+       if (flags) {
+               p->bitmap = XCreatePixmap(fl_display, fl_get_canvas_id(
+                       figinset_canvas), wid, hgh, wa.depth);
+               p->gsdone = false;
+               // initialize reading of .eps file with correct sizes and stuff
+               addwait(psx, psy, pswid, pshgh, p);
+               p->reading = true;
+       } else {
+               p->bitmap = None;
+               p->gsdone = true;
+       }
+
+       return p;
+}
+
+
+static void getbitmap(figdata *p)
+{
+       p->gspid = -1;
+}
+
+
+static void makeupdatelist(figdata *p)
+{
+       int i;
+
+       for (i = 0; i < figinsref; ++i) if (figures[i]->data == p) {
+               if (lyxerr.debugging()) {
+                       printf("Updating inset %d\n", 
+                              PTR_AS_INT(figures[i]->inset));
+               }
+               //UpdateInset(figures[i]->inset);
+               // add inset figures[i]->inset into to_update list
+               PutInsetIntoInsetUpdateList(figures[i]->inset);
+       }
+}
+
+
+void sigchldchecker(pid_t pid, int *status)
+{
+       int i;
+       figdata *p;
+
+       bool pid_handled = false;
+       
+       lyxerr.debug(LString("Got pid = ") + long (pid));
+       pid_handled = false;
+       for (i = bmpinsref - 1; i >= 0; --i) {
+               if (bitmaps[i]->reading && pid == bitmaps[i]->gspid) {
+                       lyxerr.debug("Found pid in bitmaps");
+                       // now read the file and remove it from disk
+                       p = bitmaps[i];
+                       p->reading = false;
+                       if (bitmaps[i]->gsdone) *status = 0;
+                       if (*status == 0) {
+                               lyxerr.debug(LString("GS [") + int(pid) +
+                                            "] exit OK.");
+                       } else {
+                               fprintf(stderr, "GS [%ld] error %d E:%d %d S:%d %d\n", long(pid),
+                                       *status, WIFEXITED(*status), WEXITSTATUS(*status),
+                                       WIFSIGNALED(*status), WTERMSIG(*status));
+                       }
+                       if (*status == 0) {
+                               bitmap_waiting = true;
+                               p->broken = false;
+                       } else {
+                               // remove temporary files
+                               char tmp[128];
+                               sprintf(tmp, "%s/~lyxgs%d.ps", 
+                                       system_tempdir.c_str(),
+                                       p->gspid);
+                               unlink(tmp);
+                               p->gspid = -1;
+                               p->broken = true;
+                       }
+                       makeupdatelist(bitmaps[i]);
+                       gsrunning--;
+                       runqueue();
+                       pid_handled = true;
+               }
+       }
+       if (!pid_handled) {
+               lyxerr.debug("Checking pid in pidwait");
+               pidwait *p = pw, *prev = NULL;
+               while (p) {
+                       if (pid == p->pid) {
+                               lyxerr.debug("Found pid in pidwait");
+                               lyxerr.debug(LString("Caught child pid of recompute routine ") + int(pid));
+                               if (prev)
+                                       prev->next = p->next;
+                               else
+                                       pw = p->next;
+                               free(p);
+                               break;
+                       }
+                       prev = p;
+                       p = p->next;
+               }
+       }
+
+       if (pid == -1) {
+               lyxerr.debug("waitpid error");
+               switch (errno) {
+               case ECHILD:
+                       lyxerr.print(
+                               "The process or process group specified by pid "
+                               "does  not exist or is not a child of the cal-"
+                               "ling process or can never be  in  the  states "
+                               "specified by options.");
+                       break;
+               case EINTR:
+                       lyxerr.print(
+                               "waitpid() was interrupted due to the  receipt "
+                               "of a signal sent by the calling process.");
+                       break;
+               case EINVAL:
+                       lyxerr.print(
+                               "An invalid value was specified for options.");
+                       break;
+               default:
+                       lyxerr.print("Unknown error from waitpid");
+                       break;
+               }
+       } else if (pid == 0) {
+               lyxerr.print("waitpid nohang");
+       } else {
+               lyxerr.debug("normal exit from childhandler");
+       }
+}
+
+
+static void getbitmaps()
+{
+       int i;
+       bitmap_waiting = false;
+       for (i = 0; i < bmpinsref; ++i)
+               if (bitmaps[i]->gspid > 0 && !bitmaps[i]->reading)
+                       getbitmap(bitmaps[i]);
+}
+
+
+static void RegisterFigure(InsetFig *fi)
+{
+       Figref *tmpfig;
+
+       if (figinsref == 0) InitFigures();
+       fi->form = NULL;
+       ++figinsref;
+       if (figinsref > figarrsize) {
+               // allocate more space
+               figarrsize += figallocchunk;
+               Figref **tmp = (Figref**) malloc(sizeof(Figref*)*figarrsize);
+               memcpy(tmp, figures, sizeof(Figref*)*(figarrsize-figallocchunk));
+               free(figures);
+               figures = tmp;
+       }
+       tmpfig = new Figref;
+       tmpfig->data = NULL;
+       tmpfig->inset = fi;
+       figures[figinsref-1] = tmpfig;
+       fi->figure = tmpfig;
+
+       if (lyxerr.debugging()) {
+               lyxerr.print(LString("Register Figure: buffer:[") +
+                            long(current_view->currentBuffer()) + "]");
+       }
+}
+
+
+int FindFigIndex(Figref *tmpfig)
+{
+       int i = 0;
+       while (i < figinsref) {
+               if (figures[i] == tmpfig) return i;
+               ++i;
+       }
+       return i;
+}
+
+
+static void UnregisterFigure(InsetFig *fi)
+{
+       Figref *tmpfig = fi->figure;
+       int i;
+
+       if (tmpfig->data) freefigdata(tmpfig->data);
+       if (tmpfig->inset->form) {
+               if (tmpfig->inset->form->Figure->visible)
+                       fl_hide_form(tmpfig->inset->form->Figure);
+               fl_free_form(tmpfig->inset->form->Figure);
+               free(tmpfig->inset->form);
+               tmpfig->inset->form = NULL;
+       }
+       i = FindFigIndex(tmpfig);
+       --figinsref;
+       while (i < figinsref) {
+               figures[i] = figures[i+1];
+               ++i;
+       }
+       delete tmpfig;
+
+       if (figinsref == 0) DoneFigures();
+}
+
+
+static char* NextToken(FILE *myfile)
+{
+       char* token = NULL;
+       char c;
+       int i = 0;
+   
+       if (!feof(myfile)) {
+               token = new char[256];
+               do {
+                       c = fgetc(myfile);
+                       token[i++]=c;
+               } while (!feof(myfile) && !isspace(c));
+      
+               token[i-1]='\0';         /* just the end of a command  */
+       }
+       return token;
+}
+
+
+InsetFig::InsetFig(int tmpx, int tmpy, Buffer *o)
+       : owner(o)
+{
+       wid = tmpx;
+       hgh = tmpy;
+       wtype = DEF;
+       htype = DEF;
+       twtype = DEF;
+       thtype = DEF;
+       pflags = flags = 9;
+       psubfigure = subfigure = false;
+       xwid = xhgh = angle = 0;
+       raw_wid = raw_hgh = 0;
+       changedfname = false;
+       RegisterFigure(this);
+}
+
+
+InsetFig::~InsetFig()
+{
+       if (lyxerr.debugging()) {
+               lyxerr.print("Figure destructor called");
+       }
+       UnregisterFigure(this);
+}
+
+
+int InsetFig::Ascent(LyXFont const&) const
+{
+       return hgh + 3;
+}
+
+
+int InsetFig::Descent(LyXFont const&) const
+{
+       return 1;
+}
+
+
+int InsetFig::Width(LyXFont const&) const
+{
+       return wid + 2;
+}
+
+
+void InsetFig::Draw(LyXFont font, LyXScreen &scr, int baseline, float &x)
+{
+       if (bitmap_waiting) getbitmaps();
+
+       // I wish that I didn't have to use this
+       // but the figinset code is so complicated so
+       // I don't want to fiddle with it now.
+       unsigned long pm = scr.getForeground();
+       
+       if (figure && figure->data && figure->data->bitmap &&
+           !figure->data->reading && !figure->data->broken) {
+               // draw the bitmap
+               XCopyArea(fl_display, figure->data->bitmap, pm, getGC(gc_copy),
+                         0, 0, wid, hgh, int(x+1), baseline-hgh);
+               XFlush(fl_display);
+               if (flags & 4) XDrawRectangle(fl_display, pm, getGC(gc_copy),
+                                             int(x), baseline - hgh - 1,
+                                             wid+1, hgh+1);
+       } else {
+               char * msg = 0;
+               // draw frame
+               XDrawRectangle(fl_display, pm, getGC(gc_copy),
+                              (int) x,
+                              baseline - hgh - 1, wid+1, hgh+1);
+               if (figure && figure->data) {
+                 if (figure->data->broken)  msg = _("[render error]");
+                 else if (figure->data->reading) msg = _("[rendering ... ]");
+               } else 
+                 if (fname.empty()) msg = _("[no file]");
+                 else if ((flags & 3) == 0) msg = _("[not displayed]");
+                 else if (lyxrc->ps_command.empty()) msg = _("[no ghostscript]");
+
+               if (!msg) msg = _("[unknown error]");
+               
+               font.setFamily (LyXFont::SANS_FAMILY);
+               font.setSize (LyXFont::SIZE_FOOTNOTE);
+               LString justname = OnlyFilename (fname);
+               font.drawString(justname,pm,
+                              baseline - font.maxAscent() - 4,
+                              (int) x + 8);
+               font.setSize (LyXFont::SIZE_TINY);
+               font.drawText (msg, strlen(msg),pm,
+                              baseline - 4,
+                              (int) x + 8);
+
+       }
+       x += Width(font);    // ?
+}
+
+
+void InsetFig::Write(FILE *file)
+{
+       Regenerate();
+       fprintf(file, "Figure size %d %d\n", wid, hgh);
+       if (!fname.empty()) {
+         LString buf1 = OnlyPath(owner->getFileName());
+         LString fname2 = MakeRelPath(fname, buf1);
+         fprintf(file, "file %s\n", fname2.c_str());
+       }
+       if (!subcaption.empty())
+         fprintf(file, "subcaption %s\n", subcaption.c_str());
+       if (wtype) fprintf(file, "width %d %g\n", wtype, xwid);
+       if (htype) fprintf(file, "height %d %g\n", htype, xhgh);
+       if (angle != 0) fprintf(file, "angle %g\n", angle);
+       fprintf(file, "flags %d\n", flags);
+       if (subfigure) fprintf(file, "subfigure\n");
+}
+
+
+void InsetFig::Read(LyXLex &lex)
+{
+       LString buf;
+       bool finished = false;
+       
+       while (lex.IsOK() && !finished) {
+               lex.next();
+
+               LString const token = lex.GetString();
+               lyxerr.debug("Token: " + token);
+               
+               if (token.empty())
+                       continue;
+               else if (token == "\\end_inset") {
+                       finished = true;
+               } else if (token == "file") {
+                       if (lex.next()) {
+                               buf = lex.GetString();
+                               LString buf1 = OnlyPath(owner->getFileName());
+                               fname = MakeAbsPath(buf, buf1);
+                               changedfname = true;
+                       }
+               } else if (token == "extra") {
+                       if (lex.next());
+                       // kept for backwards compability. Delete in 0.13.x
+               } else if (token == "subcaption") {
+                       if (lex.EatLine())
+                               subcaption = lex.GetString();
+               } else if (token == "label") {
+                       if (lex.next());
+                       // kept for backwards compability. Delete in 0.13.x
+               } else if (token == "angle") {
+                       if (lex.next())
+                               angle = lex.GetFloat();
+               } else if (token == "size") {
+                       if (lex.next())
+                               wid = lex.GetInteger();
+                       if (lex.next())
+                               hgh = lex.GetInteger();
+               } else if (token == "flags") {
+                       if (lex.next())
+                               flags = pflags = lex.GetInteger();
+               } else if (token == "subfigure") {
+                       subfigure = psubfigure = true;
+               } else if (token == "width") {
+                       int typ = 0;
+                       if (lex.next())
+                               typ = lex.GetInteger();
+                       if (lex.next())
+                               xwid = lex.GetFloat();
+                       switch (typ) {
+                       case DEF: wtype = DEF; break;
+                       case CM: wtype = CM; break;
+                       case IN: wtype = IN; break;
+                       case PER_PAGE: wtype = PER_PAGE; break;
+                       case PER_COL: wtype = PER_COL; break;
+                       default:
+                               lyxerr.debug("Unknown type!");
+                               break;
+                       }
+                       twtype = wtype;
+               } else if (token == "height") {
+                       int typ = 0;
+                       if (lex.next())
+                               typ = lex.GetInteger();
+                       if (lex.next())
+                               xhgh = lex.GetFloat();
+                       switch (typ) {
+                       case DEF: htype = DEF; break;
+                       case CM: htype = CM; break;
+                       case IN: htype = IN; break;
+                       case PER_PAGE: htype = PER_PAGE; break;
+                       default:
+                               lyxerr.debug("Unknown type!");
+                               break;
+                       }
+                       thtype = htype;
+               }
+       }
+       Regenerate();
+       Recompute();
+}
+
+
+int InsetFig::Latex(FILE *file, signed char /* fragile*/ )
+{
+       Regenerate();
+       if (!cmd.empty()) fprintf(file, "%s ", cmd.c_str());
+       return 0;
+}
+
+
+int InsetFig::Latex(LString &file, signed char /* fragile*/ )
+{
+       Regenerate();
+       file += cmd + ' ';
+       return 0;
+}
+
+
+int InsetFig::Linuxdoc(LString &/*file*/)
+{
+       return 0;
+}
+
+
+int InsetFig::DocBook(LString &file)
+{
+       LString figurename=fname;
+
+       if(figurename.suffixIs(".eps"))
+               figurename=figurename.substring(0,fname.length()-5);
+
+       file += "@<graphic fileref=\"" + figurename + "\"></graphic>";
+       return 0;
+}
+
+
+void InsetFig::Validate(LaTeXFeatures &features) const
+{
+       features.graphics = true;
+       if (subfigure) features.subfigure = true;
+}
+
+
+unsigned char InsetFig::Editable() const
+{
+       return 1;
+}
+
+
+bool InsetFig::Deletable() const
+{
+       return false;
+}
+
+
+void InsetFig::Edit(int, int)
+{
+       lyxerr.debug("Editing InsetFig.");
+       Regenerate();
+
+       // We should have RO-versions of the form instead.
+       // The actual prevention of altering a readonly doc
+       // is done in CallbackFig()
+       if(current_view->currentBuffer()->isReadonly()) 
+               WarnReadonly();
+
+       if (!form) {
+               form = create_form_Figure();
+               fl_set_form_atclose(form->Figure, CancelCloseBoxCB, NULL);
+               fl_set_object_return(form->Angle,FL_RETURN_ALWAYS);
+               fl_set_object_return(form->Width,FL_RETURN_ALWAYS);
+               fl_set_object_return(form->Height,FL_RETURN_ALWAYS);
+       }
+       RestoreForm();
+       if (form->Figure->visible) {
+               fl_raise_form(form->Figure);
+       } else {
+               fl_show_form(form->Figure, FL_PLACE_MOUSE | FL_PLACE_SIZE,
+                            FL_FULLBORDER, _("Figure"));
+       }
+}
+
+
+Inset *InsetFig::Clone()
+{
+       InsetFig *tmp = new InsetFig(100, 100, owner);
+
+       if (lyxerr.debugging()) {
+               fprintf(stderr, "Clone Figure: buffer:[%d], cbuffer:[xx]\n",
+                      PTR_AS_INT(current_view->currentBuffer()));
+       }
+
+       tmp->wid = wid;
+       tmp->hgh = hgh;
+       tmp->raw_wid = raw_wid;
+       tmp->raw_hgh = raw_hgh;
+       tmp->angle = angle;
+       tmp->xwid = xwid;
+       tmp->xhgh = xhgh;
+       tmp->flags = flags;
+       tmp->pflags = pflags;
+       tmp->subfigure = subfigure;
+       tmp->psubfigure = psubfigure;
+       tmp->wtype = wtype;
+       tmp->htype = htype;
+       tmp->psx = psx;
+       tmp->psy = psy;
+       tmp->pswid = pswid;
+       tmp->pshgh = pshgh;
+       tmp->fname = fname;
+       if (!fname.empty() && (flags & 3) && !lyxrc->ps_command.empty()) { 
+         // do not display if there is "do not display" chosen (Matthias 260696)
+               tmp->figure->data = getfigdata(wid, hgh, fname, psx, psy,
+                                              pswid, pshgh, raw_wid, raw_hgh,
+                                              angle, flags & (3|8));
+       } else tmp->figure->data = NULL;
+       tmp->subcaption = subcaption;
+       tmp->changedfname = false;
+       tmp->owner = owner;
+       tmp->Regenerate();
+       return tmp;
+}
+
+
+Inset::Code InsetFig::LyxCode() const
+{
+       return Inset::GRAPHICS_CODE;
+}
+
+
+void InsetFig::Regenerate()
+{
+       LString cmdbuf;
+       LString gcmd;
+       LString resizeW, resizeH;
+       LString rotate, recmd;
+
+       if (fname.empty()) {
+               cmd = "\\fbox{\\rule[-0.5in]{0pt}{1in}";
+               cmd += _("empty figure path");
+               cmd += '}';
+               //if (form) fl_set_object_label(form->cmd, "");
+               return;
+       }
+
+       LString buf1 = OnlyPath(owner->getFileName());
+       LString fname2 = MakeRelPath(fname, buf1);
+
+       gcmd = "\\includegraphics{" + fname2 + '}';
+       
+       switch (wtype) {
+       case DEF:
+               break;
+       case CM:{// \resizebox*{h-length}{v-length}{text}
+               char buf[10];
+               sprintf(buf, "%g", xwid); // should find better
+               resizeW = buf;
+               resizeW += "cm";
+               break;
+       }
+       case IN: {
+               char buf[10];
+               sprintf(buf, "%g", xwid);
+               resizeW = buf;
+               resizeW += "in";
+               break;
+       }
+       case PER_PAGE:{
+               char buf[10];
+               sprintf(buf, "%g", xwid/100);
+               resizeW = buf;
+               resizeW += "\\textwidth";
+               break;
+       }
+       case PER_COL:{
+               char buf[10];
+               sprintf(buf, "%g", xwid/100);
+               resizeW = buf;
+               resizeW += "\\columnwidth";
+               break;
+       }
+       }
+
+       switch (htype) {
+       case DEF:
+               break;
+       case CM: {
+               char buf[10];
+               sprintf(buf, "%g", xhgh);
+               resizeH = buf;
+               resizeH += "cm";
+               break;
+       }
+       case IN:{
+               char buf[10];
+               sprintf(buf, "%g", xhgh);
+               resizeH = buf;
+               resizeH += "in";
+               break;
+       }
+       case PER_PAGE: {
+               char buf[10];
+               sprintf(buf, "%g", xhgh/100);
+               resizeH = buf;
+               resizeH += "\\textheight";
+               break;
+       }
+       case PER_COL: {
+                // Doesn't occur; case exists to suppress compiler warnings.
+               break;
+       }
+       }
+
+       if (!resizeW.empty() || !resizeH.empty()) {
+               recmd = "\\resizebox*{";
+               if (!resizeW.empty())
+                       recmd += resizeW;
+               else
+                       recmd += '!';
+               recmd += "}{";
+               if (!resizeH.empty())
+                       recmd += resizeH;
+               else
+                       recmd += '!';
+               recmd += "}{";
+       }
+       
+       
+       if (angle != 0) {
+               char buf[10];
+               sprintf(buf, "%g", angle);
+               // \rotatebox{angle}{text}
+               rotate = "\\rotatebox{";
+               rotate += buf;
+               rotate += "}{";
+       }
+
+       cmdbuf = recmd;
+       cmdbuf += rotate;
+       cmdbuf += gcmd;
+       if (!rotate.empty()) cmdbuf += '}';
+       if (!recmd.empty()) cmdbuf += '}';
+       if (subfigure) {
+               if (!subcaption.empty())
+                       cmdbuf = "\\subfigure[" + subcaption +
+                         "]{" + cmdbuf + "}";
+               else
+                       cmdbuf = "\\subfigure{" + cmdbuf + "}";
+       }
+       
+       cmd = cmdbuf;
+
+       //if (form) fl_set_object_label(form->cmd, cmd.c_str());
+}
+
+
+void InsetFig::TempRegenerate()
+{
+       LString gcmd;
+       LString cmdbuf;
+       LString resizeW, resizeH;
+       LString rotate, recmd;
+       LString tsubcap;
+       
+       char const *tfname; // *textra;
+       float tangle, txwid, txhgh;
+
+       tfname = fl_get_input(form->EpsFile);
+       tsubcap = fl_get_input(form->Subcaption);
+       tangle = atof(fl_get_input(form->Angle));
+       txwid = atof(fl_get_input(form->Width));
+       txhgh = atof(fl_get_input(form->Height));
+
+       if (!tfname || !*tfname) {
+               //fl_set_object_label(form->cmd, "");
+               //fl_redraw_object(form->cmd);
+               cmd = "\\fbox{\\rule[-0.5in]{0pt}{1in}";
+               cmd += _("empty figure path");
+               cmd += '}';
+               return;
+       }
+
+       LString buf1 = OnlyPath(owner->getFileName());
+       LString fname2 = MakeRelPath(tfname, buf1);
+       // \includegraphics*[<llx,lly>][<urx,ury>]{file}
+       gcmd = "\\includegraphics{" + fname2 + '}';
+       
+       switch (twtype) {
+       case DEF:
+               break;
+       case CM: {// \resizebox*{h-length}{v-length}{text}
+               char buf[10];
+               sprintf(buf, "%g", txwid); // should find better
+               resizeW = buf;
+               resizeW += "cm";
+               break;
+       }
+       case IN: {
+               char buf[10];
+               sprintf(buf, "%g", txwid);
+               resizeW = buf;
+               resizeW += "in";
+               break;
+       }
+       case PER_PAGE: {
+               char buf[10];
+               sprintf(buf, "%g", txwid/100);
+               resizeW = buf;
+               resizeW += "\\textwidth";
+               break;
+       }
+       case PER_COL: {
+               char buf[10];
+               sprintf(buf, "%g", txwid/100);
+               resizeW = buf;
+               resizeW += "\\columnwidth";
+               break;
+       }
+       }
+
+       switch (thtype) {
+       case DEF:
+               break;
+       case CM: {
+               char buf[10];
+               sprintf(buf, "%g", txhgh);
+               resizeH = buf;
+               resizeH += "cm";
+               break;
+       }
+       case IN: {
+               char buf[10];
+               sprintf(buf, "%g", txhgh);
+               resizeH = buf;
+               resizeH += "in";
+               break;
+       }
+       case PER_PAGE: {
+               char buf[10];
+               sprintf(buf, "%g", txhgh/100);
+               resizeH = buf;
+               resizeH += "\\textheight";
+               break;
+       }
+       case PER_COL: {
+                // Doesn't occur; case exists to suppress compiler warnings.
+               break;
+       }
+       }
+
+       // \resizebox*{h-length}{v-length}{text}
+       if (!resizeW.empty() || !resizeH.empty()) {
+               recmd = "\\resizebox*{";
+               if (!resizeW.empty())
+                       recmd += resizeW;
+               else
+                       recmd += '!';
+               recmd += "}{";
+               if (!resizeH.empty())
+                       recmd += resizeH;
+               else
+                       recmd += '!';
+               recmd += "}{";
+       }
+       
+       if (tangle != 0) {
+               char buf[10];
+               sprintf(buf, "%g", tangle);
+               // \rotatebox{angle}{text}
+               rotate = "\\rotatebox{";
+               rotate += buf;
+               rotate += "}{";
+       }
+
+       cmdbuf = recmd;
+       cmdbuf += rotate;
+       cmdbuf += gcmd;
+       if (!rotate.empty()) cmdbuf += '}';
+       if (!recmd.empty()) cmdbuf += '}';
+       if (psubfigure && !tsubcap.empty()) {
+               cmdbuf = LString("\\subfigure{") + tsubcap
+                 + LString("}{") + cmdbuf + "}";
+       }
+
+       
+       //fl_set_object_label(form->cmd, cmdbuf.c_str());
+       //fl_redraw_object(form->cmd);
+}
+
+
+void InsetFig::Recompute()
+{
+       bool changed = changedfname;
+       int newx, newy, nraw_x, nraw_y, frame_wid, frame_hgh;
+       float sin_a, cos_a;
+
+       if (changed) GetPSSizes();
+
+       sin_a = sin (angle / DEG2PI);        /* rotation; H. Zeller 021296 */
+       cos_a = cos (angle / DEG2PI);
+       frame_wid = (int) ceil (fabs(cos_a * pswid) + fabs(sin_a * pshgh));
+       frame_hgh= (int) ceil (fabs(cos_a * pshgh) + fabs(sin_a * pswid));
+
+       /* now recompute wid and hgh, and if that is changed, set changed */
+       /* this depends on chosen size of the picture and its bbox */
+       // This will be redone in 0.13 ... (hen)
+       if (!fname.empty()) {
+               // say, total width is 595 pts, as A4 in TeX, thats in 1/72" */
+
+               newx = frame_wid;
+               newy = frame_hgh;
+               switch (wtype) {
+               case DEF:
+                       break;
+               case CM:        /* cm */
+                       newx = (int) (28.346*xwid);
+                       break;
+               case IN: /* in */
+                       newx = (int) (72*xwid);
+                       break;
+               case PER_PAGE:  /* % of page */
+                       newx = (int) (5.95*xwid);
+                       break;
+               case PER_COL:   /* % of col */
+                       newx = (int) (2.975*xwid);
+                       break;
+               }
+               
+               if (wtype && frame_wid) newy = newx*frame_hgh/frame_wid;
+               
+               switch (htype) {
+               case DEF:
+                       //fprintf(stderr, "This should not happen!\n");
+                       break;
+               case CM:        /* cm */
+                       newy = (int) (28.346*xhgh);
+                       break;
+               case IN: /* in */
+                       newy = (int) (72*xhgh);
+                       break;
+               case PER_PAGE:  /* % of page */
+                       newy = (int) (8.42*xhgh);
+                       break;
+               case PER_COL: 
+                        // Doesn't occur; case exists to suppress
+                       // compiler warnings.  
+                        break;
+               }
+               if (htype && !wtype && frame_hgh) newx = newy*frame_wid/frame_hgh;
+       } else {
+               newx = wid;
+               newy = hgh;
+       }
+
+       if (frame_wid == 0)
+               nraw_x = 5;
+       else
+               nraw_x = (int) ((1.0 * pswid * newx)/frame_wid);
+
+       if (frame_hgh == 0)
+               nraw_y = 5;
+       else
+               nraw_y = (int) ((1.0 * pshgh * newy)/frame_hgh);
+
+       // cannot be zero, actually, set it to some minimum, so its clickable
+       if (newx < 5) newx = 5;
+       if (newy < 5) newy = 5;
+
+       if (newx   != wid     || newy   != hgh     || 
+           nraw_x != raw_wid || nraw_y != raw_hgh ||
+           flags  != pflags  || subfigure != psubfigure) 
+               changed = true;
+       
+       raw_wid = nraw_x;
+       raw_hgh = nraw_y;
+       wid = newx;
+       hgh = newy;
+       flags = pflags;
+       subfigure = psubfigure;
+
+       if (changed) {
+               figdata *pf = figure->data;
+
+               // get new data
+               if (!fname.empty() && (flags & 3) && !lyxrc->ps_command.empty()) {
+                       // do not display if there is "do not display"
+                       // chosen (Matthias 260696)
+                       figure->data = getfigdata(wid, hgh, fname,
+                                                 psx, psy, pswid, pshgh,
+                                                 raw_wid, raw_hgh,
+                                                 angle, flags & (3|8));
+               } else figure->data = NULL;
+
+               // free the old data
+               if (pf) freefigdata(pf);
+       }
+
+       changedfname = false;
+}
+
+
+void InsetFig::GetPSSizes()
+{
+       /* get %%BoundingBox: from postscript file */
+       int lastchar, c;
+       char *p = NULL;
+       
+       /* defaults to associated size
+        * ..just in case the PS-file is not readable (Henner,24-Aug-97) 
+        */
+       psx = 0;
+       psy = 0;
+       pswid = wid;
+       pshgh = hgh;
+
+       if (fname.empty()) return;
+       
+       FilePtr f(fname, FilePtr::read);
+
+       if (!f()) return;       // file not found !!!!
+
+       /* defaults to A4 page */
+       psx = 0;
+       psy = 0;
+       pswid = 595;
+       pshgh = 842;
+
+       lastchar = fgetc(f);
+       for (;;) {
+               c = fgetc(f);
+               if (c == EOF) {
+                       lyxerr.debug("End of (E)PS file reached and"
+                                     " no BoundingBox!");
+                       break;
+               }
+               if (c == '%' && lastchar == '%') {
+                       p = NextToken(f);
+                       if (!p) break;
+                       if (strcmp(p, "EndComments") == 0) break;
+                       if (strcmp(p, "BoundingBox:") == 0) {
+                               float fpsx, fpsy, fpswid, fpshgh;
+                               if (fscanf(f, "%f %f %f %f", &fpsx, &fpsy,
+                                          &fpswid, &fpshgh) == 4) {
+                                       psx = (int) fpsx;
+                                       psy = (int) fpsy;
+                                       pswid = (int) fpswid;
+                                       pshgh = (int) fpshgh;
+                               } 
+
+                               if (lyxerr.debugging()) {
+                                       fprintf(stderr, "%%%%BoundingBox:"
+                                               " %d %d %d %d\n",
+                                               psx, psy, pswid, pshgh);
+                                       break;
+                               }
+                       }
+                       c = 0;
+                       delete[] p;
+                       p = NULL;
+               }
+               lastchar = c;
+       }
+       if (p) delete[] p;
+       pswid -= psx;
+       pshgh -= psy;
+
+}
+
+
+void InsetFig::CallbackFig(long arg)
+{
+       bool regen = false;
+       char const *p;
+
+       if (lyxerr.debugging()) {
+               printf("Figure callback, arg %ld\n", arg);
+       }
+
+       switch (arg) {
+       case 10:
+       case 11:
+       case 12:        /* width type */
+       case 13:
+       case 14:
+               switch (arg - 10) {
+               case DEF:
+                       twtype = DEF;
+                       // put disable here
+                       fl_deactivate_object(form->Width);
+                       break;
+               case CM:
+                       twtype = CM;
+                       // put enable here
+                       fl_activate_object(form->Width);
+                       break;
+               case IN:
+                       twtype = IN;
+                       // put enable here
+                       fl_activate_object(form->Width);
+                       break;
+               case PER_PAGE:
+                       twtype = PER_PAGE;
+                       // put enable here
+                       fl_activate_object(form->Width);
+                       break;
+               case PER_COL:
+                       twtype = PER_COL;
+                       // put enable here
+                       fl_activate_object(form->Width);
+                       break;
+               default:
+                       lyxerr.debug("Unknown type!");
+                       break;
+               }
+               regen = true;
+               break;
+       case 20:
+       case 21:
+       case 22:        /* height type */
+       case 23:
+               switch (arg - 20) {
+               case DEF:
+                       thtype = DEF;
+                       // put disable here
+                       fl_deactivate_object(form->Height);
+                       break;
+               case CM:
+                       thtype = CM;
+                       // put enable here
+                       fl_activate_object(form->Height);
+                       break;
+               case IN:
+                       thtype = IN;
+                       // put enable here
+                       fl_activate_object(form->Height);
+                       break;
+               case PER_PAGE:
+                       thtype = PER_PAGE;
+                       // put enable here
+                       fl_activate_object(form->Height);
+                       break;
+               default:
+                       lyxerr.debug("Unknown type!");
+                       break;
+               }
+               regen = true;
+               break;
+       case 3:
+               pflags = pflags & ~3;           /* wysiwyg0 */
+               break;
+       case 33:
+               pflags = (pflags & ~3) | 1;     /* wysiwyg1 */
+               break;
+       case 43:
+               pflags = (pflags & ~3) | 2;     /* wysiwyg2 */
+               break;
+       case 63:
+               pflags = (pflags & ~3) | 3;     /* wysiwyg3 */
+               break;
+       case 53:
+               pflags ^= 4;    /* frame */
+               break;
+       case 54:
+               pflags ^= 8;    /* do translations */
+               break;
+       case 70:
+               psubfigure = !psubfigure;       /* This is a subfigure */
+               break;
+       case 2:
+               regen = true;           /* regenerate command */
+               break;
+       case 0:                         /* browse file */
+               BrowseFile();
+               regen = true;
+               break;
+       case 1:                         /* preview */
+               p = fl_get_input(form->EpsFile);
+               Preview(p);
+               break;
+       case 7:                         /* apply */
+       case 8:                         /* ok (apply and close) */
+               if(!current_view->currentBuffer()->isReadonly())
+               {
+                       wtype = twtype;
+                       htype = thtype;
+                       xwid = atof(fl_get_input(form->Width));
+                       xhgh = atof(fl_get_input(form->Height));
+                       angle = atof(fl_get_input(form->Angle));
+                       p = fl_get_input(form->EpsFile);
+                       if (p && *p) {
+                               LString buf1 = OnlyPath(owner->getFileName());
+                               fname = MakeAbsPath(p, buf1);
+                               changedfname = true;
+                       } else {
+                               if (!fname.empty()) {
+                                       changedfname = true;
+                                       fname.clean();
+                               }
+                       }
+                       subcaption = fl_get_input(form->Subcaption);
+       
+                       Regenerate();
+                       Recompute();
+                       /* now update inset */
+                       if (lyxerr.debugging()) {
+                               fprintf(stderr, "Update: [%dx%d]\n", wid, hgh);
+                       }
+                       UpdateInset(this);
+                       if (arg == 8) {
+                               fl_hide_form(form->Figure);
+                               fl_free_form(form->Figure);
+                               free(form);
+                               form = NULL;
+                       }
+                       break;
+               } //if not readonly
+               //  The user has already been informed about RO in ::Edit
+               if(arg == 7) // if 'Apply'
+                       break;
+               // fall through
+       case 9:                         /* cancel = restore and close */
+               fl_hide_form(form->Figure);
+               fl_free_form(form->Figure);
+               free(form);
+               form = NULL;
+               break;
+       }
+
+       if (regen) TempRegenerate();
+}
+
+inline void DisableFigurePanel(FD_Figure * const form)
+{
+        fl_deactivate_object(form->EpsFile);
+       fl_deactivate_object(form->Browse);
+       fl_deactivate_object(form->Width);
+       fl_deactivate_object(form->Height);
+       fl_deactivate_object(form->Frame);
+       fl_deactivate_object(form->Translations);
+       fl_deactivate_object(form->Angle);
+       fl_deactivate_object(form->HeightGrp);
+       fl_deactivate_object(form->page2);
+       fl_deactivate_object(form->Default2);
+       fl_deactivate_object(form->cm2);
+       fl_deactivate_object(form->in2);
+       fl_deactivate_object(form->HeightLabel);
+       fl_deactivate_object(form->WidthLabel);
+       fl_deactivate_object(form->DisplayGrp);
+       fl_deactivate_object(form->Wysiwyg3);
+       fl_deactivate_object(form->Wysiwyg0);
+       fl_deactivate_object(form->Wysiwyg2);
+       fl_deactivate_object(form->Wysiwyg1);
+       fl_deactivate_object(form->WidthGrp);
+       fl_deactivate_object(form->Default1);
+       fl_deactivate_object(form->cm1);
+       fl_deactivate_object(form->in1);
+       fl_deactivate_object(form->page1);
+       fl_deactivate_object(form->column1);
+       fl_deactivate_object(form->Subcaption);
+       fl_deactivate_object(form->Subfigure);
+       fl_deactivate_object (form->OkBtn);
+       fl_deactivate_object (form->ApplyBtn);
+       fl_set_object_lcol (form->OkBtn, FL_INACTIVE);
+       fl_set_object_lcol (form->ApplyBtn, FL_INACTIVE);
+}
+
+inline void EnableFigurePanel(FD_Figure * const form)
+{
+        fl_activate_object(form->EpsFile);
+       fl_activate_object(form->Browse);
+       fl_activate_object(form->Width);
+       fl_activate_object(form->Height);
+       fl_activate_object(form->Frame);
+       fl_activate_object(form->Translations);
+       fl_activate_object(form->Angle);
+       fl_activate_object(form->HeightGrp);
+       fl_activate_object(form->page2);
+       fl_activate_object(form->Default2);
+       fl_activate_object(form->cm2);
+       fl_activate_object(form->in2);
+       fl_activate_object(form->HeightLabel);
+       fl_activate_object(form->WidthLabel);
+       fl_activate_object(form->DisplayGrp);
+       fl_activate_object(form->Wysiwyg3);
+       fl_activate_object(form->Wysiwyg0);
+       fl_activate_object(form->Wysiwyg2);
+       fl_activate_object(form->Wysiwyg1);
+       fl_activate_object(form->WidthGrp);
+       fl_activate_object(form->Default1);
+       fl_activate_object(form->cm1);
+       fl_activate_object(form->in1);
+       fl_activate_object(form->page1);
+       fl_activate_object(form->column1);
+       fl_activate_object(form->Subcaption);
+       fl_activate_object(form->Subfigure);
+       fl_activate_object (form->OkBtn);
+       fl_activate_object (form->ApplyBtn);
+       fl_set_object_lcol (form->OkBtn, FL_BLACK);
+       fl_set_object_lcol (form->ApplyBtn, FL_BLACK);
+}
+
+void InsetFig::RestoreForm()
+{
+       char buf[32];
+       int pflags;
+
+       EnableFigurePanel(form);
+
+       twtype = wtype;
+       fl_set_button(form->Default1, (wtype == 0));
+       fl_set_button(form->cm1, (wtype == 1));
+       fl_set_button(form->in1, (wtype == 2));
+       fl_set_button(form->page1, (wtype == 3));
+       fl_set_button(form->column1, (wtype == 4));
+       if (wtype == 0) {
+               fl_deactivate_object(form->Width);
+       } else {
+               fl_activate_object(form->Width);
+       }
+               
+       // enable and disable should be put here.
+       thtype = htype;
+       fl_set_button(form->Default2, (htype == 0));
+       fl_set_button(form->cm2, (htype == 1));
+       fl_set_button(form->in2, (htype == 2));
+       fl_set_button(form->page2, (htype == 3));
+       // enable and disable should be put here.
+       if (htype == 0) {
+               fl_deactivate_object(form->Height);
+       } else {
+               fl_activate_object(form->Height);
+       }
+
+       pflags = flags & 3;
+       fl_set_button(form->Wysiwyg0, (pflags == 0));
+       fl_set_button(form->Wysiwyg1, (pflags == 1));
+       fl_set_button(form->Wysiwyg2, (pflags == 2));
+       fl_set_button(form->Wysiwyg3, (pflags == 3));
+       fl_set_button(form->Frame, ((flags & 4) != 0));
+       fl_set_button(form->Translations, ((flags & 8) != 0));
+       fl_set_button(form->Subfigure, (subfigure != 0));
+       pflags = flags;
+       psubfigure = subfigure;
+       sprintf(buf, "%g", xwid);
+       fl_set_input(form->Width, buf);
+       sprintf(buf, "%g", xhgh);
+       fl_set_input(form->Height, buf);
+       sprintf(buf, "%g", angle);
+       fl_set_input(form->Angle, buf);
+       if (!fname.empty()){
+               LString buf1 = OnlyPath(owner->getFileName());
+               LString fname2 = MakeRelPath(fname, buf1);
+               fl_set_input(form->EpsFile, fname2.c_str());
+       }
+       else fl_set_input(form->EpsFile, "");
+       fl_set_input(form->Subcaption, subcaption.c_str());
+       if(current_view->currentBuffer()->isReadonly()) 
+               DisableFigurePanel(form);
+
+       TempRegenerate();
+}
+
+
+void InsetFig::Preview(char const *p)
+{
+       int pid;
+
+       pid = fork();
+
+       if (pid == -1) {
+               lyxerr.print("Cannot fork process!");
+               return;         // error
+       }
+       if (pid > 0) {
+               addpidwait(pid);
+               return;         // parent process
+       }
+
+       LString buf1 = OnlyPath(owner->getFileName());
+       LString buf2 = MakeAbsPath(p, buf1);
+       
+       lyxerr.print(LString("Error during rendering ") +
+                     int(execlp(lyxrc->view_pspic_command.c_str(),
+                                lyxrc->view_pspic_command.c_str(),
+                                buf2.c_str(), 
+                                NULL)));
+       _exit(0);
+}
+
+
+void InsetFig::BrowseFile()
+{
+       LString buf, buf2, bufclip;
+       static LString current_figure_path;
+       static int once = 0;
+       LyXFileDlg fileDlg;
+
+       if (lyxerr.debugging()) {
+               fprintf(stderr, "Filename: %s\n", owner->getFileName().c_str());
+       }
+       LString p = fl_get_input(form->EpsFile);
+
+       buf = MakeAbsPath(owner->getFileName());
+       buf2 = OnlyPath(buf);
+       if (!p.empty()) {
+               buf = MakeAbsPath(p, buf2);
+               buf = OnlyPath(buf);
+       } else {
+         buf = OnlyPath(owner->getFileName().c_str());
+       }
+       
+       // Does user clipart directory exist?
+       bufclip = AddName (user_lyxdir, "clipart");     
+       FileInfo fileInfo(bufclip);
+       if (!(fileInfo.isOK() && fileInfo.isDir()))
+         // No - bail out to system clipart directory
+         bufclip = AddName (system_lyxdir, "clipart"); 
+
+
+       fileDlg.SetButton(0, _("Clipart"), bufclip); 
+       fileDlg.SetButton(1, _("Document"), buf); 
+
+       bool error = false;
+       do {
+               ProhibitInput();
+               if (once) {
+                       p =fileDlg.Select(_("EPS Figure"), current_figure_path,
+                                          "*ps", LString());
+               } else {
+                       p = fileDlg.Select(_("EPS Figure"), buf,
+                                          "*ps", LString());
+               }
+               AllowInput();
+
+               if (p.empty()) return;
+
+               buf = MakeRelPath(p, buf2);
+               current_figure_path = OnlyPath(p);
+               once = 1;
+               
+               if (p.contains("#") || p.contains("~") || p.contains("$")
+                   || p.contains("%") || p.contains(" ")) 
+               {
+                       WriteAlert(_("Filename can't contain any of these characters:"), // xgettext:no-c-format
+                                  _("space, '#', '~', '$' or '%'.")); 
+                       error = true;
+               }
+       } while (error);
+
+       if (form) fl_set_input(form->EpsFile, buf.c_str());
+}
+
+
+void GraphicsCB(FL_OBJECT *obj, long arg)
+{
+       /* obj->form contains the form */
+
+       if (lyxerr.debugging()) {
+               lyxerr.print(LString("GraphicsCB callback: ") + long(arg));
+       }
+
+       /* find inset we were reacting to */
+       for (int i = 0; i < figinsref; ++i)
+               if (figures[i]->inset->form && figures[i]->inset->form->Figure
+                   == obj->form) {
+           
+                       if (lyxerr.debugging()) {
+                               lyxerr.print(LString("Calling back figure ")
+                                            +int(i));
+                       }
+                       figures[i]->inset->CallbackFig(arg);
+                       return;
+               }
+}
+
+
+void HideFiguresPopups()
+{
+       for (int i = 0; i < figinsref; ++i)
+               if (figures[i]->inset->form 
+                   && figures[i]->inset->form->Figure->visible) {
+                       if (lyxerr.debugging()) {
+                               lyxerr.print(LString("Hiding figure ")
+                                            +int(i));
+                       }
+                       // hide and free the form
+                       figures[i]->inset->CallbackFig(9);
+               }
+}
diff --git a/src/insets/figinset.h b/src/insets/figinset.h
new file mode 100644 (file)
index 0000000..6eb11a7
--- /dev/null
@@ -0,0 +1,185 @@
+// -*- C++ -*-
+/*
+  figinset.h - Figure inset header - part of LyX project
+  (C)1996 by Ivan Schreter
+  */
+
+#ifndef _FIGINSET_H
+#define _FIGINSET_H
+
+#include "form1.h"
+#include "buffer.h"
+#include "LString.h"
+#include "LaTeXFeatures.h"
+
+/* the rest is figure stuff */
+
+struct Figref;
+
+///
+class InsetFig: public Inset {
+public:
+       ///
+       InsetFig(int tmpx, int tmpy, Buffer *);
+       ///
+       ~InsetFig();
+       ///
+       int Ascent(LyXFont const &font) const;
+       ///
+       int Descent(LyXFont const &font) const;
+       ///
+       int Width(LyXFont const &font) const;
+       ///
+       void Draw(LyXFont font, LyXScreen &scr, int baseline, float &x);
+       ///
+       void Write(FILE *file);
+       ///
+       void Read(LyXLex &lex);
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+       /// Updates needed features for this inset.
+       void Validate(LaTeXFeatures &features) const;
+
+       /// what appears in the minibuffer when opening
+       char const* EditMessage() {return "Opened figure";}
+       ///
+       void Edit(int, int);
+       ///
+       unsigned char Editable() const;
+       ///
+       bool Deletable() const;
+       ///
+       Inset::Code LyxCode() const;
+       ///
+       Inset* Clone();
+       ///
+       void CallbackFig(long arg);
+       ///
+       void Preview(char const *p);
+       /// browse for file
+       void BrowseFile();
+
+       /// form for user input
+       FD_Figure *form;
+       /// width and height in pixels on screen
+       int wid, hgh;
+       /// width and height in postscript units (1/72 inch)
+       int pswid, pshgh;
+       /// width of raw figure w/o rotation
+       int raw_wid;
+       /// heigt of raw figure w/o rotation
+       int raw_hgh;
+       /// x and y coordinate in ps units
+       int psx, psy;
+
+       /// .eps file name
+       LString fname;
+       /// changed filename -> for recompute
+       bool changedfname;
+
+       ///
+       enum HWTYPE {
+               ///
+               DEF,
+               ///
+               CM,
+               ///
+               IN,
+               ///
+               PER_PAGE,
+               ///
+               PER_COL
+       };
+       
+       /// width and height types: 0-default, 1-cm, 2-in, 3-%of page
+        /// For width, there is also: 4-% of col
+       HWTYPE wtype;
+       ///
+       HWTYPE htype;
+
+       /// temporary w and h type
+       HWTYPE twtype;
+       ///
+       HWTYPE thtype;
+
+       /// width and height
+       float xwid, xhgh;
+
+       /// rotation angle
+       float angle;
+       
+       /// graphics command, latex version
+       LString cmd;
+       
+       /// Caption for subfigure package
+       LString subcaption;
+
+       /// various flags
+       int flags;
+       bool subfigure : 1;
+       /// figure reference
+       Figref *figure;
+       /// temporary flags
+       int pflags;
+       bool psubfigure : 1;
+private:
+
+       ///
+       Buffer *owner;
+       /// restore values on the form
+       void RestoreForm();
+       /// recompute screen params
+       void Recompute();
+       /// regenerate \includegraphics{} command
+       void Regenerate();
+       /// regenerate \inlcudegraphics{} command in temporary buffer
+       void TempRegenerate();
+       /// get sizes from .eps file
+       void GetPSSizes();
+};
+
+
+///
+struct figdata {
+       /// bitmap data
+       Pixmap bitmap;
+       /// reference count for this bitmap
+       int ref;
+        /// rotation angle
+        float angle;
+        /// width of raw figure w/o rotation
+       int raw_wid;
+        /// heigt of raw figure w/o rotation
+       int raw_hgh;
+       /// width and height on screen
+       int wid, hgh;
+       /// pointer to file name
+       LString fname;
+       /// type; 0-none, 1-B/W, 2-Grayscale, 3-Color
+       char flags;
+       /// reading request is pending on this figure
+       bool reading;
+       /// could not read it, because it's broken
+       bool broken;
+       /// when gs was killed, this says that image is ok
+       bool gsdone;
+       /// gs pid for reading
+       int gspid;
+};
+
+
+///
+struct Figref {
+       /// figure data (image)
+       figdata *data;
+       /// inset of this figure
+       InsetFig *inset;
+};
+
+#endif
diff --git a/src/insets/inset.C b/src/insets/inset.C
new file mode 100644 (file)
index 0000000..4e09297
--- /dev/null
@@ -0,0 +1,120 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "lyxinset.h"
+#endif
+
+#include "lyxinset.h"
+#include "error.h"
+
+//     $Id: inset.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $     
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: inset.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+/* Insets default methods */
+
+bool Inset::Deletable() const
+{
+  return true;
+}
+
+
+bool Inset::DirectWrite() const
+{
+  return false;
+}
+
+
+unsigned char Inset::Editable() const
+{
+  return 0;
+}
+
+void Inset::Validate(LaTeXFeatures &) const
+{
+       // nothing by default
+}
+
+
+
+bool Inset::AutoDelete() const
+{
+  return false;
+}
+
+
+void Inset::Edit(int, int)
+{
+}
+
+
+LyXFont Inset::ConvertFont(LyXFont font)
+{
+  return font;
+}
+
+
+// Inset::Code Inset::LyxCode() const
+// {
+//   return Inset::NO_CODE;
+// }
+
+ /* some stuff for inset locking */
+
+
+void UpdatableInset::InsetButtonPress(int x, int y, int button)
+{
+       lyxerr.debug(LString("Inset Button Press x=")+ x +
+                     ", y=" + y + ", button=" + button);
+}
+
+
+void UpdatableInset::InsetButtonRelease(int x, int y, int button)
+{
+       lyxerr.debug(LString("Inset Button Release x=")+ x +
+                     ", y=" + y + ", button=" + button);
+}
+
+
+void UpdatableInset::InsetKeyPress(XKeyEvent *)
+{
+       lyxerr.debug("Inset Keypress");
+}
+
+
+void UpdatableInset::InsetMotionNotify(int x, int y, int state)
+{
+       lyxerr.debug(LString("Inset Motion Notify x=")+ x +
+                     ", y=" + y + ", state=" + state);
+}
+
+
+void UpdatableInset::InsetUnlock()
+{
+       lyxerr.debug("Inset Unlock", Error::ANY);
+}
+
+
+// An updatable inset is highly editable by definition
+unsigned char UpdatableInset::Editable() const
+{
+       return 2; // and what does "2" siginify? (Lgb)
+}
+
+
+void UpdatableInset::ToggleInsetCursor()
+{
+  // nothing
+}
diff --git a/src/insets/insetbib.C b/src/insets/insetbib.C
new file mode 100644 (file)
index 0000000..aea8a49
--- /dev/null
@@ -0,0 +1,548 @@
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include FORMS_H_LOCATION  
+#include "insetbib.h"
+#include "combox.h"
+#include "buffer.h"
+#include "error.h"
+#include "lyx_gui_misc.h"
+#include "BufferView.h"
+#include "gettext.h"
+#include "bibforms.h"
+#include "lyxtext.h"
+#include "filetools.h"
+
+extern BufferView *current_view;
+
+FD_citation_form *citation_form=0;
+FD_bibitem_form *bibitem_form=0;
+static Combox *bibcombox = NULL;
+
+extern void UpdateInset(Inset* inset, bool mark_dirty = true);
+void BibitemUpdate(Combox *);
+void bibitem_cb(FL_OBJECT *, long);
+FD_citation_form * create_form_citation_form(void);
+FD_bibitem_form * create_form_bibitem_form(void);
+
+
+void bibitem_cb(FL_OBJECT *, long data)
+{
+       switch (data) {
+//       case 0: fl_hide_form(citation_form->citation_form);
+//               break;
+//       case 1: 
+       case 1: // OK, citation
+        {
+//               InsetCommand *inset = (InsetCommand*)citation_form->vdata;
+//               inset->setContents(bibcombox->getline());
+//               inset->setOptions(fl_get_input(citation_form->label));
+//               fl_hide_form(citation_form->citation_form);
+//               UpdateInset(inset);
+//               break;
+               if(!current_view->currentBuffer()->isReadonly()) {
+                       InsetCommand *inset = (InsetCommand*)citation_form->vdata;
+                       inset->setContents(bibcombox->getline());
+                       inset->setOptions(fl_get_input(citation_form->label));
+                       fl_hide_form(citation_form->citation_form);
+                       // shouldn't mark the buffer dirty unless something
+                       // was actually altered
+                       UpdateInset(inset);
+                       break;
+               }
+               // fall through to Cancel on RO-mode
+        }       
+//       case 2:  fl_hide_form(bibitem_form->bibitem_form);
+       case 0: fl_hide_form(citation_form->citation_form);
+                break;
+//       case 3:
+
+       case 3: // OK, bibitem
+        {
+//               InsetCommand *inset = (InsetCommand *)bibitem_form->vdata;
+//               inset->setContents(fl_get_input(bibitem_form->key));
+//               inset->setOptions(fl_get_input(bibitem_form->label));
+//               fl_hide_form(bibitem_form->bibitem_form);
+//              // Does look like a hack? It is! (but will change at 0.13)
+//               current_view->currentBuffer()->text->RedoParagraph();
+//               current_view->currentBuffer()->update(1);
+//               break;
+               if(!current_view->currentBuffer()->isReadonly()) {
+                       InsetCommand *inset = (InsetCommand *)bibitem_form->vdata;
+                       inset->setContents(fl_get_input(bibitem_form->key));
+                       inset->setOptions(fl_get_input(bibitem_form->label));
+                       fl_hide_form(bibitem_form->bibitem_form);
+                       // Does look like a hack? It is! (but will change at 0.13)
+                       current_view->currentBuffer()->text->RedoParagraph();
+                       current_view->currentBuffer()->update(1);
+                       break;
+               } // fall through to Cancel on RO-mode
+        }
+       case 2: // Cancel, bibitem
+               fl_hide_form(bibitem_form->bibitem_form); // Cancel, bibitem
+               break;
+        }
+}
+
+FD_citation_form *create_form_citation_form(void)
+{
+       FL_OBJECT *obj;
+       FD_citation_form *fdui = (FD_citation_form *) fl_calloc(1, sizeof(FD_citation_form));
+
+       fdui->citation_form = fl_bgn_form(FL_NO_BOX, 220, 130);
+       obj = fl_add_box(FL_UP_BOX,0,0,220,130,"");
+       fdui->key = obj = fl_add_text(FL_NORMAL_TEXT,20,10,60,30,_("Key:"));
+         fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+         fl_set_object_lalign(obj,FL_ALIGN_RIGHT);
+
+       bibcombox = new Combox(FL_COMBOX_INPUT);
+       bibcombox->add(80,10,130,30, 120);
+
+       obj = fl_add_button(FL_RETURN_BUTTON,20,90,90,30,_("OK"));
+         fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+         fl_set_object_callback(obj,bibitem_cb,1);
+       obj = fl_add_button(FL_NORMAL_BUTTON,120,90,90,30,idex(_("Cancel|^[")));
+         fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+         fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+         fl_set_object_callback(obj,bibitem_cb,0);
+       fdui->label = obj = fl_add_input(FL_NORMAL_INPUT,80,50,130,30,idex(_("Remark:|#R")));
+         fl_set_input_shortcut(obj,scex(_("Remark:|#R")),1);
+         fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+       fl_end_form();
+
+       //fdui->citation_form->fdui = fdui;
+
+       return fdui;
+}
+/*---------------------------------------*/
+
+FD_bibitem_form *create_form_bibitem_form(void)
+{
+       FL_OBJECT *obj;
+       FD_bibitem_form *fdui = (FD_bibitem_form *) fl_calloc(1, sizeof(FD_bibitem_form));
+
+       fdui->bibitem_form = fl_bgn_form(FL_NO_BOX, 220, 130);
+       obj = fl_add_box(FL_UP_BOX,0,0,220,130,"");
+       fdui->key = obj = fl_add_input(FL_NORMAL_INPUT,80,10,130,30,idex(_("Key:|#K")));
+         fl_set_input_shortcut(obj,scex(_("Key:|#K")),1);
+         fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+       obj = fl_add_button(FL_RETURN_BUTTON,20,90,90,30,_("OK"));
+         fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+         fl_set_object_callback(obj,bibitem_cb,3);
+       obj = fl_add_button(FL_NORMAL_BUTTON,120,90,90,30,idex(_("Cancel|^[")));
+         fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+         fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+         fl_set_object_callback(obj,bibitem_cb,2);
+       fdui->label = obj = fl_add_input(FL_NORMAL_INPUT,80,50,130,30,idex(_("Label:|#L")));
+         fl_set_input_shortcut(obj,scex(_("Label:|#L")),1);
+         fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+       fl_end_form();
+
+       //fdui->bibitem_form->fdui = fdui;
+
+       return fdui;
+}
+/*---------------------------------------*/
+
+
+InsetCitation::InsetCitation(LString const & key, LString const & note):
+       InsetCommand("cite", key, note)
+{
+
+}
+InsetCitation::~InsetCitation()
+{
+       if(citation_form && citation_form->citation_form
+          && citation_form->citation_form->visible
+          && citation_form->vdata == this)
+               fl_hide_form(citation_form->citation_form);
+}
+
+
+void InsetCitation::Edit(int, int)
+{
+       if(current_view->currentBuffer()->isReadonly())
+               WarnReadonly();
+
+       if (!citation_form) {
+               citation_form = create_form_citation_form();
+               fl_set_form_atclose(citation_form->citation_form, 
+                                   CancelCloseBoxCB, NULL);
+       }
+       citation_form->vdata = this;
+
+       BibitemUpdate(bibcombox);
+       if (!bibcombox->select_text(getContents().c_str()))
+               bibcombox->addline(getContents().c_str());
+           
+       fl_set_input(citation_form->label, getOptions().c_str());
+       if (citation_form->citation_form->visible) {
+               fl_raise_form(citation_form->citation_form);
+       } else {
+               fl_show_form(citation_form->citation_form,FL_PLACE_MOUSE, FL_FULLBORDER,
+                            _("Citation"));
+       }   
+}
+
+
+LString InsetCitation::getScreenLabel() const
+{
+       LString temp('[');
+
+       temp+=contents;
+
+       if (!options.empty()) {
+               temp+=","+options;
+       }
+
+       return temp+']';
+}
+
+
+InsetBibKey::InsetBibKey(LString const & key, LString const & label):
+       InsetCommand("bibitem", key, label)
+{
+       counter = 1;
+       if (key.empty())
+               contents = ' ';
+}
+
+
+InsetBibKey::InsetBibKey(InsetBibKey const *b):
+       InsetCommand("bibitem", b->contents, b->options)
+{
+       counter = b->counter;
+}
+
+InsetBibKey::~InsetBibKey()
+{
+       if(bibitem_form && bibitem_form->bibitem_form
+          && bibitem_form->bibitem_form->visible)
+                               fl_hide_form(bibitem_form->bibitem_form);
+}
+
+void InsetBibKey::setCounter(int c) 
+{ 
+       counter = c; 
+    
+       if (contents.empty())
+               contents += counter;
+}
+
+
+// I'm sorry but this is still necessary because \bibitem is used also
+// as a LyX 2.x command, and lyxlex is not enough smart to understand
+// real LaTeX commands. Yes, that could be fixed, but would be a waste 
+// of time cause LyX3 won't use lyxlex anyway.  (ale)
+void InsetBibKey::Write(FILE *file)
+{
+       LString s;
+       if (!options.empty()) {
+               s += '[';
+               s += options + ']';
+       }
+       s += '{';
+       s += contents + '}';
+       fprintf(file,"\\bibitem %s\n", s.c_str());
+}
+
+
+LString InsetBibKey::getScreenLabel() const
+{
+       if (!options.empty())
+               return options;
+    
+       LString s;
+       return s + counter;
+}
+
+
+/*
+  The value in "Key:" isn't allways set right after a few bibkey insets have
+  been added/removed.  Perhaps the wrong object is deleted/used somewhere upwards?
+  (Joacim 1998-03-04)
+*/
+void InsetBibKey::Edit(int, int)
+{
+       if(current_view->currentBuffer()->isReadonly())
+               WarnReadonly();
+       
+       if (!bibitem_form) {
+               bibitem_form = create_form_bibitem_form();
+               fl_set_form_atclose(bibitem_form->bibitem_form, 
+                                   CancelCloseBoxCB, NULL);
+       }
+       bibitem_form->vdata = this;
+       // InsetBibtex uses the same form, with different labels
+       fl_set_object_label(bibitem_form->key, idex(_("Key:|#K")));
+       fl_set_button_shortcut(bibitem_form->key,scex(_("Key:|#K")),1);
+       fl_set_object_label(bibitem_form->label, idex(_("Label:|#L")));
+       fl_set_button_shortcut(bibitem_form->label,scex(_("Label:|#L")),1);
+       fl_set_input(bibitem_form->key, getContents().c_str());
+       fl_set_input(bibitem_form->label, getOptions().c_str());
+       if (bibitem_form->bibitem_form->visible) {
+               fl_raise_form(bibitem_form->bibitem_form);
+       } else {
+               fl_show_form(bibitem_form->bibitem_form,FL_PLACE_MOUSE,
+                            FL_FULLBORDER,
+                            _("Bibliography item"));
+       }   
+}
+
+
+
+InsetBibtex::InsetBibtex(LString const & dbase, LString const & style,
+                        Buffer *o)
+       :InsetCommand("BibTeX", dbase, style), owner(o)
+{
+}
+
+
+InsetBibtex::~InsetBibtex()
+{
+}
+
+
+LString InsetBibtex::getScreenLabel() const
+{
+       return _("BibTeX Generated References");
+}
+
+
+int InsetBibtex::Latex(FILE *file, signed char /*fragile*/)
+{
+       LString bib;
+       signed char dummy = 0;
+       int result = Latex(bib, dummy);
+       fprintf(file, "%s", bib.c_str());
+       return result;
+}
+
+
+int InsetBibtex::Latex(LString &file, signed char /*fragile*/)
+{
+       // this looks like an horrible hack and it is :) The problem
+       // is that owner is not initialized correctly when the bib
+       // inset is cut and pasted. Such hacks will not be needed
+       // later (JMarc)
+       if (!owner) {
+               owner = current_view->currentBuffer();
+       }
+       // If we generate in a temp dir, we might need to give an
+       // absolute path there. This is a bit complicated since we can
+       // have a comma-separated list of bibliographies
+       LString db_in, adb, db_out;
+       db_in = getContents();
+       db_in.split(adb, ',');
+       while(!adb.empty()) {
+               if (!owner->niceFile &&
+                   IsFileReadable(MakeAbsPath(adb,owner->filepath)+".bib")) 
+                       adb = MakeAbsPath(adb,owner->filepath);
+               db_out += adb;
+               db_out += ',';
+               db_in.split(adb,',');
+       }
+       db_out.strip(',');
+
+       // Idem, but simpler
+       LString style;
+       if (!owner->niceFile 
+           && IsFileReadable(MakeAbsPath(getOptions(), owner->filepath)
+                             + ".bst")) 
+               style = MakeAbsPath(getOptions(), owner->filepath);
+       else
+               style = getOptions();
+
+       file += "\\bibliographystyle{";
+       file += style;
+       file += "}\n";
+       file += "\\bibliography{";
+       file += db_out;
+       file += "}\n";
+       return 2;
+}
+
+// This method returns a comma separated list of Bibtex entries
+LString InsetBibtex::getKeys()
+{
+       // This hack is copied from InsetBibtex::Latex.
+       // Is it still needed? Probably yes.
+       if (!owner) {
+               owner = current_view->currentBuffer();
+       }
+
+       // We need to create absolute path names for bibliographies
+       // First look for bib-file in same directory as document,
+       // then in all directories listed in environment variable 
+       // BIBINPUTS
+       LString bibfiles, linebuf, tmp, keys;
+       bibfiles = getContents();
+       bibfiles.split(tmp, ',');
+       while(!tmp.empty()) {
+               if (IsFileReadable(MakeAbsPath(tmp,owner->filepath)+".bib"))
+                       tmp = MakeAbsPath(tmp,owner->filepath)+".bib";
+               else {
+                       tmp = FileOpenSearch(getEnvPath("BIBINPUTS"),tmp,"bib");
+                       if (tmp.empty())
+                               tmp = FileOpenSearch(getEnvPath("BIBINPUT"),
+                                                    tmp, "bib");
+               }
+               // If we didn't find a matching file name just fail silently
+               if (!tmp.empty()) {
+      
+                       // This is a _very_ simple parser for Bibtex database files.
+                       // All it does is to look for lines starting in @ and not
+                       // being @preamble and @string entries.
+                       // It does NOT do any syntax checking!
+                       FilePtr file(tmp,FilePtr::read);
+                       char c;
+
+                       // On some systems where feof() is a macro,
+                       // the () after file is needed (JMarc)
+                       while (! feof(file())) {
+                               c = fgetc(file);
+
+                               // At end of each line check if line begins with '@'
+                               if ( c == '\n') {
+                                       if ( linebuf.prefixIs("@") ) {
+                                               linebuf.subst('{','(');
+                                               linebuf.split(tmp,'(');
+                                               tmp.lowercase();
+                                               if ( ! tmp.prefixIs("@string") && !tmp.prefixIs("@preamble") ) {
+                                                       linebuf.split(tmp,',');
+                                                       if (!tmp.empty())
+                                                               keys +=tmp.strip()+",";
+                                               }
+                                       }
+                                       linebuf.clean();
+                               } else {
+                                       linebuf += c;
+                               }
+                       }
+               }
+               // Get next file name
+               bibfiles.split(tmp, ',');
+       }
+       return keys;
+}
+
+// BibTeX should have its own dialog. This is provisional.
+void InsetBibtex::Edit(int, int)
+{
+       if (!bibitem_form) {
+               bibitem_form = create_form_bibitem_form();
+               fl_set_form_atclose(bibitem_form->bibitem_form, 
+                                   CancelCloseBoxCB, NULL);
+       }
+
+       bibitem_form->vdata = this;
+       fl_set_object_label(bibitem_form->key, _("Database:"));
+       fl_set_object_label(bibitem_form->label, _("Style:  "));
+       fl_set_input(bibitem_form->key, getContents().c_str());
+       fl_set_input(bibitem_form->label, getOptions().c_str());
+       if (bibitem_form->bibitem_form->visible) {
+               fl_raise_form(bibitem_form->bibitem_form);
+       } else {
+               fl_show_form(bibitem_form->bibitem_form,FL_PLACE_MOUSE, FL_FULLBORDER,
+                            _("BibTeX"));
+       }   
+}
+
+
+bool InsetBibtex::addDatabase(LString const &db)
+{
+       if (!contents.contains(db.c_str())) {
+               if (!contents.empty()) 
+                       contents += ',';
+               contents += db;
+               return true;
+       }
+       return false;
+}
+
+
+bool InsetBibtex::delDatabase(LString const &db)
+{
+       if (contents.contains(db.c_str())) {
+               LString bd = db;
+               int n = contents.tokenPos(',', bd);
+               if (n > 0) {
+                       LString tmp(',');
+                       tmp += bd;
+                       contents.subst(tmp.c_str(), ",");
+               } else if (n==0)
+                       contents.split(bd, ',');
+               else 
+                       return false;
+       }
+       return true;
+}
+
+
+// This function should be in LyXView when multiframe works ale970302
+void BibitemUpdate(Combox* combox)
+{
+       combox->clear();
+    
+       if (!current_view->available())
+               return;
+
+       LString tmp, bibkeys = current_view->currentBuffer()->getBibkeyList(',');
+       bibkeys.split(tmp,',');
+       while (!tmp.empty()) {
+         combox->addto(tmp.c_str());
+         bibkeys.split(tmp,',');
+       }
+}
+
+
+
+// ale070405 This function maybe shouldn't be here. We'll fix this at 0.13.
+int bibitemMaxWidth(const class LyXFont &font)
+{
+       int w = 0;
+       // Does look like a hack? It is! (but will change at 0.13)
+       LyXParagraph *par = current_view->currentBuffer()->paragraph;
+    
+       while (par) {
+               if (par->bibkey) {
+                       int wx = par->bibkey->Width(font);
+                       if (wx>w) w = wx;
+               }
+               par = par->next;
+       }
+       return w;
+}
+
+
+// ale070405 
+LString bibitemWidthest()
+{
+       int w = 0;
+       // Does look like a hack? It is! (but will change at 0.13)
+       LyXParagraph *par = current_view->currentBuffer()->paragraph;
+       InsetBibKey *bkey=0;
+       LyXFont font;
+      
+       while (par) {
+               if (par->bibkey) {
+                       int wx = par->bibkey->Width(font);
+                       if (wx>w) {
+                               w = wx;
+                               bkey = par->bibkey;
+                       }
+               }
+               par = par->next;
+       }
+    
+       if (bkey && !bkey->getScreenLabel().empty())
+               return bkey->getScreenLabel();
+    
+       return "99";
+}
diff --git a/src/insets/insetbib.h b/src/insets/insetbib.h
new file mode 100644 (file)
index 0000000..0e4d1be
--- /dev/null
@@ -0,0 +1,133 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ * 
+ *======================================================*/
+
+#ifndef _INSET_BIB_H
+#define _INSET_BIB_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+
+// Created by Alejandro 970222
+
+
+/** Used to insert citations  
+ */
+class InsetCitation: public InsetCommand {
+public:
+       ///
+       InsetCitation(): InsetCommand("cite") { }
+       ///
+       InsetCitation(LString const & key, LString const & note=LString());
+        ///
+       ~InsetCitation();
+        ///
+        Inset* Clone() { return new InsetCitation(contents, options); }
+       ///
+       LString getScreenLabel()const;
+        ///
+       void Edit(int, int);
+        ///
+       unsigned char Editable() const {
+               return 1;
+       }
+};
+
+
+/** Used to insert bibitem's information (key and label)
+  
+  Must be automatically inserted as the first object in a
+  bibliography paragraph. 
+  */
+class InsetBibKey: public InsetCommand {
+public:
+       ///
+       InsetBibKey(): InsetCommand("bibitem") { counter = 1; }
+       ///
+       InsetBibKey(LString const & key, LString const & label=LString());
+       ///
+       InsetBibKey(InsetBibKey const*);
+       ///
+       ~InsetBibKey();
+       ///
+        Inset* Clone() { return new InsetBibKey(this); }
+       /// Currently \bibitem is used as a LyX2.x command, so we need this method.
+        void Write(FILE *);
+       ///
+       virtual LString getScreenLabel() const;
+        ///
+       void Edit(int, int);
+       ///
+       unsigned char Editable() const {
+               return 1;
+       }
+       /// A user can't neither insert nor delete this inset
+       bool Deletable() const {
+               return false;
+       }
+        ///
+        void setCounter(int);
+        ///
+        int  getCounter() const { return counter; }
+
+ private:
+       ///
+        int counter;
+};
+
+
+/** Used to insert BibTeX's information 
+  */
+class InsetBibtex: public InsetCommand {
+public:
+       /// 
+       InsetBibtex(): InsetCommand("BibTeX") { owner = NULL; }
+       ///
+       InsetBibtex(LString const & dbase, LString const & style,
+                   Buffer *);
+        ///
+        ~InsetBibtex();
+        ///
+       Inset* Clone() { return new InsetBibtex(contents, options, NULL); }
+       ///  
+       Inset::Code LyxCode() const
+       {
+               return Inset::BIBTEX_CODE;
+       }
+       ///
+       LString getScreenLabel() const;
+       ///
+       void Edit(int, int);
+       /// 
+       int Latex(FILE *, signed char);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       LString getKeys();
+       ///
+       unsigned char Editable() const {
+               return 1;
+       }
+        ///
+        bool addDatabase(LString const&);
+        ///
+        bool delDatabase(LString const&);
+       ///
+       bool Display() const { return true; }    
+private:
+       ///
+       Buffer *owner;
+};
+
+
+#endif
diff --git a/src/insets/insetcommand.C b/src/insets/insetcommand.C
new file mode 100644 (file)
index 0000000..00a25a8
--- /dev/null
@@ -0,0 +1,230 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "insetcommand.h"
+#include "lyxdraw.h"
+#include "error.h"
+
+//     $Id: insetcommand.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $      
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: insetcommand.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+
+InsetCommand::InsetCommand()
+{
+}
+
+
+InsetCommand::InsetCommand(LString const & cmd, LString const & arg, 
+                          LString const & opt)
+       : command(cmd), options(opt), contents(arg)
+{
+}
+
+
+InsetCommand::~InsetCommand()
+{
+}
+
+
+int InsetCommand::Ascent(LyXFont const&font) const
+{
+       LyXFont f = font;
+       f.decSize();
+       return f.maxAscent() + 3;
+}
+
+
+int InsetCommand::Descent(LyXFont const&font) const
+{
+       LyXFont f = font;
+       f.decSize();
+       return f.maxDescent() + 3;
+}
+
+
+int InsetCommand::Width(LyXFont const&font) const
+{
+       LyXFont f = font;
+       f.decSize();
+       LString s = getScreenLabel();
+       return 10 + f.stringWidth(s);
+}
+
+
+void InsetCommand::Draw(LyXFont font, LyXScreen &scr,
+                     int baseline, float &x)
+{
+       // Draw it as a box with the LaTeX text
+       x += 3;
+
+       //scr.drawFilledRectangle(int(x), baseline - Ascent(font) + 1,
+       //           Width(font) - 2, Ascent(font) + Descent(font)-2,
+       //           FL_GRAY80);
+       scr.fillRectangle(gc_lighted,
+                         int(x), baseline - Ascent(font) + 1,
+                         Width(font) - 6,
+                         Ascent(font) + Descent(font)-2);
+        // Tell whether this slows down the drawing  (ale)
+       // lets draw editable and non-editable insets differently
+        if (Editable()) {
+               int y = baseline - Ascent(font)+1, w = Width(font)-6,
+                       h = (Ascent(font)+Descent(font)-2);
+               scr.drawFrame(FL_UP_FRAME, int(x), y, w, h, FL_BLACK, -1);
+       } else {
+               //scr.drawRectangle(int(x), baseline - Ascent(font)+1,
+               //           Width(font)-2, Ascent(font)+Descent(font)-2,
+               //           FL_BLACK);
+               scr.drawRectangle(gc_note_frame,
+                                 int(x), baseline - Ascent(font)+1,
+                                 Width(font)-6,
+                                 Ascent(font)+Descent(font)-2); 
+       }
+        LString s = getScreenLabel();
+               LyXFont f = font;
+       f.decSize();
+       f.setColor(LyXFont::NONE);
+       f.setLatex(LyXFont::OFF);
+       scr.drawString(f, s, baseline, int(x+2));
+
+       x +=  Width(font) - 3;
+}
+
+
+// In lyxf3 this will be just LaTeX
+void InsetCommand::Write(FILE *file)
+{
+       fprintf(file, "LatexCommand %s\n", getCommand().c_str());
+}
+
+
+void InsetCommand::scanCommand(LString const &cmd)
+{
+       LString tcommand, toptions, tcontents;
+
+       if (cmd.empty()) return;
+
+       enum { WS, Command, Option, Content } state = WS;
+       
+       // Used to handle things like \command[foo[bar]]{foo{bar}}
+       int nestdepth = 0;
+
+       for (int i=0; i<cmd.length(); i++) {
+               char c = cmd[i];
+               if ((state==Command && c == ' ') ||
+                   (state==Command && c == '[') ||
+                   (state==Command && c == '{')) {
+                       state = WS;
+               }
+               if ((state==Option  && c == ']') ||
+                   (state==Content && c == '}')) {
+                       if (nestdepth==0) {
+                               state = WS;
+                       } else {
+                               nestdepth--;
+                       }
+               }
+               if ((state==Option  && c == '[') ||
+                   (state==Content && c == '{')) {
+                       nestdepth++;
+               }
+               switch (state) {
+               case Command:   tcommand += c; break;
+               case Option:    toptions += c; break;
+               case Content:   tcontents += c; break;
+               case WS:
+                       if (c == '\\') {
+                               state = Command;
+                       } else if (c == '[') {
+                               state = Option;
+                               nestdepth = 0; // Just to be sure
+                       } else if (c == '{') {
+                               state = Content;
+                               nestdepth = 0; // Just to be sure
+                       }
+                       break;
+               }
+       }
+
+       // Don't mess with this.
+       if (!tcommand.empty()) command = tcommand;
+       if (!toptions.empty()) options = toptions;
+       if (!tcontents.empty()) setContents(tcontents); 
+                       // setContents is overloaded in InsetInclude
+
+       if (lyxerr.debugging(Error::LEX_PARSER))
+            lyxerr.print("Command <" + cmd
+                          + "> == <" + getCommand()
+                          + "> == <" + getCmdName()
+                          + '|' + getContents()
+                          + '|' + getOptions() +'>');
+}
+
+
+// This function will not be necessary when lyx3
+void InsetCommand::Read(LyXLex &lex)
+{    
+       if (lex.EatLine()) {
+               LString t = lex.GetString();
+               scanCommand(t);
+       } else
+               lex.printError("InsetCommand: Parse error: `$$Token'");
+}
+
+
+int InsetCommand::Latex(FILE *file, signed char /*fragile*/)
+{
+       fprintf(file, "%s", getCommand().c_str());
+       return 0;
+}
+
+
+int InsetCommand::Latex(LString &file, signed char /*fragile*/)
+{
+       file += getCommand();
+       return 0;
+}
+
+
+int InsetCommand::Linuxdoc(LString &/*file*/)
+{
+       return 0;
+}
+
+
+int InsetCommand::DocBook(LString &/*file*/)
+{
+       return 0;
+}
+
+
+Inset* InsetCommand::Clone()
+{
+       InsetCommand *result = new InsetCommand(command, contents, options);
+       return result;
+}
+
+
+LString InsetCommand::getCommand() const
+{      
+       LString s;
+       if (!command.empty()) s += "\\"+command;
+       if (!options.empty()) s += "["+options+']';
+       s += "{"+contents+'}';
+       return s;
+}
diff --git a/src/insets/insetcommand.h b/src/insets/insetcommand.h
new file mode 100644 (file)
index 0000000..e335afc
--- /dev/null
@@ -0,0 +1,113 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1996-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#ifndef _INSET_LATEXCOMMAND_H
+#define _INSET_LATEXCOMMAND_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "lyxinset.h"
+#include "LString.h"
+
+// Created by Alejandro 970222
+/** Used to insert a LaTeX command automatically
+ *
+ * Similar to InsetLaTeX but having control of the basic structure of a
+ *   LaTeX command: \name[options]{contents}. 
+ */
+class InsetCommand: public Inset {
+public:
+       ///
+       InsetCommand();
+       ///
+       InsetCommand(LString const & name, LString const & arg = LString(), 
+                    LString const & opt = LString());
+       ///
+       ~InsetCommand();
+       ///
+       int Ascent(LyXFont const &font) const;
+       ///
+       int Descent(LyXFont const &font) const;
+       ///
+       int Width(LyXFont const &font) const;
+       ///
+       void Draw(LyXFont, LyXScreen &scr, int baseline, float &x);
+       ///
+       void Write(FILE *file);
+       /// Parse the command.
+       void scanCommand(LString const &cmd);
+       /// Will not be used when lyxf3
+       void Read(LyXLex &lex);
+       /// 
+       virtual int Latex(FILE *file, signed char fragile);
+       ///
+       virtual int Latex(LString &file, signed char fragile);
+       ///
+       virtual int Linuxdoc(LString &file);
+       ///
+       virtual int DocBook(LString &file);
+       ///
+       Inset* Clone();
+       ///  
+       Inset::Code LyxCode() const
+       {
+               return Inset::NO_CODE;
+       }
+       
+       /** Get the label that appears at screen.
+         
+         I thought it was enough to eliminate the argument to avoid
+         confusion with lyxinset::getLabel(int), but I've seen that
+         it wasn't. I hope you never confuse again both methods.  (ale)
+        */
+       virtual LString getScreenLabel() const
+       {
+               return getCommand();
+       }
+       
+       /// Build the complete LaTeX command
+       LString getCommand() const;
+       ///
+       LString const &getCmdName() const {
+               return command;
+       }
+       ///
+       LString const &getOptions() const {
+               return options;
+       }
+       ///
+       LString const &getContents() const {
+               return contents;
+       }
+       ///
+       void setCmdName(LString const & n) {
+               command = n;
+       }
+       ///
+       void setOptions(LString const & o) {
+               options = o;
+       }
+       ///
+       virtual void setContents(LString const & c) {
+               contents = c;
+       }
+protected:
+       ///    
+       LString command;
+       ///    
+       LString options;
+       ///    
+       LString contents;
+};
+
+#endif
diff --git a/src/insets/inseterror.C b/src/insets/inseterror.C
new file mode 100644 (file)
index 0000000..bac1127
--- /dev/null
@@ -0,0 +1,189 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+
+#include "definitions.h"
+#include "inseterror.h"
+#include "lyxdraw.h"
+#include "gettext.h"
+#include "lyx_gui_misc.h" // CancelCloseBoxCB
+
+//     $Id: inseterror.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $        
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: inseterror.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $";
+#endif /* lint */
+
+/* Error, used for the LaTeX-Error Messages */
+
+InsetError::InsetError()
+{
+       form = NULL;
+}
+
+InsetError::InsetError(LString const & string)
+       : contents(string)
+{
+       form = NULL;
+}
+
+
+InsetError::~InsetError()
+{
+       if (form) {
+               fl_hide_form(form);
+               fl_free_form(form);
+               form = NULL;
+       }
+}
+
+
+int InsetError::Ascent(LyXFont const &font) const
+{
+       LyXFont efont;
+       efont.setSize(font.size()).decSize();
+       return efont.maxAscent()+1;
+}
+
+
+int InsetError::Descent(LyXFont const &font) const
+{
+       LyXFont efont;
+       efont.setSize(font.size()).decSize();
+       return efont.maxDescent()+1;
+}
+
+
+int InsetError::Width(LyXFont const &font) const
+{
+       LyXFont efont;
+       efont.setSize(font.size()).decSize();
+       return 6 + efont.textWidth(_("Error"), strlen(_("Error")));
+}
+
+
+void InsetError::Draw(LyXFont font, LyXScreen &scr,
+                     int baseline, float &x)
+{
+       LyXFont efont;
+       efont.setSize(font.size()).decSize();
+       efont.setLatex(LyXFont::ON);
+   
+       // Draw as "Error" in a framed box
+       x += 1;
+       //scr.drawFilledRectangle(int(x), baseline - Ascent(font)+1,
+       //                      Width(font)-2,Ascent(font)+ Descent(font)-2,
+       //                      FL_GRAY80);
+       scr.fillRectangle(gc_lighted,
+                         int(x), baseline - Ascent(font)+1,
+                         Width(font)-2,Ascent(font)+ Descent(font)-2);
+       //scr.drawRectangle(int(x), baseline-Ascent(font)+1,
+       //                Width(font)-2, Ascent(font)+Descent(font)-2,
+       //                FL_RED);
+       scr.drawRectangle(gc_foot,
+                         int(x), baseline-Ascent(font)+1,
+                         Width(font)-2, Ascent(font)+Descent(font)-2); 
+       scr.drawString(efont, _("Error"), baseline, int(x+2));
+
+       x +=  Width(font) - 1;
+}
+
+
+void InsetError::Write(FILE *)
+{
+}
+
+void InsetError::Read(LyXLex &)
+{
+}
+
+
+int InsetError::Latex(FILE *, signed char /*fragile*/)
+{
+       return 0;
+}
+
+
+int InsetError::Latex(LString &, signed char /*fragile*/)
+{
+       return 0;
+}
+
+
+int InsetError::Linuxdoc(LString &)
+{
+       return 0;
+}
+
+
+int InsetError::DocBook(LString &)
+{
+       return 0;
+}
+
+
+bool InsetError::AutoDelete() const
+{
+       return true;
+}
+
+
+unsigned char InsetError::Editable() const
+{
+       return 1;
+}
+
+
+void InsetError::CloseErrorCB(FL_OBJECT *, long data)
+{
+       InsetError *inset = (InsetError*) data;
+       if (inset->form) {
+               fl_hide_form(inset->form);
+               fl_free_form(inset->form);
+               inset->form = NULL;
+       }
+}
+
+void InsetError::Edit(int, int)
+{
+       if (!form) {
+               FL_OBJECT *obj;
+               form = fl_bgn_form(FL_UP_BOX,400,240);
+               strobj = fl_add_box(FL_FRAME_BOX,10,10,380,180,"");
+               fl_set_object_color(strobj,FL_MCOL,FL_MCOL);
+               fl_set_object_gravity(strobj, FL_NorthWest, FL_SouthEast);
+               obj = fl_add_button(FL_RETURN_BUTTON,140,200,120,30,_("Close"));
+               fl_set_object_callback(obj, CloseErrorCB, (long)this);
+               fl_set_object_gravity(obj, FL_South, FL_South);
+               fl_set_object_resize(obj, FL_RESIZE_NONE);
+               fl_end_form();
+               fl_set_form_atclose(form, CancelCloseBoxCB, NULL);
+       }
+       fl_set_object_label(strobj, contents.c_str());
+       if (form->visible) {
+               fl_raise_form(form);
+       } else {
+               fl_show_form(form,FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER, 
+                            _("LaTeX Error"));
+       }
+}
+
+
+Inset* InsetError::Clone()
+{
+       InsetError *result = new InsetError(contents);
+       return result;
+}
diff --git a/src/insets/inseterror.h b/src/insets/inseterror.h
new file mode 100644 (file)
index 0000000..caa539d
--- /dev/null
@@ -0,0 +1,80 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+
+#ifndef _INSET_ERROR_H
+#define _INSET_ERROR_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+#include "lyxinset.h"
+#include "LString.h"
+#include "gettext.h"
+
+/** Used for error messages from LaTeX runs.
+  
+  The edit-operation opens a 
+  dialog with the text of the error-message. The inset is displayed as 
+  "Error" in a box, and automatically deleted. */
+class InsetError: public Inset {
+public:
+       ///
+       InsetError(LString const & string);
+       ///
+       InsetError();
+       ///
+       ~InsetError();
+       ///
+       int Ascent(LyXFont const &font) const;
+       ///
+       int Descent(LyXFont const &font) const;
+       ///
+       int Width(LyXFont const &font) const;
+       ///
+       void Draw(LyXFont font, LyXScreen &scr, int baseline, float &x);
+       ///
+       void Write(FILE *file);
+       ///
+       void Read(LyXLex &lex);
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+       ///
+       bool AutoDelete() const;
+       /// what appears in the minibuffer when opening
+       char const* EditMessage() {return _("Opened error");}
+       ///
+       void Edit(int, int);
+       ///
+       unsigned char Editable() const;
+       ///
+       Inset* Clone();
+       ///
+       Inset::Code LyxCode() const { return Inset::NO_CODE; }
+       /// We don't want "begin" and "end inset" in lyx-file
+       bool DirectWrite() const { return true; };
+private:
+       ///
+       LString contents;
+       ///
+       FL_FORM *form;
+       ///
+       FL_OBJECT *strobj;
+       ///
+       static void CloseErrorCB(FL_OBJECT *, long data);
+};
+#endif
diff --git a/src/insets/insetinclude.C b/src/insets/insetinclude.C
new file mode 100644 (file)
index 0000000..51a0da7
--- /dev/null
@@ -0,0 +1,464 @@
+#include <config.h>
+
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include FORMS_H_LOCATION 
+#include "filedlg.h" 
+#include "insetinclude.h"
+#include "buffer.h"
+#include "bufferlist.h"
+#include "error.h"
+#include "filetools.h"
+#include "lyxrc.h"
+#include "LyXView.h"
+#include "LaTeXFeatures.h"
+#include "lyx_gui_misc.h" // CancelCloseBoxCB
+#include "gettext.h"
+#include "include_form.h"
+#include "FileInfo.h"
+
+extern BufferView *current_view;
+
+extern LyXRC *lyxrc;
+extern BufferList bufferlist;
+extern void UpdateInset(Inset* inset, bool mark_dirty = true);
+
+
+FD_include *create_form_include(void)
+{
+  FL_OBJECT *obj;
+  FD_include *fdui = (FD_include *) fl_calloc(1, sizeof(FD_include));
+
+  fdui->include = fl_bgn_form(FL_NO_BOX, 340, 210);
+  obj = fl_add_box(FL_UP_BOX,0,0,340,210,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,70,160,90,"");
+  fdui->browsebt = obj = fl_add_button(FL_NORMAL_BUTTON,230,30,100,30,idex(_("Browse|#B")));
+    fl_set_button_shortcut(obj,scex(_("Browse|#B")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,include_cb,0);
+  fdui->flag1 = obj = fl_add_checkbutton(FL_PUSH_BUTTON,180,70,150,30,idex(_("Don't typeset|#D")));
+    fl_set_button_shortcut(obj,scex(_("Don't typeset|#D")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  obj = fl_add_button(FL_RETURN_BUTTON,120,170,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,include_cb,1);
+  obj = fl_add_button(FL_NORMAL_BUTTON,230,170,100,30,idex(_("Cancel|^[")));
+    fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,include_cb,2);
+  obj = fl_add_button(FL_NORMAL_BUTTON,230,130,100,30,idex(_("Load|#L")));
+    fl_set_button_shortcut(obj,scex(_("Load|#L")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,include_cb,5);
+  fdui->input = obj = fl_add_input(FL_NORMAL_INPUT,10,30,210,30,idex(_("File name:|#F")));
+    fl_set_input_shortcut(obj,scex(_("File name:|#F")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+  fdui->flag41 = obj = fl_add_checkbutton(FL_PUSH_BUTTON,180,100,150,30,idex(_("Visible space|#s")));
+    fl_set_button_shortcut(obj,scex(_("Visible space|#s")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+
+  fdui->include_grp = fl_bgn_group();
+  fdui->flag4 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,130,160,30,idex(_("Verbatim|#V")));
+    fl_set_button_shortcut(obj,scex(_("Verbatim|#V")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,include_cb,10);
+  fdui->flag2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,100,160,30,idex(_("Use input|#i")));
+    fl_set_button_shortcut(obj,scex(_("Use input|#i")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,include_cb,11);
+  fdui->flag3 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,70,160,30,idex(_("Use include|#U")));
+    fl_set_button_shortcut(obj,scex(_("Use include|#U")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,include_cb,11);
+  fl_end_group();
+
+  fl_end_form();
+
+  //fdui->include->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+
+FD_include *form = 0;
+
+void include_cb(FL_OBJECT *, long arg)
+{
+    
+       InsetInclude *inset = (InsetInclude*)form->vdata;
+       switch (arg) {
+       case 0:
+       {
+               // Should browsing too be disabled in RO-mode?
+               LyXFileDlg fileDlg;
+               LString mpath = OnlyPath(inset->getMasterFilename());
+                LString ext;
+    
+               if (fl_get_button(form->flag2)) // Use Input Button
+                       ext = "*.tex";
+               else if (fl_get_button(form->flag4)) // Verbatim all files
+                       ext = "*";
+                else
+                        ext = "*.lyx";
+               // launches dialog
+               fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+    
+               // Use by default the master's path
+               LString filename = fileDlg.Select(_("Select Child Document"),
+                                                 mpath, ext, 
+                                                 inset->getContents());
+               XFlush(fl_get_display());
+               // check selected filename
+               if (!filename.empty()) {
+                       LString filename2 = MakeRelPath(filename,
+                                                       mpath);
+                       if (filename2.prefixIs(".."))
+                               fl_set_input(form->input,
+                                            filename.c_str());
+                       else
+                               fl_set_input(form->input,
+                                            filename2.c_str());
+               }
+               break;
+       }
+
+       case 1:
+               if(!current_view->currentBuffer()->isReadonly()) {
+                       inset->setContents(fl_get_input(form->input));
+                       // don't typeset
+                       inset->setNoLoad(fl_get_button(form->flag1));
+                       if (fl_get_button(form->flag2))
+                               inset->setInput();
+                       else if (fl_get_button(form->flag3))
+                               inset->setInclude();
+                       else if (fl_get_button(form->flag4)) {
+                               inset->setVerb();
+                               inset->setVisibleSpace(fl_get_button(form->flag41));
+                       }
+                       
+                       fl_hide_form(form->include);
+                       UpdateInset(inset);
+                       break;
+               } // fall through
+               
+       case 2:
+               fl_hide_form(form->include);
+               break;
+       case 5:
+               if(!current_view->currentBuffer()->isReadonly()) {
+                       inset->setContents(fl_get_input(form->input));
+                       inset->setNoLoad(fl_get_button(form->flag1));
+                       if (fl_get_button(form->flag2))
+                               inset->setInput();
+                       else if (fl_get_button(form->flag3))
+                               inset->setInclude();
+                       else if (fl_get_button(form->flag4)) {
+                               inset->setVerb();
+                               inset->setVisibleSpace(fl_get_button(form->flag41));
+                       }
+                       
+                       fl_hide_form(form->include);
+                       UpdateInset(inset);
+                       current_view->getOwner()->getLyXFunc()->Dispatch(LFUN_CHILDOPEN, inset->getContents().c_str());
+                }
+                break;
+               
+        case 10:
+                fl_activate_object(form->flag41);
+                fl_set_object_lcol(form->flag41, FL_BLACK); 
+                break;
+        case 11:
+                fl_deactivate_object(form->flag41);
+                fl_set_object_lcol(form->flag41, FL_INACTIVE);
+               fl_set_button(form->flag41, 0);
+                break;
+       }
+}
+
+
+InsetInclude::InsetInclude(LString const & fname, Buffer *bf)
+       : InsetCommand("include") 
+{
+       master = bf;
+       setContents(fname);
+       flag = InsetInclude::INCLUDE;
+       noload = false;
+}
+
+
+InsetInclude::~InsetInclude()
+{
+       if (form && form->vdata == this) {
+               // this inset is in the popup so hide the popup 
+               // and remove the reference to this inset. ARRae
+               if (form->include) {
+                       if (form->include->visible) {
+                               fl_hide_form(form->include);
+                       }
+                       fl_free_form(form->include);
+               }
+               fl_free(form);
+               form = 0;
+       }
+}
+
+Inset * InsetInclude::Clone() 
+{ 
+       InsetInclude * ii = new InsetInclude (contents, master); 
+       ii->setNoLoad(isNoLoad());
+       // By default, the newly created inset is of `include' type,
+       // so we do not test this case.
+       if (isInput())
+               ii->setInput();
+       else if (isVerb()) {
+               ii->setVerb();
+               ii->setVisibleSpace(isVerbVisibleSpace());
+       }
+       return (Inset*)ii;
+}
+
+void InsetInclude::Edit(int, int)
+{
+       if(current_view->currentBuffer()->isReadonly())
+               WarnReadonly();
+
+       if (!form) {
+                form = create_form_include();
+               fl_set_form_atclose(form->include, IgnoreCloseBoxCB, NULL);
+       }
+        form->vdata = this;
+    
+        fl_set_input(form->input, contents.c_str());
+       fl_set_button(form->flag1, int(isNoLoad()));
+       fl_set_button(form->flag2, int(isInput()));
+       fl_set_button(form->flag3, int(isInclude()));
+       fl_set_button(form->flag4, int(isVerb()));
+        if (isVerb()) 
+            fl_set_button(form->flag41, int(isVerbVisibleSpace()));
+        else {
+           fl_set_button(form->flag41, 0);
+            fl_deactivate_object(form->flag41);
+           fl_set_object_lcol(form->flag41, FL_INACTIVE);
+       }
+       
+        if (form->include->visible) {
+               fl_raise_form(form->include);
+       } else {
+               fl_show_form(form->include,FL_PLACE_MOUSE, FL_FULLBORDER,
+                            _("Include"));
+       }
+}
+
+
+void InsetInclude::Write(FILE *file)
+{
+       fprintf(file, "Include %s\n", getCommand().c_str());
+}
+
+
+void InsetInclude::Read(LyXLex &lex)
+{
+       InsetCommand::Read(lex);
+    
+       if (getCmdName()=="include")
+               setInclude();
+       else if (getCmdName() == "input")
+               setInput();
+       else if (getCmdName().contains("verbatim")) {
+               setVerb();
+               if (getCmdName() == "verbatiminput*")
+                       setVisibleSpace(true);
+       }
+}
+
+
+LString InsetInclude::getScreenLabel() const
+{
+       LString temp;
+       if (isInput())
+               temp += _("Input");
+       else if (isVerb()) {
+               temp += _("Verbatim Input");
+               if (isVerbVisibleSpace()) temp += '*';
+       } else temp += _("Include");
+       temp += ": ";
+       
+       if (contents.empty()) {
+               temp+="???";
+       } else {
+               temp+=contents;
+       }
+       return temp;
+}
+
+
+bool InsetInclude::loadIfNeeded() const
+{
+       if (isNoLoad() || isVerb()) return false;
+       if (!IsLyXFilename(getFileName())) return false;
+       
+       if (bufferlist.exists(getFileName())) return true;
+       
+       // the readonly flag can/will be wrong, not anymore I think.
+       FileInfo finfo(getFileName());
+       bool ro = !finfo.writable();
+       return ( bufferlist.readFile(getFileName(), ro) != NULL );
+}
+
+
+int InsetInclude::Latex(FILE *file, signed char /*fragile*/)
+{
+       LString include_file;
+       signed char dummy = 0;
+       Latex(include_file, dummy);
+       fprintf(file, "%s", include_file.c_str());
+       return 0;
+}
+
+
+int InsetInclude::Latex(LString &file, signed char /*fragile*/)
+{
+       LString writefile, incfile;
+
+       // Do nothing if no file name has been specified
+       if (contents.empty())
+               return 0;
+    
+       // Use += to force a copy of contents (JMarc)
+       incfile += contents;
+
+       if (loadIfNeeded()) {
+               Buffer *tmp = bufferlist.getBuffer(getFileName());
+
+               if (tmp->params.textclass != master->params.textclass) {
+                       lyxerr.print("ERROR: Cannot handle include file `"
+                                    + MakeDisplayPath(getFileName())
+                                    + "' which has textclass `"
+                                    + lyxstyle.NameOfClass(tmp->params.textclass)
+                                    + "' instead of `"
+                                    + lyxstyle.NameOfClass(master->params.textclass)
+                                    + "'.");
+                       return 0;
+               }
+               
+               // write it to a file (so far the complete file)
+               writefile = ChangeExtension(getFileName(), ".tex", false);
+               if (!master->tmppath.empty()
+                   && !master->niceFile) {
+                       incfile.subst('/','@');
+                       #ifdef __EMX__
+                       incfile.subst(':', '$');
+                       #endif
+                       writefile = AddName(master->tmppath, incfile);
+               } else
+                       writefile = getFileName();
+               writefile = ChangeExtension(writefile,".tex",false);
+               lyxerr.debug("incfile:" + incfile, Error::LATEX);
+               lyxerr.debug("writefile:" + writefile, Error::LATEX);
+               
+               tmp->markDepClean(master->tmppath);
+               
+               tmp->makeLaTeXFile(writefile,
+                                  OnlyPath(getMasterFilename()), 
+                                  master->niceFile, true);
+       } 
+
+       if (isVerb()) {
+               file += '\\';
+               file += command + '{';
+               file += incfile + '}';
+       } 
+       else if (isInput()) {
+               // \input wants file with extension (default is .tex)
+               if (!IsLyXFilename(getFileName())) {
+                       file += '\\';
+                       file += command + '{';
+                       file += incfile + '}';
+               } else {
+                       file += '\\';
+                       file += command + '{';
+                       file += ChangeExtension(incfile, ".tex", false)
+                               + '}';
+               }
+       } else {
+               // \include don't want extension and demands that the
+               // file really have .tex
+               file += '\\';
+               file += command + '{';
+               file += ChangeExtension(incfile, LString(), false)
+                       + '}';
+       }
+
+       return 0;
+}
+
+
+void InsetInclude::Validate(LaTeXFeatures& features) const
+{
+       if (isVerb())
+               features.verbatim = true;
+
+       // Here we must do the fun stuff...
+       // Load the file in the include if it needs
+       // to be loaded:
+       if (loadIfNeeded()) {
+               // a file got loaded
+               Buffer *tmp = bufferlist.getBuffer(getFileName());
+               tmp->validate(features);
+       }
+}
+
+
+LString InsetInclude::getLabel(int) const
+{
+    LString label;
+    LString parentname;
+       
+       
+    if (loadIfNeeded()) {
+       Buffer *tmp = bufferlist.getBuffer(getFileName());
+       tmp->setParentName(""); 
+       label =  tmp->getReferenceList('\n');
+       tmp->setParentName(getMasterFilename());
+    }
+
+    return label;
+}
+
+
+int InsetInclude::GetNumberOfLabels() const {
+    LString label;
+    int nl;
+
+    if (loadIfNeeded()) {
+       Buffer *tmp = bufferlist.getBuffer(getFileName());
+       tmp->setParentName("");    
+       label = tmp->getReferenceList('\n');
+       tmp->setParentName(getMasterFilename());
+    }
+       nl = (label.empty())? 0: 1;
+       
+    return nl;
+}
+
+
+LString InsetInclude::getKeys() const
+{
+       LString list;
+       
+       if (loadIfNeeded()) {
+               Buffer *tmp = bufferlist.getBuffer(getFileName());
+               tmp->setParentName(""); 
+               list =  tmp->getBibkeyList(',');
+               tmp->setParentName(getMasterFilename());
+       }
+       
+       return list;
+}
diff --git a/src/insets/insetinclude.h b/src/insets/insetinclude.h
new file mode 100644 (file)
index 0000000..c632dea
--- /dev/null
@@ -0,0 +1,190 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1997 LyX Team (this file was created this year)
+ * 
+ *======================================================*/
+
+#ifndef _INSET_INCLUDE_H
+#define _INSET_INCLUDE_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+#include "buffer.h"
+#include "filetools.h"
+
+struct LaTeXFeatures;
+
+// Created by AAS 970521
+
+/**  Used to include files
+ */
+class InsetInclude: public InsetCommand {
+public:
+       ///
+       InsetInclude(): InsetCommand("include")
+       {
+               flag = InsetInclude::INCLUDE;
+       }
+       ///
+       InsetInclude(LString const &,  Buffer*);
+       ///
+       ~InsetInclude();
+        ///
+        Inset* Clone();
+       ///
+       Inset::Code LyxCode() const { return Inset::INCLUDE_CODE; }
+       /// This is 1 if the childs have labels, 0 otherwise
+       int GetNumberOfLabels() const;
+       /// This returns the list of labels on the child buffer
+       LString getLabel(int) const;
+       /// This returns the list of bibkeys on the child buffer
+       LString getKeys() const;
+       ///
+       void Edit(int, int);
+       ///
+       unsigned char Editable() const
+       {
+               return 1;
+       }
+        /// With lyx3 we won't overload these 3 methods
+        void Write(FILE *);
+        ///
+       void Read(LyXLex &);
+       /// 
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       
+       ///
+       void Validate(LaTeXFeatures &) const;
+       
+        /// Input inserts anything inside a paragraph, Display can give some visual feedback 
+       bool Display() const { return !(isInput()); }
+       ///
+       LString getScreenLabel() const;
+       ///
+       void setContents(LString const & c) {
+               InsetCommand::setContents(c);
+               filename = MakeAbsPath(contents, 
+                                      OnlyPath(getMasterFilename())); 
+       }
+        ///
+        void setFilename(LString const & n) { setContents(n); }
+        ///
+        LString getMasterFilename() const { return master->getFileName(); }
+        ///
+        LString getFileName() const { 
+               return filename;
+       }
+        ///  In "input" mode uses \input instead of \include.
+       bool isInput() const { return (bool)(flag == InsetInclude::INPUT); }
+        ///  If this is true, the child file shouldn't be loaded by lyx
+       bool isNoLoad() const { return (bool)(noload); }
+
+        /**  A verbatim file shouldn't be loaded by LyX
+        *  No need to generate LaTeX code of a verbatim file
+        */ 
+       bool isVerb() const;
+       ///
+       bool isVerbVisibleSpace() const { return (bool)(flag==InsetInclude::VERBAST);}
+        ///  
+       bool isInclude() const { return (bool)(flag == InsetInclude::INCLUDE);}
+        ///  
+       void setInput();
+        ///  
+       void setNoLoad(bool);
+        ///  
+       void setInclude();
+        ///  
+       void setVerb();
+       ///
+       void setVisibleSpace(bool b);
+       /// return true if the file is or got loaded.
+       bool loadIfNeeded() const;
+private:
+        ///
+        enum Include_Flags {
+               ///
+               INCLUDE=0,
+               ///
+               VERB = 1,
+               ///
+               INPUT = 2,
+               ///
+               VERBAST = 3
+       };
+       
+       ///
+       bool noload;
+       ///
+        int flag;
+        ///
+       Buffer *master;
+       ///
+       LString filename;
+};
+
+
+inline 
+bool InsetInclude::isVerb() const
+{
+    return (bool)(flag==InsetInclude::VERB || flag==InsetInclude::VERBAST); 
+}
+
+
+inline
+void InsetInclude::setInput()
+{
+       if (!isInput()) {
+           flag = InsetInclude::INPUT;
+           setCmdName("input");
+       }
+}
+
+
+inline
+void InsetInclude::setNoLoad(bool b)
+{ 
+               noload = b;
+}
+
+
+inline
+void InsetInclude::setInclude()
+{
+       if (!isInclude()) {
+           flag = InsetInclude::INCLUDE;
+           setCmdName("include");
+       }
+}
+
+
+inline
+void InsetInclude::setVerb()
+{ 
+       if (!isVerb()) {
+           flag = InsetInclude::VERB;
+           setCmdName("verbatiminput");
+       }
+}
+
+
+inline
+void InsetInclude::setVisibleSpace(bool b)
+{
+        if (b && flag==InsetInclude::VERB) {
+           setCmdName("verbatiminput*");
+           flag = InsetInclude::VERBAST;
+       } else if (!b && flag==InsetInclude::VERBAST) {
+           setCmdName("verbatiminput");
+           flag = InsetInclude::VERB;
+       }
+}
+#endif
diff --git a/src/insets/insetindex.C b/src/insets/insetindex.C
new file mode 100644 (file)
index 0000000..5344ec2
--- /dev/null
@@ -0,0 +1,161 @@
+#include <config.h>
+
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include FORMS_H_LOCATION  
+#include "insetindex.h"
+#include "buffer.h"
+#include "error.h"
+#include "LaTeXFeatures.h"
+#include "gettext.h"
+#include "LString.h"
+#include "lyx_gui_misc.h" // WarnReadonly()
+extern BufferView *current_view;
+extern void UpdateInset(Inset* inset, bool mark_dirty = true);
+
+FD_index_form *index_form = 0;
+
+static
+void index_cb(FL_OBJECT *, long data)
+{
+       InsetIndex *inset = (InsetIndex*)index_form->vdata;
+       
+       switch (data) {
+// -       case 0: fl_hide_form(index_form->index_form); break;
+// -       case 1: 
+// -       {
+// -               inset->setContents(fl_get_input(index_form->key));
+// -               fl_hide_form(index_form->index_form);
+// -               UpdateInset(inset);
+// -               break;
+// -       }
+       case 1: // OK
+               if(!current_view->currentBuffer()->isReadonly()) {
+                       LString tmp = fl_get_input(index_form->key);
+                       if(tmp != inset->getContents()) {
+                               inset->setContents(tmp);
+                               fl_hide_form(index_form->index_form);
+                               UpdateInset(inset);
+                               break;
+                       }
+               } // fall through to Cancel on RO
+       case 0: // Cancel
+               fl_hide_form(index_form->index_form); break;
+       }
+}
+
+
+static
+FD_index_form *create_form_index_form()
+{
+       FL_OBJECT *obj;
+       FD_index_form *fdui = (FD_index_form *) fl_calloc(1, sizeof(FD_index_form));
+
+       fdui->index_form = fl_bgn_form(FL_NO_BOX, 258, 196);
+       obj = fl_add_box(FL_UP_BOX,0,0,258,196,"");
+       fdui->key = obj = fl_add_input(FL_NORMAL_INPUT,93,26,130,30,
+                                      idex(_("Keyword:|#K")));
+         fl_set_object_shortcut(obj,scex(_("Keyword:|#K")),1);
+         fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+       obj = fl_add_button(FL_RETURN_BUTTON,50,140,80,30,_("OK"));
+         obj->u_vdata = index_form;
+         fl_set_object_callback(obj,index_cb,1);
+       obj = fl_add_button(FL_NORMAL_BUTTON,150,140,80,30,
+                           idex(_("Cancel|^[")));
+         fl_set_object_shortcut(obj,scex(_("Cancel|^[")),1);
+         obj->u_vdata = index_form;
+         fl_set_object_callback(obj,index_cb,0);
+       fl_end_form();
+
+       return fdui;
+}
+
+
+
+/*---------------------------------------*/
+
+
+InsetIndex::InsetIndex(LString const & key)
+       : InsetCommand("index", key) 
+{
+}
+
+
+InsetIndex::~InsetIndex()
+{
+       if(index_form && index_form->index_form
+          && index_form->index_form->visible
+          && index_form->vdata == this)
+               fl_hide_form(index_form->index_form);
+}
+
+
+void InsetIndex::Edit(int, int)
+{
+       if(current_view->currentBuffer()->isReadonly())
+               WarnReadonly();
+
+       if (!index_form)
+               index_form = create_form_index_form();
+       
+       index_form->vdata = this;
+       fl_set_input(index_form->key, getContents().c_str());
+       if (index_form->index_form->visible) {
+               fl_raise_form(index_form->index_form);
+       } else {
+               fl_show_form(index_form->index_form,
+                            FL_PLACE_MOUSE, FL_FULLBORDER,
+                            _("Index"));
+       }
+}
+
+
+LString InsetIndex::getScreenLabel() const
+{
+       return _("Idx");
+}
+
+
+//
+// InsetPrintIndex
+//
+
+InsetPrintIndex::InsetPrintIndex()
+       : InsetCommand("printindex")
+{
+       owner = NULL;
+}
+
+
+InsetPrintIndex::InsetPrintIndex(Buffer *o)
+       : InsetCommand("printindex"), owner(o)
+{
+}
+
+
+InsetPrintIndex::~InsetPrintIndex()
+{
+}
+
+
+LString InsetPrintIndex::getScreenLabel() const
+{
+       return _("PrintIndex");
+}
+
+
+void InsetPrintIndex::Validate(LaTeXFeatures &features) const
+{
+       features.makeidx = true;
+}
+
+
+Inset::Code InsetPrintIndex::LyxCode() const
+{
+       return Inset::INDEX_CODE;
+}
diff --git a/src/insets/insetindex.h b/src/insets/insetindex.h
new file mode 100644 (file)
index 0000000..a7946b9
--- /dev/null
@@ -0,0 +1,89 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *                        1996-1998 LyX Team
+ * 
+ *======================================================*/
+
+#ifndef _INSET_INDEX_H
+#define _INSET_INDEX_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+
+class Buffer;
+struct LaTeXFeatures;
+
+// Created by Lgb 970227
+
+
+/** Used to insert index labels  
+  */
+class InsetIndex: public InsetCommand {
+public:
+       ///
+       InsetIndex(): InsetCommand("index") {;}
+       ///
+       InsetIndex(LString const & key);
+       ///
+       ~InsetIndex();
+       ///
+       Inset *Clone() { return new InsetIndex(contents);}
+       ///
+       void Edit(int, int);
+       ///
+       unsigned char Editable() const
+       {
+               return 1;
+       }
+       ///
+       LString getScreenLabel() const;
+};
+
+
+class InsetPrintIndex: public InsetCommand {
+public:
+       ///
+       InsetPrintIndex();
+       ///
+       InsetPrintIndex(Buffer*);
+       ///
+       ~InsetPrintIndex();
+       /// Updates needed features for this inset.
+       void Validate(LaTeXFeatures &features) const;
+       ///
+       void Edit(int, int){;}
+       ///
+       unsigned char Editable() const{
+               return 1;
+       }
+       ///
+       bool Display() const { return true; }
+       ///
+       Inset::Code LyxCode() const;
+       ///
+       LString getScreenLabel() const;
+private:
+       ///
+       Buffer *owner;
+};
+
+// this was shifted here rather than a separate
+// file because its little and only need by
+// insetindex.C and lyx_gui_misc.C ARRae 981020
+struct FD_index_form {
+       FL_FORM *index_form;
+       FL_OBJECT *key;
+       void *vdata;
+       long ldata;
+};
+
+extern FD_index_form *index_form;
+#endif
diff --git a/src/insets/insetinfo.C b/src/insets/insetinfo.C
new file mode 100644 (file)
index 0000000..1fc4387
--- /dev/null
@@ -0,0 +1,218 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+#include <ctype.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "insetinfo.h"
+#include "lyxparagraph.h"
+#include "error.h"
+#include "lyxdraw.h"
+#include "gettext.h"
+#include "lyx_gui_misc.h" // CancelCloseBoxCB
+#include "buffer.h"
+
+//     $Id: insetinfo.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $ 
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: insetinfo.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $";
+#endif /* lint */
+
+extern BufferView *current_view;
+
+/* Info, used for the Info boxes */
+
+InsetInfo::InsetInfo()
+{
+       form = NULL;
+}
+
+
+InsetInfo::InsetInfo(LString const & string)
+       : contents(string)
+{
+       form = NULL;
+}
+
+
+InsetInfo::~InsetInfo()
+{
+       if (form){
+               fl_hide_form(form);
+               fl_free_form(form);
+               form = NULL;
+       }
+}
+
+
+int InsetInfo::Ascent(LyXFont const &font) const
+{
+       return font.maxAscent()+1;
+}
+
+
+int InsetInfo::Descent(LyXFont const &font) const
+{
+       return font.maxDescent()+1;
+}
+
+
+int InsetInfo::Width(LyXFont const &font) const
+{
+       return 6 + font.textWidth(_("Note"), strlen(_("Note")));
+}
+
+
+void InsetInfo::Draw(LyXFont font, LyXScreen &scr,
+                    int baseline, float &x)
+{
+       /* Info-insets are never LaTeX, so just correct the font */
+       font.setLatex(LyXFont::OFF);
+
+       // Draw as "Note" in a yellow box
+       x += 1;
+       scr.fillRectangle(gc_note,
+                         int(x), baseline - Ascent(font)+1,
+                         Width(font)-2, Ascent(font)+Descent(font)-2);
+       scr.drawRectangle(gc_note_frame,
+                         int(x), baseline- Ascent(font)+1,
+                         Width(font)-2, Ascent(font)+Descent(font)-2);
+       
+       scr.drawString(font, _("Note"), baseline, int(x+2));
+       x +=  Width(font) - 1;
+}
+
+
+void InsetInfo::Write(FILE *file)
+{
+       fprintf(file, "Info %s", contents.c_str());
+}
+
+
+void InsetInfo::Read(LyXLex &lex)
+{
+       LString tmp = lex.GetString(); // should be "Info"
+       if (tmp != "Info")
+               lyxerr.print("ERROR (InsetInfo::Read): "
+                             "consistency check 1 failed.");
+
+       while (lex.IsOK()) {
+               if (!lex.EatLine())
+                       // blank line in the file being read
+                       // should we skip blank lines?
+                       continue;
+
+               LString const token = lex.GetString().strip();
+               lyxerr.debug("Note: " + token, Error::LEX_PARSER);
+               
+               if (token != "\\end_inset") {
+                       contents += token + '\n';
+               }
+               else // token == "\\end_inset"
+                       break;
+       }
+       // now remove the last '\n's
+       contents.strip('\n');
+}
+      
+
+int InsetInfo::Latex(FILE *, signed char /*fragile*/)
+{
+       return 0;
+}
+
+
+int InsetInfo::Latex(LString &, signed char /*fragile*/)
+{
+       return 0;
+}
+
+
+int InsetInfo::Linuxdoc(LString &)
+{
+       return 0;
+}
+
+
+int InsetInfo::DocBook(LString &)
+{
+       return 0;
+}
+
+
+unsigned char InsetInfo::Editable() const
+{
+       return 1;
+}
+
+
+void InsetInfo::CloseInfoCB(FL_OBJECT *, long data)
+{
+       InsetInfo *inset = (InsetInfo*) data;
+//     inset->contents = fl_get_input(inset->strobj);
+       LString tmp = fl_get_input(inset->strobj);
+       Buffer *buffer = current_view->currentBuffer();
+       if(tmp != inset->contents && !(buffer->isReadonly()) ) {
+               buffer->markDirty();
+               inset->contents = tmp;
+       }
+       if (inset->form) {
+               fl_hide_form(inset->form);
+               fl_free_form(inset->form);
+               inset->form = NULL;
+       }
+}
+
+
+void InsetInfo::Edit(int, int)
+{
+       if(current_view->currentBuffer()->isReadonly())
+               WarnReadonly();
+       
+       if (!form) {
+               FL_OBJECT *obj;
+               form = fl_bgn_form(FL_UP_BOX,400,180);
+               strobj = obj = fl_add_input(FL_MULTILINE_INPUT,10,10,380,120,"");
+               fl_set_object_color(obj,FL_MCOL,FL_MCOL);
+               fl_set_object_resize(obj, FL_RESIZE_ALL);
+               fl_set_object_gravity(obj, NorthWestGravity, SouthEastGravity);
+               obj = fl_add_button(FL_NORMAL_BUTTON,130,140,120,30,idex(_("Close|#C^[")));
+               fl_set_object_resize(obj, FL_RESIZE_NONE);
+               fl_set_object_gravity(obj, SouthWestGravity, SouthEastGravity);
+               fl_set_object_callback(obj, CloseInfoCB, (long)this);
+               fl_set_object_shortcut(obj, scex(_("Close|#C^[")), (long)this);
+               fl_end_form();
+               fl_set_form_atclose(form, CancelCloseBoxCB, NULL);
+       }
+       fl_set_input(strobj, contents.c_str());
+       if (form->visible) {
+               fl_raise_form(form);
+       } else {
+               fl_show_form(form,FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER, 
+                            _("Note"));
+       }
+}
+
+
+Inset* InsetInfo::Clone()
+{
+       InsetInfo *result = new InsetInfo(contents);
+       return result;
+}
+
+
+Inset::Code InsetInfo::LyxCode() const
+{
+       return Inset::IGNORE_CODE;
+}
diff --git a/src/insets/insetinfo.h b/src/insets/insetinfo.h
new file mode 100644 (file)
index 0000000..47df1a1
--- /dev/null
@@ -0,0 +1,79 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+
+#ifndef _INSET_INFO_H
+#define _INSET_INFO_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "lyxinset.h"
+#include FORMS_H_LOCATION
+#include "LString.h"
+
+/** Info. Handles the note insets.
+  
+  This class handles the note insets. The edit operation bringes up
+  a dialog, where the user can type a note about life or something
+  else of interest. When collapsed, the inset is displayed as "Note"
+  in a yellow box. Currently, the Read-function is a terrible hack. 
+  Some day in the distant future, this will hopefully be obsoleted by 
+  a true comment-environment. */
+class InsetInfo: public Inset {
+public:
+       ///
+       InsetInfo();
+       ///
+       InsetInfo(LString const & string);
+       ///
+       ~InsetInfo();
+       ///
+       int Ascent(LyXFont const &font) const;
+       ///
+       int Descent(LyXFont const &font) const;
+       ///
+       int Width(LyXFont const &font) const;
+       ///
+       void Draw(LyXFont font, LyXScreen &scr, int baseline, float &x);
+       ///
+       void Write(FILE *file);
+       ///
+       void Read(LyXLex &lex);
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+       /// what appears in the minibuffer when opening
+       char const* EditMessage() {return "Opened note";}
+       ///
+       void Edit(int, int);
+       ///
+       unsigned char Editable() const;
+       ///
+       Inset::Code LyxCode() const;
+       ///
+       Inset* Clone();
+private:
+       ///
+       LString contents;
+       ///
+       FL_FORM *form;
+       ///
+       FL_OBJECT *strobj;
+       ///
+       static void CloseInfoCB(FL_OBJECT *, long data);
+};
+
+#endif
diff --git a/src/insets/insetlabel.C b/src/insets/insetlabel.C
new file mode 100644 (file)
index 0000000..8e0e8c8
--- /dev/null
@@ -0,0 +1,102 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "insetlabel.h"
+
+//     $Id: insetlabel.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $        
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: insetlabel.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $";
+#endif /* lint */
+
+/* Label. Used to insert a label automatically */
+
+
+InsetLabel::InsetLabel(LString const & cmd)
+{
+       scanCommand(cmd);
+}
+
+
+InsetLabel::~InsetLabel()
+{
+}
+
+
+Inset* InsetLabel::Clone()
+{
+       InsetLabel *result = new InsetLabel(getCommand());
+       return result;
+}
+
+
+int InsetLabel::GetNumberOfLabels() const
+{
+       return 1;
+}
+
+
+LString InsetLabel::getLabel(int) const
+{
+       return contents;
+}
+
+int InsetLabel::Latex(FILE *file, signed char /*fragile*/)
+{
+       fprintf(file, "%s", escape(getCommand()).c_str());
+       return 0;
+}
+
+
+int InsetLabel::Latex(LString &file, signed char /*fragile*/)
+{
+       file += escape(getCommand());
+       return 0;
+}
+
+
+int InsetLabel::Linuxdoc(LString &file)
+{
+       file += "<label id=\"" + getContents() +"\" >";
+       return 0;
+}
+
+
+int InsetLabel::DocBook(LString &file)
+{
+       file += "<anchor id=\"" + getContents() +"\" >";
+       return 0;
+}
+
+
+// This function escapes 8-bit characters and other problematic characters
+// It's exactly the same code as in insetref.C.
+LString InsetLabel::escape(LString const & lab) const {
+       char hexdigit[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
+                             '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+       LString enc;
+       for (int i=0; i<lab.length(); i++) {
+               unsigned char c=lab[i];
+               if (c >= 128 || c=='=' || c=='%') {
+                       enc += '=';
+                       enc += hexdigit[c>>4];
+                       enc += hexdigit[c & 15];
+               } else {
+                       enc += (char) c;
+               }
+       }
+       return enc;
+}
diff --git a/src/insets/insetlabel.h b/src/insets/insetlabel.h
new file mode 100644 (file)
index 0000000..7fcb8ef
--- /dev/null
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *                       1995-1998 The LyX Team
+ *
+ *======================================================*/
+
+#ifndef _INSET_LABEL_H
+#define _INSET_LABEL_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+#include "LString.h"
+
+///
+class InsetLabel: public InsetCommand {
+public:
+       ///
+       InsetLabel(LString const & cmd);
+       ///
+       InsetLabel() : InsetCommand("label") {;}
+       ///
+       ~InsetLabel();
+       ///
+       Inset* Clone();
+       ///
+       Inset::Code LyxCode() const { return Inset::LABEL_CODE; }
+       ///
+       int GetNumberOfLabels() const;
+       ///
+       LString getLabel(int) const;
+       ///
+       LString getScreenLabel() const { return getContents(); }
+       ///
+       unsigned char Editable() const { return 0; }
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+private:
+       /// This function escapes 8-bit characters
+       LString escape(LString const &) const;
+};
+
+#endif
diff --git a/src/insets/insetlatex.C b/src/insets/insetlatex.C
new file mode 100644 (file)
index 0000000..f5232c1
--- /dev/null
@@ -0,0 +1,156 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "definitions.h"
+#include "insetlatex.h"
+#include "lyxdraw.h"
+
+//     $Id: insetlatex.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $        
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: insetlatex.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $";
+#endif /* lint */
+
+/* Latex. Used to insert Latex-Code automatically */
+
+
+InsetLatex::InsetLatex()
+{
+}
+
+
+InsetLatex::InsetLatex(LString const & string)
+       : contents(string)
+{
+}
+
+
+InsetLatex::~InsetLatex()
+{
+}
+
+
+int InsetLatex::Ascent(LyXFont const &font) const
+{
+       return font.maxAscent() + 1;
+}
+
+
+int InsetLatex::Descent(LyXFont const &font) const
+{
+       return font.maxDescent() + 1;
+}
+
+
+int InsetLatex::Width(LyXFont const &font) const
+{
+       return 6 + font.stringWidth(contents);
+}
+
+
+void InsetLatex::Draw(LyXFont font, LyXScreen &scr,
+                     int baseline, float &x)
+{
+       // Latex-insets are always LaTeX, so just correct the font */ 
+       font.setLatex(LyXFont::ON);
+
+       // Draw it as a box with the LaTeX text
+       x += 1;
+
+       //scr.drawFilledRectangle(int(x), baseline - Ascent(font) + 1,
+       //           Width(font)-2, Ascent(font) + Descent(font)-2,
+       //           FL_GRAY80);
+       scr.fillRectangle(gc_lighted, int(x), baseline - Ascent(font) +1 ,
+                         Width(font) - 2, Ascent(font) + Descent(font) -2);
+       
+       //scr.drawRectangle(int(x), baseline - Ascent(font) + 1,
+       //           Width(font)-2, Ascent(font)+Descent(font)-2,
+       //           FL_RED);
+       scr.drawRectangle(gc_foot,int(x), baseline - Ascent(font) + 1,
+                         Width(font)-2, Ascent(font)+Descent(font)-2);
+       
+       scr.drawString(font, contents, baseline, int(x+2));
+       x +=  Width(font) - 1;
+}
+
+
+void InsetLatex::Write(FILE *file)
+{
+       fprintf(file, "Latex %s\n", contents.c_str());
+}
+
+
+void InsetLatex::Read(LyXLex &lex)
+{
+       FILE *file = lex.getFile();
+       int i = 0;
+       char c='\0';
+       char tmp[100];
+       while (!feof(file) && (c = fgetc(file)) != '\n') {
+               tmp[i]=c;
+               i++;
+       }
+       tmp[i]='\0';
+       contents = tmp;
+}
+
+
+int InsetLatex::Latex(FILE *file, signed char /*fragile*/)
+{
+       fprintf(file, "%s", contents.c_str());
+       return 0;
+}
+
+
+int InsetLatex::Latex(LString &file, signed char /*fragile*/)
+{
+       file += contents;
+       return 0;
+}
+
+
+int InsetLatex::Linuxdoc(LString &file)
+{
+       file += contents;
+       return 0;
+}
+
+
+int InsetLatex::DocBook(LString &file)
+{
+       file += contents;
+       return 0;
+}
+
+
+bool InsetLatex::Deletable() const
+{
+       return false;
+}
+
+
+Inset* InsetLatex::Clone()
+{
+       InsetLatex *result = new InsetLatex(contents);
+       return result;
+}
+
+
+Inset::Code InsetLatex::LyxCode() const
+{
+       if (contents == "\\tableofcontents") return Inset::TOC_CODE;
+       return Inset::NO_CODE;
+}
diff --git a/src/insets/insetlatex.h b/src/insets/insetlatex.h
new file mode 100644 (file)
index 0000000..995ed0c
--- /dev/null
@@ -0,0 +1,66 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+
+#ifndef _INSET_LATEX_H
+#define _INSET_LATEX_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "lyxinset.h"
+#include "LString.h"
+
+/** Latex. Used to insert non-deletable LaTeX-Code automatically
+
+  Behaves as LaTeXDels, but cannot be deleted with the normal
+  delete/backspace operations. This is used when you insert a LaTeX
+  figure (done as "\input "), but you still have to type the filename
+  yourself after the inset. */
+class InsetLatex: public Inset {
+public:
+       ///
+       InsetLatex();
+       ///
+       InsetLatex(LString const & string);
+       ///
+       ~InsetLatex();
+       ///
+       int Ascent(LyXFont const &font) const;
+       ///
+       int Descent(LyXFont const &font) const;
+       ///
+       int Width(LyXFont const &font) const;
+       ///
+       void Draw(LyXFont font, LyXScreen &scr, int baseline, float &x);
+       ///
+       void Write(FILE *file);
+       ///
+       void Read(LyXLex &lex);
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+       ///
+       bool Deletable() const;
+       ///
+       Inset* Clone();
+       ///
+       Inset::Code LyxCode() const;
+private:
+       ///
+       LString contents;
+};
+
+#endif
diff --git a/src/insets/insetlatexaccent.C b/src/insets/insetlatexaccent.C
new file mode 100644 (file)
index 0000000..c715a0c
--- /dev/null
@@ -0,0 +1,671 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "insetlatexaccent.h"
+#include "error.h"
+#include "lyxrc.h"
+#include "lyxdraw.h"
+
+extern LyXRC * lyxrc;
+
+//     $Id: insetlatexaccent.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $  
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: insetlatexaccent.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $";
+#endif /* lint */
+
+/* LatexAccent. Proper handling of accented characters */
+/* This part is done by Ivan Schreter, schreter@ccsun.tuke.sk */
+/* Later modified by Lars G. Bjonnes, larsbj@ifi.uio.no */
+
+InsetLatexAccent::InsetLatexAccent()
+{
+       candisp = false;
+}
+
+
+InsetLatexAccent::InsetLatexAccent(InsetLatexAccent const & other)
+    :contents(other.contents),
+     candisp(other.candisp),
+     modtype(other.modtype),
+     remdot(other.remdot),
+     plusasc(other.plusasc),
+     plusdesc(other.plusdesc),
+     ic(other.ic)
+{}
+
+
+InsetLatexAccent::InsetLatexAccent(LString const & string)
+       : contents(string)
+{
+       checkContents();
+}
+
+
+InsetLatexAccent::~InsetLatexAccent()
+{
+}
+
+
+void InsetLatexAccent::checkContents()
+        // check, if we know the modifier and can display it ok on screen
+{
+        candisp = false;
+
+       if (contents.empty() || contents.length()<2) return;
+
+       // REMOVE IN 0.13
+       // Dirty Hack for backward compability. remove in 0.13 (Lgb)
+       contents.strip();
+       contents.frontStrip();
+       if (!contents.contains("{") && !contents.contains("}")) {
+               if (contents.length() == 2) {
+                       LString tmp;
+                       tmp += contents[0];
+                       tmp += contents[1];
+                       tmp += "{}";
+                       contents = tmp;
+               } else if (contents.length() == 3) {
+                       LString tmp;
+                       tmp += contents[0];
+                       tmp += contents[1];
+                       tmp += '{';
+                       tmp += contents[2];
+                       tmp += '}';
+                       contents = tmp;
+               } else if (contents.length()==4 && contents[2] == ' ') {
+                       LString tmp;
+                       tmp += contents[0];
+                       tmp += contents[1];
+                       tmp += '{';
+                       tmp += contents[3];
+                       tmp += '}';
+                       contents = tmp;
+               } else if  (contents.length()==4 && contents[2] == '\\'
+                           && (contents[3]== 'i' || contents[3]== 'j')) {
+                       LString tmp;
+                       tmp += contents[0];
+                       tmp += contents[1];
+                       tmp += '{';
+                       tmp += contents[2];
+                       tmp += contents[3];
+                       tmp += '}';
+                       contents = tmp;
+               }
+       }
+        if (contents[0] != '\\') return; // demand that first char is a '\\'
+
+       lyxerr.debug("Decode: " + contents);
+
+        remdot = false; plusasc = false; plusdesc = false;
+
+        switch (contents[1]) { // second char should be one of these
+       case '\'':  // acute
+                modtype = ACUTE;    // acute
+                plusasc = true;    // at the top of character
+                break;
+       case '`':   // grave
+                modtype = GRAVE;    // grave
+                plusasc = true;    // at the top
+                break;
+       case '=':   // macron
+                modtype = MACRON;    // macron
+                plusasc = true;    // at the top
+                break;
+       case '~':   // tilde
+                modtype = TILDE;    // tilde
+                plusasc = true;    // at the top
+                break;
+       case 'b':   // underbar
+                modtype = UNDERBAR;    // underbar
+                plusdesc = true;   // at the bottom
+                break;
+       case 'c':   // cedilla
+                modtype = CEDILLA;    // cedilla
+                plusdesc = true;   // at the bottom
+                break;
+       case 'd':   // underdot
+                modtype = UNDERDOT;    // underdot
+                plusdesc = true;   // at the bottom
+                break;
+       case 'r':   // circle
+                modtype = CIRCLE;    // circle
+                plusasc = true;    // at the top
+                break;
+       case 't':   // tie
+                modtype = TIE;    // tie
+                plusasc = true;    // at the top
+                break;
+       case 'u':   // breve
+                modtype = BREVE;    // breve
+                plusasc = true;    // at the top
+                break;
+       case 'v':   // caron
+                modtype = CARON;   // caron
+                plusasc = true;    // at the top
+                break;
+       case 'q':   // special caron
+                modtype = SPECIAL_CARON;   // special caron
+                plusasc = true;    // at the top
+                break;
+       case 'H':   // hungarian umlaut
+                modtype = HUNGARIAN_UMLAUT;   // hungarian umlaut
+                plusasc = true;    // at the top
+                break;
+       case '"':   // umlaut
+                modtype = UMLAUT;   // umlaut
+                plusasc = true;    // at the top
+                break;
+       case '.':   // dot
+                modtype = DOT;   // dot
+                plusasc = true;    // at the top
+                break;
+       case '^':   // circumflex
+                modtype = CIRCUMFLEX;   // circumflex
+                plusasc = true;    // at the top
+                break;
+       case 'k':   // ogonek
+               modtype = OGONEK;  // ogonek
+               plusdesc = true;
+               break;
+       case 'i': // dot-less-i
+               modtype = DOT_LESS_I;  // dot-less-i
+               plusasc = true; // at the top (not really needed)
+               remdot = true;
+               break;
+       case 'j': // dot-less-j
+               modtype = DOT_LESS_J; // dot-less-j
+               plusasc = true; // at the top (not really needed)
+               remdot = true;
+               break;
+       case 'l': // lslash
+               modtype = lSLASH;
+               plusasc = true; // at the top (not really needed)
+               break;
+       case 'L': // lslash
+               modtype = LSLASH;
+               plusasc = true; // at the top (not really needed)
+               break;
+       default:
+               printf ("Default\n");
+               // unknow accent (or something else)
+                return;
+        }
+
+       // we demand that third char is a '{' (Lgb)
+       if (contents[2] != '{') return;
+
+       // special clause for \i{}, \j{} \l{} and \L{}
+       if ((modtype == DOT_LESS_I || modtype == DOT_LESS_J
+               || modtype == lSLASH || modtype == LSLASH)
+           && contents[3] == '}' ) {
+               switch (modtype) {
+               case DOT_LESS_I: ic = 'i'; break;
+               case DOT_LESS_J: ic = 'j'; break;
+               case lSLASH:     ic = 'l'; break;
+               case LSLASH:     ic = 'L'; break;
+               default:
+                       // if this happens something is really wrong
+                       lyxerr.print("InsetLaTexAccent: weird error.");
+                       break;
+               }
+               //ic = (modtype == DOT_LESS_J ? 'j' : 'i');
+               lyxerr.debug("Contents: [" + contents + "], ic: " + ic 
+                            + ", top: " + long(plusasc) 
+                            + ", bot: " + long(plusdesc) 
+                            + ", dot: " + long(remdot) 
+                            + ", mod: " + long(modtype));
+       // Special case for space
+       } else if (contents[3] == '}') {
+               ic = ' ';
+       } else {
+               int i = 3;
+               
+               // now get the char
+               ic = contents[3]; // i will always be 3 here
+
+               // ic should now be a alfa-char or '\\'
+               if (ic == '\\') {
+                       ic = contents[++i]; // will only allow \<foo>{\i} and \<foo>{\j}
+                       if (ic == 'i' || ic == 'j')
+                               remdot = true;
+                       else
+                               return;
+               } else if ( (ic=='i'|| ic=='j') && contents[4]=='}') {
+                   // Do a rewrite: \<foo>{i} --> \<foo>{\i}
+                   LString temp=contents;
+                   temp.substring(0,2);
+                   temp+='\\';
+                       temp+=char(ic);
+                   for(int j=4;j<contents.length();j++)
+                               temp+=contents[j];
+                   contents=temp;
+                   i++;
+                       remdot=true;
+               }    
+
+               // demand a '}' at the end
+               if (contents[++i] != '}' && contents[++i]) return;
+                                          
+               // fine, the char is properly decoded now (hopefully)
+               lyxerr.debug("Contents: [" + contents + "], ic: " + ic
+                            + ", top: " + long(plusasc) 
+                            + ", bot: " + long(plusdesc) 
+                            + ", dot: " + long(remdot) 
+                            + ", mod: " + long(modtype));
+       }
+        candisp = true;
+}
+
+
+int InsetLatexAccent::Ascent(LyXFont const &font) const
+{
+       int max;
+       if (candisp) {
+               if (ic == ' ')
+                       max = font.ascent('a');
+               else
+                       max = font.ascent(ic);
+               if (plusasc) 
+                       max += (font.maxAscent()+3) / 3;
+       } else
+               max = font.maxAscent()+4;
+       return max;
+}
+
+
+int InsetLatexAccent::Descent(LyXFont const &font) const
+{
+       int max;
+       if (candisp) {
+               if (ic==' ') 
+                       max = font.descent('a');
+                else 
+                       max = font.descent(ic);
+                if (plusdesc)
+                       max += 3;
+       } else
+               max = font.maxDescent() + 4;
+       return max;
+}
+
+
+int InsetLatexAccent::Width(LyXFont const &font) const
+{
+       if (candisp)
+               return font.textWidth(&ic, 1);
+        else
+                return font.stringWidth(contents) + 4;
+}
+
+
+
+bool InsetLatexAccent::DisplayISO8859_9(LyXFont font,
+                           LyXScreen &scr,
+                           int baseline, 
+                           float &x)
+{
+       unsigned char tmpic = ic;
+       
+       switch (modtype) {
+       case CEDILLA:
+       {
+               if (ic == 'c') tmpic = 0xe7;
+               if (ic == 'C') tmpic = 0xc7;
+               if (ic == 's') tmpic = 0xfe;
+               if (ic == 'S') tmpic = 0xde;
+               break;
+       }
+       case BREVE:
+       {       if (ic == 'g') tmpic = 0xf0;
+               if (ic == 'G') tmpic = 0xd0;
+               break;
+       }
+       case UMLAUT:
+       {
+               if (ic == 'o') tmpic = 0xf6;
+               if (ic == 'O') tmpic = 0xd6;
+               if (ic == 'u') tmpic = 0xfc;
+               if (ic == 'U') tmpic = 0xdc;
+               break;
+       }
+       case DOT:        if (ic == 'I') tmpic = 0xdd; break;
+       case DOT_LESS_I: tmpic = 0xfd; break;
+       default:         return false;
+       }
+       if (tmpic != ic) {
+               char ch = char(tmpic);
+               scr.drawText(font, &ch, 1, baseline, int(x));
+               x += Width (font);
+               return true;
+       }
+       else
+               return false;
+}
+
+
+void InsetLatexAccent::Draw(LyXFont font,
+                           LyXScreen &scr,
+                           int baseline, 
+                           float &x)
+{
+       if (lyxrc->font_norm=="iso8859-9")
+               if (DisplayISO8859_9 (font, scr, baseline, x))  
+                       return;
+       
+       /* draw it! */ 
+  
+       if (candisp) {
+               int asc = Ascent(font);
+               int desc = Descent(font);
+               int wid = Width(font);
+               float x2 = x+(float(wid)/2);
+               float hg35;
+               int hg, y;
+               if (plusasc) {
+                       // mark at the top
+                       hg = font.maxDescent();
+                       y = baseline - asc;
+
+                       if (font.shape() == LyXFont::ITALIC_SHAPE) x2 += (4*hg)/5; // italic
+               } else {
+                       // at the bottom
+                       hg = desc;
+                       y = baseline;
+               }
+
+               hg35 = float(hg*3)/5;
+
+               // display with proper accent mark
+               // first the letter
+               scr.drawText(font, &ic, 1, baseline, int(x));
+
+               GC pgc = GetAccentGC(font, (hg+3)/5);
+
+               if (remdot) {
+                       int tmpvar = baseline - font.ascent('i');
+                       float tmpx = 0;
+                       if (font.shape() == LyXFont::ITALIC_SHAPE) tmpx += (8*hg)/10; // italic
+                       lyxerr.debug("Removing dot.", Error::ANY);
+                       // remove the dot first
+                       scr.fillRectangle(gc_clear, int(x + tmpx),
+                                         tmpvar, wid,
+                                         font.ascent('i') -
+                                         font.ascent('x')-1);
+                       
+               }
+               // now the rest - draw within (x,y, x+wid, y+hg)
+               switch (modtype) {
+               case ACUTE:     // acute
+               {
+                       scr.drawLine(pgc, int(x2), int(y+hg35),
+                                    int(x2+hg35), y);
+                       break;
+               }
+               case GRAVE:     // grave
+               {
+                       scr.drawLine(pgc,int(x2), int(y+hg35),
+                                    int(x2-hg35), y); 
+                       break;
+               }
+               case MACRON:     // macron
+               {
+                       scr.drawLine(pgc,
+                                    int(x2-(3*wid/7)), int(y+(hg/2) + hg35),
+                                    int(x2+(3*wid/7)), int(y+(hg/2) + hg35));
+                       break;
+               }
+               case TILDE:     // tilde
+               {
+                       if (hg35 > 2) --hg35;
+                       x2 += (hg35/2);
+                       XPoint p[4];
+                       p[0].x = int(x2 - 2*hg35); p[0].y = int(y + hg);
+                       p[1].x = int(x2 - hg35);   p[1].y = int(y + hg35);
+                       p[2].x = int(x2);          p[2].y = int(y + hg);
+                       p[3].x = int(x2 + hg35);   p[3].y = int(y + hg35);
+                       scr.drawLines(pgc, p, 4);
+                       break;
+               }
+               case UNDERBAR:     // underbar
+               {
+                       scr.drawLine(pgc,
+                                    int(x2-(3*wid/7)), y+(hg/2),
+                                    int(x2+(3*wid/7)), y+(hg/2));
+                       break;
+               }
+               case CEDILLA:     // cedilla
+               {
+                       XPoint p[4];
+                       p[0].x = int(x2);          p[0].y = y;
+                       p[1].x = int(x2);          p[1].y = y + (hg/3);
+                       p[2].x = int(x2 + (hg/3)); p[2].y = y + (hg/2);
+                       p[3].x = int(x2 - (hg/4)); p[3].y = y + hg;
+                       scr.drawLines(pgc, p, 4);
+                       break;
+               }
+               case UNDERDOT:     // underdot
+               case DOT:    // dot
+               {
+                       scr.drawArc(pgc,int(x2), y+(hg/2),
+                                   1, 1, 0, 360*64); 
+                       break;
+               }
+               case CIRCLE:     // circle
+               {
+                       scr.drawArc(pgc, int(x2-(hg/2)), y, hg, hg, 0,
+                                   360*64);
+                       break;
+               }
+               case TIE:     // tie
+               {
+                       scr.drawArc(pgc,
+                                   int(x2), y+(hg/4),
+                                   hg, hg, 0, 11519);
+                       break;
+               }
+               case BREVE:     // breve
+               {
+                       scr.drawArc(pgc,
+                                   int(x2-(hg/2)), y-(hg/4),
+                                   hg, hg, 0, -11519);
+                       break;
+               }
+               case CARON:    // caron
+               {
+                       XPoint p[3];
+                       p[0].x = int(x2 - hg35); p[0].y = y;
+                       p[1].x = int(x2);        p[1].y = int(y+hg35);
+                       p[2].x = int(x2 + hg35); p[2].y = y;
+                       scr.drawLines(pgc, p, 3);
+                       break;
+               }
+               case SPECIAL_CARON:    // special caron
+               {
+                       switch (ic) {
+                       case 'L': wid = 4*wid/5; break;
+                       case 't': y -= int(hg35/2); break;
+                       }
+                       XPoint p[3];
+                       p[0].x = int(x+wid);          p[0].y = int(y+hg35+hg);
+                       p[1].x = int(x+wid+(hg35/2)); p[1].y = int(y+ hg+(hg35/2));
+                       p[2].x = int(x+wid+(hg35/2)); p[2].y = y + hg;
+                       scr.drawLines(pgc, p, 3);
+                       break;
+               }
+               case HUNGARIAN_UMLAUT:    // hung. umlaut
+               {
+                       XSegment s[2];
+                       s[0].x1= int(x2-(hg/2));      s[0].y1 = int(y + hg35);
+                       s[0].x2= int(x2+hg35-(hg/2)); s[0].y2 = y;
+                       s[1].x1= int(x2+(hg/2));      s[1].y1 = int(y + hg35);
+                       s[1].x2= int(x2+hg35+(hg/2)); s[1].y2 = y;
+
+                       scr.drawSegments(pgc, s, 2);
+                       break;
+               }
+               case UMLAUT:    // umlaut
+               {
+                       int tmpadd = y;
+                       tmpadd += (remdot) ? ((19*hg)/10) : ((20*hg)/27); // if (remdot) -> i or j
+                       int rad = ((hg*4)/8);
+                       if (rad <= 1) {
+                               scr.drawPoint(pgc, int(x2-((4*hg)/7)), tmpadd);
+                               scr.drawPoint(pgc, int(x2+((4*hg)/7)), tmpadd);
+                       } else {
+                               scr.drawArc(pgc, int(x2-((2*hg)/4)), tmpadd,
+                                           rad-1, rad-1, 0, 360*64);
+                               scr.drawArc(pgc, int(x2+((2*hg)/4)), tmpadd,
+                                           rad-1, rad-1, 0, 360*64);
+                       }
+                       break;
+               }
+               case CIRCUMFLEX:    // circumflex
+               {
+                       XPoint p[3];
+                       p[0].x = int(x2 - hg35); p[0].y = y + hg;
+                       p[1].x = int(x2);        p[1].y = int(y + hg35);
+                       p[2].x = int(x2 + hg35); p[2].y = y + hg;
+                       scr.drawLines(pgc, p, 3);
+                       break;
+               }
+               case OGONEK:    // ogonek
+               {
+                       // this does probably not look like an ogonek, so
+                       // it should certainly be refined
+                       XPoint p[4];
+                       p[0].x = int(x2);          p[0].y = y;
+                       p[1].x = int(x2);          p[1].y = y + (hg/3);
+                       p[2].x = int(x2 - (hg/3)); p[2].y = y + (hg/2);
+                       p[3].x = int(x2 + (hg/4)); p[3].y = y + hg;
+                       scr.drawLines(pgc, p, 4);
+                       break;
+               }
+               case lSLASH:
+               case LSLASH:
+               {
+                       XPoint p[2];
+                       p[0].x = int(x);                p[0].y = y+3*hg;
+                       p[1].x = int(x+float(wid)*.75); p[1].y = y+hg;
+                       scr.drawLines(pgc, p, 2);
+                       break;
+               }
+               case DOT_LESS_I: // dotless-i
+               case DOT_LESS_J: // dotless-j
+               {
+                       // nothing to do for these
+                       break;
+               }
+               }
+       } else {
+               //scr.drawFilledRectangle(int(x+1), baseline - Ascent(font)+1,
+               //                      Width(font)-2,
+               //                      Ascent(font)+Descent(font)-2,
+               //                      FL_GRAY80);
+               scr.fillRectangle(gc_lighted,
+                                 int(x+1), baseline - Ascent(font)+1,
+                                 Width(font)-2,
+                                 Ascent(font)+Descent(font)-2);
+               
+               //scr.drawRectangle(int(x), baseline - Ascent(font),
+               //                Width(font)-1,
+               //                Ascent(font)+Descent(font)-1,
+               //                FL_GRAY80);
+               scr.drawRectangle(gc_lighted,
+                                 int(x), baseline - Ascent(font),
+                                 Width(font)-1,
+                                 Ascent(font)+Descent(font)-1);
+               scr.drawString(font, contents, baseline, int(x+2));
+       }
+       x +=  Width(font);
+}
+
+
+void InsetLatexAccent::Write(FILE *file)
+{
+       fprintf(file, "\\i %s\n", contents.c_str());
+}
+
+
+void InsetLatexAccent::Read(LyXLex &lex)
+{
+       lex.EatLine();
+       contents = lex.GetString();
+       checkContents();
+}
+
+
+int InsetLatexAccent::Latex(FILE *file, signed char /*fragile*/)
+{
+       fprintf(file, "%s", contents.c_str());
+       return 0;
+}
+
+
+int InsetLatexAccent::Latex(LString &file, signed char /*fragile*/)
+{
+       file += contents;
+       return 0;
+}
+
+
+int InsetLatexAccent::Linuxdoc(LString &file)
+{
+       file += contents;
+       return 0;
+}
+
+
+int InsetLatexAccent::DocBook(LString &file)
+{
+       file += contents;
+       return 0;
+}
+
+
+bool InsetLatexAccent::Deletable() const
+{
+       return true;
+}
+
+
+bool InsetLatexAccent::DirectWrite() const
+{
+       return true;
+}
+
+
+Inset* InsetLatexAccent::Clone()
+{
+       InsetLatexAccent *result = new InsetLatexAccent(contents);
+       return result;
+}
+
+
+Inset::Code InsetLatexAccent::LyxCode() const
+{
+       return Inset::ACCENT_CODE;
+}
+
+
+bool InsetLatexAccent::IsEqual(Inset* other)
+{
+       if (other && other->LyxCode() == Inset::ACCENT_CODE){
+               InsetLatexAccent* otheraccent = (InsetLatexAccent*) other;
+               return (contents == otheraccent->contents);
+       }
+       return false;
+}
diff --git a/src/insets/insetlatexaccent.h b/src/insets/insetlatexaccent.h
new file mode 100644 (file)
index 0000000..1c21647
--- /dev/null
@@ -0,0 +1,147 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+
+#ifndef _INSET_LATEX_ACCENT_H
+#define _INSET_LATEX_ACCENT_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "lyxinset.h"
+#include "LString.h"
+#include "lyxlex.h"
+
+/** Insertion of accents
+  
+  Proper handling of accented characters.
+  This is class is supposed to handle all LaTeX accents, it
+  is also possible that the class will change a bit so that
+  it also can handle other special characters (e.g. Hstroke)
+  Initiated by Ivan Schreter, later modified by Lgb.
+  */
+class InsetLatexAccent: public Inset {
+public:
+       ///
+       InsetLatexAccent(); 
+       ///
+       InsetLatexAccent(LString const & string);
+       ///
+       InsetLatexAccent(InsetLatexAccent const&);
+       ///
+       ~InsetLatexAccent();
+       ///
+       int Ascent(LyXFont const &font) const;
+       ///
+       int Descent(LyXFont const &font) const;
+       ///
+       int Width(LyXFont const &font) const;
+       ///
+       bool DisplayISO8859_9(LyXFont font, LyXScreen &scr,
+                             int baseline, float &x);
+       ///
+       void Draw(LyXFont font, LyXScreen &scr, int baseline, float &x);
+       ///
+       void Write(FILE *file);
+       ///
+       void Read(LyXLex &lex);
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+       ///
+       bool Deletable() const;
+       ///
+       bool DirectWrite() const;
+       ///
+       Inset* Clone();
+       ///
+       Inset::Code LyxCode()const;
+       ///
+       bool IsEqual(Inset* other);
+       ///
+       inline bool CanDisplay();
+private:
+       /// all the accent types
+       enum ACCENT_TYPES{
+               ///
+               ACUTE, // 0
+               ///
+               GRAVE,
+               ///
+               MACRON,
+               ///
+               TILDE,
+               ///
+               UNDERBAR,
+               ///
+               CEDILLA, // 5
+               ///
+               UNDERDOT,
+               ///
+               CIRCLE,
+               ///
+               TIE,
+               ///
+               BREVE,
+               ///
+               CARON, // 10
+               ///
+               SPECIAL_CARON,
+               ///
+               HUNGARIAN_UMLAUT,
+               ///
+               UMLAUT,
+               ///
+               DOT,
+               ///
+               CIRCUMFLEX, // 15
+               ///
+               OGONEK,
+               ///
+               DOT_LESS_I,
+               ///
+               DOT_LESS_J, // 18
+               ///
+               lSLASH,
+               ///
+               LSLASH
+       };
+       
+       /// Check if we know the modifier and can display it ok on screen.
+       void checkContents();
+       ///
+       LString contents;
+       /// can display as proper char
+       bool  candisp;
+       /// modifier type
+       ACCENT_TYPES  modtype;
+       
+       /// remove dot from 'i' and 'j' or transform l,L into lslash,LSLaSH
+       bool  remdot;
+       /// add something to ascent - accent at the top
+       bool  plusasc;
+       /// add something to descent - underlined char
+       bool  plusdesc;
+       /// international char
+       char  ic;    
+};
+
+bool InsetLatexAccent::CanDisplay()
+{
+       return candisp;
+}
+
+#endif
+
diff --git a/src/insets/insetloa.C b/src/insets/insetloa.C
new file mode 100644 (file)
index 0000000..71b5582
--- /dev/null
@@ -0,0 +1,29 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1996-1998 The LyX Team.
+ * 
+ *======================================================*/
+
+// Created by Bernhard 970908
+
+#include <config.h>
+
+
+#ifdef __GNUG__
+#pragma implementation "insetloa.h"
+#pragma implementation "insetlof.h"
+#pragma implementation "insetlot.h"
+#endif
+
+#include "LaTeXFeatures.h"
+#include "insetloa.h"
+#include "insetlof.h"
+#include "insetlot.h"
+
+void InsetLOA::Validate(LaTeXFeatures &features) const 
+{ features.algorithm = true; }
diff --git a/src/insets/insetloa.h b/src/insets/insetloa.h
new file mode 100644 (file)
index 0000000..082826f
--- /dev/null
@@ -0,0 +1,54 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *                        1996-1998 LyX Team
+ * 
+ *======================================================*/
+
+#ifndef _INSET_LOA_H
+#define _INSET_LOA_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+#include "gettext.h"
+
+// Created by Bernhard 970807
+
+/** Used to insert table of algorithms
+ */
+class InsetLOA: public InsetCommand {
+public:
+       ///
+       InsetLOA(): InsetCommand("listofalgorithms") {}
+       ///
+       InsetLOA(Buffer *b): InsetCommand("listofalgorithms"),owner(b) {}
+        ///
+       void Validate(LaTeXFeatures &features) const;
+        ///
+        Inset* Clone() { return new InsetLOA(owner); }
+       ///
+       LString getScreenLabel() const { return _("List of Algorithms"); }
+
+       
+       //void Edit(int, int);
+        ///
+       unsigned char Editable() const {
+               return 0; // not yet
+       }
+       ///
+       bool Display() const { return true; }
+       ///
+       Inset::Code LyxCode() const { return Inset::LOA_CODE; }
+private:
+       ///
+       Buffer *owner;
+};
+
+#endif
diff --git a/src/insets/insetlof.C b/src/insets/insetlof.C
new file mode 100644 (file)
index 0000000..40945ef
--- /dev/null
@@ -0,0 +1,16 @@
+//#include <config.h>
+
+//#ifdef __GNUG__
+//#pragma implementation
+//#endif
+
+
+//#include "insettof.h"
+
+// InsetLOF::InsetLOF():
+//                InsetCommand("listoffigures")
+// {
+
+// }
+
+
diff --git a/src/insets/insetlof.h b/src/insets/insetlof.h
new file mode 100644 (file)
index 0000000..ee8e17a
--- /dev/null
@@ -0,0 +1,51 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *                        1996-1998 LyX Team
+ * 
+ *======================================================*/
+
+#ifndef _INSET_LOF_H
+#define _INSET_LOF_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+#include "gettext.h"
+
+// Created by Lgb 970527
+
+/** Used to insert table of contents
+ */
+class InsetLOF: public InsetCommand {
+public:
+       ///
+       InsetLOF(): InsetCommand("listoffigures") {}
+       ///
+       InsetLOF(Buffer *b): InsetCommand("listoffigures"),owner(b) {}
+        ///
+        Inset* Clone() { return new InsetLOF(owner); }
+       ///
+       LString getScreenLabel() const { return _("List of Figures"); }
+        
+       //void Edit(int, int);
+        ///
+       unsigned char Editable() const {
+               return 0; // not yet
+       }
+       ///
+       bool Display() const { return true; }
+       ///
+       Inset::Code LyxCode() const { return Inset::LOF_CODE; }
+private:
+       ///
+       Buffer *owner;
+};
+
+#endif
diff --git a/src/insets/insetlot.C b/src/insets/insetlot.C
new file mode 100644 (file)
index 0000000..de5846a
--- /dev/null
@@ -0,0 +1,16 @@
+//#include <config.h>
+
+//#ifdef __GNUG__
+//#pragma implementation
+//#endif
+
+
+//#include "insetlot.h"
+
+// InsetLOT::InsetLOT()
+//          : InsetCommand("listoftables")
+// {
+
+// }
+
+
diff --git a/src/insets/insetlot.h b/src/insets/insetlot.h
new file mode 100644 (file)
index 0000000..728bdd7
--- /dev/null
@@ -0,0 +1,51 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *                        1996-1998 LyX Team
+ * 
+ *======================================================*/
+
+#ifndef _INSET_LOT_H
+#define _INSET_LOT_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+#include "gettext.h"
+
+// Created by Lgb 970527
+
+/** Used to insert table of contents
+ */
+class InsetLOT: public InsetCommand {
+public:
+       ///
+       InsetLOT(): InsetCommand("listoftables") {}
+       ///
+       InsetLOT(Buffer *b): InsetCommand("listoftables"), owner(b) {}
+        ///
+        Inset* Clone() { return new InsetLOT(owner); }
+       ///
+       LString getScreenLabel() const { return _("List of Tables"); }
+        
+       //void Edit(int, int);
+        ///
+       unsigned char Editable() const {
+               return 0; // not yet
+       }
+       ///
+       bool Display() const { return true; }
+       ///
+       Inset::Code LyxCode() const { return Inset::LOT_CODE; }
+private:
+       ///
+       Buffer *owner;
+};
+
+#endif
diff --git a/src/insets/insetparent.C b/src/insets/insetparent.C
new file mode 100644 (file)
index 0000000..c190ce7
--- /dev/null
@@ -0,0 +1,59 @@
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1997-1998 LyX Team
+ * 
+ *======================================================*/
+
+
+// Created by asierra 970813
+
+#include <config.h>
+
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "insetparent.h"
+#include "filetools.h"
+#include "BufferView.h"
+#include "LyXView.h"
+#include "lyxfunc.h"
+#include "commandtags.h"
+
+
+extern BufferView *current_view;
+
+
+InsetParent::InsetParent(LString fn, Buffer* owner): InsetCommand("lyxparent")
+{
+    if (owner)
+       setContents(MakeAbsPath(fn, OnlyPath(owner->getFileName())));
+    else
+       setContents(fn);
+}
+
+void InsetParent::Edit(int, int)
+{    
+    current_view->getOwner()->getLyXFunc()->Dispatch(LFUN_CHILDOPEN, 
+                                                    getContents().c_str());
+}
+
+// LaTeX must just ignore this command
+int InsetParent::Latex(FILE *file, signed char fragile)
+{
+    fprintf(file, "%%#{lyx}");
+    InsetCommand::Latex(file, fragile);
+    return 0;
+}
+
+// LaTeX must just ignore this command
+int InsetParent::Latex(LString &file, signed char fragile)
+{
+    file += "%%#{lyx}";
+    InsetCommand::Latex(file, fragile);
+    return 0;
+}
diff --git a/src/insets/insetparent.h b/src/insets/insetparent.h
new file mode 100644 (file)
index 0000000..adbf47f
--- /dev/null
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1997-1998 LyX Team
+ * 
+ *======================================================*/
+
+#ifndef _INSET_PARENT_H
+#define _INSET_PARENT_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+#include "gettext.h"
+// Created by asierra 970813
+
+/** Reference to the parent document.
+
+  Useful to load a parent document from a child document and to
+  share parent's properties between preambleless children. 
+ */
+class InsetParent: public InsetCommand {
+public:
+       /// Non-standard LyX macro
+       InsetParent(): InsetCommand("lyxparent") { }
+       ///
+        InsetParent(LString fn, Buffer* owner=0);
+       ///
+        ~InsetParent() {}
+       /// 
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+        ///
+        Inset* Clone() { return new InsetParent(getContents()); }
+       ///
+       LString getScreenLabel() const { return LString(_("Parent:"))+getContents(); }
+        ///
+       void Edit(int, int);
+        ///
+       unsigned char Editable() const {
+               return 1;
+       }
+        ///
+        Inset::Code LyxCode() const { return Inset::PARENT_CODE; }
+        ///
+        void setParent(LString fn) { setContents(fn); }
+};
+
+#endif
diff --git a/src/insets/insetquotes.C b/src/insets/insetquotes.C
new file mode 100644 (file)
index 0000000..865f529
--- /dev/null
@@ -0,0 +1,333 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "insetquotes.h"
+#include "lyxlib.h"
+#include "error.h"
+#include "lyxfont.h"
+#include "lyxrc.h"
+#include "buffer.h"
+#include "LaTeXFeatures.h"
+
+//     $Id: insetquotes.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $       
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: insetquotes.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $";
+#endif /* lint */
+
+// Quotes. Used for the various quotes. German, English, French,
+// Danish, Polish, all either double or single.
+
+extern LyXRC *lyxrc;
+extern BufferView *current_view;
+
+// codes used to read/write quotes to LyX files
+static char const *language_char = "esgpfa";
+static char const *side_char = "lr" ;
+static char const *times_char ="sd";
+
+// List of known quote chars
+static char const *quote_char = ",'`<>";
+
+// Index of chars used for the quote. Index is [side,language]
+int quote_index[2][6] = 
+{ { 2, 1, 0, 0, 3, 4 },    // "'',,<>" 
+  { 1, 1, 2, 1, 4, 3 } };  // "`'`'><"
+
+// Corresponding LaTeX code, for double and single quotes.
+static char const *latex_quote_t1[2][5] =
+{ { "\\quotesinglbase{}",  "'", "`", 
+    "\\guilsinglleft{}", "\\guilsinglright{}" }, 
+  { ",,", "''", "``", "<<", ">>" } };
+
+static char const *latex_quote_ot1[2][5] =
+{ { "\\quotesinglbase{}",  "'", "`", 
+    "\\guilsinglleft{}", "\\guilsinglright{}" }, 
+  { "\\quotedblbase{}", "''", "``",
+    "\\guillemotleft{}", "\\guillemotright{}" } };
+
+static char const *latex_quote_babel[2][5] =
+{ { "\\glq{}",  "'", "`", "\\flq{}", "\\frq{}" },
+  { "\\glqq{}", "''", "``", "\\flqq{}", "\\frqq{}" } };
+
+
+InsetQuotes::InsetQuotes(LString const &string)
+{
+       ParseString(string);
+}
+
+InsetQuotes::InsetQuotes(InsetQuotes::quote_language l,
+                        InsetQuotes::quote_side s,
+                        InsetQuotes::quote_times t)
+       : language(l), side(s), times(t)
+{
+}
+
+
+InsetQuotes::InsetQuotes(char c, BufferParams const &params)
+       : language(params.quotes_language), times(params.quotes_times)
+{
+       // Decide whether left or right 
+       switch(c) {
+       case ' ': case '(': case '{': case '[': case '-': case ':':
+       case LYX_META_HFILL: case LYX_META_PROTECTED_SEPARATOR:
+       case LYX_META_NEWLINE: 
+               side = InsetQuotes::LeftQ;   // left quote 
+               break;
+       default:
+               side = InsetQuotes::RightQ;  // right quote
+       }
+}
+
+
+void InsetQuotes::ParseString(LString string)
+{
+       int i;
+       if (string.length() != 3) {
+               lyxerr.print("ERROR (InsetQuotes::InsetQuotes):"
+                             " bad string length.");
+               string = "eld";
+       }
+
+       for (i=0;i<6;i++) {
+               if (string[0] == language_char[i]) {
+                       language = (InsetQuotes::quote_language)i;
+                       break;
+               }
+       }
+       if (i>=6) {
+               lyxerr.print("ERROR (InsetQuotes::InsetQuotes):"
+                             " bad language specification.");
+               language = InsetQuotes::EnglishQ; 
+       }
+
+       for (i=0;i<2;i++) {
+               if (string[1] == side_char[i]) {
+                       side = (InsetQuotes::quote_side)i;
+                       break;
+               }
+       }
+       if (i>=2) {
+               lyxerr.print("ERROR (InsetQuotes::InsetQuotes):"
+                             " bad side specification.");
+               side = InsetQuotes::LeftQ; 
+       }
+
+       for (i=0;i<2;i++) {
+               if (string[2] == times_char[i]) {
+                       times = (InsetQuotes::quote_times)i;
+                       break;
+               }
+       }
+       if (i>=2) {
+               lyxerr.print("ERROR (InsetQuotes::InsetQuotes):"
+                             " bad times specification.");
+               times = InsetQuotes::DoubleQ; 
+       }
+}
+
+LString InsetQuotes::DispString() const
+{
+       LString disp;
+
+       disp += quote_char[quote_index[side][language]];
+               
+       if (times == InsetQuotes::DoubleQ)
+               disp += disp;
+
+       if (lyxrc->font_norm == "iso8859-1") 
+               if (disp == "<<")
+                       disp = '«';
+               else if (disp == ">>")
+                       disp = '»';
+       
+       return disp;
+}
+
+
+int InsetQuotes::Ascent(LyXFont const &font) const
+{
+       return font.maxAscent();
+}
+
+
+int InsetQuotes::Descent(LyXFont const &font) const
+{
+       return font.maxDescent();
+}
+
+
+int InsetQuotes::Width(LyXFont const &font) const
+{
+       LString text = DispString();
+       int w = 0;
+
+       for (int i = 0; i < text.length(); i++) {
+               if (text[i] == ' ')
+                       w += font.width('i');
+               else if (i == 0 || text[i] != text[i-1])
+                       w += font.width(text[i]);
+               else
+                       w += font.width(',');
+       }
+
+       return w;
+}
+
+
+LyXFont InsetQuotes::ConvertFont(LyXFont font)
+{
+       /* quotes-insets cannot be latex of any kind */
+       font.setLatex(LyXFont::OFF);
+       return font;
+}
+
+
+void InsetQuotes::Draw(LyXFont font, LyXScreen &scr,
+                      int baseline, float &x)
+{
+       LString text = DispString();
+
+       for (int i = 0; i < text.length(); i++) {
+               if (text[i] == ' ') 
+                       x += font.width('i');
+               else if (i == text.length()-1 || text[i] != text[i+1]) {
+                       scr.drawString(font, &text[i], baseline, int(x));
+                       x += font.width(text[i]);
+               } else {
+                       scr.drawString(font, &text[i+1], baseline, int(x));
+                       x += font.width(',');
+               }
+       }
+       
+}
+
+
+void InsetQuotes::Write(FILE *file)
+{
+       LString text = LString(language_char[language]) + side_char[side] +
+                      times_char[times]; 
+       fprintf(file, "Quotes %s", text.c_str());
+}
+
+
+void InsetQuotes::Read(LyXLex &lex)
+{
+       lex.nextToken();
+       ParseString(lex.GetString());
+}
+
+
+int InsetQuotes::Latex(FILE *file, signed char /*fragile*/)
+{
+       LString quote;
+       int res = Latex(quote, 0);
+       fprintf(file, "%s", quote.c_str()); 
+       return res;
+}
+
+int InsetQuotes::Latex(LString &file, signed char /*fragile*/)
+{
+       LString doclang =
+               current_view->currentBuffer()->GetLanguage();
+       int quoteind = quote_index[side][language];
+       LString qstr;
+       
+       if (lyxrc->fontenc == "T1") {
+               qstr = latex_quote_t1[times][quoteind];
+       }
+       else if (doclang == "default") {
+               qstr = latex_quote_ot1[times][quoteind];
+       } 
+       else if (language == InsetQuotes::FrenchQ 
+                && times == InsetQuotes::DoubleQ
+                && doclang == "frenchb") {
+               if (side == InsetQuotes::LeftQ) 
+                       qstr = "\\og{}";
+               else 
+                       qstr = " \\fg{}";
+       } 
+       else 
+               qstr = latex_quote_babel[times][quoteind];
+
+       // protect against !` and ?` ligatures.
+       if ((file.suffixIs('?') || file.suffixIs('!'))
+           && qstr[0] == '`')
+               qstr = "{}" + qstr;
+
+       file += qstr;
+       return 0;
+}
+
+
+int InsetQuotes::Linuxdoc(LString &file)
+{
+       file += "\"";
+
+       return 0;
+}
+
+
+int InsetQuotes::DocBook(LString &file)
+{
+       if(times == InsetQuotes::DoubleQ) {
+               if (side == InsetQuotes::LeftQ)
+                       file += "&ldquor;";
+               else
+                       file += "&rdquor;";
+       } else {
+               if (side == InsetQuotes::LeftQ)
+                       file += "&lsquor;";
+               else
+                       file += "&rsquor;";
+       }
+       return 0;
+}
+
+
+void InsetQuotes::Validate(LaTeXFeatures &features) const 
+{
+       char type = quote_char[quote_index[side][language]];
+
+       if (current_view->currentBuffer()->GetLanguage() == "default" 
+           && lyxrc->fontenc != "T1") {
+               if (times == InsetQuotes::SingleQ) 
+                       switch (type) {
+                       case ',': features.quotesinglbase = true; break;
+                       case '<': features.guilsinglleft = true; break;
+                       case '>': features.guilsinglright = true; break;
+                       default: break;
+                       }
+               else 
+                       switch (type) {
+                       case ',': features.quotedblbase = true; break;
+                       case '<': features.guillemotleft = true; break;
+                       case '>': features.guillemotright = true; break;
+                       default: break;
+                       }
+       }
+}
+
+Inset* InsetQuotes::Clone()
+{
+  return new InsetQuotes(language, side, times);
+}
+
+
+Inset::Code InsetQuotes::LyxCode() const
+{
+  return Inset::QUOTE_CODE;
+}
diff --git a/src/insets/insetquotes.h b/src/insets/insetquotes.h
new file mode 100644 (file)
index 0000000..d08022b
--- /dev/null
@@ -0,0 +1,121 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+
+#ifndef _INSET_QUOTES_H
+#define _INSET_QUOTES_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "lyxinset.h"
+
+class BufferParams;
+
+class LString;
+struct LaTeXFeatures;
+
+
+/** Quotes.
+
+  Used for the various quotes. German, English, French, all either
+  double or single **/ 
+class InsetQuotes: public Inset {
+public:
+       ///
+       enum quote_language {
+               ///
+               EnglishQ,
+               ///
+               SwedishQ,
+               ///
+               GermanQ,
+               ///
+               PolishQ,
+               ///
+               FrenchQ,
+               ///
+               DanishQ
+       };
+       ///
+       enum quote_side {
+               ///
+               LeftQ,
+               ///
+               RightQ 
+       };
+       ///
+       enum quote_times {
+               ///
+               SingleQ,
+               ///
+               DoubleQ 
+       };
+       
+       /** The constructor works like this:
+         \begin{itemize}
+           \item fls <- french single quote left 
+           \item grd <- german double quote right 
+           \item etc.
+         \end{itemize}
+         */ 
+       InsetQuotes(LString const &string = "eld");
+       /// Create the right quote inset after character c
+       InsetQuotes(char c, BufferParams const &params);
+       ///
+       ~InsetQuotes() {}; //nothing to do
+
+       ///
+       int Ascent(LyXFont const &font) const;
+       ///
+       int Descent(LyXFont const &font) const;
+       ///
+       int Width(LyXFont const &font) const;
+       ///
+       void Draw(LyXFont font, LyXScreen &scr, int baseline, float &x);
+       ///
+       LyXFont ConvertFont(LyXFont font);
+       ///
+       void Write(FILE *file);
+       ///
+       void Read(LyXLex &lex);
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+       ///
+       void Validate(LaTeXFeatures &) const;
+       ///
+       Inset* Clone();
+       ///
+       Inset::Code LyxCode() const;
+private:
+       ///
+       quote_language language;
+       ///
+       quote_side side;
+       ///
+       quote_times times;
+
+       /** The parameters of the constructor are the language, the
+           side and the multiplicity of the quote.
+        */
+       InsetQuotes(quote_language l, quote_side s, quote_times t);
+       ///
+       void ParseString(LString string);
+       ///
+       LString DispString() const;
+};
+
+#endif
diff --git a/src/insets/insetref.C b/src/insets/insetref.C
new file mode 100644 (file)
index 0000000..a35d987
--- /dev/null
@@ -0,0 +1,262 @@
+#include <config.h>
+
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include FORMS_H_LOCATION 
+#include "insetref.h"
+#include "buffer.h"
+#include "error.h"
+#include "lyx_gui_misc.h" // CancelCloseBoxCB
+#include "LyXView.h"
+#include "lyxfunc.h"
+#include "commandtags.h"
+#include "gettext.h"
+
+extern BufferView *current_view;
+
+// Temporarily disabled the GUI code. Reasons:
+// - Only page-ref button works currently, IMO we should use a LyX action
+//   instead, to toggle the kind of refs.
+// - To change the label, IMO it's faster to delete the old one and insert
+//   a new one.
+// - To goto to the label, IMO it's much faster to just click on the
+//   inset. That's how I've implemented it now, I hope you'll like it.
+// - The more GUI code we can remove, the less work we'll have at
+//   the toolkit switch.
+//   (ale 970723)
+
+#if 0
+
+/* Header file generated with fdesign. */
+
+/**** Callback routines ****/
+
+static void ref_close_cb(FL_OBJECT *, long);
+static void goto_label_cb(FL_OBJECT *, long);
+static void label_change_cb(FL_OBJECT *, long);
+
+/**** Forms and Objects ****/
+
+typedef struct {
+       FL_FORM *ref;
+       void *vdata;
+       long ldata;
+       FL_OBJECT *pg_grp;
+       FL_OBJECT *flag1;
+       FL_OBJECT *flag2;
+} FD_ref;
+
+/* Form definition file generated with fdesign. */
+
+static
+FD_ref *create_form_ref(void)
+{
+  FL_OBJECT *obj;
+  FD_ref *fdui = (FD_ref *) fl_calloc(1, sizeof(*fdui));
+
+  fdui->ref = fl_bgn_form(FL_NO_BOX, 210, 170);
+  obj = fl_add_box(FL_UP_BOX,0,0,210,170,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,20,130,60,"");
+  obj = fl_add_button(FL_RETURN_BUTTON,120,130,80,30,_("Close"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,ref_close_cb,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,10,110,20,_("Reference Type"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+  obj = fl_add_button(FL_NORMAL_BUTTON,10,130,100,30,_("Goto Label"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,goto_label_cb,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,10,90,100,30,_("Change Label"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,label_change_cb,0);
+
+  fdui->pg_grp = fl_bgn_group();
+  fdui->flag1 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,20,30,20,20,_("Page Number"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->flag2 = obj = fl_add_checkbutton(FL_RADIO_BUTTON,20,50,20,20,_("Reference"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  fl_end_form();
+
+  fdui->ref->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+
+static FD_ref *form = 0;
+
+
+static
+void ref_close_cb(FL_OBJECT *, long)
+{
+       InsetRef *inset = (InsetRef*)form->vdata;
+
+       if (fl_get_button(form->flag1)) {
+               inset->setFlag(InsetRef::PAGE_REF);
+               inset->setCmdName("pageref");
+       } else {
+               inset->setFlag(InsetRef::REF);
+               inset->setCmdName("ref");
+       }
+               
+       fl_hide_form(form->ref);
+}
+
+
+static
+void goto_label_cb(FL_OBJECT *, long)
+{
+       // code yet to be written
+       InsetRef *inset = (InsetRef*)form->vdata;
+        inset->gotoLabel();
+#warning MAKEME!
+}
+
+
+static
+void label_change_cb(FL_OBJECT *, long)
+{
+       // code yet to be written
+       InsetRef *inset = (InsetRef*)form->vdata;
+#warning MAKEME!
+}
+
+#endif
+
+InsetRef::InsetRef(LString const & cmd, Buffer *bf)
+       : master(bf)
+{
+       scanCommand(cmd);
+       if (getCmdName() == "ref")
+               flag = InsetRef::REF;
+       else
+               flag = InsetRef::PAGE_REF;
+}
+
+
+InsetRef::InsetRef(InsetCommand const &inscmd, Buffer *bf)
+       : master(bf)
+{
+       setCmdName(inscmd.getCmdName());
+       setContents(inscmd.getContents());
+       setOptions(inscmd.getOptions());
+       if (getCmdName() == "ref")
+               flag = InsetRef::REF;
+       else
+               flag = InsetRef::PAGE_REF;
+}
+
+
+InsetRef::~InsetRef()
+{
+}
+
+
+void InsetRef::Edit(int, int)
+{
+        current_view->getOwner()->getLyXFunc()->Dispatch(LFUN_REFGOTO
+                                                        , getContents().c_str());
+//        gotoLabel();
+/*    
+        if (!form) { 
+                form = create_form_ref();
+               fl_set_form_atclose(form->ref, IgnoreCloseBoxCB, NULL);
+       }
+        form->vdata = this; 
+    
+       fl_set_button(form->flag1, (flag == InsetRef::REF) ? 1 : 0);
+       fl_set_button(form->flag2, (flag == InsetRef::PAGE_REF) ? 1 : 0);
+       
+        if (form->ref->visible) {
+               fl_raise_form(form->ref);
+       } else {
+               fl_show_form(form->ref,FL_PLACE_MOUSE, FL_FULLBORDER,
+                            _("Cross-Reference"));
+       }
+ */
+}
+
+
+LString InsetRef::getScreenLabel() const
+{
+       LString temp;
+       if (flag == InsetRef::PAGE_REF)
+               temp += _("Page: ");
+       else 
+               temp += _("Ref: ");
+       temp += getContents();
+       if(!current_view->currentBuffer()->isLatex() && !getOptions().empty()) {
+               temp += "||";
+               temp += getOptions();
+       }
+       return temp;
+}
+
+
+int InsetRef::Latex(FILE *file, signed char /*fragile*/)
+{
+       if(getOptions().empty())
+               fprintf(file, "%s", escape(getCommand()).c_str());
+       else {
+               LString ns;
+               InsetCommand clone= InsetCommand(getCmdName(),getContents(),ns);
+               fprintf(file, "%s", escape(clone.getCommand()).c_str());
+       }
+       return 0;
+}
+
+
+int InsetRef::Latex(LString &file, signed char /*fragile*/)
+{
+       if(getOptions().empty())
+               file += escape(getCommand());
+       else {
+               LString ns;
+               InsetCommand clone= InsetCommand(getCmdName(),getContents(),ns);
+               file += escape(clone.getCommand());
+       }
+       return 0;
+}
+
+
+int InsetRef::Linuxdoc(LString &file)
+{
+       file += "<ref id=\"" + getContents() + "\" name=\""+ getOptions() +"\" >" ;
+
+       return 0;
+}
+
+
+int InsetRef::DocBook(LString &file)
+{
+       file += "<link linkend=\"" + getContents() + "\">"+ getOptions() +"</link>" ;
+
+       return 0;
+}
+
+
+// This function escapes 8-bit characters and other problematic characters
+// It's exactly the same code as in insetlabel.C.
+LString InsetRef::escape(LString const & lab) const {
+       char hexdigit[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
+                             '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+       LString enc;
+       for (int i=0; i<lab.length(); i++) {
+               unsigned char c=lab[i];
+               if (c >= 128 || c=='=' || c=='%') {
+                       enc += '=';
+                       enc += hexdigit[c>>4];
+                       enc += hexdigit[c & 15];
+               } else {
+                       enc += (char) c;
+               }
+       }
+       return enc;
+}
diff --git a/src/insets/insetref.h b/src/insets/insetref.h
new file mode 100644 (file)
index 0000000..f751904
--- /dev/null
@@ -0,0 +1,89 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1997 LyX Team (this file was created this year)
+ * 
+ *======================================================*/
+
+#ifndef _INSET_REF_H
+#define _INSET_REF_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+#include "buffer.h"
+
+struct LaTeXFeatures;
+
+/** The reference inset  
+ */
+class InsetRef: public InsetCommand {
+public:
+        ///
+        enum Ref_Flags {
+               ///
+               REF,
+               ///
+               PAGE_REF
+       };
+       
+       ///
+       InsetRef(): InsetCommand("ref") { flag = InsetRef::REF; }
+       ///
+       InsetRef(LString const &, Buffer*);
+       ///
+       InsetRef(InsetCommand const&, Buffer*);
+       ///
+       ~InsetRef();
+        ///
+        Inset* Clone() { return new InsetRef (getCommand(), master); }
+       ///
+       Inset::Code LyxCode() const { return Inset::REF_CODE; }
+       ///
+       void Edit(int, int);
+       ///
+       unsigned char Editable() const {
+               return 1;
+       }
+        ///
+       bool Display() const { return false; }
+       ///
+       LString getScreenLabel() const;
+       ///
+       InsetRef::Ref_Flags getFlag() { return flag; }
+       ///
+       void setFlag(InsetRef::Ref_Flags f) { flag = f; }
+        ///
+        void gotoLabel();
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+private:
+       /// This function escapes 8-bit characters
+       LString escape(LString const &) const;
+       ///
+        Ref_Flags flag;
+        ///
+       Buffer *master;
+};
+
+
+inline
+void InsetRef::gotoLabel()
+{
+    if (master) {
+       master->gotoLabel(getContents());
+    }
+}
+
+#endif
diff --git a/src/insets/insetspecialchar.C b/src/insets/insetspecialchar.C
new file mode 100644 (file)
index 0000000..525b749
--- /dev/null
@@ -0,0 +1,216 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1997 Asger Alstrup
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "insetspecialchar.h"
+#include "lyxdraw.h"
+#include "error.h"
+#include "LaTeXFeatures.h"
+
+//     $Id: insetspecialchar.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $  
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: insetspecialchar.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $";
+#endif /* lint */
+
+InsetSpecialChar::InsetSpecialChar()
+{
+}
+
+
+InsetSpecialChar::InsetSpecialChar(Kind k)
+       : kind(k)
+{
+}
+
+
+InsetSpecialChar::~InsetSpecialChar()
+{
+}
+
+
+int InsetSpecialChar::Ascent(LyXFont const&font) const
+{
+       return font.maxAscent();
+}
+
+
+int InsetSpecialChar::Descent(LyXFont const&font) const
+{
+       return font.maxDescent();
+}
+
+
+int InsetSpecialChar::Width(LyXFont const&font) const
+{
+       LyXFont f = font;
+       switch (kind) {
+       case HYPHENATION:
+       {
+               int w = f.textWidth("-", 1);
+               if (w > 5) 
+                       w -= 2; // to make it look shorter
+               return w;
+       }
+       case END_OF_SENTENCE:
+       {
+               return f.textWidth(".", 1);
+       }
+       case LDOTS:
+       {
+               return f.textWidth(". . .", 5);
+       }
+       case MENU_SEPARATOR: {
+               return f.textWidth(" x ", 3);
+       }
+       }
+       return 1; // To shut up gcc
+}
+
+
+void InsetSpecialChar::Draw(LyXFont font, LyXScreen &scr,
+                           int baseline, float &x)
+{
+       switch (kind) {
+       case HYPHENATION:
+       {
+               font.setColor(LyXFont::MAGENTA);
+               scr.drawText(font, "-", 1, baseline, int(x));
+               x += Width(font);
+               break;
+       }
+       case END_OF_SENTENCE:
+       {
+               font.setColor(LyXFont::MAGENTA);
+               scr.drawText(font, ".", 1, baseline, int(x));
+               x += Width(font);
+               break;
+       }
+       case LDOTS:
+       {
+               font.setColor(LyXFont::MAGENTA);
+               scr.drawText(font, ". . .", 5, baseline, int(x));
+               x += Width(font);
+               break;
+       }
+       case MENU_SEPARATOR:
+       {
+               // A triangle the width and height of an 'x'
+               int w = font.textWidth("x", 1);
+               int ox = font.textWidth(" ", 1) + int(x);
+               int h = font.ascent('x');
+               XPoint p[4];
+               p[0].x = ox;    p[0].y = baseline;
+               p[1].x = ox;    p[1].y = baseline - h;
+               p[2].x = ox + w;p[2].y = baseline - h/2;
+               p[3].x = ox;    p[3].y = baseline;
+               scr.drawLines(getGC(gc_copy), p, 4);
+               x += Width(font);
+       }
+       }
+}
+
+
+// In lyxf3 this will be just LaTeX
+void InsetSpecialChar::Write(FILE *file)
+{
+       LString command;
+       switch (kind) {
+       case HYPHENATION:       command = "\\-";        break;
+       case END_OF_SENTENCE:   command = "\\@.";       break;
+       case LDOTS:             command = "\\ldots{}";  break;
+       case MENU_SEPARATOR:    command = "\\menuseparator"; break;
+       }
+       fprintf(file, "\\SpecialChar %s\n", command.c_str());
+}
+
+
+// This function will not be necessary when lyx3
+void InsetSpecialChar::Read(LyXLex &lex)
+{    
+       lex.nextToken();
+       LString command = lex.GetString();
+
+       if (command=="\\-")
+               kind = HYPHENATION;
+       else if (command=="\\@.")
+               kind = END_OF_SENTENCE;
+       else if (command=="\\ldots{}")
+               kind = LDOTS;
+       else if (command=="\\menuseparator")
+               kind = MENU_SEPARATOR;
+       else
+               lex.printError("InsetSpecialChar: Unknown kind: `$$Token'");
+}
+
+
+int InsetSpecialChar::Latex(FILE *file, signed char /*fragile*/)
+{
+       LString command;
+       signed char dummy = 0;
+       Latex(command, dummy);
+       fprintf(file, "%s", command.c_str());
+       return 0;
+}
+
+
+int InsetSpecialChar::Latex(LString &file, signed char /*fragile*/)
+{
+       switch (kind) {
+       case HYPHENATION:       file += "\\-";  break;
+       case END_OF_SENTENCE:   file += "\\@."; break;
+       case LDOTS:             file += "\\ldots{}";    break;
+       case MENU_SEPARATOR:    file += "\\lyxarrow{}"; break;
+       }
+       return 0;
+}
+
+
+int InsetSpecialChar::Linuxdoc(LString &file)
+{
+       switch (kind) {
+       case HYPHENATION:       file += "";     break;
+       case END_OF_SENTENCE:   file += "";     break;
+       case LDOTS:             file += "...";  break;
+       case MENU_SEPARATOR:    file += "->";   break;
+       }
+       return 0;
+}
+
+
+int InsetSpecialChar::DocBook(LString &file)
+{
+       switch (kind) {
+       case HYPHENATION:       file += "";     break;
+       case END_OF_SENTENCE:   file += "";     break;
+       case LDOTS:             file += "...";  break;
+       case MENU_SEPARATOR:    file += "->";   break;
+       }
+       return 0;
+}
+
+
+Inset* InsetSpecialChar::Clone()
+{
+       InsetSpecialChar *result = new InsetSpecialChar(kind);
+       return result;
+}
+
+
+void InsetSpecialChar::Validate(LaTeXFeatures& features) const
+{
+       if (kind == MENU_SEPARATOR) {
+               features.lyxarrow = true;
+       }
+}
diff --git a/src/insets/insetspecialchar.h b/src/insets/insetspecialchar.h
new file mode 100644 (file)
index 0000000..1a35435
--- /dev/null
@@ -0,0 +1,84 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1997 Asger Alstrup
+ *
+ *======================================================*/
+
+#ifndef _INSET_SPECIALCHAR_H
+#define _INSET_SPECIALCHAR_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "lyxinset.h"
+#include "LString.h"
+
+struct LaTeXFeatures;
+
+///  Used to insert special chars
+class InsetSpecialChar: public Inset {
+public:
+
+       /// The different kinds of special chars we support
+       enum Kind {
+               /// Optional hyphenation point (\-)
+               HYPHENATION,
+               /// ... (\ldots)
+               LDOTS,
+               /// End of sentence punctuation (\@)
+               END_OF_SENTENCE,
+               /// Menu separator
+               MENU_SEPARATOR
+       };
+
+       ///
+       InsetSpecialChar();
+       ///
+       InsetSpecialChar(Kind k);
+       ///
+       ~InsetSpecialChar();
+       ///
+       int Ascent(LyXFont const &font) const;
+       ///
+       int Descent(LyXFont const &font) const;
+       ///
+       int Width(LyXFont const &font) const;
+       ///
+       void Draw(LyXFont, LyXScreen &scr, int baseline, float &x);
+       ///
+       void Write(FILE *file);
+       /// Will not be used when lyxf3
+       void Read(LyXLex &lex);
+       /// 
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+       ///
+       Inset* Clone();
+       ///  
+       Inset::Code LyxCode() const
+       {
+               return Inset::NO_CODE;
+       }
+       /// We don't need \begin_inset and \end_inset
+       bool DirectWrite() const 
+       {
+               return true;
+       };
+       ///
+       void Validate(LaTeXFeatures &) const;
+private:
+       /// And which kind is this?
+       Kind kind;
+};
+
+#endif
diff --git a/src/insets/insettoc.C b/src/insets/insettoc.C
new file mode 100644 (file)
index 0000000..e93003c
--- /dev/null
@@ -0,0 +1,32 @@
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "insettoc.h"
+#include "buffer.h"
+#include "bufferlist.h"
+#include "commandtags.h"
+#include "lyxfunc.h"
+#include "LyXView.h"
+
+extern BufferView *current_view;
+
+void InsetTOC::Edit(int, int)
+{
+       current_view->getOwner()->getLyXFunc()->Dispatch(LFUN_TOCVIEW);
+}
+
+int InsetTOC::Linuxdoc(LString &file)
+{
+       file += "<toc>";
+       return 0;
+}
+
+
+int InsetTOC::DocBook(LString &file)
+{
+       file += "<toc></toc>";
+       return 0;
+}
diff --git a/src/insets/insettoc.h b/src/insets/insettoc.h
new file mode 100644 (file)
index 0000000..9b8ce97
--- /dev/null
@@ -0,0 +1,55 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Word Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *                        1996-1998 The LyX Team.
+ * 
+ *======================================================*/
+
+#ifndef _INSET_TOC_H
+#define _INSET_TOC_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+#include "gettext.h"
+
+// Created by Lgb 970527
+
+/** Used to insert table of contents
+ */
+class InsetTOC: public InsetCommand {
+public:
+       ///
+       InsetTOC(): InsetCommand("tableofcontents") {}
+       ///
+       InsetTOC(Buffer *b): InsetCommand("tableofcontents"),owner(b){}
+        ///
+        Inset* Clone() { return new InsetTOC(owner); }
+       ///
+       LString getScreenLabel() const { return _("Table of Contents"); }
+       /// On edit, we open the TOC pop-up
+       void Edit(int, int);
+        ///
+       unsigned char Editable() const {
+               return 1;
+       }
+       ///
+       bool Display() const { return true; }
+       ///
+       Inset::Code LyxCode() const { return Inset::TOC_CODE; }
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+private:
+       ///
+       Buffer *owner;
+};
+
+#endif
diff --git a/src/insets/inseturl.C b/src/insets/inseturl.C
new file mode 100644 (file)
index 0000000..a836646
--- /dev/null
@@ -0,0 +1,207 @@
+#include <config.h>
+
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include FORMS_H_LOCATION 
+#include "inseturl.h"
+#include "LString.h"
+#include "commandtags.h"
+#include "gettext.h"
+#include "LaTeXFeatures.h"
+#include "lyx_gui_misc.h" // CancelCloseBoxCB
+
+extern BufferView *current_view;
+extern void UpdateInset(Inset* inset, bool mark_dirty = true);
+
+InsetUrl::InsetUrl(LString const & cmd)
+       : form(0)
+{
+       scanCommand(cmd);
+       if (getCmdName() == "url")
+               flag = InsetUrl::URL;
+       else
+               flag = InsetUrl::HTML_URL;
+}
+
+
+InsetUrl::InsetUrl(InsetCommand const &inscmd)
+       : form(0)
+{
+       setCmdName(inscmd.getCmdName());
+       setContents(inscmd.getContents());
+       setOptions(inscmd.getOptions());
+       if (getCmdName() == "url")
+               flag = InsetUrl::URL;
+       else
+               flag = InsetUrl::HTML_URL;
+}
+
+
+InsetUrl::InsetUrl(LString const &ins_name,LString const &ins_cont,
+                  LString const &ins_opt)
+       : form(0)
+{
+       setCmdName(ins_name);
+       setContents(ins_cont);
+       setOptions(ins_opt);
+       if (ins_name == "url")
+               flag = InsetUrl::URL;
+       else
+               flag = InsetUrl::HTML_URL;
+}
+
+
+InsetUrl::~InsetUrl()
+{
+       if (form) {
+               fl_hide_form(form);
+               fl_free_form(form);
+               form = 0;
+       }
+}
+
+
+void InsetUrl::CloseUrlCB(FL_OBJECT *ob, long)
+{
+       InsetUrl *inset = (InsetUrl*) ob->u_vdata;
+       LString url = fl_get_input(inset->url_name);
+       LString name = fl_get_input(inset->name_name);
+       LString cmdname;
+       if (fl_get_button(inset->radio_html))
+               cmdname = "htmlurl";
+       else
+               cmdname = "url";
+       
+       Buffer *buffer = current_view->currentBuffer();
+       
+       if ((url != inset->getContents() ||
+            name != inset->getOptions() ||
+            cmdname != inset->getCmdName())
+           && !(buffer->isReadonly()) ) {
+               buffer->markDirty();
+               inset->setContents(url);
+               inset->setOptions(name);
+               inset->setCmdName(cmdname);
+               if (cmdname == "url")
+                       inset->flag = InsetUrl::URL;
+               else
+                       inset->flag = InsetUrl::HTML_URL;
+               UpdateInset(inset);
+       }
+       
+       if (inset->form) {
+               fl_hide_form(inset->form);
+               inset->form = NULL;
+       }
+}
+
+
+void InsetUrl::Edit(int, int)
+{
+       if(current_view->currentBuffer()->isReadonly())
+               WarnReadonly();
+
+       if (!form) {
+               FL_OBJECT *obj;
+               form = fl_bgn_form(FL_NO_BOX, 530, 170);
+               obj = fl_add_box(FL_UP_BOX,0,0,530,170,"");
+               url_name = obj = fl_add_input(FL_NORMAL_INPUT,50,30,460,30,idex(_("Url|#U")));
+               fl_set_button_shortcut(obj,scex(_("Url|#U")),1);
+               name_name = obj = fl_add_input(FL_NORMAL_INPUT,50,80,460,30,idex(_("Name|#N")));
+               fl_set_button_shortcut(obj,scex(_("Name|#N")),1);
+               obj = fl_add_button(FL_RETURN_BUTTON,360,130,100,30,idex(_("Close|#C^[^M")));
+               fl_set_button_shortcut(obj,scex(_("Close|#C^[^M")),1);
+               obj->u_vdata = this;
+               fl_set_object_callback(obj,CloseUrlCB,0);
+               radio_html = obj = fl_add_checkbutton(FL_PUSH_BUTTON,50,130,240,30,idex(_("HTML type|#H")));
+               fl_set_button_shortcut(obj,scex(_("HTML type|#H")),1);
+               fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+               fl_end_form();
+               fl_set_form_atclose(form, CancelCloseBoxCB, NULL);
+       }
+       fl_set_input(url_name, getContents().c_str());
+       fl_set_input(name_name, getOptions().c_str());
+       switch(flag) {
+       case InsetUrl::URL:
+               fl_set_button(radio_html, 0);
+               break;
+       case InsetUrl::HTML_URL:
+               fl_set_button(radio_html, 1);
+               break;
+       }
+       
+       if (form->visible) {
+               fl_raise_form(form);
+       } else {
+               fl_show_form(form, FL_PLACE_MOUSE,
+                            FL_FULLBORDER, _("Insert Url"));
+       }
+}
+
+
+LString InsetUrl::getScreenLabel() const
+{
+       LString temp;
+       if (flag == InsetUrl::HTML_URL)
+               temp += _("HtmlUrl: ");
+       else 
+               temp += _("Url: ");
+       temp += getContents();
+       if(!getOptions().empty()) {
+               temp += "||";
+               temp += getOptions();
+       }
+       return temp;
+}
+
+
+int InsetUrl::Latex(FILE *file, signed char fragile)
+{
+       LString latex_output;
+       int res = Latex(latex_output, fragile);
+       fprintf(file, "%s", latex_output.c_str());
+
+       return res;
+}
+
+
+int InsetUrl::Latex(LString &file, signed char fragile)
+{
+       if (!getOptions().empty())
+               file += getOptions() + ' ';
+       if (fragile)
+               file += "\\protect";
+
+       file += "\\url{" + getContents() + '}';
+
+       return 0;
+}
+
+
+int InsetUrl::Linuxdoc(LString &file)
+{
+       file +=  "<"+ getCmdName() +
+                " url=\""  + getContents()+"\"" +
+                " name=\"" + getOptions() +"\">";
+
+       return 0;
+}
+
+
+int InsetUrl::DocBook(LString &file)
+{
+       file +=  "<ulink url=\""  + getContents() + "\">" +
+                getOptions() +"</ulink>";
+
+       return 0;
+}
+
+
+void InsetUrl::Validate(LaTeXFeatures& features) const
+{
+       features.url = true;
+}
diff --git a/src/insets/inseturl.h b/src/insets/inseturl.h
new file mode 100644 (file)
index 0000000..c995be0
--- /dev/null
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+/* This file is part of*
+ * ======================================================
+ *
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1997 LyX Team (this file was created this year)
+ * 
+ *======================================================*/
+
+#ifndef _INSET_URL_H
+#define _INSET_URL_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "insetcommand.h"
+#include "buffer.h"
+
+struct LaTeXFeatures;
+
+/** The url inset  
+ */
+class InsetUrl: public InsetCommand {
+public:
+        ///
+        enum Url_Flags {
+               ///
+               URL,
+               ///
+               HTML_URL
+       };
+       
+       ///
+       InsetUrl(): InsetCommand("url"), form(0) { flag = InsetUrl::URL; }
+       ///
+       InsetUrl(LString const &);
+       ///
+       InsetUrl(InsetCommand const&);
+       ///
+       InsetUrl(LString const &,LString const &,LString const &);
+       ///
+       ~InsetUrl();
+        ///
+        Inset* Clone() { return new InsetUrl(getCommand()); }
+       ///
+       Inset::Code LyxCode() const { return Inset::URL_CODE; }
+       ///
+       void Validate(LaTeXFeatures &) const;
+       ///
+       void Edit(int, int);
+       ///
+       unsigned char Editable() const {
+               return 1;
+       }
+       ///
+       char const* EditMessage() {return "Opened Url";}
+        ///
+       bool Display() const { return false; }
+       ///
+       LString getScreenLabel() const;
+       ///
+       InsetUrl::Url_Flags getFlag() { return flag; }
+       ///
+       void setFlag(InsetUrl::Url_Flags f) { flag = f; }
+        ///
+        void gotoLabel();
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+private:
+       ///
+        Url_Flags flag;
+       ///
+        FL_FORM *form;
+       ///
+       FL_OBJECT *url_name;
+       ///
+       FL_OBJECT *name_name;
+       ///
+       FL_OBJECT *radio_html;
+       ///
+       static void CloseUrlCB(FL_OBJECT *, long data);
+};
+
+#endif
diff --git a/src/insets/lyxinset.h b/src/insets/lyxinset.h
new file mode 100644 (file)
index 0000000..8995208
--- /dev/null
@@ -0,0 +1,211 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+#ifndef _LYXINSET_H
+#define _LYXINSET_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "definitions.h"
+#include "gettext.h"
+#include "lyxfont.h"
+#include "lyxlex.h"
+#include "lyxscreen.h"
+
+class Buffer;
+struct LaTeXFeatures;
+
+/// Insets
+class Inset {
+public:
+       /** This is not quite the correct place for this enum, but it is
+         better than definitions.h. I think the correct would be to let
+         each subclass of Inset declare its own enum code. Actually the
+         notion of an Inset::Code should be avoided, but I am not sure how
+         this could be done in a cleaner way. */
+       enum Code {
+               ///
+               NO_CODE,
+               ///
+               TOC_CODE,  // do these insets really need a code? (ale)
+               ///
+               LOF_CODE,
+               ///
+               LOT_CODE,
+               ///
+               LOA_CODE,
+               ///
+               QUOTE_CODE,
+               ///
+               MARK_CODE,
+               ///
+               REF_CODE,
+               ///
+               URL_CODE,
+               ///
+               HTMLURL_CODE,
+               ///
+               SEPARATOR_CODE,
+               ///
+               ENDING_CODE,
+               ///
+               LABEL_CODE,
+               ///
+               IGNORE_CODE,
+               ///
+               ACCENT_CODE,
+               ///
+               MATH_CODE,
+               ///
+               INDEX_CODE,
+               ///
+               INCLUDE_CODE,
+               ///
+               GRAPHICS_CODE,
+               ///
+               PARENT_CODE,
+               ///
+               BIBTEX_CODE
+       };
+
+       ///
+       virtual ~Inset(){};
+       ///
+       virtual int Ascent(LyXFont const &font) const=0;
+       ///
+       virtual int Descent(LyXFont const &font) const=0;
+       ///
+       virtual int Width(LyXFont const& font) const=0;
+       ///
+       virtual LyXFont ConvertFont(LyXFont font);
+       ///
+       virtual void Draw(LyXFont font, LyXScreen &scr, int baseline, float &x)=0;
+       ///
+       //virtual void setBuffer(Buffer const&) {;}
+       /// what appears in the minibuffer when opening
+       virtual char const* EditMessage() {return _("Opened inset");}
+       ///
+       virtual void Edit(int, int);
+       ///
+       virtual unsigned char Editable() const;
+       ///
+       virtual bool AutoDelete() const;
+       ///
+       virtual void Write(FILE *file)=0;
+       ///
+       virtual void Read(LyXLex &lex)=0;
+       /** returns the number of rows (\n's) of generated tex code.
+        fragile != 0 means, that the inset should take care about
+        fragile commands by adding a \protect before.
+        */
+       virtual int Latex(FILE *file, signed char fragile)=0;
+       virtual int Latex(LString &file, signed char fragile)=0;
+       ///
+       virtual int Linuxdoc(LString &/*file*/) = 0;
+       ///
+       virtual int DocBook(LString &/*file*/) = 0;
+       /// Updates needed features for this inset.
+       virtual void Validate(LaTeXFeatures &features) const;
+       ///
+       virtual bool Deletable() const;
+
+       /// returns LyX code associated with the inset. Used for TOC, ...)
+       virtual Inset::Code LyxCode() const = 0;
+  
+       /// Get the label that appears at screen
+       virtual LString getLabel(int) const {
+               return LString();
+       }
+
+       /// used for autocorrection
+       virtual bool IsEqual(Inset* /*other*/){
+               return false;
+       }
+
+       ///
+       virtual Inset* Clone()=0;
+
+       /// returns true to override begin and end inset in file
+       virtual bool DirectWrite() const;
+
+       /// Returns true if the inset should be centered alone
+       virtual bool Display() const { return false; }  
+       /// Changes the display state of the inset
+       virtual void SetDisplay(bool) {  }  
+       ///
+       virtual int GetNumberOfLabels() const {
+               return 0;
+       }
+
+};
+
+
+//  Updatable Insets. These insets can be locked and receive
+//  directly user interaction. Currently used only for mathed.
+//  Note that all pure methods from Inset class are pure here too.
+//  [Alejandro 080596] 
+
+/** Extracted from Matthias notes:
+  * 
+  * An inset can simple call LockInset in it's edit call and *ONLY* 
+  * in it's edit call.
+  *
+  * Unlocking is either done by LyX or the inset itself with a 
+  * UnlockInset-call
+  *
+  * During the lock, all button and keyboard events will be modified
+  * and send to the inset through the following inset-features. Note that
+  * Inset::InsetUnlock will be called from inside UnlockInset. It is meant
+  * to contain the code for restoring the menus and things like this.
+  * 
+  * If a inset wishes any redraw and/or update it just has to call
+  * UpdateInset(this).
+  * 
+  * It's is completly irrelevant, where the inset is. UpdateInset will
+  * find it in any paragraph in any buffer. 
+  * Of course the_locking_inset and the insets in the current paragraph/buffer
+  *  are checked first, so no performance problem should occur.
+  */
+class UpdatableInset: public Inset {
+public:
+       ///
+       virtual ~UpdatableInset() { };
+       ///
+       virtual unsigned char Editable() const;
+   
+       /// may call ToggleLockedInsetCursor
+       virtual void ToggleInsetCursor();
+       ///
+       virtual void GetCursorPos(int&, int&) { }
+       ///
+       virtual void InsetButtonPress(int x, int y, int button);
+       ///
+       virtual void InsetButtonRelease(int x, int y, int button);
+       
+       ///
+       virtual void InsetKeyPress(XKeyEvent *ev);
+       ///
+       virtual void InsetMotionNotify(int x, int y, int state);
+       ///
+       virtual void InsetUnlock();
+   
+       ///  An updatable inset could handle lyx editing commands
+       virtual bool LocalDispatch(int, char const*) { return false; };
+       //
+       bool isCursorVisible() const { return cursor_visible; }
+protected:
+       ///
+       bool cursor_visible;
+};
+
+
+#endif
diff --git a/src/intl.C b/src/intl.C
new file mode 100644 (file)
index 0000000..fc6266c
--- /dev/null
@@ -0,0 +1,366 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+/*
+ *     International support for LyX
+ */
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+#include FORMS_H_LOCATION
+#include "intl.h"
+#include "form1.h"
+#include "tex-strings.h"
+#include "combox.h"
+#include "lyx_gui_misc.h" // CancelCloseBoxCB
+#include "error.h"
+#include "lyxrc.h"
+#include "trans_mgr.h"
+
+
+//     $Id: intl.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $      
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: intl.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+// lyx rc 
+extern LyXRC* lyxrc;
+
+
+Intl::Intl()
+       : prim_lang(lyxrc->primary_kbmap), 
+         sec_lang(lyxrc->secondary_kbmap),
+         trans(new TransManager)
+{
+       keymapon = lyxrc->use_kbmap;
+       chsetcode = NULL;
+       primarykeymap = false;
+       curkeymap = 0;
+       otherkeymap = 0;
+}
+
+
+Intl::~Intl()
+{
+}
+
+
+int Intl::SetPrimary(LString const & lang)
+{
+       if (lyxerr.debugging(Error::KBMAP))
+               lyxerr.print("Primary: `" + lang + "'");
+       return trans->SetPrimary(lang);
+}
+
+
+int Intl::SetSecondary(LString const & lang)
+{
+       if (lyxerr.debugging(Error::KBMAP))
+               lyxerr.print("Secondary: `" + lang + "'");
+       return trans->SetSecondary(lang);
+}
+
+
+void Intl::update()
+{
+       int off,prim,sec;
+       
+       off=prim=sec=0;
+       
+       if (!keymapon) {
+               off=1;
+       } else {
+               if (primarykeymap) {
+                       prim=1;
+               } else {
+                       sec=1;
+               }
+       }
+       
+       fl_set_button(fd_form_keymap->KeyOffBtn,off);
+       fl_set_button(fd_form_keymap->KeyOnBtn,prim);
+       fl_set_button(fd_form_keymap->KeyOnBtn2,sec);
+}
+
+
+void Intl::KeyMapOn(bool on)
+       /* turn on/off key mappings, status in keymapon */
+{
+       keymapon = on;
+
+       if (!fd_form_keymap) return;
+       
+       fl_set_button(fd_form_keymap->KeyOffBtn, 0);
+       fl_set_button(fd_form_keymap->KeyOnBtn, 0);
+       fl_set_button(fd_form_keymap->KeyOnBtn2, 0);
+
+       if (on) {
+               if (primarykeymap) {
+                       KeyMapPrim();
+               } else {
+                       KeyMapSec();
+               }
+       } else {
+               fl_set_button(fd_form_keymap->KeyOffBtn, 1);
+               fl_hide_object(fd_form_keymap->KeymapErr);
+               trans->DisableKeymap();
+       }
+}
+
+
+void Intl::ToggleKeyMap()
+{
+       if (keymapon && primarykeymap) {
+               KeyMapSec();
+       } else if (keymapon) {
+               KeyMapOn(false);
+       } else  
+               KeyMapPrim();
+}
+
+
+void Intl::KeyMapPrim()
+{
+       int i;
+       LString p;
+
+       fl_set_button(fd_form_keymap->KeyOffBtn, 0);
+       fl_set_button(fd_form_keymap->KeyOnBtn, 1);
+       fl_set_button(fd_form_keymap->KeyOnBtn2, 0);
+
+       /* read text from choice */
+       i = Language->get();
+       
+       if (lyxerr.debugging(Error::KBMAP))
+               lyxerr.print(LString("Table: ") + tex_babel[i-1]);
+
+       if (i == otherkeymap)
+               p = fl_get_input(fd_form_keymap->OtherKeymap);
+       else
+               p = Language->getline();
+
+       curkeymap = i;
+
+       if (p.empty() || trans->SetPrimary(p)) {
+               // error selecting keymap
+               fl_show_object(fd_form_keymap->KeymapErr);
+               update();
+       } else {
+               // no error
+               trans->EnablePrimary();
+               keymapon = true;
+               primarykeymap = true;
+               fl_hide_object(fd_form_keymap->KeymapErr);
+       }
+}
+
+
+void Intl::KeyMapSec()
+{
+       int i;
+       LString p;
+
+       fl_set_button(fd_form_keymap->KeyOffBtn, 0);
+       fl_set_button(fd_form_keymap->KeyOnBtn, 0);
+       fl_set_button(fd_form_keymap->KeyOnBtn2, 1);
+
+       /* read text from choice */
+       i = Language2->get();
+       
+       if (lyxerr.debugging(Error::KBMAP))
+               lyxerr.print(LString("Table: ") + tex_babel[i-1]);
+
+       if (i == otherkeymap)
+               p = fl_get_input(fd_form_keymap->OtherKeymap2);
+       else
+               p = Language2->getline();
+       curkeymap = i;
+
+       if (p.empty() || trans->SetSecondary(p)) {
+               // error selecting keymap
+               fl_show_object(fd_form_keymap->KeymapErr);
+               update();
+       } else {
+               // no error
+               trans->EnableSecondary();
+               keymapon = true;
+               primarykeymap = false;
+               fl_hide_object(fd_form_keymap->KeymapErr);
+       }
+}
+
+
+void Intl::LCombo(int, void *v)
+{
+       Intl *itl = (Intl*) v;
+       itl->Keymap(23);
+       return;
+}
+
+
+void Intl::LCombo2(int, void *v)
+{
+       Intl *itl = (Intl*) v;
+       itl->Keymap(43);
+       return;
+}
+
+
+void Intl::DispatchCallback(FL_OBJECT *ob,long code)
+{
+       if (ob && (code == 0)) {
+               fl_hide_form(ob->form);
+               return;
+       }
+       if (!ob || !(ob->u_vdata))
+               return;
+       
+       Intl *itl=(Intl *)ob->u_vdata;
+
+       if (itl!=NULL) itl->Keymap(code);
+}
+
+
+void Intl::InitKeyMapper(bool on)
+       /* initialize key mapper */
+{
+       lyxerr.debug("Initializing key mappings...", Error::KBMAP);
+
+       if (prim_lang.empty() && sec_lang.empty())
+               keymapon = false; 
+       else
+               keymapon = on;
+
+       Language = new Combox(FL_COMBOX_DROPLIST);
+       Language2 = new Combox(FL_COMBOX_DROPLIST);
+       Language->setcallback(LCombo,this);
+       Language2->setcallback(LCombo2,this);
+
+       fd_form_keymap = create_form_KeyMap();
+
+       // Add the Intl* pointer
+       fd_form_keymap->AcceptChset->u_vdata=
+               fd_form_keymap->Charset->u_vdata=
+               fd_form_keymap->Accept->u_vdata=
+               fd_form_keymap->OtherKeymap->u_vdata=
+               fd_form_keymap->KeyOnBtn->u_vdata=
+               fd_form_keymap->KeyOffBtn->u_vdata=
+               fd_form_keymap->KeyOnBtn2->u_vdata=(void *)this;
+
+       // add the callbacks.
+       fl_set_object_callback(fd_form_keymap->AcceptChset,DispatchCallback,27);
+       fl_set_object_callback(fd_form_keymap->Charset,DispatchCallback,26);
+       fl_set_object_callback(fd_form_keymap->Accept,DispatchCallback,0);
+
+       fl_set_object_callback(fd_form_keymap->KeyOnBtn,DispatchCallback,23);
+       fl_set_object_callback(fd_form_keymap->KeyOffBtn,DispatchCallback,3);
+       fl_set_object_callback(fd_form_keymap->KeyOnBtn2,DispatchCallback,43);
+       
+       // Make sure pressing the close box does not kill LyX. (RvdK)
+       fl_set_form_atclose(fd_form_keymap->KeyMap, CancelCloseBoxCB, NULL);
+
+       fl_hide_object(fd_form_keymap->KeymapErr);
+       fl_hide_object(fd_form_keymap->ChsetErr);
+       fl_set_input(fd_form_keymap->Charset, lyxrc->font_norm.c_str());
+
+       // Adds two comboxes to the keyboard map
+       fl_addto_form(fd_form_keymap->KeyMap);
+       Language->add(120,30,160,30,300);       // Primary
+       Language2->add(120,110,160,30,300);     // Secondary
+       fl_end_form();
+
+       int n=0;
+
+       while (true)
+               if (!strlen(tex_babel[n]))
+                       break;
+               else {
+                       Language->addto(tex_babel[n]);
+                       Language2->addto(tex_babel[n]);
+                       n++;
+               }
+       
+       Language->addto(_("other..."));
+       Language2->addto(_("other..."));
+       otherkeymap = n+1;
+       if (!Language->select_text(prim_lang.c_str())) {
+               Language->select(n+1);
+               fl_set_input(fd_form_keymap->OtherKeymap, prim_lang.c_str());
+       }
+       else 
+               trans->SetPrimary(prim_lang);
+
+       if (!Language2->select_text(sec_lang.c_str())) {
+               Language2->select(n+1);
+               fl_set_input(fd_form_keymap->OtherKeymap2, sec_lang.c_str());
+       }
+       else
+               trans->SetSecondary(sec_lang);
+
+       KeyMapOn(keymapon);
+       if (keymapon)
+               Keymap(23); // turn primary on
+
+       trans->setCharset(lyxrc->font_norm.c_str());
+}
+
+
+void Intl::Keymap(long code)
+{
+       char const *p;
+
+       if (lyxerr.debugging(Error::KBMAP))
+               lyxerr.print(LString("KeyMap callback: ") + code);
+
+       switch (code) {
+       case 0:
+               /* cancel/hide */
+               fl_hide_form(fd_form_keymap->KeyMap);
+               break;
+       case 3:
+       case 23:
+       case 43:
+               if (code==3) {
+                       KeyMapOn(false);
+                       return;
+               }
+               code -= 19;     // change to language change type code
+               
+       case 4: // 4 and 24 will never be called directly, they will only be
+       case 24: // called through 3,23,43 (lgb)
+               if (code==4) {
+                       KeyMapPrim();
+               } else {
+                       KeyMapSec();
+               }
+               break;
+       case 27:        /* set new font norm */
+               p = fl_get_input(fd_form_keymap->Charset);
+               if (trans->setCharset(p))
+                       fl_show_object(fd_form_keymap->ChsetErr);
+               else
+                       fl_hide_object(fd_form_keymap->ChsetErr);
+               break;
+       }
+}
+
+
+void Intl::MenuKeymap()
+{
+       if (fd_form_keymap->KeyMap->visible) {
+               fl_raise_form(fd_form_keymap->KeyMap);
+       } else fl_show_form(fd_form_keymap->KeyMap, FL_PLACE_MOUSE,
+                           FL_FULLBORDER, _("Key Mappings"));
+}
diff --git a/src/intl.h b/src/intl.h
new file mode 100644 (file)
index 0000000..afb1ce4
--- /dev/null
@@ -0,0 +1,106 @@
+// -*- C++ -*-
+/* International support for LyX
+
+
+ */
+#ifndef _INTL_H
+#define _INTL_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "form1.h"
+
+class LyXText;
+class Combox;
+class TransManager;
+class LString;
+
+/// default character set
+#define DEFCHSET "iso8859-1"
+
+
+/** The gui part and the non gui part should be split into two different
+  classes. Probably should the gui class just have a pointer to the non
+  gui class.
+  */
+class Intl
+{
+public:
+       ///
+       Intl();
+       ///
+       ~Intl();
+       
+       /// show key mapping dialog
+       void MenuKeymap(); 
+       ///
+       void KeyMapOn(bool on);
+       ///
+       void KeyMapPrim();
+       ///
+       void KeyMapSec();
+
+       /// turn on/off key mappings, status in keymapon
+       void ToggleKeyMap();
+
+       ///
+       int SetPrimary(LString const &);
+
+       ///
+       int SetSecondary(LString const &);
+
+       // insert correct stuff into paragraph
+       //void TranslateAndInsert(char c, LyXText *text);
+
+       /// initialize key mapper
+       void InitKeyMapper(bool on);
+
+       /// Get the Translation Manager
+       inline TransManager *getTrans();
+       ///
+       bool keymapon;
+       ///
+       char *chsetcode;
+private:
+       ///
+       //int SelectCharset(char const *code);
+       ///
+       void update();
+       ///
+       static void LCombo(int i, void *); // callback
+       ///
+       static void LCombo2(int i, void *); // callback
+       ///
+       void Keymap(long code);
+       ///
+       static void DispatchCallback(FL_OBJECT*,long);
+       ///
+       bool primarykeymap;
+       ///
+       int curkeymap;
+       ///
+       int otherkeymap;
+       
+       ///
+       FD_KeyMap *fd_form_keymap;
+       ///
+       Combox *Language;
+       ///
+       Combox *Language2;
+       ///
+       LString& prim_lang;
+       ///
+       LString& sec_lang;
+       ///
+       TransManager *trans;
+};
+
+
+TransManager* Intl::getTrans()
+{
+       return trans;
+}
+
+#endif
diff --git a/src/kbmap.C b/src/kbmap.C
new file mode 100644 (file)
index 0000000..7b7c9ee
--- /dev/null
@@ -0,0 +1,734 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *          LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+#include <string.h>
+#include <stdio.h>
+#include "gettext.h"
+
+//     $Id: kbmap.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $     
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: kbmap.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "kbmap.h"
+#include "error.h"
+
+// The only modifiers that we handle. We want to throw away things
+// like NumLock. 
+enum { ModsMask = ShiftMask | ControlMask | Mod1Mask};
+
+
+// === static functions ===================================================
+
+
+/* ---F+------------------------------------------------------------------ *\
+   Function  : printKeysym
+   Called by : kb_sequence::print and printKeyMap. RVDK_PATCH_5
+   Purpose   : prints a keysym, including modifiers.
+   Parameters: key    - keysym
+               mod    - modifiers
+               buf    - string where the result goes
+              maxlen - length of string (including '\0')
+   Returns   : length of printed string if ok, 0 otherwise.
+\* ---F------------------------------------------------------------------- */
+
+static
+int printKeysym( KeySym key, unsigned int mod, char *buf, int maxlen )
+{
+       int len;
+       char *s;
+       
+       mod &= ModsMask;
+
+       // calc required length;
+       len = 0;
+       if ( mod & ShiftMask )   len += 2;
+       if ( mod & ControlMask ) len += 2;
+       if ( mod & Mod1Mask )    len += 2;
+       
+       s = XKeysymToString( key );
+       if ( s ) len += strlen( s );
+       if ( len < maxlen ) {
+               if ( mod & ShiftMask ) {
+                       *buf++ = 'S'; *buf++ = '-'; }
+               if ( mod & ControlMask ) {
+                       *buf++ = 'C'; *buf++ = '-'; }
+               if ( mod & Mod1Mask ) {
+                       *buf++ = 'M'; *buf++ = '-'; }
+               if ( s ) strcpy( buf, s );
+               return len;
+       } else 
+               return 0;
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+   Function  : printKeyTab
+   Called by : kb_keymap::print
+   Purpose   : print the keysyms found in the given key table. RVDK_PATCH_5
+   Parameters: tabPt  - keytable pointer
+               buf    - string where the result goes
+               maxLen - length of string (including '\0')
+   Returns   : length of printed string.
+\* ---F------------------------------------------------------------------- */
+
+static
+int printKeyTab( kb_key *tabPt, char *buf, int maxLen )
+{
+       int len, doneLen = 0;
+       unsigned int ksym, mod;
+       
+       /* -------> Print each of the slots into buf. */
+       for( ; (tabPt->code & 0xffff) != NoSymbol; tabPt++) {
+               if ( maxLen <= 0 ) break;
+               
+               ksym =  tabPt->code;
+               mod  =  tabPt->mod & 0xffff;
+               
+               len = printKeysym( ksym, mod, buf, maxLen );
+               if ( len <= 0 ) break;
+               buf     += len;
+               maxLen  -= len;
+               doneLen += len;
+               
+               /* -------> Add space when possible. */
+               if ( maxLen > 0 ) {
+                       *buf++ = ' ';
+                       *buf = '\0';
+                       maxLen--;
+                       doneLen++;
+               }
+       }
+       return doneLen;
+}
+
+
+
+// === kb_sequence methods ================================================
+
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_sequence::addkey
+    Called by : [user]
+    Purpose   : add a key to the sequence, look up in map and return action
+    Parameters: key  - keysym of key
+                mod  - modifier mask
+                nmod - modifier veto mask (unused now)
+    Returns   : action or -1 if error (no map defined or key not found)
+\* ---F------------------------------------------------------------------- */
+
+int kb_sequence::addkey(KeySym key, unsigned int mod, unsigned int nmod /*=0*/)
+{
+       if(length<0) length=0;
+
+       if(length+1 >= size) {
+               unsigned int *nseq = new unsigned int[size+KB_PREALLOC];
+               size += KB_PREALLOC;
+               memcpy(nseq, sequence, length*sizeof(unsigned int));
+               if(sequence != staticseq) delete sequence;
+               sequence = nseq;
+               nseq = new unsigned int[size];
+               memcpy(nseq, modifiers, length*sizeof(unsigned int));
+               if(modifiers != staticmod) delete modifiers;
+               modifiers = nseq;
+       }
+
+       modifiers[length]  = mod + (nmod<<16);
+       sequence[length++] = key;
+   
+       if(curmap)
+               return curmap->lookup(key, mod, this);
+       
+       return -1;
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_sequence::parse
+    Called by : [user]
+    Purpose   : parse a string that holds a key sequence and add the keys
+    Parameters: s - string holding the key sequence
+    Returns   : 0 - if ok, error pos if error
+    Note      : Keys must be separated with whitespace;
+                Use the keysym names used by XStringToKeysym
+                Prefixes are S-, C-, M- for shift, control, meta
+\* ---F------------------------------------------------------------------- */
+
+int kb_sequence::parse(char const*s)
+{
+       int i = 0;
+       unsigned int mod = 0, nmod = 0;
+       KeySym key = 0;
+       char tbuf[100];
+       
+       if(!s[0]) return 1;
+       
+       while(s[i]) {
+               if(s[i] && ((unsigned char) s[i]) <= ' ') i++;
+               if(!s[i]) break;
+               
+               if(s[i+1]=='-') { // is implicit that s[i]==true
+                       switch(s[i]) {
+                       case 's': case 'S':
+                               mod |= ShiftMask;
+                               i+=2;
+                               continue;
+                       case 'c': case 'C':
+                               mod |= ControlMask;
+                               i+=2;
+                               continue;
+                       case 'm': case 'M':
+                               mod |= Mod1Mask;
+                               i+=2;
+                               continue;
+                       default:
+                               return i+1;
+                       }
+               } else if(s[i]=='~' && s[i+1] && s[i+2]=='-') {
+                       switch(s[i+1]) {
+                       case 's': case 'S':
+                               nmod |= ShiftMask;
+                               i+=3;
+                               continue;
+                       case 'c': case 'C':
+                               nmod |= ControlMask;
+                               i+=3;
+                               continue;
+                       case 'm': case 'M':
+                               nmod |= Mod1Mask;
+                               i+=3;
+                               continue;
+                       default:
+                               return i+2;
+                       }
+               } else {
+                       int j = 0;
+                       for(j = i; s[j] && ((unsigned char)s[j])>' '; j++)
+                               tbuf[j-i] = s[j];    // (!!!check bounds :-)
+                       
+                       tbuf[j-i] = '\0';
+         
+                       key = XStringToKeysym(tbuf);
+                       if(key == NoSymbol) {
+                               lyxerr.debug("kbmap.C: No such keysym: "
+                                            + LString(tbuf),Error::KBMAP);
+                               return j;
+                       }
+                       i = j;
+                       
+                       addkey(key, mod, nmod);
+                       mod = 0;
+                       nmod = 0;
+               }
+       }
+       return 0;
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_sequence::print
+    Called by : [user]
+    Purpose   : print the currently defined sequence into a string
+    Parameters: buf           - string where the result goes
+                maxlen        - length of string (including '\0')
+                when_defined  - only  print when sequence is real: length > 0.
+    Returns   : 0, if ok, -1 if string too long
+\* ---F------------------------------------------------------------------- */
+
+int kb_sequence::print(char *buf, int maxlen, bool when_defined) const
+{
+       KeySym key;
+       unsigned int mod;
+       int len;
+       int l = length;
+       if ( l<0 && !when_defined ) l = -l;
+       
+       for(int i = 0; i < l; i++) {
+               key = sequence[i];
+               mod = modifiers[i] & 0xffff;
+
+               len = printKeysym( key, mod, buf, maxlen );  // RVDK_PATCH_5
+               buf += len;
+               maxlen -= len;
+               
+               if ( len == 0 ) {
+                       *buf = '\0';
+                       return -1;
+               }
+
+               if(i+1<l && maxlen>1) {  // append a blank
+                       *buf++ = ' ';
+                       maxlen--;
+               }
+       }
+       *buf = '\0';
+       return 0;
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_sequence::printOptions
+    Called by : [user]
+    Purpose   : print the available key options from the current state in the
+                sequence. RVDK_PATCH_5
+    Parameters: buf    - string where the result goes
+                maxlen - length of string (including '\0')
+    Returns   : 0, if ok, -1 if string too long
+\* ---F------------------------------------------------------------------- */
+
+int kb_sequence::printOptions(char *buf, int maxlen) const
+{
+       int len;
+
+       print( buf, maxlen, true );
+       len = strlen( buf );
+       maxlen -= len;
+       buf    += len;
+       
+       if ( maxlen < 20 || !curmap ) return -1;
+#ifdef WITH_WARNINGS
+#warning reimplement kb_sequence using LString
+#endif
+       char s[20];
+       strcpy(s,_("   options: "));
+       strcpy( buf, s);
+       buf += strlen(s);
+       maxlen -= strlen(s);
+
+       curmap->print(buf, maxlen);
+       return 0;
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_sequence::delseq
+    Called by : [user]
+    Purpose   : mark the sequence as deleted
+    Parameters: none
+    Returns   : nothing
+\* ---F------------------------------------------------------------------- */
+
+void kb_sequence::delseq()
+{
+       // negative length marks sequence as deleted, but we can still
+       // print() it or retrieve the last char using getiso()
+       length = -length;
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+   Function  : kb_sequence::getsym
+   Called by : [user], getiso
+   Purpose   : get the keysym of the last key in sequence
+   Parameters: none
+   Returns   : keysym
+\* ---F------------------------------------------------------------------- */
+
+KeySym kb_sequence::getsym()
+{
+       int l = length;
+       if(l==0) return NoSymbol;
+       if(l<0) l = -l;
+       return sequence[l-1];
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_sequence::getiso
+    Called by : [user]
+    Purpose   : return iso character code of last key, if any
+    Parameters: none
+    Returns   : iso code or 0 if none
+\* ---F------------------------------------------------------------------- */
+
+char kb_sequence::getiso()
+{
+       int c = getsym();
+       
+       if(c > 0xff)
+               return '\0';
+       return (char)c;
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_sequence::reset
+    Called by : [user]
+    Purpose   : reset sequence to initial state. RVDK_PATCH_5
+    Parameters: none
+    Returns   : void
+\* ---F------------------------------------------------------------------- */
+
+void kb_sequence::reset()
+{
+       delseq();
+       curmap = stdmap;
+       if ( length > 0 ) length = -length;
+}
+
+
+// === kb_keymap methods ==================================================
+
+// This binds a key to an action
+int kb_keymap::bind(char const *seq, int action)
+{
+       kb_sequence k;
+
+       int res = k.parse(seq);
+       if (!res) {
+               defkey(&k, action);
+       } else
+               lyxerr.debug(LString("Parse error at position ") + res +
+                            " in key sequence '" + seq + "'.", Error::KBMAP);
+       return res;
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_keymap::lookup
+    Called by : [user], kb_sequence::add()
+    Purpose   : look up a key press in a given keymap
+    Parameters: key - the keysym of the key press
+                mod - the modifier mask of the keypress
+                seq - the key-sequence retrieved so far
+    Returns   : user defined action; 0 for prefix key, -1 if key not found
+\* ---F------------------------------------------------------------------- */
+
+int kb_keymap::lookup(KeySym key, unsigned int mod, kb_sequence *seq)
+{
+       unsigned int hashval, ksym, msk1, msk0;
+       kb_key *tab;
+
+       //suppress modifier bits we do not handle
+       mod &= ModsMask;
+
+       if(!table) {
+               // error - no keymap defined:
+               seq->curmap = seq->stdmap;
+               seq->delseq();
+               return -1;
+       }
+
+       if(size < 0) {               // --- if hash table ---
+               hashval = ((key&0xff) ^ ((key>>8)&0xff)) % KB_HASHSIZE;
+               tab = htable[hashval];
+               if(!tab) {
+                       seq->curmap = seq->stdmap;
+                       seq->delseq();
+                       return -1;
+               }
+       } else                       // --- else: linear list ---
+               tab = table;
+
+       // --- now search the list of keys ---
+
+       for( ; (tab->code & 0xffff) != NoSymbol; tab++) {
+               ksym =  tab->code;
+               msk1 =  tab->mod      & 0xffff;
+               msk0 = (tab->mod>>16) & 0xffff;
+
+               if(ksym == key && (mod&~msk0) == msk1) {
+                       // match found:
+                       if(tab->table) {
+                                // this is a prefix key - set new map
+                               seq->curmap = tab->table;
+                               return 0;
+                       } else {
+                                 // final key - reset map
+                               seq->curmap = seq->stdmap;
+                               seq->delseq();
+                               return tab->action; // ... and return action
+                       }
+               }
+       }
+       
+       // error - key not found:
+       seq->curmap = seq->stdmap;
+       seq->delseq();
+       return -1;
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_keymap::print
+    Called by : [user]
+    Purpose   : Prints all the available keysyms. RVDK_PATCH_5
+    Parameters: buf    - string where output goes.
+               maxLen - available length in string, including `\0'.
+    Returns   : updated maxLen.
+\* ---F------------------------------------------------------------------- */
+
+int kb_keymap::print(char *buf, int maxLen) const
+{
+       int                    len;
+       
+ /* -----> Return when running out of string space or when keymap has no table.
+     Else, place a terminating newline in case no other output is generated. */
+
+       if ( maxLen <= 3 || !buf ) return maxLen;
+       if ( !table ) return maxLen;
+       *buf   = '\0';
+   
+ /* -------> Hash table. Process each of its slots recursively and return. */
+       if ( size < 0 ) {   
+               for ( int ix = 0; (ix < KB_HASHSIZE) && (maxLen > 1); ix++ ) {
+                       if ( htable[ix] ) {
+                               len = printKeyTab( htable[ix], buf, maxLen );
+                               maxLen -= len;
+                               buf    += len;
+                       }
+               }
+       } else {
+               /* -------> Normal table. */
+               len = printKeyTab( table, buf, maxLen ); 
+               maxLen -= len;
+               buf    += len;
+       }
+       return maxLen;
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_keymap::defkey
+    Called by : [user]
+    Purpose   : define an action for a key sequence
+    Parameters: seq    - the key sequence
+                action - the action to be defined
+                idx    - recursion depth
+    Returns   : 0 if ok.
+\* ---F------------------------------------------------------------------- */
+
+int kb_keymap::defkey(kb_sequence *seq, int action, int idx /*=0*/)
+{
+       int      tsize;
+       unsigned int code, modmsk;
+       kb_key  *tab, **ptab;
+
+       code = seq->sequence[idx];
+       modmsk = seq->modifiers[idx];
+       if(code == NoSymbol) return -1;
+
+       // --- get list------------------------------------------------------
+       if(!table) {
+               // If we don't have any yet, make an empty one
+               table = new kb_key[KB_PREALLOC];
+               table[0].code = NoSymbol;
+               tab   =  table;
+               ptab  = &table;
+               size  = KB_PREALLOC;
+       } else if(size<0) {
+               // Hash table.
+               int hashval = (code&0xffff);
+               hashval = ((hashval&0xff) ^ ((hashval>>8)&0xff)) % KB_HASHSIZE;
+               tab  = htable[hashval];
+               ptab = htable+hashval;
+               if(!tab) {
+                       tab = new kb_key[KB_PREALLOC];
+                       tab[0].code = NoSymbol;
+                       *ptab = tab;
+               }
+       } else {
+               tab  =  table;
+               ptab = &table;
+       }
+
+       // --- check if key is already there --------------------------------
+
+       kb_key *t;
+       for(t = tab, tsize=1; t->code != NoSymbol; t++, tsize++) {
+               if(code == t->code && modmsk == t->mod) { // -- overwrite binding ---
+                       if(idx+1 == seq->length) {
+                               char buf[20]; buf[0] = 0;
+                               seq->print(buf, 20, true);
+                               lyxerr.debug(LString("Warning: New binding for '") + buf + 
+                                            "' is overriding old binding...", Error::KEY);
+
+                               if(t->table) {
+                                       delete t->table;
+                                       t->table = 0;
+                               }
+                               t->action = action;
+                               return 0;
+                       } else if (!t->table) {
+                               char buf[20]; buf[0] = 0;
+                               seq->print(buf, 20, true);
+                               lyxerr.print(LString("Error: New binding for '") + buf + 
+                                            "' is overriding old binding...");
+                               return -1;
+                       } else
+                               return t->table->defkey(seq, action, idx+1);
+               }
+       }
+
+       // --- extend list if necessary -------------------------------------
+
+       if(tsize % KB_PREALLOC == 0) {
+               kb_key *nt = new kb_key[tsize+KB_PREALLOC];
+               // Set to NULL as table is used uninitialised later (thornley)
+               nt[tsize].table = NULL;
+               memcpy(nt, tab, tsize*sizeof(kb_key));
+               *ptab = nt;
+               delete[] tab;
+               tab = nt;
+               if(size>=0) size = tsize+KB_PREALLOC;
+       }
+
+       // --- add action ---------------------------------------------------
+
+       tab[tsize--].code = NoSymbol;
+       tab[tsize].code = code;
+       tab[tsize].mod  = modmsk;
+       kb_key *newone = &tab[tsize];
+       
+       // --- convert list to hash table if necessary ----------------------
+
+       if(size>=0 && tsize>=32) {
+               kb_key *oldtab = tab;
+               kb_key **nht = new kb_key*[KB_HASHSIZE];
+               for(int i = 0; i < KB_HASHSIZE; i++)
+                       nht[i] = 0;
+               htable = nht;
+               size   = -KB_HASHSIZE;
+               
+               // --- copy old keys to new hash table ---
+               int hashval;
+               for(kb_key *tu = oldtab; tu->code != NoSymbol; tu++){
+                       // copy values from oldtab to htable
+                       hashval = (tu->code&0xffff);
+                       hashval = ((hashval&0xff) ^ ((hashval>>8)&0xff)) % KB_HASHSIZE;
+                       tab  = htable[hashval];
+                       
+                       if(!tab){
+                               htable[hashval] = tab = new kb_key[KB_PREALLOC];
+                               tab->code = NoSymbol;
+                       }
+                       int ts = 1;
+                       for(kb_key *tt = tab; tt->code != NoSymbol; tt++)
+                               ts++;
+                       if(ts % KB_PREALLOC == 0){
+                               // extend table
+                               kb_key *nt = new kb_key[ts+KB_PREALLOC];
+                               memcpy(nt, tab, ts*sizeof(kb_key));
+                               htable[hashval] = nt;
+                               delete[] tab;
+                               tab = nt;
+                       }
+                       tab[ts--].code = NoSymbol;
+                       tab[ts].code   = tu->code;
+                       tab[ts].mod    = tu->mod;
+                       tab[ts].action = tu->action;
+                       tab[ts].table  = tu->table;
+                       
+                       if(tu == newone)
+                               newone = &tab[ts];
+               }
+               delete[] oldtab;
+       }
+       
+       // --- define rest of sequence --------------------------------------
+
+       if(idx+1 == seq->length) {
+               newone->action = action;
+               newone->table  = 0;
+               return 0;
+       } else {
+               newone->table = new kb_keymap;
+               int res = newone->table->defkey(seq, action, idx+1);
+               return res;
+       }
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+    Function  : kb_keymap::~kb_keymap
+    Called by : [destructor]
+    Purpose   : free keymap and its descendents
+    Parameters: none
+    Returns   : nothing
+\* ---F------------------------------------------------------------------- */
+
+kb_keymap::~kb_keymap()
+{
+       if(!table) return;
+       if(size<0) {
+               for(int i=0; i < KB_HASHSIZE; i++) {
+                       if(htable[i]) {
+                               for(kb_key *t = htable[i]; t->code != NoSymbol; t++)
+                                       if(t->table)
+                                               delete t->table;
+                               delete htable[i];
+                       }
+               }
+               delete htable;
+       } else {
+               for(kb_key *t = table; t->code != NoSymbol; t++)
+                       if(t->table)
+                               delete t->table;
+               delete table;
+       }
+}
+
+LString keyname(kb_key k) {
+       char buf[100];
+       printKeysym(k.code, k.mod, buf, 100);
+       return buf;
+}
+
+// Finds a key for a keyaction, if possible
+LString kb_keymap::findbinding(int act) const {
+       LString res;
+       if (!table)
+               return res;
+
+       if (size<0) {
+               for(int i=0; i < KB_HASHSIZE; i++) {
+                       if(htable[i]) {
+                               for(kb_key *t = htable[i]; t->code != NoSymbol; t++) {
+                                       if(t->table) {
+                                               LString suffix = t->table->findbinding(act);
+                                               suffix.strip(' ');
+                                               suffix.strip(']');
+                                               suffix.frontStrip('[');
+                                               if (!suffix.empty()) {
+                                                       res += "[" + keyname(*t) + " " + suffix + "] ";
+                                               }
+                                       } else if (t->action == act) {
+                                               res += "[" + keyname(*t) + "] ";
+                                       }
+                               }
+                       }
+               }
+       } else {
+               for(kb_key *t = table; t->code != NoSymbol; t++) {
+                       if(t->table) {
+                               LString suffix = t->table->findbinding(act);
+                               suffix.strip(' ');
+                               suffix.strip(']');
+                               suffix.frontStrip('[');
+                               if (!suffix.empty()) {
+                                       res += "[" + keyname(*t) + " " + suffix + "] ";
+                               }
+                       } else if (t->action == act) {
+                               res += "[" + keyname(*t) + "] ";
+                       }
+               }
+       }
+       return res;
+}
+
+
+/* === End of File: kbmap.C ============================================== */
diff --git a/src/kbmap.h b/src/kbmap.h
new file mode 100644 (file)
index 0000000..d1aa782
--- /dev/null
@@ -0,0 +1,163 @@
+// -*- C++ -*-
+/* ======================================================================= *\
+   File   : kbmap.h, kbmap.h,v 1.3 1996/12/10 04:35:57 larsbj Exp
+   Author : chb, 30.Oct.1995
+   Docu   : see kbmap.C
+   Purpose: class definitions for XKeyEvent keymap handling
+   \* ======================================================================= */
+
+#ifndef _KBMAP_H_
+#define _KBMAP_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <X11/Xlib.h>
+
+#define KB_PREALLOC  16
+#define KB_HASHSIZE 128   // yes, yes - I know. 128 is not exactly prime :-)
+// ... but we are dealing with ASCII chars mostly.
+
+class kb_keymap;
+class kb_sequence;
+class LString;
+
+///
+struct kb_key {
+       /// Keysym
+       unsigned int code;
+       
+       /// Modifier masks
+       unsigned int mod;
+       
+       /// Keymap for prefix keys
+       kb_keymap *table;
+       
+       /// Action for !prefix keys
+       int action;
+};
+
+
+/// Defines key maps and actions for key sequences
+class kb_keymap {
+public:
+       ///
+       kb_keymap() {
+               size = 0; 
+               table = 0;
+       }
+       ///
+       ~kb_keymap();
+       
+       /// Bind a key-sequence to an action
+       /** Returns 0 on success. Otherwise, position in string where
+         error occured. */
+       int bind(char const* seq, int action);
+       
+       ///
+       int print(char* buf, int maxlen) const;
+       
+       /// Look up a key in the keymap
+       int lookup(KeySym key, unsigned mod, kb_sequence *seq);
+
+       /// Given an action, find all keybindings.
+       LString findbinding(int action) const;
+private:
+       /// Define a new key sequence
+       int defkey(kb_sequence *seq, int action, int idx = 0);
+       
+       /// Size of the table (<0: hashtab)
+       int size;
+       
+       /// Holds the defined keys
+       /** Both kinds of tables ends with NoSymbol */
+       union
+       {
+               /// Table for linear array
+               kb_key *table;
+               
+               /// Hash table holding key lists
+               kb_key **htable;
+       };
+};
+
+
+/// Holds a key sequence and the current and standard keymaps
+class kb_sequence {
+public:
+       ///
+       kb_sequence() {
+               stdmap = curmap = 0;
+               sequence = staticseq;
+               modifiers = staticmod;
+               length = 0; 
+               size = KB_PREALLOC;
+       }
+       
+       ///
+       
+       
+       ///
+       ~kb_sequence()
+       {
+               if (sequence != staticseq) {
+                       delete sequence;
+                       delete modifiers;
+               }
+       }
+       
+       /// Add a key to the key sequence and look it up in the curmap
+       /** Add a key to the key sequence and look it up in the curmap
+         if the latter is defined. */
+       int addkey(KeySym key, unsigned mod, unsigned nmod = 0);
+       
+       ///
+       int print(char *buf, int maxlen, bool when_defined = false) const; //RVDK_PATCH_5
+       
+        ///
+       int printOptions(char *buf, int maxlen) const;
+       
+       /// Make length negative to mark the sequence as deleted
+       void delseq();
+       
+       ///
+       char getiso();
+       
+       ///
+       KeySym getsym();
+       
+       ///
+       void reset();
+       
+       ///
+       int parse(char const *s);
+       
+       /// Keymap to use if a new sequence is starting
+       kb_keymap *stdmap;
+       
+       /// Keymap to use for the next key
+       kb_keymap *curmap;
+       
+       /// Array holding the current key sequence
+       /** If sequence[length-1] < 0xff it can be used as ISO8859 char */
+       unsigned int *sequence;
+       
+       ///
+       unsigned int *modifiers;
+       
+       /// Current length of key sequence
+       int length;
+       
+private:
+       /// Static array preallocated for sequence
+       unsigned int staticseq[KB_PREALLOC];
+       
+       ///
+       unsigned int staticmod[KB_PREALLOC];
+       
+       /// Physically allocated storage size
+       int size;
+};
+
+#endif
diff --git a/src/lastfiles.C b/src/lastfiles.C
new file mode 100644 (file)
index 0000000..2d327fb
--- /dev/null
@@ -0,0 +1,120 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+//#include "definitions.h"
+#include "lyxlex.h"
+#include "FileInfo.h"
+#include "lastfiles.h"
+#include "filetools.h"
+#include "error.h"
+
+//     $Id: lastfiles.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $ 
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lastfiles.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+LastFiles::LastFiles(LString const & filename, bool st, char num)
+       : dostat(st)
+{
+       setNumberOfFiles(num);
+       files = new LString[num_files];
+       readFile(filename);
+}
+
+
+LastFiles::~LastFiles()
+{
+       delete[] files;
+}
+
+
+void LastFiles::setNumberOfFiles(char no)
+{
+       if (1 <= no && no <= ABSOLUTEMAXLASTFILES)
+               num_files = no;
+       else {
+               lyxerr.print(LString("LyX: lastfiles: too many files\n"
+                       "\tdefault (=") + int(DEFAULTFILES) + ") used.");
+               num_files = DEFAULTFILES;
+       }
+}
+
+
+void LastFiles::readFile(LString const & filename)
+{
+       // we will not complain if we can't find filename nor will
+       // we issue a warning. Lgb.
+       LyXLex lex(NULL, 0); /* LyXLex should be changed
+                             * to allow constructor with
+                             * no parameters. */
+       bool error = false;
+
+       lex.setFile(filename);
+
+       if (!lex.IsOK()) return;
+
+       LString tmp;
+       FileInfo fileInfo;
+       int i = 0;
+
+       while (lex.IsOK() && !error && i < num_files) {
+               switch(lex.lex()) {
+               case LyXLex::LEX_FEOF:
+                       error = true;
+                       break;
+               default:
+                       tmp = lex.GetString();
+                       // Check if the file exist
+                       if (dostat) {
+                               if (!(fileInfo.newFile(tmp).exist() &&
+                                     fileInfo.isRegular()))
+                                       break; // the file does not exist
+                       }
+                       files[i] = tmp;
+                       i++;
+                       break;
+               }
+       }
+}
+
+
+void LastFiles::writeFile(LString const & filename) const
+{
+       FilePtr fd(filename, FilePtr::write);
+       if (fd()) {
+               for (int i = 0; i < num_files; i++) {
+                       if (!files[i].empty())
+                               fprintf(fd, "\"%s\"\n", files[i].c_str());
+               }
+       } else
+               lyxerr.print("LyX: Warning: unable to save LastFiles: "
+                             + filename);
+}
+
+
+void LastFiles::newFile(LString const & file)
+{
+       int n;
+       // Find this file in list. If not in list, point to last entry
+       for(n = 0; n < (num_files - 1); n++)
+               if(files[n] == file) break;
+
+       for(int i = n; i >= 1; i--)
+               files[i] = files[i - 1];
+       files[0] = file;
+}
diff --git a/src/lastfiles.h b/src/lastfiles.h
new file mode 100644 (file)
index 0000000..3c874be
--- /dev/null
@@ -0,0 +1,127 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 1996 Matthias Ettrich
+*           and the LyX Team.
+*
+*======================================================*/
+
+#ifndef _LASTFILES_H
+#define _LASTFILES_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+
+/** The latest documents loaded
+  This class takes care of the last .lyx files used by the LyX user. It
+  both reads and writes this information to a file. The number of files
+  kept are user defined, but defaults to four.
+*/
+class LastFiles 
+{
+public:
+       /**@name Constructors and Deconstructors */
+       //@{
+       /**
+         Parameters are: name of file to read. Whether you want LastFiles 
+         to check for file existance, and the number of files to remember.
+         */
+       LastFiles(LString const &, bool dostat = true, char num = 4);
+       ///
+       ~LastFiles();
+       //@}
+
+       /**@name Methods */
+       //@{
+       /**
+         This funtion inserts #file# into the last files list. If the file
+         already exist it is moved to the top of the list. If it don't
+         exist it is placed on the top of the list. If the list already is
+         full the last visited file in the list is puched out and deleted.
+        */
+       void newFile(LString const &);
+       /**  Writes the lastfiles table to disk. A " is placed around the
+         filenames to preserve special chars. (not all are preserved
+         anyway, but at least space is.)
+         */
+       void writeFile(LString const &) const;
+       //@}
+private:
+       /**@name const variables */
+       //@{
+       /// 
+       enum {
+               ///
+               DEFAULTFILES = 4
+       };
+       /** There is no point in keeping more than this number of files
+         at the same time. However perhaps someday someone finds use for
+         more files and wants to change it. Please do. But don't show
+         the files in a menu...
+         */
+       enum {
+               ///
+               ABSOLUTEMAXLASTFILES = 20
+       };
+       //@}
+
+       /**@name Variables */
+       //@{
+       /// an array of lastfiles
+       LString *files;
+       /// number of files in the lastfiles list.
+       char num_files;
+       /// check for file existance or not.
+       bool dostat;
+       //@}
+       
+       /**@name Methods */
+       //@{
+       /** reads the .lyx_lastfiles at the beginning of the LyX session.
+         This will read the lastfiles file (usually .lyx_lastfiles). It
+         will normally discard files that don't exist anymore, unless
+         LastFiles has been initialized with dostat = false. 
+        */
+       void readFile(LString const &);
+       /// used by the constructor to set the number of stored last files.
+        void setNumberOfFiles(char num);
+       //@}
+
+       /**@name Friends */
+       //@{
+       ///
+       friend class LastFiles_Iter;
+       //@}
+};
+
+
+/// An Iterator class for LastFiles
+class LastFiles_Iter {
+public:
+       ///
+       LastFiles_Iter(const LastFiles& la)
+       {cs = &la; index = 0;}
+       ///
+       LString operator() ()
+       {
+               return (index < cs->num_files)? cs->files[index++] 
+                                               : LString();
+       }
+       ///
+       LString operator[] (int a)
+       { return cs->files[a];}
+private:
+       ///
+       const LastFiles *cs;
+       ///
+       char index;
+};
+
+#endif
diff --git a/src/latexoptions.C b/src/latexoptions.C
new file mode 100644 (file)
index 0000000..dd215f5
--- /dev/null
@@ -0,0 +1,59 @@
+// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "latexoptions.h"
+
+FD_LaTeXOptions *create_form_LaTeXOptions(void)
+{
+  FL_OBJECT *obj;
+  FD_LaTeXOptions *fdui = (FD_LaTeXOptions *) fl_calloc(1, sizeof(FD_LaTeXOptions));
+
+  fdui->LaTeXOptions = fl_bgn_form(FL_NO_BOX, 310, 90);
+  obj = fl_add_box(FL_UP_BOX,0,0,310,90,"");
+  fdui->accents = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,10,310,30,idex(_("Allow accents on ALL characters|#w")));fl_set_button_shortcut(obj,scex(_("Allow accents on ALL characters|#w")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  obj = fl_add_button(FL_RETURN_BUTTON,10,50,90,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,LaTeXOptionsOK,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,110,50,90,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,LaTeXOptionsApply,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,210,50,90,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,LaTeXOptionsCancel,0);
+  fl_end_form();
+
+  //fdui->LaTeXOptions->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_LaTeXLog *create_form_LaTeXLog(void)
+{
+  FL_OBJECT *obj;
+  FD_LaTeXLog *fdui = (FD_LaTeXLog *) fl_calloc(1, sizeof(FD_LaTeXLog));
+
+  fdui->LaTeXLog = fl_bgn_form(FL_NO_BOX, 470, 380);
+  obj = fl_add_box(FL_UP_BOX,0,0,470,380,"");
+  fdui->browser_latexlog = obj = fl_add_browser(FL_NORMAL_BROWSER,10,10,450,320,"");
+  obj = fl_add_button(FL_RETURN_BUTTON,270,340,90,30,_("Close"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,LatexLogClose,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,370,340,90,30,idex(_("Update|#Uu")));fl_set_button_shortcut(obj,scex(_("Update|#Uu")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,LatexLogUpdate,0);
+  fl_end_form();
+
+  //fdui->LaTeXLog->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
diff --git a/src/latexoptions.h b/src/latexoptions.h
new file mode 100644 (file)
index 0000000..c325c9e
--- /dev/null
@@ -0,0 +1,35 @@
+/** Header file generated with fdesign on Mon Apr 12 19:09:41 1999.**/
+
+#ifndef FD_LaTeXOptions_h_
+#define FD_LaTeXOptions_h_
+
+/** Callbacks, globals and object handlers **/
+extern void LaTeXOptionsOK(FL_OBJECT *, long);
+extern void LaTeXOptionsApply(FL_OBJECT *, long);
+extern void LaTeXOptionsCancel(FL_OBJECT *, long);
+
+extern void LatexLogClose(FL_OBJECT *, long);
+extern void LatexLogUpdate(FL_OBJECT *, long);
+
+
+/**** Forms and Objects ****/
+typedef struct {
+       FL_FORM *LaTeXOptions;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *accents;
+} FD_LaTeXOptions;
+
+extern FD_LaTeXOptions * create_form_LaTeXOptions(void);
+typedef struct {
+       FL_FORM *LaTeXLog;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *browser_latexlog;
+} FD_LaTeXLog;
+
+extern FD_LaTeXLog * create_form_LaTeXLog(void);
+
+#endif /* FD_LaTeXOptions_h_ */
diff --git a/src/layout.C b/src/layout.C
new file mode 100644 (file)
index 0000000..2373af6
--- /dev/null
@@ -0,0 +1,1375 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+/* Change log:
+ * 
+ *  14/11/1995,   Pascal André <andre@via.ecp.fr>
+ *  Modified for external style definition. 
+ * 
+ *  15/11/1995,   Alejandro Aguilar Sierra <asierra@servidor.unam.mx>
+ *  Modified to use binary search and a small pseudo lexical analyzer.
+ *  
+ *  29/03/1996,  Dirk Niggeman
+ *  Created classes LyXTextClass & LyXLayout.
+ * 
+ *  30/03/1996,  asierra
+ *  Created class LyxLex and improved the lexical analyzer. 
+ */
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "definitions.h"
+#include <stdlib.h>
+#include "layout.h"
+#include "lyxlex.h"
+#include "filetools.h"
+#include "lyx_gui_misc.h"
+#include "error.h"
+#include "gettext.h"
+
+//     $Id: layout.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $    
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: layout.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+/* Global variable: textclass table */
+LyXTextClassList lyxstyle;
+
+// Reads the style files
+void LyXSetStyle()
+{
+       lyxerr.debug("LyXSetStyle: parsing configuration...");
+       
+       if (!lyxstyle.Read()) {
+               lyxerr.print("LyXSetStyle: an error occured during parsing.");
+               lyxerr.print("             Exiting.");
+               exit(1);
+       }
+
+       lyxerr.debug("LyXSetStyle: configuration parsed.");
+}
+
+
+//  The order of the LayoutTags enum is no more important. [asierra300396]
+/* tags indexes */
+enum _LayoutTags {
+       LT_ALIGN, LT_ALIGNPOSSIBLE, 
+       LT_BLOCK, LT_MARGIN,
+       LT_BOTTOMSEP, LT_CENTER, LT_CENTERED_TOP_ENVIRONMENT, LT_COLUMNS,
+       LT_COPYSTYLE, LT_OBSOLETEDBY,
+       LT_COMMAND, LT_COUNTER_CHAPTER, LT_COUNTER_ENUMI, LT_COUNTER_ENUMII,
+       LT_COUNTER_ENUMIII, LT_COUNTER_ENUMIV, LT_COUNTER_PARAGRAPH,
+       LT_COUNTER_SECTION, LT_COUNTER_SUBPARAGRAPH, LT_COUNTER_SUBSECTION,
+       LT_COUNTER_SUBSUBSECTION, LT_DEFAULTFONT, LT_DYNAMIC, LT_EMPTY,
+       LT_END, LT_ENVIRONMENT, LT_ENVIRONMENT_DEFAULT, 
+       LT_FANCYHDR, LT_FILL_BOTTOM, LT_FILL_TOP, LT_FIRST_COUNTER,
+       LT_FIRST_DYNAMIC, LT_FONT, LT_FREE_SPACING, LT_HEADINGS, LT_INPUT,
+       LT_ITEM_ENVIRONMENT, LT_ITEMSEP, LT_KEEPEMPTY,
+       LT_LABEL_BOTTOMSEP, LT_LABELFONT, LT_TEXTFONT,
+       LT_LABELINDENT, LT_LABELSEP, LT_LABELSTRING,
+       LT_LABELSTRING_APPENDIX, LT_LABELTYPE,
+       LT_LATEXNAME, LT_LATEXPARAM, LT_LATEXTYPE, LT_LAYOUT, LT_LEFT,
+       LT_LEFTMARGIN,
+       LT_LIST_ENVIRONMENT , LT_MANUAL, LT_MAXCOUNTER, 
+       LT_NEED_PROTECT, LT_NEWLINE,
+       LT_NEXTNOINDENT, LT_NO_LABEL, LT_NOSTYLE,
+       LT_PAGESTYLE, LT_PARAGRAPH,
+       LT_PARINDENT, LT_PARSEP, LT_PARSKIP, LT_PLAIN, LT_PREAMBLE, 
+       LT_PROVIDESAMSMATH, LT_PROVIDESMAKEIDX, LT_PROVIDESURL, LT_RIGHT,
+       LT_RIGHT_ADDRESS_BOX, LT_RIGHTMARGIN, LT_SENSITIVE, LT_SIDES,
+       LT_SPACING, LT_SPACING_SINGLE, LT_SPACING_ONEHALF,
+       LT_SPACING_DOUBLE, LT_OTHER,  LT_CLASSOPTIONS, LT_FONTSIZE,
+       LT_STATIC, LT_STYLE, LT_TOP_ENVIRONMENT, LT_TOPSEP, LT_BIBLIO,
+        LT_INTITLE, LT_SECNUMDEPTH, LT_TOCDEPTH,
+       LT_OUTPUTTYPE, LT_OTLATEX, LT_OTLINUXDOC, LT_OTDOCBOOK, LT_OTLITERATE
+};
+
+
+// This table is sorted alphabetically [asierra 30March96]
+static keyword_item layoutTags[] = {
+       { "align",                      LT_ALIGN },
+       { "alignpossible",              LT_ALIGNPOSSIBLE },
+       { "bibliography",               LT_BIBLIO },
+       { "block",                      LT_BLOCK },
+       { "bottomsep",                  LT_BOTTOMSEP },
+       { "center",                     LT_CENTER },
+       { "centered_top_environment",   LT_CENTERED_TOP_ENVIRONMENT },
+        { "classoptions",               LT_CLASSOPTIONS },
+       { "columns",                    LT_COLUMNS },
+       { "command",                    LT_COMMAND },
+       { "copystyle",                  LT_COPYSTYLE },
+       { "counter_chapter",            LT_COUNTER_CHAPTER },
+       { "counter_enumi",              LT_COUNTER_ENUMI },
+       { "counter_enumii",             LT_COUNTER_ENUMII },
+       { "counter_enumiii",            LT_COUNTER_ENUMIII },
+       { "counter_enumiv",             LT_COUNTER_ENUMIV },
+       { "counter_paragraph",          LT_COUNTER_PARAGRAPH },
+       { "counter_section",            LT_COUNTER_SECTION },
+       { "counter_subparagraph",       LT_COUNTER_SUBPARAGRAPH },
+       { "counter_subsection",         LT_COUNTER_SUBSECTION },
+       { "counter_subsubsection",      LT_COUNTER_SUBSUBSECTION },
+       { "defaultfont",                LT_DEFAULTFONT },
+       { "docbook",                    LT_OTDOCBOOK },
+       { "double",                     LT_SPACING_DOUBLE },
+       { "dynamic",                    LT_DYNAMIC },
+       { "empty",                      LT_EMPTY },
+       { "end",                        LT_END },
+       { "environment",                LT_ENVIRONMENT },
+       { "environment_default",        LT_ENVIRONMENT_DEFAULT },
+       { "fancyhdr",                   LT_FANCYHDR },
+       { "fill_bottom",                LT_FILL_BOTTOM },
+       { "fill_top",                   LT_FILL_TOP },
+       { "first_counter",              LT_FIRST_COUNTER },
+       { "first_dynamic",              LT_FIRST_DYNAMIC },
+       { "font",                       LT_FONT },
+       { "fontsize",                   LT_FONTSIZE },
+       { "freespacing",                LT_FREE_SPACING },
+       { "headings",                   LT_HEADINGS },
+       { "input",                      LT_INPUT },
+       { "intitle",                    LT_INTITLE },
+       { "item_environment",           LT_ITEM_ENVIRONMENT },
+       { "itemsep",                    LT_ITEMSEP },
+       { "keepempty",                  LT_KEEPEMPTY },
+       { "labelbottomsep",             LT_LABEL_BOTTOMSEP },
+       { "labelfont",                  LT_LABELFONT },
+       { "labelindent",                LT_LABELINDENT },
+       { "labelsep",                   LT_LABELSEP },
+       { "labelstring",                LT_LABELSTRING },
+       { "labelstringappendix",                LT_LABELSTRING_APPENDIX },
+       { "labeltype",                  LT_LABELTYPE },
+       { "latex",                      LT_OTLATEX },
+       { "latexname",                  LT_LATEXNAME },
+       { "latexparam",                 LT_LATEXPARAM },    //arrae970411
+       { "latextype",                  LT_LATEXTYPE },
+       { "layout",                     LT_LAYOUT },
+       { "left",                       LT_LEFT },
+       { "leftmargin",                 LT_LEFTMARGIN },
+       { "linuxdoc",                   LT_OTLINUXDOC },
+       { "list_environment",           LT_LIST_ENVIRONMENT },
+       { "literate",                   LT_OTLITERATE },
+       { "manual",                     LT_MANUAL },
+       { "margin",                     LT_MARGIN },
+       { "maxcounter",                 LT_MAXCOUNTER },
+       { "needprotect",                LT_NEED_PROTECT },
+       { "newline",                    LT_NEWLINE },
+       { "nextnoindent",               LT_NEXTNOINDENT },
+       { "no_label",                   LT_NO_LABEL },
+       { "nostyle",                    LT_NOSTYLE },
+       { "obsoletedby",                LT_OBSOLETEDBY },
+       { "onehalf",                    LT_SPACING_ONEHALF },
+       { "other",                      LT_OTHER },
+       { "outputtype",                 LT_OUTPUTTYPE },
+       { "pagestyle",                  LT_PAGESTYLE },
+       { "paragraph",                  LT_PARAGRAPH },
+       { "parindent",                  LT_PARINDENT },
+       { "parsep",                     LT_PARSEP },
+       { "parskip",                    LT_PARSKIP },
+       { "plain",                      LT_PLAIN },
+       { "preamble",                   LT_PREAMBLE },
+       { "providesamsmath",            LT_PROVIDESAMSMATH },
+       { "providesmakeidx",            LT_PROVIDESMAKEIDX },
+       { "providesurl",                LT_PROVIDESURL },
+       { "right",                      LT_RIGHT },
+       { "right_address_box",          LT_RIGHT_ADDRESS_BOX },
+       { "rightmargin",                LT_RIGHTMARGIN },
+       { "secnumdepth",                LT_SECNUMDEPTH },
+       { "sensitive",                  LT_SENSITIVE },
+       { "sides",                      LT_SIDES },
+       { "single",                     LT_SPACING_SINGLE },
+       { "spacing",                    LT_SPACING },
+       { "static",                     LT_STATIC },
+       { "style",                      LT_STYLE },
+       { "textfont",                   LT_TEXTFONT },
+       { "tocdepth",                   LT_TOCDEPTH },
+       { "top_environment",            LT_TOP_ENVIRONMENT },
+       { "topsep",                     LT_TOPSEP }
+};
+
+
+/* ******************************************************************* */
+
+// Constructor for layout
+LyXLayout::LyXLayout ()
+{
+       margintype = MARGIN_STATIC;
+       latextype = LATEX_PARAGRAPH;
+       intitle = false;
+       needprotect = false;
+       keepempty = false;
+       font = LyXFont(LyXFont::ALL_INHERIT);
+       labelfont = LyXFont(LyXFont::ALL_INHERIT);
+       resfont = LyXFont(LyXFont::ALL_SANE);
+       reslabelfont = LyXFont(LyXFont::ALL_SANE);
+       nextnoindent = false;
+       parskip = 0.0;
+       itemsep = 0;
+       topsep = 0.0;
+       bottomsep = 0.0;
+       labelbottomsep = 0.0;
+       parsep = 0;
+       align = LYX_ALIGN_BLOCK;
+       alignpossible = LYX_ALIGN_BLOCK;
+       labeltype = LABEL_NO_LABEL;
+       // Should or should not. That is the question.
+       // spacing.set(Spacing::OneHalf);
+       fill_top = false;
+       fill_bottom = false;
+       newline_allowed = true;
+       free_spacing = false;
+}
+
+
+LyXLayout::~LyXLayout ()
+{
+}
+
+
+void LyXLayout::Copy (LyXLayout const &l)
+{
+       name = l.name;
+       obsoleted_by = l.obsoleted_by;
+       margintype = l.margintype;
+       latextype = l.latextype;
+       intitle = l.intitle;
+       needprotect = l.needprotect;
+       keepempty = l.keepempty;
+       latexname = l.latexname;
+       latexparam = l.latexparam;   //arrae970411
+       preamble = l.preamble;
+       font = l.font;
+       labelfont = l.labelfont;
+       resfont = l.resfont;
+       reslabelfont = l.reslabelfont;
+       nextnoindent = l.nextnoindent;
+       leftmargin = l.leftmargin;
+       rightmargin = l.rightmargin;
+       labelsep = l.labelsep;
+       labelindent = l.labelindent;
+       parindent = l.parindent;
+       parskip = l.parskip;
+       itemsep = l.itemsep;
+       topsep = l.topsep;
+       bottomsep = l.bottomsep;
+       labelbottomsep = l.labelbottomsep;
+       parsep = l.parsep;
+       align = l.align;
+       alignpossible = l.alignpossible;
+       labeltype = l.labeltype;
+       spacing = l.spacing;
+       labelstring = l.labelstring;
+       labelstring_appendix = l.labelstring_appendix;
+       fill_top = l.fill_top;
+       fill_bottom = l.fill_bottom;
+       newline_allowed = l.newline_allowed;
+       free_spacing = l.free_spacing;
+}
+
+
+/* Reads a layout definition from file */
+bool LyXLayout::Read (LyXLex & lexrc, LyXLayoutList * list)
+{
+       bool error = false;
+       bool finished = false;
+       
+       /* parse style section */
+       while (!finished && lexrc.IsOK() && !error) {
+               switch(lexrc.lex()) {
+
+               case -2:
+                       break;
+
+               case -1:                /* parse error */
+                       lexrc.printError("Unknown tag `$$Token'");
+                       error = true;
+                       break;
+
+               case LT_END:            /* end of structure */
+                       finished = true;
+                       break;
+
+               case LT_COPYSTYLE:     // initialize with a known style
+                       if (lexrc.next()) {
+                               LyXLayout * layout = list->GetLayout(lexrc.GetString());
+                               if (layout) {
+                                       LString tmpname = name;
+                                       Copy(*layout);
+                                       name = tmpname;
+                               } else {
+                                       lexrc.printError("Cannot copy unknown "
+                                                 "style `$$Token'");
+                               }
+                       }
+                       break;
+
+               case LT_OBSOLETEDBY:     // replace with a known style
+                       if (lexrc.next()) {
+                               LyXLayout * layout = list->GetLayout(lexrc.GetString());
+                               if (layout) {
+                                       LString tmpname = name;
+                                       Copy(*layout);
+                                       name = tmpname;
+                                       if (obsoleted_by.empty())
+                                               obsoleted_by = lexrc.GetString();
+                               } else {
+                                       lexrc.printError("Cannot replace with" 
+                                                        " unknown style "
+                                                        "`$$Token'");
+                               }
+                       }
+                       break;
+
+               case LT_MARGIN:         /* margin style definition */
+                      
+                       switch(lexrc.lex()) {
+                       case LT_STATIC:
+                               margintype = MARGIN_STATIC;
+                               break;
+                       case LT_MANUAL:
+                               margintype = MARGIN_MANUAL;
+                               break;
+                       case LT_DYNAMIC:
+                               margintype = MARGIN_DYNAMIC;
+                               break;
+                       case LT_FIRST_DYNAMIC:
+                               margintype = MARGIN_FIRST_DYNAMIC;
+                               break;
+                       case LT_RIGHT_ADDRESS_BOX:
+                               margintype = MARGIN_RIGHT_ADDRESS_BOX;
+                               break;
+                       default:
+                               lexrc.printError("Unknown margin type `$$Token'");
+                               break;
+                       }
+                       break;
+
+               case LT_LATEXTYPE:      /* latex style definition */
+                       switch (lexrc.lex()) {
+                       case LT_PARAGRAPH:
+                               latextype=LATEX_PARAGRAPH;
+                               break;
+                       case LT_COMMAND:
+                               latextype=LATEX_COMMAND;
+                               break;
+                       case LT_ENVIRONMENT:
+                               latextype=LATEX_ENVIRONMENT;
+                               break;
+                       case LT_ITEM_ENVIRONMENT:
+                               latextype=LATEX_ITEM_ENVIRONMENT;
+                               break;
+                       case LT_LIST_ENVIRONMENT:
+                               latextype=LATEX_LIST_ENVIRONMENT;
+                               break;
+                       default:
+                               lexrc.printError("Unknown latextype `$$Token'");
+                               break;
+                       }
+                       break;
+
+               case LT_INTITLE:
+                       intitle = lexrc.next() && lexrc.GetInteger();
+                       break;
+                       
+               case LT_NEED_PROTECT:
+                       needprotect = lexrc.next() && lexrc.GetInteger();
+                       break;
+                       
+               case LT_KEEPEMPTY:
+                       keepempty = lexrc.next() && lexrc.GetInteger();
+                       break;
+
+               case LT_FONT:
+                       font.lyxRead(lexrc);
+                       labelfont=font;
+                       break;
+
+               case LT_TEXTFONT:
+                       font.lyxRead(lexrc);
+                       break;
+
+               case LT_LABELFONT:
+                       labelfont.lyxRead(lexrc);
+                       break;
+
+               case LT_NEXTNOINDENT:   /* indent next paragraph ? */
+                       if (lexrc.next() && lexrc.GetInteger())
+                               nextnoindent = true;
+                       else
+                               nextnoindent = false;
+                       break;
+
+               case LT_LATEXNAME:      /* latex name */
+                       if (lexrc.next())
+                               latexname = lexrc.GetString();
+                       break;
+                        
+                //arrae970411
+               case LT_LATEXPARAM:     /* latex parameter */
+                       if (lexrc.next())
+                               latexparam = lexrc.GetString();
+                       break;
+
+               case LT_PREAMBLE:
+                       preamble = lexrc.getLongString("EndPreamble");
+                       break;
+
+               case LT_LABELTYPE:      /* label type */
+                       switch (lexrc.lex()) {
+                       case LT_NO_LABEL:
+                               labeltype = LABEL_NO_LABEL;
+                               break;
+                       case LT_MANUAL:
+                               labeltype = LABEL_MANUAL;
+                               break;
+                       case LT_TOP_ENVIRONMENT:
+                               labeltype = LABEL_TOP_ENVIRONMENT;
+                               break;
+                       case LT_CENTERED_TOP_ENVIRONMENT:
+                               labeltype = LABEL_CENTERED_TOP_ENVIRONMENT;
+                               break;
+                       case LT_STATIC:
+                               labeltype = LABEL_STATIC;
+                               break;
+                       case LT_SENSITIVE:
+                               labeltype = LABEL_SENSITIVE;
+                               break;
+                       case LT_COUNTER_CHAPTER:
+                               labeltype = LABEL_COUNTER_CHAPTER;
+                               break;
+                       case LT_COUNTER_SECTION:
+                               labeltype = LABEL_COUNTER_SECTION;
+                               break;
+                       case LT_COUNTER_SUBSECTION:
+                               labeltype = LABEL_COUNTER_SUBSECTION;
+                               break;
+                       case LT_COUNTER_SUBSUBSECTION:
+                               labeltype = LABEL_COUNTER_SUBSUBSECTION;
+                               break;
+                       case LT_COUNTER_PARAGRAPH:
+                               labeltype = LABEL_COUNTER_PARAGRAPH;
+                               break;
+                       case LT_COUNTER_SUBPARAGRAPH:
+                               labeltype = LABEL_COUNTER_SUBPARAGRAPH;
+                               break;
+                       case LT_COUNTER_ENUMI:
+                               labeltype = LABEL_COUNTER_ENUMI;
+                               break;
+                       case LT_COUNTER_ENUMII:
+                               labeltype = LABEL_COUNTER_ENUMII;
+                               break;
+                       case LT_COUNTER_ENUMIII:
+                               labeltype = LABEL_COUNTER_ENUMIII;
+                               break;
+                       case LT_COUNTER_ENUMIV:
+                               labeltype = LABEL_COUNTER_ENUMIV;
+                               break;
+                       case LT_BIBLIO:
+                               labeltype = LABEL_BIBLIO;
+                               break;
+                       default:
+                               lexrc.printError("Unknown labeltype `$$Token'");
+                       }
+                       break;
+
+               case LT_LEFTMARGIN:     /* left margin type */
+                       if (lexrc.next())
+                               leftmargin = lexrc.GetString();
+                       break;                  
+
+               case LT_RIGHTMARGIN:    /* right margin type */
+                       if (lexrc.next())
+                               rightmargin = lexrc.GetString();
+                       break;
+
+               case LT_LABELINDENT:    /* label indenting flag */
+                       if (lexrc.next())
+                               labelindent = lexrc.GetString();
+                       break;
+
+               case LT_PARINDENT:      /* paragraph indent. flag */
+                       if (lexrc.next())
+                               parindent = lexrc.GetString();
+                       break;
+
+               case LT_PARSKIP:        /* paragraph skip size */
+                       if (lexrc.next())
+                               parskip = lexrc.GetFloat();
+                       break;
+
+               case LT_ITEMSEP:        /* item separation size */
+                       if (lexrc.next())
+                               itemsep = lexrc.GetFloat();
+                       break;
+
+               case LT_TOPSEP:         /* top separation size */
+                       if (lexrc.next())
+                               topsep = lexrc.GetFloat();
+                       break;
+
+               case LT_BOTTOMSEP:      /* bottom separation size */
+                       if (lexrc.next())
+                               bottomsep = lexrc.GetFloat();
+                       break;
+
+               case LT_LABEL_BOTTOMSEP:/* label bottom separation size */
+                       if (lexrc.next())
+                               labelbottomsep = lexrc.GetFloat();
+                       break;
+
+               case LT_LABELSEP:       /* label separator */
+                       if (lexrc.next()) {
+                               labelsep = lexrc.GetString();
+                               labelsep.subst('x', ' ');
+                       }
+                       break;
+
+               case LT_PARSEP:         /* par. separation size */
+                       if (lexrc.next())
+                               parsep = lexrc.GetFloat();
+                       break;
+
+               case LT_FILL_TOP:       /* fill top flag */
+                       if (lexrc.next())
+                               fill_top = lexrc.GetInteger();
+                       break;
+
+               case LT_FILL_BOTTOM:    /* fill bottom flag */
+                       if (lexrc.next())
+                               fill_bottom = lexrc.GetInteger();
+                       break;
+
+               case LT_NEWLINE:        /* newlines allowed ? */
+                       if (lexrc.next())
+                               newline_allowed = lexrc.GetInteger();
+                       break;
+
+               case LT_ALIGN:          /* paragraph align */
+                       switch (lexrc.lex()) {
+                       case LT_BLOCK:
+                               align = LYX_ALIGN_BLOCK;
+                               break;
+                       case LT_LEFT:
+                               align = LYX_ALIGN_LEFT;
+                               break;
+                       case LT_RIGHT:
+                               align = LYX_ALIGN_RIGHT;
+                               break;
+                       case LT_CENTER:
+                               align = LYX_ALIGN_CENTER;
+                               break;
+                       case LT_LAYOUT:
+                               align = LYX_ALIGN_LAYOUT;
+                               break;
+                       default:
+                               lexrc.printError("Unknown alignment `$$Token'");
+                       }
+                       break;
+
+               case LT_ALIGNPOSSIBLE:  /* paragraph allowed align */
+               {       alignpossible = 0;
+                     
+               int lineno = lexrc.GetLineNo();
+               do {
+                       switch (lexrc.lex()) {
+                       case LT_BLOCK:
+                               alignpossible |= LYX_ALIGN_BLOCK;
+                               break;
+                       case LT_LEFT:
+                               alignpossible |= LYX_ALIGN_LEFT;
+                               break;
+                       case LT_RIGHT:
+                               alignpossible |= LYX_ALIGN_RIGHT;
+                               break;
+                       case LT_CENTER:
+                               alignpossible |= LYX_ALIGN_CENTER;
+                               break;
+                       case LT_LAYOUT:
+                               alignpossible |= LYX_ALIGN_LAYOUT;
+                               break;
+                       default:
+                               lexrc.printError("Unknown alignment `$$Token'");
+
+                       }
+               } while (lineno==lexrc.GetLineNo());
+               break;
+               }
+
+               case LT_LABELSTRING:    /* label string definition */
+                       if (lexrc.next())
+                               labelstring = lexrc.GetString();
+                       break;
+
+               case LT_LABELSTRING_APPENDIX:   /* label string appendix definition */
+                       if (lexrc.next())
+                               labelstring_appendix = lexrc.GetString();
+                       break;
+
+               case LT_FREE_SPACING:   /* Allow for free spacing. */
+                       if (lexrc.next())
+                               free_spacing = lexrc.GetInteger();
+                       break;
+
+               case LT_SPACING: // setspace.sty
+                       switch(lexrc.lex()) {
+                       case LT_SPACING_SINGLE:
+                               spacing.set(Spacing::Single);
+                               //spacing_value = 1.0;
+                               break;
+                       case LT_SPACING_ONEHALF:
+                               spacing.set(Spacing::Onehalf);
+                               //spacing_value = 1.25;
+                               break;
+                       case LT_SPACING_DOUBLE:
+                               spacing.set(Spacing::Double);
+                               //spacing_value = 1.667;
+                               break;
+                       case LT_OTHER:
+                               lexrc.next();
+                               spacing.set(Spacing::Other, lexrc.GetFloat());
+                               break;
+                       default:
+                               lexrc.printError("Unknown spacing `$$Token'");
+                       }
+                       break;
+               default:                /* context error */
+                       lexrc.printError("Tag `$$Token' is not "
+                                        "allowed in layout");
+                       error = true;
+                       break;
+               }
+       }
+
+       return error;
+}
+
+/* ******************************************************************* */
+
+LyXLayoutList::LyXLayoutList()
+{
+       l = NULL;
+       eol = NULL;
+       num_layouts = 0;
+}
+
+
+LyXLayoutList::~LyXLayoutList()
+{
+       //don't do anything. the layouts will be extracted by ToAr.
+       //destruction is done by Clean in emergencies
+}
+
+
+int LyXLayoutList::GetNum ()
+{
+       return num_layouts;
+}
+
+
+void LyXLayoutList::Add (LyXLayout *lay)
+{
+       LyXLayoutL * tmp = new LyXLayoutL;
+       tmp->layout = lay;
+       tmp->next = NULL;
+       if (!eol) l = tmp; 
+       else eol->next = tmp;
+       eol = tmp;
+       num_layouts++;
+}
+
+
+bool LyXLayoutList::Delete (LString const &name)
+{
+       LyXLayoutL * layoutl = l;
+       while(layoutl) {
+               if (layoutl->layout && layoutl->layout->name == name) {
+                       delete layoutl->layout;
+                       layoutl->layout = NULL; // not sure it is necessary
+                       num_layouts--;
+                       return true;
+               }
+               layoutl = layoutl->next;
+       }
+       return false;
+}
+
+
+LyXLayout * LyXLayoutList::GetLayout (LString const &name)
+{
+       LyXLayoutL * layoutl = l;
+       while(layoutl) {
+               if (layoutl->layout && layoutl->layout->name == name) 
+                       return layoutl->layout;
+               layoutl = layoutl->next;
+       }
+       return NULL;
+}
+
+
+LyXLayout * LyXLayoutList::ToAr ()
+{
+       LyXLayoutL * lp, * op;
+       int idx = 0;
+       LyXLayout* ar = new LyXLayout [num_layouts];
+       lp = l;
+       while (lp) {
+               if (lp->layout) {
+                       ar[idx].Copy (*lp->layout);
+                       idx++;
+                       delete lp->layout;
+               }
+               op = lp;
+               lp = lp->next;
+               delete op;
+       }
+       return ar;
+}
+
+
+//wipe up any dead layouts
+void LyXLayoutList::Clean ()
+{
+       LyXLayoutL * lp, * op;
+       lp = l;
+       while (lp) {
+               delete lp->layout;
+               op = lp;
+               lp = lp->next;
+               delete op;
+       }
+}
+
+/* ******************************************************************* */
+
+LyXTextClass::LyXTextClass(LString const &fn, LString const &cln,
+                          LString const &desc)
+{
+       name = fn;
+       latexname = cln;
+       description = desc;
+       output_type = LATEX;
+       style = NULL;
+       columns = 1;
+       sides = 1;
+       secnumdepth = 3;
+       tocdepth = 3;
+       pagestyle = "default";
+       maxcounter = LABEL_COUNTER_CHAPTER;
+       defaultfont = LyXFont(LyXFont::ALL_SANE);
+       number_of_defined_layouts = 0;
+       opt_fontsize = "10|11|12";
+       opt_pagestyle = "empty|plain|headings|fancy";
+       provides_amsmath = false;
+       provides_makeidx = false;
+       provides_url = false;
+       loaded = false;
+}
+
+
+// This is not a proper copy.
+// It just references the style rather than copying it!
+void LyXTextClass::Copy (LyXTextClass const &l)
+{
+       name = l.name;
+       latexname = l.latexname;
+       description = l.description;
+       output_type = l.output_type;
+       preamble = l.preamble;
+       options = l.options;
+       if (style) delete style;
+       style = l.style; //just aliases NO COPY
+       number_of_defined_layouts = l.number_of_defined_layouts;
+       columns = l.columns;
+       sides = l.sides;
+       secnumdepth = l.secnumdepth;
+       tocdepth = l.tocdepth;
+       pagestyle = l.pagestyle;
+       maxcounter = l.maxcounter;
+       defaultfont = l.defaultfont;
+        opt_fontsize = l.opt_fontsize;
+        opt_pagestyle = l.opt_pagestyle;
+       provides_amsmath = l.provides_amsmath;
+       provides_makeidx = l.provides_makeidx;
+       provides_url = l.provides_url;
+        loaded = l.loaded;
+
+       leftmargin = l.leftmargin;
+       rightmargin = l.rightmargin;
+         
+}
+
+
+LyXTextClass::~LyXTextClass()
+{
+       //we can't delete the style here because otherwise 
+       //our list classes wouldn't work
+}
+
+
+/* Reads a textclass structure from file */
+int LyXTextClass::Read (LString const &filename, LyXLayoutList *list)
+{
+       if (!list)
+               lyxerr.debug("Reading textclass "
+                            + MakeDisplayPath(filename), Error::TCLASS);
+       else 
+               lyxerr.debug("Reading input file "
+                            + MakeDisplayPath(filename), Error::TCLASS);
+
+       LyXLex lexrc(layoutTags, sizeof(layoutTags)/sizeof(keyword_item));
+       bool error = false;
+
+        lexrc.setFile(filename);
+       if (!lexrc.IsOK()) return -2; 
+
+       LyXLayoutList * l;
+       LyXLayout * tmpl;
+
+       if (list) 
+               l = list;
+       else 
+               l = new LyXLayoutList;
+
+       /* parsing */
+       while (lexrc.IsOK() && !error) {
+               switch(lexrc.lex()) {
+               case -2:
+                       break;
+
+               case -1:                                 
+                       lexrc.printError("Unknown tag `$$Token'");
+                       error = true;
+                       break;
+
+               case LT_OUTPUTTYPE:   // output type definition
+                       switch(lexrc.lex()) {
+                       case LT_OTLATEX:
+                               output_type=LATEX;
+                               break;
+                       case LT_OTLINUXDOC:
+                               output_type=LINUXDOC;
+                               break;
+                       case LT_OTDOCBOOK:
+                               output_type=DOCBOOK;
+                               break;
+                       case LT_OTLITERATE:
+                               output_type=LITERATE;
+                               break;
+                       default:
+                               lexrc.printError("Unknown output type `$$Token'");
+                               break;
+                       }
+                       break;
+                       
+               case LT_INPUT: // Include file
+                       if (lexrc.next()) {
+                               LString tmp = LibFileSearch("layouts",
+                                                           lexrc.GetString(), 
+                                                           "layout");
+                               
+                               if (Read(tmp, l)) {
+                                       lexrc.printError("Error reading input"
+                                                        "file: "+tmp);
+                                       error = true;
+                               }
+                       }
+                       break;
+
+               case LT_STYLE:
+                       if (lexrc.next()) {
+                               LString name = lexrc.GetString();
+                               bool is_new = false;
+
+                               name.subst('_',' ');
+                               tmpl = l->GetLayout(name);
+                               if (!tmpl) {
+                                       is_new = true;
+                                       tmpl = new LyXLayout;
+                                       tmpl->name = name;
+                               }
+
+                               lyxerr.debug("  Reading style "+tmpl->name, Error::TCLASS);
+
+                               if (!tmpl->Read(lexrc, l)) {
+                                       // Resolve fonts
+                                       tmpl->resfont = tmpl->font;
+                                       tmpl->resfont.realize(defaultfont);
+                                       tmpl->reslabelfont = tmpl->labelfont;
+                                       tmpl->reslabelfont.realize(defaultfont);
+                                       if (is_new) {
+                                               l->Add (tmpl);
+                                               // NB! we don't delete because 
+                                               // we just pass it in.... 
+                                       }
+                               } else {
+                                       lexrc.printError(
+                                                      "Error parsing style `"
+                                                      +tmpl->name+'\'');
+                                       error = true;
+                                       if (is_new) {
+                                               delete tmpl;  
+                                               //we delete dead ones here
+                                       }
+                               }
+                       }
+                       else {
+                               lexrc.printError("No name given for style: `$$Token'.");
+                               error = true;
+                       }
+                       break;
+
+               case LT_NOSTYLE:
+                       if (lexrc.next()) {
+                               LString style = lexrc.GetString();
+                               if (!l->Delete(style.subst('_', ' ')))
+                                       lexrc.printError("Cannot delete style `$$Token'");
+                       }
+                       break;
+
+               case LT_COLUMNS:
+                       if (lexrc.next())
+                               columns = lexrc.GetInteger();
+                       break;
+                       
+               case LT_SIDES:
+                       if (lexrc.next())
+                               sides = lexrc.GetInteger();
+                       break;
+                       
+               case LT_PAGESTYLE:
+                       lexrc.next();
+                       pagestyle = lexrc.GetString();
+                       pagestyle.strip();
+                       break;
+                       
+               case LT_DEFAULTFONT:
+                       defaultfont.lyxRead(lexrc);
+                       if (!defaultfont.resolved()) {
+                               lexrc.printError("Warning: defaultfont should "
+                                                "be fully instantiated!");
+                               defaultfont.realize(LyXFont::ALL_SANE);
+                       }
+                       break;
+
+               case LT_MAXCOUNTER:
+                       switch (lexrc.lex()) {
+                       case LT_COUNTER_CHAPTER:
+                               maxcounter = LABEL_COUNTER_CHAPTER;
+                               break;
+                       case LT_COUNTER_SECTION:
+                               maxcounter = LABEL_COUNTER_SECTION;
+                               break;
+                       case LT_COUNTER_SUBSECTION:
+                               maxcounter = LABEL_COUNTER_SUBSECTION;
+                               break;
+                       case LT_COUNTER_SUBSUBSECTION:
+                               maxcounter = LABEL_COUNTER_SUBSUBSECTION;
+                               break;
+                       case LT_COUNTER_PARAGRAPH:
+                               maxcounter = LABEL_COUNTER_PARAGRAPH;
+                               break;
+                       case LT_COUNTER_SUBPARAGRAPH:
+                               maxcounter = LABEL_COUNTER_SUBPARAGRAPH;
+                               break;
+                       case LT_COUNTER_ENUMI:
+                               maxcounter = LABEL_COUNTER_ENUMI;
+                               break;
+                       case LT_COUNTER_ENUMII:
+                               maxcounter = LABEL_COUNTER_ENUMII;
+                               break;
+                       case LT_COUNTER_ENUMIII:
+                               maxcounter = LABEL_COUNTER_ENUMIII;
+                               break;
+                       case LT_COUNTER_ENUMIV:
+                               maxcounter = LABEL_COUNTER_ENUMIV;
+                               break;
+                       }
+                       break;
+
+               case LT_SECNUMDEPTH:
+                       lexrc.next();
+                       secnumdepth = lexrc.GetInteger();
+                       break;
+
+               case LT_TOCDEPTH:
+                       lexrc.next();
+                       tocdepth = lexrc.GetInteger();
+                       break;
+
+        // First step to support options 
+               case LT_CLASSOPTIONS:
+               {
+                       bool getout = true;
+                       while (getout && lexrc.IsOK()) { 
+                               switch (lexrc.lex()) {
+                               case LT_FONTSIZE:
+                                       lexrc.next();
+                                       opt_fontsize = lexrc.GetString();
+                                       opt_fontsize.strip();
+                                       break;
+                               case LT_PAGESTYLE:
+                                       lexrc.next();
+                                       opt_pagestyle = lexrc.GetString(); 
+                                       opt_pagestyle.strip();
+                                       break;
+                               case LT_OTHER:
+                                       lexrc.next();
+                                       options = lexrc.GetString();
+                                       break;
+                               case LT_END: getout = false; break;
+                               default:
+                                       lexrc.printError("Out of context tag `$$Token'");
+                                       break;
+                               }
+                       }
+                       break;
+               }
+
+               case LT_PREAMBLE:
+                       preamble = lexrc.getLongString("EndPreamble");
+                       break;
+
+               case LT_PROVIDESAMSMATH:
+                       if (lexrc.next())
+                               provides_amsmath = lexrc.GetInteger();
+                       break;
+
+               case LT_PROVIDESMAKEIDX:
+                       if (lexrc.next())
+                               provides_makeidx = lexrc.GetInteger();
+                       break;
+
+               case LT_PROVIDESURL:
+                       if (lexrc.next())
+                               provides_url = lexrc.GetInteger();
+                       break;
+
+               case LT_LEFTMARGIN:     /* left margin type */
+                       if (lexrc.next())
+                               leftmargin = lexrc.GetString();
+                       break;                  
+
+               case LT_RIGHTMARGIN:    /* right margin type */
+                       if (lexrc.next())
+                               rightmargin = lexrc.GetString();
+                       break;
+
+               default:
+                       lexrc.printError("Out of context tag `$$Token'");
+                       break;
+               }
+       }       
+
+       if (!list) { // we are at top level here.
+               if (error) {
+                       number_of_defined_layouts = 0;
+                       l->Clean(); //wipe any we may have found
+                       delete l;
+               }
+               else {
+                       style = l->ToAr();
+                       number_of_defined_layouts = l->GetNum();
+                       delete l;
+               }
+               lyxerr.debug("Finished reading textclass " 
+                            + MakeDisplayPath(filename), Error::TCLASS);
+       }
+       else
+               lyxerr.debug("Finished reading input file " 
+                            + MakeDisplayPath(filename), Error::TCLASS);
+
+       return error;
+}
+
+
+// Load textclass info if not loaded yet
+void LyXTextClass::load()
+{
+       if (loaded)
+               return;
+
+       // Read style-file
+       LString real_file = LibFileSearch("layouts", name, "layout");
+
+       if (Read(real_file)) {
+               lyxerr.print("Error reading `"
+                            + MakeDisplayPath(real_file) + '\'');
+               lyxerr.print("(Check `" + name + "')");
+               lyxerr.print("Check your installation and "
+                            "try Options/Reconfigure...");
+       }
+       loaded = true;
+}
+
+/* ******************************************************************* */
+
+LyXTextClassList::LyXTextClassList()
+{
+       l = 0;
+       ar = 0;
+       num_textclass = 0;
+}
+
+
+LyXTextClassList::~LyXTextClassList()
+{
+       // The textclass list is in ar.
+       if (ar) {
+               delete [] ar;
+       }
+}
+
+
+// Gets textclass number from name
+signed char LyXTextClassList::NumberOfClass(LString const &textclass) 
+{
+       int i = 0;
+   
+       while (i < num_textclass && textclass != ar[i].name)
+               i++;
+   
+       if (i >= num_textclass)
+               i = -1;
+
+       return i;
+}
+
+
+// Gets layout structure from style number and textclass number
+LyXLayout *LyXTextClassList::Style(char textclass, char layout) 
+{
+       ar[textclass].load();
+
+       if (layout < ar[textclass].number_of_defined_layouts)
+               return &ar[textclass].style[layout];
+       else {
+               return &ar[textclass].style[0];
+       };
+}
+
+
+// Gets layout number from name and textclass number
+char LyXTextClassList::NumberOfLayout(char textclass, LString const &name) 
+{
+       ar[textclass].load();
+
+       int i = 0;
+       while (i < ar[textclass].number_of_defined_layouts 
+              && name != ar[textclass].style[i].name)
+               i++;
+
+       if (i >= ar[textclass].number_of_defined_layouts) {
+               if (name == "dummy")
+                       i = LYX_DUMMY_LAYOUT;
+               else
+                       // so that we can detect if the layout doesn't exist.
+                       i = -1; // not found
+       } 
+       return i;
+}
+
+
+// Gets a layout (style) name from layout number and textclass number
+LString LyXTextClassList::NameOfLayout(char textclass, char layout) 
+{
+       ar[textclass].load();
+
+       if (layout < ar[textclass].number_of_defined_layouts)
+               return ar[textclass].style[layout].name;
+       else if (layout == LYX_DUMMY_LAYOUT)
+               return "dummy";
+       else
+               return "@@end@@";
+}
+
+
+// Gets a textclass name from number
+LString LyXTextClassList::NameOfClass(char number) 
+{
+       if (num_textclass == 0) { 
+               if (number == 0) return "dummy";
+               else return "@@end@@";
+       }
+       if (number < num_textclass)
+               return ar[number].name;
+       else
+               return "@@end@@";
+}
+
+// Gets a textclass latexname from number
+LString LyXTextClassList::LatexnameOfClass(char number) 
+{
+       ar[number].load();
+
+       if (num_textclass == 0) { 
+               if (number == 0) return "dummy";
+               else return "@@end@@";
+       }
+       if (number < num_textclass)
+               return ar[number].latexname;
+       else
+               return "@@end@@";
+}
+
+// Gets a textclass description from number
+LString LyXTextClassList::DescOfClass(char number) 
+{
+       if (num_textclass == 0) { 
+               if (number == 0) return "dummy";
+               else return "@@end@@";
+       }
+       if (number < num_textclass)
+               return ar[number].description;
+       else
+               return "@@end@@";
+}
+
+
+// Gets a textclass structure from number
+LyXTextClass * LyXTextClassList::TextClass(char textclass) 
+{
+       ar[textclass].load();
+       if (textclass < num_textclass)
+               return &ar[textclass];
+       else
+               return &ar[0];
+}
+
+
+void LyXTextClassList::Add (LyXTextClass *t)
+{
+       LyXTextClassL ** h = &l;
+       char const *desc = t->description.c_str();
+       while (*h && strcasecmp((*h)->textclass->description.c_str(),desc)<0)
+               h = &((*h)->next);
+       LyXTextClassL * tmp = new LyXTextClassL;
+       tmp->textclass = t;
+       tmp->next = *h;
+       *h = tmp;
+       num_textclass++;
+}
+
+
+void LyXTextClassList::ToAr ()
+{
+       LyXTextClassL * lp, *op;
+       int idx = 0;
+       ar = new LyXTextClass [num_textclass];
+       lp = l;
+       while (lp) {
+               ar[idx].Copy (*lp->textclass);
+               idx++;
+               delete lp->textclass; // note we don't delete layouts
+                                     // here at all 
+               op = lp;
+               lp = lp->next;
+               delete op;
+       }
+}
+
+
+// Reads LyX textclass definitions according to textclass config file
+bool LyXTextClassList::Read ()
+{
+       LyXLex lex(NULL, 0);
+       LString real_file = LibFileSearch("", "textclass.lst");
+       lyxerr.debug("Reading textclasses from "+real_file,Error::TCLASS);
+
+       if (real_file.empty()) {
+               lyxerr.print("LyXTextClassList::Read: unable to find "
+                             "textclass file  `" +
+                             MakeDisplayPath(real_file, 1000) + "'. Exiting.");
+
+               WriteAlert(_("LyX wasn't able to find its layout descriptions!"),
+                          _("Check that the file \"textclass.lst\""),
+                          _("is installed correctly. Sorry, has to exit :-("));
+               return false;
+               // This causes LyX to end... Not a desirable behaviour. Lgb
+               // What do you propose? That the user gets a file dialog
+               // and is allowed to hunt for the file? (Asger)
+       }
+
+       lex.setFile(real_file);
+       
+       if (!lex.IsOK()) {
+               lyxerr.print("LyXTextClassList::Read: unable to open "
+                             "textclass file  `" +
+                             MakeDisplayPath(real_file, 1000) + '\'');
+               lyxerr.print("Check your installation. LyX can't continue.");
+               return false;
+       }
+       bool finished = false;
+       LString fname, clname, desc;
+       LyXTextClass * tmpl;
+
+       // Parse config-file
+       while (lex.IsOK() && !finished) {
+               switch (lex.lex()) {
+               case LyXLex::LEX_FEOF:
+                       finished = true;
+                       break;
+               default:
+                       fname = lex.GetString();
+                       lyxerr.debug("Fname: " + fname, Error::TCLASS);
+                       if (lex.next()) {
+                               clname = lex.GetString();
+                               lyxerr.debug("Clname: " + clname,
+                                            Error::TCLASS);
+                               if (lex.next()) {
+                                             desc = lex.GetString();
+                                             lyxerr.debug("Desc: " + desc,
+                                                          Error::TCLASS);
+                                             // This code is run when we have
+                                             // fname, clname and desc
+                                             tmpl =new LyXTextClass(fname,
+                                                                    clname,
+                                                                    desc);
+                                             Add (tmpl);
+                                             if (lyxerr.
+                                                 debugging(Error::TCLASS)) {
+                                                   tmpl->load();
+                                             }
+                               }
+                       }
+               }
+       }
+       
+       if (num_textclass == 0) {
+               lyxerr.print("LyXTextClassList::Read: no textclass found!");
+               WriteAlert(_("LyX wasn't able to find any layout description!"),
+                          _("Check the contents of  the file \"textclass.lst\""),
+                          _("Sorry, has to exit :-("));
+               return false;
+       }
+       else { 
+               ToAr();
+               return true;
+       }
+}
+
+// Load textclass
+/* Returns false if this fails */
+bool LyXTextClassList::Load (char const number)
+{
+       bool result = 1;
+       
+       if (number < num_textclass) {
+               ar[number].load();
+               if (!ar[number].number_of_defined_layouts) {
+                       result = 0;
+               }
+       } else {
+               result = 0;
+       }
+       return result;
+}
diff --git a/src/layout.h b/src/layout.h
new file mode 100644 (file)
index 0000000..a31aede
--- /dev/null
@@ -0,0 +1,481 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*
+*======================================================*/
+
+#ifndef _LAYOUT_H
+#define _LAYOUT_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "definitions.h"
+#include "lyxlex.h"
+#include "lyxfont.h"
+#include "Spacing.h"
+
+/// Reads the style files
+void LyXSetStyle();
+
+/// The different output types
+enum OutputType {
+        ///
+        LATEX,
+       ///
+       LINUXDOC,
+       ///
+       DOCBOOK,
+       ///
+       LITERATE
+};
+
+/// The different margin types
+enum LYX_MARGIN_TYPE {
+       ///
+       MARGIN_MANUAL,
+       ///
+       MARGIN_FIRST_DYNAMIC,
+       ///
+       MARGIN_DYNAMIC,
+       ///
+       MARGIN_STATIC,
+       ///
+       MARGIN_RIGHT_ADDRESS_BOX
+};
+
+///
+enum LYX_ALIGNMENT {
+       ///
+       LYX_ALIGN_BLOCK = 1,
+       ///
+       LYX_ALIGN_LEFT = 2,
+       ///
+       LYX_ALIGN_RIGHT = 4,
+       ///
+       LYX_ALIGN_CENTER = 8,
+       ///
+       LYX_ALIGN_LAYOUT = 16,
+       ///
+        LYX_ALIGN_SPECIAL = 32
+};
+
+/// The different LaTeX-Types
+enum LYX_LATEX_TYPES {
+       ///
+       LATEX_PARAGRAPH,
+       ///
+       LATEX_COMMAND,
+       ///
+       LATEX_ENVIRONMENT,
+       ///
+       LATEX_ITEM_ENVIRONMENT,
+       ///
+       LATEX_LIST_ENVIRONMENT
+};
+
+/// The different label types
+enum LYX_LABEL_TYPES {
+       ///
+       LABEL_NO_LABEL,
+       ///
+       LABEL_MANUAL,
+       ///
+        LABEL_BIBLIO,
+       ///
+       LABEL_TOP_ENVIRONMENT,
+       ///
+       LABEL_CENTERED_TOP_ENVIRONMENT,
+
+       // the flushright labels following now must start with LABEL_STATIC
+       ///
+       LABEL_STATIC,
+       ///
+       LABEL_SENSITIVE,
+       ///
+       LABEL_COUNTER_CHAPTER,
+       ///
+       LABEL_COUNTER_SECTION,
+       ///
+       LABEL_COUNTER_SUBSECTION,
+       ///
+       LABEL_COUNTER_SUBSUBSECTION,
+       ///
+       LABEL_COUNTER_PARAGRAPH,
+       ///
+       LABEL_COUNTER_SUBPARAGRAPH,
+       ///
+       LABEL_COUNTER_ENUMI,
+       ///
+       LABEL_COUNTER_ENUMII,
+       ///
+       LABEL_COUNTER_ENUMIII,
+       ///
+       LABEL_COUNTER_ENUMIV,
+       ///
+       LABEL_FIRST_COUNTER = LABEL_COUNTER_CHAPTER
+};
+
+
+/* Fix labels are printed flushright, manual labels flushleft. 
+* MARGIN_MANUAL and MARGIN_FIRST_DYNAMIC are *only* for LABEL_MANUAL,
+* MARGIN_DYNAMIC and MARGIN_STATIC are *not* for LABEL_MANUAL. 
+* This seems a funny restriction, but I think other combinations are
+* not needed, so I will not change it yet. 
+* Correction: MARGIN_FIRST_DYNAMIC also usable with LABEL_STATIC */
+
+
+/* There is a parindent and a parskip. Which one is used depends on the 
+* paragraph_separation-flag of the text-object. 
+* BUT: parindent is only thrown away, if a parskip is defined! So if you
+* want a space between the paragraphs and a parindent at the same time, 
+* you should set parskip to zero and use topsep, parsep and bottomsep.
+* 
+* The standard layout is an exception: its parindent is only set, if the 
+* previous paragraph is standard too. Well, this is LateX and it is good! */ 
+
+
+/// Attributes of a layout/paragraph environment
+class LyXLayoutList;
+///
+class LyXLayout {
+public:
+       ///
+       LyXLayout ();
+
+       ///
+       ~LyXLayout ();
+
+       ///
+       void Copy (LyXLayout const &l);
+
+       ///
+       bool Read (LyXLex&, LyXLayoutList *);
+
+       /// Name of the layout/paragraph environment
+       LString name;
+
+       /// Name of an layout that has replaced this layout. 
+       /** This is used to rename a layout, while keeping backward
+           compatibility 
+       */
+       LString obsoleted_by;
+
+       /// Default font for this layout/environment
+       /** The main font for this kind of environment. If an attribute has
+       LyXFont::INHERITED_*, it means that the value is specified by
+       the defaultfont for the entire layout. If we are nested, the font 
+       is inherited from the font in the environment one level up until the 
+       font is resolved. The values LyXFont::IGNORE_* and LyXFont::TOGGLE 
+       are illegal here.
+       */
+       LyXFont font;
+
+       /// Default font for labels
+       /** Interpretation the same as for font above */
+       LyXFont labelfont;
+
+       /// Resolved version of the font for this layout/environment
+       /** This is a resolved version the default font. The font is resolved
+       against the defaultfont of the entire layout. */
+       LyXFont resfont;
+
+       /// Resolved version of the font used for labels
+       /** This is a resolved version the label font. The font is resolved
+       against the defaultfont of the entire layout. */
+       LyXFont reslabelfont;
+
+       /// Text that dictates how wide the left margin is on the screen
+       LString leftmargin;
+
+       /// Text that dictates how wide the right margin is on the screen
+       LString rightmargin;
+
+       /// Text that dictates how much space to leave after a potential label
+       LString labelsep;
+
+       /// Text that dictates how much space to leave before a potential label
+       LString labelindent;
+
+       /// Text that dictates the width of the indentation of indented paragraphs
+       LString parindent;
+
+       /// Label string. "Abstract", "Reference", "Caption"...
+       LString labelstring;
+
+       /// Label string inside appendix. "Appendix", ...
+       LString labelstring_appendix;
+
+       /// LaTeX name for environment
+       LString latexname;
+
+       /// LaTeX parameter for environment
+        LString latexparam;   //arrae970411
+
+        /// Macro definitions needed for this layout
+       LString preamble;
+
+       ///
+       float parskip;
+
+       ///
+       float itemsep;
+
+       ///
+       float topsep;
+
+       ///
+       float bottomsep;
+
+       ///
+       float labelbottomsep;
+
+       ///
+       float parsep;
+
+       ///
+       Spacing spacing;
+
+       ///
+       char align; // add approp. signedness
+
+       ///
+       char alignpossible; // add approp. signedness
+
+       ///
+       char labeltype; // add approp. signedness
+
+       ///
+       char margintype; // add approp. signedness
+
+       ///
+       bool fill_top;
+
+       ///
+       bool fill_bottom;
+
+       ///
+       bool newline_allowed;
+
+       ///
+       bool nextnoindent;
+
+       ///
+       bool free_spacing;
+       /// true when the fragile commands in the paragraph need to be
+       /// \protect'ed.
+       bool needprotect;
+       /// true when empty paragraphs should be kept.
+       bool keepempty;
+       ///
+       bool isParagraph() const {
+               return latextype == LATEX_PARAGRAPH;
+       }
+       ///
+       bool isCommand() const { 
+           return latextype == LATEX_COMMAND;
+       }
+       ///
+       bool isEnvironment() const {
+               return (latextype == LATEX_ENVIRONMENT
+                       || latextype == LATEX_ITEM_ENVIRONMENT
+                       || latextype == LATEX_LIST_ENVIRONMENT);
+       }
+       /// Type of LaTeX object
+       LYX_LATEX_TYPES latextype;
+       /// Does this object belong in the title part of the document?
+       bool intitle;
+};
+
+
+///
+class LyXLayoutList {
+public:
+       ///
+       LyXLayoutList();
+       ///
+       ~LyXLayoutList();
+       ///
+       void Add (LyXLayout *l);
+       ///
+       bool Delete (LString const &name);
+        ///
+       LyXLayout *GetLayout (LString const &name);
+       ///
+       LyXLayout *ToAr();
+       ///
+       int GetNum();
+       ///
+       void Clean(); 
+private:
+       ///
+       struct LyXLayoutL {
+               ///
+               LyXLayout* layout;
+               ///
+               LyXLayoutL *next;
+       };
+       ///
+       LyXLayoutL * l;
+       ///
+       LyXLayoutL *eol;
+       ///
+       int num_layouts;
+};
+
+
+///
+class LyXTextClass  {
+public:
+       ///
+       LyXTextClass (LString const & = LString(), 
+                     LString const & = LString(), 
+                     LString const & = LString());
+       ///
+       ~LyXTextClass();
+
+       /// Not a real copy, just reference!
+       void Copy (LyXTextClass const &l);
+
+       /// Reads a textclass structure from file
+       int Read (LString const & filename, LyXLayoutList *list = NULL);
+
+       /// Sees to that the textclass structure has been loaded
+       void load();
+
+       ///
+       LString name;
+       ///
+       LString latexname;
+       ///
+       LString description;
+        ///
+        OutputType output_type;
+
+       /// Specific class options
+        LString opt_fontsize;
+       ///
+        LString opt_pagestyle;
+       ///
+       LString options;
+
+       /// Packages that are already loaded by the class
+       bool provides_amsmath;
+       ///
+       bool provides_makeidx;
+       /// 
+       bool provides_url;
+    
+       /// Base font. This one has to be fully instantiated.
+       /** Base font. The paragraph and layout fonts are resolved against
+       this font. Attributes LyXFont::INHERIT, LyXFont::IGNORE, and 
+       LyXFont::TOGGLE are extremely illegal.
+       */
+       LyXFont defaultfont;
+       /// Array of styles in this textclass
+       LyXLayout* style;
+       ///
+       unsigned char number_of_defined_layouts;
+       ///
+       unsigned char columns;
+       ///
+       unsigned char sides;
+       ///
+       signed char secnumdepth;
+       ///
+       signed char tocdepth;
+       ///
+       LString pagestyle;
+       ///
+       LString preamble;
+       ///
+       /// Text that dictates how wide the left margin is on the screen
+       LString leftmargin;
+        ///
+       /// Text that dictates how wide the right margin is on the screen
+       LString rightmargin;
+        ///
+       char maxcounter; // add approp. signedness
+private:
+       /// Has this layout file been loaded yet?
+       bool loaded;
+};
+
+
+///
+class LyXTextClassList {
+public:
+       ///
+       LyXTextClassList();
+
+       ///
+       ~LyXTextClassList();
+
+       /// Gets layout structure from layout number and textclass number
+       LyXLayout *Style(char textclass, char layout);
+
+       /// Gets layout number from textclass number and layout name
+       char NumberOfLayout(char textclass, LString const & name); // add approp. signedness
+
+       /// Gets a layout name from layout number and textclass number
+       LString NameOfLayout(char textclass, char layout); // add approp. signedness
+
+       /// Gets textclass number from name
+       /** Returns -1 if textclass name does not exist */
+       signed char NumberOfClass(LString const & textclass);
+
+       ///
+       LString NameOfClass(char number); // add approp. signedness
+
+       ///
+       LString LatexnameOfClass(char number); // add approp. signedness
+
+       ///
+       LString DescOfClass(char number); // add approp. signedness
+
+       ///
+       LyXTextClass * TextClass(char textclass); // add approp. signedness
+
+       /// Read textclass list
+       /** Returns false if this fails */
+       bool Read();
+
+       /// Load textclass
+       /** Returns false if this fails */
+       bool Load(const char number);
+private:
+       ///
+       struct LyXTextClassL {
+               ///
+               LyXTextClass * textclass;
+               ///
+               LyXTextClassL * next;
+       };
+
+       ///
+       LyXTextClassL * l;
+
+       ///
+       int num_textclass;
+
+       /// After reading, this arrays holds the textclasses
+       LyXTextClass * ar;
+
+       /// Add a textclass to list
+       void Add (LyXTextClass *l);
+
+       /// Convert final linked list to array
+       /** We read the textclasses into a linked list. After the reading,
+       the list is converted to an array, and the linked list is nuked. */
+       void ToAr();
+};
+
+/// Should not be declared here!! (Lgb) Why not? (Asger)
+extern LyXTextClassList lyxstyle;
+#endif
diff --git a/src/layout_forms.C b/src/layout_forms.C
new file mode 100644 (file)
index 0000000..224d7f6
--- /dev/null
@@ -0,0 +1,709 @@
+// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "layout_forms.h"
+
+FD_form_document *create_form_form_document(void)
+{
+  FL_OBJECT *obj;
+  FD_form_document *fdui = (FD_form_document *) fl_calloc(1, sizeof(FD_form_document));
+
+  fdui->form_document = fl_bgn_form(FL_NO_BOX, 580, 430);
+  obj = fl_add_box(FL_UP_BOX,0,0,580,430,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,290,110,120,70,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  obj = fl_add_text(FL_NORMAL_TEXT,300,100,100,20,_("Separation"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+
+  fdui->group_radio_separation = fl_bgn_group();
+  fdui->radio_indent = obj = fl_add_checkbutton(FL_RADIO_BUTTON,290,120,110,30,idex(_("Indent|#I")));fl_set_button_shortcut(obj,scex(_("Indent|#I")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_skip = obj = fl_add_checkbutton(FL_RADIO_BUTTON,290,150,110,30,idex(_("Skip|#K")));fl_set_button_shortcut(obj,scex(_("Skip|#K")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  fdui->choice_class = obj = fl_add_choice(FL_NORMAL_CHOICE,120,20,160,30,idex(_("Class:|#C")));fl_set_button_shortcut(obj,scex(_("Class:|#C")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,ChoiceClassCB,0);
+  fdui->choice_pagestyle = obj = fl_add_choice(FL_NORMAL_CHOICE,120,60,160,30,idex(_("Pagestyle:|#P")));fl_set_button_shortcut(obj,scex(_("Pagestyle:|#P")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->choice_fonts = obj = fl_add_choice(FL_NORMAL_CHOICE,120,110,160,30,idex(_("Fonts:|#F")));fl_set_button_shortcut(obj,scex(_("Fonts:|#F")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->choice_fontsize = obj = fl_add_choice(FL_NORMAL_CHOICE,120,150,160,30,idex(_("Font Size:|#O")));fl_set_button_shortcut(obj,scex(_("Font Size:|#O")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON,470,390,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,DocumentCancelCB,0);
+  fdui->button_apply = obj = fl_add_button(FL_NORMAL_BUTTON,360,390,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,DocumentApplyCB,0);
+  fdui->button_ok = obj = fl_add_button(FL_RETURN_BUTTON,250,390,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,DocumentOKCB,0);
+  fdui->input_float_placement = obj = fl_add_input(FL_NORMAL_INPUT,450,195,120,30,idex(_("Float Placement:|#L")));fl_set_button_shortcut(obj,scex(_("Float Placement:|#L")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->choice_postscript_driver = obj = fl_add_choice(FL_NORMAL_CHOICE,120,230,190,30,idex(_("PS Driver:|#S")));fl_set_button_shortcut(obj,scex(_("PS Driver:|#S")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->choice_inputenc = obj = fl_add_choice(FL_NORMAL_CHOICE,120,270,190,30,idex(_("Encoding:|#D")));fl_set_button_shortcut(obj,scex(_("Encoding:|#D")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,290,20,122,70,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,432,20,136,70,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+
+  fdui->group_radio_sides = fl_bgn_group();
+  fdui->radio_sides_one = obj = fl_add_checkbutton(FL_RADIO_BUTTON,290,30,120,30,idex(_("One|#n")));fl_set_button_shortcut(obj,scex(_("One|#n")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_sides_two = obj = fl_add_checkbutton(FL_RADIO_BUTTON,290,60,120,30,idex(_("Two|#T")));fl_set_button_shortcut(obj,scex(_("Two|#T")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  obj = fl_add_text(FL_NORMAL_TEXT,300,10,60,20,_("Sides"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_text(FL_NORMAL_TEXT,440,10,80,20,_("Columns"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+
+  fdui->group_radio_columns = fl_bgn_group();
+  fdui->radio_columns_one = obj = fl_add_checkbutton(FL_RADIO_BUTTON,432,30,110,30,idex(_("One|#e")));fl_set_button_shortcut(obj,scex(_("One|#e")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_columns_two = obj = fl_add_checkbutton(FL_RADIO_BUTTON,432,60,110,30,idex(_("Two|#w")));fl_set_button_shortcut(obj,scex(_("Two|#w")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  fdui->input_extra = obj = fl_add_input(FL_NORMAL_INPUT,450,235,120,30,idex(_("Extra Options:|#X")));fl_set_button_shortcut(obj,scex(_("Extra Options:|#X")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->choice_language = obj = fl_add_box(FL_FRAME_BOX,120,190,190,30,_("Language:"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT);
+  fdui->input_default_skip = obj = fl_add_input(FL_NORMAL_INPUT,220,310,90,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,DocumentDefskipCB,0);
+  fdui->choice_default_skip = obj = fl_add_choice(FL_NORMAL_CHOICE,120,310,90,30,idex(_("Default Skip:|#u")));fl_set_button_shortcut(obj,scex(_("Default Skip:|#u")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,DocumentDefskipCB,0);
+  fdui->slider_secnumdepth = obj = fl_add_counter(FL_SIMPLE_COUNTER,490,275,80,30,_("Section number depth"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT);
+  fdui->slider_tocdepth = obj = fl_add_counter(FL_SIMPLE_COUNTER,490,315,80,30,_("Table of contents depth"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT);
+  fdui->choice_spacing = obj = fl_add_choice(FL_NORMAL_CHOICE,120,350,120,30,idex(_("Spacing|#g")));fl_set_button_shortcut(obj,scex(_("Spacing|#g")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,DocumentSpacingCB,0);
+  fdui->button_bullets = obj = fl_add_button(FL_NORMAL_BUTTON,430,110,130,30,idex(_("Bullet Shapes|#B")));fl_set_button_shortcut(obj,scex(_("Bullet Shapes|#B")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,DocumentBulletsCB,0);
+  fdui->check_use_amsmath = obj = fl_add_checkbutton(FL_PUSH_BUTTON,430,145,120,30,idex(_("Use AMS Math|#M")));fl_set_button_shortcut(obj,scex(_("Use AMS Math|#M")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->input_spacing = obj = fl_add_input(FL_FLOAT_INPUT,250,350,95,30,"");
+    fl_set_object_callback(obj,DocumentSpacingCB,0);
+  fl_end_form();
+
+  //fdui->form_document->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_character *create_form_form_character(void)
+{
+  FL_OBJECT *obj;
+  FD_form_character *fdui = (FD_form_character *) fl_calloc(1, sizeof(FD_form_character));
+
+  fdui->form_character = fl_bgn_form(FL_NO_BOX, 300, 375);
+  obj = fl_add_box(FL_UP_BOX,0,0,300,375,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,10,280,195,"");
+  fdui->choice_family = obj = fl_add_choice(FL_NORMAL_CHOICE,94,15,191,30,idex(_("Family:|#F")));fl_set_button_shortcut(obj,scex(_("Family:|#F")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->choice_series = obj = fl_add_choice(FL_NORMAL_CHOICE,94,55,191,30,idex(_("Series:|#S")));fl_set_button_shortcut(obj,scex(_("Series:|#S")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->choice_shape = obj = fl_add_choice(FL_NORMAL_CHOICE,94,95,191,30,idex(_("Shape:|#H")));fl_set_button_shortcut(obj,scex(_("Shape:|#H")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->choice_size = obj = fl_add_choice(FL_NORMAL_CHOICE,95,230,191,30,idex(_("Size:|#Z")));fl_set_button_shortcut(obj,scex(_("Size:|#Z")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->choice_bar = obj = fl_add_choice(FL_NORMAL_CHOICE,95,290,190,30,idex(_("Misc:|#M")));fl_set_button_shortcut(obj,scex(_("Misc:|#M")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->button_apply = obj = fl_add_button(FL_NORMAL_BUTTON,60,330,80,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,CharacterApplyCB,0);
+  fdui->button_close = obj = fl_add_button(FL_RETURN_BUTTON,175,330,80,30,_("Close"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,CharacterCloseCB,0);
+  fdui->choice_color = obj = fl_add_choice(FL_NORMAL_CHOICE,95,135,191,30,idex(_("Color:|#C")));fl_set_button_shortcut(obj,scex(_("Color:|#C")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->check_toggle_all = obj = fl_add_checkbutton(FL_PUSH_BUTTON,30,175,260,25,idex(_("Toggle on all these|#T")));fl_set_button_shortcut(obj,scex(_("Toggle on all these|#T")),1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,220,280,45,"");
+  obj = fl_add_text(FL_NORMAL_TEXT,20,210,210,20,_("These are never toggled"));
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,280,280,45,"");
+  obj = fl_add_text(FL_NORMAL_TEXT,20,270,215,20,_("These are always toggled"));
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fl_end_form();
+
+  //fdui->form_character->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_paragraph *create_form_form_paragraph(void)
+{
+  FL_OBJECT *obj;
+  FD_form_paragraph *fdui = (FD_form_paragraph *) fl_calloc(1, sizeof(FD_form_paragraph));
+
+  fdui->form_paragraph = fl_bgn_form(FL_NO_BOX, 490, 290);
+  obj = fl_add_box(FL_UP_BOX,0,0,490,290,"");
+  fdui->button_ok = obj = fl_add_button(FL_RETURN_BUTTON,127,250,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,ParagraphOKCB,0);
+  fdui->button_apply = obj = fl_add_button(FL_NORMAL_BUTTON,244,250,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,ParagraphApplyCB,0);
+  fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON,360,250,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,ParagraphCancelCB,0);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,360,110,120,50,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,110,340,90,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,360,20,120,70,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,210,20,140,70,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,20,190,70,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  fdui->input_labelwidth = obj = fl_add_input(FL_NORMAL_INPUT,100,210,360,30,idex(_("Label Width:|#d")));fl_set_button_shortcut(obj,scex(_("Label Width:|#d")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_West, FL_East);
+    fl_set_object_resize(obj, FL_RESIZE_X);
+  obj = fl_add_text(FL_NORMAL_TEXT,370,100,60,20,_("Indent"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->check_lines_top = obj = fl_add_checkbutton(FL_PUSH_BUTTON,230,30,120,30,idex(_("Above|#b")));fl_set_button_shortcut(obj,scex(_("Above|#b")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->check_lines_bottom = obj = fl_add_checkbutton(FL_PUSH_BUTTON,230,60,120,30,idex(_("Below|#E")));fl_set_button_shortcut(obj,scex(_("Below|#E")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->check_pagebreaks_top = obj = fl_add_checkbutton(FL_PUSH_BUTTON,360,30,120,30,idex(_("Above|#o")));fl_set_button_shortcut(obj,scex(_("Above|#o")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->check_pagebreaks_bottom = obj = fl_add_checkbutton(FL_PUSH_BUTTON,360,60,120,30,idex(_("Below|#l")));fl_set_button_shortcut(obj,scex(_("Below|#l")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->check_noindent = obj = fl_add_checkbutton(FL_PUSH_BUTTON,360,120,120,30,idex(_("No Indent|#I")));fl_set_button_shortcut(obj,scex(_("No Indent|#I")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+
+  fdui->group_radio_alignment = fl_bgn_group();
+  fdui->radio_align_right = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,30,80,30,idex(_("Right|#R")));fl_set_button_shortcut(obj,scex(_("Right|#R")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_align_left = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,60,80,30,idex(_("Left|#f")));fl_set_button_shortcut(obj,scex(_("Left|#f")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_align_block = obj = fl_add_checkbutton(FL_RADIO_BUTTON,100,30,80,30,idex(_("Block|#c")));fl_set_button_shortcut(obj,scex(_("Block|#c")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_align_center = obj = fl_add_checkbutton(FL_RADIO_BUTTON,100,60,80,30,idex(_("Center|#n")));fl_set_button_shortcut(obj,scex(_("Center|#n")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  fdui->input_space_above = obj = fl_add_input(FL_NORMAL_INPUT,180,120,90,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,ParagraphVSpaceCB,0);
+  fdui->input_space_below = obj = fl_add_input(FL_NORMAL_INPUT,180,160,90,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,ParagraphVSpaceCB,0);
+  fdui->choice_space_above = obj = fl_add_choice(FL_NORMAL_CHOICE,70,120,100,30,idex(_("Above:|#v")));fl_set_button_shortcut(obj,scex(_("Above:|#v")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,ParagraphVSpaceCB,0);
+  fdui->choice_space_below = obj = fl_add_choice(FL_NORMAL_CHOICE,70,160,100,30,idex(_("Below:|#w")));fl_set_button_shortcut(obj,scex(_("Below:|#w")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,ParagraphVSpaceCB,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,370,10,100,20,_("Pagebreaks"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_text(FL_NORMAL_TEXT,230,10,50,20,_("Lines"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,10,80,20,_("Alignment"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,100,130,20,_("Vertical Spaces"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->button_pextra = obj = fl_add_button(FL_NORMAL_BUTTON,10,250,100,30,idex(_("ExtraOpt|#X")));fl_set_button_shortcut(obj,scex(_("ExtraOpt|#X")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,ParagraphExtraOpen,0);
+  fdui->check_space_above = obj = fl_add_checkbutton(FL_PUSH_BUTTON,270,120,40,30,idex(_("Keep|#K")));fl_set_button_shortcut(obj,scex(_("Keep|#K")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->check_space_below = obj = fl_add_checkbutton(FL_PUSH_BUTTON,270,160,40,30,idex(_("Keep|#p")));fl_set_button_shortcut(obj,scex(_("Keep|#p")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_form();
+
+  //fdui->form_paragraph->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_preamble *create_form_form_preamble(void)
+{
+  FL_OBJECT *obj;
+  FD_form_preamble *fdui = (FD_form_preamble *) fl_calloc(1, sizeof(FD_form_preamble));
+
+  fdui->form_preamble = fl_bgn_form(FL_NO_BOX, 380, 420);
+  obj = fl_add_box(FL_UP_BOX,0,0,380,420,"");
+  fdui->button_ok = obj = fl_add_button(FL_NORMAL_BUTTON,50,380,100,30,idex(_("OK|#O")));fl_set_button_shortcut(obj,scex(_("OK|#O")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,PreambleOKCB,0);
+  fdui->button_apply = obj = fl_add_button(FL_NORMAL_BUTTON,160,380,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,PreambleApplyCB,0);
+  fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON,270,380,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,PreambleCancelCB,0);
+  fdui->input_preamble = obj = fl_add_input(FL_MULTILINE_INPUT,10,10,360,360,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_form();
+
+  //fdui->form_preamble->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_quotes *create_form_form_quotes(void)
+{
+  FL_OBJECT *obj;
+  FD_form_quotes *fdui = (FD_form_quotes *) fl_calloc(1, sizeof(FD_form_quotes));
+
+  fdui->form_quotes = fl_bgn_form(FL_NO_BOX, 340, 130);
+  obj = fl_add_box(FL_UP_BOX,0,0,340,130,"");
+  obj = fl_add_button(FL_RETURN_BUTTON,10,90,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,QuotesOKCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,120,90,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,QuotesApplyCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,230,90,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,QuotesCancelCB,0);
+  fdui->choice_quotes_language = obj = fl_add_choice(FL_NORMAL_CHOICE,90,10,160,30,idex(_("Type:|#T")));fl_set_button_shortcut(obj,scex(_("Type:|#T")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+
+  fdui->group_radio_quotes_number = fl_bgn_group();
+  fdui->radio_single = obj = fl_add_checkbutton(FL_RADIO_BUTTON,90,50,80,30,idex(_("Single|#S")));fl_set_button_shortcut(obj,scex(_("Single|#S")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_double = obj = fl_add_checkbutton(FL_RADIO_BUTTON,170,50,80,30,idex(_("Double|#D")));fl_set_button_shortcut(obj,scex(_("Double|#D")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  obj = fl_add_text(FL_NORMAL_TEXT,290,230,10,10,_("Text"));
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+  fl_end_form();
+
+  //fdui->form_quotes->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_paper *create_form_form_paper(void)
+{
+  FL_OBJECT *obj;
+  FD_form_paper *fdui = (FD_form_paper *) fl_calloc(1, sizeof(FD_form_paper));
+
+  fdui->form_paper = fl_bgn_form(FL_NO_BOX, 440, 430);
+  obj = fl_add_box(FL_UP_BOX,0,0,440,430,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,230,100,200,100,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+  fdui->choice_paperpackage = obj = fl_add_choice(FL_NORMAL_CHOICE,290,20,140,30,idex(_("Special:|#S")));fl_set_button_shortcut(obj,scex(_("Special:|#S")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,230,220,200,130,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,180,190,170,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,170,70,20,_("Margins"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_text(FL_NORMAL_TEXT,240,210,160,20,_("Foot/Head Margins"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON,320,390,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperCancelCB,0);
+  fdui->button_apply = obj = fl_add_button(FL_NORMAL_BUTTON,210,390,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperApplyCB,0);
+  fdui->button_ok = obj = fl_add_button(FL_RETURN_BUTTON,100,390,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperOKCB,0);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,440,360,10,10,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,440,350,10,10,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,100,190,70,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,90,95,20,_("Orientation"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+
+  fdui->greoup_radio_orientation = fl_bgn_group();
+  fdui->radio_portrait = obj = fl_add_checkbutton(FL_RADIO_BUTTON,20,105,120,30,idex(_("Portrait|#o")));fl_set_button_shortcut(obj,scex(_("Portrait|#o")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_landscape = obj = fl_add_checkbutton(FL_RADIO_BUTTON,20,135,120,30,idex(_("Landscape|#L")));fl_set_button_shortcut(obj,scex(_("Landscape|#L")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  fdui->choice_papersize2 = obj = fl_add_choice(FL_NORMAL_CHOICE,70,20,160,30,idex(_("Papersize:|#P")));fl_set_button_shortcut(obj,scex(_("Papersize:|#P")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,240,90,150,20,_("Custom Papersize"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->push_use_geometry = obj = fl_add_checkbutton(FL_PUSH_BUTTON,20,55,170,30,idex(_("Use Geometry Package|#U")));fl_set_button_shortcut(obj,scex(_("Use Geometry Package|#U")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->input_custom_width = obj = fl_add_input(FL_NORMAL_INPUT,330,115,90,30,idex(_("Width:|#W")));fl_set_button_shortcut(obj,scex(_("Width:|#W")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  fdui->input_custom_height = obj = fl_add_input(FL_NORMAL_INPUT,330,155,90,30,idex(_("Height:|#H")));fl_set_button_shortcut(obj,scex(_("Height:|#H")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  fdui->input_top_margin = obj = fl_add_input(FL_NORMAL_INPUT,100,190,90,30,idex(_("Top:|#T")));fl_set_button_shortcut(obj,scex(_("Top:|#T")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  fdui->input_bottom_margin = obj = fl_add_input(FL_NORMAL_INPUT,100,230,90,30,idex(_("Bottom:|#B")));fl_set_button_shortcut(obj,scex(_("Bottom:|#B")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  fdui->input_left_margin = obj = fl_add_input(FL_NORMAL_INPUT,100,270,90,30,idex(_("Left:|#e")));fl_set_button_shortcut(obj,scex(_("Left:|#e")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  fdui->input_right_margin = obj = fl_add_input(FL_NORMAL_INPUT,100,310,90,30,idex(_("Right:|#R")));fl_set_button_shortcut(obj,scex(_("Right:|#R")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  fdui->input_head_height = obj = fl_add_input(FL_NORMAL_INPUT,330,230,90,30,idex(_("Headheight:|#i")));fl_set_button_shortcut(obj,scex(_("Headheight:|#i")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  fdui->input_head_sep = obj = fl_add_input(FL_NORMAL_INPUT,330,270,90,30,idex(_("Headsep:|#d")));fl_set_button_shortcut(obj,scex(_("Headsep:|#d")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  fdui->input_foot_skip = obj = fl_add_input(FL_NORMAL_INPUT,330,310,90,30,idex(_("Footskip:|#F")));fl_set_button_shortcut(obj,scex(_("Footskip:|#F")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PaperMarginsCB,0);
+  fdui->text_warning = obj = fl_add_text(FL_NORMAL_TEXT,10,360,420,20,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fl_end_form();
+
+  //fdui->form_paper->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_table_options *create_form_form_table_options(void)
+{
+  FL_OBJECT *obj;
+  FD_form_table_options *fdui = (FD_form_table_options *) fl_calloc(1, sizeof(FD_form_table_options));
+
+  fdui->form_table_options = fl_bgn_form(FL_NO_BOX, 540, 310);
+  obj = fl_add_box(FL_UP_BOX,0,0,540,310,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,300,120,110,60,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,300,20,110,90,"");
+  fdui->text_warning = obj = fl_add_text(FL_NORMAL_TEXT,20,275,330,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->button_close = obj = fl_add_button(FL_RETURN_BUTTON,430,270,100,30,_("Close"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptCloseCB,0);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,20,20,145,105,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  obj = fl_add_text(FL_NORMAL_TEXT,30,10,70,20,_("Borders"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->radio_border_top = obj = fl_add_checkbutton(FL_PUSH_BUTTON,75,45,25,25,idex(_("Top|#T")));fl_set_button_shortcut(obj,scex(_("Top|#T")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_border_bottom = obj = fl_add_checkbutton(FL_PUSH_BUTTON,75,75,25,25,idex(_("Bottom|#B")));fl_set_button_shortcut(obj,scex(_("Bottom|#B")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_BOTTOM_LEFT);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_border_left = obj = fl_add_checkbutton(FL_PUSH_BUTTON,55,60,25,25,idex(_("Left|#L")));fl_set_button_shortcut(obj,scex(_("Left|#L")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_border_right = obj = fl_add_checkbutton(FL_PUSH_BUTTON,95,60,25,25,idex(_("Right|#R")));fl_set_button_shortcut(obj,scex(_("Right|#R")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,175,20,105,105,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_text(FL_NORMAL_TEXT,180,10,90,20,_("Alignment"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_text(FL_NORMAL_TEXT,300,10,100,20,_("Special Cell"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->radio_multicolumn = obj = fl_add_checkbutton(FL_PUSH_BUTTON,300,30,95,25,idex(_("Multicolumn|#M")));fl_set_button_shortcut(obj,scex(_("Multicolumn|#M")),1);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->button_append_column = obj = fl_add_button(FL_NORMAL_BUTTON,10,170,120,30,idex(_("Append Column|#A")));fl_set_button_shortcut(obj,scex(_("Append Column|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->button_delete_column = obj = fl_add_button(FL_NORMAL_BUTTON,140,170,120,30,idex(_("Delete Column|#O")));fl_set_button_shortcut(obj,scex(_("Delete Column|#O")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->button_append_row = obj = fl_add_button(FL_NORMAL_BUTTON,10,200,120,30,idex(_("Append Row|#p")));fl_set_button_shortcut(obj,scex(_("Append Row|#p")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->button_delete_row = obj = fl_add_button(FL_NORMAL_BUTTON,140,200,120,30,idex(_("Delete Row|#w")));fl_set_button_shortcut(obj,scex(_("Delete Row|#w")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->button_table_delete = obj = fl_add_button(FL_NORMAL_BUTTON,10,240,250,30,idex(_("Delete Table|#D")));fl_set_button_shortcut(obj,scex(_("Delete Table|#D")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->input_table_column = obj = fl_add_input(FL_NORMAL_INPUT,290,240,60,30,_("Column"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+  fdui->input_table_row = obj = fl_add_input(FL_NORMAL_INPUT,360,240,60,30,_("Row"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+  fdui->button_set_borders = obj = fl_add_button(FL_NORMAL_BUTTON,10,140,120,30,idex(_("Set Borders|#S")));fl_set_button_shortcut(obj,scex(_("Set Borders|#S")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->button_unset_borders = obj = fl_add_button(FL_NORMAL_BUTTON,140,140,120,30,idex(_("Unset Borders|#U")));fl_set_button_shortcut(obj,scex(_("Unset Borders|#U")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_longtable = obj = fl_add_checkbutton(FL_PUSH_BUTTON,300,130,90,25,_("Longtable"));
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->input_column_width = obj = fl_add_input(FL_NORMAL_INPUT,330,190,95,30,_("Width"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,SetPWidthCB,0);
+  fdui->radio_rotate_table = obj = fl_add_checkbutton(FL_PUSH_BUTTON,300,155,90,25,idex(_("Rotate 90°|#9")));fl_set_button_shortcut(obj,scex(_("Rotate 90°|#9")),1);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_linebreak_cell = obj = fl_add_checkbutton(FL_PUSH_BUTTON,300,55,95,25,idex(_("Linebreaks|#N")));fl_set_button_shortcut(obj,scex(_("Linebreaks|#N")),1);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,300,110,100,20,_("Spec. Table"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,420,20,100,160,"");
+  obj = fl_add_text(FL_NORMAL_TEXT,425,10,85,20,_("Longtable"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->radio_lt_firsthead = obj = fl_add_checkbutton(FL_PUSH_BUTTON,420,30,90,25,_("First Head"));
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_lt_head = obj = fl_add_checkbutton(FL_PUSH_BUTTON,420,60,90,25,_("Head"));
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_lt_foot = obj = fl_add_checkbutton(FL_PUSH_BUTTON,420,90,90,25,_("Foot"));
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_lt_lastfoot = obj = fl_add_checkbutton(FL_PUSH_BUTTON,420,120,90,25,_("Last Foot"));
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_lt_newpage = obj = fl_add_checkbutton(FL_PUSH_BUTTON,420,150,90,25,_("New Page"));
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_rotate_cell = obj = fl_add_checkbutton(FL_PUSH_BUTTON,300,80,95,25,_("Rotate 90°"));
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->button_table_extra = obj = fl_add_button(FL_NORMAL_BUTTON,430,235,100,30,idex(_("Extra|#X")));fl_set_button_shortcut(obj,scex(_("Extra|#X")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_align_left = obj = fl_add_checkbutton(FL_RADIO_BUTTON,175,30,80,25,idex(_("Left|#e")));fl_set_button_shortcut(obj,scex(_("Left|#e")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_align_right = obj = fl_add_checkbutton(FL_RADIO_BUTTON,175,55,80,25,idex(_("Right|#i")));fl_set_button_shortcut(obj,scex(_("Right|#i")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fdui->radio_align_center = obj = fl_add_checkbutton(FL_RADIO_BUTTON,175,80,80,25,idex(_("Center|#C")));fl_set_button_shortcut(obj,scex(_("Center|#C")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fl_end_form();
+
+  //fdui->form_table_options->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_paragraph_extra *create_form_form_paragraph_extra(void)
+{
+  FL_OBJECT *obj;
+  FD_form_paragraph_extra *fdui = (FD_form_paragraph_extra *) fl_calloc(1, sizeof(FD_form_paragraph_extra));
+
+  fdui->form_paragraph_extra = fl_bgn_form(FL_NO_BOX, 460, 250);
+  obj = fl_add_box(FL_UP_BOX,0,0,460,250,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,20,170,100,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,350,20,100,100,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,190,20,150,100,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,10,120,20,_("Extra Options"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->input_pextra_width = obj = fl_add_input(FL_NORMAL_INPUT,240,30,90,30,idex(_("Length|#L")));fl_set_button_shortcut(obj,scex(_("Length|#L")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,CheckPExtraOptCB,0);
+  fdui->button_ok = obj = fl_add_button(FL_RETURN_BUTTON,130,210,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,ParagraphExtraOKCB,0);
+  fdui->button_apply = obj = fl_add_button(FL_NORMAL_BUTTON,240,210,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,ParagraphExtraApplyCB,0);
+  fdui->button_cancel = obj = fl_add_button(FL_NORMAL_BUTTON,350,210,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,ParagraphExtraCancelCB,0);
+  fdui->input_pextra_widthp = obj = fl_add_input(FL_INT_INPUT,240,70,90,30,idex(_("or %|#o")));fl_set_button_shortcut(obj,scex(_("or %|#o")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,CheckPExtraOptCB,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,200,10,60,20,_("Width"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_text(FL_NORMAL_TEXT,350,10,90,20,_("Alignment"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+
+  fdui->group_alignment = fl_bgn_group();
+  fdui->radio_pextra_top = obj = fl_add_checkbutton(FL_RADIO_BUTTON,360,30,80,30,idex(_("Top|#T")));fl_set_button_shortcut(obj,scex(_("Top|#T")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,CheckPExtraOptCB,0);
+  fdui->radio_pextra_middle = obj = fl_add_checkbutton(FL_RADIO_BUTTON,360,60,80,30,idex(_("Middle|#d")));fl_set_button_shortcut(obj,scex(_("Middle|#d")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,CheckPExtraOptCB,0);
+  fdui->radio_pextra_bottom = obj = fl_add_checkbutton(FL_RADIO_BUTTON,360,90,80,30,idex(_("Bottom|#B")));fl_set_button_shortcut(obj,scex(_("Bottom|#B")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,CheckPExtraOptCB,0);
+  fl_end_group();
+
+  fdui->text_warning = obj = fl_add_text(FL_NORMAL_TEXT,10,170,330,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->radio_pextra_hfill = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,130,300,30,idex(_("HFill between Minipage paragraphs|#H")));fl_set_button_shortcut(obj,scex(_("HFill between Minipage paragraphs|#H")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_pextra_startmp = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,160,260,30,idex(_("Start new Minipage|#S")));fl_set_button_shortcut(obj,scex(_("Start new Minipage|#S")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+
+  fdui->group_extraopt = fl_bgn_group();
+  fdui->radio_pextra_indent = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,30,160,30,idex(_("Indented Paragraph|#I")));fl_set_button_shortcut(obj,scex(_("Indented Paragraph|#I")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,CheckPExtraOptCB,0);
+  fdui->radio_pextra_minipage = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,60,160,30,idex(_("Minipage|#M")));fl_set_button_shortcut(obj,scex(_("Minipage|#M")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,CheckPExtraOptCB,0);
+  fdui->radio_pextra_floatflt = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,90,160,30,idex(_("Floatflt|#F")));fl_set_button_shortcut(obj,scex(_("Floatflt|#F")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,CheckPExtraOptCB,0);
+  fl_end_group();
+
+  fl_end_form();
+
+  //fdui->form_paragraph_extra->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_table_extra *create_form_form_table_extra(void)
+{
+  FL_OBJECT *obj;
+  FD_form_table_extra *fdui = (FD_form_table_extra *) fl_calloc(1, sizeof(FD_form_table_extra));
+
+  fdui->form_table_extra = fl_bgn_form(FL_NO_BOX, 330, 200);
+  obj = fl_add_box(FL_UP_BOX,0,0,330,200,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,15,95,305,60,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,85,205,20,_("Special Multicolumn Alignment"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,15,20,305,60,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->input_special_alignment = obj = fl_add_input(FL_NORMAL_INPUT,25,35,280,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  obj = fl_add_button(FL_RETURN_BUTTON,220,160,100,30,_("Close"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableSpeCloseCB,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,10,170,20,_("Special Column Alignment"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->input_special_multialign = obj = fl_add_input(FL_NORMAL_INPUT,25,110,280,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,TableOptionsCB,0);
+  fl_end_form();
+
+  //fdui->form_table_extra->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
diff --git a/src/layout_forms.h b/src/layout_forms.h
new file mode 100644 (file)
index 0000000..b61de63
--- /dev/null
@@ -0,0 +1,277 @@
+/** Header file generated with fdesign on Mon Apr 12 19:09:42 1999.**/
+
+#ifndef FD_form_document_h_
+#define FD_form_document_h_
+
+/** Callbacks, globals and object handlers **/
+extern void ChoiceClassCB(FL_OBJECT *, long);
+extern void DocumentCancelCB(FL_OBJECT *, long);
+extern void DocumentApplyCB(FL_OBJECT *, long);
+extern void DocumentOKCB(FL_OBJECT *, long);
+extern void DocumentDefskipCB(FL_OBJECT *, long);
+extern void DocumentSpacingCB(FL_OBJECT *, long);
+extern void DocumentBulletsCB(FL_OBJECT *, long);
+
+extern void CharacterApplyCB(FL_OBJECT *, long);
+extern void CharacterCloseCB(FL_OBJECT *, long);
+
+extern void ParagraphOKCB(FL_OBJECT *, long);
+extern void ParagraphApplyCB(FL_OBJECT *, long);
+extern void ParagraphCancelCB(FL_OBJECT *, long);
+extern void ParagraphVSpaceCB(FL_OBJECT *, long);
+extern void ParagraphExtraOpen(FL_OBJECT *, long);
+
+extern void PreambleOKCB(FL_OBJECT *, long);
+extern void PreambleApplyCB(FL_OBJECT *, long);
+extern void PreambleCancelCB(FL_OBJECT *, long);
+
+extern void QuotesOKCB(FL_OBJECT *, long);
+extern void QuotesApplyCB(FL_OBJECT *, long);
+extern void QuotesCancelCB(FL_OBJECT *, long);
+
+extern void PaperMarginsCB(FL_OBJECT *, long);
+extern void PaperCancelCB(FL_OBJECT *, long);
+extern void PaperApplyCB(FL_OBJECT *, long);
+extern void PaperOKCB(FL_OBJECT *, long);
+
+extern void TableOptCloseCB(FL_OBJECT *, long);
+extern void TableOptionsCB(FL_OBJECT *, long);
+extern void SetPWidthCB(FL_OBJECT *, long);
+
+extern void CheckPExtraOptCB(FL_OBJECT *, long);
+extern void ParagraphExtraOKCB(FL_OBJECT *, long);
+extern void ParagraphExtraApplyCB(FL_OBJECT *, long);
+extern void ParagraphExtraCancelCB(FL_OBJECT *, long);
+
+extern void TableOptionsCB(FL_OBJECT *, long);
+extern void TableSpeCloseCB(FL_OBJECT *, long);
+
+/* Additional Functions/Methods */
+
+#include "bufferparams.h"
+
+extern bool UpdateLayoutDocument(BufferParams *params = NULL);
+extern bool UpdateLayoutPreamble();
+extern bool UpdateLayoutPaper();
+extern bool UpdateLayoutQuotes();
+extern bool UpdateLayoutParagraph();
+extern bool UpdateParagraphExtra();
+extern bool UpdateLayoutTable(int);
+
+extern void MenuLayoutCharacter();
+extern void MenuLayoutDocument();
+extern void MenuLayoutPreamble();
+extern void MenuLayoutPaper();
+extern void MenuLayoutQuotes();
+extern void MenuLayoutParagraph();
+extern void MenuLayoutTable(int);
+
+/**** Forms and Objects ****/
+typedef struct {
+       FL_FORM *form_document;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *group_radio_separation;
+       FL_OBJECT *radio_indent;
+       FL_OBJECT *radio_skip;
+       FL_OBJECT *choice_class;
+       FL_OBJECT *choice_pagestyle;
+       FL_OBJECT *choice_fonts;
+       FL_OBJECT *choice_fontsize;
+       FL_OBJECT *button_cancel;
+       FL_OBJECT *button_apply;
+       FL_OBJECT *button_ok;
+       FL_OBJECT *input_float_placement;
+       FL_OBJECT *choice_postscript_driver;
+       FL_OBJECT *choice_inputenc;
+       FL_OBJECT *group_radio_sides;
+       FL_OBJECT *radio_sides_one;
+       FL_OBJECT *radio_sides_two;
+       FL_OBJECT *group_radio_columns;
+       FL_OBJECT *radio_columns_one;
+       FL_OBJECT *radio_columns_two;
+       FL_OBJECT *input_extra;
+       FL_OBJECT *choice_language;
+       FL_OBJECT *input_default_skip;
+       FL_OBJECT *choice_default_skip;
+       FL_OBJECT *slider_secnumdepth;
+       FL_OBJECT *slider_tocdepth;
+       FL_OBJECT *choice_spacing;
+       FL_OBJECT *button_bullets;
+       FL_OBJECT *check_use_amsmath;
+       FL_OBJECT *input_spacing;
+} FD_form_document;
+
+extern FD_form_document * create_form_form_document(void);
+typedef struct {
+       FL_FORM *form_character;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *choice_family;
+       FL_OBJECT *choice_series;
+       FL_OBJECT *choice_shape;
+       FL_OBJECT *choice_size;
+       FL_OBJECT *choice_bar;
+       FL_OBJECT *button_apply;
+       FL_OBJECT *button_close;
+       FL_OBJECT *choice_color;
+       FL_OBJECT *check_toggle_all;
+} FD_form_character;
+
+extern FD_form_character * create_form_form_character(void);
+typedef struct {
+       FL_FORM *form_paragraph;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *button_ok;
+       FL_OBJECT *button_apply;
+       FL_OBJECT *button_cancel;
+       FL_OBJECT *input_labelwidth;
+       FL_OBJECT *check_lines_top;
+       FL_OBJECT *check_lines_bottom;
+       FL_OBJECT *check_pagebreaks_top;
+       FL_OBJECT *check_pagebreaks_bottom;
+       FL_OBJECT *check_noindent;
+       FL_OBJECT *group_radio_alignment;
+       FL_OBJECT *radio_align_right;
+       FL_OBJECT *radio_align_left;
+       FL_OBJECT *radio_align_block;
+       FL_OBJECT *radio_align_center;
+       FL_OBJECT *input_space_above;
+       FL_OBJECT *input_space_below;
+       FL_OBJECT *choice_space_above;
+       FL_OBJECT *choice_space_below;
+       FL_OBJECT *button_pextra;
+       FL_OBJECT *check_space_above;
+       FL_OBJECT *check_space_below;
+} FD_form_paragraph;
+
+extern FD_form_paragraph * create_form_form_paragraph(void);
+typedef struct {
+       FL_FORM *form_preamble;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *button_ok;
+       FL_OBJECT *button_apply;
+       FL_OBJECT *button_cancel;
+       FL_OBJECT *input_preamble;
+} FD_form_preamble;
+
+extern FD_form_preamble * create_form_form_preamble(void);
+typedef struct {
+       FL_FORM *form_quotes;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *choice_quotes_language;
+       FL_OBJECT *group_radio_quotes_number;
+       FL_OBJECT *radio_single;
+       FL_OBJECT *radio_double;
+} FD_form_quotes;
+
+extern FD_form_quotes * create_form_form_quotes(void);
+typedef struct {
+       FL_FORM *form_paper;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *choice_paperpackage;
+       FL_OBJECT *button_cancel;
+       FL_OBJECT *button_apply;
+       FL_OBJECT *button_ok;
+       FL_OBJECT *greoup_radio_orientation;
+       FL_OBJECT *radio_portrait;
+       FL_OBJECT *radio_landscape;
+       FL_OBJECT *choice_papersize2;
+       FL_OBJECT *push_use_geometry;
+       FL_OBJECT *input_custom_width;
+       FL_OBJECT *input_custom_height;
+       FL_OBJECT *input_top_margin;
+       FL_OBJECT *input_bottom_margin;
+       FL_OBJECT *input_left_margin;
+       FL_OBJECT *input_right_margin;
+       FL_OBJECT *input_head_height;
+       FL_OBJECT *input_head_sep;
+       FL_OBJECT *input_foot_skip;
+       FL_OBJECT *text_warning;
+} FD_form_paper;
+
+extern FD_form_paper * create_form_form_paper(void);
+typedef struct {
+       FL_FORM *form_table_options;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *text_warning;
+       FL_OBJECT *button_close;
+       FL_OBJECT *radio_border_top;
+       FL_OBJECT *radio_border_bottom;
+       FL_OBJECT *radio_border_left;
+       FL_OBJECT *radio_border_right;
+       FL_OBJECT *radio_multicolumn;
+       FL_OBJECT *button_append_column;
+       FL_OBJECT *button_delete_column;
+       FL_OBJECT *button_append_row;
+       FL_OBJECT *button_delete_row;
+       FL_OBJECT *button_table_delete;
+       FL_OBJECT *input_table_column;
+       FL_OBJECT *input_table_row;
+       FL_OBJECT *button_set_borders;
+       FL_OBJECT *button_unset_borders;
+       FL_OBJECT *radio_longtable;
+       FL_OBJECT *input_column_width;
+       FL_OBJECT *radio_rotate_table;
+       FL_OBJECT *radio_linebreak_cell;
+       FL_OBJECT *radio_lt_firsthead;
+       FL_OBJECT *radio_lt_head;
+       FL_OBJECT *radio_lt_foot;
+       FL_OBJECT *radio_lt_lastfoot;
+       FL_OBJECT *radio_lt_newpage;
+       FL_OBJECT *radio_rotate_cell;
+       FL_OBJECT *button_table_extra;
+       FL_OBJECT *radio_align_left;
+       FL_OBJECT *radio_align_right;
+       FL_OBJECT *radio_align_center;
+} FD_form_table_options;
+
+extern FD_form_table_options * create_form_form_table_options(void);
+typedef struct {
+       FL_FORM *form_paragraph_extra;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *input_pextra_width;
+       FL_OBJECT *button_ok;
+       FL_OBJECT *button_apply;
+       FL_OBJECT *button_cancel;
+       FL_OBJECT *input_pextra_widthp;
+       FL_OBJECT *group_alignment;
+       FL_OBJECT *radio_pextra_top;
+       FL_OBJECT *radio_pextra_middle;
+       FL_OBJECT *radio_pextra_bottom;
+       FL_OBJECT *text_warning;
+       FL_OBJECT *radio_pextra_hfill;
+       FL_OBJECT *radio_pextra_startmp;
+       FL_OBJECT *group_extraopt;
+       FL_OBJECT *radio_pextra_indent;
+       FL_OBJECT *radio_pextra_minipage;
+       FL_OBJECT *radio_pextra_floatflt;
+} FD_form_paragraph_extra;
+
+extern FD_form_paragraph_extra * create_form_form_paragraph_extra(void);
+typedef struct {
+       FL_FORM *form_table_extra;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *input_special_alignment;
+       FL_OBJECT *input_special_multialign;
+} FD_form_table_extra;
+
+extern FD_form_table_extra * create_form_form_table_extra(void);
+
+#endif /* FD_form_document_h_ */
diff --git a/src/lyx.C b/src/lyx.C
new file mode 100644 (file)
index 0000000..50e9981
--- /dev/null
+++ b/src/lyx.C
@@ -0,0 +1,168 @@
+// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "lyx.h"
+
+FD_form_title *create_form_form_title(void)
+{
+  FL_OBJECT *obj;
+  FD_form_title *fdui = (FD_form_title *) fl_calloc(1, sizeof(FD_form_title));
+
+  fdui->form_title = fl_bgn_form(FL_NO_BOX, 425, 290);
+  obj = fl_add_box(FL_UP_BOX,0,0,425,290,"");
+    fl_set_object_color(obj,FL_BLACK,FL_TOP_BCOL);
+  fdui->timer_title = obj = fl_add_timer(FL_HIDDEN_TIMER,110,170,190,60,"");
+    fl_set_object_callback(obj,TimerCB,0);
+  fl_end_form();
+
+  //fdui->form_title->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_figure *create_form_form_figure(void)
+{
+  FL_OBJECT *obj;
+  FD_form_figure *fdui = (FD_form_figure *) fl_calloc(1, sizeof(FD_form_figure));
+
+  fdui->form_figure = fl_bgn_form(FL_NO_BOX, 340, 150);
+  obj = fl_add_box(FL_UP_BOX,0,0,340,150,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,20,320,80,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+
+  fdui->group_radio_fugre = fl_bgn_group();
+  fdui->radio_postscript = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,30,320,30,idex(_("Encapsulated Postscript (*.eps, *.ps)|#E")));fl_set_button_shortcut(obj,scex(_("Encapsulated Postscript (*.eps, *.ps)|#E")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_inline = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,60,320,30,idex(_("Inlined EPS (*.eps, *.ps)|#I")));fl_set_button_shortcut(obj,scex(_("Inlined EPS (*.eps, *.ps)|#I")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  obj = fl_add_button(FL_RETURN_BUTTON,10,110,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,FigureOKCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,120,110,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,FigureApplyCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,230,110,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,FigureCancelCB,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,10,50,20,_("Type"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fl_end_form();
+
+  //fdui->form_figure->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_screen *create_form_form_screen(void)
+{
+  FL_OBJECT *obj;
+  FD_form_screen *fdui = (FD_form_screen *) fl_calloc(1, sizeof(FD_form_screen));
+
+  fdui->form_screen = fl_bgn_form(FL_NO_BOX, 390, 220);
+  obj = fl_add_box(FL_UP_BOX,0,0,390,220,"");
+  fdui->input_roman = obj = fl_add_input(FL_NORMAL_INPUT,140,10,240,30,idex(_("Roman Font|#R")));fl_set_button_shortcut(obj,scex(_("Roman Font|#R")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->input_sans = obj = fl_add_input(FL_NORMAL_INPUT,140,40,240,30,idex(_("Sans Serif Font|#S")));fl_set_button_shortcut(obj,scex(_("Sans Serif Font|#S")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->input_typewriter = obj = fl_add_input(FL_NORMAL_INPUT,140,70,240,30,idex(_("Typewriter Font|#T")));fl_set_button_shortcut(obj,scex(_("Typewriter Font|#T")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->input_font_norm = obj = fl_add_input(FL_NORMAL_INPUT,140,100,240,30,idex(_("Font Norm|#N")));fl_set_button_shortcut(obj,scex(_("Font Norm|#N")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->intinput_size = obj = fl_add_input(FL_INT_INPUT,140,140,50,30,idex(_("Font Zoom|#Z")));fl_set_button_shortcut(obj,scex(_("Font Zoom|#Z")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  obj = fl_add_button(FL_RETURN_BUTTON,60,180,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,ScreenOKCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,170,180,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,ScreenApplyCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,280,180,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,ScreenCancelCB,0);
+  fl_end_form();
+
+  //fdui->form_screen->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_toc *create_form_form_toc(void)
+{
+  FL_OBJECT *obj;
+  FD_form_toc *fdui = (FD_form_toc *) fl_calloc(1, sizeof(FD_form_toc));
+
+  fdui->form_toc = fl_bgn_form(FL_NO_BOX, 420, 340);
+  obj = fl_add_box(FL_UP_BOX,0,0,420,340,"");
+  fdui->browser_toc = obj = fl_add_browser(FL_HOLD_BROWSER,10,10,400,280,"");
+    fl_set_object_gravity(obj, FL_NorthWest, FL_SouthEast);
+    fl_set_object_callback(obj,TocSelectCB,0);
+  obj = fl_add_button(FL_RETURN_BUTTON,310,300,100,30,_("Close"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,TocCancelCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,200,300,100,30,idex(_("Update|Uu#u")));fl_set_button_shortcut(obj,scex(_("Update|Uu#u")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,TocUpdateCB,0);
+  fl_end_form();
+
+  //fdui->form_toc->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_ref *create_form_form_ref(void)
+{
+  FL_OBJECT *obj;
+  FD_form_ref *fdui = (FD_form_ref *) fl_calloc(1, sizeof(FD_form_ref));
+
+  fdui->form_ref = fl_bgn_form(FL_NO_BOX, 290, 330);
+  obj = fl_add_box(FL_UP_BOX,0,0,290,330,"");
+  fdui->browser_ref = obj = fl_add_browser(FL_HOLD_BROWSER,10,10,270,140,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_NorthWest, FL_SouthEast);
+  obj = fl_add_button(FL_NORMAL_BUTTON,180,200,100,30,idex(_("Update|#U")));fl_set_button_shortcut(obj,scex(_("Update|#U")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,RefUpdateCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,180,240,100,30,idex(_("Close|#C^[")));fl_set_button_shortcut(obj,scex(_("Close|#C^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,RefHideCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,10,240,160,30,idex(_("Insert Reference|#I^M")));fl_set_button_shortcut(obj,scex(_("Insert Reference|#I^M")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthWest, FL_SouthWest);
+    fl_set_object_callback(obj,RefSelectCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,10,200,160,30,idex(_("Insert Page Number|#P")));fl_set_button_shortcut(obj,scex(_("Insert Page Number|#P")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthWest, FL_SouthWest);
+    fl_set_object_callback(obj,RefSelectCB,1);
+  obj = fl_add_button(FL_NORMAL_BUTTON,10,280,160,30,idex(_("Go to Reference|#G")));fl_set_button_shortcut(obj,scex(_("Go to Reference|#G")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthWest, FL_SouthWest);
+    fl_set_object_callback(obj,RefSelectCB,2);
+  fdui->ref_name = obj = fl_add_input(FL_NORMAL_INPUT,80,160,200,30,idex(_("Name|#N")));fl_set_button_shortcut(obj,scex(_("Name|#N")),1);
+    fl_set_object_gravity(obj, FL_NorthWest, FL_SouthEast);
+    fl_set_object_resize(obj, FL_RESIZE_X);
+  fl_end_form();
+
+  //fdui->form_ref->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
diff --git a/src/lyx.h b/src/lyx.h
new file mode 100644 (file)
index 0000000..4dec39e
--- /dev/null
+++ b/src/lyx.h
@@ -0,0 +1,80 @@
+/** Header file generated with fdesign on Mon Apr 12 19:09:42 1999.**/
+
+#ifndef FD_form_title_h_
+#define FD_form_title_h_
+
+/** Callbacks, globals and object handlers **/
+extern void TimerCB(FL_OBJECT *, long);
+
+extern void FigureOKCB(FL_OBJECT *, long);
+extern void FigureApplyCB(FL_OBJECT *, long);
+extern void FigureCancelCB(FL_OBJECT *, long);
+
+extern void ScreenOKCB(FL_OBJECT *, long);
+extern void ScreenApplyCB(FL_OBJECT *, long);
+extern void ScreenCancelCB(FL_OBJECT *, long);
+
+extern void TocSelectCB(FL_OBJECT *, long);
+extern void TocCancelCB(FL_OBJECT *, long);
+extern void TocUpdateCB(FL_OBJECT *, long);
+
+extern void RefUpdateCB(FL_OBJECT *, long);
+extern void RefHideCB(FL_OBJECT *, long);
+extern void RefSelectCB(FL_OBJECT *, long);
+
+
+/**** Forms and Objects ****/
+typedef struct {
+       FL_FORM *form_title;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *timer_title;
+} FD_form_title;
+
+extern FD_form_title * create_form_form_title(void);
+typedef struct {
+       FL_FORM *form_figure;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *group_radio_fugre;
+       FL_OBJECT *radio_postscript;
+       FL_OBJECT *radio_inline;
+} FD_form_figure;
+
+extern FD_form_figure * create_form_form_figure(void);
+typedef struct {
+       FL_FORM *form_screen;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *input_roman;
+       FL_OBJECT *input_sans;
+       FL_OBJECT *input_typewriter;
+       FL_OBJECT *input_font_norm;
+       FL_OBJECT *intinput_size;
+} FD_form_screen;
+
+extern FD_form_screen * create_form_form_screen(void);
+typedef struct {
+       FL_FORM *form_toc;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *browser_toc;
+} FD_form_toc;
+
+extern FD_form_toc * create_form_form_toc(void);
+typedef struct {
+       FL_FORM *form_ref;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *browser_ref;
+       FL_OBJECT *ref_name;
+} FD_form_ref;
+
+extern FD_form_ref * create_form_form_ref(void);
+
+#endif /* FD_form_title_h_ */
diff --git a/src/lyx_cb.C b/src/lyx_cb.C
new file mode 100644 (file)
index 0000000..169f336
--- /dev/null
@@ -0,0 +1,4081 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich,
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#include <ctype.h>
+#include <unistd.h>
+#include <signal.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "LString.h"
+#include "lyx_main.h"
+#include FORMS_H_LOCATION
+#include "lyx.h"
+#include "layout_forms.h"
+#include "bullet_forms.h"
+#include "print_form.h"
+#include "form1.h"
+#include "spellchecker.h"
+#include "version.h"
+#include "lyx_cb.h"
+#include "credits.h"
+#include "insets/insetref.h"
+#include "insets/insetquotes.h"
+#include "insets/insetlatex.h"
+#include "insets/insetlabel.h"
+#include "insets/insetinfo.h"
+#include "insets/insetspecialchar.h"
+#include "insets/figinset.h"
+#include "lyxfunc.h"
+#include "latexoptions.h"
+#include "lyxfont.h"
+#include "minibuffer.h"
+#include "combox.h"
+#include "bufferlist.h"
+#include "filetools.h"
+#include "pathstack.h"
+#include "filedlg.h"
+#include "lyx_gui_misc.h"
+#include "LyXView.h" // only because of form_main
+#include "lastfiles.h"
+#include "FileInfo.h"
+#include "lyxscreen.h"
+#include "error.h"
+#include "syscall.h"
+#include "lyxlib.h"
+#include "lyxserver.h"
+#include "FontLoader.h"
+#include "lyxrc.h"
+#include "lyxtext.h"
+#include "gettext.h"
+
+//     $Id: lyx_cb.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $    
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lyx_cb.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+extern MiniBuffer *minibuffer;
+extern Combox *combo_language;
+extern BufferList bufferlist;
+extern void show_symbols_form();
+extern FD_form_main *fd_form_main;
+extern FD_form_title *fd_form_title;
+extern FD_form_paragraph *fd_form_paragraph;
+extern FD_form_character *fd_form_character;
+extern FD_form_document *fd_form_document;
+extern FD_form_quotes *fd_form_quotes;
+extern FD_form_preamble *fd_form_preamble;
+extern FD_form_table *fd_form_table;
+extern FD_form_print *fd_form_print;
+extern FD_form_figure *fd_form_figure;
+extern FD_form_screen *fd_form_screen;
+extern FD_form_toc *fd_form_toc;
+extern FD_form_ref *fd_form_ref;
+extern FD_LaTeXOptions *fd_latex_options;
+extern FD_form_bullet *fd_form_bullet;
+
+extern BufferView *current_view; // called too many times in this file...
+
+extern void DeleteSimpleCutBuffer(); /* for the cleanup when exiting */
+
+extern bool send_fax(LString const &fname, LString const &sendcmd);
+
+extern LyXServer *lyxserver;
+extern FontLoader fontloader;
+
+// this should be static, but I need it in buffer.C
+bool quitting; // flag, that we are quitting the program
+extern bool finished; // all cleanup done just let it run through now.
+
+char ascii_type; /* for selection notify callbacks */
+
+bool scrolling = false;
+
+char updatetimer = 0;
+
+/* whether the work area should get callbacks */ 
+bool input_prohibited = false;
+
+/* the selection possible is needed, that only motion events are 
+* used, where the bottom press event was on the drawing area too */
+bool selection_possible = false;
+
+// This is used to make the dreaded font toggle problem hopefully go
+// away. Definitely not the best solution, but I think it sorta works.
+bool toggleall = true;
+
+void InsertCorrectQuote();
+
+
+/* 
+   This is the inset locking stuff needed for mathed --------------------
+
+   an inset can simple call LockInset in it's edit call and *ONLY* in it's
+   edit call.
+   Inset::Edit() can only be called by the main lyx module.
+
+   Then the inset may modify the menu's and/or iconbars. 
+
+   Unlocking is either done by LyX or the inset itself with a UnlockInset-call
+
+   During the lock, all button and keyboard events will be modified
+   and send to the inset through the following inset-features. Note that
+   Inset::InsetUnlock will be called from inside UnlockInset. It is meant
+   to contain the code for restoring the menus and things like this.
+
+   
+   virtual void InsetButtonPress(int x, int y, int button);
+   virtual void InsetButtonRelease(int x, int y, int button);
+   virtual void InsetKeyPress(XKeyEvent *ev);
+   virtual void InsetMotionNotify(int x, int y, int state);
+   virtual void InsetUnlock();
+
+   If a inset wishes any redraw and/or update it just has to call
+   UpdateInset(this).
+   It's is completly irrelevant, where the inset is. UpdateInset will
+   find it in any paragraph in any buffer. 
+   Of course the_locking_inset and the insets in the current paragraph/buffer
+   are checked first, so no performance problem should occur.
+   
+   Hope that's ok for the beginning, Alejandro,
+   sorry that I needed so much time,
+
+                  Matthias
+   */
+
+void UpdateInset(Inset* inset, bool mark_dirty = true);
+/* these functions return 1 if an error occured, 
+   otherwise 0 */
+// Now they work only for updatable insets. [Alejandro 080596]
+int LockInset(UpdatableInset* inset);
+void ToggleLockedInsetCursor(long x, long y, int asc, int desc);
+void FitLockedInsetCursor(long x, long y, int asc, int desc);
+int UnlockInset(UpdatableInset* inset);
+void LockedInsetStoreUndo(Undo::undo_kind kind);
+
+/* this is for asyncron updating. UpdateInsetUpdateList will be called
+   automatically from LyX. Just insert the Inset into the Updatelist */
+void UpdateInsetUpdateList();
+void PutInsetIntoInsetUpdateList(Inset* inset);
+
+InsetUpdateStruct *InsetUpdateList = NULL;
+
+
+/*
+  -----------------------------------------------------------------------
+ */
+
+/* some function prototypes */
+
+void GotoNote();
+void OpenStuff();
+void ToggleFloat();
+void MenuUndo();
+void MenuRedo();
+void HyphenationPoint();
+void MenuSeparator();
+void HFill();
+void Newline();
+void ProtectedBlank();
+void CopyCB();
+int RunLinuxDoc(int, LString const &);
+int RunDocBook(int, LString const &);
+void MenuWrite(Buffer* buf);
+void MenuWriteAs(Buffer *buffer);
+void MenuReload(Buffer *buf);
+void MenuLayoutSave();
+
+unsigned char GetCurrentTextClass()
+       // Who are we asking?
+       // Shouldn't this question be directed to the buffer?
+       // Indeed it should. Asger.
+{
+       return current_view->currentBuffer()->params.textclass;
+}
+
+
+// How should this actually work? Should it prohibit input in all BufferViews,
+// or just in the current one? If "just the current one", then it should be
+// placed in BufferView. If "all BufferViews" then LyXGUI (I think) should
+// run "ProhibitInput" on all LyXViews which will run prohibitInput on all
+// BufferViews. Or is it perhaps just the (input in) BufferViews in the
+// current LyxView that should be prohibited (Lgb) (This applies to
+// "AllowInput" as well.)
+void ProhibitInput()
+{
+       input_prohibited = true;
+       if (current_view->getScreen())
+               current_view->getScreen()->HideCursor();
+
+       static Cursor cursor;
+       static bool cursor_undefined = true;
+   
+       if (cursor_undefined){
+               cursor = XCreateFontCursor(fl_display, XC_watch);
+               XFlush(fl_display);
+               cursor_undefined = false;
+       }
+   
+       /* set the cursor to the watch for all forms and the canvas */ 
+       XDefineCursor(fl_display, fd_form_main->form_main->window, cursor);
+       if (fd_form_paragraph->form_paragraph->visible)
+               XDefineCursor(fl_display,
+                             fd_form_paragraph->form_paragraph->window,
+                             cursor);
+       if (fd_form_character->form_character->visible)
+               XDefineCursor(fl_display,
+                             fd_form_character->form_character->window,
+                             cursor);
+
+       XFlush(fl_display);
+       fl_deactivate_all_forms();
+}
+
+
+// Should find a way to move this into BufferView.C
+void SetXtermCursor(Window win)
+{
+       static Cursor cursor;
+       static char cursor_undefined = 1;
+       if (cursor_undefined){
+               cursor = XCreateFontCursor(fl_display, XC_xterm);
+               XFlush(fl_display);
+               cursor_undefined = 0;
+       }
+       XDefineCursor(fl_display, win, cursor);
+       XFlush(fl_display);
+}
+
+
+void AllowInput()
+{
+       input_prohibited = false;
+
+       /* reset the cursor from the watch for all forms and the canvas */
+   
+       XUndefineCursor(fl_display, fd_form_main->form_main->window);
+       if (fd_form_paragraph->form_paragraph->visible)
+               XUndefineCursor(fl_display,
+                               fd_form_paragraph->form_paragraph->window);
+       if (fd_form_character->form_character->visible)
+               XUndefineCursor(fl_display,
+                               fd_form_character->form_character->window);
+       if (current_view->getWorkArea()->belowmouse)
+               SetXtermCursor(fd_form_main->form_main->window);
+
+       XFlush(fl_display);
+       fl_activate_all_forms();
+}
+
+
+void FreeUpdateTimer()
+{
+       /* a real free timer would be better but I don't know 
+        * how to do this with xforms */
+       updatetimer = 0;
+}
+
+
+void SetUpdateTimer(float time)
+{
+       fl_set_timer(fd_form_main->timer_update, time);
+       updatetimer = 1;
+}
+
+
+void BeforeChange()
+{
+       current_view->getScreen()->ToggleSelection();
+       current_view->currentBuffer()->text->ClearSelection();
+       FreeUpdateTimer();
+}
+
+
+void SmallUpdate(signed char f)
+{
+       current_view->getScreen()->SmallUpdate();
+       if (current_view->getScreen()->TopCursorVisible()
+           != current_view->getScreen()->first){
+               current_view->currentBuffer()->update(f);
+               return;
+       }
+
+       current_view->fitCursor();
+       current_view->updateScrollbar();
+   
+       if (!current_view->currentBuffer()->text->selection)
+               current_view->currentBuffer()->text->sel_cursor = 
+                       current_view->currentBuffer()->text->cursor;
+
+       if (f==1 || f==-1) {
+               if (current_view->currentBuffer()->isLyxClean()) {
+                       current_view->currentBuffer()->markDirty();
+                       minibuffer->setTimer(4);
+               }
+               else {
+                       current_view->currentBuffer()->markDirty();
+               }
+       }
+}
+
+
+//
+// Menu callbacks
+//
+
+//
+// File menu
+//
+
+// should be moved to lyxfunc.C
+void MenuWrite(Buffer* buf)
+{
+       XFlush(fl_display);
+       if (!bufferlist.write(buf)) {
+               LString fname = buf->getFileName();
+               LString s = MakeAbsPath(fname);
+               if (AskQuestion(_("Save failed. Rename and try again?"),
+                                MakeDisplayPath(s,50),
+                                _("(If not, document is not saved.)"))) {
+                       MenuWriteAs(buf);
+               }
+       } else {
+               lastfiles->newFile(buf->getFileName());
+       }
+}
+
+
+// should be moved to BufferView.C
+void MenuWriteAs(Buffer *buffer)
+{
+       if (!buffer->text) return;
+
+       LString fname = buffer->getFileName();
+       LString oldname = fname;
+       LyXFileDlg fileDlg;
+
+       ProhibitInput();
+       fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+       fileDlg.SetButton(1, _("Templates"), lyxrc->template_path);
+
+       if (!IsLyXFilename(fname))
+               fname += ".lyx";
+
+       fname = fileDlg.Select(_("Enter Filename to Save Document as"), 
+                              OnlyPath(fname),
+                              "*.lyx", 
+                              OnlyFilename(fname));
+       AllowInput();
+
+       if (fname.empty()) {
+               minibuffer->Set(_("Canceled."));
+               return;
+       }
+
+       // Make sure the absolute filename ends with appropriate suffix
+       LString s= MakeAbsPath(fname);
+       if (!IsLyXFilename(s))
+               s += ".lyx";
+
+       // Same name as we have already?
+       if (s == oldname) {
+               if (!AskQuestion(_("Same name as document already has:"),
+                                MakeDisplayPath(s,50),
+                                _("Save anyway?")))
+                       return;
+               // Falls through to name change and save
+       } 
+       // No, but do we have another file with this name open?
+       else if (bufferlist.exists(s)) {
+               if (AskQuestion(_("Another document with same name open!"),
+                               MakeDisplayPath(s,50),
+                               _("Replace with current document?")))
+                       {
+                               bufferlist.close(bufferlist.getBuffer(s));
+
+                               // Ok, change the name of the buffer, but don't save!
+                               buffer->setFileName(s);
+                               buffer->markDirty();
+
+                               minibuffer->Set(_("Document renamed to '"),
+                                               MakeDisplayPath(s),
+                                               _("', but not saved..."));
+                       }
+               return;
+       } // Check whether the file exists
+       else {
+               FileInfo myfile(s);
+               if (myfile.isOK() && !AskQuestion(_("Document already exists:"), 
+                                                 MakeDisplayPath(s,50),
+                                                 _("Replace file?")))
+                       return;
+       }
+
+       // Ok, change the name of the buffer
+       buffer->setFileName(s);
+       buffer->markDirty();
+       // And save
+       // Small bug: If the save fails, we have irreversible changed the name
+       // of the document.
+       MenuWrite(buffer);
+}    
+
+#if 0
+extern bool gsworking();
+#endif
+
+int MenuRunLaTeX(Buffer *buffer)
+{
+       int ret = 0;
+
+#if 0
+       if (gsworking()) {
+               WriteAlert(_("Sorry, can't do this while pictures are being rendered."),
+                          _("Please wait a few seconds for this to finish and try again."),
+                          _("(or kill runaway gs processes by hand and try again.)"));
+               return 1;
+       }
+       extern pid_t isp_pid; // from spellchecker.C
+       if(isp_pid != -1)
+       {
+         WriteAlert(_("Can't do this while the spellchecker is running."),
+           _("Stop the spellchecker first."));
+         return 1;
+       }
+#endif
+       
+       if (buffer->isLinuxDoc())
+               ret = RunLinuxDoc(1, buffer->getFileName());
+       else if (buffer->isLiterate())
+               ret = buffer->runLiterate();
+       else if (buffer->isDocBook())
+               ret = RunDocBook(1, buffer->getFileName());
+       else
+               ret = buffer->runLaTeX();
+   
+       if (ret > 0) {
+               LString s;
+               LString t;
+               if (ret == 1) {
+                       s = _("One error detected");
+                       t = _("You should try to fix it.");
+               } else {
+                       s += ret;
+                       s += _(" errors detected.");
+                       t = _("You should try to fix them.");
+               }
+               WriteAlert(_("There were errors during the LaTeX run."), s, t);
+       }
+       return ret;
+}
+
+
+int MenuBuildProg(Buffer *buffer)
+{
+       int ret = 0;
+
+       if (buffer->isLiterate())
+              ret = buffer->buildProgram();
+       else {
+              LString s;
+              LString t;
+              s = _("Wrong type of document");
+              t = _("The Build operation is not allowed in this document");
+               WriteAlert(_("There were errors during the Build process."), s, t);
+              return 1;
+       }
+   
+       if (ret > 0) {
+               LString s;
+               LString t;
+               if (ret == 1) {
+                       s = _("One error detected");
+                       t = _("You should try to fix it.");
+               } else {
+                       s += ret;
+                       s += _(" errors detected.");
+                       t = _("You should try to fix them.");
+               }
+               WriteAlert(_("There were errors during the Build process."), s, t);
+       }
+       return ret;
+}
+
+
+int MenuRunChktex(Buffer *buffer)
+{
+       int ret;
+
+       if (buffer->isSGML()) {
+               WriteAlert(_("Chktex does not work with SGML derived documents."));
+               return 0;
+       } else 
+               ret = buffer->runChktex();
+   
+       if (ret >= 0) {
+               LString s;
+               LString t;
+               if (ret == 0) {
+                       s = _("No warnings found.");
+               } else if (ret == 1) {
+                       s = _("One warning found.");
+                       t = _("Use 'Edit->Go to Error' to find it.");
+               } else {
+                       s += ret;
+                       s += _(" warnings found.");
+                       t = _("Use 'Edit->Go to Error' to find them.");
+               }
+               WriteAlert(_("Chktex run successfully"), s, t);
+       } else {
+               WriteAlert(_("Error!"),_("It seems chktex does not work."));
+       }
+       return ret;
+}
+
+int MakeDVIOutput(Buffer *buffer)
+{
+       if (!(buffer->text))
+               return 1;
+
+       int ret = 0;
+
+       LString path = OnlyPath(buffer->getFileName());
+       if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)) {
+               path = buffer->tmppath;
+       }
+       if (!buffer->isDviClean()) {
+               PathPush(path);
+               ret = MenuRunLaTeX(buffer);
+               PathPop();
+       }
+       return ret;
+}
+
+
+/* wait == false means don't wait for termination */
+/* wait == true means wait for termination       */
+// The bool should be placed last on the argument line. (Lgb)
+// Returns false if we fail.
+bool RunScript(Buffer *buffer, bool wait,
+              LString const & command, LString const & orgname = LString(),
+              bool need_shell=true)
+{
+       LString path;
+       LString cmd;
+       LString name= orgname;
+       int result = 0;
+       
+       if (MakeDVIOutput(buffer) > 0)
+               return false;
+       /* get DVI-Filename */
+       if (name.empty())
+               name = ChangeExtension(buffer->getFileName(),
+                                      ".dvi", true);
+
+       path = OnlyPath(name);
+       if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)) {
+               path = buffer->tmppath;
+       }
+       PathPush(path);
+
+       cmd = command + ' ' + SpaceLess(name);
+       Systemcalls one;
+
+       if (need_shell) {
+#ifndef __EMX__
+               if (!wait)
+                       cmd += " &";
+#else
+               // OS/2 cmd.exe has another use for '&'
+               if (!wait) {
+                        // This is not NLS safe, but it's OK, I think.
+                        LString sh = OnlyFilename(getEnvPath("EMXSHELL"));
+                        if (sh.empty()) {
+                                // COMSPEC is set, unless user unsets 
+                                sh = OnlyFilename(getEnvPath("COMSPEC"));
+                               if (sh.empty())
+                                       sh = "cmd.exe";
+                       }
+                        sh.lowercase();
+                        if (sh.contains("cmd.exe") || sh.contains("4os2.exe"))
+                                cmd = "start /min/n " + cmd;
+                        else
+                                cmd += " &";
+                }
+#endif
+               // It seems that, if wait is false, we never get back
+               // the return code of the command. This means that all
+               // the code I added in PrintApplyCB is currently
+               // useless...
+#ifdef WITH_WARNINGS
+#warning What should we do here?
+#endif         
+               minibuffer->Set(_("Executing command:"), cmd);
+               result = one.Startscript(Systemcalls::System, cmd);
+       } else {
+               minibuffer->Set(_("Executing command:"), cmd);
+               result = one.Startscript(wait ? Systemcalls::Wait
+                                       : Systemcalls::DontWait, cmd);
+       }
+       PathPop();
+       return (result==0);
+}
+
+
+// Returns false if we fail
+bool MenuRunDvips(Buffer *buffer, bool wait=false)
+{
+       if (!buffer->text)
+               return false;
+
+       ProhibitInput();
+
+       // Generate dvi file
+        if (MakeDVIOutput(buffer) > 0) {
+               AllowInput();
+               return false;
+        }
+       // Generate postscript file
+       LString ps = ChangeExtension (buffer->getFileName(),
+                                     ".ps_tmp", true);
+
+       LString paper;
+       
+       char real_papersize = buffer->params.papersize;
+       if (real_papersize == PAPER_DEFAULT)
+               real_papersize = lyxrc->default_papersize;
+
+       switch (real_papersize) {
+       case PAPER_USLETTER:
+               paper = "letter";
+               break;
+       case PAPER_A3PAPER:
+               paper = "a3";
+               break;
+       case PAPER_A4PAPER:
+               paper = "a4";
+               break;
+       case PAPER_A5PAPER:
+               paper = "a5";
+               break;
+       case PAPER_B5PAPER:
+               paper = "b5";
+               break;
+       case PAPER_EXECUTIVEPAPER:
+               paper = "foolscap";
+               break;
+       case PAPER_LEGALPAPER:
+               paper = "legal";
+               break;
+       default: /* If nothing else fits, keep an empty value... */
+               break;
+       }
+
+       // Make postscript file.
+       LString command = "dvips " + lyxrc->print_to_file + ' ';
+       command += SpaceLess(ps);
+       if (buffer->params.use_geometry
+           && buffer->params.papersize2 == VM_PAPER_CUSTOM
+           && !lyxrc->print_paper_dimension_flag.empty()
+           && !buffer->params.paperwidth.empty()
+           && !buffer->params.paperheight.empty()) {
+               // using a custom papersize
+               command += ' ';
+               command += lyxrc->print_paper_dimension_flag + ' ';
+               command += buffer->params.paperwidth + ',';
+               command += buffer->params.paperheight;
+       } else if (!paper.empty()
+                  && (real_papersize != PAPER_USLETTER ||
+                      buffer->params.orientation == ORIENTATION_PORTRAIT)) {
+               // dvips won't accept -t letter -t landscape.  In all other
+               // cases, include the paper size explicitly.
+               command += ' ';
+               command += lyxrc->print_paper_flag + ' ' + paper;
+       }
+       if (buffer->params.orientation == ORIENTATION_LANDSCAPE) {
+               command += ' ';
+               command += lyxrc->print_landscape_flag;
+       }
+       // push directorypath, if necessary 
+        LString path = OnlyPath(buffer->getFileName());
+        if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)){
+               path = buffer->tmppath;
+        }
+        PathPush(path);
+       bool ret = RunScript(buffer, wait, command);
+       AllowInput();
+        PathPop();
+       return ret;
+}
+
+
+// Returns false if we fail
+bool MenuPreviewPS(Buffer *buffer)
+{
+       if (!buffer->text)
+               return false;
+
+       // Generate postscript file
+       if (!MenuRunDvips(buffer, true)) {
+               return false;
+       }
+
+       // Start postscript viewer
+       ProhibitInput();
+       LString ps = ChangeExtension (buffer->getFileName(),
+                                     ".ps_tmp", true);
+       // push directorypath, if necessary 
+        LString path = OnlyPath(buffer->getFileName());
+        if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)){
+               path = buffer->tmppath;
+        }
+        PathPush(path);
+       bool ret = RunScript(buffer, false, lyxrc->view_ps_command, ps);
+        PathPop();
+       AllowInput();
+       return ret;
+}
+
+
+void MenuFax(Buffer *buffer)
+{
+       if (!buffer->text)
+               return;
+
+       // Generate postscript file
+       if (!MenuRunDvips(buffer, true)) {
+               return;
+       }
+
+       // Send fax
+       LString ps = ChangeExtension (buffer->getFileName(), ".ps_tmp", true);
+       LString path = OnlyPath (buffer->getFileName());
+       if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)) {
+               path = buffer->tmppath;
+       }
+       PathPush(path);
+       if (!lyxrc->fax_program.empty()) {
+               LString help2 = lyxrc->fax_program;
+                help2.subst("$$FName",ps);
+                help2 += " &";
+                Systemcalls one(Systemcalls::System, help2);
+       } else
+               send_fax(ps,lyxrc->fax_command);
+       PathPop();
+}
+
+
+// Returns false if we fail
+bool MenuPreview(Buffer *buffer)
+{
+       if (!buffer->text)
+               return false;
+   
+       LString paper;
+       
+       char real_papersize = buffer->params.papersize;
+       if (real_papersize == PAPER_DEFAULT)
+               real_papersize = lyxrc->default_papersize;
+   
+       switch (real_papersize) {
+       case PAPER_USLETTER:
+               paper = "us";
+               break;
+       case PAPER_A3PAPER:
+               paper = "a3";
+               break;
+       case PAPER_A4PAPER:
+               paper = "a4";
+               break;
+       case PAPER_A5PAPER:
+               paper = "a5";
+               break;
+       case PAPER_B5PAPER:
+               paper = "b5";
+               break;
+       case PAPER_EXECUTIVEPAPER:
+               paper = "foolscap";
+               break;
+       case PAPER_LEGALPAPER:
+               paper = "legal";
+               break;
+       default: /* If nothing else fits, keep the empty value */
+               break;
+       }
+   
+       if (paper.empty()) {
+               if (buffer->params.orientation == ORIENTATION_LANDSCAPE)
+                       // we HAVE to give a size when the page is in
+                       // landscape, so use USletter.          
+                       paper = " -paper usr";
+       } else {
+               paper = " -paper " + paper;
+               if (buffer->params.orientation == ORIENTATION_LANDSCAPE)
+                       paper+='r';
+       }
+
+       // push directorypath, if necessary 
+        LString path = OnlyPath(buffer->getFileName());
+        if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)){
+               path = buffer->tmppath;
+        }
+        PathPush(path);
+       // Run dvi-viewer
+       LString command = lyxrc->view_dvi_command + paper ;
+       bool ret = RunScript(buffer, false, command);
+        PathPop();
+       return ret;
+}
+
+
+void MenuMakeLaTeX(Buffer *buffer)
+{
+       if (buffer->text) {
+               // Get LaTeX-Filename
+               LString s = SpaceLess(ChangeExtension(
+                                               buffer->getFileName(),
+                                               ".tex", false));
+
+               FilePtr myfile(s, FilePtr::read);
+               if (myfile() &&
+                   !AskQuestion(_("File already exists:"), 
+                               MakeDisplayPath(s,50),
+                               _("Do you want to overwrite the file?"))) {
+                       minibuffer->Set(_("Canceled"));
+                       return;
+               }
+
+               if (buffer->isDocBook())
+                       minibuffer->Set(_("DocBook does not have a latex backend"));
+               else {
+                       if (buffer->isLinuxDoc())
+                               RunLinuxDoc(0, buffer->getFileName());
+                       else
+                               buffer->makeLaTeXFile(s, LString(), true);
+                       minibuffer->Set(_("Nice LaTeX file saved as"),
+                                       MakeDisplayPath(s));
+                       buffer->markDviDirty();
+               }
+       }
+}
+
+
+void MenuMakeLinuxDoc(Buffer *buffer)
+{
+       if (buffer->text) {
+
+               if (!buffer->isLinuxDoc()) {
+                       WriteAlert(_("Error!"), _("Document class must be linuxdoc."));
+                       return;
+               }
+
+               // Get LinuxDoc-Filename
+               LString s = ChangeExtension (buffer->getFileName(), 
+                                            ".sgml", false);
+
+               FilePtr myfile(s, FilePtr::read);
+               if (myfile() &&
+                   !AskQuestion(_("File already exists:"), 
+                               MakeDisplayPath(s,50),
+                               _("Do you want to overwrite the file?"))) {
+                       minibuffer->Set(_("Canceled"));
+                       return;
+               }
+
+               minibuffer->Set(_("Building LinuxDoc SGML file `"),
+                               MakeDisplayPath(s), "'..."); 
+
+               buffer->makeLinuxDocFile(s, 65);
+                buffer->redraw();
+               minibuffer->Set(_("LinuxDoc SGML file save as"),
+                               MakeDisplayPath(s)); 
+       }
+}
+
+
+void MenuMakeDocBook(Buffer *buffer)
+{
+       if (buffer->text) {
+
+               if (!buffer->isDocBook()) {
+                       WriteAlert(_("Error!"), _("Document class must be docbook."));
+                       return;
+               }
+
+               // Get DocBook-Filename
+               LString s = ChangeExtension (buffer->getFileName(), 
+                                            ".sgml", false);
+
+               FilePtr myfile(s, FilePtr::read);
+               if (myfile() &&
+                   !AskQuestion(_("File already exists:"), 
+                               MakeDisplayPath(s,50),
+                               _("Do you want to overwrite the file?"))) {
+                       minibuffer->Set(_("Canceled"));
+                       return;
+               }
+
+               minibuffer->Set(_("Building DocBook SGML file `"),
+                               MakeDisplayPath(s), "'..."); 
+
+               buffer->makeDocBookFile(s, 65);
+                buffer->redraw();
+               minibuffer->Set(_("DocBook SGML file save as"),
+                               MakeDisplayPath(s)); 
+       }
+}
+
+
+void MenuMakeAscii(Buffer *buffer)
+{
+       if (buffer->text) {
+               /* get LaTeX-Filename */
+               LString s = ChangeExtension (buffer->getFileName(),
+                                            ".txt", false);
+
+               FilePtr myfile(s, FilePtr::read);
+               if (myfile() &&
+                   !AskQuestion(_("File already exists:"), 
+                               MakeDisplayPath(s,50),
+                               _("Do you want to overwrite the file?"))) {
+                       minibuffer->Set(_("Canceled"));
+                       return;
+               }
+
+               buffer->writeFileAscii(s, lyxrc->ascii_linelen);
+
+               minibuffer->Set(_("Ascii file saved as"), MakeDisplayPath(s));
+       }
+}
+
+
+void MenuPrint(Buffer *buffer)
+{
+       LString input_file;
+
+       if (!buffer->text) 
+               return;
+       
+       input_file = ChangeExtension(buffer->getFileName(),
+                                    lyxrc->print_file_extension,
+                                    true);
+       fl_set_input(fd_form_print->input_file, input_file.c_str());
+       
+       if (fd_form_print->form_print->visible) {
+               fl_raise_form(fd_form_print->form_print);
+       } 
+       else {
+               fl_show_form(fd_form_print->form_print,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
+                            _("Print"));
+       }
+}
+
+
+void QuitLyX()
+{
+       lyxerr.debug("Running QuitLyX.");
+
+       if (!bufferlist.QwriteAll())
+               return;
+
+       lastfiles->writeFile(lyxrc->lastfiles);
+
+       // Set a flag that we do quitting from the program,
+       // so no refreshes are necessary.
+       quitting = true;
+
+       // close buffers first
+       bufferlist.closeAll();
+
+       // do any other cleanup procedures now
+       lyxerr.debug("Deleting tmp dir " + system_tempdir);
+
+       DestroyLyXTmpDir(system_tempdir);
+
+       finished = true;
+}
+
+
+
+void AutoSave()
+       // should probably be moved into BufferList (Lgb)
+       // Perfect target for a thread...
+{
+       if (!current_view->getScreen() || !current_view->available())
+               return;
+
+       if (current_view->currentBuffer()->isBakClean()
+           || current_view->currentBuffer()->isReadonly()) {
+               // We don't save now, but we'll try again later
+               current_view->getOwner()->resetAutosaveTimer();
+               return;
+       }
+
+       minibuffer->Set(_("Autosaving current document..."));
+       
+       // create autosave filename
+       LString fname = OnlyPath(current_view->currentBuffer()->getFileName());
+       fname += "#";
+       fname += OnlyFilename(current_view->currentBuffer()->getFileName());
+       fname += "#";
+       
+       // tmp_ret will be located (usually) in /tmp
+       // will that be a problem?
+       LString tmp_ret = tmpnam(NULL);
+       
+       pid_t pid = fork(); // If you want to debug the autosave
+       // you should set pid to -1, and comment out the
+       // fork.
+       if (pid == 0 || pid == -1) {
+               // pid = -1 signifies that lyx was unable
+               // to fork. But we will do the save
+               // anyway.
+               bool failed = false;
+               if (!tmp_ret.empty()) {
+                       current_view->currentBuffer()->writeFile(tmp_ret, 1);
+                       // assume successful write of tmp_ret
+                       if (rename(tmp_ret.c_str(), fname.c_str()) == -1) {
+                               failed = true;
+                               // most likely couldn't move between filesystems
+                               // unless write of tmp_ret failed
+                               // so remove tmp file (if it exists)
+                               remove(tmp_ret.c_str());
+                       }
+               } else {
+                       failed = true;
+               }
+               
+               if (failed) {
+                       // failed to write/rename tmp_ret so try writing direct
+                       if (!current_view->currentBuffer()->writeFile(fname,
+                                                                     1)) {
+                               // It is dangerous to do this in the child,
+                               // but safe in the parent, so...
+                               if (pid == -1)
+                                       minibuffer->Set(_("Autosave Failed!"));
+                       }
+               }
+               if (pid == 0) { // we are the child so...
+                       _exit(0);
+               }
+       }
+       
+       current_view->currentBuffer()->markBakClean();
+       current_view->getOwner()->resetAutosaveTimer();
+}
+
+
+//
+// (c) CHT Software Service GmbH
+// Uwe C. Schroeder
+//
+// create new file with template
+// SERVERCMD !
+//
+Buffer * NewLyxFile(LString const & filename)
+{
+       // Split argument by :
+       LString tmpname = filename;
+       LString name;
+       tmpname.split(name, ':');
+#ifdef __EMX__ // Fix me! lyx_cb.C may not be low level enough to allow this.
+       if (name.length() == 1 && isalpha((unsigned char) name[0]) &&
+           (tmpname.prefixIs("/") || tmpname.prefixIs("\\"))) {
+               name += ':';
+               name += tmpname.token(':');
+               tmpname.split(':');
+       }
+#endif
+       lyxerr.debug("Arg is " + filename);
+       lyxerr.debug("Name is " + name);
+       lyxerr.debug("Template is " + tmpname);
+
+       // find a free buffer 
+       Buffer *tmpbuf = bufferlist.newFile(name,tmpname);
+       if (tmpbuf)
+               lastfiles->newFile(tmpbuf->getFileName());
+       return tmpbuf;
+}
+
+
+// Insert ascii file (if filename is empty, prompt for one)
+void InsertAsciiFile(LString const & f, bool asParagraph)
+{
+       LString fname = f;
+       LyXParagraph *tmppar;
+       LyXFileDlg fileDlg;
+       if (!current_view->getScreen()) return;
+     
+       if (fname.empty()) {
+               ProhibitInput();
+               fname = fileDlg.Select(_("File to Insert"), 
+                                      current_view->getOwner()->currentBuffer()->filepath,
+                                      "*");
+               AllowInput();
+               if (fname.empty()) return;
+       }
+
+       FileInfo fi(fname);
+       FilePtr myfile(fname, FilePtr::read);
+
+       if (!fi.exist() || !fi.readable() || !myfile()) {
+               WriteFSAlert(_("Error! Cannot open specified file:"),
+                            MakeDisplayPath(fname,50));
+               return;
+       }
+       
+       tmppar = new LyXParagraph();
+       tmppar->readSimpleWholeFile(myfile);
+       
+       // set the end of the string
+       tmppar->InsertChar(tmppar->last-1,'\0');
+      
+       // insert the string
+       current_view->getScreen()->HideCursor();
+      
+       // clear the selection
+       BeforeChange();
+       if (!asParagraph)
+               current_view->currentBuffer()->text->InsertStringA(tmppar->text);
+       else
+               current_view->currentBuffer()->text->InsertStringB(tmppar->text);
+       delete tmppar;
+       current_view->currentBuffer()->update(1);
+}
+
+
+void MenuShowTableOfContents()
+{
+       TocUpdateCB(NULL, 0);
+       if (fd_form_toc->form_toc->visible) {
+               fl_raise_form(fd_form_toc->form_toc);
+       } else {
+               fl_show_form(fd_form_toc->form_toc,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
+                            _("Table Of Contents"));
+       }
+}
+
+
+void MenuInsertLabel(const char *arg)
+{
+       LString label = arg;
+       ProhibitInput();
+       //LString label = fl_show_input(_("Enter new label to insert:"),"");
+       if (label.empty())
+               label = askForText(_("Enter new label to insert:"));
+       label.strip();
+       label.frontStrip();
+       if (!label.empty()) {
+               InsetLabel *new_inset = new InsetLabel;
+               new_inset->setContents(label);
+               current_view->currentBuffer()->insertInset(new_inset);
+       }
+       AllowInput();
+}
+
+
+void MenuInsertRef()
+{
+       RefUpdateCB(NULL, 0);
+       if (fd_form_ref->form_ref->visible) {
+               fl_raise_form(fd_form_ref->form_ref);
+       } else {
+               fl_show_form(fd_form_ref->form_ref,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
+                            _("Insert Reference"));
+       }
+}
+
+
+void MenuPasteSelection(char at)
+{
+       if (!current_view->getScreen())
+               return;
+
+       ascii_type = at;
+  
+       Atom data_prop = XInternAtom(fl_display, 
+                                    "LyX_Primary",
+                                    false);
+       if (data_prop == None) 
+               return;
+       XConvertSelection(fl_display,
+                         XA_PRIMARY, XA_STRING, data_prop, 
+                         fd_form_main->form_main->window, 0);
+       XFlush(fl_display);
+}
+
+
+void FootCB(FL_OBJECT*, long)
+{
+       if (!current_view->available()) 
+               return;
+       
+       minibuffer->Set(_("Inserting Footnote..."));
+       current_view->getScreen()->HideCursor();
+       current_view->currentBuffer()->update(-2);
+       current_view->currentBuffer()->text->InsertFootnoteEnvironment(LyXParagraph::FOOTNOTE);
+       current_view->currentBuffer()->update(1);
+}
+
+
+void LayoutsCB(int sel, void *)
+{
+       LString tmp;
+       tmp += sel;
+       current_view->getOwner()->getLyXFunc()->Dispatch(LFUN_LAYOUTNO,
+                                                        tmp.c_str());
+}
+
+
+/*
+ * SGML Linuxdoc support:
+ * (flag == -1) import SGML file
+ * (flag == 0) make TeX output
+ * (flag == 1) make dvi output
+ */
+int RunLinuxDoc(int flag, LString const & filename)
+{
+       LString name;
+       LString s2;
+       LString path;
+       LString add_flags;
+
+       int errorcode = 0;
+
+       /* generate a path-less extension name */
+       name = ChangeExtension (filename, ".sgml", true);
+       path = OnlyPath (filename);
+       if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)) {
+               path = current_view->currentBuffer()->tmppath;
+       }
+       PathPush (path);
+       
+       if (flag != -1) {
+               if (!current_view->available())
+                       return 0;
+               current_view->currentBuffer()->makeLinuxDocFile(name,0);
+               LYX_PAPER_SIZE ps = (LYX_PAPER_SIZE) current_view->currentBuffer()->params.papersize;
+               switch (ps) {
+               case PAPER_A4PAPER:  add_flags = "-p a4";     break;
+               case PAPER_USLETTER: add_flags = "-p letter"; break;
+               default: /* nothing to be done yet ;-) */     break; 
+               }
+       }
+       
+       ProhibitInput();
+       
+       Systemcalls one;
+       switch (flag) {
+       case -1: /* Import file */
+               minibuffer->Set(_("Importing LinuxDoc SGML file `"), 
+                               MakeDisplayPath(filename), "'...");
+               s2 = "sgml2lyx " + lyxrc->sgml_extra_options + ' ' 
+                       + name;
+               if (one.Startscript(Systemcalls::System, s2)) 
+                       errorcode = 1;
+               break;
+       case 0: /* TeX output asked */
+               minibuffer->Set(_("Converting LinuxDoc SGML to TeX file..."));
+               s2 = "sgml2latex " + add_flags + " -o tex "
+                       + lyxrc->sgml_extra_options + ' ' + name;
+               if (one.Startscript(Systemcalls::System, s2)) 
+                       errorcode = 1;
+               break;
+       case 1: /* dvi output asked */
+               minibuffer->Set(_("Converting LinuxDoc SGML to dvi file..."));
+               s2 = "sgml2latex " + add_flags + " -o dvi "
+                       + lyxrc->sgml_extra_options + ' ' + name;
+               if (one.Startscript(Systemcalls::System, s2)) {
+                       errorcode = 1;
+               } else
+                       current_view->currentBuffer()->markDviClean();
+               break;
+       default: /* unknown output */
+               break;
+       }
+       
+       PathPop();
+       AllowInput();
+
+        current_view->currentBuffer()->redraw();
+       return errorcode;
+}
+
+
+/*
+ * SGML DocBook support:
+ * (flag == 1) make dvi output
+ */
+int RunDocBook(int flag, LString const & filename)
+{
+       LString name;
+       LString s2;
+       LString path;
+
+       int errorcode = 0;
+
+       /* generate a path-less extension name */
+       name = ChangeExtension (filename, ".sgml", true);
+       path = OnlyPath (filename);
+       if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)) {
+               path = current_view->currentBuffer()->tmppath;
+       }
+       PathPush (path);
+
+       if (!current_view->available())
+               return 0;
+       
+       current_view->currentBuffer()->makeDocBookFile(name,0);
+#if 0
+       LString add_flags;
+       LYX_PAPER_SIZE ps = (LYX_PAPER_SIZE) current_view->currentBuffer()->params.papersize;
+       switch (ps) {
+       case PAPER_A4PAPER:  add_flags = "-p a4";     break;
+       case PAPER_USLETTER: add_flags = "-p letter"; break;
+       default: /* nothing to be done yet ;-) */     break; 
+       }
+#endif 
+       ProhibitInput();
+       
+       Systemcalls one;
+       switch (flag) {
+       case 1: /* dvi output asked */
+               minibuffer->Set(_("Converting DocBook SGML to dvi file..."));
+               s2 = "sgmltools --backend dvi " + name;
+               if (one.Startscript(Systemcalls::System, s2)) {
+                       errorcode = 1;
+               } else
+                       current_view->currentBuffer()->markDviClean();
+               break;
+       default: /* unknown output */
+               break;
+       }
+       
+       PathPop();
+       AllowInput();
+
+        current_view->currentBuffer()->redraw();
+       return errorcode;
+}
+
+
+void AllFloats(char flag, char figmar)
+{
+       if (!current_view->available())
+               return;
+   
+       LyXCursor cursor = current_view->currentBuffer()->text->cursor;
+
+       if (!flag && cursor.par->footnoteflag != LyXParagraph::NO_FOOTNOTE
+           && ((figmar 
+                && cursor.par->footnotekind != LyXParagraph::FOOTNOTE 
+                && cursor.par->footnotekind != LyXParagraph::MARGIN)
+               || (!figmar
+                   && cursor.par->footnotekind != LyXParagraph::FIG 
+                   && cursor.par->footnotekind != LyXParagraph::TAB
+                   && cursor.par->footnotekind != LyXParagraph::WIDE_FIG 
+                   && cursor.par->footnotekind != LyXParagraph::WIDE_TAB
+                   && cursor.par->footnotekind != LyXParagraph::ALGORITHM)))
+               ToggleFloat();
+       else
+               BeforeChange();
+
+       LyXCursor tmpcursor = cursor;
+       cursor.par = tmpcursor.par->ParFromPos(tmpcursor.pos);
+       cursor.pos = tmpcursor.par->PositionInParFromPos(tmpcursor.pos);
+
+       LyXParagraph *par = current_view->currentBuffer()->paragraph;
+       while (par) {
+               if (flag) {
+                       if (par->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE
+                           && (
+                                   (figmar 
+                                    &&
+                                    par->footnotekind != LyXParagraph::FOOTNOTE 
+                                    &&
+                                    par->footnotekind !=  LyXParagraph::MARGIN
+                                           )
+                                   ||
+                                   (!figmar
+                                    &&
+                                    par->footnotekind != LyXParagraph::FIG 
+                                    &&
+                                    par->footnotekind != LyXParagraph::TAB
+                                    &&
+                                    par->footnotekind != LyXParagraph::WIDE_FIG 
+                                    &&
+                                    par->footnotekind != LyXParagraph::WIDE_TAB
+                                    &&
+                                    par->footnotekind != LyXParagraph::ALGORITHM
+                                           )
+                                   )
+                               ){
+                               if (par->previous
+                                   && par->previous->footnoteflag !=
+                                   LyXParagraph::CLOSED_FOOTNOTE){ /* should be */ 
+                                       current_view->currentBuffer()->text->SetCursorIntern(par->previous,
+                                                                     0);
+                                       current_view->currentBuffer()->text->OpenFootnote();
+                               }
+                       }
+               }
+               else  {
+                       if (par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
+                           && (
+                                   (figmar 
+                                    &&
+                                    par->footnotekind != LyXParagraph::FOOTNOTE 
+                                    &&
+                                    par->footnotekind !=  LyXParagraph::MARGIN
+                                           )
+                                   ||
+                                   (!figmar
+                                    &&
+                                    par->footnotekind != LyXParagraph::FIG 
+                                    &&
+                                    par->footnotekind != LyXParagraph::TAB
+                                    &&
+                                    par->footnotekind != LyXParagraph::WIDE_FIG 
+                                    &&
+                                    par->footnotekind != LyXParagraph::WIDE_TAB
+                                    &&
+                                    par->footnotekind != LyXParagraph::ALGORITHM
+                                           )
+                                   )
+                               ){
+                               current_view->currentBuffer()->text->SetCursorIntern(par, 0);
+                               current_view->currentBuffer()->text->CloseFootnote();
+                       }
+               }
+               par = par->next;
+       }
+
+       current_view->currentBuffer()->text->SetCursorIntern(cursor.par, cursor.pos);
+       current_view->redraw();
+       current_view->fitCursor();
+       current_view->updateScrollbar();
+}
+
+
+void MenuLayoutCharacter()
+{
+       if (fd_form_character->form_character->visible) {
+               fl_raise_form(fd_form_character->form_character);
+       } else {
+               fl_show_form(fd_form_character->form_character,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
+                            _("Character Style"));
+       }
+}
+
+
+inline void DeactivateParagraphButtons ()
+{
+       fl_deactivate_object (fd_form_paragraph->button_ok);
+       fl_deactivate_object (fd_form_paragraph->button_apply);
+       fl_set_object_lcol (fd_form_paragraph->button_ok, FL_INACTIVE);
+       fl_set_object_lcol (fd_form_paragraph->button_apply, FL_INACTIVE);
+}
+
+inline void ActivateParagraphButtons ()
+{
+       fl_activate_object (fd_form_paragraph->button_ok);
+       fl_activate_object (fd_form_paragraph->button_apply);
+       fl_set_object_lcol (fd_form_paragraph->button_ok, FL_BLACK);
+       fl_set_object_lcol (fd_form_paragraph->button_apply, FL_BLACK);
+}
+
+inline void DisableParagraphLayout ()
+{
+        DeactivateParagraphButtons();
+       fl_deactivate_object (fd_form_paragraph->input_labelwidth);
+       fl_deactivate_object (fd_form_paragraph->check_lines_top);
+       fl_deactivate_object (fd_form_paragraph->check_lines_bottom);
+       fl_deactivate_object (fd_form_paragraph->check_pagebreaks_top);
+       fl_deactivate_object (fd_form_paragraph->check_pagebreaks_bottom);
+       fl_deactivate_object (fd_form_paragraph->check_noindent);
+       fl_deactivate_object (fd_form_paragraph->group_radio_alignment);
+       fl_deactivate_object (fd_form_paragraph->radio_align_right);
+       fl_deactivate_object (fd_form_paragraph->radio_align_left);
+       fl_deactivate_object (fd_form_paragraph->radio_align_block);
+       fl_deactivate_object (fd_form_paragraph->radio_align_center);
+       fl_deactivate_object (fd_form_paragraph->input_space_above);
+       fl_deactivate_object (fd_form_paragraph->input_space_below);
+       fl_deactivate_object (fd_form_paragraph->choice_space_above);
+       fl_deactivate_object (fd_form_paragraph->choice_space_below);
+       fl_deactivate_object (fd_form_paragraph->check_space_above);
+       fl_deactivate_object (fd_form_paragraph->check_space_below);
+}
+
+inline void EnableParagraphLayout ()
+{
+        ActivateParagraphButtons();
+       fl_activate_object (fd_form_paragraph->input_labelwidth);
+       fl_activate_object (fd_form_paragraph->check_lines_top);
+       fl_activate_object (fd_form_paragraph->check_lines_bottom);
+       fl_activate_object (fd_form_paragraph->check_pagebreaks_top);
+       fl_activate_object (fd_form_paragraph->check_pagebreaks_bottom);
+       fl_activate_object (fd_form_paragraph->check_noindent);
+       fl_activate_object (fd_form_paragraph->group_radio_alignment);
+       fl_activate_object (fd_form_paragraph->radio_align_right);
+       fl_activate_object (fd_form_paragraph->radio_align_left);
+       fl_activate_object (fd_form_paragraph->radio_align_block);
+       fl_activate_object (fd_form_paragraph->radio_align_center);
+       fl_activate_object (fd_form_paragraph->input_space_above);
+       fl_activate_object (fd_form_paragraph->input_space_below);
+       fl_activate_object (fd_form_paragraph->choice_space_above);
+       fl_activate_object (fd_form_paragraph->choice_space_below);
+       fl_activate_object (fd_form_paragraph->check_space_above);
+       fl_activate_object (fd_form_paragraph->check_space_below);
+}
+
+bool UpdateLayoutParagraph()
+{
+       if (!current_view->getScreen() || !current_view->available()) {
+               if (fd_form_paragraph->form_paragraph->visible) 
+                       fl_hide_form(fd_form_paragraph->form_paragraph);
+               return false;
+       }
+
+       Buffer * buf = current_view->currentBuffer();
+
+       fl_set_input(fd_form_paragraph->input_labelwidth,
+                    buf->text->cursor.par->GetLabelWidthString().c_str());
+       fl_set_button(fd_form_paragraph->radio_align_right, 0);
+       fl_set_button(fd_form_paragraph->radio_align_left, 0);
+       fl_set_button(fd_form_paragraph->radio_align_center, 0);
+       fl_set_button(fd_form_paragraph->radio_align_block, 0);
+
+       int align = buf->text->cursor.par->GetAlign();
+       if (align == LYX_ALIGN_LAYOUT)
+               align = lyxstyle.Style(buf->params.textclass,
+                                      buf->text->cursor.par->GetLayout())->align;
+        
+       switch (align) {
+       case LYX_ALIGN_RIGHT:
+               fl_set_button(fd_form_paragraph->radio_align_right, 1);
+               break;
+       case LYX_ALIGN_LEFT:
+               fl_set_button(fd_form_paragraph->radio_align_left, 1);
+               break;
+       case LYX_ALIGN_CENTER:
+               fl_set_button(fd_form_paragraph->radio_align_center, 1);
+               break;
+       default:
+               fl_set_button(fd_form_paragraph->radio_align_block, 1);
+               break;
+       }
+        
+       fl_set_button(fd_form_paragraph->check_lines_top,
+                     buf->text->cursor.par->FirstPhysicalPar()->line_top);
+       fl_set_button(fd_form_paragraph->check_lines_bottom,
+                     buf->text->cursor.par->FirstPhysicalPar()->line_bottom);
+       fl_set_button(fd_form_paragraph->check_pagebreaks_top,
+                     buf->text->cursor.par->FirstPhysicalPar()->pagebreak_top);
+       fl_set_button(fd_form_paragraph->check_pagebreaks_bottom,
+                     buf->text->cursor.par->FirstPhysicalPar()->pagebreak_bottom);
+       fl_set_button(fd_form_paragraph->check_noindent,
+                     buf->text->cursor.par->FirstPhysicalPar()->noindent);
+       fl_set_input (fd_form_paragraph->input_space_above, "");
+       
+       switch (buf->text->cursor.par->FirstPhysicalPar()->added_space_top.kind()) {
+       case VSpace::NONE:
+               fl_set_choice (fd_form_paragraph->choice_space_above,
+                              1);
+               break;
+       case VSpace::DEFSKIP:
+               fl_set_choice (fd_form_paragraph->choice_space_above,
+                              2);
+               break;
+       case VSpace::SMALLSKIP:
+               fl_set_choice (fd_form_paragraph->choice_space_above,
+                              3);
+               break;
+       case VSpace::MEDSKIP:
+               fl_set_choice (fd_form_paragraph->choice_space_above,
+                              4);
+               break;
+       case VSpace::BIGSKIP:
+               fl_set_choice (fd_form_paragraph->choice_space_above,
+                              5);
+               break;
+       case VSpace::VFILL:
+               fl_set_choice (fd_form_paragraph->choice_space_above,
+                              6);
+               break;
+       case VSpace::LENGTH:
+               fl_set_choice (fd_form_paragraph->choice_space_above,
+                              7); 
+               fl_set_input  (fd_form_paragraph->input_space_above, 
+                              buf->text->cursor.par->FirstPhysicalPar()->added_space_top.length().asString().c_str());
+               break;
+       }
+       fl_set_button (fd_form_paragraph->check_space_above,
+                      buf->text->cursor.par->FirstPhysicalPar()->added_space_top.keep());
+       fl_set_input (fd_form_paragraph->input_space_below, "");
+       switch (buf->text->cursor.par->FirstPhysicalPar()->added_space_bottom.kind()) {
+       case VSpace::NONE:
+               fl_set_choice (fd_form_paragraph->choice_space_below,
+                              1);
+               break;
+       case VSpace::DEFSKIP:
+               fl_set_choice (fd_form_paragraph->choice_space_below,
+                              2);
+               break;
+       case VSpace::SMALLSKIP:
+               fl_set_choice (fd_form_paragraph->choice_space_below,
+                              3);
+               break;
+       case VSpace::MEDSKIP:
+               fl_set_choice (fd_form_paragraph->choice_space_below,
+                              4);
+               break;
+       case VSpace::BIGSKIP:
+               fl_set_choice (fd_form_paragraph->choice_space_below,
+                              5);
+               break;
+       case VSpace::VFILL:
+               fl_set_choice (fd_form_paragraph->choice_space_below,
+                              6);
+               break;
+       case VSpace::LENGTH:
+               fl_set_choice (fd_form_paragraph->choice_space_below,
+                              7); 
+               fl_set_input  (fd_form_paragraph->input_space_below, 
+                              buf->text->cursor.par->FirstPhysicalPar()->added_space_bottom.length().asString().c_str());
+               break;
+       }
+       fl_set_button (fd_form_paragraph->check_space_below,
+                      buf->text->cursor.par->FirstPhysicalPar()->added_space_bottom.keep());
+
+       fl_set_button(fd_form_paragraph->check_noindent,
+                     buf->text->cursor.par->FirstPhysicalPar()->noindent);
+
+       if (current_view->currentBuffer()->isReadonly()) {
+               DisableParagraphLayout();
+       } else {
+               EnableParagraphLayout();
+       }
+       return true;
+}
+
+void MenuLayoutParagraph()
+{
+       if (UpdateLayoutParagraph()) {
+               if (fd_form_paragraph->form_paragraph->visible) {
+                       fl_raise_form(fd_form_paragraph->form_paragraph);
+               } else {
+                       fl_show_form(fd_form_paragraph->form_paragraph,
+                                    FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
+                                    _("Paragraph Environment"));
+               }
+       }
+}
+
+
+inline
+void DeactivateDocumentButtons ()
+{
+       fl_deactivate_object (fd_form_document->button_ok);
+       fl_deactivate_object (fd_form_document->button_apply);
+       fl_set_object_lcol (fd_form_document->button_ok, FL_INACTIVE);
+       fl_set_object_lcol (fd_form_document->button_apply, FL_INACTIVE);
+}
+
+
+inline
+void ActivateDocumentButtons ()
+{
+       fl_activate_object (fd_form_document->button_ok);
+       fl_activate_object (fd_form_document->button_apply);
+       fl_set_object_lcol (fd_form_document->button_ok, FL_BLACK);
+       fl_set_object_lcol (fd_form_document->button_apply, FL_BLACK);
+}
+
+inline
+void DisableDocumentLayout ()
+{
+        DeactivateDocumentButtons ();
+       fl_deactivate_object (fd_form_document->group_radio_separation);
+       fl_deactivate_object (fd_form_document->radio_indent);
+       fl_deactivate_object (fd_form_document->radio_skip);
+       fl_deactivate_object (fd_form_document->choice_class);
+       fl_deactivate_object (fd_form_document->choice_pagestyle);
+       fl_deactivate_object (fd_form_document->choice_fonts);
+       fl_deactivate_object (fd_form_document->choice_fontsize);
+       fl_deactivate_object (fd_form_document->input_float_placement);
+       fl_deactivate_object (fd_form_document->choice_postscript_driver);
+       fl_deactivate_object (fd_form_document->choice_inputenc);
+       fl_deactivate_object (fd_form_document->group_radio_sides);
+       fl_deactivate_object (fd_form_document->radio_sides_one);
+       fl_deactivate_object (fd_form_document->radio_sides_two);
+       fl_deactivate_object (fd_form_document->group_radio_columns);
+       fl_deactivate_object (fd_form_document->radio_columns_one);
+       fl_deactivate_object (fd_form_document->radio_columns_two);
+       fl_deactivate_object (fd_form_document->input_extra);
+       fl_deactivate_object (fd_form_document->choice_language);
+       combo_language->deactivate();
+       fl_deactivate_object (fd_form_document->input_default_skip);
+       fl_deactivate_object (fd_form_document->choice_default_skip);
+       fl_deactivate_object (fd_form_document->slider_secnumdepth);
+       fl_deactivate_object (fd_form_document->slider_tocdepth);
+       fl_deactivate_object (fd_form_document->choice_spacing);
+       fl_deactivate_object (fd_form_document->input_spacing);
+       fl_deactivate_object (fd_form_document->check_use_amsmath);
+}
+
+inline
+void EnableDocumentLayout ()
+{
+        ActivateDocumentButtons ();
+       fl_activate_object (fd_form_document->group_radio_separation);
+       fl_activate_object (fd_form_document->radio_indent);
+       fl_activate_object (fd_form_document->radio_skip);
+       fl_activate_object (fd_form_document->choice_class);
+       fl_activate_object (fd_form_document->choice_pagestyle);
+       fl_activate_object (fd_form_document->choice_fonts);
+       fl_activate_object (fd_form_document->choice_fontsize);
+       fl_activate_object (fd_form_document->input_float_placement);
+       fl_activate_object (fd_form_document->choice_postscript_driver);
+       fl_activate_object (fd_form_document->choice_inputenc);
+       fl_activate_object (fd_form_document->group_radio_sides);
+       fl_activate_object (fd_form_document->radio_sides_one);
+       fl_activate_object (fd_form_document->radio_sides_two);
+       fl_activate_object (fd_form_document->group_radio_columns);
+       fl_activate_object (fd_form_document->radio_columns_one);
+       fl_activate_object (fd_form_document->radio_columns_two);
+       fl_activate_object (fd_form_document->input_extra);
+       fl_activate_object (fd_form_document->choice_language);
+       combo_language->activate();
+       fl_activate_object (fd_form_document->input_default_skip);
+       fl_activate_object (fd_form_document->choice_default_skip);
+       fl_activate_object (fd_form_document->slider_secnumdepth);
+       fl_activate_object (fd_form_document->slider_tocdepth);
+       fl_activate_object (fd_form_document->choice_spacing);
+       fl_activate_object (fd_form_document->input_spacing);
+       fl_activate_object (fd_form_document->check_use_amsmath);
+}
+
+bool UpdateLayoutDocument(BufferParams *params)
+{
+       if (!current_view->getScreen() || !current_view->available()) {
+               if (fd_form_document->form_document->visible) 
+                       fl_hide_form(fd_form_document->form_document);
+               return false;
+       }               
+
+       if (params == NULL)
+               params = &current_view->currentBuffer()->params;
+       LyXTextClass *tclass = lyxstyle.TextClass(params->textclass);
+       
+       fl_set_choice_text(fd_form_document->choice_class, 
+                          lyxstyle.DescOfClass(params->textclass).c_str());
+       combo_language->select_text(params->language.c_str());
+       
+       fl_set_choice_text(fd_form_document->choice_fonts, 
+                          params->fonts.c_str());
+       fl_set_choice_text(fd_form_document->choice_inputenc, 
+                          params->inputenc.c_str());
+       fl_set_choice_text(fd_form_document->choice_postscript_driver, 
+                          params->graphicsDriver.c_str());
+
+       // ale970405+lasgoutt970513
+       fl_clear_choice(fd_form_document->choice_fontsize);
+       fl_addto_choice(fd_form_document->choice_fontsize, "default");
+       fl_addto_choice(fd_form_document->choice_fontsize, 
+                       tclass->opt_fontsize.c_str());
+       fl_set_choice(fd_form_document->choice_fontsize, 
+                     tclass->opt_fontsize.tokenPos('|', params->fontsize) + 2);
+
+       // ale970405+lasgoutt970513
+       fl_clear_choice(fd_form_document->choice_pagestyle);
+       fl_addto_choice(fd_form_document->choice_pagestyle, "default");
+       fl_addto_choice(fd_form_document->choice_pagestyle, 
+                       tclass->opt_pagestyle.c_str());
+    
+       fl_set_choice(fd_form_document->choice_pagestyle,
+                     tclass->opt_pagestyle.tokenPos('|', params->pagestyle) + 2);
+
+       fl_set_button(fd_form_document->radio_indent, 0);
+       fl_set_button(fd_form_document->radio_skip, 0);
+    
+        
+       fl_set_button(fd_form_document->check_use_amsmath, params->use_amsmath);
+
+       if (params->paragraph_separation == LYX_PARSEP_INDENT)
+               fl_set_button(fd_form_document->radio_indent, 1);
+       else
+               fl_set_button(fd_form_document->radio_skip, 1);
+
+       switch (params->getDefSkip().kind()) {
+       case VSpace::SMALLSKIP: 
+               fl_set_choice (fd_form_document->choice_default_skip, 1);
+               break;
+       case VSpace::MEDSKIP: 
+               fl_set_choice (fd_form_document->choice_default_skip, 2);
+               break;
+       case VSpace::BIGSKIP: 
+               fl_set_choice (fd_form_document->choice_default_skip, 3);
+               break;
+       case VSpace::LENGTH: 
+               fl_set_choice (fd_form_document->choice_default_skip, 4);
+               fl_set_input (fd_form_document->input_default_skip,
+                             params->getDefSkip().asLyXCommand().c_str());
+               break;
+       default:
+               fl_set_choice (fd_form_document->choice_default_skip, 2);
+               break;
+       }
+   
+       fl_set_button(fd_form_document->radio_sides_one, 0);
+       fl_set_button(fd_form_document->radio_sides_two, 0);
+   
+       if (params->sides == 2)
+               fl_set_button(fd_form_document->radio_sides_two, 1);
+       else
+               fl_set_button(fd_form_document->radio_sides_one, 1);
+   
+       fl_set_button(fd_form_document->radio_columns_one, 0);
+       fl_set_button(fd_form_document->radio_columns_two, 0);
+   
+       if (params->columns == 2)
+               fl_set_button(fd_form_document->radio_columns_two, 1);
+       else
+               fl_set_button(fd_form_document->radio_columns_one, 1);
+   
+       fl_set_input(fd_form_document->input_spacing, "");
+       switch (params->spacing.getSpace()) {
+       case Spacing::Single:
+               {
+                       // \singlespacing
+                       fl_set_choice(fd_form_document->choice_spacing, 1);
+                       break;
+               }
+       case Spacing::Onehalf:
+               {
+                       // \onehalfspacing
+                       fl_set_choice(fd_form_document->choice_spacing, 2);
+                       break;
+               }
+       case Spacing::Double:
+               {
+                       // \ doublespacing
+                       fl_set_choice(fd_form_document->choice_spacing, 3);
+                       break;
+               }
+       case Spacing::Other:
+               {
+                       fl_set_choice(fd_form_document->choice_spacing, 4);
+                       char sval[20];
+                       sprintf(sval,"%g",params->spacing.getValue()); 
+                       fl_set_input(fd_form_document->input_spacing, sval);
+                       break;
+               }
+       }
+
+
+       fl_set_counter_value(fd_form_document->slider_secnumdepth, 
+                            params->secnumdepth);
+       fl_set_counter_value(fd_form_document->slider_tocdepth, 
+                            params->tocdepth);
+       if (!params->float_placement.empty()) { // buffer local (Lgb)
+               fl_set_input(fd_form_document->input_float_placement,
+                            params->float_placement.c_str());
+       } else {
+               fl_set_input(fd_form_document->input_float_placement, "");
+       }
+       if (!params->options.empty())
+               fl_set_input(fd_form_document->input_extra,
+                            params->options.c_str());
+       else
+               fl_set_input(fd_form_document->input_extra, "");
+
+       if (current_view->currentBuffer()->isSGML()) {
+               // bullets not used in SGML derived documents
+               fl_deactivate_object(fd_form_document->button_bullets);
+               fl_set_object_lcol(fd_form_document->button_bullets,
+                                  FL_INACTIVE);
+       } else {
+               fl_activate_object(fd_form_document->button_bullets);
+               fl_set_object_lcol(fd_form_document->button_bullets,
+                                  FL_BLACK);
+       }
+
+       if (current_view->currentBuffer()->isReadonly()) {
+               DisableDocumentLayout();
+       } else {
+               EnableDocumentLayout();
+       }
+
+       return true;
+}
+
+void MenuLayoutDocument()
+{
+       if (UpdateLayoutDocument()) {
+               if (fd_form_document->form_document->visible) {
+                       fl_raise_form(fd_form_document->form_document);
+               } else {
+                       fl_show_form(fd_form_document->form_document,
+                                    FL_PLACE_MOUSE | FL_FREE_SIZE,
+                                    FL_FULLBORDER,
+                                    _("Document Layout"));
+               }
+       }
+}
+
+
+bool UpdateLayoutQuotes()
+{
+       bool update = true;
+       if (!current_view->getScreen()
+           || !current_view->available()
+           || current_view->currentBuffer()->isReadonly())
+               update = false;
+       
+       if (update) {
+               fl_set_choice(fd_form_quotes->choice_quotes_language,
+                     current_view->currentBuffer()->params.quotes_language + 1);
+               fl_set_button(fd_form_quotes->radio_single, 0);
+               fl_set_button(fd_form_quotes->radio_double, 0);
+       
+               if (current_view->currentBuffer()->params.quotes_times == InsetQuotes::SingleQ)
+                       fl_set_button(fd_form_quotes->radio_single, 1);
+               else
+                       fl_set_button(fd_form_quotes->radio_double, 1);
+       } else if (fd_form_quotes->form_quotes->visible) {
+               fl_hide_form(fd_form_quotes->form_quotes);
+       }
+       return update;
+}
+
+void MenuLayoutQuotes()
+{
+       if (UpdateLayoutQuotes()) {
+               if (fd_form_quotes->form_quotes->visible) {
+                       fl_raise_form(fd_form_quotes->form_quotes);
+               } else {
+                       fl_show_form(fd_form_quotes->form_quotes,
+                                    FL_PLACE_MOUSE | FL_FREE_SIZE,
+                                    FL_FULLBORDER,
+                                    _("Quotes"));
+               }
+       }
+}
+
+
+bool UpdateLayoutPreamble()
+{
+       bool update = true;
+       if (!current_view->getScreen() || ! current_view->available())
+           update = false;
+
+       if (update) {
+               fl_set_input(fd_form_preamble->input_preamble,
+                    current_view->currentBuffer()->params.preamble.c_str());
+
+               if (current_view->currentBuffer()->isReadonly()) {
+                 fl_deactivate_object(fd_form_preamble->input_preamble);
+                 fl_deactivate_object(fd_form_preamble->button_ok);
+                 fl_deactivate_object(fd_form_preamble->button_apply);
+                 fl_set_object_lcol(fd_form_preamble->button_ok, FL_INACTIVE);
+                 fl_set_object_lcol(fd_form_preamble->button_apply, FL_INACTIVE);
+               }
+               else {
+                 fl_activate_object(fd_form_preamble->input_preamble);
+                 fl_activate_object(fd_form_preamble->button_ok);
+                 fl_activate_object(fd_form_preamble->button_apply);
+                 fl_set_object_lcol(fd_form_preamble->button_ok, FL_BLACK);
+                 fl_set_object_lcol(fd_form_preamble->button_apply, FL_BLACK);
+               }
+       } else if (fd_form_preamble->form_preamble->visible) {
+               fl_hide_form(fd_form_preamble->form_preamble);
+       }
+       return update;
+}
+
+void MenuLayoutPreamble()
+{
+       if (UpdateLayoutPreamble()) {
+               if (fd_form_preamble->form_preamble->visible) {
+                       fl_raise_form(fd_form_preamble->form_preamble);
+               } else {
+                       fl_show_form(fd_form_preamble->form_preamble,
+                                    FL_PLACE_MOUSE | FL_FREE_SIZE,
+                                    FL_FULLBORDER,
+                                    _("LaTeX Preamble"));
+               }
+       }
+}
+
+void MenuLayoutSave()
+{
+       if (!current_view->getScreen() || ! current_view->available())
+           return;
+
+       if (AskQuestion(_("Do you want to save the current settings"),
+                       _("for Character, Document, Paper and Quotes"),
+                       _("as default for new documents?")))
+               current_view->currentBuffer()->saveParamsAsDefaults();
+}
+
+
+void NoteCB()
+{
+       InsetInfo *new_inset = new InsetInfo();
+       current_view->currentBuffer()->insertInset(new_inset);
+       new_inset->Edit(0,0);
+       //current_view->currentBuffer()->update(-1);
+}
+
+
+void OpenStuff()
+{
+       if (current_view->available()) {
+               minibuffer->Set(_("Open/Close..."));
+               current_view->getScreen()->HideCursor();
+               BeforeChange();
+               current_view->currentBuffer()->update(-2);
+               current_view->currentBuffer()->text->OpenStuff();
+               current_view->currentBuffer()->update(0);
+       }
+}
+
+void ToggleFloat()
+{
+       if (current_view->available()) {
+               minibuffer->Set(_("Open/Close..."));
+               current_view->getScreen()->HideCursor();
+               BeforeChange();
+               current_view->currentBuffer()->update(-2);
+               current_view->currentBuffer()->text->ToggleFootnote();
+               current_view->currentBuffer()->update(0);
+       }
+}
+
+
+void MenuUndo()
+{
+/*     if (current_view->currentBuffer()->the_locking_inset) {
+               minibuffer->Set(_("Undo not yet supported in math mode"));
+               return;
+       }*/
+   
+       if (current_view->available()) {
+               minibuffer->Set(_("Undo"));
+               current_view->getScreen()->HideCursor();
+               BeforeChange();
+               current_view->currentBuffer()->update(-2);
+               if (!current_view->currentBuffer()->text->TextUndo())
+                       minibuffer->Set(_("No further undo information"));
+               else
+                       current_view->currentBuffer()->update(-1);
+       }
+}
+
+
+void MenuRedo()
+{
+       if (current_view->currentBuffer()->the_locking_inset) {
+               minibuffer->Set(_("Redo not yet supported in math mode"));
+               return;
+       }    
+   
+       if (current_view->available()) {
+               minibuffer->Set(_("Redo"));
+               current_view->getScreen()->HideCursor();
+               BeforeChange();
+               current_view->currentBuffer()->update(-2);
+               if (!current_view->currentBuffer()->text->TextRedo())
+                       minibuffer->Set(_("No further redo information"));
+               else
+                       current_view->currentBuffer()->update(-1);
+       }
+}
+
+
+void HyphenationPoint()
+{
+       if (current_view->available())  {
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               InsetSpecialChar *new_inset = 
+                       new InsetSpecialChar(InsetSpecialChar::HYPHENATION);
+               current_view->currentBuffer()->insertInset(new_inset);
+               //current_view->currentBuffer()->update(-1);
+       }
+}
+
+
+void Ldots()
+{
+       if (current_view->available())  {
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               InsetSpecialChar *new_inset = 
+                       new InsetSpecialChar(InsetSpecialChar::LDOTS);
+               current_view->currentBuffer()->insertInset(new_inset);
+       }
+}
+
+
+void EndOfSentenceDot()
+{
+       if (current_view->available())  {
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               InsetSpecialChar *new_inset = 
+                       new InsetSpecialChar(InsetSpecialChar::END_OF_SENTENCE);
+               current_view->currentBuffer()->insertInset(new_inset);
+       }
+}
+
+
+void MenuSeparator()
+{
+       if (current_view->available())  {
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               InsetSpecialChar *new_inset = 
+                       new InsetSpecialChar(InsetSpecialChar::MENU_SEPARATOR);
+               current_view->currentBuffer()->insertInset(new_inset);
+               //current_view->currentBuffer()->update(-1);
+       }
+}
+
+
+void Newline()
+{
+       if (current_view->available())  {
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               current_view->currentBuffer()->text->InsertChar(LYX_META_NEWLINE);
+               current_view->currentBuffer()->update(-1);
+       }
+}
+
+
+void ProtectedBlank()
+{
+       if (current_view->available())  {
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               current_view->currentBuffer()->text->InsertChar(LYX_META_PROTECTED_SEPARATOR);
+               current_view->currentBuffer()->update(-1);
+       }
+}
+
+
+void HFill()
+{
+       if (current_view->available())  {
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               current_view->currentBuffer()->text->InsertChar(LYX_META_HFILL);
+               current_view->currentBuffer()->update(-1);
+       }
+}
+
+
+/* -------> These CB's use ToggleFree() as the (one and only?) font-changer. 
+                       They also show the current font state. */
+
+static
+void ToggleAndShow(LyXFont const &);
+
+
+void FontSizeCB(LString const & size)
+{
+       LyXFont font(LyXFont::ALL_IGNORE);
+       font.setGUISize(size);
+       ToggleAndShow(font);
+}
+
+
+void EmphCB()
+{
+       LyXFont font(LyXFont::ALL_IGNORE);
+       font.setEmph(LyXFont::TOGGLE);
+       ToggleAndShow(font);
+}
+
+
+void NounCB()
+{
+       LyXFont font(LyXFont::ALL_IGNORE);
+       font.setNoun(LyXFont::TOGGLE);
+       ToggleAndShow(font);
+}
+
+
+void BoldCB()
+{
+       LyXFont font(LyXFont::ALL_IGNORE);
+       font.setSeries(LyXFont::BOLD_SERIES);
+       ToggleAndShow(font);
+}
+
+
+void UnderlineCB()
+{
+       LyXFont font(LyXFont::ALL_IGNORE);
+       font.setUnderbar(LyXFont::TOGGLE);
+       ToggleAndShow(font);
+}
+
+
+void CodeCB()
+{
+       LyXFont font(LyXFont::ALL_IGNORE);
+       font.setFamily(LyXFont::TYPEWRITER_FAMILY); // no good
+       ToggleAndShow(font);
+}
+
+
+void SansCB()
+{
+       LyXFont font(LyXFont::ALL_IGNORE);
+       font.setFamily(LyXFont::SANS_FAMILY);
+       ToggleAndShow(font);
+}
+
+
+void RomanCB()
+{
+       LyXFont font(LyXFont::ALL_IGNORE);
+       font.setFamily(LyXFont::ROMAN_FAMILY);
+       ToggleAndShow(font);
+}
+
+
+void TexCB()
+{
+       LyXFont font(LyXFont::ALL_IGNORE);
+       font.setLatex (LyXFont::TOGGLE);
+       ToggleAndShow(font);
+}
+
+
+void StyleResetCB()
+{
+       LyXFont font(LyXFont::ALL_INHERIT);
+       ToggleAndShow(font);
+}
+
+
+/* -------> Returns the current font and depth by printing a message. In the
+ * future perhaps we could try to implement a callback to the button-bar.
+ * That is, `light' the bold button when the font is currently bold, etc.
+ */
+LString CurrentState()
+{
+       LString state;
+       if (current_view->available()) { 
+               // I think we should only show changes from the default
+               // font. (Asger)
+               Buffer * buffer = current_view->currentBuffer();
+               LyXFont font = buffer->text->real_current_font;
+               LyXFont defaultfont = lyxstyle.TextClass(buffer->
+                                                        params.textclass)->defaultfont;
+               font.reduce(defaultfont);
+               state = _("Font: ") + font.stateText();
+
+               int depth = buffer->text->GetDepth();
+               if (depth>0) 
+                       state += LString(_(", Depth: ")) + depth;
+       }
+       return state;
+}
+
+
+/* -------> Does the actual toggle job of the XxxCB() calls above.
+ * Also shows the current font state.
+ */
+static
+void ToggleAndShow(LyXFont const & font)
+{
+       if (current_view->available()) { 
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               current_view->currentBuffer()->text->ToggleFree(font, toggleall);
+               current_view->currentBuffer()->update(1);
+       }
+       // removed since it overrides the ToggleFree Message about the style
+       // Since Styles are more "High Level" than raw fonts I think the user
+       // prefers it like this               Matthias
+       // FontStateShowCB( 0, 0 );
+}
+
+
+void MarginCB(FL_OBJECT *, long)
+{
+       if (current_view->available()) {
+               minibuffer->Set(_("Inserting margin note..."));
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               current_view->currentBuffer()->text->InsertFootnoteEnvironment(LyXParagraph::MARGIN);
+               current_view->currentBuffer()->update(1);
+       }
+}
+
+
+void FigureCB(FL_OBJECT *, long)
+{
+       if (fd_form_figure->form_figure->visible) {
+               fl_raise_form(fd_form_figure->form_figure);
+       } else {
+               fl_show_form(fd_form_figure->form_figure,
+                            FL_PLACE_MOUSE, FL_FULLBORDER,
+                            _("Insert Figure"));
+       }
+}
+
+
+void TableCB(FL_OBJECT *, long)
+{
+       if (fd_form_table->form_table->visible) {
+               fl_raise_form(fd_form_table->form_table);
+       } else {
+               fl_show_form(fd_form_table->form_table,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
+                            _("Insert Table"));
+       }
+}
+
+
+void CopyEnvironmentCB()
+{
+       if (current_view->available()) {
+               current_view->currentBuffer()->text->copyEnvironmentType();
+               /* clear the selection, even if mark_set */ 
+               current_view->getScreen()->ToggleSelection();
+               current_view->currentBuffer()->text->ClearSelection();
+               current_view->currentBuffer()->update(-2);
+               minibuffer->Set(_("Paragraph environment type copied"));
+       }
+}
+
+
+void PasteEnvironmentCB()
+{
+       if (current_view->available()) {
+               current_view->currentBuffer()->text->pasteEnvironmentType();
+               minibuffer->Set(_("Paragraph environment type set"));
+               current_view->currentBuffer()->update(1);
+       }
+}
+
+
+void CopyCB()
+{
+       if (current_view->available()) {
+               current_view->currentBuffer()->text->CopySelection();
+               /* clear the selection, even if mark_set */ 
+               current_view->getScreen()->ToggleSelection();
+               current_view->currentBuffer()->text->ClearSelection();
+               current_view->currentBuffer()->update(-2);
+               minibuffer->Set(_("Copy"));
+       }
+}
+
+
+void CutCB()
+{
+       if (current_view->available()) {
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               current_view->currentBuffer()->text->CutSelection();
+               current_view->currentBuffer()->update(1);
+               minibuffer->Set(_("Cut"));
+       }
+}
+
+
+void PasteCB()
+{
+       if (!current_view->available()) return;
+       
+       minibuffer->Set(_("Paste"));
+       current_view->getScreen()->HideCursor();
+       /* clear the selection */ 
+       current_view->getScreen()->ToggleSelection();
+       current_view->currentBuffer()->text->ClearSelection();
+       current_view->currentBuffer()->update(-2);
+       
+       /* paste */ 
+       current_view->currentBuffer()->text->PasteSelection();
+       current_view->currentBuffer()->update(1);
+       
+       /* clear the selection */ 
+       current_view->getScreen()->ToggleSelection();
+       current_view->currentBuffer()->text->ClearSelection();
+       current_view->currentBuffer()->update(-2);
+}
+
+
+void MeltCB(FL_OBJECT *, long)
+{
+       if (!current_view->available()) return;
+       
+       minibuffer->Set(_("Melt"));
+       current_view->getScreen()->HideCursor();
+       BeforeChange();
+       current_view->currentBuffer()->update(-2);
+       current_view->currentBuffer()->text->MeltFootnoteEnvironment();
+       current_view->currentBuffer()->update(1);
+}
+
+
+// Change environment depth.
+// if decInc == 0, depth change taking mouse button number into account
+// if decInc == 1, increment depth
+// if decInc == -1, decrement depth
+void DepthCB(FL_OBJECT *ob, long decInc)
+{
+       int button = 1;
+
+       /* When decInc != 0, fake a mouse button. This allows us to
+          implement depth-plus and depth-min commands. RVDK_PATCH_5. */
+       /* check out wether ob is defined, too (Matthias) */ 
+       if ( decInc < 0 )
+               button = 0;
+       else if (!decInc && ob) {
+               button = fl_get_button_numb(ob);
+       }
+  
+       if (current_view->available()) {
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-2);
+               if (button == 1)
+                       current_view->currentBuffer()->text->IncDepth();
+               else
+                       current_view->currentBuffer()->text->DecDepth();
+               current_view->currentBuffer()->update(1);
+               minibuffer->Set(_("Changed environment depth"
+                                 " (in possible range, maybe not)"));
+       }
+}
+
+
+// This is both GUI and LyXFont dependent. Don't know where to put it. (Asger)
+// Well, it's mostly GUI dependent, so I guess it will stay here. (Asger)
+LyXFont UserFreeFont()
+{
+       LyXFont font(LyXFont::ALL_IGNORE);
+       int pos;
+
+       pos = fl_get_choice(fd_form_character->choice_family);
+       switch(pos) {
+       case 1: font.setFamily(LyXFont::IGNORE_FAMILY); break;
+       case 2: font.setFamily(LyXFont::ROMAN_FAMILY); break;
+       case 3: font.setFamily(LyXFont::SANS_FAMILY); break;
+       case 4: font.setFamily(LyXFont::TYPEWRITER_FAMILY); break;
+       case 5: font.setFamily(LyXFont::INHERIT_FAMILY); break;
+       }
+
+       pos = fl_get_choice(fd_form_character->choice_series);
+       switch(pos) {
+       case 1: font.setSeries(LyXFont::IGNORE_SERIES); break;
+       case 2: font.setSeries(LyXFont::MEDIUM_SERIES); break;
+       case 3: font.setSeries(LyXFont::BOLD_SERIES); break;
+       case 4: font.setSeries(LyXFont::INHERIT_SERIES); break;
+       }
+
+       pos = fl_get_choice(fd_form_character->choice_shape);
+       switch(pos) {
+       case 1: font.setShape(LyXFont::IGNORE_SHAPE); break;
+       case 2: font.setShape(LyXFont::UP_SHAPE); break;
+       case 3: font.setShape(LyXFont::ITALIC_SHAPE); break;
+       case 4: font.setShape(LyXFont::SLANTED_SHAPE); break;
+       case 5: font.setShape(LyXFont::SMALLCAPS_SHAPE); break;
+       case 6: font.setShape(LyXFont::INHERIT_SHAPE); break;
+       }
+
+       pos = fl_get_choice(fd_form_character->choice_size);
+       switch(pos) {
+       case 1: font.setSize(LyXFont::IGNORE_SIZE); break;
+       case 2: font.setSize(LyXFont::SIZE_TINY); break;
+       case 3: font.setSize(LyXFont::SIZE_SCRIPT); break;
+       case 4: font.setSize(LyXFont::SIZE_FOOTNOTE); break;
+       case 5: font.setSize(LyXFont::SIZE_SMALL); break;
+       case 6: font.setSize(LyXFont::SIZE_NORMAL); break;
+       case 7: font.setSize(LyXFont::SIZE_LARGE); break;
+       case 8: font.setSize(LyXFont::SIZE_LARGER); break;
+       case 9: font.setSize(LyXFont::SIZE_LARGEST); break;
+       case 10: font.setSize(LyXFont::SIZE_HUGE); break;
+       case 11: font.setSize(LyXFont::SIZE_HUGER); break;
+       case 12: font.setSize(LyXFont::INCREASE_SIZE); break;
+       case 13: font.setSize(LyXFont::DECREASE_SIZE); break;
+       case 14: font.setSize(LyXFont::INHERIT_SIZE); break;
+       }
+
+       pos = fl_get_choice(fd_form_character->choice_bar);
+       switch(pos) {
+       case 1: font.setEmph(LyXFont::IGNORE);
+               font.setUnderbar(LyXFont::IGNORE);
+               font.setNoun(LyXFont::IGNORE);
+               font.setLatex(LyXFont::IGNORE);
+               break;
+       case 2: font.setEmph(LyXFont::TOGGLE); break;
+       case 3: font.setUnderbar(LyXFont::TOGGLE); break;
+       case 4: font.setNoun(LyXFont::TOGGLE); break;
+       case 5: font.setLatex(LyXFont::TOGGLE); break;
+       case 6: font.setEmph(LyXFont::INHERIT);
+               font.setUnderbar(LyXFont::INHERIT);
+               font.setNoun(LyXFont::INHERIT);
+               font.setLatex(LyXFont::INHERIT);
+               break;
+       }
+
+       pos = fl_get_choice(fd_form_character->choice_color);
+       switch(pos) {
+       case 1: font.setColor(LyXFont::IGNORE_COLOR); break;
+       case 2: font.setColor(LyXFont::NONE); break;
+       case 3: font.setColor(LyXFont::BLACK); break;
+       case 4: font.setColor(LyXFont::WHITE); break;
+       case 5: font.setColor(LyXFont::RED); break;
+       case 6: font.setColor(LyXFont::GREEN); break;
+       case 7: font.setColor(LyXFont::BLUE); break;
+       case 8: font.setColor(LyXFont::CYAN); break;
+       case 9: font.setColor(LyXFont::MAGENTA); break;
+       case 10: font.setColor(LyXFont::YELLOW); break;
+       case 11: font.setColor(LyXFont::INHERIT_COLOR); break;
+       }
+
+       return font; 
+}
+
+
+void FreeCB()
+{
+       ToggleAndShow(UserFreeFont());
+}
+
+
+/* callbacks for form form_title */
+void TimerCB(FL_OBJECT *, long)
+{
+       // only if the form still exists
+       if (fd_form_title->form_title != NULL) {
+               if (fd_form_title->form_title->visible) {
+                       fl_hide_form(fd_form_title->form_title);
+               }
+               fl_free_form(fd_form_title->form_title);
+               fd_form_title->form_title = NULL;
+       }
+}
+
+
+/* callbacks for form form_paragraph */
+
+void ParagraphVSpaceCB(FL_OBJECT* obj, long )
+{
+       // "Synchronize" the choices and input fields, making it
+       // impossible to commit senseless data.
+
+       const FD_form_paragraph* fp = fd_form_paragraph;
+
+       if (obj == fp->choice_space_above) {
+               if (fl_get_choice (fp->choice_space_above) != 7) {
+                       fl_set_input (fp->input_space_above, "");
+                       ActivateParagraphButtons();
+               }
+       } else if (obj == fp->choice_space_below) {
+               if (fl_get_choice (fp->choice_space_below) != 7) {
+                       fl_set_input (fp->input_space_below, "");
+                       ActivateParagraphButtons();
+               }
+       } else if (obj == fp->input_space_above) {
+               LString input = fl_get_input (fp->input_space_above);
+
+               if (input.empty()) {
+                       fl_set_choice (fp->choice_space_above, 1);
+                       ActivateParagraphButtons();
+               }
+               else if (isValidGlueLength (input)) {
+                       fl_set_choice (fp->choice_space_above, 7);
+                       ActivateParagraphButtons();
+               }
+               else {
+                       fl_set_choice (fp->choice_space_above, 7);
+                       DeactivateParagraphButtons();
+               }
+       } else if (obj == fp->input_space_below) {
+               LString input = fl_get_input (fp->input_space_below);
+
+               if (input.empty()) {
+                       fl_set_choice (fp->choice_space_below, 1);
+                       ActivateParagraphButtons();
+               }
+               else if (isValidGlueLength (input)) {
+                       fl_set_choice (fp->choice_space_below, 7);
+                       ActivateParagraphButtons();
+               }
+               else {
+                       fl_set_choice (fp->choice_space_below, 7);
+                       DeactivateParagraphButtons();
+               }
+       }
+}
+
+
+void ParagraphApplyCB(FL_OBJECT *, long)
+{
+       if (!current_view->available())
+               return;
+       
+       bool line_top, line_bottom;
+       bool pagebreak_top, pagebreak_bottom;
+       VSpace space_top, space_bottom;
+       char align;
+       LString labelwidthstring;
+       bool noindent;
+
+       // If a vspace kind is "Length" but there's no text in
+       // the input field, reset the kind to "None". 
+       if (fl_get_choice (fd_form_paragraph->choice_space_above) == 7
+           && !*(fl_get_input (fd_form_paragraph->input_space_above))) {
+               fl_set_choice (fd_form_paragraph->choice_space_above, 1);
+       }
+       if (fl_get_choice (fd_form_paragraph->choice_space_below) == 7
+           && !*(fl_get_input (fd_form_paragraph->input_space_below))) {
+               fl_set_choice (fd_form_paragraph->choice_space_below, 1);
+       }
+   
+       line_top = fl_get_button(fd_form_paragraph->check_lines_top);
+       line_bottom = fl_get_button(fd_form_paragraph->check_lines_bottom);
+       pagebreak_top = fl_get_button(fd_form_paragraph->check_pagebreaks_top);
+       pagebreak_bottom = fl_get_button(fd_form_paragraph->check_pagebreaks_bottom);
+       switch (fl_get_choice (fd_form_paragraph->choice_space_above)) {
+       case 1: space_top = VSpace(VSpace::NONE); break;
+       case 2: space_top = VSpace(VSpace::DEFSKIP); break;
+       case 3: space_top = VSpace(VSpace::SMALLSKIP); break;
+       case 4: space_top = VSpace(VSpace::MEDSKIP); break;
+       case 5: space_top = VSpace(VSpace::BIGSKIP); break;
+       case 6: space_top = VSpace(VSpace::VFILL); break;
+       case 7: space_top = VSpace(LyXGlueLength (fl_get_input (fd_form_paragraph->input_space_above))); break;
+       }
+       if (fl_get_button (fd_form_paragraph->check_space_above))
+         space_top.setKeep (true);
+       switch (fl_get_choice (fd_form_paragraph->choice_space_below)) {
+       case 1: space_bottom = VSpace(VSpace::NONE); break;
+       case 2: space_bottom = VSpace(VSpace::DEFSKIP); break;
+       case 3: space_bottom = VSpace(VSpace::SMALLSKIP); break;
+       case 4: space_bottom = VSpace(VSpace::MEDSKIP); break;
+       case 5: space_bottom = VSpace(VSpace::BIGSKIP); break;
+       case 6: space_bottom = VSpace(VSpace::VFILL); break;
+       case 7: space_bottom = VSpace(LyXGlueLength (fl_get_input (fd_form_paragraph->input_space_below))); break;
+       }
+       if (fl_get_button (fd_form_paragraph->check_space_below))
+         space_bottom.setKeep (true);
+
+       if (fl_get_button(fd_form_paragraph->radio_align_left))
+               align = LYX_ALIGN_LEFT;
+       else if (fl_get_button(fd_form_paragraph->radio_align_right))
+               align = LYX_ALIGN_RIGHT;
+       else if (fl_get_button(fd_form_paragraph->radio_align_center))
+               align = LYX_ALIGN_CENTER;
+       else 
+               align = LYX_ALIGN_BLOCK;
+   
+       labelwidthstring = fl_get_input(fd_form_paragraph->input_labelwidth);
+       noindent = fl_get_button(fd_form_paragraph->check_noindent);
+   
+       current_view->currentBuffer()->text->SetParagraph(line_top,
+                                                         line_bottom,
+                                                         pagebreak_top,
+                                                         pagebreak_bottom,
+                                                         space_top,
+                                                         space_bottom,
+                                                         align, 
+                                                         labelwidthstring,
+                                                         noindent);
+       current_view->currentBuffer()->update(1);
+       minibuffer->Set(_("Paragraph layout set"));
+}
+
+
+void ParagraphCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_paragraph->form_paragraph);
+}
+
+
+void ParagraphOKCB(FL_OBJECT *ob, long data)
+{
+       ParagraphApplyCB(ob, data);
+       ParagraphCancelCB(ob, data);
+}
+
+
+/* callbacks for form form_character */
+
+void CharacterApplyCB(FL_OBJECT *, long)
+{
+       // we set toggleall locally here, since it should be true for
+       // all other uses of ToggleAndShow() (JMarc)
+       toggleall = fl_get_button(fd_form_character->check_toggle_all);
+       ToggleAndShow( UserFreeFont());
+       toggleall = true;
+}
+
+
+void CharacterCloseCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_character->form_character);
+}
+
+
+void CharacterOKCB(FL_OBJECT *ob, long data)
+{
+       CharacterApplyCB(ob,data);
+       CharacterCloseCB(ob,data);
+}
+
+
+/* callbacks for form form_document */
+
+void UpdateDocumentButtons(BufferParams const &params) 
+{
+       fl_set_choice(fd_form_document->choice_pagestyle, 1);
+       
+       if (params.sides == 2)
+               fl_set_button(fd_form_document->radio_sides_two, 1);
+       else
+               fl_set_button(fd_form_document->radio_sides_one, 1);
+       
+       if (params.columns == 2)
+               fl_set_button(fd_form_document->radio_columns_two, 1);
+       else
+               fl_set_button(fd_form_document->radio_columns_one, 1);
+       
+       fl_set_input(fd_form_document->input_extra, params.options.c_str());
+       fl_set_counter_value(fd_form_document->slider_secnumdepth, 
+                            params.secnumdepth);
+       fl_set_counter_value(fd_form_document->slider_tocdepth, 
+                            params.tocdepth);
+       
+}
+
+void ChoiceClassCB(FL_OBJECT *ob, long)
+{
+       ProhibitInput();
+       if (lyxstyle.Load(fl_get_choice(ob)-1)) {
+               if (AskQuestion(_("Should I set some parameters to"),
+                               fl_get_choice_text(ob),
+                               _("the defaults of this document class?"))) {
+                       BufferParams params = BufferParams();
+                       params.textclass = fl_get_choice(ob)-1;
+                       params.useClassDefaults();
+                       UpdateLayoutDocument(&params);
+                       UpdateDocumentButtons(params);
+               }
+       } else {
+               // unable to load new style
+               WriteAlert(_("Conversion Errors!"),
+                          _("Unable to switch to new document class."),
+                          _("Reverting to original document class."));
+               fl_set_choice(fd_form_document->choice_class, 
+                             GetCurrentTextClass() + 1);
+       }
+       AllowInput();
+}
+
+
+void DocumentDefskipCB(FL_OBJECT *obj, long)
+{
+       // "Synchronize" the choice and the input field, so that it
+       // is impossible to commit senseless data.
+       const FD_form_document* fd = fd_form_document;
+
+       if (obj == fd->choice_default_skip) {
+               if (fl_get_choice (fd->choice_default_skip) != 4) {
+                       fl_set_input (fd->input_default_skip, "");
+                       ActivateDocumentButtons();
+               }
+       } else if (obj == fd->input_default_skip) {
+
+               const char* input = fl_get_input (fd->input_default_skip);
+
+               if (!*input) {
+                       fl_set_choice (fd->choice_default_skip, 2);
+                       ActivateDocumentButtons();
+               } else if (isValidGlueLength (input)) {
+                       fl_set_choice (fd->choice_default_skip, 4);
+                       ActivateDocumentButtons();
+               } else {
+                       fl_set_choice (fd->choice_default_skip, 4);
+                       DeactivateDocumentButtons();
+               }
+       }
+}
+
+
+void DocumentSpacingCB(FL_OBJECT *obj, long)
+{
+       // "Synchronize" the choice and the input field, so that it
+       // is impossible to commit senseless data.
+       const FD_form_document* fd = fd_form_document;
+
+       if (obj == fd->choice_spacing
+           && fl_get_choice (fd->choice_spacing) != 4) {
+               fl_set_input(fd->input_spacing, "");
+       } else if (obj == fd->input_spacing) {
+
+               const char* input = fl_get_input (fd->input_spacing);
+
+               if (!*input) {
+                       fl_set_choice (fd->choice_spacing, 1);
+               } else {
+                       fl_set_choice (fd->choice_spacing, 4);
+               }
+       }
+}
+
+
+void DocumentApplyCB(FL_OBJECT *, long)
+{
+       bool redo = false;
+       BufferParams *params = &(current_view->currentBuffer()->params);
+       current_view->currentBuffer()->params.language =
+               combo_language->getline();
+
+       // If default skip is a "Length" but there's no text in the
+       // input field, reset the kind to "Medskip", which is the default.
+       if (fl_get_choice (fd_form_document->choice_default_skip) == 4
+           && !*(fl_get_input (fd_form_document->input_default_skip))) {
+               fl_set_choice (fd_form_document->choice_default_skip, 2);
+       }
+
+       /* this shouldn't be done automatically IMO. For example I write german
+        * documents with an american keyboard very often. Matthias */
+   
+       /* ChangeKeymap(buffer->parameters.language, TRUE, false,
+          fl_get_choice(fd_form_document->choice_language)); */
+       params->fonts =
+               fl_get_choice_text(fd_form_document->choice_fonts);
+       params->inputenc =
+               fl_get_choice_text(fd_form_document->choice_inputenc);
+       params->fontsize =
+               fl_get_choice_text(fd_form_document->choice_fontsize);
+       params->pagestyle =
+               fl_get_choice_text(fd_form_document->choice_pagestyle);
+       params->graphicsDriver =
+               fl_get_choice_text(fd_form_document->choice_postscript_driver);
+       params->use_amsmath =
+               fl_get_button(fd_form_document->check_use_amsmath);
+   
+       if (!current_view->available())
+               return;
+
+       char new_class = fl_get_choice(fd_form_document->choice_class) - 1;
+       if (params->textclass != new_class) {
+               // try to load new_class
+               if (lyxstyle.Load(new_class)) {
+                       // successfully loaded
+                       redo = true;
+                       minibuffer->Set(_("Converting document to new document class..."));
+                       int ret = current_view->currentBuffer()->
+                               text->
+                               SwitchLayoutsBetweenClasses(current_view->currentBuffer()->
+                                                           params.textclass,
+                                                           new_class,
+                                                           current_view->currentBuffer()->
+                                                           paragraph);
+
+                       if (ret){
+                               LString s;
+                               if (ret==1)
+                                       s= _("One paragraph couldn't be converted");
+                               else {
+                                       s += ret;
+                                       s += _(" paragraphs couldn't be converted");
+                               }
+                               WriteAlert(_("Conversion Errors!"),s,
+                                          _("into chosen document class"));
+                       }
+
+                       params->textclass = new_class;
+               } else {
+                       // problem changing class -- warn user and retain old style
+                       WriteAlert(_("Conversion Errors!"),
+                                  _("Unable to switch to new document class."),
+                                  _("Reverting to original document class."));
+                       fl_set_choice(fd_form_document->choice_class, params->textclass + 1);
+               }
+       }
+
+       char tmpsep = params->paragraph_separation;
+       if (fl_get_button(fd_form_document->radio_indent))
+               params->paragraph_separation = LYX_PARSEP_INDENT;
+       else
+               params->paragraph_separation = LYX_PARSEP_SKIP;
+       if (tmpsep != params->paragraph_separation)
+               redo = true;
+   
+       VSpace tmpdefskip = params->getDefSkip();
+       switch (fl_get_choice (fd_form_document->choice_default_skip)) {
+       case 1: params->setDefSkip(VSpace(VSpace::SMALLSKIP)); break;
+       case 2: params->setDefSkip(VSpace(VSpace::MEDSKIP)); break;
+       case 3: params->setDefSkip(VSpace(VSpace::BIGSKIP)); break;
+       case 4: params->setDefSkip( 
+               VSpace (LyXGlueLength (fl_get_input 
+                                      (fd_form_document->input_default_skip))));
+       break;
+       // DocumentDefskipCB assures that this never happens
+       default: params->setDefSkip(VSpace(VSpace::MEDSKIP)); break;
+       }
+       if (!(tmpdefskip == params->getDefSkip()))
+               redo = true;
+
+       if (fl_get_button(fd_form_document->radio_columns_two))
+               params->columns = 2;
+       else
+               params->columns = 1;
+       if (fl_get_button(fd_form_document->radio_sides_two))
+               params->sides = 2;
+       else
+               params->sides = 1;
+
+       Spacing tmpSpacing = params->spacing;
+       switch(fl_get_choice(fd_form_document->choice_spacing)) {
+       case 1:
+               lyxerr.debug("Spacing: SINGLE");
+               params->spacing.set(Spacing::Single);
+               break;
+       case 2:
+               lyxerr.debug("Spacing: ONEHALF");
+               params->spacing.set(Spacing::Onehalf);
+               break;
+       case 3:
+               lyxerr.debug("Spacing: DOUBLE");
+               params->spacing.set(Spacing::Double);
+               break;
+       case 4:
+               lyxerr.debug("Spacing: OTHER");
+               params->spacing.set(Spacing::Other, 
+                                   fl_get_input(fd_form_document->input_spacing));
+               break;
+       }
+       if (tmpSpacing != params->spacing)
+               redo = true;
+       
+       signed char tmpchar = (signed char) 
+               fl_get_counter_value(fd_form_document->slider_secnumdepth);;
+       if (params->secnumdepth != tmpchar)
+               redo = true;
+       params->secnumdepth = tmpchar;
+   
+       params->tocdepth = (signed char) 
+               fl_get_counter_value(fd_form_document->slider_tocdepth);;
+
+       params->float_placement =
+               fl_get_input(fd_form_document->input_float_placement);
+
+       // More checking should be done to ensure the string doesn't have
+       // spaces or illegal placement characters in it. (thornley)
+
+       if (redo)
+               current_view->redoCurrentBuffer();
+   
+       minibuffer->Set(_("Document layout set"));
+       current_view->currentBuffer()->markDirty();
+
+        params->options =
+               fl_get_input(fd_form_document->input_extra);
+   
+}
+
+
+void DocumentCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_document->form_document);
+}
+
+
+void DocumentOKCB(FL_OBJECT *ob, long data)
+{
+       DocumentCancelCB(ob,data);
+       DocumentApplyCB(ob,data);
+}
+
+
+void DocumentBulletsCB(FL_OBJECT *, long)
+{
+       bulletForm();
+       // bullet callbacks etc. in bullet_panel.C -- ARRae
+}
+
+
+void GotoNote()
+{
+       if (!current_view->getScreen())
+               return;
+   
+       current_view->getScreen()->HideCursor();
+       BeforeChange();
+       current_view->currentBuffer()->update(-2);
+       LyXCursor tmp;
+   
+       if (!current_view->currentBuffer()->text->GotoNextNote()) {
+               if (current_view->currentBuffer()->text->cursor.pos 
+                   || current_view->currentBuffer()->text->cursor.par !=
+                   current_view->currentBuffer()->text->FirstParagraph())
+                       {
+                               tmp = current_view->currentBuffer()->text->cursor;
+                               current_view->currentBuffer()->text->cursor.par =
+                                       current_view->currentBuffer()->text->FirstParagraph();
+                               current_view->currentBuffer()->text->cursor.pos = 0;
+                               if (!current_view->currentBuffer()->text->GotoNextNote()) {
+                                       current_view->currentBuffer()->text->cursor = tmp;
+                                       minibuffer->Set(_("No more notes"));
+                                       LyXBell();
+                               }
+                       } else {
+                               minibuffer->Set(_("No more notes"));
+                               LyXBell();
+                       }
+       }
+       current_view->currentBuffer()->update(0);
+       current_view->currentBuffer()->text->sel_cursor =
+               current_view->currentBuffer()->text->cursor;
+}
+
+
+void InsertCorrectQuote()
+{
+       Buffer *cbuffer = current_view->currentBuffer();
+       char c;
+
+       if  (cbuffer->text->cursor.pos )
+               c = cbuffer->text->cursor.par->GetChar(cbuffer->text->cursor.pos - 1);
+       else 
+               c = ' ';
+
+       cbuffer->insertInset(new InsetQuotes(c, cbuffer->params));
+}
+
+
+/* callbacks for form form_quotes */
+
+void QuotesApplyCB(FL_OBJECT *, long)
+{
+       if (!current_view->available())
+               return;
+       
+       minibuffer->Set(_("Quotes type set"));
+       //current_view->currentBuffer()->params.quotes_language =
+       //      fl_get_choice(fd_form_quotes->choice_quotes_language) - 1;
+       InsetQuotes::quote_language lga = InsetQuotes::EnglishQ;
+       switch(fl_get_choice(fd_form_quotes->choice_quotes_language) - 1) {
+       case 0:
+               lga = InsetQuotes::EnglishQ;
+               break;
+       case 1:
+               lga = InsetQuotes::SwedishQ;
+               break;
+       case 2:
+               lga = InsetQuotes::GermanQ;
+               break;
+       case 3:
+               lga = InsetQuotes::PolishQ;
+               break;
+       case 4:
+               lga = InsetQuotes::FrenchQ;
+               break;
+       case 5:
+               lga = InsetQuotes::DanishQ;
+               break;
+       }
+       current_view->currentBuffer()->params.quotes_language = lga;
+       if (fl_get_button(fd_form_quotes->radio_single))   
+               current_view->currentBuffer()->
+                       params.quotes_times = InsetQuotes::SingleQ;
+       else
+               current_view->currentBuffer()->
+                       params.quotes_times = InsetQuotes::DoubleQ;
+}
+
+
+void QuotesCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_quotes->form_quotes);
+}
+
+
+void QuotesOKCB(FL_OBJECT *ob, long data)
+{
+       QuotesApplyCB(ob, data);
+       QuotesCancelCB(ob, data);
+}
+
+
+
+/* callbacks for form form_preamble */
+
+void PreambleCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_preamble->form_preamble);
+}
+
+
+void PreambleApplyCB(FL_OBJECT *, long)
+{
+       if (!current_view->available())
+               return;
+       
+       current_view->currentBuffer()->params.preamble =
+               fl_get_input(fd_form_preamble->input_preamble);
+       current_view->currentBuffer()->markDirty();
+       minibuffer->Set(_("LaTeX preamble set"));
+}
+
+   
+void PreambleOKCB(FL_OBJECT *ob, long data)
+{
+       PreambleApplyCB(ob, data);
+       PreambleCancelCB(ob, data);
+}
+
+
+/* callbacks for form form_table */
+
+void TableApplyCB(FL_OBJECT *, long)
+{
+       int xsize,ysize;
+       if (!current_view->getScreen())
+               return;
+   
+       // check for tables in tables
+       if (current_view->currentBuffer()->text->cursor.par->table){
+               WriteAlert(_("Impossible Operation!"),
+                          _("Cannot insert table in table."),
+                          _("Sorry."));
+               return;
+       }
+       minibuffer->Set(_("Inserting table..."));
+
+       ysize = (int)(fl_get_slider_value(fd_form_table->slider_columns) + 0.5);
+       xsize = (int)(fl_get_slider_value(fd_form_table->slider_rows) + 0.5);
+   
+   
+       current_view->getScreen()->HideCursor();
+       BeforeChange();
+       current_view->currentBuffer()->update(-2);
+   
+       current_view->currentBuffer()->text->SetCursorParUndo(); 
+       current_view->currentBuffer()->text->FreezeUndo();
+
+       current_view->currentBuffer()->text->BreakParagraph();
+       current_view->currentBuffer()->update(-1);
+   
+       if (current_view->currentBuffer()->text->cursor.par->Last()) {
+               current_view->currentBuffer()->text->CursorLeft();
+      
+               current_view->currentBuffer()->text->BreakParagraph();
+               current_view->currentBuffer()->update(-1);
+       }
+
+       current_view->currentBuffer()->text->current_font.setLatex(LyXFont::OFF);
+       //if (!fl_get_button(fd_form_table->check_latex)){
+       // insert the new wysiwy table
+       current_view->currentBuffer()->text->SetLayout(0); // standard layout
+       if (current_view->currentBuffer()->text->cursor.par->footnoteflag ==
+           LyXParagraph::NO_FOOTNOTE) {
+               current_view->currentBuffer()->
+                       text->SetParagraph(0, 0,
+                                          0, 0,
+                                          VSpace (0.3 * current_view->currentBuffer()->
+                                                  params.spacing.getValue(),
+                                                  LyXLength::CM),
+                                          VSpace (0.3 * current_view->currentBuffer()->
+                                                  params.spacing.getValue(),
+                                                  LyXLength::CM),
+                                          LYX_ALIGN_CENTER,
+                                          LString(),
+                                          0);
+       }
+       else
+               current_view->currentBuffer()->text->SetParagraph(0, 0,
+                                                                 0, 0,
+                                                                 VSpace(VSpace::NONE),
+                                                                 VSpace(VSpace::NONE),
+                                          LYX_ALIGN_CENTER, 
+                                          LString(),
+                                          0);
+
+       current_view->currentBuffer()->text->cursor.par->table = new LyXTable(xsize, ysize);
+       int i;
+       for (i=0; i<xsize * ysize - 1; i++)
+               current_view->currentBuffer()->text->cursor.par->InsertChar(0,LYX_META_NEWLINE);
+       current_view->currentBuffer()->text->RedoParagraph();
+   
+       current_view->currentBuffer()->text->UnFreezeUndo();
+     
+       current_view->currentBuffer()->update(1);
+       minibuffer->Set(_("Table inserted"));
+}
+
+
+void TableCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_table->form_table);
+}
+
+
+void TableOKCB(FL_OBJECT *ob, long data)
+{
+       TableApplyCB(ob,data);
+       TableCancelCB(ob,data);
+}
+
+
+/* callbacks for form form_print */
+
+void PrintCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_print->form_print);
+}
+
+static bool LStringOnlyContains (LString const & LStr, const char * cset)
+{
+       const char * cstr = LStr.c_str() ;
+
+       return strspn(cstr,cset) == strlen(cstr) ;
+}
+
+void PrintApplyCB(FL_OBJECT *, long)
+{
+       if (!current_view->available())
+               return;
+        Buffer *buffer = current_view->currentBuffer();
+        LString path = OnlyPath(buffer->getFileName());
+
+       LString pageflag;
+       if (fl_get_button(fd_form_print->radio_even_pages))
+               pageflag = lyxrc->print_evenpage_flag + ' ';
+       else if (fl_get_button(fd_form_print->radio_odd_pages))
+               pageflag = lyxrc->print_oddpage_flag + ' ';
+
+// Changes by Stephan Witt (stephan.witt@beusen.de), 19-Jan-99
+// User may give a page (range) list
+// User may print multiple (unsorted) copies
+       LString pages = fl_get_input(fd_form_print->input_pages);
+       pages.subst(';',',');
+       pages.subst('+',',');
+       pages.strip () ;
+       pages.frontStrip () ;
+       while (!pages.empty()) { // a page range was given
+               LString piece ;
+               //int dashpos ; // unused
+               pages = pages.split (piece, ',') ;
+               piece.strip () ;
+               piece.frontStrip () ;
+               if ( !LStringOnlyContains (piece, "0123456789-") ) {
+                       WriteAlert(_("ERROR!  Unable to print!"),
+                               _("Check 'range of pages'!"));
+                       return;
+               }
+               if ( -1 == piece.charPos ('-') ) { // not found
+                       pageflag += lyxrc->print_pagerange_flag + piece + '-' + piece + ' ' ;
+               } else if ( piece.suffixIs("-") ) { // missing last page
+                       pageflag += lyxrc->print_pagerange_flag + piece + 1000 + ' ' ;
+               } else if ( piece.prefixIs("-") ) { // missing first page
+                       pageflag += lyxrc->print_pagerange_flag + 1 + piece + ' ' ;
+               } else {
+                       pageflag += lyxrc->print_pagerange_flag + piece + ' ' ;
+               }
+       }
+   
+       LString copies = fl_get_input(fd_form_print->input_copies);
+       copies.strip () ;
+       copies.frontStrip () ;
+       if (!copies.empty()) { // a number of copies was given
+               if ( !LStringOnlyContains (copies, "0123456789") ) {
+                       WriteAlert(_("ERROR!  Unable to print!"),
+                               _("Check 'number of copies'!"));
+                       return;
+               }
+               if (fl_get_button(fd_form_print->do_unsorted))
+                       pageflag += lyxrc->print_copies_flag;
+               else
+                       pageflag += lyxrc->print_collcopies_flag;
+               pageflag += " " + copies + ' ' ;
+       }
+
+       LString reverseflag;
+       if (fl_get_button(fd_form_print->radio_order_reverse))
+               reverseflag = lyxrc->print_reverse_flag + ' ';
+   
+       LString orientationflag;
+       if (buffer->params.orientation == ORIENTATION_LANDSCAPE)
+               orientationflag = lyxrc->print_landscape_flag + ' ';
+   
+       LString ps_file = SpaceLess(fl_get_input(fd_form_print->input_file));
+       LString printer = fl_get_input(fd_form_print->input_printer);
+       printer.strip();
+
+       LString printerflag;
+       if (lyxrc->print_adapt_output // printer name should be passed to dvips
+           && ! printer.empty()) // a printer name has been given
+               printerflag = lyxrc->print_to_printer + printer + ' ';
+     
+       LString extraflags;
+       if (!lyxrc->print_extra_options.empty())
+               extraflags = lyxrc->print_extra_options + ' ';
+
+       LString command = lyxrc->print_command + ' ' 
+               + printerflag + pageflag + reverseflag 
+               + orientationflag + extraflags;
+       char real_papersize = buffer->params.papersize;
+       if (real_papersize == PAPER_DEFAULT)
+               real_papersize = lyxrc->default_papersize;
+        LString
+            paper;
+
+       switch (real_papersize) {
+       case PAPER_USLETTER:
+               paper = "letter";
+               break;
+       case PAPER_A3PAPER:
+               paper = "a3";
+               break;
+       case PAPER_A4PAPER:
+               paper = "a4";
+               break;
+       case PAPER_A5PAPER:
+               paper = "a5";
+               break;
+       case PAPER_B5PAPER:
+               paper = "b5";
+               break;
+       case PAPER_EXECUTIVEPAPER:
+               paper = "foolscap";
+               break;
+       case PAPER_LEGALPAPER:
+               paper = "legal";
+               break;
+       default: /* If nothing else fits, keep an empty value... */
+               break;
+       }
+
+       if (buffer->params.use_geometry
+           && buffer->params.papersize2 == VM_PAPER_CUSTOM
+           && !lyxrc->print_paper_dimension_flag.empty()
+           && !buffer->params.paperwidth.empty()
+           && !buffer->params.paperheight.empty()) {
+               // using a custom papersize
+               command += ' ';
+               command += lyxrc->print_paper_dimension_flag + ' ';
+               command += buffer->params.paperwidth + ',';
+               command += buffer->params.paperheight + ' ';
+       } else if (!lyxrc->print_paper_flag.empty()
+                  && !paper.empty()
+                  && (real_papersize != PAPER_USLETTER ||
+                      buffer->params.orientation == ORIENTATION_PORTRAIT)) {
+               command += " " + lyxrc->print_paper_flag + " " + paper + " ";
+       }
+       if (fl_get_button(fd_form_print->radio_file))
+               command += lyxrc->print_to_file + '\"'
+                       + MakeAbsPath(ps_file, path)
+                       + '\"';
+       else if (!lyxrc->print_spool_command.empty())
+               command += lyxrc->print_to_file 
+                       + '\"' + ps_file + '\"';
+       
+       // push directorypath, if necessary 
+        if (lyxrc->use_tempdir || (IsDirWriteable(path) < 1)){
+               path = buffer->tmppath;
+        }
+        PathPush(path);
+
+       bool result;
+       if (!lyxrc->print_spool_command.empty() && 
+           !fl_get_button(fd_form_print->radio_file)) {
+               LString command2 = lyxrc->print_spool_command + ' ';
+               if (!printer.empty())
+                       command2 += lyxrc->print_spool_printerprefix 
+                                   + printer;
+               // First run dvips and, if succesful, then spool command
+               if ((result = RunScript(buffer, true, command))) {
+                       result = RunScript(buffer, false, command2, ps_file);
+               }
+        } else
+               result = RunScript(buffer, false, command);
+        PathPop();
+
+       if (!result)
+               WriteAlert(_("Error:"),
+                          _("Unable to print"),
+                          _("Check that your parameters are correct"));
+}
+
+
+void PrintOKCB(FL_OBJECT *ob, long data)
+{
+       PrintCancelCB(ob, data);  
+       PrintApplyCB(ob,data);
+}
+
+
+/* callbacks for form form_figure */
+
+void FigureApplyCB(FL_OBJECT *, long)
+{
+       if (!current_view->available())
+               return;
+
+       Buffer * buffer = current_view->currentBuffer();
+       if(buffer->isReadonly()) // paranoia
+               return;
+       
+       minibuffer->Set(_("Inserting figure..."));
+       if (fl_get_button(fd_form_figure->radio_inline)
+           || buffer->text->cursor.par->table) {
+               InsetFig * new_inset = new InsetFig(100, 20, buffer);
+               buffer->insertInset(new_inset);
+               minibuffer->Set(_("Figure inserted"));
+               new_inset->Edit(0, 0);
+               return;
+       }
+       
+       current_view->getScreen()->HideCursor();
+       buffer->update(-2);
+       BeforeChange();
+      
+       buffer->text->SetCursorParUndo(); 
+       buffer->text->FreezeUndo();
+
+       buffer->text->BreakParagraph();
+       buffer->update(-1);
+      
+       if (buffer->text->cursor.par->Last()) {
+               buffer->text->CursorLeft();
+        
+               buffer->text->BreakParagraph();
+               buffer->update(-1);
+       }
+
+       // The standard layout should always be numer 0;
+       buffer->text->SetLayout(0);
+       
+       if (buffer->text->cursor.par->footnoteflag ==
+           LyXParagraph::NO_FOOTNOTE) {
+               buffer->text->SetParagraph(0, 0,
+                                          0, 0,
+                                          VSpace (0.3 * buffer->params.spacing.getValue(),
+                                                  LyXLength::CM),
+                                          VSpace (0.3 *
+                                                  buffer->params.spacing.getValue(),
+                                                  LyXLength::CM),
+                                          LYX_ALIGN_CENTER, LString(), 0);
+       } else
+               buffer->text->SetParagraph(0, 0,
+                                          0, 0,
+                                          VSpace(VSpace::NONE),
+                                          VSpace(VSpace::NONE),
+                                          LYX_ALIGN_CENTER, 
+                                          LString(),
+                                          0);
+       
+       buffer->update(-1);
+      
+       Inset *new_inset = NULL;
+       
+       new_inset = new InsetFig(100, 100, buffer);
+       buffer->insertInset(new_inset);
+       new_inset->Edit(0, 0);
+       buffer->update(0);
+       minibuffer->Set(_("Figure inserted"));
+       buffer->text->UnFreezeUndo();
+}
+
+   
+void FigureCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_figure->form_figure);
+}
+
+
+void FigureOKCB(FL_OBJECT *ob, long data)
+{
+       FigureApplyCB(ob,data);
+       FigureCancelCB(ob,data);
+}
+
+void ScreenApplyCB(FL_OBJECT *, long)
+{
+       lyxrc->roman_font_name = fl_get_input(fd_form_screen->input_roman);
+       lyxrc->sans_font_name = fl_get_input(fd_form_screen->input_sans);
+       lyxrc->typewriter_font_name = fl_get_input(fd_form_screen->input_typewriter);
+       lyxrc->font_norm = fl_get_input(fd_form_screen->input_font_norm);
+       lyxrc->zoom = atoi(fl_get_input(fd_form_screen->intinput_size));
+       fontloader.update();
+   
+       // All buffers will need resize
+       bufferlist.resize();
+
+       minibuffer->Set(_("Screen options set"));
+}
+
+
+void ScreenCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_screen->form_screen);
+}
+
+
+void ScreenOKCB(FL_OBJECT *ob, long data)
+{
+       ScreenCancelCB(ob,data);
+       ScreenApplyCB(ob,data);
+}
+
+
+void LaTeXOptions()
+{
+       if (!current_view->available())
+               return;
+
+       fl_set_button(fd_latex_options->accents,
+                     (int)current_view->currentBuffer()->params.allowAccents);
+       
+       if (fd_latex_options->LaTeXOptions->visible) {
+               fl_raise_form(fd_latex_options->LaTeXOptions);
+       } else {
+               fl_show_form(fd_latex_options->LaTeXOptions,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
+                            _("LaTeX Options"));
+       }
+}
+
+
+// This function runs "configure" and then rereads lyx.defaults to
+// reconfigure the automatic settings.
+void Reconfigure()
+{
+       minibuffer->Set(_("Running configure..."));
+
+       // Run configure in user lyx directory
+       PathPush(user_lyxdir);
+       Systemcalls one(Systemcalls::System, 
+                          AddName(system_lyxdir,"configure"));
+       PathPop();
+       minibuffer->Set(_("Reloading configuration..."));
+       lyxrc->Read(LibFileSearch(LString(), "lyxrc.defaults"));
+       WriteAlert(_("The system has been reconfigured."), 
+                  _("You need to restart LyX to make use of any"),
+                  _("updated document class specifications."));
+}
+
+
+/* these functions are for the spellchecker */ 
+char* NextWord(float &value)
+{
+       if (!current_view->available()){
+               value = 1;
+               return NULL;
+       }
+   
+       char* string =  current_view->currentBuffer()->text->SelectNextWord(value);
+
+       return string;
+}
+
+  
+void SelectLastWord()
+{
+       if (!current_view->available())
+               return;
+   
+       current_view->getScreen()->HideCursor();
+       BeforeChange(); 
+       current_view->currentBuffer()->text->SelectSelectedWord();
+       current_view->getScreen()->ToggleSelection(false);
+       current_view->currentBuffer()->update(0);
+}
+
+
+void EndOfSpellCheck()
+{
+       if (!current_view->available())
+               return;
+   
+       current_view->getScreen()->HideCursor();
+       BeforeChange(); 
+       current_view->currentBuffer()->text->SelectSelectedWord();
+       current_view->currentBuffer()->text->ClearSelection();
+       current_view->currentBuffer()->update(0);
+}
+
+
+void ReplaceWord(LString const & replacestring)
+{
+       if (!current_view->getScreen())
+               return;
+
+       current_view->getScreen()->HideCursor();
+       current_view->currentBuffer()->update(-2);
+   
+       /* clear the selection (if there is any) */ 
+       current_view->getScreen()->ToggleSelection(false);
+       current_view->currentBuffer()->text->
+               ReplaceSelectionWithString(replacestring.c_str());
+   
+       current_view->currentBuffer()->text->SetSelectionOverString(replacestring.c_str());
+
+       // Go back so that replacement string is also spellchecked
+       for (int i=-1; i< replacestring.length(); i++) {
+               current_view->currentBuffer()->text->CursorLeftIntern();
+       }
+       current_view->currentBuffer()->update(1);
+}
+// End of spellchecker stuff
+
+
+
+//
+// Table of Contents
+//
+
+struct TocList {
+       int counter[6];
+       bool appendix;
+       TocList *next;
+};
+
+
+static TocList* toclist = NULL;
+
+
+void TocSelectCB(FL_OBJECT *ob, long)
+{
+       if (!current_view->available())
+               return;
+   
+       TocList* tmptoclist = toclist;
+       int i = fl_get_browser(ob);
+       int a = 0;
+
+       for (a=1; a<i && tmptoclist->next; a++){
+               tmptoclist = tmptoclist->next;
+       }
+
+       if (!tmptoclist)
+               return;
+     
+
+       LyXParagraph *par = current_view->currentBuffer()->paragraph;
+       while (par && (par->GetFirstCounter(0) != tmptoclist->counter[0] ||
+                      par->GetFirstCounter(1) != tmptoclist->counter[1] ||
+                      par->GetFirstCounter(2) != tmptoclist->counter[2] ||
+                      par->GetFirstCounter(3) != tmptoclist->counter[3] ||
+                      par->GetFirstCounter(4) != tmptoclist->counter[4] ||
+                      par->GetFirstCounter(5) != tmptoclist->counter[5] ||
+                      par->appendix != tmptoclist->appendix)) {
+               par = par->LastPhysicalPar()->Next();
+       }
+   
+       if (par) {
+               BeforeChange();
+               current_view->currentBuffer()->text->SetCursor(par, 0);
+               current_view->currentBuffer()->text->sel_cursor =
+                       current_view->currentBuffer()->text->cursor;
+               current_view->currentBuffer()->update(0);
+       }
+       else {
+               WriteAlert(_("Error"), 
+                          _("Couldn't find this label"), 
+                          _("in current document."));
+       }
+         
+}
+
+
+void TocCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_toc->form_toc);
+}
+
+
+void TocUpdateCB(FL_OBJECT *, long)
+{
+       static LyXParagraph* stapar = NULL;
+       TocList *tmptoclist = NULL;
+   
+       /* deleted the toclist */ 
+       if (toclist){
+               while (toclist){
+                       tmptoclist = toclist->next;
+                       delete toclist;
+                       toclist = tmptoclist;
+               }
+       }
+       toclist = NULL;
+       tmptoclist = toclist;
+
+
+       fl_clear_browser(fd_form_toc->browser_toc);
+       if (!current_view->available()) {
+               fl_add_browser_line(fd_form_toc->browser_toc, _("*** No Document ***"));
+               return;
+       }
+       fl_hide_object(fd_form_toc->browser_toc);
+       /* get the table of contents */ 
+       LyXParagraph *par = current_view->currentBuffer()->paragraph;
+       char labeltype;
+       char* line = new char[200];
+       int i = 0;
+       int pos = 0;
+       unsigned char c;
+       int topline = 0;
+   
+       if (stapar == par)
+               topline = fl_get_browser_topline(fd_form_toc->browser_toc);
+       stapar = par;
+   
+       while (par) {
+               labeltype = lyxstyle.Style(current_view->currentBuffer()->params.textclass, 
+                                          par->GetLayout())->labeltype;
+      
+               if (labeltype >= LABEL_COUNTER_CHAPTER
+                   && labeltype <= LABEL_COUNTER_CHAPTER +
+                   current_view->currentBuffer()->params.tocdepth) {
+                       /* insert this into the table of contents */ 
+                       /* first indent a little bit */ 
+                       
+                       for (pos=0; 
+                            pos < (labeltype - 
+                                   lyxstyle.TextClass(current_view->currentBuffer()->
+                                                      params.textclass)->maxcounter) * 4 + 2;
+                            pos++)
+                               line[pos] = ' ';
+                       
+                       /* then the labelstring */ 
+                       i = 0;
+                       if (!par->labelstring.empty()) {
+                               while (pos < 199 && i < par->labelstring.length()) {
+                                       line[pos] = par->labelstring[i];
+                                       i++;
+                                       pos++;
+                               }
+                       }
+        
+                       line[pos] = ' ';
+                       pos++;
+                       
+                       /* now the contents */ 
+                       i = 0;
+                       while (pos < 199 && i < par->last) {
+                               c = par->GetChar(i);
+                               if (isprint((unsigned char) c) || c >= 128) {
+                                       line[pos] = c;
+                                       pos++;
+                               }
+                               i++;
+                       }
+                       line[pos] = '\0';
+                       fl_add_browser_line(fd_form_toc->browser_toc, line);
+                       
+                       /* make a toclist entry */
+                       if (!tmptoclist){
+                               tmptoclist = new TocList;
+                               toclist = tmptoclist;
+                       } else {
+                               tmptoclist->next = new TocList;
+                               tmptoclist = tmptoclist->next;
+                       }
+                       
+                       tmptoclist->next = NULL;
+                       int a = 0;
+                       for (a=0; a<6; a++){
+                               tmptoclist->counter[a] = par->GetFirstCounter(a);
+                       }
+                       tmptoclist->appendix = par->appendix;
+               }
+               par = par->LastPhysicalPar()->Next();
+               
+       }
+       delete[] line;
+       fl_set_browser_topline(fd_form_toc->browser_toc, topline);
+       fl_show_object(fd_form_toc->browser_toc);
+}
+
+
+/* callbacks for form form_ref */
+void RefSelectCB(FL_OBJECT *, long data)
+{
+       if (!current_view->available())
+               return;
+
+       LString s =
+               fl_get_browser_line(fd_form_ref->browser_ref,
+                                   fl_get_browser(fd_form_ref->browser_ref));
+       LString u = fl_get_input(fd_form_ref->ref_name);
+       u.strip();
+       u.frontStrip();
+       if (s.empty())
+               return;
+
+        if (data==2) {
+                current_view->getOwner()->getLyXFunc()->Dispatch(LFUN_REFGOTO, s.c_str());
+               return;
+       }
+           
+       LString t;
+       if (data==0)
+               t += "\\ref";
+       else
+               t += "\\pageref";
+
+       if(current_view->currentBuffer()->isSGML())
+               t += "[" + u + "]" + "{" + s + "}";
+       else
+               t += "{" + s + "}";
+
+       Inset *new_inset =
+               new InsetRef(t, current_view->currentBuffer());
+       current_view->currentBuffer()->insertInset(new_inset);
+}
+
+
+void RefUpdateCB(FL_OBJECT *, long)
+{
+       if (!current_view->available()) {
+               fl_clear_browser(fd_form_ref->browser_ref);
+               return;
+       }
+
+       FL_OBJECT * brow = fd_form_ref->browser_ref;
+
+       // Get the current line, in order to restore it later
+       LString currentstr = fl_get_browser_line(brow,
+                                                fl_get_browser(brow));
+
+       fl_clear_browser(brow);
+
+       LString refs = current_view->currentBuffer()->getReferenceList('\n');
+       int topline = 1;
+
+#if FL_REVISION > 85
+       fl_addto_browser_chars(brow,refs.c_str());
+       int total_lines = fl_get_browser_maxline(brow);
+       for (int i = 1; i <= total_lines ; i++) {
+               if (fl_get_browser_line(brow, i) == currentstr) {
+                       topline = i;
+                       break;
+               }
+       }
+       fl_set_browser_topline(brow, topline);
+#else
+       // Keep the old ugly code for xforms 0.81 compatibility
+       LString curr_ref;
+       int ref_num = 0;
+                                       
+       while(true) {
+               curr_ref = refs.token('\n',ref_num);
+               if (curr_ref.empty())
+                       break;
+               fl_add_browser_line(brow,curr_ref.c_str());
+               ref_num++;
+       }
+#endif
+
+       if (!fl_get_browser_maxline(brow)) {
+               fl_add_browser_line(brow, 
+                                   _("*** No labels found in document ***"));
+               fl_deactivate_object(brow);
+       } else {
+               fl_select_browser_line(brow, topline);
+               fl_activate_object(brow);
+       }
+       if (current_view->currentBuffer()->isReadonly()) {
+               // would be better to de/activate insert buttons
+               // but that's more work... besides this works. ARRae
+               fl_hide_form(fd_form_ref->form_ref);
+       }
+       if (!current_view->currentBuffer()->isSGML()) {
+               fl_deactivate_object(fd_form_ref->ref_name);
+               fl_set_object_lcol(fd_form_ref->ref_name, FL_INACTIVE);
+       }
+       else {
+               fl_activate_object(fd_form_ref->ref_name);
+               fl_set_object_lcol(fd_form_ref->ref_name, FL_BLACK);
+       }
+}
+
+
+void RefHideCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_ref->form_ref);
+}
+
+
+void UpdateInset(Inset* inset, bool mark_dirty)
+{
+       if (!inset)
+               return;
+
+       /* very first check for locking insets*/
+       if (current_view->currentBuffer()->the_locking_inset == inset){
+               if (current_view->currentBuffer()->text->UpdateInset(inset)){
+                       current_view->update();
+                       if (mark_dirty){
+                               if (current_view->currentBuffer()->isLyxClean())
+                                       minibuffer->setTimer(4);
+                               current_view->currentBuffer()->markDirty();
+                       }
+                       current_view->updateScrollbar();
+                       return;
+               }
+       }
+  
+       /* first check the current buffer */
+       if (current_view->available()){
+               current_view->getScreen()->HideCursor();
+               current_view->currentBuffer()->update(-3);
+               if (current_view->currentBuffer()->text->UpdateInset(inset)){
+                       if (mark_dirty)
+                               current_view->currentBuffer()->update(1);
+                       else 
+                               current_view->currentBuffer()->update(3);
+                       return;
+               }
+       }
+  
+       // check all buffers
+       bufferlist.updateInset(inset, mark_dirty);
+
+}
+
+
+/* these functions return 1 if an error occured, 
+   otherwise 0 */
+int LockInset(UpdatableInset* inset)
+{
+       if (!current_view->currentBuffer()->the_locking_inset && inset){
+               current_view->currentBuffer()->the_locking_inset = inset;
+               return 0;
+       }
+       return 1;
+}
+
+
+void ShowLockedInsetCursor(long x, long y, int asc, int desc)
+{
+       if (current_view->currentBuffer()->the_locking_inset &&
+           current_view->getScreen()){
+               y += current_view->currentBuffer()->text->cursor.y;
+               current_view->getScreen()->ShowManualCursor(x, y,
+                                                           asc, desc);
+       }
+}
+
+
+void HideLockedInsetCursor(long x, long y, int asc, int desc)
+{
+       if (current_view->currentBuffer()->the_locking_inset &&
+           current_view->getScreen()){
+               y += current_view->currentBuffer()->text->cursor.y;
+               current_view->getScreen()->HideManualCursor(x, y,
+                                                           asc, desc);
+       }
+}
+
+
+void FitLockedInsetCursor(long x, long y, int asc, int desc)
+{
+       if (current_view->currentBuffer()->the_locking_inset &&
+           current_view->getScreen()){
+               y += current_view->currentBuffer()->text->cursor.y;
+               if (current_view->getScreen()->FitManualCursor(x, y, asc, desc))
+                       current_view->updateScrollbar();
+       }
+}
+
+
+int UnlockInset(UpdatableInset* inset)
+{
+       if (inset &&
+           current_view->currentBuffer()->the_locking_inset == inset){
+               inset->InsetUnlock();
+               current_view->currentBuffer()->the_locking_inset = NULL;
+               current_view->currentBuffer()->text->FinishUndo();
+               return 0;
+       }
+       return bufferlist.unlockInset(inset);
+}
+
+
+void LockedInsetStoreUndo(Undo::undo_kind kind)
+{
+       if (!current_view->currentBuffer()->the_locking_inset)
+               return; // shouldn't happen
+       if (kind == Undo::EDIT) // in this case insets would not be stored!
+               kind = Undo::FINISH;
+       current_view->currentBuffer()->text->SetUndo(kind,
+                             current_view->currentBuffer()->text->cursor.par->
+                             ParFromPos(current_view->currentBuffer()->text->cursor.pos)->previous, 
+                             current_view->currentBuffer()->text->cursor.par->
+                             ParFromPos(current_view->currentBuffer()->text->cursor.pos)->next); 
+}
+
+
+void PutInsetIntoInsetUpdateList(Inset* inset)
+{
+       if (inset) {
+               InsetUpdateStruct* tmp = new InsetUpdateStruct();
+               tmp->inset = inset;
+               tmp->next = InsetUpdateList;
+               InsetUpdateList = tmp;
+       }
+}
+
+
+void UpdateInsetUpdateList()
+{
+       InsetUpdateStruct *tmp = InsetUpdateList;
+       while (tmp) {
+               UpdateInset(tmp->inset, false); // "false" because no document change
+               tmp = tmp->next;
+       }
+  
+       /* delete the update list */
+       while (InsetUpdateList) {
+               tmp = InsetUpdateList;
+               InsetUpdateList = InsetUpdateList->next;
+               delete tmp;
+       }
+       InsetUpdateList = NULL;
+}
+
+#warning UGLY!!
+// I know we shouldn't put anything in here but this seems the fastest
+// way to do this (and the cleanest for now). This function just inserts
+// a newline in the LString and the inserts 'depth'-spaces so that the
+// code is indented in the right way!!!
+void addNewlineAndDepth(LString &file, int const depth)
+{
+       file += '\n';
+       for (int j=0;j< depth;j++)
+               file += ' ';
+}
+
+
diff --git a/src/lyx_cb.h b/src/lyx_cb.h
new file mode 100644 (file)
index 0000000..5e6c26c
--- /dev/null
@@ -0,0 +1,78 @@
+// -*- C++ -*-
+#ifndef _LYX_CB_H
+#define _LYX_CB_H
+
+#include FORMS_H_LOCATION
+
+class LString;
+class Inset;
+
+///
+extern bool quitting;
+
+// When still false after reading lyxrc, warn user
+//about failing \bind_file command. RVDK_PATCH_5
+extern bool BindFileSet;
+
+///
+extern void FootCB(FL_OBJECT *, long);
+///
+extern void EmphCB();
+///
+extern void BoldCB();
+///
+extern void NounCB();
+///
+extern void MarginCB(FL_OBJECT *, long);
+///
+extern void FigureCB(FL_OBJECT *, long);
+///
+extern void TableCB(FL_OBJECT *, long);
+///
+extern void MeltCB(FL_OBJECT *, long);
+///
+extern void TexCB();
+///
+extern void DepthCB(FL_OBJECT *, long);
+///
+extern void FreeCB();
+///
+extern void CutCB();
+///
+extern void PasteCB();
+///
+extern void CopyCB();
+///
+extern void NoteCB();
+///
+extern void HtmlUrlCB();
+///
+extern void UrlCB();
+///
+extern void ProhibitInput();
+///
+extern void CodeCB();
+///
+extern void SansCB();
+///
+extern void RomanCB();
+///
+extern void StyleResetCB();
+///
+extern void UnderlineCB();
+///
+extern void FontSizeCB(LString const &);
+///
+extern LString CurrentState();
+///
+extern void AllowInput();
+
+///
+struct InsetUpdateStruct {
+       ///
+       Inset* inset;
+       ///
+       InsetUpdateStruct* next;
+};
+#endif
+
diff --git a/src/lyx_gui.C b/src/lyx_gui.C
new file mode 100644 (file)
index 0000000..1fd340c
--- /dev/null
@@ -0,0 +1,641 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include <fcntl.h>
+#include FORMS_H_LOCATION
+#include "lyx_gui.h"
+#include "combox.h"
+#include "lyx.h"
+#include "form1.h"
+#include "layout_forms.h"
+#include "print_form.h"
+#include "tex-strings.h"
+#include "lyx_main.h"
+#include "latexoptions.h"
+#include "error.h"
+#include "version.h"
+#include "LyXView.h"
+#include "buffer.h"
+#include "lyxserver.h"
+#include "lyxdraw.h"
+#include "lyxrc.h"
+#include "gettext.h"
+#include "lyx_gui_misc.h"
+#include "lyx_cb.h"
+#include "lyxlookup.h"
+#include "bufferlist.h"
+
+//     $Id: lyx_gui.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $   
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lyx_gui.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+#ifdef TWO_COLOR_ICONS
+#include "banner_bw.xbm"
+#else
+#include "banner.xpm"
+#endif
+
+FD_form_title *fd_form_title;
+FD_form_paragraph *fd_form_paragraph;
+FD_form_paragraph_extra *fd_form_paragraph_extra;
+FD_form_search *fd_form_search;
+FD_form_character *fd_form_character;
+FD_form_document *fd_form_document;
+FD_form_paper *fd_form_paper;
+FD_form_table_options *fd_form_table_options;
+FD_form_table_extra *fd_form_table_extra;
+FD_form_quotes *fd_form_quotes;
+FD_form_preamble *fd_form_preamble;
+FD_form_table *fd_form_table;
+FD_form_print *fd_form_print;
+FD_form_sendto *fd_form_sendto;
+FD_form_figure *fd_form_figure;
+FD_form_screen *fd_form_screen;
+FD_form_toc *fd_form_toc;
+FD_form_ref *fd_form_ref;
+FD_LaTeXOptions *fd_latex_options; // from latexoptions.h
+FD_LaTeXLog *fd_latex_log; // from latexoptions.h
+Combox *combo_language;
+
+extern LyXServer *lyxserver;
+extern bool finished;  // flag, that we are quitting the program
+extern BufferList bufferlist;
+
+FL_CMD_OPT cmdopt[] =
+{
+       {"-width", "*.width", XrmoptionSepArg, "690"},
+       {"-height", "*.height", XrmoptionSepArg, "510"},
+       {"-xpos", "*.xpos", XrmoptionSepArg, "-1"},
+       {"-ypos", "*.ypos", XrmoptionSepArg, "-1"},
+       {"-Reverse", "*.Reverse", XrmoptionNoArg, "1"},
+       {"-Mono", "*.Mono", XrmoptionNoArg, "1"},
+       {"-FastSelection", "*.FastSelection", XrmoptionNoArg, "1"},
+       {"-MathColor", "*.MathColor", XrmoptionSepArg, "blue"},
+       {"-MathFrameColor", "*.MathFrameColor", XrmoptionSepArg, "magenta"},
+       {"-FootColor", "*.FootColor", XrmoptionSepArg, "red"}, 
+       {"-NewLineColor", "*.NewLineColor", XrmoptionSepArg, "red"},
+       {"-LabelColor", "*.LabelColor", XrmoptionSepArg, "palegreen"},
+       {"-FillColor", "*.FillColor", XrmoptionSepArg, "magenta"},
+       {"-OnOffLineColor", "*.OnOffLineColor", XrmoptionSepArg, "magenta"},
+       {"-LatexColor", "*.LatexColor", XrmoptionSepArg, "red"},
+       {"-NoteColor", "*.NoteColor", XrmoptionSepArg, "yellow"},
+       {"-NoteFrameColor", "*.NoteFrameColor", XrmoptionSepArg, "black"},
+       {"-LightedColor", "*.LightedColor", XrmoptionSepArg, "gray80"},
+       {"-BackgroundColor", "*.BackgroundColor", XrmoptionSepArg, "linen"},
+       {"-SelectionColor", "*.SelectionColor", XrmoptionSepArg, "lightblue"}
+};
+
+static int width;
+static int height;
+static int xpos;
+static int ypos;
+int       reverse_video;
+int       mono_video;
+int       fast_selection;
+bool      cursor_follows_scrollbar;
+char      math_color[32];
+char      math_frame_color[32];
+char      foot_color[32];
+char       new_line_color[32];
+char      label_color[32];
+char      fill_color[32];
+char      on_off_line_color[32];
+char      latex_color[32];
+char      note_color[32];
+char       note_frame_color[32];
+char      lighted_color[32];
+LString    background_color;
+char      b_c[32];
+char      selection_color[32];
+
+
+FL_resource res[] =
+{
+       {"width", "widthClass", FL_INT, &width, "690"},
+       {"height", "heightClass", FL_INT, &height, "510"},
+       {"xpos", "xposClass", FL_INT, &xpos, "-1"},
+       {"ypos", "yposClass", FL_INT, &ypos, "-1"},
+       {"Reverse", "reverseClass", FL_INT, &reverse_video, "0"},
+       {"Mono", "monoClass", FL_INT, &mono_video, "0"},
+       {"FastSelection", "selectionClass", FL_INT, &fast_selection, "0"},
+       {"MathColor", "colorClass", FL_STRING, math_color, "blue", 31},
+       {"MathFrameColor", "colorClass", FL_STRING, math_frame_color, "magenta", 31},
+       {"FootColor", "colorClass", FL_STRING, foot_color, "red", 31},
+       {"NewLineColor", "colorClass", FL_STRING, new_line_color, "red", 31},
+       {"LabelColor", "colorClass", FL_STRING, label_color, "palegreen", 31},
+       {"FillColor", "colorClass", FL_STRING, fill_color, "magenta", 31},
+       {"OnOffLineColor", "colorClass", FL_STRING, on_off_line_color, "magenta", 31},
+       {"LatexColor", "colorClass", FL_STRING, latex_color, "red", 31},
+       {"NoteColor", "colorClass", FL_STRING, note_color, "yellow", 31},
+       {"NoteFrameColor", "colorClass", FL_STRING, note_frame_color, "black", 31},
+       {"LightedColor", "colorClass", FL_STRING, lighted_color, "gray80", 31},
+       {"BackgroundColor", "colorClass", FL_STRING, b_c, "linen", 31},
+       {"SelectionColor", "colorClass", FL_STRING, selection_color, "lightblue", 31}
+};
+
+
+static int LyX_XErrHandler(Display *display, XErrorEvent *xeev)
+{
+//#warning Please see if you can trigger this!
+       // emergency save
+       if (!bufferlist.isEmpty())
+               bufferlist.emergencyWriteAll();
+
+       // Get the reason for the crash.
+       char etxt[513];
+       XGetErrorText(display, xeev->error_code, etxt, 512);
+       lyxerr.print(etxt);
+       // By doing an abort we get a nice backtrace. (hopefully)
+       abort();
+       return 0; // Solaris CC wants us to return something
+}
+
+
+LyXGUI::LyXGUI(LyX *owner, int *argc, char *argv[], bool GUI)
+       :_owner(owner)
+{
+       gui = GUI;
+       if (!gui)
+               return;
+
+       setDefaults();
+       
+       static const int num_res = sizeof(res)/sizeof(FL_resource);
+       fl_initialize(argc, argv, "LyX", cmdopt, num_res);
+       fl_get_app_resources(res, num_res);
+       Display *display = fl_get_display();
+       if (!display) {
+               lyxerr.print("LyX: unable to access X display, exiting");
+               exit(1);
+       }
+       fcntl(ConnectionNumber(display), F_SETFD, FD_CLOEXEC);
+       // X Error handler install goes here
+       XSetErrorHandler(LyX_XErrHandler);
+       
+       background_color = b_c;
+       
+       // Make sure default screen is not larger than monitor
+       if (width == 690 && height == 510) {
+               Screen * scr=(DefaultScreenOfDisplay(fl_get_display()));
+               if (HeightOfScreen(scr)-24<height)
+                       height = HeightOfScreen(scr)-24;
+               if (WidthOfScreen(scr)-8<width)
+                       width = WidthOfScreen(scr)-8;
+       }
+
+}
+
+
+// A destructor is always necessary  (asierra-970604)
+LyXGUI::~LyXGUI() {
+        // Lyxserver was created in this class so should be destroyed
+        // here.  asierra-970604
+        if (lyxserver) {
+               delete lyxserver;
+               lyxserver = 0;
+       }
+
+       CloseLyXLookup();
+
+}
+
+
+void LyXGUI::setDefaults()
+{
+       FL_IOPT cntl;
+       cntl.buttonFontSize = FL_NORMAL_SIZE;
+       cntl.browserFontSize = FL_NORMAL_SIZE;
+       cntl.labelFontSize = FL_NORMAL_SIZE;
+       cntl.choiceFontSize = FL_NORMAL_SIZE;
+       cntl.inputFontSize = FL_NORMAL_SIZE;
+       cntl.menuFontSize  = FL_NORMAL_SIZE;
+       cntl.borderWidth = -1;
+       cntl.vclass = FL_DefaultVisual;
+       fl_set_defaults(FL_PDVisual
+                       | FL_PDButtonFontSize
+                       | FL_PDBrowserFontSize
+                       | FL_PDLabelFontSize
+                       | FL_PDChoiceFontSize
+                       | FL_PDInputFontSize
+                       | FL_PDMenuFontSize
+                       | FL_PDBorderWidth, &cntl);
+}
+
+
+// This is called after we have parsed lyxrc
+void LyXGUI::init()
+{
+       if (!gui)
+               return;
+
+       create_forms();
+       
+       // Set the font name for popups and menus
+        LString menufontname = lyxrc->menu_font_name 
+                              + "-*-*-*-?-*-*-*-*-"  
+                              + lyxrc->font_norm; 
+               // "?" means "scale that font"
+        LString popupfontname = lyxrc->popup_font_name 
+                              + "-*-*-*-?-*-*-*-*-"  
+                              + lyxrc->font_norm; 
+#if FL_REVISION > 85
+        if (fl_set_font_name(FL_BOLD_STYLE, menufontname.c_str()) < 0)
+#else
+        int nfonts;
+        char ** list = XListFonts(fl_display, menufontname.c_str(), 
+                                 1, &nfonts);
+        XFreeFontNames(list);
+        if (nfonts > 0)
+                fl_set_font_name(FL_BOLD_STYLE, menufontname.c_str());
+        else
+#endif
+                lyxerr.print("Could not set menu font to " + menufontname);
+
+#if FL_REVISION > 85
+        if (fl_set_font_name(FL_NORMAL_STYLE, popupfontname.c_str()) < 0)
+#else
+        list = XListFonts(fl_display, popupfontname.c_str(), 
+                         1, &nfonts);
+        XFreeFontNames(list);
+        if (nfonts > 0)
+                fl_set_font_name(FL_NORMAL_STYLE, popupfontname.c_str());
+        else
+#endif
+                lyxerr.print("Could not set popup font to " + popupfontname);
+
+       // put here (after fl_initialize) to avoid segfault. Cannot be done
+       // in setDefaults() (Matthias 140496)
+       // Moved from ::LyXGUI to ::init to allow popup font customization 
+       // (petr 120997).
+       fl_setpup_fontstyle(FL_NORMAL_STYLE);
+       fl_setpup_fontsize(FL_NORMAL_SIZE);
+       fl_setpup_color(FL_MCOL,FL_BLACK);
+       fl_set_goodies_font(FL_NORMAL_STYLE, FL_NORMAL_SIZE);
+
+        // all lyxrc settings has to be done here as lyxrc has not yet
+        // been read when the GUI is created (Jug)
+
+       // the print form
+       fl_set_input(fd_form_print->input_printer, 
+                    lyxrc->printer.c_str());   
+        
+       // the sendto form
+        if (!lyxrc->custom_export_command.empty())
+                fl_set_input(fd_form_sendto->input_cmd,
+                             lyxrc->custom_export_command.c_str());
+       if (lyxrc->custom_export_format == "lyx")
+               fl_set_button(fd_form_sendto->radio_ftype_lyx, 1);
+       else if (lyxrc->custom_export_format == "tex")
+               fl_set_button(fd_form_sendto->radio_ftype_latex, 1);
+       else if (lyxrc->custom_export_format == "dvi")
+               fl_set_button(fd_form_sendto->radio_ftype_dvi, 1);
+       else if (lyxrc->custom_export_format == "ps")
+               fl_set_button(fd_form_sendto->radio_ftype_ps, 1);
+        else if (lyxrc->custom_export_format == "ascii")
+                fl_set_button(fd_form_sendto->radio_ftype_ascii, 1);
+
+       // Update parameters.
+       lyxViews->redraw();
+
+       // Initialize the views.
+       lyxViews->init();
+
+       // in 0.12 the initialisation of the LyXServer must be done here
+       // 0.13 it should be moved again...
+       lyxserver = new LyXServer(lyxViews->getLyXFunc(), lyxrc->lyxpipes);
+
+       // This is to make sure we get the selection color
+       getGC(gc_selection);
+       // This is to make sure we set the background_pixels
+       getGC(gc_clear);
+}
+
+
+void LyXGUI::create_forms()
+{
+       lyxerr.debug("Initializing LyXView...");
+       lyxViews = new LyXView(width, height);
+       lyxerr.debug("Initializing LyXView...done");
+
+       // From here down should be done by somebody else. (Lgb)
+
+       //
+       // Create forms
+       //
+
+       // the title form
+       fd_form_title = create_form_form_title();
+       fl_set_form_dblbuffer(fd_form_title->form_title, 1); // use dbl buffer
+       fl_set_form_atclose(fd_form_title->form_title, CancelCloseBoxCB, NULL);
+       fl_addto_form(fd_form_title->form_title);
+#ifdef TWO_COLOR_ICONS
+       FL_OBJECT *obj = fl_add_bitmapbutton(FL_NORMAL_BUTTON,0,0,425,290,"");
+         fl_set_bitmapbutton_data(obj,banner_bw_width,
+                                  banner_bw_height, banner_bw_bits);
+         fl_set_object_color(obj,FL_WHITE,FL_BLACK);
+#else
+       FL_OBJECT *obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON,0,0,425,290,"");
+         fl_set_pixmapbutton_data(obj, (char**)banner);
+#if FL_REVISION > 85
+         fl_set_pixmapbutton_focus_outline(obj,3);
+#endif
+#endif
+         fl_set_button_shortcut(obj,"^M ^[",1);
+         fl_set_object_boxtype(obj,FL_NO_BOX);
+         fl_set_object_callback(obj,TimerCB,0);
+
+       obj = fl_add_text(FL_NORMAL_TEXT,248,265,170,16, LYX_VERSION);
+         fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+#ifdef TWO_COLOR_ICONS
+         fl_set_object_color(obj,FL_WHITE,FL_WHITE);
+         fl_set_object_lcol(obj,FL_BLACK);
+#else
+//       fl_set_object_color(obj,FL_WHITE, FL_WHITE);
+//       fl_set_object_lcol(obj,FL_BLACK);
+          fl_mapcolor(FL_FREE_COL2, 0x05, 0x2e, 0x4c);
+          fl_mapcolor(FL_FREE_COL3, 0xe1, 0xd2, 0x9b);
+         fl_set_object_color(obj,FL_FREE_COL2, FL_FREE_COL2);
+         fl_set_object_lcol(obj,FL_FREE_COL3);
+#endif
+         fl_set_object_lalign(obj,FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
+         fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+       fl_end_form();
+
+       // the paragraph form
+       fd_form_paragraph = create_form_form_paragraph();
+       fl_set_form_atclose(fd_form_paragraph->form_paragraph,
+                           CancelCloseBoxCB, NULL);
+       fl_addto_choice(fd_form_paragraph->choice_space_above,
+                       _(" None | Defskip | Smallskip "
+                       "| Medskip | Bigskip | VFill | Length "));
+       fl_addto_choice(fd_form_paragraph->choice_space_below,
+                       _(" None | Defskip | Smallskip "
+                       "| Medskip | Bigskip | VFill | Length ")); 
+       fl_set_input_return(fd_form_paragraph->input_space_above,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_paragraph->input_space_below,
+                           FL_RETURN_ALWAYS);
+
+        // the paragraph extra form
+       fd_form_paragraph_extra = create_form_form_paragraph_extra();
+       fl_set_form_atclose(fd_form_paragraph_extra->form_paragraph_extra,
+                           CancelCloseBoxCB, NULL);
+       fl_set_input_return(fd_form_paragraph_extra->input_pextra_width,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_paragraph_extra->input_pextra_widthp,
+                           FL_RETURN_ALWAYS);
+
+       // the search form
+       fd_form_search = create_form_form_search();
+       fl_set_form_atclose(fd_form_search->form_search,
+                           CancelCloseBoxCB, NULL);
+
+       // the character form
+       fd_form_character = create_form_form_character();
+       fl_set_form_atclose(fd_form_character->form_character,
+                           CancelCloseBoxCB, NULL);
+       fl_addto_choice(fd_form_character->choice_family, 
+                       _(" No change %l| Roman | Sans Serif | Typewriter %l| Reset "));
+       fl_addto_choice(fd_form_character->choice_series, 
+                       _(" No change %l| Medium | Bold %l| Reset "));
+       fl_addto_choice(fd_form_character->choice_shape,
+                       _(" No change %l| Upright | Italic | Slanted | Small Caps "
+                       "%l| Reset "));
+       fl_addto_choice(fd_form_character->choice_size, 
+                       _(" No change %l| Tiny | Smallest | Smaller | Small "
+                       "| Normal | Large | Larger | Largest | Huge | Huger "
+                       "%l| Increase | Decrease | Reset "));
+       fl_addto_choice(fd_form_character->choice_bar, 
+                       _(" No change %l| Emph | Underbar | Noun | LaTeX mode %l| Reset "));
+       fl_addto_choice(fd_form_character->choice_color, 
+                       _(" No change %l| No color | Black | White | Red | Green "
+                       "| Blue | Cyan | Magenta | Yellow %l| Reset "));
+
+       // the document form
+       fd_form_document = create_form_form_document();
+       fl_set_form_atclose(fd_form_document->form_document,
+                           CancelCloseBoxCB, NULL);
+       fl_addto_choice(fd_form_document->choice_spacing,
+                       _(" Single | OneHalf | Double | Other "));
+
+       fl_set_counter_bounds(fd_form_document->slider_secnumdepth,-1,5);
+       fl_set_counter_bounds(fd_form_document->slider_tocdepth,-1,5);
+       fl_set_counter_step(fd_form_document->slider_secnumdepth,1,1);
+       fl_set_counter_step(fd_form_document->slider_tocdepth,1,1);
+       fl_set_counter_precision(fd_form_document->slider_secnumdepth, 0);
+       fl_set_counter_precision(fd_form_document->slider_tocdepth, 0);
+       fl_addto_form(fd_form_document->form_document);
+       combo_language = new Combox(FL_COMBOX_DROPLIST);
+       FL_OBJECT *ob = fd_form_document->choice_language;
+       combo_language->add(ob->x, ob->y, ob->w, ob->h, 200);
+       combo_language->shortcut("#G",1);
+       fl_end_form();
+       int n; // declared here because DEC cxx does not like multiple
+              // declarations of variables in for() loops (JMarc)
+        for (n=0; tex_babel[n][0]; n++) {
+           combo_language->addto(tex_babel[n]);
+       }
+
+       // not really necessary, but we can do it anyway.
+       fl_addto_choice(fd_form_document->choice_fontsize, "default|10|11|12");
+       
+        for (n=0; tex_fonts[n][0]; n++) {
+           fl_addto_choice(fd_form_document->choice_fonts,tex_fonts[n]);
+       }
+
+       fl_addto_choice(fd_form_document->choice_inputenc,
+                       "default|latin1|latin2|latin5"
+                       "|koi8-r|koi8-u|cp866|cp1251");
+
+        for (n=0; tex_graphics[n][0]; n++) {
+           fl_addto_choice(fd_form_document->choice_postscript_driver,
+                                       tex_graphics[n]);
+       }
+       // not really necessary, but we can do it anyway.
+       fl_addto_choice(fd_form_document->choice_pagestyle,
+                       "default|empty|plain|headings|fancy");
+       fl_addto_choice(fd_form_document->choice_default_skip,
+                       _(" Smallskip | Medskip | Bigskip | Length "));
+       fl_set_input_return(fd_form_document->input_default_skip,
+                           FL_RETURN_ALWAYS);
+
+        // the paper form
+       fd_form_paper = create_form_form_paper();
+       fl_set_form_atclose(fd_form_paper->form_paper,
+                           CancelCloseBoxCB, NULL);
+       fl_addto_choice(fd_form_paper->choice_papersize2,
+                       _(" Default | Custom | USletter | USlegal "
+                        "| USexecutive | A3 | A4 | A5 | B3 | B4 | B5 "));
+       fl_addto_choice(fd_form_paper->choice_paperpackage,
+                       _(" None "
+                       "| A4 small Margins (only portrait) "
+                       "| A4 very small Margins (only portrait) "
+                       "| A4 very wide margins (only portrait) "));
+       fl_set_input_return(fd_form_paper->input_custom_width,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_paper->input_custom_height,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_paper->input_top_margin,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_paper->input_bottom_margin,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_paper->input_left_margin,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_paper->input_right_margin,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_paper->input_head_height,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_paper->input_head_sep,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_paper->input_foot_skip,
+                           FL_RETURN_ALWAYS);
+
+        // the table_options form
+       fd_form_table_options = create_form_form_table_options();
+       fl_set_form_atclose(fd_form_table_options->form_table_options,
+                           CancelCloseBoxCB, NULL);
+       fl_set_input_return(fd_form_table_options->input_column_width,
+                           FL_RETURN_ALWAYS);
+
+        // the table_extra form
+       fd_form_table_extra = create_form_form_table_extra();
+       fl_set_form_atclose(fd_form_table_extra->form_table_extra,
+                           CancelCloseBoxCB, NULL);
+       fl_set_input_return(fd_form_table_extra->input_special_alignment,
+                           FL_RETURN_ALWAYS);
+       fl_set_input_return(fd_form_table_extra->input_special_multialign,
+                           FL_RETURN_ALWAYS);
+
+       // the quotes form
+       fd_form_quotes = create_form_form_quotes();
+       fl_set_form_atclose(fd_form_quotes->form_quotes,
+                           CancelCloseBoxCB, NULL);
+       // Is it wrong of me to use « » instead of << >> ? (Lgb)
+       // Maybe if people use a font other than latin1... (JMarc)
+       fl_addto_choice(fd_form_quotes->choice_quotes_language,
+                       _(" ``text'' | ''text'' | ,,text`` | ,,text'' | «text» | »text« "));
+
+       // the preamble form
+       fd_form_preamble = create_form_form_preamble();
+       fl_set_form_atclose(fd_form_preamble->form_preamble,
+                           CancelCloseBoxCB, NULL);
+
+       // the table form
+       fd_form_table = create_form_form_table();
+       fl_set_form_atclose(fd_form_table->form_table, CancelCloseBoxCB, NULL);
+       fl_set_slider_bounds(fd_form_table->slider_rows,1,50);
+       fl_set_slider_bounds(fd_form_table->slider_columns,1,50);
+       fl_set_slider_value(fd_form_table->slider_rows, 5);
+       fl_set_slider_value(fd_form_table->slider_columns, 5);
+       fl_set_slider_precision(fd_form_table->slider_rows, 0);
+       fl_set_slider_precision(fd_form_table->slider_columns, 0);
+
+       // the print form
+       fd_form_print = create_form_form_print();
+       fl_set_form_atclose(fd_form_print->form_print, CancelCloseBoxCB, NULL);
+               fl_set_button(fd_form_print->radio_printer, 1);
+       fl_set_button(fd_form_print->radio_file, 0);
+       fl_set_button(fd_form_print->radio_order_normal, 1);
+       fl_set_button(fd_form_print->radio_order_reverse, 0);
+       fl_set_button(fd_form_print->radio_all_pages, 1);
+       fl_set_button(fd_form_print->radio_odd_pages, 0);
+       fl_set_button(fd_form_print->radio_even_pages, 0);
+
+       // the sendto form
+       fd_form_sendto = create_form_form_sendto();
+       fl_set_form_atclose(fd_form_sendto->form_sendto,CancelCloseBoxCB,NULL);
+
+       // the figure form
+       fd_form_figure = create_form_form_figure();
+       fl_set_form_atclose(fd_form_figure->form_figure,
+                           CancelCloseBoxCB, NULL);
+       fl_set_button(fd_form_figure->radio_postscript, 1);
+
+       // the screen form
+       fd_form_screen = create_form_form_screen();
+       fl_set_form_atclose(fd_form_screen->form_screen,
+                           CancelCloseBoxCB, NULL);
+
+       // the toc form
+       fd_form_toc = create_form_form_toc();
+       fl_set_form_atclose(fd_form_toc->form_toc, CancelCloseBoxCB, NULL);
+
+       // the ref form
+       fd_form_ref = create_form_form_ref();
+       fl_set_form_atclose(fd_form_ref->form_ref, CancelCloseBoxCB, NULL);
+
+       // the latex options form
+       fd_latex_options = create_form_LaTeXOptions();
+       fl_set_form_atclose(fd_latex_options->LaTeXOptions,
+                           CancelCloseBoxCB, NULL);
+
+       // the latex log form
+       fd_latex_log = create_form_LaTeXLog();
+       fl_set_form_atclose(fd_latex_log->LaTeXLog,
+                           CancelCloseBoxCB, NULL);
+
+       // Show the main & title form
+       int main_placement = FL_PLACE_CENTER | FL_FREE_SIZE;
+       int title_placement = FL_PLACE_CENTER;
+       // Did we get a valid position?
+       if (xpos>=0 && ypos>=0) {
+               lyxViews->setPosition(xpos, ypos);
+               // show the title form in the middle of the main form
+               fl_set_form_position(fd_form_title->form_title,
+                       abs(xpos + (width/2) - (370 / 2)),
+                       abs(ypos + (height/2) - (290 / 2)));
+               // The use of abs() above is a trick to ensure valid positions
+               main_placement = FL_PLACE_POSITION;
+               title_placement = FL_PLACE_GEOMETRY;
+       }
+       lyxViews->show(main_placement, FL_FULLBORDER, "LyX");
+       fl_show_form(fd_form_title->form_title, 
+                    title_placement, FL_NOBORDER, 
+                    _("LyX Banner"));
+       fl_redraw_form(fd_form_title->form_title);
+       fl_raise_form(fd_form_title->form_title);
+
+       // Show the title form at most 7 secs (lowered from 10 secs)
+       fl_set_timer(fd_form_title->timer_title, 7);
+}
+
+
+void LyXGUI::runTime()
+       /* This will usually be toolkit (GUI) specific. This is
+        * also usually the XEvent dispatcher of the GUI. */
+{
+       if (!gui)
+               return;
+
+       // XForms specific
+       XEvent ev;
+
+       while (!finished) {
+               if (fl_check_forms() == FL_EVENT) {
+                       lyxerr.print("LyX: This shouldn't happen...");
+                       fl_XNextEvent(&ev);
+               }
+       }
+}
+
+
+void LyXGUI::regBuf(Buffer *b)
+{
+       lyxViews->currentView()->setBuffer(b);
+}
diff --git a/src/lyx_gui.h b/src/lyx_gui.h
new file mode 100644 (file)
index 0000000..399a93d
--- /dev/null
@@ -0,0 +1,87 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 1996 Matthias Ettrich
+ *           and the LyX Team.
+ *
+ *======================================================*/
+
+#ifndef _LYX_GUI_H_
+#define _LYX_GUI_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+class LyXView;
+class LyX;
+class Buffer;
+
+/**
+  This class is going to be the entry point to {\em all} GUI funcionality.
+  From this object will all the things going on be initiated. However I
+  have not clearly figured out how this class is going to be, suggestions
+  are welcome. (Lgb)
+  */
+class LyXGUI {
+public:
+       /**@name Constructor */
+       //@{
+       
+       /** The only constructor allowed
+
+         If gui is false, LyX will operate in non-X mode
+         */
+       LyXGUI(LyX *owner, int *argc, char *argv[], bool gui);
+       ///
+       ~LyXGUI();
+       //@}
+       
+       /**@name Members */
+       //@{
+       /**
+         This functions starts the ball. For XForms it runs a loop of
+         fl_check_forms(). For QT this will probably be .exec().
+         */
+       void runTime();
+       /** This will take care of the initializaton done after the
+         main initialization.
+         */
+       void init();
+       ///
+       LyXView *lyxViews; // or something so that several views
+       // on the same time can be allowed.
+
+       /// Register the buffer with the first fount LyXView in lyxViews
+       void regBuf(Buffer*);
+       //@}
+private:
+       /**@name Construcor */
+       //@{
+       /// not allowed
+       LyXGUI(); // don't allow this
+       /// not allowed
+       LyXGUI(const LyXGUI&); // nor this
+       //@}
+       
+       /**@name Members */
+       //@{
+       ///
+       void setDefaults();
+       ///
+       void create_forms();
+       //@}
+
+       /**@name Variables */
+       //@{
+       /// The LyX that owns this GUI.
+       LyX *_owner;
+       /// Do we have a gui?
+       bool gui;
+       //@}
+};
+
+#endif
diff --git a/src/lyx_gui_misc.C b/src/lyx_gui_misc.C
new file mode 100644 (file)
index 0000000..a2ec1fa
--- /dev/null
@@ -0,0 +1,429 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#include <errno.h>
+#include "lyx_gui_misc.h"
+#include "BufferView.h"
+#include "bibforms.h"
+#include "buffer.h"
+#include "bullet_forms.h"
+#include "form1.h"
+#include "gettext.h"
+#include "include_form.h"
+#include "latexoptions.h"
+#include "layout_forms.h"
+#include "lyx.h"
+#include "lyx_cb.h"
+#include "lyx_main.h"
+#include "mathed/math_forms.h"
+#include "minibuffer.h"
+#include "print_form.h"
+#include "sp_form.h"
+#include "insets/insetindex.h"
+
+extern MiniBuffer *minibuffer;
+extern BufferView *current_view;
+//     $Id: lyx_gui_misc.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $      
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lyx_gui_misc.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+
+extern FD_form_paragraph * fd_form_paragraph;
+extern FD_form_paragraph_extra * fd_form_paragraph_extra;
+extern FD_form_search * fd_form_search;
+extern FD_form_character * fd_form_character;
+extern FD_form_document * fd_form_document;
+extern FD_form_paper * fd_form_paper;
+extern FD_form_table_options * fd_form_table_options;
+extern FD_form_quotes * fd_form_quotes;
+extern FD_form_preamble * fd_form_preamble;
+extern FD_form_table * fd_form_table;
+extern FD_form_print * fd_form_print;
+extern FD_form_sendto * fd_form_sendto;
+extern FD_form_figure * fd_form_figure;
+extern FD_form_toc * fd_form_toc;
+extern FD_form_ref * fd_form_ref;
+#if 0
+extern FD_form_url * fd_form_url;
+#endif
+extern FD_form_paragraph_extra * fd_form_paragraph_extra;
+extern FD_LaTeXLog * fd_latex_log;
+extern FD_form_spell_check * fd_form_spell_check;
+extern FD_form_bullet * fd_form_bullet;
+extern FD_panel  * fd_panel;
+extern FD_delim  * fd_delim;
+extern FD_deco   * fd_deco;
+extern FD_space  * fd_space;
+extern FD_matrix * fd_matrix;
+extern FD_citation_form * citation_form;
+extern FD_bibitem_form * bibitem_form;
+extern FD_include * form;
+extern FD_index_form * index_form;
+
+extern void TocUpdateCB();
+extern void HideFiguresPopups();
+
+// Prevents LyX from being killed when the close box is pressed in a popup.
+int CancelCloseBoxCB(FL_FORM *, void *)
+{
+       return FL_CANCEL;
+}
+
+
+// Prevents LyX from being killed when the close box is pressed in a popup.
+int IgnoreCloseBoxCB(FL_FORM *, void *)
+{
+       return FL_IGNORE;
+}
+
+
+// Prevents LyX from crashing when no buffers available
+// This is also one of the functions that we _really_ dont want
+// we should try to finds way to help us with that.
+// The signal/slot mechanism can probably help. 
+void CloseAllBufferRelatedPopups()
+{
+       // don't forget to check that dynamically created forms
+       // have been created otherwise hiding one could cause a crash
+       // need the visible check otherwise XForms prints a warning
+       // if hiding an invisible form
+       if (fd_form_paragraph->form_paragraph->visible) {
+               fl_hide_form(fd_form_paragraph->form_paragraph);
+       }
+       if (fd_form_paragraph_extra->form_paragraph_extra->visible) {
+               fl_hide_form(fd_form_paragraph_extra->form_paragraph_extra);
+       }
+       if (fd_form_search->form_search->visible) {
+               fl_hide_form(fd_form_search->form_search);
+       }
+       if (fd_form_character->form_character->visible) {
+               fl_hide_form(fd_form_character->form_character);
+       }
+       if (fd_form_document->form_document->visible) {
+               fl_hide_form(fd_form_document->form_document);
+       }
+       if (fd_form_quotes->form_quotes->visible) {
+               fl_hide_form(fd_form_quotes->form_quotes);
+       }
+       if (fd_form_preamble->form_preamble->visible) {
+               fl_hide_form(fd_form_preamble->form_preamble);
+       }
+       if (fd_form_table->form_table->visible) {
+               fl_hide_form(fd_form_table->form_table);
+       }
+       if (fd_form_print->form_print->visible) {
+               fl_hide_form(fd_form_print->form_print);
+       }
+       if (fd_form_figure->form_figure->visible) {
+               fl_hide_form(fd_form_figure->form_figure);
+       }
+       if (fd_form_toc->form_toc->visible) {
+               fl_hide_form(fd_form_toc->form_toc);
+       }
+       if (fd_form_ref->form_ref->visible) {
+               fl_hide_form(fd_form_ref->form_ref);
+       }
+#if 0
+       if (fd_form_url->form_url->visible) {
+               fl_hide_form(fd_form_url->form_url);
+       }
+#endif
+       if (fd_form_paper->form_paper->visible) {
+               fl_hide_form(fd_form_paper->form_paper);
+       }
+       if (fd_form_table_options->form_table_options->visible) {
+               fl_hide_form(fd_form_table_options->form_table_options);
+       }
+       if (fd_form_sendto->form_sendto->visible) {
+               fl_hide_form(fd_form_sendto->form_sendto);
+       }
+       if (fd_latex_log->LaTeXLog->visible) {
+               fl_hide_form(fd_latex_log->LaTeXLog);
+       }
+       if (fd_form_spell_check) {
+               if (fd_form_spell_check->form_spell_check->visible) {
+                       fl_trigger_object(fd_form_spell_check->done);
+               }
+       }
+       if (fd_form_bullet) {
+               if (fd_form_bullet->form_bullet->visible) {
+                       fl_hide_form(fd_form_bullet->form_bullet);
+               }
+       }
+       if (fd_panel) {
+               if (fd_panel->panel->visible) {
+                       fl_hide_form(fd_panel->panel);
+               }
+       }
+       if (fd_delim) {
+               if (fd_delim->delim->visible) {
+                       fl_hide_form(fd_delim->delim);
+               }
+       }
+       if (fd_deco) {
+               if (fd_deco->deco->visible) {
+                       fl_hide_form(fd_deco->deco);
+               }
+       }
+       if (fd_space) {
+               if (fd_space->space->visible) {
+                       fl_hide_form(fd_space->space);
+               }
+       }
+       if (fd_matrix) {
+               if (fd_matrix->matrix->visible) {
+                       fl_hide_form(fd_matrix->matrix);
+               }
+       }
+       if (citation_form) {
+               if (citation_form->citation_form->visible) {
+                       fl_hide_form(citation_form->citation_form);
+               }
+       }
+       if (bibitem_form) {
+               if (bibitem_form->bibitem_form->visible) {
+                       fl_hide_form(bibitem_form->bibitem_form);
+               }
+       }
+       if (form) {
+               if (form->include->visible) {
+                       fl_hide_form(form->include);
+               }
+       }
+       if (index_form) {
+               if (index_form->index_form->visible) {
+                       fl_hide_form(index_form->index_form);
+               }
+       }
+       HideFiguresPopups();
+}
+
+// This is another function we really don't want.
+// Again the Signal/Slot mechanism is tailor made for this task.
+void updateAllVisibleBufferRelatedPopups()
+{
+       if (fd_form_document->form_document->visible) {
+               UpdateLayoutDocument();
+       }
+       if (fd_form_preamble->form_preamble->visible) {
+               UpdateLayoutPreamble();
+       }
+       if (fd_form_quotes->form_quotes->visible) {
+               UpdateLayoutQuotes();
+       }
+       if (fd_form_paragraph->form_paragraph->visible) {
+               UpdateLayoutParagraph();
+       }
+       if (fd_form_paragraph_extra->form_paragraph_extra->visible) {
+               UpdateParagraphExtra();
+       }
+       if (fd_form_paper->form_paper->visible) {
+               UpdateLayoutPaper();
+       }
+       if (fd_form_table_options->form_table_options->visible) {
+               UpdateLayoutTable(1); // just like a right mouse click
+       }
+       if (fd_form_bullet) {
+               if (fd_form_bullet->form_bullet->visible) {
+                       updateBulletForm();
+               }
+       }
+       if (fd_form_toc->browser_toc->visible) {
+               TocUpdateCB(0,0);
+       }
+#ifdef ALWAYS_UPDATE_REF
+       // Ideally, the RefUpdateCB should be modified so that if the
+       // current document is a subdocument the reference list should come
+       // from master document (or even be a merger of references from all
+       // its sibling documents).  For now this has effectively been
+       // commented out to ensure that users of multipart documents can
+       // access the reference list of a different document.  This is
+       // of course a compromise and an annoyance for users switching
+       // between separate documents.  ARRae 241198
+       if (fd_form_ref->form_ref->visible) {
+               RefUpdateCB(0,0);
+       }
+#endif
+       if (current_view->currentBuffer()->isReadonly()) {
+               // a little crude perhaps but it works. ARRae
+               if (fd_form_character->form_character->visible) {
+                       fl_hide_form(fd_form_character->form_character);
+               }
+               if (fd_form_table->form_table->visible) {
+                       fl_hide_form(fd_form_table->form_table);
+               }
+       }
+
+       // We have either changed buffers or changed the readonly status
+       // so the safest thing to do is hide all inset popups that
+       // are editting insets from the previous buffer or aren't
+       // allowed in readonly docs.
+       if (fd_panel) {
+               if (fd_panel->panel->visible) {
+                       fl_hide_form(fd_panel->panel);
+               }
+       }
+       if (fd_delim) {
+               if (fd_delim->delim->visible) {
+                       fl_hide_form(fd_delim->delim);
+               }
+       }
+       if (fd_deco) {
+               if (fd_deco->deco->visible) {
+                       fl_hide_form(fd_deco->deco);
+               }
+       }
+       if (fd_space) {
+               if (fd_space->space->visible) {
+                       fl_hide_form(fd_space->space);
+               }
+       }
+       if (fd_matrix) {
+               if (fd_matrix->matrix->visible) {
+                       fl_hide_form(fd_matrix->matrix);
+               }
+       }
+       if (citation_form) {
+               if (citation_form->citation_form->visible) {
+                       fl_hide_form(citation_form->citation_form);
+               }
+       }
+       if (bibitem_form) {
+               if (bibitem_form->bibitem_form->visible) {
+                       fl_hide_form(bibitem_form->bibitem_form);
+               }
+       }
+       if (form) {
+               if (form->include->visible) {
+                       fl_hide_form(form->include);
+               }
+       }
+       if (index_form) {
+               if (index_form->index_form->visible) {
+                       fl_hide_form(index_form->index_form);
+               }
+       }
+       HideFiguresPopups();
+}
+
+// Extract shortcut from <ident>|<shortcut> string
+const char* flyx_shortcut_extract(const char*sc)
+{
+       // Find '|' in the sc and return the string after that.
+       register const char *sd = sc;
+       while(sd[0]!=0 && sd[0] != '|') sd++;
+
+       if (sd[0]=='|') {
+               sd++;
+               //fprintf(stderr, "%s\n", sd);
+               return sd;
+       }
+       return "";
+}
+
+// Extract identifier from <ident>|<shortcut> string
+const char* flyx_ident_extract(const char *sc)
+{
+       register const char *se = sc;
+       while(se[0]!=0 && se[0] != '|') se++;
+
+       if (se[0]==0) return sc;
+       
+       char * sb = new char[se-sc + 1];
+       int index = 0;
+       register const char *sd = sc;
+       while (sd != se) {
+               sb[index] = sd[0];
+               index++; sd++;
+       }
+       sb[index]=0;
+       return sb;
+}
+
+//
+void WriteAlert(LString const & s1, LString const & s2, LString const & s3)
+{
+       if (minibuffer) {
+               ProhibitInput();
+               minibuffer->Set(s1, s2, s3);
+       }
+
+       fl_set_resource("flAlert.dismiss.label", _("Dismiss"));
+       fl_show_alert(s1.c_str(), s2.c_str(), s3.c_str(), 0);
+       if (minibuffer) {
+               AllowInput();
+       }
+}
+
+
+// Alarms user of something related to files
+void WriteFSAlert(LString const & s1, LString const & s2)
+{
+       WriteAlert (s1, s2, strerror(errno));
+}
+
+
+bool AskQuestion(LString const & s1, LString const & s2, LString const & s3)
+{
+       fl_set_resource("flQuestion.yes.label", idex(_("Yes|Yy#y")));
+       fl_set_resource("flQuestion.no.label", idex(_("No|Nn#n")));
+#if FL_REVISION > 85
+       return fl_show_question((s1 + "\n" + s2 + "\n" + s3).c_str(), 0);
+#else
+       return fl_show_question(s1.c_str(), s2.c_str(), s3.c_str());
+#endif
+}
+
+// Returns 1 for yes, 2 for no, 3 for cancel.
+int AskConfirmation(LString const & s1, LString const & s2, LString const & s3)
+{
+       fl_set_choices_shortcut(scex(_("Yes|Yy#y")),
+                               scex(_("No|Nn#n")),
+                               scex(_("Cancel|^[")));
+#if FL_REVISION < 86
+        return fl_show_choice(s1.c_str(), s2.c_str(), s3.c_str(), 
+                             3, idex(_("Yes|Yy#y")),
+                             idex(_("No|Nn#n")),
+                             idex(_("Cancel|^[")));
+#endif
+#if FL_REVISION > 85
+        return fl_show_choice(s1.c_str(), s2.c_str(), s3.c_str(), 
+                             3, idex(_("Yes|Yy#y")),
+                             idex(_("No|Nn#n")),
+                              idex(_("Cancel|^[")), 3);
+#endif
+}
+
+
+// Asks for a text
+LString askForText(LString const & msg, LString const & dflt)
+{
+       LString tmp;
+       fl_set_resource("flInput.cancel.label", idex(_("Cancel|^[")));
+       fl_set_resource("flInput.ok.label", idex(_("OK|#O")));
+       fl_set_resource("flInput.clear.label", idex(_("Clear|#e")));
+       tmp = fl_show_input(msg.c_str(), dflt.c_str());
+       return tmp;
+}
+
+// Inform the user that the buffer is read-only, and that changes in the
+// dialog box that is to appear will be ignored.
+void WarnReadonly()
+{
+       WriteAlert(_("Any changes will be ignored"),
+                  _("The document is read-only:"),
+                  current_view->currentBuffer()->getFileName());
+}
+
diff --git a/src/lyx_gui_misc.h b/src/lyx_gui_misc.h
new file mode 100644 (file)
index 0000000..f370f8a
--- /dev/null
@@ -0,0 +1,74 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 1996 Matthias Ettrich
+*           and the LyX Team.
+*
+*======================================================*/
+
+// Misc. GUI specific routines
+
+#ifndef _LYX_GUI_MISC_H
+#define _LYX_GUI_MISC_H
+
+#include FORMS_H_LOCATION
+#include "LString.h"
+
+/// Prevents LyX from being killed when the close box is pressed in a popup.
+extern "C" int CancelCloseBoxCB(FL_FORM *, void *);
+/// Prevents LyX from being killed when the close box is pressed in a popup.
+extern "C" int IgnoreCloseBoxCB(FL_FORM *, void *);
+
+/// Prevents LyX from crashing when no buffers available
+void CloseAllBufferRelatedPopups();
+
+/// Ensures info in visible popups are always correct.
+void updateAllVisibleBufferRelatedPopups();
+
+/// Extract shortcut from <ident>|<shortcut> string
+const char* flyx_shortcut_extract(const char*sc);
+/// Make a shortnamed version of the above func
+#define scex flyx_shortcut_extract
+
+/// Extract shortcut from <ident>|<shortcut> string
+const char* flyx_ident_extract(const char *sc);
+/// Make a shortnamed versjon of the above func
+#define idex flyx_ident_extract
+
+/// Show message
+void WriteAlert(LString const & s1, LString const & s2=LString(), 
+               LString const & s3=LString());
+
+/// Alarms user of something related to files
+void WriteFSAlert(LString const & s1, LString const & s2=LString());
+
+/// Asks "Yes" or "No". Returns true for yes, false for no
+bool AskQuestion(LString const & s1, LString const & s2=LString(),
+                LString const & s3=LString());
+
+/// Asks "Yes", "No" or "Cancel". Returns 1 for yes, 2 for no, 3 for cancel
+int AskConfirmation(LString const & s1, LString const & s2=LString(), 
+                   LString const & s3=LString());
+
+/// returns a text
+LString askForText(LString const & msg, LString const & dflt=LString());
+
+/// Informs the user that changes in the coming form will be ignored
+void WarnReadonly();
+
+// inlined functions
+/// rings the audio bell.
+inline
+void LyXBell() {
+       // if (audio()) ON/OFF switch yet to be implemented
+#if FL_REVISION > 85
+       fl_ringbell(20);
+#else
+       ringbell();
+#endif
+}
+
+#endif
diff --git a/src/lyx_main.C b/src/lyx_main.C
new file mode 100644 (file)
index 0000000..d7c00d7
--- /dev/null
@@ -0,0 +1,576 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+//     $Id: lyx_main.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $  
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lyx_main.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+#include <stdlib.h>
+#include <signal.h>
+
+#include "version.h"
+#include "lyx_main.h"
+#include "lyx_gui.h"
+#include "lyx_gui_misc.h"
+#include "lyxrc.h"
+#include "pathstack.h"
+#include "filetools.h"
+#include "bufferlist.h"
+#include "error.h"
+#include "FileInfo.h"
+#include "lastfiles.h"
+#include "intl.h"
+#include "lyxserver.h"
+#include "layout.h"
+#include "gettext.h"
+
+extern void LoadLyXFile(LString const &);
+
+LString system_lyxdir;
+LString build_lyxdir;
+LString system_tempdir;
+LString user_lyxdir;   // Default $HOME/.lyx
+
+// Should this be kept global? Asger says Yes.
+Error lyxerr;
+
+LastFiles *lastfiles;
+LyXRC *lyxrc;
+
+// This is the global bufferlist object
+BufferList bufferlist;
+
+LyXServer *lyxserver = 0;
+// this should be static, but I need it in buffer.C
+bool finished = false; // flag, that we are quitting the program
+
+// convenient to have it here.
+kb_keymap *toplevel_keymap;
+
+// from spellchecker.C
+#if 0
+extern void sigchldhandler(int sig);
+#endif
+
+LyX::LyX(int *argc, char *argv[])
+{
+       // Prevent crash with --help
+       lyxGUI = 0;
+       lastfiles = 0;
+
+       // Here we need to parse the command line. At least
+       // we need to parse for "-dbg" and "-help"
+       bool gui = easyParse(argc, argv);
+
+       // Global bindings (this must be done as early as possible.) (Lgb)
+       toplevel_keymap = new kb_keymap;
+
+       lyxerr.debug("Initializing lyxrc");
+       lyxrc = new LyXRC;
+
+       // Make the GUI object, and let it take care of the
+       // command line arguments that concerns it.
+       lyxerr.debug("Initializing LyXGUI...");
+       lyxGUI = new LyXGUI(this, argc, argv, gui);
+       lyxerr.debug("Initializing LyXGUI...done");
+
+       // Initialization of LyX (reads lyxrc and more)
+       lyxerr.debug("Initializing LyX::init...");
+       init(argc, argv);
+       lyxerr.debug("Initializing LyX::init...done");
+
+       lyxGUI->init();
+
+       // Load the files specified in the command line.
+       // Now the GUI and LyX have taken care of their arguments, so
+       // the only thing left on the command line should be
+       // filenames.
+       if ((*argc)==2) 
+               lyxerr.debug("Opening document...");
+       else if ((*argc)>2)
+               lyxerr.debug("Opening documents...");
+
+       Buffer *last_loaded = NULL;
+
+       for (int argi = (*argc) - 1; argi >= 1; argi--) {
+               Buffer * loadb = bufferlist.loadLyXFile(argv[argi]);
+               if (loadb != 0) {
+                       last_loaded = loadb;
+               }
+       }
+
+       if (first_start) {
+               LString splash = i18nLibFileSearch("examples", "splash.lyx");
+               lyxerr.debug("Opening splash document "+splash+"...");
+               Buffer * loadb = bufferlist.loadLyXFile(splash);
+               if (loadb != 0) {
+                       last_loaded = loadb;
+               }
+       }
+
+       if (last_loaded != NULL) {
+               lyxerr.debug("Yes we loaded some files.");
+               lyxGUI->regBuf(last_loaded);
+       }
+       
+       // Let the ball begin...
+       lyxGUI->runTime();
+}
+
+
+// A destructor is always necessary  (asierra-970604)
+LyX::~LyX()
+{
+       if (lastfiles)
+               delete lastfiles;
+
+       if (lyxGUI)
+               delete lyxGUI;
+}
+
+
+extern "C" void error_handler(int err_sig);
+
+void LyX::init(int */*argc*/, char **argv)
+{
+       // Install the signal handlers
+       signal(SIGHUP, error_handler);
+       signal(SIGFPE, error_handler);
+       signal(SIGSEGV, error_handler);
+       signal(SIGINT, error_handler);
+       signal(SIGTERM, error_handler);
+
+#if 0
+       // Install the SIGCHLD handler
+       act_.sa_handler = sigchldhandler;
+        //act_.sa_mask = SIGCHLD;
+        act_.sa_flags = 0;
+       //act_.sa_flags = SA_RESTART; //perhaps
+        sigaction(SIGCHLD, &act_, NULL);
+#endif
+       //
+       // Determine path of binary
+       //
+
+       LString fullbinpath, binpath = argv[0];
+       binpath.subst('\\','/');
+       LString binname = OnlyFilename(argv[0]);
+       // Sorry for system specific code. (SMiyata)
+       if (binname.suffixIs(".exe")) binname.substring(0,binname.length()-5);
+       
+       binpath = ExpandPath(binpath); // This expands ./ and ~/
+       
+       if (!AbsolutePath(binpath)) {
+               LString binsearchpath = getEnvPath("PATH");
+               binsearchpath += ";."; // This will make "src/lyx" work always :-)
+               binpath = FileOpenSearch(binsearchpath, argv[0]);
+       }
+
+       fullbinpath = binpath;
+       binpath = MakeAbsPath(OnlyPath(binpath));
+
+       if (binpath.empty()) {
+               lyxerr.print(_("Warning: could not determine path of binary."));
+               lyxerr.print(_("If you have problems, try starting LyX with an absolute path."));
+       }
+       lyxerr.debug("Path of binary: " + binpath);
+
+       //
+       // Determine system directory.
+       //
+
+       // Directories are searched in this order:
+       // 1) -sysdir command line parameter
+       // 2) LYX_DIR_10x environment variable
+       // 3) Maybe <path of binary>/TOP_SRCDIR/lib
+       // 4) <path of binary>/../share/<name of binary>/
+       // 4a) repeat 4 after following the Symlink if <path of
+       //     binary> is a symbolic link.
+       // 5) hardcoded lyx_dir
+       // The directory is checked for the presence of the file
+       // "chkconfig.ltx", and if that is present, the directory
+       // is accepted as the system directory.
+       // If no chkconfig.ltx file is found, a warning is given,
+       // and the hardcoded lyx_dir is used.
+
+       // If we had a command line switch, system_lyxdir is already set
+       LString searchpath = MakeAbsPath(system_lyxdir) + ';';
+
+       // LYX_DIR_10x environment variable
+       LString lyxdir = getEnvPath("LYX_DIR_10x");
+       
+       if (!lyxdir.empty()) {
+               lyxerr.debug("LYX_DIR_10x: " + lyxdir, Error::INIT);
+               searchpath += lyxdir + ';';
+       }
+
+       // <path of binary>/TOP_SRCDIR/lib
+       build_lyxdir = MakeAbsPath("../lib", binpath);
+       if (!FileSearch(build_lyxdir, "lyxrc.defaults").empty()) {
+               searchpath += MakeAbsPath(AddPath(TOP_SRCDIR, "lib"),
+                                         binpath) + ';';
+               lyxerr.debug("Checking whether LyX is run in "
+                             "place... yes", Error::INIT);
+       } else {
+               lyxerr.debug("Checking whether LyX is run in place... no",
+                             Error::INIT);
+               build_lyxdir.clean();
+       }
+
+
+        bool FollowLink;
+       do {
+         // Path of binary/../share/name of binary/
+               searchpath += NormalizePath(AddPath(binpath, "../share/") + 
+                     OnlyFilename(binname)) + ';';
+
+         // Follow Symlinks
+               FileInfo file(fullbinpath,true);
+               FollowLink = file.isLink();
+               if (FollowLink) {
+                       LString Link;
+                       if (LyXReadLink(fullbinpath,Link)) {
+                               fullbinpath = Link;
+                               binpath = MakeAbsPath(OnlyPath(fullbinpath));
+                       }
+                       else {
+                               FollowLink = false;
+                       }
+               }
+       } while (FollowLink);
+
+       // Hardcoded dir
+       searchpath += LYX_DIR;
+
+       // If debugging, show complete search path
+       lyxerr.debug("System directory search path: "+searchpath, Error::INIT);
+
+       LString const filename = "chkconfig.ltx";
+       LString temp = FileOpenSearch(searchpath, filename, LString());
+       system_lyxdir = OnlyPath(temp);
+
+       // Reduce "path/../path" stuff out of system directory
+       system_lyxdir = NormalizePath(system_lyxdir);
+
+       bool path_shown = false;
+
+       // Warn if environment variable is set, but unusable
+       if (!lyxdir.empty()) {
+               if (system_lyxdir != NormalizePath(lyxdir)) {
+                       lyxerr.print(_("LYX_DIR_10x environment variable no good."));
+                       lyxerr.print(_("System directory set to: ") 
+                                    + system_lyxdir);
+                       path_shown = true;
+               }
+       }
+
+       // Warn the user if we couldn't find "chkconfig.ltx"
+       if (system_lyxdir.empty()) {
+               lyxerr.print(_("LyX Warning! Couldn't determine system directory."));
+               lyxerr.print(_("Try the '-sysdir' command line parameter or"));
+               lyxerr.print(_("set the environment variable LYX_DIR_10x to the "
+                             "LyX system directory"));
+               lyxerr.print(_("containing the file `chkconfig.ltx'."));
+               if (!path_shown)
+                       lyxerr.print(_("Using built-in default ") 
+                                    + LString(LYX_DIR) + _(" but expect problems."));
+               else
+                       lyxerr.print(_("Expect problems."));
+               system_lyxdir = LYX_DIR;
+               path_shown = true;
+       }
+
+       // Report the system directory if debugging is on
+       if (!path_shown)
+               lyxerr.debug("System directory: '" + system_lyxdir + '\'', 
+                             Error::INIT);
+
+       //
+       // Determine user lyx-dir
+       //
+       
+       user_lyxdir = AddPath(getEnvPath("HOME"), LString('.')+LYX_NAME);
+       lyxerr.debug("User LyX directory: '" 
+                    + user_lyxdir + '\'', Error::INIT);
+
+       // Check that user LyX directory is ok.
+       queryUserLyXDir();
+
+       //
+       // Load the layouts first
+       //
+
+       lyxerr.debug("Reading layouts...", Error::INIT);
+       LyXSetStyle();
+
+       //
+       // Shine up lyxrc defaults
+       //
+
+       // Default template path: system_dir/templates
+       if (lyxrc->template_path.empty()){
+               lyxrc->template_path = AddPath(system_lyxdir, "templates");
+       }
+   
+       // Default lastfiles file: $HOME/.lyx/lastfiles
+       if (lyxrc->lastfiles.empty()){
+               lyxrc->lastfiles = AddName(user_lyxdir, "lastfiles");
+       }
+
+       // Calculate screen dpi as average of x-DPI and y-DPI:
+       Screen * scr=(DefaultScreenOfDisplay(fl_get_display()));
+       lyxrc->dpi = ((HeightOfScreen(scr)* 25.4 / HeightMMOfScreen(scr)) +
+                     (WidthOfScreen(scr)* 25.4 / WidthMMOfScreen(scr))) / 2;
+       lyxerr.debug(LString("DPI setting detected to be ") + 
+                     int(lyxrc->dpi+0.5));
+
+       //
+       // Read configuration files
+       //
+
+       ReadRcFile("lyxrc.defaults");
+       ReadRcFile("lyxrc");
+
+       // Ensure that we have really read a bind file, so that LyX is
+       // usable.
+       if (!lyxrc->hasBindFile)
+               lyxrc->ReadBindFile();
+
+       if (lyxerr.debugging(Error::LYXRC)) {
+               lyxrc->Print();
+       }
+
+       // Create temp directory        
+       system_tempdir = CreateLyXTmpDir(lyxrc->tempdir_path);
+       if (lyxerr.debugging(Error::INIT)) {
+               lyxerr.print("LyX tmp dir: `" + system_tempdir + '\'');
+       }
+
+       // load the lastfiles mini-database
+       lyxerr.debug("Reading lastfiles `" + lyxrc->lastfiles + "'...", 
+                     Error::INIT);
+       lastfiles = new LastFiles(lyxrc->lastfiles, 
+                                 lyxrc->check_lastfiles,
+                                 lyxrc->num_lastfiles);
+
+       // start up the lyxserver. (is this a bit early?) (Lgb)
+       // 0.12 this will be way to early, we need the GUI to be initialized
+       // first, so move it for now.
+       // lyxserver = new LyXServer;
+}
+
+
+// This one is not allowed to use anything on the main form, since that
+// one does not exist yet. (Asger)
+void LyX::queryUserLyXDir()
+{
+       // Does user directory exist?
+       FileInfo fileInfo(user_lyxdir);
+       if (fileInfo.isOK() && fileInfo.isDir()) {
+               first_start = false;
+               return;
+       } else {
+               first_start = true;
+       }
+       
+       // Nope
+       if (!AskQuestion(_("You don't have a personal LyX directory."),
+                        _("It is needed to keep your own configuration."),
+                        _("Should I try to set it up for you (recommended)?"))) {
+               lyxerr.print(_("Running without personal LyX directory."));
+               // No, let's use $HOME instead.
+               user_lyxdir = getEnvPath("HOME");
+               return;
+       }
+
+       // Tell the user what is going on
+       lyxerr.print(_("LyX: Creating directory ") + user_lyxdir + _(" and running configure..."));
+
+       // Create directory structure
+       if (!createDirectory(user_lyxdir, 0755)) {
+               // Failed, let's use $HOME instead.
+               user_lyxdir = getEnvPath("HOME");
+               lyxerr.print(_("Failed. Will use ") + user_lyxdir + _(" instead."));
+               return;
+       }
+
+       // Run configure in user lyx directory
+       PathPush(user_lyxdir);
+       system(AddName(system_lyxdir,"configure").c_str());
+       PathPop();
+       lyxerr.print(LString("LyX: ") + _("Done!"));
+}
+
+
+// Read the rc file `name'
+void LyX::ReadRcFile(LString const & name)
+{
+       lyxerr.debug("About to read "+name+"...", Error::INIT);
+       
+       LString lyxrc_path = LibFileSearch(LString(), name);
+       if (!lyxrc_path.empty()){
+               lyxerr.debug("Found "+name+" in " + lyxrc_path, Error::INIT);
+               if (lyxrc->Read(lyxrc_path) < 0) { 
+                       WriteAlert(_("LyX Warning!"), 
+                                  _("Error while reading ")+lyxrc_path+".",
+                                  _("Using built-in defaults."));
+               }
+       } else
+               lyxerr.debug("Could not find "+name, Error::INIT);
+}
+
+
+// Set debugging level and report result to user
+void setDebuggingLevel(int dbgLevel)
+{
+       lyxerr.print(LString(_("Setting debug level to ")) + dbgLevel);
+       lyxerr.setDebugLevel(dbgLevel);
+       lyxerr.debug(LString("Debugging INFO #") + int(Error::INFO),
+                    Error::INFO);
+       lyxerr.debug(LString("Debugging INIT #") + int(Error::INIT),
+                    Error::INIT);
+       lyxerr.debug(LString("Debugging KEY #") + int(Error::KEY),
+                    Error::KEY);
+       lyxerr.debug(LString("Debugging TOOLBAR #") + int(Error::TOOLBAR), 
+                    Error::TOOLBAR);
+       lyxerr.debug(LString("Debugging LEX and PARSER #") +
+                    int(Error::LEX_PARSER),
+                    Error::LEX_PARSER);
+       lyxerr.debug(LString("Debugging LYXRC #") + int(Error::LYXRC),
+                    Error::LYXRC);
+       lyxerr.debug(LString("Debugging KBMAP #") + int(Error::KBMAP),
+                    Error::KBMAP);
+       lyxerr.debug(LString("Debugging LATEX #") + int(Error::LATEX),
+                    Error::LATEX);
+       lyxerr.debug(LString("Debugging MATHED #") + int(Error::MATHED), 
+                    Error::MATHED);
+       lyxerr.debug(LString("Debugging FONT #") + int(Error::FONT),
+                    Error::FONT);
+       lyxerr.debug(LString("Debugging TCLASS #") + int(Error::TCLASS), 
+                    Error::TCLASS);
+       lyxerr.debug(LString("Debugging LYXVC #") + int(Error::LYXVC),
+                    Error::LYXVC);
+       lyxerr.debug(LString("Debugging LYXSERVER #") + int(Error::LYXSERVER),
+                    Error::LYXVC);
+}
+
+
+// Give command line help
+void commandLineHelp()
+{
+       lyxerr.print(_("LyX " LYX_VERSION " of " LYX_RELEASE ".\n"));
+       lyxerr.print(_("Usage: lyx [ command line switches ] [ name.lyx ... ]\n"));
+       lyxerr.print(_("Command line switches (case sensitive):"));
+       lyxerr.print(_("   -help           summarize LyX usage"));
+       lyxerr.print(_("   -sysdir x       try to set system directory to x"));
+       lyxerr.print(_("   -width x        set the width of the main window"));
+       lyxerr.print(_("   -height y       set the height of the main window"));
+       lyxerr.print(_("   -xpos x         set the x position of the main window"));
+       lyxerr.print(_("   -ypos y         set the y position of the main window"));
+       lyxerr.print(_("   -dbg n          where n is a sum of debugging options. Try -dbg 65535 -help"));
+       lyxerr.print(_("   -Reverse        swaps foreground & background colors"));
+       lyxerr.print(_("   -Mono           runs LyX in black and white mode"));
+       lyxerr.print(_("   -FastSelection  use a fast routine for drawing selections\n"));
+       lyxerr.print(_("Check the LyX man page for more options."));
+}
+
+
+bool LyX::easyParse(int *argc, char *argv[])
+{
+       bool gui = true;
+       for(int i=1; i < *argc; i++) {
+               LString arg = argv[i];
+               // Check for -dbg int
+               if (arg == "-dbg") {
+                       if (i+1 < *argc) {
+                               int erri = 0;
+                               sscanf(argv[i+1],"%d", &erri);
+
+                               setDebuggingLevel(erri);
+
+                               // Now, remove these two arguments by shifting
+                               // the following two places down.
+                               (*argc) -= 2;
+                               for (int j=i; j < (*argc); j++)
+                                       argv[j] = argv[j+2];
+                               i--; // After shift, check this number again.
+                       } else
+                               lyxerr.print(_("Missing number for -dbg switch!"));
+               } 
+               // Check for "-sysdir"
+               else if (arg == "-sysdir") {
+                       if (i+1 < *argc) {
+                               system_lyxdir = argv[i+1];
+
+                               // Now, remove these two arguments by shifting
+                               // the following two places down.
+                               (*argc) -= 2;
+                               for (int j=i; j < (*argc); j++)
+                                       argv[j] = argv[j+2];
+                               i--; // After shift, check this number again.
+                       } else
+                               lyxerr.print(_("Missing directory for -sysdir switch!"));
+               // Check for --help or -help
+               } else if (arg == "--help" || arg == "-help") {
+                       commandLineHelp();
+                       exit(0);
+               } 
+               // Check for "-nw": No window
+               else if (arg == "-nw") {
+                       gui = false;
+               }
+       }
+       return gui;
+}
+
+
+void error_handler(int err_sig)
+{
+       switch (err_sig) {
+       case SIGHUP:
+               fprintf(stderr, "\nlyx: SIGHUP signal caught\n");
+               break;
+       case SIGINT:
+               // no comments
+               break;
+       case SIGFPE:
+               fprintf(stderr, "\nlyx: SIGFPE signal caught\n");
+               break;
+       case SIGSEGV:
+               fprintf(stderr, "\nlyx: SIGSEGV signal caught\n");
+               fprintf(stderr,
+                       "Sorry, you have found a bug in LyX."
+                       " If possible, please read 'Known bugs'\n"
+                       "under the Help menu and then send us "
+                       "a full bug report. Thanks!\n");
+               break;
+       case SIGTERM:
+               // no comments
+               break;
+       }
+   
+       // Deinstall the signal handlers
+       signal(SIGHUP, SIG_DFL);
+       signal(SIGINT, SIG_DFL);
+       signal(SIGFPE, SIG_DFL);
+       signal(SIGSEGV, SIG_DFL);
+       signal(SIGTERM, SIG_DFL);
+
+       bufferlist.emergencyWriteAll();
+
+       lyxerr.print("Bye.");
+       if(err_sig!=SIGHUP && (getenv("LYXDEBUG") || err_sig == SIGSEGV))
+               abort();
+       exit(0);
+}
diff --git a/src/lyx_main.h b/src/lyx_main.h
new file mode 100644 (file)
index 0000000..3730881
--- /dev/null
@@ -0,0 +1,88 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 1996 Matthias Ettrich
+*           and the LyX Team.
+*
+*======================================================*/
+
+/* This is the declaration of the LyX class, there should only
+ * exist _one_ instance of this in the application. */
+
+#ifndef _LYX_MAIN_H_
+#define _LYX_MAIN_H_
+
+#include <signal.h>
+
+class LyXGUI;
+class LyXRC;
+class LastFiles;
+class Buffer;
+class LString;
+
+extern LString system_lyxdir;
+extern LString user_lyxdir;
+extern LString system_tempdir;
+
+extern LastFiles *lastfiles; /* we should hopefully be able to move this
+                             * inside the LyX class */
+
+extern LyXRC *lyxrc;
+
+
+/**
+  This is the main LyX object it encapsulates most of the other objects.
+*/
+class LyX
+{
+public:
+       /**@name Constructors and Deconstructors */
+       //@{
+       /// the only allowed constructor
+       LyX(int *argc, char *argv[]); // constructor
+       // Always is useful a destructor
+       ~LyX();
+       //@}
+
+       /**@name Pointers to... */
+       //@{
+       ///
+       LyXGUI *lyxGUI;  // should be only one of this
+       //@}
+private:
+       /**@name Constructors and Deconstructors */
+       //@{
+       /// not allowed
+       LyX(const LyX &){;} // not allowed
+       /// not allowed
+       LyX(){;} // not allowed
+       //@}
+
+       /**@name Private variables */
+       //@{
+       /// does this user start lyx for the first time?
+       bool first_start;
+       ///
+       struct sigaction act_;
+       //@}
+       /**@name Private Members */
+       //@{
+       ///
+       void runtime();
+       ///
+       void init(int *argc, char *argv[]);
+       ///
+       void queryUserLyXDir();
+       ///
+        void ReadRcFile(LString const & name);
+        ///
+       bool easyParse(int *argc, char *argv[]);
+       //@}
+};
+
+#endif
+
+
diff --git a/src/lyx_sendfax.C b/src/lyx_sendfax.C
new file mode 100644 (file)
index 0000000..1fa7b91
--- /dev/null
@@ -0,0 +1,119 @@
+// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "lyx_sendfax.h"
+
+FD_xsendfax *create_form_xsendfax(void)
+{
+  FL_OBJECT *obj;
+  FD_xsendfax *fdui = (FD_xsendfax *) fl_calloc(1, sizeof(FD_xsendfax));
+
+  fdui->xsendfax = fl_bgn_form(FL_NO_BOX, 600, 330);
+  obj = fl_add_box(FL_UP_BOX,0,0,600,330,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,15,465,125,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  fdui->Input_Phone = obj = fl_add_input(FL_NORMAL_INPUT,90,30,377,30,idex(_("Fax no.:|#F")));fl_set_button_shortcut(obj,scex(_("Fax no.:|#F")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->Input_Name = obj = fl_add_input(FL_NORMAL_INPUT,90,65,377,29,idex(_("Dest. Name:|#N")));fl_set_button_shortcut(obj,scex(_("Dest. Name:|#N")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->Input_Enterprise = obj = fl_add_input(FL_NORMAL_INPUT,90,100,377,29,idex(_("Enterprise:|#E")));fl_set_button_shortcut(obj,scex(_("Enterprise:|#E")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->Input_Comment = obj = fl_add_input(FL_MULTILINE_INPUT,15,165,575,106,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+    fl_set_object_lstyle(obj,FL_NORMAL_STYLE+FL_EMBOSSED_STYLE);
+  fdui->Button_Send = obj = fl_add_button(FL_NORMAL_BUTTON,20,290,180,30,idex(_("OK|#O")));fl_set_button_shortcut(obj,scex(_("OK|#O")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+    fl_set_object_callback(obj,FaxSendCB,0);
+  fdui->Button_Cancel = obj = fl_add_button(FL_NORMAL_BUTTON,400,290,180,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+    fl_set_object_callback(obj,FaxCancelCB,0);
+  fdui->Button_Apply = obj = fl_add_button(FL_NORMAL_BUTTON,210,290,180,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+    fl_set_object_callback(obj,FaxApplyCB,0);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,485,30,105,100,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_text(FL_NORMAL_TEXT,490,20,95,20,_("Phone Book"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->Button_SPhone = obj = fl_add_button(FL_NORMAL_BUTTON,490,45,15,15,idex(_("Select from|#S")));fl_set_button_shortcut(obj,scex(_("Select from|#S")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj,FaxOpenPhonebookCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,490,65,15,15,idex(_("Add to|#t")));fl_set_button_shortcut(obj,scex(_("Add to|#t")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj,cb_add_phoneno,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,490,85,15,15,idex(_("Delete from|#D")));fl_set_button_shortcut(obj,scex(_("Delete from|#D")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj,cb_delete_phoneno,0);
+  fdui->pb_save = obj = fl_add_button(FL_NORMAL_BUTTON,490,105,15,15,idex(_("Save|#V")));fl_set_button_shortcut(obj,scex(_("Save|#V")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_RIGHT);
+    fl_set_object_callback(obj,cb_save_phoneno,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,15,5,100,20,_("Destination:"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,155,585,125,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_text(FL_NORMAL_TEXT,15,145,85,20,_("Comment:"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fl_end_form();
+
+  //fdui->xsendfax->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_phonebook *create_form_phonebook(void)
+{
+  FL_OBJECT *obj;
+  FD_phonebook *fdui = (FD_phonebook *) fl_calloc(1, sizeof(FD_phonebook));
+
+  fdui->phonebook = fl_bgn_form(FL_NO_BOX, 600, 320);
+  obj = fl_add_box(FL_UP_BOX,0,0,600,320,"");
+  fdui->browser = obj = fl_add_browser(FL_HOLD_BROWSER,2,2,598,318,"");
+    fl_set_object_lsize(obj,FL_MEDIUM_SIZE);
+    fl_set_object_callback(obj,cb_select_phoneno,0);
+  fl_end_form();
+
+  //fdui->phonebook->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_logfile *create_form_logfile(void)
+{
+  FL_OBJECT *obj;
+  FD_logfile *fdui = (FD_logfile *) fl_calloc(1, sizeof(FD_logfile));
+
+  fdui->logfile = fl_bgn_form(FL_NO_BOX, 510, 190);
+  obj = fl_add_box(FL_UP_BOX,0,0,510,190,"");
+  fdui->browser = obj = fl_add_browser(FL_NORMAL_BROWSER,10,10,490,130,"");
+  fdui->Button_Close = obj = fl_add_button(FL_RETURN_BUTTON,410,150,90,30,_("Close"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,FaxLogfileCloseCB,0);
+  fl_end_form();
+
+  //fdui->logfile->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
diff --git a/src/lyx_sendfax.h b/src/lyx_sendfax.h
new file mode 100644 (file)
index 0000000..271adff
--- /dev/null
@@ -0,0 +1,58 @@
+/** Header file generated with fdesign on Mon Apr 12 19:09:42 1999.**/
+
+#ifndef FD_xsendfax_h_
+#define FD_xsendfax_h_
+
+/** Callbacks, globals and object handlers **/
+extern void FaxSendCB(FL_OBJECT *, long);
+extern void FaxCancelCB(FL_OBJECT *, long);
+extern void FaxApplyCB(FL_OBJECT *, long);
+extern void FaxOpenPhonebookCB(FL_OBJECT *, long);
+extern void cb_add_phoneno(FL_OBJECT *, long);
+extern void cb_delete_phoneno(FL_OBJECT *, long);
+extern void cb_save_phoneno(FL_OBJECT *, long);
+
+extern void cb_select_phoneno(FL_OBJECT *, long);
+
+extern void FaxLogfileCloseCB(FL_OBJECT *, long);
+
+
+/**** Forms and Objects ****/
+typedef struct {
+       FL_FORM *xsendfax;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *Input_Phone;
+       FL_OBJECT *Input_Name;
+       FL_OBJECT *Input_Enterprise;
+       FL_OBJECT *Input_Comment;
+       FL_OBJECT *Button_Send;
+       FL_OBJECT *Button_Cancel;
+       FL_OBJECT *Button_Apply;
+       FL_OBJECT *Button_SPhone;
+       FL_OBJECT *pb_save;
+} FD_xsendfax;
+
+extern FD_xsendfax * create_form_xsendfax(void);
+typedef struct {
+       FL_FORM *phonebook;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *browser;
+} FD_phonebook;
+
+extern FD_phonebook * create_form_phonebook(void);
+typedef struct {
+       FL_FORM *logfile;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *browser;
+       FL_OBJECT *Button_Close;
+} FD_logfile;
+
+extern FD_logfile * create_form_logfile(void);
+
+#endif /* FD_xsendfax_h_ */
diff --git a/src/lyx_sendfax_main.C b/src/lyx_sendfax_main.C
new file mode 100644 (file)
index 0000000..1040270
--- /dev/null
@@ -0,0 +1,337 @@
+
+#include <config.h>
+
+#include <stdlib.h>
+#include FORMS_H_LOCATION
+#include "error.h"
+#include "lyx_sendfax.h"
+#include "lyx_main.h"
+#include "lyxrc.h"
+#include "filetools.h"
+#include "lyx_gui_misc.h" // CancelCloseBoxCB
+#include "syscall.h"
+#include "gettext.h"
+
+//     $Id: lyx_sendfax_main.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $  
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lyx_sendfax_main.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+/* Prototypes */
+
+bool sendfax(LString const &fname, LString const &sendcmd);
+bool button_send(LString const &fname, LString const &sendcmd = LString());
+void show_logfile(LString logfile, bool show_if_empty);
+
+const int LEN_PHONE = 20;
+const int LEN_NAME = 25;
+
+/* Global Variables */
+
+LString phone_book;
+LString global_sendcmd;
+LString filename;
+
+FD_xsendfax *fd_xsendfax;
+FD_phonebook  *fd_phonebook;
+FD_logfile  *fd_logfile;
+
+bool send_fax(LString const &fname, LString const &sendcmd)
+{
+    // I put FAXCMD here to see if I can get rid of some strange errors. (Lgb)
+    LString FAXCMD = "sendfax -n -h '$$Host' -c '$$Comment' -x '$$Enterprise' -d '$$Name'@'$$Phone' '$$FName'";
+    LString title = _("Fax File: ");
+    LString path;
+    
+    if (fname.empty())
+        return false;
+    path=OnlyPath(fname);
+    if (path.empty() || path == "./")
+        filename = GetCWD() + "/" + fname;
+    else
+        filename = fname;
+
+    if (sendcmd.empty())
+           global_sendcmd = FAXCMD;
+    else
+           global_sendcmd = sendcmd;
+    
+    fd_xsendfax = create_form_xsendfax();
+    fd_phonebook = create_form_phonebook();
+    fd_logfile = create_form_logfile();
+
+    // Make sure the close box doesn't kill LyX when being pressed. (RvdK)
+    fl_set_form_atclose(fd_xsendfax->xsendfax, CancelCloseBoxCB, NULL);
+    fl_set_form_atclose(fd_phonebook->phonebook, CancelCloseBoxCB, NULL);
+    fl_set_form_atclose(fd_logfile->logfile, CancelCloseBoxCB, NULL);
+
+    /* init Phone-Book */
+    LString phone_book_name;
+    if (lyxrc->phone_book.empty()) {
+        phone_book_name = "phonebook";
+    } else
+        phone_book_name = lyxrc->phone_book;
+    phone_book=FileSearch(user_lyxdir,phone_book_name);
+    if (phone_book.empty()) 
+        phone_book = AddName(user_lyxdir,phone_book_name);
+
+    fl_set_browser_fontsize(fd_phonebook->browser, FL_NORMAL_SIZE);
+    fl_set_browser_fontstyle(fd_phonebook->browser, FL_FIXED_STYLE);
+    fl_load_browser(fd_phonebook->browser, phone_book.c_str());
+
+    title += OnlyFilename(fname);
+
+    /* show the first form */
+    fl_show_form(fd_xsendfax->xsendfax,FL_PLACE_MOUSE,FL_FULLBORDER,title.c_str());
+/*
+    while(true) {
+        obj = fl_do_forms();
+        if (obj==fd_xsendfax->Button_Cancel)
+            break;
+        else if (obj==fd_xsendfax->Button_Send) {
+            if (button_send(fname,global_sendcmd))
+                break;
+        } else if (obj==fd_xsendfax->Button_Apply) {
+            button_send(fname,global_sendcmd);
+        } else if (obj==fd_xsendfax->Button_SPhone) {
+            cb_select_phoneno(NULL,0);
+        }
+    }
+    fl_hide_form(fd_xsendfax->xsendfax);
+*/
+    return true;
+}
+
+
+bool button_send(LString const &fname, LString const &sendcmd)
+{
+    LString
+        name = fl_get_input(fd_xsendfax->Input_Name),
+        phone = fl_get_input(fd_xsendfax->Input_Phone),
+        enterprise = fl_get_input(fd_xsendfax->Input_Enterprise),
+        comment = fl_get_input(fd_xsendfax->Input_Comment),
+        host = getenv("FAX_SERVER"),
+        logfile,
+        cmd;
+
+    if (phone.empty())
+        return false;
+    logfile = TmpFileName(OnlyPath(fname),"FAX");
+    cmd = sendcmd + " >";
+    cmd += logfile + " 2>";
+    cmd += logfile;
+    cmd.subst("$$Host",host);
+    cmd.subst("$$Comment",comment);
+    cmd.subst("$$Enterprise",enterprise);
+    cmd.subst("$$Name",name);
+    cmd.subst("$$Phone",phone);
+    cmd.subst("$$FName",fname);
+    lyxerr.print("CMD: "+cmd);
+    Systemcalls one(Systemcalls::System, cmd);
+    show_logfile(logfile,false);
+    remove(logfile.c_str());
+    return true;
+}
+
+
+void cb_hide_form(FL_OBJECT *ob, long)
+{
+    fl_hide_form(ob->form);
+}
+
+
+void cb_select_phoneno(FL_OBJECT *, long)
+{
+    int
+        i,
+        n=fl_get_browser_maxline(fd_phonebook->browser);
+    char const
+        *line;
+
+    fl_hide_form(fd_phonebook->phonebook);
+    line = fl_get_browser_line(fd_phonebook->browser, 1);
+    if (!n || strstr(line,_("Empty Phonebook"))) {
+        fl_clear_browser(fd_phonebook->browser);
+        return;
+    }
+    i = fl_get_browser(fd_phonebook->browser);
+    line = fl_get_browser_line(fd_phonebook->browser, i);
+    if (!line)
+        return;
+    char *buf = new char [strlen(line)+1];
+
+    strcpy(buf,line);
+    for(i = LEN_PHONE;(i>0) && (buf[i]==' ');i--)
+        ;
+    buf[i+1] = 0;
+    for(i = LEN_PHONE+LEN_NAME+1;(i>LEN_PHONE) && (buf[i]==' ');i--)
+        ;
+    buf[i+1] = 0;
+    fl_set_input(fd_xsendfax->Input_Phone,buf);
+    fl_set_input(fd_xsendfax->Input_Name,buf+LEN_PHONE+1);
+    fl_set_input(fd_xsendfax->Input_Enterprise,buf+LEN_PHONE+LEN_NAME+2);
+    delete [] buf;
+}
+
+
+void cb_add_phoneno(FL_OBJECT *, long )
+{
+    char const
+        *line;
+    char const
+        *name = fl_get_input(fd_xsendfax->Input_Name),
+        *phone = fl_get_input(fd_xsendfax->Input_Phone),
+        *enterprise = fl_get_input(fd_xsendfax->Input_Enterprise);
+    int
+        i,n;
+
+    if (!strlen(phone))
+        return;
+
+    char *buf = new char [50+strlen(enterprise)];
+
+    sprintf(buf,"%-*.*s %-*.*s %s",
+            LEN_PHONE,LEN_PHONE,phone,
+            LEN_NAME,LEN_NAME,name,
+            enterprise);
+    n = fl_get_browser_maxline(fd_phonebook->browser);
+    if (n) {
+        line = fl_get_browser_line(fd_phonebook->browser, 1);
+        if (strstr(line,_("Empty Phonebook"))) {
+            fl_clear_browser(fd_phonebook->browser);
+            n = 0;
+        }
+    }
+    for(i = 1; i <= n; i++) {
+        line = fl_get_browser_line(fd_phonebook->browser, i);
+        if (!strncmp(buf,line,46))
+            break;
+    }
+    if (i > n) {
+        fl_addto_browser(fd_phonebook->browser,buf);
+        fl_set_object_label(fd_xsendfax->pb_save, _("Save (needed)"));
+    }
+    delete[] buf;
+}
+
+
+void cb_delete_phoneno(FL_OBJECT *, long )
+{
+    char const
+        *line;
+    char const
+        *name = fl_get_input(fd_xsendfax->Input_Name),
+        *phone = fl_get_input(fd_xsendfax->Input_Phone),
+        *enterprise = fl_get_input(fd_xsendfax->Input_Enterprise);
+    int
+        i,n;
+
+    if (!strlen(phone))
+        return;
+    char *buf = new char [50+strlen(enterprise)];
+    sprintf(buf,"%-*.*s %-*.*s %s",
+            LEN_PHONE,LEN_PHONE,phone,
+            LEN_NAME,LEN_NAME,name,
+            enterprise);
+    n = fl_get_browser_maxline(fd_phonebook->browser);
+    if (n) {
+        line = fl_get_browser_line(fd_phonebook->browser, 1);
+        if (strstr(line,_("Empty Phonebook"))) {
+            fl_clear_browser(fd_phonebook->browser);
+            n = 0;
+        }
+    }
+    for(i=1;i<=n;i++) {
+        line = fl_get_browser_line(fd_phonebook->browser, i);
+        if (!strncmp(buf,line,46))
+            break;
+    }
+    if (i <= n) {
+        fl_delete_browser_line(fd_phonebook->browser,i);
+        fl_set_object_label(fd_xsendfax->pb_save, _("Save (needed)"));
+    }
+    delete[] buf;
+}
+
+
+void cb_save_phoneno(FL_OBJECT *, long )
+{
+    char const
+        *line;
+    int
+        i,n;
+    FILE
+        *fp;
+
+    if (!(fp = fopen(phone_book.c_str(),"w"))) {
+        WriteAlert(_("Error!"),_("Cannot open phone book: "),phone_book);
+        return;
+    }
+    n = fl_get_browser_maxline(fd_phonebook->browser);
+    if (n) {
+        line = fl_get_browser_line(fd_phonebook->browser, 1);
+        if (strstr(line,_("Empty Phonebook"))) {
+            fl_clear_browser(fd_phonebook->browser);
+            n = 0;
+        }
+    }
+    for(i=1;i<=n;i++) {
+        line = fl_get_browser_line(fd_phonebook->browser, i);
+        fprintf(fp,"%s\n",line);
+    }
+    fclose(fp);
+    fl_set_object_label(fd_xsendfax->pb_save, _("Save"));
+    fl_redraw_form(fd_xsendfax->xsendfax);
+}
+
+void show_logfile(LString logfile, bool show_if_empty)
+{
+    if (logfile.empty())
+        return;
+    if (!fl_load_browser(fd_logfile->browser,logfile.c_str())) {
+        if (!show_if_empty)
+            return;
+        fl_add_browser_line(fd_logfile->browser,
+                            _("NO OR EMPTY LOGFILE!"));
+    }
+    if (fd_logfile->logfile->visible) {
+        fl_raise_form(fd_logfile->logfile);
+    } else {
+        fl_show_form(fd_logfile->logfile,
+                     FL_PLACE_MOUSE | FL_FREE_SIZE,FL_FULLBORDER,
+                     _("Message-Window"));
+    }
+}
+
+void FaxLogfileCloseCB(FL_OBJECT *, long)
+{
+    fl_hide_form(fd_logfile->logfile);
+}
+
+void FaxCancelCB(FL_OBJECT *, long)
+{
+    fl_hide_form(fd_xsendfax->xsendfax);
+}
+
+void FaxApplyCB(FL_OBJECT *, long)
+{
+    button_send(filename,global_sendcmd);
+}
+
+void FaxSendCB(FL_OBJECT *, long)
+{
+    if (button_send(filename,global_sendcmd))
+        FaxCancelCB(NULL,0);
+}
+
+void FaxOpenPhonebookCB(FL_OBJECT *, long)
+{
+    int
+        n=fl_get_browser_maxline(fd_phonebook->browser);
+
+    if (!n)
+        fl_addto_browser(fd_phonebook->browser,_("@L@b@cEmpty Phonebook"));
+    fl_show_form(fd_phonebook->phonebook,FL_PLACE_MOUSE,FL_FULLBORDER,
+                 _("Phonebook"));
+}
diff --git a/src/lyx_sty.C b/src/lyx_sty.C
new file mode 100644 (file)
index 0000000..a0146ed
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+  This file is part of
+  ======================================================
+  
+  LyX, The Document Processor
+  
+  Copyright (C) 1995 Matthias Ettrich
+  Copyright (C) 1995-1998 The LyX Team.
+  ======================================================
+  */
+
+#include <config.h>
+
+#include "lyx_sty.h"
+
+//\NeedsTeXFormat{LaTeX2e}
+//\ProvidesPackage{lyx}[1996/01/11 LLE v0.2 (LyX LaTeX Extensions)]
+//\message{LyX LaTeX Extensions (LLE v0.2) of 11-Jan-1996.} 
+
+// include this always
+LString const lyx_def =
+       "\\providecommand{\\LyX}{L\\kern-.1667em\\lower.25em\\hbox{Y}\\kern-.125emX\\@}";
+       
+LString const lyxline_def =
+       "\\newcommand{\\lyxline}[1]{\n"
+       "  {#1 \\vspace{1ex} \\hrule width \\columnwidth \\vspace{1ex}}\n"
+       "}";
+
+LString const noun_def = "\\newcommand{\\noun}[1]{\\textsc{#1}}";
+
+LString const lyxarrow_def = 
+      "\\newcommand{\\lyxarrow}{\\leavevmode\\,$\\triangleright$\\,\\allowbreak}";
+
+// for quotes without babel. This does not give perfect results, but
+// anybody serious about non-english quotes should use babel (JMarc).
+
+
+
+LString const quotedblbase_def =
+       "\\ProvideTextCommandDefault{\\quotedblbase}{%\n"
+       "  \\raisebox{-1.4ex}[1ex][.5ex]{\\textquotedblright}%\n"
+       "  \\penalty10000\\hskip0em\\relax%\n"
+       "}";
+
+LString const quotesinglbase_def =
+       "\\ProvideTextCommandDefault{\\quotesinglbase}{%\n"
+       "  \\raisebox{-1.4ex}[1ex][.5ex]{\\textquoteright}%\n"
+       "  \\penalty10000\\hskip0em\\relax%\n"
+       "}";
+
+LString const guillemotleft_def =
+        "\\ProvideTextCommandDefault{\\guillemotleft}{%\n"
+        "  {\\usefont{U}{lasy}{m}{n}\\char'50\\kern-.15em\\char'50}%\n"
+        "\\penalty10000\\hskip0pt\\relax%\n"
+        "}";
+
+LString const guillemotright_def =
+        "\\ProvideTextCommandDefault{\\guillemotright}{%\n"
+        "  \\penalty10000\\hskip0pt%\n"
+        "  {\\usefont{U}{lasy}{m}{n}\\char'51\\kern-.15em\\char'51}%\n"
+        "}";
+
+LString const guilsinglleft_def =
+        "\\ProvideTextCommandDefault{\\guilsinglleft}{%\n"
+        "  {\\usefont{U}{lasy}{m}{n}\\char'50}%\n"
+        "  \\penalty10000\\hskip0pt\\relax%\n"
+        "}";
+
+LString const guilsinglright_def =
+        "\\ProvideTextCommandDefault{\\guilsinglright}{%\n"
+        "  \\penalty10000\\hskip0pt%\n"
+        "  {\\usefont{U}{lasy}{m}{n}\\char'51}%\n"
+        "}";
+
+LString const paragraphindent_def =
+       "\\newenvironment{LyXParagraphIndent}[1]%\n"
+       "{\n"
+       "  \\begin{list}{}{%\n"
+       "    \\setlength\\topsep{0pt}%\n"
+       "    \\addtolength{\\leftmargin}{#1}\n"
+//     "%%    \\addtolength{\\leftmargin}{#1\\textwidth}\n"
+//     "%%    \\setlength{\\textwidth}{#2\\textwidth}\n"
+//     "%%    \\setlength\\listparindent\\parindent%\n"
+//     "%%    \\setlength\\itemindent\\parindent%\n"
+       "    \\setlength\\parsep{0pt plus 1pt}%\n"
+       "  }\n"
+       "  \\item[]\n"
+       "}\n"
+       "{\\end{list}}\n";
+
+LString const floatingfootnote_def =
+       "%% Special footnote code from the package 'stblftnt.sty'\n"
+       "%% Author: Robin Fairbairns -- Last revised Dec 13 1996\n"
+       "\\let\\SF@@footnote\\footnote\n"
+       "\\def\\footnote{\\ifx\\protect\\@typeset@protect\n"
+       "    \\expandafter\\SF@@footnote\n"
+       "  \\else\n"
+       "    \\expandafter\\SF@gobble@opt\n"
+       "  \\fi\n"
+       "}\n"
+       "\\expandafter\\def\\csname SF@gobble@opt \\endcsname{\\@ifnextchar[%]\n"
+       "  \\SF@gobble@twobracket\n"
+       "  \\@gobble\n"
+       "}\n"
+       "\\edef\\SF@gobble@opt{\\noexpand\\protect\n"
+       "  \\expandafter\\noexpand\\csname SF@gobble@opt \\endcsname}\n"
+       "\\def\\SF@gobble@twobracket[#1]#2{}\n";
+
+LString const minipageindent_def =
+       "%% This length is the backup for minipages of the \\parindent\n"
+       "\\newlength{\\LyXMinipageIndent}\n"
+       "\\setlength{\\LyXMinipageIndent}{\\parindent}\n";
+
+LString const boldsymbol_def =
+       "%% Bold symbol macro for standard LaTeX users\n"
+       "\\newcommand{\\boldsymbol}[1]{\\mbox{\\boldmath $#1$}}\n";
+
+LString const binom_def =
+       "%% Binom macro for standard LaTeX users\n"
+       "\\newcommand{\\binom}[2]{{#1 \\choose #2}}\n";
+
diff --git a/src/lyx_sty.h b/src/lyx_sty.h
new file mode 100644 (file)
index 0000000..d431d40
--- /dev/null
@@ -0,0 +1,48 @@
+// -*- C++ -*-
+/*
+  This file is part of
+  ======================================================
+  
+  LyX, The Document Processor
+  
+  Copyright (C) 1995 Matthias Ettrich
+  
+  ======================================================
+  */
+
+#ifndef _LYX_STY_H
+#define _LYX_STY_H
+
+#include "LString.h"
+
+// This seems to be fixed now (JMarc)
+//#ifdef WITH_WARNINGS
+//#warning README!!
+//#endif
+// I suddenly began to get segfaults in guilsinglleft_def and had no clue
+// on why this happened, then I tried a rewrite and added lyx_sty.C. Now
+// the segfault has moved to bibcombox... It seems that we(or gcc) have a
+// problem with static (non-pointer) objects , if someone knows why please
+// tell me. I am using gcc 2.7.2.1 (Linux) and when I get this segfault it
+// always has to do with a static object of some kind... I tried to rewrite
+// the objects causing the segfault, but the segfault then just moves to
+// another object. I'll let some others have a look now... (Lgb)
+
+// include this always
+extern LString const lyx_def;
+extern LString const lyxline_def;
+extern LString const noun_def;
+extern LString const lyxarrow_def;
+extern LString const quotedblbase_def;
+extern LString const quotesinglbase_def;
+extern LString const guillemotleft_def;
+extern LString const guillemotright_def;
+extern LString const guilsinglleft_def;
+extern LString const guilsinglright_def;
+extern LString const paragraphindent_def;
+extern LString const floatingfootnote_def;
+extern LString const minipageindent_def;
+extern LString const boldsymbol_def;
+extern LString const binom_def;
+
+#endif
diff --git a/src/lyxcursor.h b/src/lyxcursor.h
new file mode 100644 (file)
index 0000000..322dd38
--- /dev/null
@@ -0,0 +1,33 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+#ifndef _LYXCURSOR_H
+#define _LYXCURSOR_H
+
+class LyXParagraph;
+struct Row;
+
+/** All these variavles should be explained. Matthias?
+ */
+struct LyXCursor {
+       ///
+       LyXParagraph *par;
+       ///
+       int pos;
+       ///
+       int x;
+       ///
+       int x_fix;
+       ///
+       long y;
+       ///
+       Row *row;
+};
+
+#endif
diff --git a/src/lyxdraw.C b/src/lyxdraw.C
new file mode 100644 (file)
index 0000000..1d7c97d
--- /dev/null
@@ -0,0 +1,540 @@
+#include <config.h>
+
+#include "lyxdraw.h"
+#include "error.h"
+
+extern int reverse_video;
+extern int mono_video;
+extern char label_color[];
+extern char math_color[];
+extern char math_frame_color[];
+extern char latex_color[];
+extern char foot_color[];
+extern char new_line_color[];
+extern char fill_color[];
+extern int fast_selection;
+extern char on_off_line_color[];
+extern LString background_color;
+extern char lighted_color[];
+extern char selection_color[];
+extern char note_color[];
+extern char note_frame_color[];
+
+Colormap color_map = 0;
+long int background_pixels;
+
+// X11 color names
+char const * const X11Color[11] =
+{ "black", "black", "white", "red", "green", "blue", "cyan", "magenta", 
+  "yellow", "black", "black" };
+// Different graphic contexts
+static GC clear_gc = NULL;
+static GC latex_gc = NULL;
+static GC foot_gc = NULL;
+static GC new_line_gc = NULL;
+static GC math_gc = NULL;
+static GC math_frame_gc = NULL;
+static GC fill_gc = NULL;
+static GC note_gc = NULL;
+static GC note_frame_gc = NULL;
+static GC copy_gc = NULL;
+static GC select_gc = NULL;
+static GC on_off_line_gc = NULL;
+static GC thin_on_off_line_gc = NULL;
+static GC thick_line_gc = NULL;
+static GC lighted_gc = NULL;
+static GC selection_gc = NULL;
+static GC accent_gc[10] = { NULL, NULL, NULL, NULL, NULL,
+                           NULL, NULL, NULL, NULL, NULL };
+static GC color_gc[11] = { NULL, NULL, NULL, NULL, NULL, NULL,
+                          NULL, NULL, NULL, NULL, NULL };
+static GC minipage_gc = NULL;
+
+
+// Allocates color and sets it as foreground
+// Returns "false" if unsuccesful
+bool setForegroundColor(char const * const color, XGCValues & val)
+{
+       XColor xcol;
+       if (!color_map) {
+               color_map = fl_state[fl_get_vclass()].colormap;
+       }
+       if (!mono_video) {
+               if (XParseColor(fl_display, color_map, color, &xcol)
+                   && XAllocColor(fl_display, color_map, &xcol))
+               {
+                       val.foreground = xcol.pixel;
+               } else {
+                       lyxerr.print(LString("LyX: Couldn't get color ") + color);
+                       return false;
+               }
+       }
+       return true;
+}
+
+
+static
+void do_reverse_video(XGCValues &val)
+{
+       if (reverse_video) {
+               val.foreground=WhitePixel(fl_display,
+                                         DefaultScreen(fl_display));
+               val.background=BlackPixel(fl_display,
+                                         DefaultScreen(fl_display));
+       } else {
+               val.foreground=BlackPixel(fl_display,
+                                         DefaultScreen(fl_display));
+               val.background=WhitePixel(fl_display,
+                                         DefaultScreen(fl_display));
+       }
+}
+
+
+static
+GC make_normal_gc(const char* color)
+{
+       XGCValues val;
+       do_reverse_video(val);
+       val.function = GXcopy;
+       val.graphics_exposures = false;
+       setForegroundColor(color, val);
+       return XCreateGC(fl_display, fl_root,
+                        GCBackground | GCForeground | GCFunction |
+                        GCGraphicsExposures, &val);
+}
+
+
+static
+GC GetNoteGC()
+{
+       if (note_gc) return note_gc;
+       
+       note_gc = make_normal_gc(note_color);
+
+       return note_gc;
+}
+
+
+static
+GC GetNoteFrameGC()
+{
+       if (note_frame_gc) return note_frame_gc;
+       
+       note_frame_gc = make_normal_gc(note_frame_color);
+
+       return note_frame_gc;
+}
+
+
+static
+GC GetMathGC()
+{
+       if (math_gc) return math_gc;
+       
+       math_gc = make_normal_gc(math_color);
+
+       return math_gc;
+}
+
+
+static
+GC GetLatexGC()
+{
+       if (latex_gc) return latex_gc;
+
+       XGCValues val;
+       if (reverse_video ^ mono_video) {
+               val.foreground=WhitePixel(fl_display, DefaultScreen(fl_display));
+               val.background=BlackPixel(fl_display, DefaultScreen(fl_display));
+       } else {
+               val.foreground=BlackPixel(fl_display, DefaultScreen(fl_display));
+               val.background=WhitePixel(fl_display, DefaultScreen(fl_display));
+       }
+       val.function=GXcopy;
+       val.graphics_exposures = false;
+       setForegroundColor(latex_color, val);
+       latex_gc = XCreateGC(fl_display, fl_root, GCBackground 
+                            | GCForeground | GCFunction | GCGraphicsExposures, 
+                            &val);
+       XFlush(fl_display);
+       
+       return latex_gc;
+}
+
+
+static
+GC GetFootGC()
+{
+       if (foot_gc) return foot_gc;
+       
+       foot_gc = make_normal_gc(foot_color);
+       
+       return foot_gc;
+}
+
+
+static
+GC GetNewLineGC()
+{
+        if (new_line_gc) return new_line_gc;
+        new_line_gc = make_normal_gc(new_line_color);
+        return new_line_gc;
+}
+static
+GC GetMathFrameGC()
+{
+       if (math_frame_gc) return math_frame_gc;
+       
+       math_frame_gc = make_normal_gc(math_frame_color);
+       
+       return math_frame_gc;
+}
+
+
+static
+GC GetFillGC()
+{
+       if (fill_gc) return fill_gc;
+       
+       fill_gc = make_normal_gc(fill_color);
+       
+       return fill_gc;
+}
+
+
+static
+GC GetClearGC()
+{
+       if (clear_gc) return clear_gc;
+       
+       XGCValues val;
+
+       if (reverse_video) {
+               val.foreground=BlackPixel(fl_display,
+                                         DefaultScreen(fl_display));
+               val.background=WhitePixel(fl_display,
+                                         DefaultScreen(fl_display));
+       } else {
+               val.background=BlackPixel(fl_display,
+                                         DefaultScreen(fl_display));
+               val.foreground=WhitePixel(fl_display,
+                                         DefaultScreen(fl_display));
+       }
+       val.function=GXcopy;
+       val.graphics_exposures = false;
+       if (!fast_selection && background_color != "white") {
+               setForegroundColor(background_color.c_str(), val);
+       }
+       background_pixels = val.foreground;
+       
+       clear_gc = XCreateGC(fl_display, fl_root, GCBackground 
+                            | GCForeground | GCFunction | GCGraphicsExposures, 
+                            &val);
+       XFlush(fl_display);
+       
+       return clear_gc;
+}
+
+
+static
+GC GetOnOffLineGC()
+{
+       if (on_off_line_gc) return on_off_line_gc;
+       
+       XGCValues val;
+       do_reverse_video(val);
+
+       val.function=GXcopy;
+       val.graphics_exposures = false;
+       setForegroundColor(on_off_line_color, val);
+       val.line_width = 0;
+       val.line_style = LineOnOffDash;
+       on_off_line_gc = XCreateGC(fl_display, fl_root,
+                                  GCBackground | GCForeground | GCFunction |
+                                  GCGraphicsExposures | GCLineWidth |
+                                  GCLineStyle , &val);
+       XFlush(fl_display);
+
+       return on_off_line_gc;
+}
+
+
+static
+GC GetThickLineGC()
+{
+       if (thick_line_gc) return thick_line_gc;
+       XGCValues val;
+       do_reverse_video(val);
+
+       val.function=GXcopy;
+       val.graphics_exposures = false;
+       val.line_width = 2;
+       val.line_style = LineSolid;
+       thick_line_gc = XCreateGC(fl_display, fl_root, GCBackground 
+                                 | GCForeground | GCFunction | GCGraphicsExposures
+                                 | GCLineWidth | GCLineStyle , &val);
+       XFlush(fl_display);
+       
+       return thick_line_gc;
+}
+
+
+static
+GC GetThinOnOffLineGC()
+{
+       if (thin_on_off_line_gc) return thin_on_off_line_gc;
+       XGCValues val;
+       do_reverse_video(val);
+
+       val.function=GXcopy;
+       val.graphics_exposures = false;
+       val.line_style = LineOnOffDash;
+       val.line_width = 0;
+       thin_on_off_line_gc =
+               XCreateGC(fl_display, fl_root, GCBackground
+                         | GCForeground | GCFunction | GCGraphicsExposures
+                         | GCLineWidth | GCLineStyle , &val);
+       XFlush(fl_display);
+       
+       return thin_on_off_line_gc;
+}
+
+
+static
+GC GetCopyGC()
+{
+       if (copy_gc) return copy_gc;
+       XGCValues val;
+       do_reverse_video(val);
+
+       val.function=GXcopy;
+       val.graphics_exposures = false;
+       val.line_style = LineSolid;
+       val.line_width = 0;
+       copy_gc = XCreateGC(fl_display, fl_root, GCBackground
+                           | GCForeground | GCFunction | GCGraphicsExposures
+                           | GCLineWidth | GCLineStyle , &val);
+       XFlush(fl_display);
+
+       return copy_gc;
+}
+
+
+static
+GC GetSelectGC()
+{
+       if (select_gc) return select_gc;
+       XGCValues val;
+       unsigned int a = BlackPixel(fl_display, DefaultScreen(fl_display));
+       unsigned int b = WhitePixel(fl_display, DefaultScreen(fl_display)); 
+       val.plane_mask = a^b;
+       val.line_style = LineSolid;
+       val.line_width = 2;
+       val.graphics_exposures = false;
+       val.function=GXinvert;
+       select_gc = XCreateGC(fl_display, fl_root,
+                             GCFunction | GCGraphicsExposures | GCPlaneMask
+                                     | GCLineWidth | GCLineStyle , &val);
+       XFlush(fl_display);
+
+       return select_gc; 
+}
+
+
+static
+GC GetSelectionGC()
+{
+       if (selection_gc) return selection_gc;
+       
+       XGCValues val;
+
+       if (!reverse_video) {
+               val.foreground=BlackPixel(fl_display,
+                                         DefaultScreen(fl_display));
+               val.background=WhitePixel(fl_display,
+                                         DefaultScreen(fl_display));
+       } else {
+               val.background=BlackPixel(fl_display,
+                                         DefaultScreen(fl_display));
+               val.foreground=WhitePixel(fl_display,
+                                         DefaultScreen(fl_display));
+       }
+       
+       val.function=GXcopy;
+       val.graphics_exposures = false;
+       if (!fast_selection && selection_color[0] != 0) {
+               if (!setForegroundColor(selection_color, val)) {
+                       fast_selection = True;
+                       if (clear_gc) clear_gc = 0;
+                       lyxerr.print("     Will use FastSelection-method.\n");
+               }
+       }
+       selection_gc = XCreateGC(fl_display, fl_root,
+                                GCBackground | GCForeground | GCFunction
+                                | GCGraphicsExposures, &val);
+
+       return selection_gc;
+}
+
+
+static
+GC GetLightedGC()
+{
+       if (lighted_gc) return lighted_gc;
+       XGCValues val;
+       if (reverse_video) {
+               val.background=BlackPixel(fl_display, DefaultScreen(fl_display));
+       } else {
+               val.background=WhitePixel(fl_display, DefaultScreen(fl_display));
+       }
+       val.foreground=val.background;
+       val.function=GXcopy;
+       val.graphics_exposures = false;
+       val.line_style = LineSolid;
+       val.line_width = 0;
+       setForegroundColor(lighted_color, val);
+       lighted_gc = XCreateGC(fl_display, fl_root, GCBackground
+                              | GCForeground | GCFunction | GCGraphicsExposures
+                              | GCLineWidth | GCLineStyle , &val);
+       XFlush(fl_display);
+
+       return lighted_gc;
+}
+
+
+GC GetColorGC(LyXFont::FONT_COLOR color)
+{
+       if (color_gc[color]) return color_gc[color];
+                      
+       XGCValues val;
+       do_reverse_video(val);
+
+       val.function=GXcopy;
+       val.graphics_exposures = false;
+       setForegroundColor(X11Color[color], val);
+       val.line_width = 0;
+       val.line_style = LineSolid;
+       color_gc[color] = XCreateGC(fl_display, fl_root,
+                                   GCBackground | GCForeground | GCFunction |
+                                   GCGraphicsExposures | GCLineWidth |
+                                   GCLineStyle , &val);
+       XFlush(fl_display);
+
+       return color_gc[color];
+}
+
+
+GC GetAccentGC(LyXFont const &f, int line_width)
+{
+       if (line_width>=10) line_width = 9;
+       
+       if (accent_gc[line_width]) return accent_gc[line_width];
+       
+       // Build this one from normal text GC, but change linewidth.
+       XGCValues val;
+       GC gc = f.getGC();
+       XGetGCValues(fl_display, gc, GCBackground | GCForeground | 
+                    GCFunction | GCGraphicsExposures | GCLineWidth | 
+                    GCLineStyle | GCPlaneMask, &val);
+
+       val.line_width = line_width;
+       val.cap_style = CapRound;
+       val.join_style = JoinRound;
+       
+       GC ac = XCreateGC(fl_display, fl_root, 
+                         GCBackground | GCForeground | GCFunction | 
+                         GCGraphicsExposures | GCLineWidth | 
+                         GCLineStyle | GCPlaneMask, &val);
+       
+       XFlush(fl_display);
+       accent_gc[line_width] = ac;
+
+       return accent_gc[line_width];
+}
+
+
+static
+GC GetMinipageGC()
+{
+       if (minipage_gc) return minipage_gc;
+        XGCValues val;
+       do_reverse_video(val);
+
+        val.function=GXcopy;
+        val.graphics_exposures = false;
+        val.line_style = LineOnOffDash;
+        val.line_width = 0;
+        setForegroundColor(fill_color, val);
+        minipage_gc = XCreateGC(fl_display, fl_root,
+                                GCBackground | GCForeground | GCFunction |
+                                GCGraphicsExposures | GCLineWidth |
+                                GCLineStyle , &val);
+        XFlush(fl_display);
+
+       return minipage_gc;
+}
+
+
+GC getGC(gc_type typ)
+{
+       GC gc = NULL;
+       switch(typ) {
+       case gc_clear:
+               gc = GetClearGC();
+               break;
+       case gc_latex:
+               gc = GetLatexGC();
+               break;
+       case gc_foot:
+               gc = GetFootGC();
+               break;
+       case gc_new_line:
+               gc = GetNewLineGC();
+                break;
+       case gc_math:
+               gc = GetMathGC();
+               break;
+       case gc_math_frame:
+               gc = GetMathFrameGC();
+               break;
+       case gc_fill:
+               gc = GetFillGC();
+               break;
+       case gc_copy:
+               gc = GetCopyGC();
+               break;
+       case gc_select:
+               gc = GetSelectGC();
+               break;
+       case gc_on_off_line:
+               gc = GetOnOffLineGC();
+               break;
+       case gc_thin_on_off_line:
+               gc = GetThinOnOffLineGC();
+               break;
+       case gc_thick_line:
+               gc = GetThickLineGC();
+               break;
+       case gc_lighted:
+               gc = GetLightedGC();
+               break;
+       case gc_selection:
+               gc = GetSelectionGC();
+               break;
+       case gc_minipage:
+               gc = GetMinipageGC();
+               break;
+       case gc_note:
+               gc = GetNoteGC();
+               break;
+       case gc_note_frame:
+               gc = GetNoteFrameGC();
+               break;
+       }
+       return gc;
+}
diff --git a/src/lyxdraw.h b/src/lyxdraw.h
new file mode 100644 (file)
index 0000000..cfb202b
--- /dev/null
@@ -0,0 +1,53 @@
+// -*- C++ -*-
+#ifndef _LYX_DRAW_H
+#define _LYX_DRAW_H
+
+#include FORMS_H_LOCATION
+#include "lyxfont.h"
+
+///
+enum gc_type {
+       ///
+       gc_clear,
+       ///
+       gc_latex,
+       ///
+       gc_foot,
+        ///
+        gc_new_line,
+       ///
+       gc_math,
+       ///
+       gc_math_frame,
+       ///
+       gc_fill,
+       ///
+       gc_copy,
+       ///
+       gc_select,
+       ///
+       gc_on_off_line,
+       ///
+       gc_thin_on_off_line,
+       ///
+       gc_thick_line,
+       ///
+       gc_lighted,
+       ///
+       gc_selection,
+       ///
+        gc_minipage,
+       ///
+       gc_note,
+       ///
+       gc_note_frame
+};
+
+///
+extern GC getGC(gc_type typ);
+///
+extern GC GetAccentGC(LyXFont const &f, int line_width);
+///
+extern GC GetColorGC(LyXFont::FONT_COLOR color);
+
+#endif
diff --git a/src/lyxfont.C b/src/lyxfont.C
new file mode 100644 (file)
index 0000000..17ba20c
--- /dev/null
@@ -0,0 +1,974 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+#include <locale.h>
+
+#ifdef __GNUG__
+#pragma implementation "lyxfont.h"
+#endif
+
+#include <ctype.h>
+#include "gettext.h"
+#include "definitions.h"
+#include "lyxfont.h"
+#include "error.h"
+#include "lyxrc.h"
+#include "lyxlex.h"
+#include "lyxdraw.h"
+#include "FontLoader.h"
+
+//     $Id: lyxfont.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $   
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lyxfont.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+extern LyXRC * lyxrc;
+
+// The global fontloader
+FontLoader fontloader;
+
+//
+// Names for the GUI
+//
+
+LString const GUIFamilyNames[6] =
+{ N_("Roman"), N_("Sans serif"), N_("Typewriter"), N_("Symbol"), N_("Inherit"),
+    N_("Ignore") };
+  
+LString const GUISeriesNames[4] =
+{ N_("Medium"), N_("Bold"), N_("Inherit"), N_("Ignore") };
+
+LString const GUIShapeNames[6] =
+{ N_("Upright"), N_("Italic"), N_("Slanted"), N_("Smallcaps"), N_("Inherit"),
+    N_("Ignore") };
+
+LString const GUISizeNames[14] =
+{ N_("Tiny"), N_("Smallest"), N_("Smaller"), N_("Small"), N_("Normal"), N_("Large"),
+  N_("Larger"), N_("Largest"), N_("Huge"), N_("Huger"), N_("Increase"), N_("Decrease"), 
+  N_("Inherit"), N_("Ignore") };
+LString const lGUISizeNames[15] =
+{ N_("tiny"), N_("smallest"), N_("smaller"), N_("small"), N_("normal"), N_("large"),
+  N_("larger"), N_("largest"), N_("huge"), N_("huger"), N_("increase"), N_("decrease"),
+  N_("inherit"), N_("ignore"), LString() };
+LString const GUIMiscNames[5] = 
+{ N_("Off"), N_("On"), N_("Toggle"), N_("Inherit"), N_("Ignore") };
+
+LString const GUIColorNames[13] = 
+{ N_("None"), N_("Black"), N_("White"), N_("Red"), N_("Green"), N_("Blue"),
+    N_("Cyan"), N_("Magenta"), 
+  N_("Yellow"), N_("Math"), N_("Inset"), N_("Inherit"), N_("Ignore") };
+//
+// Strings used to read and write .lyx format files
+//
+LString const LyXFamilyNames[6] =
+{ "roman", "sans", "typewriter", "symbol", "default", "error" };
+LString const LyXSeriesNames[4] =
+{ "medium", "bold", "default", "error" };
+LString const LyXShapeNames[6] = 
+{ "up", "italic", "slanted", "smallcaps", "default", "error" };
+LString const LyXSizeNames[14] =
+{ "tiny", "scriptsize", "footnotesize", "small", "normal", "large",
+  "larger", "largest", "huge", "giant", 
+  "increase-error", "decrease-error", "default", "error" };
+
+LString const LyXMiscNames[12] =
+{ "off", "on", "toggle", "default", "error" };
+
+LString const LyXColorNames[13] =
+{ "none", "black", "white", "red", "green", "blue", "cyan", "magenta", 
+  "yellow", "matherror", "inseterror", "default", "error" };
+
+//
+// Strings used to write LaTeX files
+//
+
+LString const LaTeXFamilyNames[6] =
+{ "textrm", "textsf", "texttt", "error1", "error2", "error3" };
+LString const LaTeXSeriesNames[4] =
+{ "textmd", "textbf", "error4", "error5" };
+LString const LaTeXShapeNames[6] =
+{ "textup", "textit", "textsl", "textsc", "error6", "error7" };
+LString const LaTeXSizeNames[14] =
+{ "tiny", "scriptsize", "footnotesize", "small", "normalsize", "large",
+  "Large", "LARGE", "huge", "Huge", "error8", "error9", "error10", "error11" };
+LString const LaTeXColorNames[13] =
+{ "none", "black", "white", "red", "green", "blue", "cyan", "magenta", 
+  "yellow", "error12", "error13", "error14", "error15" };
+
+/// Decreases font size by one
+LyXFont& LyXFont::decSize() 
+{
+       switch (size()) {
+       case SIZE_HUGER:        setSize(SIZE_HUGE);     break;
+       case SIZE_HUGE:         setSize(SIZE_LARGEST);  break;
+       case SIZE_LARGEST:      setSize(SIZE_LARGER);   break;
+       case SIZE_LARGER:       setSize(SIZE_LARGE);    break;
+       case SIZE_LARGE:        setSize(SIZE_NORMAL);   break;
+       case SIZE_NORMAL:       setSize(SIZE_SMALL);    break;
+       case SIZE_SMALL:        setSize(SIZE_FOOTNOTE); break;
+       case SIZE_FOOTNOTE:     setSize(SIZE_SCRIPT);   break;
+       case SIZE_SCRIPT:       setSize(SIZE_TINY);     break;
+       case SIZE_TINY:         break;
+       case INCREASE_SIZE:
+               lyxerr.print("Can't LyXFont::decSize on INCREASE_SIZE");
+               break;
+       case DECREASE_SIZE:
+               lyxerr.print("Can't LyXFont::decSize on DECREASE_SIZE");
+               break;
+       case INHERIT_SIZE:
+               lyxerr.print("Can't LyXFont::decSize on INHERIT_SIZE");
+               break;
+       case IGNORE_SIZE:
+               lyxerr.print("Can't LyXFont::decSize on IGNORE_SIZE");
+               break;
+       }
+       return (*this);
+}
+
+
+/// Increases font size by one
+LyXFont& LyXFont::incSize() 
+{
+       switch(size()) {
+       case SIZE_HUGER:        break;
+       case SIZE_HUGE:         setSize(SIZE_HUGER);    break;
+       case SIZE_LARGEST:      setSize(SIZE_HUGE);     break;
+       case SIZE_LARGER:       setSize(SIZE_LARGEST);  break;
+       case SIZE_LARGE:        setSize(SIZE_LARGER);   break;
+       case SIZE_NORMAL:       setSize(SIZE_LARGE);    break;
+       case SIZE_SMALL:        setSize(SIZE_NORMAL);   break;
+       case SIZE_FOOTNOTE:     setSize(SIZE_SMALL);    break;
+       case SIZE_SCRIPT:       setSize(SIZE_FOOTNOTE); break;
+       case SIZE_TINY:         setSize(SIZE_SCRIPT);   break;
+       case INCREASE_SIZE:
+               lyxerr.print("Can't LyXFont::incSize on INCREASE_SIZE");
+               break;
+       case DECREASE_SIZE:
+               lyxerr.print("Can't LyXFont::incSize on DECREASE_SIZE");
+               break;
+       case INHERIT_SIZE:
+               lyxerr.print("Can't LyXFont::incSize on INHERIT_SIZE");
+               break;
+       case IGNORE_SIZE:
+               lyxerr.print("Can't LyXFont::incSize on IGNORE_SIZE");
+               break;
+       }
+       return (*this);
+}
+
+
+/// Updates a misc setting according to request
+LyXFont::FONT_MISC_STATE LyXFont::setMisc(FONT_MISC_STATE newfont, 
+                                         FONT_MISC_STATE org)
+{
+       if (newfont == TOGGLE) {
+               if (org == ON)
+                       return OFF;
+               else if (org == OFF)
+                       return ON;
+               else {
+                       lyxerr.print("LyXFont::setMisc: Need state"
+                                     " ON or OFF to toggle. Setting to ON");
+                       return ON;
+               }
+       } else if (newfont == IGNORE)
+               return org;
+       else 
+               return newfont;
+}
+
+
+/// Updates font settings according to request
+void LyXFont::update(LyXFont const & newfont, bool toggleall)
+{
+       if(newfont.family() == family() && toggleall)
+         setFamily(INHERIT_FAMILY); // toggle 'back'
+       else if (newfont.family() != IGNORE_FAMILY)
+         setFamily(newfont.family());
+       // else it's IGNORE_SHAPE
+
+       // "Old" behaviour: "Setting" bold will toggle bold on/off.
+       switch (newfont.series()) {
+       case BOLD_SERIES:
+               // We toggle...
+               if (series() == BOLD_SERIES && toggleall)
+                       setSeries(MEDIUM_SERIES);
+               else
+                       setSeries(BOLD_SERIES);
+               break;
+       case MEDIUM_SERIES:
+       case INHERIT_SERIES:
+               setSeries(newfont.series());
+               break;
+       case IGNORE_SERIES: 
+               break;
+       }
+
+       if(newfont.shape() == shape() && toggleall)
+         setShape(INHERIT_SHAPE); // toggle 'back'
+       else if (newfont.shape() != IGNORE_SHAPE)
+         setShape(newfont.shape());
+       // else it's IGNORE_SHAPE
+
+       if (newfont.size() != IGNORE_SIZE) {
+               if (newfont.size() == INCREASE_SIZE)
+                       incSize();
+               else if (newfont.size() == DECREASE_SIZE)
+                       decSize();
+               else if (newfont.size() == size() && toggleall)
+                       setSize(INHERIT_SIZE); // toggle 'back'
+               else
+                       setSize(newfont.size());
+       }
+
+       setEmph(setMisc(newfont.emph(), emph()));
+       setUnderbar(setMisc(newfont.underbar(), underbar()));
+       setNoun(setMisc(newfont.noun(), noun()));
+       setLatex(setMisc(newfont.latex(), latex()));
+
+       if(newfont.color() == color() && toggleall)
+         setColor(INHERIT_COLOR); // toggle 'back'
+       else if (newfont.color() != IGNORE_COLOR)
+         setColor(newfont.color());
+}
+
+
+/// Reduce font to fall back to template where possible
+void LyXFont::reduce(LyXFont const & tmplt)
+{
+       if (family() == tmplt.family())
+               setFamily(INHERIT_FAMILY);
+       if (series() == tmplt.series())
+               setSeries(INHERIT_SERIES);
+       if (shape() == tmplt.shape())
+               setShape(INHERIT_SHAPE);
+       if (size() == tmplt.size())
+               setSize(INHERIT_SIZE);
+       if (emph() == tmplt.emph())
+               setEmph(INHERIT);
+       if (underbar() == tmplt.underbar())
+               setUnderbar(INHERIT);
+       if (noun() == tmplt.noun())
+               setNoun(INHERIT);
+       if (latex() == tmplt.latex())
+               setLatex(INHERIT);
+       if (color() == tmplt.color())
+               setColor(INHERIT_COLOR);
+}
+
+
+/// Realize font from a template
+// This one is not pretty, but it's extremely fast (Asger)
+LyXFont & LyXFont::realize(LyXFont const & tmplt)
+{
+       if (bits == inherit) {
+               bits = tmplt.bits;
+               return *this;
+       }
+
+       if ((bits & (Fam_Mask<<Fam_Pos)) == (ui32(INHERIT_FAMILY)<<Fam_Pos))
+       {
+               bits &= ~(Fam_Mask << Fam_Pos);
+               bits |= (tmplt.bits & Fam_Mask << Fam_Pos);
+       }
+       if ((bits & (Ser_Mask<<Ser_Pos)) == (ui32(INHERIT_SERIES)<<Ser_Pos))
+       {
+               bits &= ~(Ser_Mask << Ser_Pos);
+               bits |= (tmplt.bits & Ser_Mask << Ser_Pos);
+       }
+       if ((bits & (Sha_Mask << Sha_Pos)) == ui32(INHERIT_SHAPE) << Sha_Pos)
+       {
+               bits &= ~(Sha_Mask << Sha_Pos);
+               bits |= (tmplt.bits & Sha_Mask << Sha_Pos);
+       }
+       if ((bits & (Siz_Mask << Siz_Pos)) == ui32(INHERIT_SIZE) << Siz_Pos)
+       {
+               bits &= ~(Siz_Mask << Siz_Pos);
+               bits |= (tmplt.bits & Siz_Mask << Siz_Pos);
+       }
+       if ((bits & (Misc_Mask << Emp_Pos)) == ui32(INHERIT) << Emp_Pos)
+       {
+               bits &= ~(Misc_Mask << Emp_Pos);
+               bits |= (tmplt.bits & Misc_Mask << Emp_Pos);
+       }
+       if ((bits & (Misc_Mask << Und_Pos)) == ui32(INHERIT) << Und_Pos)
+       {
+               bits &= ~(Misc_Mask << Und_Pos);
+               bits |= (tmplt.bits & Misc_Mask << Und_Pos);
+       }
+       if ((bits & (Misc_Mask << Nou_Pos)) == ui32(INHERIT) << Nou_Pos)
+       {
+               bits &= ~(Misc_Mask << Nou_Pos);
+               bits |= (tmplt.bits & Misc_Mask << Nou_Pos);
+       }
+       if ((bits & (Misc_Mask << Lat_Pos)) == ui32(INHERIT) << Lat_Pos)
+       {
+               bits &= ~(Misc_Mask << Lat_Pos);
+               bits |= (tmplt.bits & Misc_Mask << Lat_Pos);
+       }
+       if ((bits & (Col_Mask << Col_Pos)) == ui32(INHERIT_COLOR) << Col_Pos)
+       {
+               bits &= ~(Col_Mask << Col_Pos);
+               bits |= (tmplt.bits & Col_Mask << Col_Pos);
+       }
+       return *this;
+}
+
+
+/// Is font resolved?
+bool LyXFont::resolved() const
+{
+       return (family() != INHERIT_FAMILY && series() != INHERIT_SERIES &&
+               shape() != INHERIT_SHAPE && size() != INHERIT_SIZE &&
+               emph() != INHERIT && underbar() != INHERIT && 
+               noun() != INHERIT && latex() != INHERIT && 
+               color() != INHERIT_COLOR);
+}
+
+/// Build GUI description of font state
+LString LyXFont::stateText() const
+{
+       LString buf;
+       if (family() != INHERIT_FAMILY)
+               buf += LString(_(GUIFamilyNames[family()].c_str())) + ", ";
+       if (series() != INHERIT_SERIES)
+               buf += LString(_(GUISeriesNames[series()].c_str())) + ", ";
+       if (shape() != INHERIT_SHAPE)
+               buf += LString(_(GUIShapeNames[shape()].c_str())) + ", ";
+       if (size() != INHERIT_SIZE)
+               buf += LString(_(GUISizeNames[size()].c_str())) + ", ";
+       if (color() != INHERIT_COLOR)
+               buf += LString(_(GUIColorNames[color()].c_str())) + ", ";
+       if (emph() != INHERIT)
+               buf += LString(_("Emphasis ")) + _(GUIMiscNames[emph()].c_str()) + ", ";
+       if (underbar() != INHERIT)
+               buf += LString(_("Underline ")) + _(GUIMiscNames[underbar()].c_str()) + ", ";
+       if (noun() != INHERIT)
+               buf += LString(_("Noun ")) + _(GUIMiscNames[noun()].c_str()) + ", ";
+       if (latex() != INHERIT)
+               buf += LString(_("Latex ")) + _(GUIMiscNames[latex()].c_str()) + ", ";
+       if (buf.empty())
+               buf = _("Default");
+       buf.strip(' ');
+       buf.strip(',');
+       return buf;
+}
+
+
+// Set family according to lyx format string
+LyXFont& LyXFont::setLyXFamily(LString const & fam)
+{
+       LString s = fam;
+       s.lowercase();
+       int i=0;
+       while (s != LyXFamilyNames[i] && LyXFamilyNames[i] != "error") i++;
+       if (s == LyXFamilyNames[i]) {
+               setFamily(LyXFont::FONT_FAMILY(i));
+       } else
+               lyxerr.print("LyXFont::setLyXFamily: Unknown family `"+s+'\'');
+       return (*this);
+}
+
+
+// Set series according to lyx format string
+LyXFont& LyXFont::setLyXSeries(LString const & ser)
+{
+       LString s = ser;
+       s.lowercase();
+       int i=0;
+       while (s != LyXSeriesNames[i] && LyXSeriesNames[i] != "error") i++;
+       if (s == LyXSeriesNames[i]) {
+               setSeries(LyXFont::FONT_SERIES(i));
+       } else
+               lyxerr.print("LyXFont::setLyXSeries: Unknown series `"+s+'\'');
+       return (*this);
+}
+
+
+// Set shape according to lyx format string
+LyXFont& LyXFont::setLyXShape(LString const & sha)
+{
+       LString s = sha;
+       s.lowercase();
+       int i=0;
+       while (s != LyXShapeNames[i] && LyXShapeNames[i] != "error") i++;
+       if (s == LyXShapeNames[i]) {
+               setShape(LyXFont::FONT_SHAPE(i));
+       } else
+               lyxerr.print("LyXFont::setLyXShape: Unknown shape `"+s+'\'');
+       return (*this);
+}
+
+
+// Set size according to lyx format string
+LyXFont& LyXFont::setLyXSize(LString const & siz)
+{
+       LString s = siz;
+       s.lowercase();
+       int i=0;
+       while (s != LyXSizeNames[i] && LyXSizeNames[i] != "error") i++;
+       if (s == LyXSizeNames[i]) {
+               setSize(LyXFont::FONT_SIZE(i));
+       } else
+               lyxerr.print("LyXFont::setLyXSize: Unknown size `"+s+'\'');
+       return (*this);
+}
+
+// Set size according to lyx format string
+LyXFont::FONT_MISC_STATE LyXFont::setLyXMisc(LString const & siz)
+{
+       LString s = siz;
+       s.lowercase();
+       int i=0;
+       while (s != LyXMiscNames[i] && LyXMiscNames[i] != "error") i++;
+       if (s == LyXMiscNames[i])
+               return FONT_MISC_STATE(i);
+       lyxerr.print("LyXFont::setLyXMisc: Unknown misc flag `"+s+'\'');
+       return OFF;
+}
+
+/// Sets color after LyX text format
+LyXFont& LyXFont::setLyXColor(LString const & col)
+{
+       LString s = col;
+       s.lowercase();
+       int i=0;
+       while (s != LyXColorNames[i] && LyXColorNames[i] != "error") i++;
+       if (s == LyXColorNames[i]) {
+               setColor(LyXFont::FONT_COLOR(i));
+       } else
+               lyxerr.print("LyXFont::setLyXColor: Unknown Color `"+s+'\'');
+       return (*this);
+}
+
+
+/// Sets size after GUI name
+LyXFont& LyXFont::setGUISize(LString const & siz)
+{
+       LString s = siz;
+       s.lowercase();
+       int i=0;
+       while (!lGUISizeNames[i].empty() &&
+              s != _(lGUISizeNames[i].c_str()))
+         i++;
+       if (s == _(lGUISizeNames[i].c_str())) {
+               setSize(LyXFont::FONT_SIZE(i));
+       } else
+               lyxerr.print("LyXFont::setGUISize: Unknown Size `"+s+'\'');
+       return (*this);
+}
+
+
+// Returns size in latex format
+LString LyXFont::latexSize() const
+{
+       return LaTeXSizeNames[size()];
+}
+
+
+// Read a font definition from given file in lyx format
+// Used for layouts
+LyXFont & LyXFont::lyxRead(LyXLex & lex)
+{
+       bool error = false;
+       bool finished = false;
+       while (!finished && lex.IsOK() && !error) {
+               lex.next();
+               LString tok = lex.GetString();
+               tok.lowercase();
+
+               if (tok.empty()) {
+                       continue;
+               } else if (tok == "endfont") {
+                       finished = true;
+               } else if (tok == "family") {
+                       lex.next();
+                       LString tok = lex.GetString();
+                       setLyXFamily(tok);
+               } else if (tok == "series") {
+                       lex.next();
+                       LString tok = lex.GetString();
+                       setLyXSeries(tok);
+               } else if (tok == "shape") {
+                       lex.next();
+                       LString tok = lex.GetString();
+                       setLyXShape(tok);
+               } else if (tok == "size") {
+                       lex.next();
+                       LString tok = lex.GetString();
+                       setLyXSize(tok);
+               } else if (tok == "latex") {
+                       lex.next();
+                       LString tok = lex.GetString();
+                       tok.lowercase();
+
+                       if (tok == "no_latex") {
+                               setLatex(OFF);
+                       } else if (tok == "latex") {
+                               setLatex(ON);
+                       } else {
+                               lex.printError("Illegal LaTeX type`$$Token'");
+                       }
+               } else if (tok == "misc") {
+                       lex.next();
+                       LString tok = lex.GetString();
+                       tok.lowercase();
+
+                       if (tok == "no_bar") {
+                               setUnderbar(OFF);
+                       } else if (tok == "no_emph") {
+                               setEmph(OFF);
+                       } else if (tok == "no_noun") {
+                               setNoun(OFF);
+                       } else if (tok == "emph") {
+                               setEmph(ON);
+                       } else if (tok == "underbar") {
+                               setUnderbar(ON);
+                       } else if (tok == "noun") {
+                               setNoun(ON);
+                       } else {
+                               lex.printError("Illegal misc type `$$Token´");
+                       }
+               } else if (tok == "color") {
+                       lex.next();
+                       LString tok = lex.GetString();
+                       setLyXColor(tok);
+               } else {
+                       lex.printError("Unknown tag `$$Token'");
+                       error = true;
+               }
+       }
+       return *this;
+}
+
+
+/// Writes the changes from this font to orgfont in .lyx format in file
+void LyXFont::lyxWriteChanges(LyXFont const & orgfont, FILE * file) const
+{
+       fprintf(file, "\n");
+       if (orgfont.family() != family()) {
+               fprintf(file, "\\family %s \n",
+                       LyXFamilyNames[family()].c_str());
+       }
+       if (orgfont.series() != series()) {
+               fprintf(file, "\\series %s \n",
+                       LyXSeriesNames[series()].c_str());
+       }
+       if (orgfont.shape() != shape()) {
+               fprintf(file, "\\shape %s \n", LyXShapeNames[shape()].c_str());
+       }
+       if (orgfont.size() != size()) {
+               fprintf(file, "\\size %s \n", LyXSizeNames[size()].c_str());
+       }
+       if (orgfont.emph() != emph()) {
+               fprintf(file, "\\emph %s \n", LyXMiscNames[emph()].c_str());
+       }
+       if (orgfont.underbar() != underbar()) {
+               // This is only for backwards compatibility
+               switch (underbar()) {
+               case OFF:       fprintf(file, "\\bar no \n"); break;
+               case ON:        fprintf(file, "\\bar under \n"); break;
+               case TOGGLE:    lyxerr.print("LyXFont::lyxWriteFontChanges: "
+                                             "TOGGLE should not appear here!");
+                               break;
+               case INHERIT:   fprintf(file, "\\bar default \n"); break;
+               case IGNORE:    lyxerr.print("LyXFont::lyxWriteFontChanges: "
+                                             "IGNORE should not appear here!");
+                               break;
+               }
+       }
+       if (orgfont.noun() != noun()) {
+               fprintf(file, "\\noun %s \n", LyXMiscNames[noun()].c_str());
+       }
+       if (orgfont.latex() != latex()) {
+               // This is only for backwards compatibility
+               switch (latex()) {
+               case OFF:       fprintf(file, "\\latex no_latex \n"); break;
+               case ON:        fprintf(file, "\\latex latex \n"); break;
+               case TOGGLE:    lyxerr.print("LyXFont::lyxWriteFontChanges: "
+                                             "TOGGLE should not appear here!");
+                               break;
+               case INHERIT:   fprintf(file, "\\latex default \n"); break;
+               case IGNORE:    lyxerr.print("LyXFont::lyxWriteFontChanges: "
+                                             "IGNORE should not appear here!");
+                               break;
+               }
+       }
+       if (orgfont.color() != color()) {
+               fprintf(file, "\\color %s\n", LyXColorNames[color()].c_str());
+       }
+}
+
+
+/// Writes the head of the LaTeX needed to impose this font
+// Returns number of chars written.
+int LyXFont::latexWriteStartChanges(FILE * file, LyXFont const & base) const
+{
+       LString font;
+       int count = latexWriteStartChanges(font, base);
+       fprintf(file, "%s", font.c_str());
+       return count;
+}
+
+
+/// Writes the head of the LaTeX needed to impose this font
+// Returns number of chars written.
+int LyXFont::latexWriteStartChanges(LString & file, LyXFont const & base) const
+{
+       LyXFont f = *this;
+       f.reduce(base);
+       
+       if (f.bits == inherit)
+               return 0;
+       
+       int count = 0;
+       bool env = false;
+       
+       if (f.family() != INHERIT_FAMILY) {
+               file += '\\';
+               file += LaTeXFamilyNames[f.family()];
+               file += '{';
+               count += LaTeXFamilyNames[f.family()].length() + 2;
+               env = true; //We have opened a new environment
+       }
+       if (f.series() != INHERIT_SERIES) {
+               file += '\\';
+               file += LaTeXSeriesNames[f.series()];
+               file += '{';
+               count += LaTeXSeriesNames[f.series()].length() + 2;
+               env = true; //We have opened a new environment
+       }
+       if (f.shape() != INHERIT_SHAPE) {
+               file += '\\';
+               file += LaTeXShapeNames[f.shape()];
+               file += '{';
+               count += LaTeXShapeNames[f.shape()].length() + 2;
+               env = true; //We have opened a new environment
+       }
+       if (f.color() != INHERIT_COLOR) {
+               file += "\\textcolor{";
+               file += LaTeXColorNames[f.color()];
+               file += "}{";
+               count += LaTeXColorNames[f.color()].length() + 13;
+               env = true; //We have opened a new environment
+       }
+       if (f.emph() == ON) {
+               file += "\\emph{";
+               count += 6;
+               env = true; //We have opened a new environment
+       }
+       if (f.underbar() == ON) {
+               file += "\\underbar{";
+               count += 10;
+               env = true; //We have opened a new environment
+       }
+       // \noun{} is a LyX special macro
+       if (f.noun() == ON) {
+               file += "\\noun{";
+               count += 8;
+               env = true; //We have opened a new environment
+       }
+       if (f.size() != INHERIT_SIZE) {
+               // If we didn't open an environment above, we open one here
+               if (!env) {
+                       file += '{';
+                       count++;
+               }
+               file += '\\';
+               file += LaTeXSizeNames[f.size()];
+               file += ' ';
+               count += LaTeXSizeNames[f.size()].length() + 2;
+       }
+       return count;
+}
+
+
+/// Writes ending block of LaTeX needed to close use of this font
+// Returns number of chars written
+// This one corresponds to latexWriteStartChanges(). (Asger)
+int LyXFont::latexWriteEndChanges(FILE * file, LyXFont const & base) const
+{
+       LString ending;
+       int count = latexWriteEndChanges(ending, base);
+       fprintf(file, "%s", ending.c_str());
+       return count;
+}
+
+
+/// Writes ending block of LaTeX needed to close use of this font
+// Returns number of chars written
+// This one corresponds to latexWriteStartChanges(). (Asger)
+int LyXFont::latexWriteEndChanges(LString & file, LyXFont const & base) const
+{
+       LyXFont f = *this; // why do you need this?
+       f.reduce(base); // why isn't this just "reduce(base);" (Lgb)
+       // Because this function is const. Everything breaks if this
+       // method changes the font it represents. There is no speed penalty
+       // by using the temporary. (Asger)
+
+       if (f.bits == inherit)
+               return 0;
+       
+       int count = 0;
+       bool env = false;
+       if (f.family() != INHERIT_FAMILY) {
+               file += '}';
+               ++count;
+               env = true; // Size change need not bother about closing env.
+       }
+       if (f.series() != INHERIT_SERIES) {
+               file += '}';
+               ++count;
+               env = true; // Size change need not bother about closing env.
+       }
+       if (f.shape() != INHERIT_SHAPE) {
+               file += '}';
+               ++count;
+               env = true; // Size change need not bother about closing env.
+       }
+       if (f.color() != INHERIT_COLOR) {
+               file += '}';
+               ++count;
+               env = true; // Size change need not bother about closing env.
+       }
+       if (f.emph() == ON) {
+               file += '}';
+               ++count;
+               env = true; // Size change need not bother about closing env.
+       }
+       if (f.underbar() == ON) {
+               file += '}';
+               ++count;
+               env = true; // Size change need not bother about closing env.
+       }
+       if (f.noun() == ON) {
+               file += '}';
+               ++count;
+               env = true; // Size change need not bother about closing env.
+       }
+       if (f.size() != INHERIT_SIZE) {
+               // We only have to close if only size changed
+               if (!env) {
+                       file += '}';
+                       ++count;
+               }
+       }
+       
+       return count;
+}
+
+
+// Convert logical attributes to concrete shape attribute
+LyXFont::FONT_SHAPE LyXFont::realShape() const
+{
+       register FONT_SHAPE s = shape();
+
+       if (emph() == ON) {
+               if (s == UP_SHAPE)
+                       s = ITALIC_SHAPE;
+               else
+                       s = UP_SHAPE;
+       }
+       if (noun() == ON)
+               s = SMALLCAPS_SHAPE;
+       return s;
+}
+
+
+GC LyXFont::getGC() const
+{
+       GC gc;
+       if (latex() == ON)
+               gc = ::getGC(gc_latex);
+       else {
+               if (color() == NONE)
+                       gc = ::getGC(gc_copy);
+               else if (color() == MATH)
+                       gc = ::getGC(gc_math);
+               else if (color() == INSET)
+                       gc = ::getGC(gc_foot);
+               else
+                       gc = ::GetColorGC(color());
+       }
+
+       XSetFont(fl_display, gc, getXFontstruct()->fid);
+       return gc;
+}
+
+
+XFontStruct* LyXFont::getXFontstruct() const
+{
+       return fontloader.load(family(),series(),realShape(),size());
+}
+
+
+int LyXFont::maxAscent() const
+{
+       return getXFontstruct()->ascent;
+}
+
+
+int LyXFont::maxDescent() const
+{
+       return getXFontstruct()->descent;
+}
+
+
+int LyXFont::ascent(char c) const
+{
+       XFontStruct *finfo = getXFontstruct();
+       if (finfo->per_char
+           && (unsigned int) c >= finfo->min_char_or_byte2
+           && (unsigned int) c <= finfo->max_char_or_byte2) {
+               unsigned int index = (unsigned int) c - finfo->min_char_or_byte2;
+               return finfo->per_char[index].ascent;
+       } else
+               return finfo->ascent;
+}
+
+
+int LyXFont::descent(char c) const
+{
+       XFontStruct *finfo = getXFontstruct();
+       if (finfo->per_char
+           && (unsigned int) c >= finfo->min_char_or_byte2
+           && (unsigned int) c <= finfo->max_char_or_byte2) {
+               unsigned int index = (unsigned int) c - finfo->min_char_or_byte2;
+               return finfo->per_char[index].descent;
+       } else
+               return finfo->descent;
+}
+
+
+// Specialized after profiling. (Asger)
+int LyXFont::width(char c) const
+{
+       if (realShape() != LyXFont::SMALLCAPS_SHAPE){
+               return XTextWidth(getXFontstruct(), &c, 1);
+       } else {
+               return textWidth(&c, 1);
+       }
+}
+
+
+int LyXFont::textWidth(char const *s, int n) const
+{
+       if (realShape() != LyXFont::SMALLCAPS_SHAPE){
+               return XTextWidth(getXFontstruct(), s, n);
+       } else {
+               // emulate smallcaps since X doesn't support this
+               unsigned int result = 0;
+               char c;
+               LyXFont smallfont = *this;
+               smallfont.decSize();
+               smallfont.decSize();
+               smallfont.setShape(LyXFont::UP_SHAPE);
+               for (int i=0; i < n; i++){
+                       c = s[i];
+                       if (islower((unsigned char) c)){
+                               c = toupper( (unsigned char) c );
+                               result += XTextWidth(smallfont.getXFontstruct(), &c, 1);
+                       } else {
+                               result += XTextWidth(getXFontstruct(), &c, 1);
+                       }
+               }
+               return result;
+       }
+}
+
+
+int LyXFont::stringWidth(LString const & s) const
+{
+       if (s.empty()) return 0;
+       return textWidth(s.c_str(), s.length());
+}
+
+int LyXFont::signedStringWidth(LString const & s) const
+{
+       if (s.empty()) return 0;
+       if (s.c_str()[0] == '-')
+         return -textWidth(s.c_str()+1, s.length()-1);
+       else
+         return textWidth(s.c_str(), s.length());
+}
+
+
+int LyXFont::drawText(char const* s, int n, Pixmap pm, 
+                      int baseline, int x) const
+{
+       if (realShape() != LyXFont::SMALLCAPS_SHAPE) {
+               XDrawString(fl_display,
+                           pm,
+                           getGC(),
+                           x, baseline,
+                           s, n);
+               XFlush(fl_display);
+               return XTextWidth(getXFontstruct(), s, n);
+
+       } else {
+               // emulate smallcaps since X doesn't support this
+               int i;
+               char c;
+               int sx = x;
+               LyXFont smallfont = *this;
+               smallfont.decSize();
+               smallfont.decSize();
+               smallfont.setShape(LyXFont::UP_SHAPE);
+               for (i=0; i < n; i++){
+                       c = s[i];
+                       if (islower((unsigned char) c)){
+                               c = toupper((unsigned char) c);
+                               XDrawString(fl_display,
+                                           pm,
+                                           smallfont.getGC(),
+                                           x, baseline,
+                                           &c, 1);
+                               x += XTextWidth(smallfont.getXFontstruct(), &c, 1);
+                               XFlush(fl_display);
+                       } else {
+                               XDrawString(fl_display,
+                                           pm,
+                                           getGC(),
+                                           x, baseline,
+                                           &c, 1);
+                               x += XTextWidth(getXFontstruct(), &c, 1);
+                               XFlush(fl_display);
+                       }
+               }
+               return x - sx;
+       }
+}
+
+
+int LyXFont::drawString(LString const &s, Pixmap pm, int baseline, int x) const
+{
+       return drawText(s.c_str(), s.length(), pm, baseline, x);
+}
+
+
+bool LyXFont::equalExceptLatex(LyXFont const &f) const 
+{
+       LyXFont f1 = *this;
+       f1.setLatex(f.latex());
+       return f1 == f;
+}
diff --git a/src/lyxfont.h b/src/lyxfont.h
new file mode 100644 (file)
index 0000000..17be068
--- /dev/null
@@ -0,0 +1,636 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+#ifndef _LYXFONT_H
+#define _LYXFONT_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+#include "LString.h"
+
+// It might happen that locale.h defines ON and OFF. This is not good
+// for us, since we use these names below. But of course this is due
+// to some old compilers. Than is broken when it comes to C++ scoping.
+#include "gettext.h" // so that we are sure tht it won't be included
+                    // later. 
+#ifdef ON
+#undef ON
+#endif
+
+#ifdef OFF
+#undef OFF
+#endif
+
+class LyXLex;
+
+///
+class LyXFont {
+public:
+       /** The value INHERIT_* means that the font attribute is
+         inherited from the layout. In the case of layout fonts, the
+         attribute is inherited from the default font.
+         The value IGNORE_* is used with LyXFont::update() when the
+         attribute should not be changed.
+         */
+       enum FONT_FAMILY {
+               ///
+               ROMAN_FAMILY, // fontstruct rely on this to be 0
+               ///
+               SANS_FAMILY,
+               ///
+               TYPEWRITER_FAMILY,
+               ///
+               SYMBOL_FAMILY,
+               ///
+               INHERIT_FAMILY,
+               ///
+               IGNORE_FAMILY
+       };
+
+       ///
+       enum FONT_SERIES {
+               ///
+               MEDIUM_SERIES, // fontstruct rely on this to be 0
+               ///
+               BOLD_SERIES,
+               ///
+               INHERIT_SERIES,
+               ///
+               IGNORE_SERIES
+       };
+
+       ///
+       enum FONT_SHAPE {
+               ///
+               UP_SHAPE, // fontstruct rely on this to be 0
+               ///
+               ITALIC_SHAPE,
+               ///
+               SLANTED_SHAPE,
+               ///
+               SMALLCAPS_SHAPE,
+               ///
+               INHERIT_SHAPE,
+               ///
+               IGNORE_SHAPE
+       };
+
+       ///
+       enum FONT_SIZE {
+               ///
+               SIZE_TINY, // fontstruct rely on this to be 0
+               ///
+               SIZE_SCRIPT,
+               ///
+               SIZE_FOOTNOTE,
+               ///
+               SIZE_SMALL,
+               ///
+               SIZE_NORMAL,
+               ///
+               SIZE_LARGE,
+               ///
+               SIZE_LARGER,
+               ///
+               SIZE_LARGEST,
+               ///
+               SIZE_HUGE,
+               ///
+               SIZE_HUGER,
+               ///
+               INCREASE_SIZE,
+               ///
+               DECREASE_SIZE,
+               ///
+               INHERIT_SIZE,
+               ///
+               IGNORE_SIZE
+       };
+       /// Used for emph, underbar, noun and latex toggles
+       enum FONT_MISC_STATE {
+               ///
+               OFF,
+               ///
+               ON,
+               ///
+               TOGGLE,
+               ///
+               INHERIT,
+               ///
+               IGNORE
+       };
+       ///
+       enum FONT_COLOR {
+               ///
+               NONE,
+               ///
+               BLACK,
+               ///
+               WHITE,
+               ///
+               RED,
+               ///
+               GREEN,
+               ///
+               BLUE,
+               ///
+               CYAN,
+               ///
+               MAGENTA,
+               ///
+               YELLOW,
+               ///
+               MATH,
+               ///
+               INSET,
+               ///
+               INHERIT_COLOR,
+               ///
+               IGNORE_COLOR
+       };
+
+       /// Trick to overload constructor and make it megafast
+       enum FONT_INIT1 {
+               ///
+               ALL_INHERIT
+       };
+       ///
+       enum FONT_INIT2 {
+               ///
+               ALL_IGNORE
+       };
+       ///
+       enum FONT_INIT3 {
+               ///
+               ALL_SANE
+       };
+
+       ///
+       LyXFont();
+
+       /// LyXFont x(LyXFont ...) and LyXFont x = LyXFont ...
+       LyXFont(LyXFont const & x);
+       /// Shortcut initialization
+       LyXFont(LyXFont::FONT_INIT1);
+       /// Shortcut initialization
+       LyXFont(LyXFont::FONT_INIT2);
+       /// Shortcut initialization
+       LyXFont(LyXFont::FONT_INIT3);
+
+       /// LyXFont x,y; x=y;
+       LyXFont& operator=(LyXFont const & x);
+       /// Decreases font size by one
+       LyXFont & decSize();
+       /// Increases font size by one
+       LyXFont & incSize();
+       ///
+       FONT_FAMILY family() const;
+       ///
+       FONT_SERIES series() const;
+       ///
+       FONT_SHAPE shape() const;
+       ///
+       FONT_SIZE size() const;
+       ///
+       FONT_MISC_STATE emph() const;
+       ///
+       FONT_MISC_STATE underbar() const;
+       ///
+       FONT_MISC_STATE noun() const;
+
+       ///
+       FONT_MISC_STATE latex() const;
+       ///
+       FONT_COLOR color() const;
+       ///
+       LyXFont & setFamily(LyXFont::FONT_FAMILY f);
+       ///
+       LyXFont & setSeries(LyXFont::FONT_SERIES s);
+       ///
+       LyXFont & setShape(LyXFont::FONT_SHAPE s);
+       ///
+       LyXFont & setSize(LyXFont::FONT_SIZE s);
+       ///
+       LyXFont & setEmph(LyXFont::FONT_MISC_STATE e);
+       ///
+       LyXFont & setUnderbar(LyXFont::FONT_MISC_STATE u);
+       ///
+       LyXFont & setNoun(LyXFont::FONT_MISC_STATE n);
+       ///
+       LyXFont & setLatex(LyXFont::FONT_MISC_STATE l);
+       ///
+       LyXFont & setColor(LyXFont::FONT_COLOR c);
+       /// Set family after LyX text format
+       LyXFont & setLyXFamily(LString const &);
+       /// Set series after LyX text format
+       LyXFont & setLyXSeries(LString const &);
+       /// Set shape after LyX text format
+       LyXFont & setLyXShape(LString const &);
+       /// Set size after LyX text format
+       LyXFont & setLyXSize(LString const &);
+       /// Returns misc flag after LyX text format
+       LyXFont::FONT_MISC_STATE setLyXMisc(LString const &);
+
+       /// Sets color after LyX text format
+       LyXFont & setLyXColor(LString const &);
+       /// Sets size after GUI name
+       LyXFont & setGUISize(LString const &);
+       /// Returns size of font in LaTeX text notation
+       LString latexSize() const;
+       /** Updates font settings according to request. If an
+         attribute is IGNORE, the attribute is left as it is. */
+       /* 
+        * When toggleall=true, all properties that matches the font in use
+        * will have the effect that the properties is reset to the
+        * default.  If we have a text that is TYPEWRITER_FAMILY, and is
+        * update()'ed with TYPEWRITER_FAMILY, the operation will be as if
+        * a INHERIT_FAMILY was asked for.  This is necessary for the
+        * toggle-user-defined-style button on the toolbar.
+        */
+       void update(LyXFont const & newfont, bool toggleall=false);
+       /** Reduce font to fall back to template where possible.
+         Equal fields are reduced to INHERIT */
+       void reduce(LyXFont const & tmplt);
+       /// Realize font from a template (INHERIT are realized)
+       LyXFont & realize(LyXFont const & tmplt);
+
+       /// Is a given font fully resolved?
+       bool resolved() const;
+       /// Read a font specification from LyXLex. Used for layout files.
+       LyXFont & lyxRead(LyXLex&);
+       /// Writes the changes from this font to orgfont in .lyx format in file
+       void lyxWriteChanges(LyXFont const & orgfont, FILE *) const;
+       /** Writes the head of the LaTeX needed to change to this font.
+         Writes to file, the head of the LaTeX needed to change to this font.
+           Returns number of chars written. Base is the font state active now.
+       */
+       int latexWriteStartChanges(FILE *, LyXFont const & base) const;
+
+       /** Writes to LString, the head of the LaTeX needed to change
+         to this font. Returns number of chars written. Base is the
+         font state active now.
+       */
+       int latexWriteStartChanges(LString &, LyXFont const & base) const;
+
+       /** Writes the tail of the LaTeX needd to change to this font.
+         Returns number of chars written. Base is the font state we want
+         to achieve.
+       */
+       int latexWriteEndChanges(FILE *, LyXFont const & base) const;
+
+       /** Writes tha tail of the LaTeX needed to chagne to this font.
+         Returns number of chars written. Base is the font state we want
+           to achieve.
+       */
+       int latexWriteEndChanges(LString &, LyXFont const & base) const;
+       /// Build GUI description of font state
+       LString stateText() const;
+
+       ///
+       int maxAscent() const; 
+
+       ///
+       int maxDescent() const;
+
+       ///
+       int ascent(char c) const;
+
+       ///
+       int descent(char c) const;
+
+       ///
+       int width(char c) const;
+
+       ///
+       int textWidth(char const *s, int n) const;
+
+       ///
+       int stringWidth(LString const & s) const;
+
+       ///
+       int signedStringWidth(LString const & s) const;
+
+       /// Draws text and returns width of text
+       int drawText(char const*, int n, Pixmap, int baseline, int x) const;
+
+       ///
+       int drawString(LString const &, Pixmap pm, int baseline, int x) const;
+
+       ///
+       GC getGC() const;
+
+       ///
+       friend inline
+       bool operator==(LyXFont const & font1, LyXFont const & font2) {
+               return font1.bits == font2.bits;
+       }
+
+       ///
+       friend inline
+       bool operator!=(LyXFont const & font1, LyXFont const & font2) {
+               return font1.bits != font2.bits;
+       }
+
+       /// compares two fonts, ignoring the setting of the Latex part.
+       bool equalExceptLatex(LyXFont const &) const;
+
+private:
+       /// This have to be at least 32 bits, but 64 or more does not hurt
+       typedef unsigned int ui32;
+
+       /** Representation: bit table
+         Layout of bit table:
+                  11 1111 111 122 222 222 2233
+         Bit 012 34 567 8901 2345 678 901 234 567 8901
+             FFF SS SSS SSSS CCCC EEE UUU NNN LLL
+             aaa ee hhh iiii oooo mmm nnn ooo aaa
+             mmm rr aaa zzzz llll ppp ddd uuu ttt
+
+         Some might think this is a dirty representation, but it gives
+         us at least 25% speed-up, so why not?
+       */
+       ui32 bits;
+
+       ///
+       enum FONT_POSITION {
+               ///
+               Fam_Pos =  0,
+               ///
+               Ser_Pos =  3,
+               ///
+               Sha_Pos =  5,
+               ///
+               Siz_Pos =  8,
+               ///
+               Col_Pos = 12,
+               ///
+               Emp_Pos = 16,
+               ///
+               Und_Pos = 19,
+               ///
+               Nou_Pos = 22,
+               ///
+               Lat_Pos = 25
+       };
+
+       ///
+       enum FONT_MASK {
+               ///
+               Fam_Mask = 0x07,
+               ///
+               Ser_Mask = 0x03,
+               ///
+               Sha_Mask = 0x07,
+               ///
+               Siz_Mask = 0x0f,
+               ///
+               Col_Mask = 0x0f,
+               ///
+               Misc_Mask = 0x07
+       };
+       /// Sane font
+       enum {  sane = ui32(ROMAN_FAMILY) << Fam_Pos
+               | ui32(MEDIUM_SERIES) << Ser_Pos
+               | ui32(UP_SHAPE) << Sha_Pos
+               | ui32(SIZE_NORMAL) << Siz_Pos
+               | ui32(NONE) << Col_Pos
+               | ui32(OFF) << Emp_Pos
+               | ui32(OFF) << Und_Pos
+               | ui32(OFF) << Nou_Pos
+               | ui32(OFF) << Lat_Pos};
+       /// All inherit font
+       enum{ inherit = ui32(INHERIT_FAMILY) << Fam_Pos
+               | ui32(INHERIT_SERIES) << Ser_Pos
+               | ui32(INHERIT_SHAPE) << Sha_Pos
+               | ui32(INHERIT_SIZE) << Siz_Pos
+               | ui32(INHERIT_COLOR) << Col_Pos
+               | ui32(INHERIT) << Emp_Pos
+               | ui32(INHERIT) << Und_Pos
+               | ui32(INHERIT) << Nou_Pos
+               | ui32(INHERIT) << Lat_Pos};
+       /// All ignore font
+       enum{ ignore = ui32(IGNORE_FAMILY) << Fam_Pos
+              | ui32(IGNORE_SERIES) << Ser_Pos
+              | ui32(IGNORE_SHAPE) << Sha_Pos
+              | ui32(IGNORE_SIZE) << Siz_Pos
+              | ui32(IGNORE_COLOR) << Col_Pos
+              | ui32(IGNORE) << Emp_Pos
+              | ui32(IGNORE) << Und_Pos
+              | ui32(IGNORE) << Nou_Pos
+              | ui32(IGNORE) << Lat_Pos};
+       /// Updates a misc setting according to request
+       LyXFont::FONT_MISC_STATE setMisc(LyXFont::FONT_MISC_STATE newfont,
+                                        LyXFont::FONT_MISC_STATE org);
+
+       /// Converts logical attributes to concrete shape attribute
+       LyXFont::FONT_SHAPE realShape() const;
+
+       ///
+       XFontStruct* getXFontstruct() const;
+};
+
+
+inline LyXFont::LyXFont()
+{
+       bits = sane;
+}
+
+
+inline LyXFont::LyXFont(LyXFont const & x)
+{
+       bits = x.bits;
+}
+
+
+inline LyXFont::LyXFont(LyXFont::FONT_INIT1)
+{
+       bits = inherit;
+}
+
+
+inline LyXFont::LyXFont(LyXFont::FONT_INIT2)
+{
+       bits = ignore;
+}
+
+
+inline LyXFont::LyXFont(LyXFont::FONT_INIT3)
+{
+       bits = sane;
+}
+
+
+inline LyXFont & LyXFont::operator=(LyXFont const & x) 
+{
+       bits = x.bits;
+       return *this;
+}
+
+
+ // You don't have to understand the stuff below :-)
+ // It works, and it's bloody fast. (Asger)
+inline LyXFont::FONT_FAMILY LyXFont::family() const 
+{
+       return LyXFont::FONT_FAMILY((bits >> Fam_Pos) & Fam_Mask);
+}
+
+
+inline LyXFont::FONT_SERIES LyXFont::series() const
+{
+       return LyXFont::FONT_SERIES((bits >> Ser_Pos) & Ser_Mask);
+}
+
+
+inline LyXFont::FONT_SHAPE LyXFont::shape() const
+{
+       return LyXFont::FONT_SHAPE((bits >> Sha_Pos) & Sha_Mask);
+}
+
+
+inline LyXFont::FONT_SIZE LyXFont::size() const
+{
+       return LyXFont::FONT_SIZE((bits >> Siz_Pos) & Siz_Mask);
+}
+
+
+inline LyXFont::FONT_MISC_STATE LyXFont::emph() const
+{
+       return LyXFont::FONT_MISC_STATE((bits >> Emp_Pos) & Misc_Mask);
+}
+
+
+inline LyXFont::FONT_MISC_STATE LyXFont::underbar() const
+{
+       return LyXFont::FONT_MISC_STATE((bits >> Und_Pos) & Misc_Mask);
+}
+
+
+inline LyXFont::FONT_MISC_STATE LyXFont::noun() const
+{
+       return LyXFont::FONT_MISC_STATE((bits >> Nou_Pos) & Misc_Mask);
+}
+
+
+inline LyXFont::FONT_MISC_STATE LyXFont::latex() const 
+{
+       return LyXFont::FONT_MISC_STATE((bits >> Lat_Pos) & Misc_Mask);
+}
+
+
+inline LyXFont::FONT_COLOR LyXFont::color() const 
+{
+       return LyXFont::FONT_COLOR((bits >> Col_Pos) & Col_Mask);
+}
+
+
+inline LyXFont & LyXFont::setFamily(LyXFont::FONT_FAMILY f)
+{
+       bits &= ~(Fam_Mask << Fam_Pos);
+       bits |= ui32(f) << Fam_Pos;
+       return *this;
+}
+
+
+inline LyXFont & LyXFont::setSeries(LyXFont::FONT_SERIES s)
+{
+       bits &= ~(Ser_Mask << Ser_Pos);
+       bits |= ui32(s) << Ser_Pos;
+       return *this;
+}
+
+
+inline LyXFont & LyXFont::setShape(LyXFont::FONT_SHAPE s)
+{
+       bits &= ~(Sha_Mask << Sha_Pos);
+       bits |= ui32(s) << Sha_Pos;
+       return *this;
+}
+
+
+inline LyXFont & LyXFont::setSize(LyXFont::FONT_SIZE s)
+{
+       bits &= ~(Siz_Mask << Siz_Pos);
+       bits |= ui32(s) << Siz_Pos;
+       return *this;
+}
+
+
+inline LyXFont & LyXFont::setEmph(LyXFont::FONT_MISC_STATE e)
+{
+       bits &= ~(Misc_Mask << Emp_Pos);
+       bits |= ui32(e) << Emp_Pos;
+       return *this;
+}
+
+
+inline LyXFont & LyXFont::setUnderbar(LyXFont::FONT_MISC_STATE u)
+{
+       bits &= ~(Misc_Mask << Und_Pos);
+       bits |= ui32(u) << Und_Pos;
+       return *this;
+}
+
+
+inline LyXFont & LyXFont::setNoun(LyXFont::FONT_MISC_STATE n)
+{
+       bits &= ~(Misc_Mask << Nou_Pos);
+       bits |= ui32(n) << Nou_Pos;
+       return *this;
+}
+
+inline LyXFont & LyXFont::setLatex(LyXFont::FONT_MISC_STATE l)
+{
+       bits &= ~(Misc_Mask << Lat_Pos);
+       bits |= ui32(l) << Lat_Pos;
+       return *this;
+}
+
+
+inline LyXFont & LyXFont::setColor(LyXFont::FONT_COLOR c)
+{
+       bits &= ~(Col_Mask << Col_Pos);
+       bits |= ui32(c) << Col_Pos;
+       return *this;
+}
+#endif
diff --git a/src/lyxfr0.C b/src/lyxfr0.C
new file mode 100644 (file)
index 0000000..4b99559
--- /dev/null
@@ -0,0 +1,159 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich,
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "LString.h"
+#include "lyx_main.h"
+#include FORMS_H_LOCATION
+#include "form1.h"
+#include "lyxfr0.h"
+#include "lyxfr1.h"
+#include "lyxfunc.h"
+#include "lyxscreen.h"
+#include "error.h"
+#include "lyxtext.h"
+#include "gettext.h"
+#include "LyXView.h" // only because of form_main
+
+//---------------------------------------------------------------
+// I hate global variables, but the same search object must be used everywhere,
+// and the form is also global, so... 
+LyXFindReplace1        _FR;
+
+// This one should be a protected member of LyXFindReplace1
+// Form creation/destruction must also be done in LyXFindReplace1
+extern FD_form_search *fd_form_search;
+
+//---------------------------------------------------------------
+
+
+// callbacks for form form_search
+void SearchCancelCB(FL_OBJECT *, long)
+{
+       _FR.SearchCancelCB();
+}
+
+
+void SearchForwardCB(FL_OBJECT *, long)
+{
+       _FR.SearchCB(true);
+}
+
+
+void SearchBackwardCB(FL_OBJECT *, long)
+{
+       _FR.SearchCB(false);
+}
+
+
+void SearchReplaceAllCB(FL_OBJECT *, long)
+{
+       _FR.SearchReplaceAllCB();
+}
+
+
+void SearchReplaceCB(FL_OBJECT *, long)
+{
+       _FR.SearchReplaceCB();
+}
+
+
+//--------------------- LyXFindReplace0's implementation ------------
+
+LyXFindReplace0::LyXFindReplace0()
+{
+       fCaseSensitive = false;
+       fMatchWord = false;
+}
+
+
+void LyXFindReplace0::StartSearch()
+{
+       FD_form_search *fd_fs = fd_form_search;
+
+       if (fd_fs->form_search->visible) {
+               fl_raise_form(fd_fs->form_search);
+       } else {
+               fl_show_form(fd_fs->form_search,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
+                            _("Find & Replace"));      // RVDK_PATCH_5
+       }
+       ReInitFromForm();
+}
+
+
+void LyXFindReplace0::ReInitFromForm()
+{
+       FD_form_search *fd_fs = fd_form_search;
+
+       lsSearch = fl_get_input(fd_fs->input_search);
+       fCaseSensitive = fl_get_button(fd_fs->btnCaseSensitive);
+       fMatchWord = fl_get_button(fd_fs->btnMatchWord);
+}
+
+
+// Returns the value of the replace string in the form
+LString const LyXFindReplace0::ReplaceString()
+{
+       return LString(fl_get_input(fd_form_search->input_replace));
+}
+
+
+void LyXFindReplace0::SearchCancelCB()
+{
+       fl_hide_form(fd_form_search->form_search);
+}
+
+
+void LyXFindReplace0::SetReplaceEnabled(bool fEnable)
+{
+       FD_form_search *fd_fs = fd_form_search;
+       fReplaceEnabled = fEnable;
+       if (fEnable) {
+        fl_activate_object(fd_fs->replace_button);
+        fl_activate_object(fd_fs->replaceall_button);
+        fl_activate_object(fd_fs->input_replace);
+               fl_set_object_lcol(fd_fs->replace_button, FL_BLACK);
+               fl_set_object_lcol(fd_fs->replaceall_button, FL_BLACK);
+               fl_set_object_lcol(fd_fs->input_replace, FL_BLACK);
+       } else {
+        fl_deactivate_object(fd_fs->replace_button);
+        fl_deactivate_object(fd_fs->replaceall_button);
+        fl_deactivate_object(fd_fs->input_replace);
+               fl_set_object_lcol(fd_fs->replace_button,FL_INACTIVE);
+               fl_set_object_lcol(fd_fs->replaceall_button,FL_INACTIVE);
+               fl_set_object_lcol(fd_fs->input_replace, FL_INACTIVE);
+       }
+}
+
+
+void LyXFindReplace0::SetSearchString(LString const &ls)
+{
+       lsSearch = ls;
+       fl_set_input(fd_form_search->input_search, ls.c_str()); 
+}
+
+
+//---------------------------------------------------------------
+//HB??: Maybe _FR.StartSearch should be called in lyxfunc.C instead of MenuSearch() ?
+
+void MenuSearch()
+{
+       _FR.StartSearch();   
+}
diff --git a/src/lyxfr0.h b/src/lyxfr0.h
new file mode 100644 (file)
index 0000000..9372fd5
--- /dev/null
@@ -0,0 +1,83 @@
+// -*- C++ -*-
+#ifndef _LYXFR0_H
+#define _LYXFR0_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+
+
+/**
+  LyXFindReplace0
+  This is a virtual base class. It does not handle text specific
+  items. It only manages the Find & Replace form and the variables.
+  
+To be added:
+
+- Confirm replace lightbutton (checkbox)
+
+- A history list for search and replace strings.
+These 2 stringlists should match, so that you can replay previous replaces.
+If you select another search string, then the first choice should be the 
+replace string you have typed before.
+
+- regex searches (I'm working on that -- dnaber, 1999-02-24)
+
+*/
+class LyXFindReplace0 {
+public:
+       ///
+       LyXFindReplace0();
+       ///
+       virtual ~LyXFindReplace0() {};  
+       
+       /// Initialize internal variables and dialog
+       virtual void StartSearch();
+
+       // Callbacks from form
+       ///
+       virtual void SearchCancelCB();
+       ///
+       virtual bool SearchCB(bool fForward) = 0;
+       ///
+       virtual void SearchReplaceCB() = 0;
+       ///
+       virtual void SearchReplaceAllCB() = 0;
+protected:
+       ///
+       bool            fCaseSensitive;
+       /// Match complete word only.
+       bool            fMatchWord;
+       /// replace buttons enabled?
+       bool            fReplaceEnabled;
+       /// search string
+       LString         lsSearch;
+
+       ///
+       void SetReplaceEnabled(bool fEnabled);
+       ///
+       bool ReplaceEnabled() { return fReplaceEnabled; }
+
+       /// Initialize search variables from Find & Replace form
+       virtual void ReInitFromForm();
+
+       // Return values
+       ///
+       bool CaseSensitive() { return fCaseSensitive; }
+       ///
+       bool MatchWord() { return fMatchWord; }
+       ///
+       LString const SearchString() { return lsSearch; }
+       ///
+       void SetSearchString(LString const &ls);
+       ///
+       LString const ReplaceString();
+
+       ///
+       bool ValidSearchData() { return !lsSearch.empty(); }            
+};
+
+#endif
diff --git a/src/lyxfr1.C b/src/lyxfr1.C
new file mode 100644 (file)
index 0000000..acef2e7
--- /dev/null
@@ -0,0 +1,415 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich,
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#include <ctype.h>
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "LString.h"
+#include "lyx_main.h"
+#include FORMS_H_LOCATION
+#include "form1.h"
+#include "lyxfr0.h"
+#include "lyxfr1.h"
+#include "lyxfunc.h"
+#include "lyxscreen.h"
+#include "error.h"
+#include "lyxtext.h"
+#include "gettext.h"
+#include "LyXView.h"
+#include "lyx_gui_misc.h"
+#include "minibuffer.h"
+
+extern BufferView *current_view; // called too many times in this file...
+extern MiniBuffer *minibuffer;
+
+// Maximum length copied from the current selection to the search string
+const int LYXSEARCH_MAXLEN =  128;
+
+// function prototypes
+
+bool IsLetterCharOrDigit(char ch);
+
+// If nothing selected, select the word at the cursor.
+// Returns the current selection
+// Note: this function should be in LyXText!
+LString const GetSelectionOrWordAtCursor(LyXText *lt);
+
+// Returns the current selection. If nothing is selected or if the selection
+// spans 2 paragraphs, an empty string is returned.
+LString const GetCurrentSelectionAsString(LyXText *lt);
+
+// This is a copy of SetSelectionOverString from text.C
+// It does the same, but uses only the length as a parameter
+void SetSelectionOverLenChars(LyXText *lt, int len);
+
+//-------------------------------------------------------------
+
+bool IsLetterCharOrDigit(char ch)
+{
+       return IsLetterChar(ch) || isdigit(ch);
+}
+
+
+// Returns the current selection. If nothing is selected or if the selection
+// spans 2 paragraphs, an empty string is returned.
+LString const GetCurrentSelectionAsString(LyXText *lt) 
+{
+       LyXParagraph    *par;
+       int             pos;
+       int             endpos;
+       int             i;
+       char            sz[LYXSEARCH_MAXLEN];
+       char            ch;
+       bool            fPrevIsSpace;
+
+       sz[0] = 0;
+       par = lt->cursor.par;
+       if (lt->selection && (lt->sel_cursor.par == par)) {
+               // (selected) and (begin/end in same paragraph)
+               pos = lt->sel_start_cursor.pos;
+               endpos = lt->sel_end_cursor.pos;
+               i = 0;
+               fPrevIsSpace = false;
+               while ((i < LYXSEARCH_MAXLEN-2) && 
+                       (pos < par->Last()) && (pos < endpos)) {
+                       ch = par->GetChar(pos);
+
+                       //HB??: Maybe (ch <= ' ') 
+                       if ((ch == ' ') || ((unsigned char)ch <= LYX_META_INSET)) {
+                               // consecutive spaces --> 1 space char
+                               if (fPrevIsSpace) {
+                                       pos++;          // Next text pos
+                                       continue;       // same search pos
+                               }
+                               sz[i] = ' ';
+                               fPrevIsSpace = true;
+                       } else {
+                               sz[i] = ch;
+                               fPrevIsSpace = false;
+                       }
+                       pos++;
+                       i++;
+               } 
+               sz[i] = 0;
+       }
+       return LString(sz);
+}
+
+
+// If nothing selected, select the word at the cursor.
+// Returns the current selection
+LString const GetSelectionOrWordAtCursor(LyXText *lt) 
+{
+       lt->SelectWordWhenUnderCursor();
+       return GetCurrentSelectionAsString(lt);
+}
+
+
+// This is a copy of SetSelectionOverString from text.C
+// It does the same, but uses only the length as a parameter
+void SetSelectionOverLenChars(LyXText *lt, int len)
+{
+       lt->sel_cursor = lt->cursor;
+       int i;
+       for (i=0; i < len; i++)
+               lt->CursorRight();
+       lt->SetSelection();
+}
+
+
+//------------------------------
+
+void LyXFindReplace1::StartSearch()
+{
+       LyXFindReplace0::StartSearch();
+       SetReplaceEnabled(!current_view->currentBuffer()->isReadonly());
+       searchForward = true;
+       if (lsSearch.empty()) 
+               SetSearchString(GetSelectionOrWordAtCursor(current_view->currentBuffer()->text));
+}      
+
+
+// TODO?: the user can insert multiple spaces with this routine (1999-01-11, dnaber)
+void LyXFindReplace1::SearchReplaceCB()
+{
+       LyXText         *ltCur;
+
+       if (!current_view->getScreen())
+               return;
+       if (current_view->currentBuffer()->isReadonly())
+               return;
+       
+       // CutSelection cannot cut a single space, so we have to stop
+       // in order to avoid endless loop :-(
+       ReInitFromForm();
+       if (SearchString().length() == 0 || (SearchString().length() == 1
+                                            && SearchString()[0] == ' ') ) {
+               WriteAlert(_("Sorry!"), _("You cannot replace a single space, "
+                                         "nor an empty character."));
+               return;
+       }
+       
+       LString const replacestring = ReplaceString();
+
+       current_view->getScreen()->HideCursor();
+       current_view->currentBuffer()->update(-2);
+
+       ltCur = current_view->currentBuffer()->text;    
+       if (ltCur->selection) {
+               // clear the selection (if there is any) 
+               current_view->getScreen()->ToggleSelection(false);
+               current_view->currentBuffer()->text->
+                       ReplaceSelectionWithString(replacestring.c_str());
+               current_view->currentBuffer()->text->
+                       SetSelectionOverString(replacestring.c_str());
+               current_view->currentBuffer()->update(1);
+       }
+       
+       // jump to next match:
+       SearchCB( searchForward );
+}
+
+
+// replaces all occurences of a string (1999-01-15, dnaber@mini.gt.owl.de)
+void LyXFindReplace1::SearchReplaceAllCB()
+{
+       LyXText         *ltCur;
+
+       if (!current_view->getScreen())
+               return;
+       if (current_view->currentBuffer()->isReadonly())
+               return;
+
+       // CutSelection cannot cut a single space, so we have to stop
+       // in order to avoid endless loop :-(
+       ReInitFromForm();
+       if (SearchString().length() == 0 || (SearchString().length() == 1
+                                            && SearchString()[0] == ' ') ) {
+               WriteAlert(_("Sorry!"), _("You cannot replace a single space, "
+                                         "nor an empty character."));
+               return;
+       }
+
+       LString const replacestring = ReplaceString();
+
+       current_view->getScreen()->HideCursor();
+
+       // start at top
+       current_view->currentBuffer()->text->ClearSelection();
+       current_view->currentBuffer()->text->CursorTop();
+
+       int replace_count = 0;
+       do {
+               ltCur = current_view->currentBuffer()->text;    
+               if (ltCur->selection) {
+                       current_view->currentBuffer()->update(-2);
+                       current_view->getScreen()->ToggleSelection(false);
+                       current_view->currentBuffer()->text->
+                               ReplaceSelectionWithString(replacestring.c_str());
+                       current_view->currentBuffer()->text->
+                               SetSelectionOverString(replacestring.c_str());
+                       current_view->currentBuffer()->update(1); 
+                       replace_count++;
+               }
+       } while( SearchCB(true) );
+
+       if( replace_count == 0 ) {
+               LyXBell();      
+               minibuffer->Set(_("String not found!"));
+       } else {
+               if( replace_count == 1 ) {
+                       minibuffer->Set(_("1 string has been replaced."));
+               } else {
+                       LString str;
+                       str += replace_count;
+                       str += _(" strings have been replaced.");
+                       minibuffer->Set(str);
+               }
+       }
+}
+
+
+bool LyXFindReplace1::SearchCB(bool fForward)
+{
+       LyXText         *ltCur;
+       bool result;
+
+       // store search direction
+       searchForward = fForward;
+       
+       if (!current_view->getScreen())
+               return(false);
+   
+       current_view->getScreen()->HideCursor();
+       current_view->currentBuffer()->update(-2);
+       ltCur = current_view->currentBuffer()->text;
+       if (ltCur->selection) 
+               ltCur->cursor = fForward ? ltCur->sel_end_cursor :
+                                                 ltCur->sel_start_cursor;
+
+       ReInitFromForm();
+       iLenSelected = SearchString().length();
+   
+       if (!ValidSearchData() ||
+           (fForward ? SearchForward(ltCur) : SearchBackward(ltCur))) {
+               current_view->currentBuffer()->update(-2);
+
+               // clear the selection (if there is any) 
+               current_view->getScreen()->ToggleSelection();
+               current_view->currentBuffer()->text->ClearSelection();
+
+               // set the new selection 
+               SetSelectionOverLenChars(current_view->currentBuffer()->text, iLenSelected);
+               current_view->getScreen()->ToggleSelection(false);
+               minibuffer->Set(_("Found."));
+               result = true;
+       } else {
+               LyXBell();
+               minibuffer->Set(_("String not found!"));
+               result = false;
+       }
+   
+       if (current_view->getWorkArea()->focus)
+               current_view->getScreen()->ShowCursor();
+
+       return(result);
+}
+
+
+// if the string can be found: return true and set the cursor to
+// the new position 
+// (was: LyXText::SearchForward(char const* string) in text2.C )
+bool LyXFindReplace1::SearchForward(LyXText *lt)
+{
+       LyXParagraph *par;
+       int pos;
+
+       par = lt->cursor.par;
+       pos = lt->cursor.pos;
+
+       while (par && !IsSearchStringInText(par,pos)) {
+               if (pos<par->Last()-1)
+                       pos++;
+               else {
+                       pos = 0;
+                       par = par->Next();
+               }
+       }
+       if (par) {
+               lt->SetCursor(par,pos);
+               return true;
+       } else
+               return false;
+}
+
+
+// if the string can be found: return true and set the cursor to
+// the new position 
+// (was: LyXText::SearchBackward(char const* string) in text2.C )
+bool LyXFindReplace1::SearchBackward(LyXText *lt)
+{
+       LyXParagraph *par = lt->cursor.par;
+       int pos = lt->cursor.pos;
+
+       do {
+               if (pos>0)
+                       pos--;
+               else {
+                       // We skip empty paragraphs (Asger)
+                       do {
+                               par = par->Previous();
+                               if (par)
+                                       pos = par->Last()-1;
+                       } while (par && pos<0);
+               }
+       } while (par && !IsSearchStringInText(par,pos));
+  
+       if (par) {
+               lt->SetCursor(par,pos);
+               return true;
+       } else
+               return false;
+}
+
+
+/* Compares 2 char values. 
+return value is
+    > 0 if chSearch > ch2
+    = 0 if chSearch == ch2
+    < 0 if chSearch < ch2
+*/
+int LyXFindReplace1::CompareChars(char chSearch, char chText)
+{
+       if (CaseSensitive())
+               return (chSearch - chText);
+       return (toupper((unsigned char) chSearch) - toupper((unsigned char) chText));
+}
+
+
+// returns true if the search string is at the specified position 
+// (Copied from the original "LyXText::IsStringInText" in text2.C )
+bool LyXFindReplace1::IsSearchStringInText(LyXParagraph *par, int pos)
+{
+       char            chSrch = 0;
+       char            chText;
+       bool            fPrevIsSpace;
+       int             iText;
+       int             iSrch;
+
+       if (!par) 
+               return false;
+
+       fPrevIsSpace = false;
+       iText = 0; iSrch = 0;
+       while (pos+iText < par->Last() && 
+              iSrch < SearchString().length()) {
+               chSrch = SearchString()[iSrch];
+               chText = par->GetChar(pos+iText);
+// Why was this code there ??? Insets are *not* spaces!
+// It seems that there is some code here to handle multiple spaces. I
+// wonder why this is useful...  (JMarc)
+//             if ((chText == ' ') || 
+//                 ((unsigned char)chText <= LYX_META_INSET)) 
+               if (chText == ' ') {
+                       if (fPrevIsSpace) {
+                               iText++;  // next Text pos
+                               continue; // same search pos
+                       }
+//                     chText = ' ';                           
+                       fPrevIsSpace = true;
+               } else
+                       fPrevIsSpace = false;
+               if (CompareChars(chSrch, chText) != 0)
+                       break;
+               
+               iSrch++;
+               iText++;
+       }
+
+       if (iSrch < SearchString().length())
+               return false;
+
+       if (!MatchWord() 
+           || ((pos <= 0 || !IsLetterCharOrDigit(par->GetChar(pos-1)))
+               && (pos+iText >= par->Last() 
+                   || !IsLetterCharOrDigit(par->GetChar(pos + iText))))) {
+               iLenSelected = iText;
+               return true;
+       }
+
+       return false;
+}
diff --git a/src/lyxfr1.h b/src/lyxfr1.h
new file mode 100644 (file)
index 0000000..e89a6ff
--- /dev/null
@@ -0,0 +1,60 @@
+// -*- C++ -*-
+#ifndef _LYXFR1_H
+#define _LYXFR1_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+class  LyXText;
+class  LyXParagraph;
+
+/**
+  LyXFindReplace1"
+
+  This class implements Find & Replace in LyXText texts. It is based on
+  LyXFindReplace0, which implements the form related stuff. (see lyxfr0.h)
+  */
+class LyXFindReplace1 : public LyXFindReplace0 {
+public:
+       ///
+       LyXFindReplace1() : LyXFindReplace0() {};
+       ///
+       ~LyXFindReplace1() {};  
+
+       /// Initialize internal variables and search form
+       virtual void StartSearch();
+
+       ///
+       virtual bool SearchCB(bool fForward);
+       ///
+       virtual void SearchReplaceCB();
+       ///
+       virtual void SearchReplaceAllCB();
+protected:
+       /// Set by IsSearchStringInText:
+       int     iLenSelected;
+
+       /// Direction we are searching:
+       bool searchForward;
+    
+       ///
+       bool SearchForward(LyXText *lt);
+       ///
+       bool SearchBackward(LyXText *lt); 
+
+       /** Compares 2 char values. 
+       return value is
+           \begin{itemize}
+           \item > 0 if ch1 > ch2
+           \item = 0 if ch1 == ch2
+           \item < 0 if ch1 < ch2
+           \end{itemize}
+       */
+       int CompareChars(char chSearch, char chText);
+
+       /// returns true if the specified string is at the specified position 
+       bool IsSearchStringInText(LyXParagraph *par, int pos);
+};
+#endif
diff --git a/src/lyxfunc.C b/src/lyxfunc.C
new file mode 100644 (file)
index 0000000..8ddc081
--- /dev/null
@@ -0,0 +1,2866 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "definitions.h"
+#include "lyxlookup.h"
+#include "kbmap.h"
+#include "lyxfunc.h"
+#include "bufferlist.h"
+#include "lyxserver.h"
+#include "lyx.h"
+#include "intl.h"
+#include "lyx_main.h"
+#include "lyx_cb.h"
+#include "insets/insetlatex.h"
+#include "insets/inseturl.h"
+#include "insets/insetlatexaccent.h"
+#include "insets/insettoc.h"
+#include "insets/insetlof.h"
+#include "insets/insetloa.h"
+#include "insets/insetlot.h"
+#include "insets/insetref.h"
+#include "insets/insetparent.h"
+#include "mathed/formulamacro.h"
+#include "toolbar.h"
+#include "spellchecker.h" // RVDK_PATCH_5
+#include "minibuffer.h"
+#include "vspace.h"
+#include "insets/insetbib.h"
+#include "LyXView.h"
+#include "insets/insetindex.h"
+#include "insets/insetinclude.h"
+#include "filedlg.h"
+#include "lyx_gui_misc.h"
+#include "filetools.h"
+#include "FileInfo.h"
+#include "lyxscreen.h"
+#include "error.h"
+#include "lyxrc.h"
+#include "lyxtext.h"
+#include "gettext.h"
+#include "trans_mgr.h"
+#include "ImportLaTeX.h"
+#include "ImportNoweb.h"
+
+//     $Id: lyxfunc.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $   
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lyxfunc.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+extern bool cursor_follows_scrollbar;
+
+extern void InsertAsciiFile(LString const &, bool);
+extern void math_insert_symbol(char const*);
+extern Bool math_insert_greek(char const); // why "Bool"?
+extern BufferList bufferlist;
+extern LyXServer *lyxserver;
+extern short greek_kb_flag;
+extern FD_form_toc *fd_form_toc;
+extern bool selection_possible;
+
+extern kb_keymap *toplevel_keymap;
+
+extern void BeforeChange();
+extern void MenuWrite(Buffer*);
+extern void MenuWriteAs(Buffer*);
+extern int  MenuRunLaTeX(Buffer*);
+extern int  MenuBuildProg(Buffer*);
+extern int  MenuRunChktex(Buffer*);
+extern bool MenuRunDvips(Buffer *,bool);
+extern void MenuPrint(Buffer*);
+extern void MenuSendto();
+extern void QuitLyX();
+extern void MenuFax(Buffer *);
+extern void MenuMakeLaTeX(Buffer *);
+extern void MenuMakeLinuxDoc(Buffer *);
+extern void MenuMakeDocBook(Buffer *);
+extern void MenuMakeAscii(Buffer *);
+extern void MenuPasteSelection(char at);
+extern LyXAction lyxaction;
+// (alkis)
+extern tex_accent_struct get_accent(kb_action action);
+
+extern void AutoSave();
+extern void MenuSearch();
+extern void CopyCB();
+extern void CopyEnvironmentCB();
+extern void PasteEnvironmentCB();
+extern void GotoNote();
+extern void NoteCB();
+extern void OpenStuff();
+extern void HyphenationPoint();
+extern void Ldots();
+extern void EndOfSentenceDot();
+extern void MenuSeparator();
+extern void HFill();
+extern void MenuUndo();
+extern void MenuRedo();
+extern void SmallUpdate(signed char);
+extern void SetUpdateTimer(float timer= 0.3);
+extern void FreeUpdateTimer();
+extern bool MenuPreview(Buffer*);
+extern bool MenuPreviewPS(Buffer*);
+extern void MenuInsertLabel(const char *);
+extern void MenuInsertRef();
+extern void MenuLayoutCharacter();
+extern void MenuLayoutParagraph();
+extern void MenuLayoutDocument();
+extern void MenuLayoutPaper();
+extern void MenuLayoutTable(int flag);
+extern void MenuLayoutQuotes();
+extern void MenuLayoutPreamble();
+extern void MenuLayoutSave();
+extern void bulletForm();
+
+extern Buffer * NewLyxFile(LString const &);
+extern void LoadLyXFile(LString const &);
+extern void Reconfigure();
+
+extern int current_layout;
+extern int getISOCodeFromLaTeX(char *);
+
+extern int UnlockInset(UpdatableInset*);
+
+extern void ShowLatexLog();
+
+extern void UpdateInset(Inset* inset, bool mark_dirty = true);
+
+/* === globals =========================================================== */
+
+bool LyXFunc::show_sc = true;
+
+
+LyXFunc::LyXFunc(LyXView *o)
+       :owner(o)
+{
+       meta_fake_bit = 0;
+       lyx_dead_action = LFUN_NOACTION;
+       lyx_calling_dead_action = LFUN_NOACTION;
+       setupLocalKeymap();
+}
+
+
+LyXFunc::~LyXFunc()
+{
+}
+
+
+LString LyXFunc::argAsString(char const *const argument)
+{
+       LString tmp(argument);
+
+       if (tmp.empty()) {
+               // get the arg from somewhere else, a popup, or ask for
+               // it in the minibuffer.
+       }
+       lyxerr.debug("argAsString: <" + tmp + '>');
+       return tmp;
+}
+
+
+// I changed this func slightly. I commented out the ...FinishUndo(),
+// this means that all places that used to have a moveCursorUpdate, now
+// have a ...FinishUndo() as the preceeding statement. I have also added
+// a moveCursorUpdate to some of the functions that updated the cursor, but
+// that did not show its new position.
+inline
+void LyXFunc::moveCursorUpdate(bool selecting)
+{
+       if (selecting || owner->currentBuffer()->text->mark_set) {
+               owner->currentBuffer()->text->SetSelection();
+               owner->currentView()->getScreen()->ToggleToggle();
+               owner->currentBuffer()->update(0);
+       } else {
+               owner->currentBuffer()->update(-2); // this IS necessary
+               // (Matthias) 
+       }
+       owner->currentView()->getScreen()->ShowCursor();
+       
+       /* ---> Everytime the cursor is moved, show the current font state. */
+       // should this too me moved out of this func?
+       //owner->getMiniBuffer()->Set(CurrentState());
+}
+
+
+int LyXFunc::processKeyEvent(XEvent *ev)
+{
+       char s_r[10];
+       s_r[9] = '\0';
+       int num_bytes;
+       int action; 
+       char *argument = 0;
+       XKeyEvent *keyevent = &ev->xkey;
+       KeySym keysym_return;
+
+       num_bytes = LyXLookupString(ev, s_r, 10, &keysym_return);
+
+       if (lyxerr.debugging(Error::KEY)) {
+               lyxerr.print(LString("KeySym is ")
+                            + XKeysymToString(keysym_return)
+                            + "["
+                            + int(keysym_return) + "]"
+                            + " and num_bytes is "
+                            + num_bytes
+                            + " the string returned is \""
+                            + LString(s_r) + '\"');
+       }
+       // Do nothing if we have nothing (JMarc)
+       if (num_bytes == 0 && keysym_return == NoSymbol) {
+               lyxerr.debug("Empty kbd action (probably composing)",
+                            Error::KEY);
+               return 0;
+       }
+       
+       // this function should be used always [asierra060396]
+       if (owner->currentView()->available() &&
+           owner->currentBuffer()->the_locking_inset &&
+           keysym_return == XK_Escape) {
+               UnlockInset(owner->currentBuffer()->the_locking_inset);
+               owner->currentBuffer()->text->CursorRight();
+               return 0;
+       }
+
+       // Can we be sure that this will work for all X-Windows
+       // implementations? (Lgb)
+       // This code snippet makes lyx ignore some keys. Perhaps
+       // all of them should be explictly mentioned?
+       if((keysym_return >= XK_Shift_L && keysym_return <= XK_Hyper_R)
+          || keysym_return == XK_Mode_switch || keysym_return == 0x0)
+               return 0;
+
+       // Do a one-deep top-level lookup for
+       // cancel and meta-fake keys. RVDK_PATCH_5
+       cancel_meta_seq.reset();
+
+       action = cancel_meta_seq.addkey(keysym_return, keyevent->state
+                                       &(ShiftMask|ControlMask
+                                         |Mod1Mask)); 
+
+       // When not cancel or meta-fake, do the normal lookup. 
+       // Note how the meta_fake Mod1 bit is OR-ed in and reset afterwards.
+       // Mostly, meta_fake_bit = 0. RVDK_PATCH_5.
+       if ( (action != LFUN_CANCEL) && (action != LFUN_META_FAKE) ) {
+
+               // remove Caps Lock and Mod2 as a modifiers
+               action = keyseq.addkey(keysym_return,
+                                      (keyevent->state | meta_fake_bit)
+                                      &(ShiftMask|ControlMask
+                                        |Mod1Mask));      
+       }
+       // Dont remove this unless you know what you are doing.
+       meta_fake_bit = 0;
+               
+       if (action == 0) action = LFUN_PREFIX;
+
+       if (lyxerr.debugging(Error::KEY)) {
+               char buf[100];
+               keyseq.print(buf,100);
+               lyxerr.print(LString("Key [")
+                            + int(action) + "]["
+                            + buf + "]["
+                            + num_bytes +"]");
+       }
+
+       // already here we know if it any point in going further
+       // why not return already here if action == -1 and
+       // num_bytes == 0? (Lgb)
+
+       if(keyseq.length>1 || keyseq.length<-1){
+               char buf[100];
+               keyseq.print(buf,100);
+               owner->getMiniBuffer()->Set(buf);
+       }
+
+       if (action==-1) {
+               if (keyseq.length<-1) { // unknown key sequence...
+                       char buf[100];
+                       LyXBell();
+                       keyseq.print(buf,100);
+                       owner->getMiniBuffer()->Set(_("Unknown sequence:"),buf);
+                       return 0;
+               }
+       
+               char isochar = keyseq.getiso();
+               if (!(keyevent->state&ControlMask) &&
+                   !(keyevent->state&Mod1Mask) &&
+                   (isochar && keysym_return < 0xF000)) {
+                       argument = &s_r[0]; // shall this be here
+                       argument[0] = isochar;
+                       argument[1] = 0;
+               }
+               if (!argument) {
+                       lyxerr.debug("Empty argument!");
+                       // This can`t possibly be of any use
+                       // so we`ll skip the dispatch.
+                       return 0;
+               }
+       } else
+               if (action==LFUN_SELFINSERT) {
+                       argument = &s_r[0];
+                       argument[1] = 0;
+               }
+    
+        bool tmp_sc = show_sc;
+       show_sc = false;
+       Dispatch(action, argument);
+       show_sc = tmp_sc;
+       
+       // Need this for deadkeys (alkis)
+       //keyseq.length=0;
+       // ...but that breaks the minibuffer's display of "M-"...
+#ifdef WITH_WARNINGS
+#warning How does the deadkeys react to this?
+#endif
+       return 0;
+} 
+
+
+LString LyXFunc::Dispatch(LString const &cmd, LString const &arg)
+{
+       return Dispatch(lyxaction.LookupFunc(cmd.c_str()),
+                       arg.c_str());
+}
+
+
+LString LyXFunc::Dispatch(int ac,
+                         char const *do_not_use_this_arg)
+{
+       char const * argument = 0;
+       kb_action action;
+        
+
+       FL_OBJECT *ob = 0;  // This will disapear soon
+    
+        // we have not done anything wrong yet.
+        errorstat = false;
+       dispatch_buffer = LString();
+       
+       // if action is a pseudo-action, we need the real action
+       if (lyxaction.isPseudoAction(ac)) {
+               char const *tmparg = 0;
+               action = (kb_action)lyxaction.retrieveActionArg(ac, &tmparg);
+               if (tmparg)
+                       argument = tmparg;
+       } else {
+               action = (kb_action)ac;
+               argument = do_not_use_this_arg; // except here
+       }
+    
+       selection_possible = false;
+       
+       if (owner->currentView()->available() 
+           && owner->currentView()->getScreen())
+               owner->currentView()->getScreen()->HideCursor();
+
+       if(!owner->currentView()->available()) {
+               // This lists the allowed funcs when we have no
+               // buffer loaded
+               switch(action){
+               case LFUN_MENU_OPEN_BY_NAME:
+               case LFUN_PREFIX:
+               case LFUN_MENUNEW:
+               case LFUN_MENUNEWTMPLT:
+               case LFUN_MENUOPEN:
+               case LFUN_QUIT:
+               case LFUN_PUSH_TOOLBAR:
+               case LFUN_ADD_TO_TOOLBAR:
+               case LFUN_EXEC_COMMAND:
+               case LFUN_DROP_LAYOUTS_CHOICE:
+               case LFUN_FILE_NEW:
+               case LFUN_FILE_OPEN:
+               case LFUN_IMPORT:
+               case LFUN_RECONFIGURE:
+               case LFUN_CANCEL:
+               case LFUN_APROPOS:
+               case LFUN_META_FAKE:
+
+                       break;
+               case LFUN_UNKNOWN_ACTION:
+                       setErrorMessage(N_("Unknown action"));
+                       goto exit_with_message;
+               default:
+                       setErrorMessage(N_("Command not allowed with"
+                                       "out any document open"));
+                       goto exit_with_message;  // action not allowed
+               }
+       }
+       
+       commandshortcut = LString();
+       
+       if (lyxrc->display_shortcuts && show_sc) {
+               if (action != LFUN_SELFINSERT) {
+                       // Put name of command and list of shortcuts
+                       // for it in minibuffer
+                       LString comname = lyxaction.getActionName(action);
+
+                       int pseudoaction = action;
+                       bool argsadded = false;
+
+                       LString argu = argument;
+                       if (!argu.empty()) {
+                               // If we have the command with argument, 
+                               // this is better
+                               pseudoaction = 
+                                       lyxaction.searchActionArg(action,
+                                                                 argument);
+
+                               if (pseudoaction == -1) {
+                                       pseudoaction = action;
+                               } else {
+                                       comname += " " + argu;
+                                       argsadded = true;
+                               }
+                       }
+
+                       LString shortcuts = toplevel_keymap->findbinding(pseudoaction);
+
+                       if (!shortcuts.empty()) {
+                               comname += ": " + shortcuts;
+                       } else if (!argsadded) {
+                               comname += " " + argu;
+                       }
+
+                       if (!comname.empty()) {
+                               comname.strip();
+                               commandshortcut = "(" + comname + ')';
+                               owner->getMiniBuffer()->Set(commandshortcut);
+                               // Here we could even add a small pause,
+                               // to annoy the user and make him learn
+                               // the shortcuts.
+                               // No! That will just annoy, not teach
+                               // anything. The user will read the messages
+                               // if they are interested. (Asger)
+                       }
+               }
+        }
+
+        // Now that we know which action, if the buffer is RO let's check 
+       // whether the action is legal.  Alejandro 970603
+        if (owner->currentView()->available() && 
+            owner->currentBuffer()->isReadonly() && 
+            lyxaction.isFuncRO(action)) {
+               setErrorMessage(N_("Document is read-only"));
+               lyxerr.debug("Error: Document is read-only.");
+               goto exit_with_message;
+       }
+
+       // If in math mode pass the control to
+       // the math inset [asierra060396]
+       if (owner->currentView()->available() &&
+           owner->currentBuffer()->the_locking_inset) {
+               if (action>1 || (action==LFUN_UNKNOWN_ACTION && keyseq.length>=-1)) {
+                       char s[8]="";
+                       if (action==LFUN_UNKNOWN_ACTION && !argument) {
+                               sprintf(s, "%c", keyseq.getiso());
+                               argument = &s[0];
+                       }
+                       // Undo/Redo pre 0.13 is a bit tricky for insets.                   
+                       if (action==LFUN_UNDO) {
+                               int slx, sly;
+                               UpdatableInset* inset =
+                                       owner->currentBuffer()->the_locking_inset;
+                               inset->GetCursorPos(slx, sly);
+                               UnlockInset(inset);
+                               MenuUndo();
+                               inset = (UpdatableInset*)owner->currentBuffer()->text->cursor.par->GetInset(owner->currentBuffer()->text->cursor.pos);
+                               if (inset) 
+                                       inset->Edit(slx, sly);
+                               return LString();
+                       } else 
+                               if (action==LFUN_REDO) {
+                                       int slx, sly;
+                                       UpdatableInset* inset = owner->currentBuffer()->the_locking_inset;
+                                       inset->GetCursorPos(slx, sly);
+                                       UnlockInset(inset);
+                                       MenuRedo();
+                                       inset = (UpdatableInset*)owner->currentBuffer()->text->cursor.par->GetInset(owner->currentBuffer()->text->cursor.pos);
+                                       if (inset)
+                                               inset->Edit(slx, sly);
+                                       return LString();
+                               } else
+                                       if (owner->currentBuffer()->the_locking_inset->LocalDispatch(action, argument))
+                                               return LString();
+                                       else {
+                                               setMessage(N_("Text mode"));
+                                               if (action==LFUN_RIGHT || action==-1)
+                                                       owner->currentBuffer()->text->CursorRight();
+                                               if (action==LFUN_LEFT || action==LFUN_RIGHT)
+                                                       return LString();
+                                       }
+               }
+       }
+
+       switch(action) {
+               // --- Misc -------------------------------------------
+       case LFUN_WORDFINDFORWARD  : 
+       case LFUN_WORDFINDBACKWARD : { 
+               LyXText *ltCur;
+               static LString last_search;
+               LString searched_string;
+           
+               LString arg = argAsString(argument);
+                       
+               if (!arg.empty()) {
+                       last_search = arg;
+                       searched_string = arg;
+               } else {
+                       searched_string = last_search;
+               }
+
+               ltCur =  owner->currentView()->currentBuffer()->text ;   
+
+               if (!searched_string.empty() &&
+                   (    (action == LFUN_WORDFINDBACKWARD) ? 
+                        ltCur->SearchBackward( searched_string.c_str() ) :
+                        ltCur->SearchForward(  searched_string.c_str() ) 
+                        )){
+
+                       // ??? What is that ???
+                       owner->currentView()->currentBuffer()->update(-2);
+
+                       // ??? Needed ???
+                       // clear the selection (if there is any) 
+                       owner->currentView()->getScreen()->ToggleSelection();
+                       owner->currentView()->currentBuffer()->text->ClearSelection();
+
+                       // Move cursor so that successive C-s 's will not stand in place. 
+                       if( action == LFUN_WORDFINDFORWARD ) 
+                               owner->currentBuffer()->text->CursorRightOneWord();
+                       owner->currentBuffer()->text->FinishUndo();
+                       moveCursorUpdate(false);
+
+                       // ??? Needed ???
+                       // set the new selection 
+                       // SetSelectionOverLenChars(owner->currentView()->currentBuffer()->text, iLenSelected);
+                       owner->currentView()->getScreen()->ToggleSelection(false);
+               } else 
+                       LyXBell();      
+        
+               // REMOVED : if (owner->currentView()->getWorkArea()->focus)
+               owner->currentView()->getScreen()->ShowCursor();
+       }
+       break;
+
+       case LFUN_PREFIX:
+       {
+               if (owner->currentView()->available()
+                   && owner->currentView()->getScreen()) {
+                       owner->currentBuffer()->update(-2);
+               }
+               char buf[100];
+               keyseq.print(buf,100, true);
+               owner->getMiniBuffer()->Set(buf, LString(), LString(), 1);
+       }
+       break;
+
+       // --- Misc -------------------------------------------
+       case LFUN_EXEC_COMMAND:
+               owner->getMiniBuffer()->ExecCommand(); 
+               break;
+               
+       case LFUN_CANCEL:                   // RVDK_PATCH_5
+               keyseq.reset();
+               meta_fake_bit = 0;
+               if(owner->currentView()->available())
+                       // cancel any selection
+                       Dispatch(int(LFUN_MARK_OFF), NULL);
+               setMessage(N_("Cancel"));
+               break;
+
+       case LFUN_META_FAKE:                                 // RVDK_PATCH_5
+       {
+               meta_fake_bit = Mod1Mask;
+               char buf[100];
+               keyseq.print(buf, 98, true);
+               LString res = LString("M-") + buf;
+               setMessage(buf); // RVDK_PATCH_5
+       }
+       break;  
+
+       case LFUN_READ_ONLY_TOGGLE:
+               if (owner->currentBuffer()->lyxvc.inUse()) {
+                       owner->currentBuffer()->lyxvc.toggleReadOnly();
+               } else {
+                       owner->currentBuffer()->setReadonly(
+                               !owner->currentBuffer()->isReadonly());
+               }
+               break;
+               
+       case LFUN_CENTER: // this is center and redraw.
+               BeforeChange();
+               if (owner->currentBuffer()->text->cursor.y >
+                   owner->currentView()->getWorkArea()->h / 2) {
+                       owner->currentView()->getScreen()->
+                               Draw(owner->currentBuffer()->text->cursor.y -
+                                    owner->currentView()->getWorkArea()->h/2);
+               } else { // <=
+                       owner->currentView()->getScreen()->
+                               Draw(0);
+               }
+               owner->currentBuffer()->update(0);
+               owner->currentView()->redraw();
+               break;
+               
+       case LFUN_APPENDIX:
+               if (owner->currentView()->available()) {
+                       owner->currentBuffer()->text->toggleAppendix();
+                       owner->currentBuffer()->update(1);
+               }
+               break;
+
+       // --- Menus -----------------------------------------------
+       case LFUN_MENUNEW:
+               MenuNew(false);
+               break;
+               
+       case LFUN_MENUNEWTMPLT:
+               MenuNew(true);
+               break;
+               
+       case LFUN_MENUOPEN:
+               MenuOpen();
+               break;
+               
+       case LFUN_CLOSEBUFFER:
+               CloseBuffer();
+               break;
+               
+       case LFUN_MENUWRITE:
+               MenuWrite(owner->currentBuffer());
+               break;
+               
+       case LFUN_MENUWRITEAS:
+               MenuWriteAs(owner->currentBuffer());
+               break;
+               
+       case LFUN_MENURELOAD:
+               reloadBuffer();
+               break;
+               
+       case LFUN_PREVIEW:
+               MenuPreview(owner->currentBuffer());
+               break;
+                       
+       case LFUN_PREVIEWPS:
+               MenuPreviewPS(owner->currentBuffer());
+               break;
+               
+       case LFUN_RUNLATEX:
+               MenuRunLaTeX(owner->currentBuffer());
+               break;
+               
+        case LFUN_BUILDPROG:
+                MenuBuildProg(owner->currentBuffer());
+                break;
+                
+       case LFUN_RUNCHKTEX:
+               MenuRunChktex(owner->currentBuffer());
+               break;
+               
+       case LFUN_RUNDVIPS:
+               MenuRunDvips(owner->currentBuffer(), false);
+               break;
+               
+       case LFUN_MENUPRINT:
+               MenuPrint(owner->currentBuffer());
+               break;
+               
+       case LFUN_FAX:
+               MenuFax(owner->currentBuffer());
+               break;
+                       
+       case LFUN_EXPORT:
+       {
+               //needs argument as string
+               LString extyp=argAsString(argument);
+               
+               // latex
+               if (extyp == "latex") {
+                       // make sure that this buffer is not linuxdoc
+                       MenuMakeLaTeX(owner->currentBuffer());
+               }
+               // linuxdoc
+               else if (extyp == "linuxdoc") {
+                       // make sure that this buffer is not latex
+                       MenuMakeLinuxDoc(owner->currentBuffer());
+               }
+               // docbook
+               else if (extyp == "docbook") {
+                       // make sure that this buffer is not latex or linuxdoc
+                       MenuMakeDocBook(owner->currentBuffer());
+               }
+               // dvi
+               else if (extyp == "dvi") {
+                       // Run LaTeX as "Update dvi..." Bernhard.
+                       // We want the dvi in the current directory. This
+                       // is achieved by temporarily disabling use of
+                       // temp directory. As a side-effect, we get
+                       // *.log and *.aux files also. (Asger)
+                       bool flag = lyxrc->use_tempdir;
+                       lyxrc->use_tempdir = false;
+                       MenuRunLaTeX(owner->currentBuffer());
+                       lyxrc->use_tempdir = flag;
+               }
+               // postscript
+               else if (extyp == "postscript") {
+                       // Start Print-dialog. Not as good as dvi... Bernhard.
+                       MenuPrint(owner->currentBuffer());
+                       // Since the MenuPrint is a pop-up, we can't use
+                       // the same trick as above. (Asger)
+                       // MISSING: Move of ps-file :-(
+               }
+               // ascii
+               else if (extyp == "ascii") {
+                       MenuMakeAscii(owner->currentBuffer());
+               }
+               else if (extyp == "custom") {
+                       MenuSendto();
+                       break;
+               }
+               else {
+                       setErrorMessage(LString(N_("Unknown export type: "))
+                                       + extyp);
+               }
+       }
+       break;
+
+       case LFUN_IMPORT:
+       {
+               //needs argument as string
+               LString imtyp=argAsString(argument);
+               
+               // latex
+               if (imtyp == "latex") {
+                       doImportLaTeX(false);
+               }
+               // ascii
+               else if (imtyp == "ascii") {
+                       doImportASCII(false);
+               } else if (imtyp == "asciiparagraph") {
+                       doImportASCII(true);
+               // noweb
+               } else if (imtyp == "noweb") {
+                       doImportLaTeX(true);
+               } else {
+                       setErrorMessage(LString(N_("Unknown import type: "))
+                                       + imtyp);
+               }
+               break;
+       }
+               
+       case LFUN_QUIT:
+               QuitLyX();
+               break;
+               
+       case LFUN_TOCVIEW:
+               TocUpdateCB(ob, 0);
+               if (fd_form_toc->form_toc->visible) {
+                       fl_raise_form(fd_form_toc->form_toc);
+               } else {
+                       fl_show_form(fd_form_toc->form_toc,
+                                    FL_PLACE_MOUSE |
+                                    FL_FREE_SIZE, FL_FULLBORDER,
+                                    _("Table of Contents"));
+               }
+               break;
+               
+       case LFUN_TOC_INSERT:
+       {
+               Inset *new_inset =
+                       new InsetTOC(owner->currentBuffer());
+               owner->currentBuffer()->insertInset(new_inset,
+                                                   "Standard", true);
+               break;
+       }
+       
+       case LFUN_LOF_INSERT:
+       {
+               Inset *new_inset =
+                       new InsetLOF(owner->currentBuffer());
+               owner->currentBuffer()->insertInset(new_inset,
+                                                   "Standard", true);
+               break;
+       }
+       
+       case LFUN_LOA_INSERT:
+       {
+               Inset *new_inset =
+                       new InsetLOA(owner->currentBuffer());
+               owner->currentBuffer()->insertInset(new_inset,
+                                                   "Standard", true);
+               break;
+       }
+
+       case LFUN_LOT_INSERT:
+       {
+               Inset *new_inset =
+                       new InsetLOT(owner->currentBuffer());
+               owner->currentBuffer()->insertInset(new_inset,
+                                                   "Standard", true);
+               break;
+       }
+               
+       case LFUN_TABLE:
+               TableCB(ob, 0);
+               break;
+               
+       case LFUN_FIGURE:
+               FigureCB(ob, 0);
+               break;
+               
+       case LFUN_AUTOSAVE:
+               AutoSave();
+               break;
+               
+       case LFUN_UNDO:
+               MenuUndo();
+               break;
+               
+       case LFUN_REDO:
+               MenuRedo();
+               break;
+               
+       case LFUN_MENUSEARCH:
+               MenuSearch();
+               break;
+               
+       case LFUN_PASTE:
+               PasteCB();
+               break;
+               
+       case LFUN_PASTESELECTION:
+       {
+               bool asPara = false;
+               if (LString(argument) == "paragraph") asPara = true;
+               MenuPasteSelection(asPara);
+               break;
+       }
+
+       case LFUN_CUT:
+               CutCB();
+               break;
+               
+       case LFUN_COPY:
+               CopyCB();
+               break;
+               
+       case LFUN_LAYOUT_COPY:
+               CopyEnvironmentCB();
+               break;
+               
+       case LFUN_LAYOUT_PASTE:
+               PasteEnvironmentCB();
+               break;
+               
+       case LFUN_GOTOERROR:
+               owner->currentView()->gotoError();
+               break;
+               
+       case LFUN_REMOVEERRORS:
+               if (owner->currentBuffer()->removeAutoInsets()) {
+                       owner->currentView()->redraw();
+                       owner->currentView()->fitCursor();
+                       owner->currentView()->updateScrollbar();
+               }
+               break;
+               
+       case LFUN_GOTONOTE:
+               GotoNote();
+               break;
+               
+       case LFUN_OPENSTUFF:
+               OpenStuff();
+               break;
+               
+       case LFUN_HYPHENATION:
+               HyphenationPoint();
+               break;
+               
+       case LFUN_LDOTS:
+               Ldots();
+               break;
+               
+       case LFUN_END_OF_SENTENCE:
+               EndOfSentenceDot();
+               break;
+
+       case LFUN_MENU_SEPARATOR:
+               MenuSeparator();
+               break;
+               
+       case LFUN_HFILL:
+               HFill();
+               break;
+               
+       case LFUN_DEPTH:
+               DepthCB(ob, 0);
+               break;
+               
+       case LFUN_DEPTH_MIN:
+               DepthCB(ob, -1);
+               break;
+               
+       case LFUN_DEPTH_PLUS:
+               DepthCB(ob, 1);
+               break;
+               
+       case LFUN_FREE:
+               FreeCB();
+               break;
+               
+       case LFUN_TEX:
+               TexCB();
+               break;
+               
+       case LFUN_MELT:
+               MeltCB(ob, 0);
+               break;
+               
+       case LFUN_RECONFIGURE:
+               Reconfigure();
+               break;
+
+       case LFUN_FOOTMELT:
+               if (owner->currentView()->available()
+                   && !owner->currentBuffer()->text->selection
+                   && owner->currentBuffer()->text->cursor.par->footnoteflag
+                   != LyXParagraph::NO_FOOTNOTE)
+               { // only melt footnotes with FOOTMELT, not margins etc
+                 if(owner->currentBuffer()->text->cursor.par->footnotekind == LyXParagraph::FOOTNOTE)
+                       MeltCB(ob,0);
+               }
+               else
+                       FootCB(ob, 0); 
+               break;
+
+       case LFUN_MARGINMELT:
+               if (owner->currentView()->available()
+                   && !owner->currentBuffer()->text->selection
+                   && owner->currentBuffer()->text->cursor.par->footnoteflag
+                   != LyXParagraph::NO_FOOTNOTE)
+               { // only melt margins
+                 if(owner->currentBuffer()->text->cursor.par->footnotekind == LyXParagraph::MARGIN)
+                       MeltCB(ob,0);
+               }
+               else
+                       MarginCB(ob, 0); 
+               break;
+               
+               // --- version control -------------------------------
+       case LFUN_VC_REGISTER:
+       {
+               if (!owner->currentBuffer()->lyxvc.inUse())
+                       owner->currentBuffer()->lyxvc.registrer();
+       }
+       break;
+               
+       case LFUN_VC_CHECKIN:
+       {
+               if (owner->currentBuffer()->lyxvc.inUse()
+                   && !owner->currentBuffer()->isReadonly())
+                       owner->currentBuffer()->lyxvc.checkIn();
+       }
+       break;
+               
+       case LFUN_VC_CHECKOUT:
+       {
+               if (owner->currentBuffer()->lyxvc.inUse()
+                   && owner->currentBuffer()->isReadonly())
+                       owner->currentBuffer()->lyxvc.checkOut();
+       }
+       break;
+       
+       case LFUN_VC_REVERT:
+       {
+               owner->currentBuffer()->lyxvc.revert();
+       }
+       break;
+               
+       case LFUN_VC_UNDO:
+       {
+               owner->currentBuffer()->lyxvc.undoLast();
+       }
+       break;
+               
+       case LFUN_VC_HISTORY:
+       {
+               owner->currentBuffer()->lyxvc.showLog();
+               break;
+       }
+       
+       // --- buffers ----------------------------------------
+       case LFUN_PREVBUFFER:
+#ifdef WITH_WARNINGS
+#warning fix this please
+#endif
+               // it is the LyXView or the BufferView that should
+               // remember the previous buffer, not bufferlist.
+//                     if (owner->currentView()->available()){   
+//                             BeforeChange();
+//                             owner->currentBuffer()->update(-2);
+//                     }
+//                     owner->currentView()->setBuffer(bufferlist.prev());
+
+//                     owner->currentView()->
+//                             resizeCurrentBufferPseudoExpose();
+               break;
+                       
+       case LFUN_FILE_INSERT:
+       {
+               // needs argument as string
+               LString fil = argAsString(argument);
+               MenuInsertLyXFile(fil);
+       }
+       break;
+       
+       case LFUN_FILE_INSERT_ASCII:
+       {
+               bool asPara = false;
+               asPara = (LString(argument) == "paragraph");
+               InsertAsciiFile(LString(), asPara);
+       }
+       break;
+       
+       case LFUN_FILE_NEW:
+       {
+               // servercmd: argument must be <file>:<template>
+               Buffer * tmpbuf = 0;
+               tmpbuf = NewLyxFile(argument);
+               if (tmpbuf)
+                       owner->currentView()->setBuffer(tmpbuf);
+       }
+               break;
+                       
+       case LFUN_FILE_OPEN:
+               owner->currentView()->setBuffer(
+                       bufferlist.loadLyXFile(argument));
+               break;
+
+       case LFUN_LATEX_LOG:
+               ShowLatexLog();
+               break;
+               
+       case LFUN_LAYOUTNO:
+       {
+               lyxerr.debug("LFUN_LAYOUTNO: (arg) " + LString(argument));
+               int sel = atoi(argument);
+               lyxerr.debug(LString("LFUN_LAYOUTNO: (sel) ") + int(sel));
+               
+               // Should this give a setMessage instead?
+               if (sel == 0) 
+                       return LString(); // illegal argument
+
+               sel--; // sel 1..., but layout 0...
+
+               // Pretend we got the name instead.
+               Dispatch(int(LFUN_LAYOUT), 
+                        lyxstyle.NameOfLayout(owner->currentBuffer()->
+                                              text->parameters->
+                                              textclass,
+                                              sel).c_str());
+               return LString();
+       }
+               
+       case LFUN_LAYOUT:
+       {
+               lyxerr.debug("LFUN_LAYOUT: (arg) "
+                            + LString(argument));
+               
+               // Derive layout number from given argument (string)
+               // and current buffer's textclass (number). */    
+               int layoutno = -1;
+               layoutno =
+                       lyxstyle.NumberOfLayout(owner->
+                                               currentBuffer()->
+                                               text->parameters->
+                                               textclass,
+                                               argument);
+
+               // see if we found the layout number:
+               if (layoutno == -1) {
+                       setErrorMessage(LString(N_("Layout ")) + argument + 
+                                       N_(" not known"));
+                       break;
+               }
+                       
+               if (current_layout != layoutno) {
+                       owner->currentView()->getScreen()->HideCursor();
+                       current_layout = layoutno;
+                       owner->currentBuffer()->update(-2);
+                       owner->currentBuffer()->text->
+                               SetLayout(layoutno);
+                       owner->getToolbar()->combox->
+                               select(owner->currentBuffer()->
+                                      text->cursor.par->
+                                      GetLayout() + 1);
+                       owner->currentBuffer()->update(1);
+               }
+       }
+       break;
+
+       case LFUN_LAYOUT_DOCUMENT:
+               MenuLayoutDocument();
+               break;
+               
+       case LFUN_LAYOUT_PARAGRAPH:
+               MenuLayoutParagraph();
+               break;
+               
+       case LFUN_LAYOUT_CHARACTER:
+               MenuLayoutCharacter();
+               break;
+               
+       case LFUN_LAYOUT_TABLE:
+       {
+               int flag = 0;
+               if (LString(argument) == "true") flag = 1;
+               MenuLayoutTable(flag);
+       }
+       break;
+               
+       case LFUN_LAYOUT_PAPER:
+               MenuLayoutPaper();
+               break;
+               
+       case LFUN_LAYOUT_QUOTES:
+               MenuLayoutQuotes();
+               break;
+               
+       case LFUN_LAYOUT_PREAMBLE:
+               MenuLayoutPreamble();
+               break;
+               
+       case LFUN_LAYOUT_SAVE_DEFAULT:
+               MenuLayoutSave();
+               break;
+               
+       case LFUN_DROP_LAYOUTS_CHOICE:
+               owner->getToolbar()->combox->Show();
+               break;
+
+       case LFUN_EMPH:
+               EmphCB();
+               break;
+               
+       case LFUN_BOLD:
+               BoldCB();
+               break;
+               
+       case LFUN_NOUN:
+               NounCB();
+               break;
+               
+       case LFUN_CODE:
+               CodeCB();
+               break;
+               
+       case LFUN_SANS:
+               SansCB();
+               break;
+               
+       case LFUN_ROMAN:
+               RomanCB();
+               break;
+               
+       case LFUN_DEFAULT:
+               StyleResetCB();
+               break;
+               
+       case LFUN_UNDERLINE:
+               UnderlineCB();
+               break;
+               
+       case LFUN_FONT_SIZE:
+               FontSizeCB(argument);
+               break;
+               
+       case LFUN_FONT_STATE:
+               setMessage(CurrentState());
+               break;
+               
+       case LFUN_UPCASE_WORD:
+               owner->currentBuffer()->update(-2);
+               FreeUpdateTimer();
+               owner->currentBuffer()->text->ChangeWordCase(2);
+               owner->currentBuffer()->update(1);
+               SetUpdateTimer();
+               break;
+               
+       case LFUN_LOWCASE_WORD:
+               owner->currentBuffer()->update(-2);
+               FreeUpdateTimer();
+               owner->currentBuffer()->text->ChangeWordCase(0);
+               owner->currentBuffer()->update(1);
+               SetUpdateTimer();
+               break;
+               
+       case LFUN_CAPITALIZE_WORD:
+               owner->currentBuffer()->update(-2);
+               FreeUpdateTimer();
+               owner->currentBuffer()->text->ChangeWordCase(1);
+               owner->currentBuffer()->update(1);
+               SetUpdateTimer();
+               break;
+               
+       case LFUN_INSERT_LABEL:
+               MenuInsertLabel(argument);
+               break;
+               
+       case LFUN_INSERT_REF:
+               MenuInsertRef();
+               break;
+               
+       case LFUN_REFTOGGLE:
+       {
+               InsetRef *inset =
+                       (InsetRef*)getInsetByCode(Inset::REF_CODE);
+               if (inset) {
+                       if (inset->getFlag()==InsetRef::REF)
+                               inset->setFlag(InsetRef::PAGE_REF);
+                       else
+                               inset->setFlag(InsetRef::REF);
+                       UpdateInset(inset);
+               } else {
+                       setErrorMessage(N_("No cross-reference to toggle"));
+               }
+       }
+       break;
+       
+       case LFUN_REFBACK:
+       {
+               owner->currentView()->restorePosition();
+       }
+       break;
+
+       case LFUN_REFGOTO:
+       {
+               LString label(argument);
+               if (label.empty()) {
+                       InsetRef *inset =
+                               (InsetRef*)getInsetByCode(Inset::REF_CODE);
+                       if (inset)
+                                label = inset->getContents();
+               }
+               
+               if (!label.empty()) {
+                       owner->currentView()->savePosition();
+                       owner->currentBuffer()->gotoLabel(label.c_str());
+               }
+       }
+       break;
+               
+       case LFUN_MENU_OPEN_BY_NAME:
+               owner->getMenus()->openByName(argument);
+               break; // RVDK_PATCH_5
+               
+       case LFUN_SPELLCHECK:
+               if (lyxrc->isp_command != "none")
+                       ShowSpellChecker();
+               break; // RVDK_PATCH_5
+               
+               // --- Cursor Movements -----------------------------
+       case LFUN_RIGHT:
+       {
+               Buffer *tmpbuffer = owner->currentBuffer();
+               LyXText *tmptext = owner->currentBuffer()->text;
+               if(!tmptext->mark_set)
+                       BeforeChange();
+               tmpbuffer->update(-2);
+               if (tmptext->cursor.pos < tmptext->cursor.par->Last()
+                   && tmptext->cursor.par->GetChar(tmptext->cursor.pos)
+                   == LYX_META_INSET
+                   && tmptext->cursor.par->GetInset(tmptext->cursor.pos)
+                   && tmptext->cursor.par->GetInset(tmptext->cursor.pos)->Editable()==2){
+                       Inset* tmpinset = tmptext->cursor.par->GetInset(tmptext->cursor.pos);
+                       setMessage(tmpinset->EditMessage());
+                       tmpinset->Edit(0,0);
+                       break;
+               }
+               tmptext->CursorRight();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+       }
+       break;
+               
+       case LFUN_LEFT:
+       {
+               // This is soooo ugly. Isn`t it possible to make
+               // it simpler? (Lgb)
+               LyXText *txt= owner->currentBuffer()->text;
+               if(!txt->mark_set) BeforeChange();
+               owner->currentBuffer()->update(-2);
+               txt->CursorLeft();
+               if (txt->cursor.pos < txt->cursor.par->Last()
+                   && txt->cursor.par->GetChar(txt->cursor.pos)
+                   == LYX_META_INSET
+                   && txt->cursor.par->GetInset(txt->cursor.pos)
+                   && txt->cursor.par->GetInset(txt->cursor.pos)->Editable()==2) {
+                       Inset* tmpinset = txt->cursor.par->GetInset(txt->cursor.pos);
+                       setMessage(tmpinset->EditMessage());
+                       tmpinset->Edit(tmpinset->Width(txt->GetFont(txt->cursor.par,
+                                                                   txt->cursor.pos)),0);
+                       //                      tmpinset->Edit(-1, 0);  // -1 means go rightmost
+                       break;
+               }
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+       }
+       break;
+               
+       case LFUN_UP:
+               if(!owner->currentBuffer()->text->mark_set) BeforeChange();
+               owner->currentBuffer()->update(-3);
+               owner->currentBuffer()->text->CursorUp();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_DOWN:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-3);
+               owner->currentBuffer()->text->CursorDown();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+
+       case LFUN_UP_PARAGRAPH:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-3);
+               owner->currentBuffer()->text->CursorUpParagraph();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_DOWN_PARAGRAPH:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-3);
+               owner->currentBuffer()->text->CursorDownParagraph();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_PRIOR:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-3);
+               owner->currentView()->cursorPrevious();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_NEXT:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-3);
+               owner->currentView()->cursorNext();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_HOME:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorHome();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_END:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorEnd();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_TAB:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorTab();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_WORDRIGHT:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorRightOneWord();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_WORDLEFT:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorLeftOneWord();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_BEGINNINGBUF:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorTop();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_ENDBUF:
+               if(!owner->currentBuffer()->text->mark_set)
+                       BeforeChange();
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorBottom();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(false);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+
+      
+               /* cursor selection ---------------------------- */
+       case LFUN_RIGHTSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorRight();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_LEFTSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorLeft();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_UPSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorUp();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_DOWNSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorDown();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+
+       case LFUN_UP_PARAGRAPHSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorUpParagraph();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_DOWN_PARAGRAPHSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorDownParagraph();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_PRIORSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentView()->cursorPrevious();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_NEXTSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentView()->cursorNext();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_HOMESEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorHome();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_ENDSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorEnd();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_WORDRIGHTSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorRightOneWord();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_WORDLEFTSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorLeftOneWord();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_BEGINNINGBUFSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorTop();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+               
+       case LFUN_ENDBUFSEL:
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->CursorBottom();
+               owner->currentBuffer()->text->FinishUndo();
+               moveCursorUpdate(true);
+               owner->getMiniBuffer()->Set(CurrentState());
+               break;
+
+               // --- text changing commands ------------------------
+       case LFUN_BREAKLINE:
+               BeforeChange();
+               owner->currentBuffer()->text->InsertChar(LYX_META_NEWLINE);
+               SmallUpdate(1);
+               SetUpdateTimer(0.01);
+               moveCursorUpdate(false);
+               break;
+               
+       case LFUN_PROTECTEDSPACE:
+               BeforeChange();
+               owner->currentBuffer()->text->
+                       InsertChar(LYX_META_PROTECTED_SEPARATOR);
+               SmallUpdate(1);
+               SetUpdateTimer();
+                moveCursorUpdate(false);
+               break;
+               
+       case LFUN_SETMARK:
+               if(owner->currentBuffer()->text->mark_set) {
+                       BeforeChange();
+                       owner->currentBuffer()->update(0);
+                       setMessage(N_("Mark removed"));
+               } else {
+                       BeforeChange();
+                       owner->currentBuffer()->text->mark_set = 1;
+                       owner->currentBuffer()->update(0);
+                       setMessage(N_("Mark set"));
+               }
+               owner->currentBuffer()->text->sel_cursor =
+                       owner->currentBuffer()->text->cursor;
+               break;
+               
+       case LFUN_DELETE:
+               FreeUpdateTimer();
+               if (!owner->currentBuffer()->text->selection) {
+                       owner->currentBuffer()->text->Delete();
+                       owner->currentBuffer()->text->sel_cursor =
+                               owner->currentBuffer()->text->cursor;
+                       SmallUpdate(1);
+                       // It is possible to make it a lot faster still
+                       // just comment out the lone below...
+                       owner->currentView()->getScreen()->ShowCursor();
+               } else {
+                       CutCB();
+               }
+               SetUpdateTimer();
+               break;
+
+       case LFUN_DELETE_SKIP:
+       {
+               // Reverse the effect of LFUN_BREAKPARAGRAPH_SKIP.
+               
+               LyXCursor cursor = owner->currentBuffer()->text->cursor;
+
+               FreeUpdateTimer();
+               if (!owner->currentBuffer()->text->selection) {
+                       if (cursor.pos == cursor.par->Last()) {
+                               owner->currentBuffer()->text->CursorRight();
+                               cursor = owner->currentBuffer()->text->cursor;
+                               if (cursor.pos == 0
+                                   && !(cursor.par->added_space_top 
+                                        == VSpace (VSpace::NONE))) {
+                                       owner->currentBuffer()->text->SetParagraph
+                                               (cursor.par->line_top,
+                                                cursor.par->line_bottom,
+                                                cursor.par->pagebreak_top, 
+                                                cursor.par->pagebreak_bottom,
+                                                VSpace(VSpace::NONE), 
+                                                cursor.par->added_space_bottom,
+                                                cursor.par->align, 
+                                                cursor.par->labelwidthstring, 0);
+                                       owner->currentBuffer()->text->CursorLeft();
+                                       owner->currentBuffer()->update (1);
+                               } else {
+                                       owner->currentBuffer()->text->CursorLeft();
+                                       owner->currentBuffer()->text->Delete();
+                                       owner->currentBuffer()->text->sel_cursor =
+                                               owner->currentBuffer()->text->cursor;
+                                       SmallUpdate(1);
+                               }
+                       } else {
+                               owner->currentBuffer()->text->Delete();
+                               owner->currentBuffer()->text->sel_cursor =
+                                       owner->currentBuffer()->text->cursor;
+                               SmallUpdate(1);
+                       }
+               } else {
+                       CutCB();
+               }
+               SetUpdateTimer();
+       }
+       break;
+
+       /* -------> Delete word forward. */
+       case LFUN_DELETE_WORD_FORWARD:
+               owner->currentBuffer()->update(-2);
+               FreeUpdateTimer();
+               owner->currentBuffer()->text->DeleteWordForward();
+               owner->currentBuffer()->update( 1 );
+               SetUpdateTimer();
+               moveCursorUpdate(false);
+               break;
+
+               /* -------> Delete word backward. */
+       case LFUN_DELETE_WORD_BACKWARD:
+               owner->currentBuffer()->update(-2);
+               FreeUpdateTimer();
+               owner->currentBuffer()->text->DeleteWordBackward();
+               owner->currentBuffer()->update( 1 );
+               SetUpdateTimer();
+               moveCursorUpdate(false);
+               break;
+               
+               /* -------> Kill to end of line. */
+       case LFUN_DELETE_LINE_FORWARD:
+               FreeUpdateTimer();
+               owner->currentBuffer()->update(-2);
+               owner->currentBuffer()->text->DeleteLineForward();
+               owner->currentBuffer()->update( 1 );
+               SetUpdateTimer();
+               moveCursorUpdate(false);
+               break;
+               
+               /* -------> Set mark off. */
+       case LFUN_MARK_OFF:
+               BeforeChange();
+               owner->currentBuffer()->update(0);
+               owner->currentBuffer()->text->sel_cursor =
+                       owner->currentBuffer()->text->cursor;
+               setMessage(N_("Mark off"));
+               break;
+
+               /* -------> Set mark on. */
+       case LFUN_MARK_ON:
+               BeforeChange();
+               owner->currentBuffer()->text->mark_set = 1;
+               owner->currentBuffer()->update( 0 );
+               owner->currentBuffer()->text->sel_cursor =
+                       owner->currentBuffer()->text->cursor;
+               setMessage(N_("Mark on"));
+               break;
+               
+       case LFUN_BACKSPACE:
+       {
+               FreeUpdateTimer();
+               if (!owner->currentBuffer()->text->selection) {
+                       if (owner->getIntl()->getTrans()->backspace()) {
+                               owner->currentBuffer()->text->Backspace();
+                               owner->currentBuffer()->text->sel_cursor =
+                                       owner->currentBuffer()->text->cursor;
+                               SmallUpdate(1);
+                               // It is possible to make it a lot faster still
+                               // just comment out the lone below...
+                               owner->currentView()->getScreen()->ShowCursor();
+                       }
+               } else {
+                       CutCB();
+               }
+               SetUpdateTimer();
+       }
+       break;
+
+       case LFUN_BACKSPACE_SKIP:
+       {
+               // Reverse the effect of LFUN_BREAKPARAGRAPH_SKIP.
+               
+               LyXCursor cursor = owner->currentBuffer()->text->cursor;
+               
+               FreeUpdateTimer();
+               if (!owner->currentBuffer()->text->selection) {
+                       if (cursor.pos == 0 
+                           && !(cursor.par->added_space_top 
+                                == VSpace (VSpace::NONE))) {
+                               owner->currentBuffer()->text->SetParagraph 
+                                       (cursor.par->line_top,      
+                                        cursor.par->line_bottom,
+                                        cursor.par->pagebreak_top, 
+                                        cursor.par->pagebreak_bottom,
+                                        VSpace(VSpace::NONE), cursor.par->added_space_bottom,
+                                        cursor.par->align, 
+                                        cursor.par->labelwidthstring, 0);
+                               owner->currentBuffer()->update (1);
+                       } else {
+                               owner->currentBuffer()->text->Backspace();
+                               owner->currentBuffer()->text->sel_cursor 
+                                       = cursor;
+                               SmallUpdate (1);
+                       }
+               } else
+                       CutCB();
+               SetUpdateTimer();
+       }
+       break;
+
+       case LFUN_BREAKPARAGRAPH:
+       {
+               BeforeChange();
+               owner->currentBuffer()->text->BreakParagraph(0);
+               SmallUpdate(1);
+               SetUpdateTimer(0.01);
+               owner->currentBuffer()->text->sel_cursor =
+                       owner->currentBuffer()->text->cursor;
+               break;
+       }
+
+       case LFUN_BREAKPARAGRAPHKEEPLAYOUT:
+       {
+               BeforeChange();
+               owner->currentBuffer()->text->BreakParagraph(1);
+               SmallUpdate(1);
+               SetUpdateTimer(0.01);
+               owner->currentBuffer()->text->sel_cursor =
+                       owner->currentBuffer()->text->cursor;
+               break;
+       }
+       
+       case LFUN_BREAKPARAGRAPH_SKIP:
+       {
+               // When at the beginning of a paragraph, remove
+               // indentation and add a "defskip" at the top.
+               // Otherwise, do the same as LFUN_BREAKPARAGRAPH.
+               
+               LyXCursor cursor = owner->currentBuffer()->text->cursor;
+               
+               BeforeChange();
+               if (cursor.pos == 0) {
+                       if (cursor.par->added_space_top == VSpace(VSpace::NONE)) {
+                               owner->currentBuffer()->text->SetParagraph
+                                       (cursor.par->line_top,      
+                                        cursor.par->line_bottom,
+                                        cursor.par->pagebreak_top, 
+                                        cursor.par->pagebreak_bottom,
+                                        VSpace(VSpace::DEFSKIP), cursor.par->added_space_bottom,
+                                        cursor.par->align, 
+                                        cursor.par->labelwidthstring, 1);
+                               owner->currentBuffer()->update(1);
+                       } 
+               }
+               else {
+                       owner->currentBuffer()->text->BreakParagraph(0);
+                       SmallUpdate(1);
+               }
+               SetUpdateTimer(0.01);
+               owner->currentBuffer()->text->sel_cursor = cursor;
+       }
+       break;
+       
+       case LFUN_QUOTE:
+               BeforeChange();
+               owner->currentBuffer()->text->InsertChar('\"');  // This " matches the single quote in the code
+               SmallUpdate(1);
+               SetUpdateTimer();
+                moveCursorUpdate(false);
+               break;
+
+       case LFUN_HTMLURL:
+       case LFUN_URL:
+       {
+               InsetCommand *new_inset;
+               if (action == LFUN_HTMLURL)
+                       new_inset = new InsetUrl("htmlurl", "", "");
+               else
+                       new_inset = new InsetUrl("url", "", "");
+               owner->currentBuffer()->insertInset(new_inset);
+               new_inset->Edit(0, 0);
+       }
+       break;
+
+       // --- lyxserver commands ----------------------------
+
+       case LFUN_CHARATCURSOR:
+       {
+               int pos = owner->currentBuffer()->text->cursor.pos;
+               if(pos < owner->currentBuffer()->text->cursor.par->last)
+                       dispatch_buffer = owner->currentBuffer()->text->
+                               cursor.par->text[pos];
+               else
+                       dispatch_buffer = "EOF";
+       }
+       break;
+       
+       case LFUN_GETXY:
+               dispatch_buffer = LString()
+                       + owner->currentBuffer()->text->cursor.x + ' '
+                       + owner->currentBuffer()->text->cursor.y;
+               break;
+               
+       case LFUN_SETXY:
+       {
+               int  x;
+               long y;
+               sscanf(argument, " %d %ld", &x, &y);
+               owner->currentBuffer()->text->SetCursorFromCoordinates(x, y);
+       }
+       break;
+       
+       case LFUN_GETLAYOUT:
+               dispatch_buffer = LString() + 
+                       int(owner->currentBuffer()->text->cursor.par->layout);
+               break;
+                       
+       case LFUN_GETFONT:
+       {
+               LyXFont *font = &(owner->currentBuffer()->text->current_font);
+                if(font->shape() == LyXFont::ITALIC_SHAPE)
+                       dispatch_buffer = 'E';
+                else if(font->shape() == LyXFont::SMALLCAPS_SHAPE)
+                       dispatch_buffer = 'N';
+                else
+                       dispatch_buffer = '0';
+
+       }
+       break;
+
+       case LFUN_GETLATEX:
+       {
+               LyXFont *font = &(owner->currentBuffer()->text->current_font);
+                if(font->latex() == LyXFont::ON)
+                       dispatch_buffer = 'L';
+                else
+                       dispatch_buffer = '0';
+       }
+       break;
+
+       case LFUN_GETNAME:
+               setMessage(owner->currentBuffer()->getFileName());
+               lyxerr.debug(LString("FNAME[") +
+                            owner->currentBuffer()->getFileName() +
+                            "] ");
+               break;
+               
+       case LFUN_NOTIFY:
+       {
+               char buf[100];
+               keyseq.print(buf,100);
+               dispatch_buffer = buf;
+               lyxserver->notifyClient(dispatch_buffer);
+       }
+       break;
+
+       case LFUN_GOTOFILEROW:
+       {
+               char file_name[100];
+               int  row;
+               sscanf(argument, " %s %d", file_name, &row);
+
+               // Must replace extension of the file to be .lyx and get full path
+               LString s = ChangeExtension(LString(file_name), ".lyx", false);
+
+               // Either change buffer or load the file
+               if (bufferlist.exists(s))
+                       owner->currentView()->setBuffer(bufferlist.getBuffer(s));
+               else
+                       owner->currentView()->setBuffer(bufferlist.loadLyXFile(s));
+
+               // Set the cursor  
+               owner->currentBuffer()->setCursorFromRow(row);
+
+               // Recenter screen
+               BeforeChange();
+               if (owner->currentBuffer()->text->cursor.y >
+                   owner->currentView()->getWorkArea()->h / 2) {
+                       owner->currentView()->getScreen()->
+                               Draw(owner->currentBuffer()->text->cursor.y -
+                                    owner->currentView()->getWorkArea()->h/2);
+               } else { // <=
+                       owner->currentView()->getScreen()->
+                               Draw(0);
+               }
+               owner->currentBuffer()->update(0);
+               owner->currentView()->redraw();
+       }
+       break;
+
+       case LFUN_APROPOS:
+       case LFUN_GETTIP:
+       {
+               int qa = lyxaction.LookupFunc((const char*)argument);
+               setMessage(lyxaction.helpText((kb_action)qa));
+       }
+       break;
+
+       // --- accented characters ---------------------------
+               
+       case LFUN_UMLAUT:
+       case LFUN_CIRCUMFLEX:
+       case LFUN_GRAVE:
+       case LFUN_ACUTE:
+       case LFUN_TILDE:
+       case LFUN_CEDILLA:
+       case LFUN_MACRON:
+       case LFUN_DOT:
+       case LFUN_UNDERDOT:
+       case LFUN_UNDERBAR:
+       case LFUN_CARON:
+       case LFUN_SPECIAL_CARON:
+       case LFUN_BREVE:
+       case LFUN_TIE:
+       case LFUN_HUNG_UMLAUT:
+       case LFUN_CIRCLE:
+       case LFUN_OGONEK:
+       {
+               char c;
+               
+               if (keyseq.length==-1 && keyseq.getiso()!=0) 
+                       c=keyseq.getiso();
+               else
+                       c=0;
+               
+               owner->getIntl()->getTrans()->
+                       deadkey(c, get_accent(action).accent, 
+                               owner->currentBuffer()->text);
+               
+               // Need to reset, in case the minibuffer calls these
+               // actions
+               keyseq.reset();
+               keyseq.length=0;
+               
+               // copied verbatim from do_accent_char
+               SmallUpdate(1);
+               SetUpdateTimer();
+               owner->currentBuffer()->text->sel_cursor = 
+                       owner->currentBuffer()->text->cursor;
+       }   
+       break;
+       
+       // --- toolbar ----------------------------------
+       case LFUN_PUSH_TOOLBAR:
+       {
+               int nth = atoi(argument);
+               if (lyxerr.debugging(Error::TOOLBAR)) {
+                       lyxerr.print(LString("LFUN_PUSH_TOOLBAR: argument = `")
+                                    + argument + "'");
+                       lyxerr.print(LString("LFUN_PUSH_TOOLBAR: nth = `")
+                                    + nth + "'");
+               }
+               
+               if (nth <= 0) {
+                       LyXBell();
+                       setErrorMessage(N_("Push-toolbar needs argument > 0"));
+               } else {
+                       owner->getToolbar()->push(nth);
+               }
+       }
+       break;
+       
+       case LFUN_ADD_TO_TOOLBAR:
+       {
+               if (lyxerr.debugging(Error::TOOLBAR)) {
+                       lyxerr.print(LString("LFUN_ADD_TO_TOOLBAR:"
+                                            "argument = `")+ argument + '\'');
+               }
+               LString tmp(argument);
+               //lyxerr.print(LString("Argument: ") + argument);
+               //lyxerr.print(LString("Tmp     : ") + tmp);
+               if (tmp.empty()) {
+                       LyXBell();
+                       setErrorMessage(N_("Usage: toolbar-add-to <LyX command>"));
+               } else {
+                       owner->getToolbar()->add(argument, false);
+                       owner->getToolbar()->set();
+               }
+       }
+       break;
+       
+       // --- insert characters ----------------------------------------
+
+       case LFUN_INSERT_INSET_LATEX:
+       {
+               Inset *new_inset = new InsetLatex(argument);
+               owner->currentBuffer()->insertInset(new_inset);
+       }
+       break;
+
+       // ---  Mathed stuff. If we are here, there is no locked inset yet.
+       
+       // Greek mode     
+       case LFUN_GREEK:
+       {
+               if (!greek_kb_flag) {
+                       greek_kb_flag = 1;
+                       setMessage(N_("Math greek mode on"));
+               } else
+                       greek_kb_flag = 0;
+       }  
+       break;
+      
+       // Greek keyboard      
+       case LFUN_GREEK_TOGGLE:
+       {
+               greek_kb_flag = (greek_kb_flag) ? 0: 2;
+               if (greek_kb_flag) {
+                       setMessage(N_("Math greek keyboard on"));
+               } else {
+                       setMessage(N_("Math greek keyboard off"));
+               }
+       }
+       break;
+       
+       case LFUN_MATH_DELIM:     
+       case LFUN_INSERT_MATRIX:
+       {          
+               if (owner->currentView()->available()) { 
+                       owner->currentBuffer()->
+                               open_new_inset(new InsetFormula(false));
+                       owner->currentBuffer()->
+                               the_locking_inset->LocalDispatch(action, argument);
+               }
+       }          
+       break;
+              
+       case LFUN_INSERT_MATH:
+       {
+               math_insert_symbol(argument);
+       }
+       break;
+       
+       case LFUN_MATH_DISPLAY:
+       {
+               if (owner->currentView()->available())
+                       owner->currentBuffer()->open_new_inset(new InsetFormula(true));
+               break;
+       }
+                   
+       case LFUN_MATH_MACRO:
+       {
+               if (owner->currentView()->available()) {
+                       LString s(argument);
+                       if (s.empty())
+                           setErrorMessage(N_("Missing argument"));
+                       else {
+                           LString s1 = s.token(' ', 1);
+                           int na = s1.empty() ? 0: atoi(s1.c_str());
+                           owner->currentBuffer()->
+                             open_new_inset(new InsetFormulaMacro(s.token(' ', 0), na));
+                       }
+               }
+       }
+       break;
+
+       case LFUN_MATH_MODE:   // Open or create a math inset
+       {
+               
+               if (owner->currentView()->available())
+                       owner->currentBuffer()->open_new_inset(new InsetFormula);
+               setMessage(N_("Math editor mode"));
+       }
+       break;
+         
+       case LFUN_MATH_NUMBER:
+       case LFUN_MATH_LIMITS:
+       {
+               setErrorMessage(N_("This is only allowed in math mode!"));
+       }
+       break;
+       
+       case LFUN_INSERT_CITATION:
+       {   
+               InsetCitation *new_inset = new InsetCitation();
+               // ale970405
+               // The note, if any, must be after the key, delimited
+               // by a | so both key and remark can have spaces.
+               if (argument) {
+                       LString lsarg(argument);
+                       if (lsarg.contains("|")) {
+                               new_inset->setContents(lsarg.token('|', 0));
+                               new_inset->setOptions(lsarg.token('|', 1));
+                       } else
+                               new_inset->setContents(lsarg);
+                       owner->currentBuffer()->insertInset(new_inset);
+               } else {
+                       owner->currentBuffer()->insertInset(new_inset);
+                       new_inset->Edit(0,0);
+               }
+       }
+       break;
+                   
+       case LFUN_INSERT_BIBTEX:
+       {   
+               // ale970405+lasgoutt970425
+               // The argument can be up to two tokens separated 
+               // by a space. The first one is the bibstyle.
+               LString lsarg(argument);
+               LString bibstyle = lsarg.token(' ', 1);
+               if (bibstyle.empty())
+                       bibstyle = "plain";
+               InsetBibtex *new_inset 
+                       = new InsetBibtex(lsarg.token(' ', 0),
+                                         bibstyle,
+                                         owner->currentBuffer());
+               
+               owner->currentBuffer()->insertInset(new_inset);
+               if (lsarg.empty()) {
+                       new_inset->Edit(0,0);
+               }
+       }
+       break;
+               
+       // BibTeX data bases
+       case LFUN_BIBDB_ADD:
+       {
+               InsetBibtex *inset =
+                       (InsetBibtex*)getInsetByCode(Inset::BIBTEX_CODE);
+               if (inset) {
+                       inset->addDatabase(argument);
+               }
+       }
+       break;
+                   
+       case LFUN_BIBDB_DEL:
+       {
+               InsetBibtex *inset =
+                       (InsetBibtex*)getInsetByCode(Inset::BIBTEX_CODE);
+               if (inset) {
+                       inset->delDatabase(argument);
+               }
+       }
+       break;
+       
+       case LFUN_BIBTEX_STYLE:
+       {
+               InsetBibtex *inset =
+                       (InsetBibtex*)getInsetByCode(Inset::BIBTEX_CODE);
+               if (inset) {
+                       inset->setOptions(argument);
+               }
+       }
+       break;
+               
+       case LFUN_INDEX_INSERT:
+       case LFUN_INDEX_INSERT_LAST:
+       {
+               InsetIndex *new_inset = new InsetIndex();
+               if (argument) {
+                       LString lsarg(argument);
+                       new_inset->setContents(lsarg);
+                       owner->currentBuffer()->insertInset(new_inset);
+               } else {
+                 //reh 98/09/21
+                 //get the current word for an argument
+                 
+                 
+                 // grab a word
+
+                 int lastpos =owner->currentBuffer()->text->cursor.pos-1;
+
+                 //this shouldn't happen, but let's be careful
+                 if (lastpos < 0) lastpos=0;
+                 
+                 // get the current word
+                 // note that this must be done before 
+                 // inserting the inset, or the inset will break
+                 // the word
+                 LString curstring(owner->currentBuffer()->text->cursor.par->GetWord(lastpos));
+
+                 //make the new inset and write the current word into it
+                 InsetIndex *new_inset = new InsetIndex();
+
+                 new_inset->setContents(curstring);
+
+                 //don't edit it if the call was to INSERT_LAST
+                 if(action!=LFUN_INDEX_INSERT_LAST) {
+                     new_inset->Edit(0,0);
+                 } else {
+                     //it looks blank on the screen unless
+                     //we do  something.  put it here.
+
+                     // move the cursor to the returned value of lastpos
+                     // but only for the auto-insert
+                     owner->currentBuffer()->text->cursor.pos=lastpos;
+                 }
+
+                 //put the new inset into the buffer.
+                 // there should be some way of knowing the user
+                 //cancelled & avoiding this, but i don't know how
+                 owner->currentBuffer()->insertInset(new_inset);
+               }
+       }
+       break;
+
+       case LFUN_INDEX_PRINT:
+       {
+               Inset *new_inset = new InsetPrintIndex(owner->currentBuffer());
+               owner->currentBuffer()->insertInset(new_inset, "Standard", true);
+       }
+       break;
+
+       case LFUN_PARENTINSERT:
+       {
+               lyxerr.print(LString("arg ") + argument);
+               Inset *new_inset = new InsetParent(argument, owner->currentBuffer());
+               owner->currentBuffer()->insertInset(new_inset, "Standard", true);
+       }
+       break;
+
+       case LFUN_CHILDINSERT:
+       {
+               Inset *new_inset = new InsetInclude(argument,owner->currentBuffer());
+               owner->currentBuffer()->insertInset(new_inset, "Standard", true);
+               new_inset->Edit(0,0);
+       }
+       break;
+
+       case LFUN_CHILDOPEN:
+       {
+               LString filename = MakeAbsPath(argument, 
+                                              OnlyPath(owner->currentBuffer()->getFileName()));
+               setMessage(N_("Opening child document ") +
+                          MakeDisplayPath(filename) + "...");
+               owner->currentView()->savePosition();
+               if (bufferlist.exists(filename))
+                 owner->currentView()->setBuffer(bufferlist.getBuffer(filename));
+               else
+                 owner->currentView()->setBuffer(bufferlist.loadLyXFile(filename));
+       }
+       break;
+
+       case LFUN_INSERT_NOTE:
+               NoteCB();
+               break;
+               
+       case LFUN_INSERTFOOTNOTE: 
+       {
+               LyXParagraph::footnote_kind kind;
+               LString arg = argument;
+               if (arg == "footnote")
+                       { kind = LyXParagraph::FOOTNOTE; }
+               else if (arg == "margin")
+                       { kind = LyXParagraph::MARGIN; }
+               else if (arg == "figure")
+                       { kind = LyXParagraph::FIG; }
+               else if (arg == "table")
+                       { kind = LyXParagraph::TAB; }
+               else if (arg == "wide-fig")
+                       { kind = LyXParagraph::WIDE_FIG; }
+               else if (arg == "wide-tab")
+                       { kind = LyXParagraph::WIDE_TAB; }
+               else if (arg == "algorithm")
+                       { kind = LyXParagraph::ALGORITHM; }
+               else {
+                       setErrorMessage(N_("Unknown kind of footnote"));
+                       break;
+               }
+               owner->currentBuffer()->text->InsertFootnoteEnvironment(kind);
+               owner->currentBuffer()->update(1);
+       }
+       break;
+       
+       case LFUN_BUFFERBULLETSSELECT:
+               bulletForm();
+               break;
+               
+       case LFUN_TOGGLECURSORFOLLOW:
+               cursor_follows_scrollbar = !cursor_follows_scrollbar;
+               break;
+               
+       case LFUN_KMAP_OFF:             // keymap off
+               owner->getIntl()->KeyMapOn(false);
+               break;
+               
+       case LFUN_KMAP_PRIM:    // primary keymap
+               owner->getIntl()->KeyMapPrim();
+               break;
+               
+       case LFUN_KMAP_SEC:             // secondary keymap
+               owner->getIntl()->KeyMapSec();
+               break;
+               
+       case LFUN_KMAP_TOGGLE:  // toggle keymap
+               owner->getIntl()->ToggleKeyMap();
+               break;
+
+       case LFUN_SELFINSERT:
+       {
+               LString const text = argument;
+               for (int i=0; i<text.length(); i++) {
+                       owner->currentBuffer()->text->InsertChar(text[i]);
+                       // This needs to be in the loop, or else we
+                       // won't break lines correctly. (Asger)
+                       SmallUpdate(1);
+               }
+               SetUpdateTimer();
+               owner->currentBuffer()->text->sel_cursor =
+                       owner->currentBuffer()->text->cursor;
+               moveCursorUpdate(false);
+       }
+       break;
+
+       case LFUN_UNKNOWN_ACTION:
+       {
+               if (owner->currentBuffer()->isReadonly()) {
+                       LyXBell();
+                       setErrorMessage(N_("Document is read only"));
+                       break;
+               }
+                        
+               if (argument) {
+                       
+                       /* Automatically delete the currently selected
+                        * text and replace it with what is being
+                        * typed in now. Depends on lyxrc settings
+                        * "auto_region_delete", which defaults to
+                        * true (on). */
+               
+                       if ( lyxrc->auto_region_delete ) {
+                               if (owner->currentBuffer()->text->selection){
+                                       owner->currentBuffer()->text->CutSelection(false);
+                                       owner->currentBuffer()->update(-1);
+                               }
+                       }
+                       
+                       BeforeChange();
+                       for(char const *p = argument; *p; p++) {
+                               if (greek_kb_flag) {
+                                       if (!math_insert_greek(*p))
+                                               owner->getIntl()->getTrans()->TranslateAndInsert(*p, owner->currentBuffer()->text);
+                               } else
+                                       owner->getIntl()->getTrans()->TranslateAndInsert(*p, owner->currentBuffer()->text);
+                       }
+                       
+                       SmallUpdate(1);
+                       SetUpdateTimer();
+
+                       owner->currentBuffer()->text->sel_cursor =
+                               owner->currentBuffer()->text->cursor;
+                       moveCursorUpdate(false);
+                       return LString();
+               } else {
+                       // why is an "Unknown action" with empty
+                       // argument even dispatched in the first
+                       // place? I`ll probably change that. (Lgb)
+                       LyXBell();
+                       setErrorMessage(N_("Unknown action"));
+               }
+               break;
+       default:
+               lyxerr.print("A truly unknown func!");
+               break;
+       }
+       } // end of switch
+  exit_with_message:
+
+       LString res=getMessage();
+
+       if (res.empty()) {
+               if (!commandshortcut.empty()) {
+                       LString newbuf = owner->getMiniBuffer()->GetText();
+                       if (newbuf != commandshortcut) {
+                               owner->getMiniBuffer()->Set(newbuf
+                                                           + " " +
+                                                           commandshortcut);
+                       }
+               }
+       } else {
+               owner->getMiniBuffer()->Set(LString(_(res.c_str()))
+                                           + " " + commandshortcut);
+       }
+
+       return getMessage();
+}
+           
+
+void LyXFunc::setupLocalKeymap()
+{
+       keyseq.stdmap = keyseq.curmap = toplevel_keymap;
+       cancel_meta_seq.stdmap = cancel_meta_seq.curmap = toplevel_keymap;
+}
+
+
+void LyXFunc::MenuNew(bool fromTemplate)
+{
+       LString fname, initpath = lyxrc->document_path;
+       LyXFileDlg fileDlg;
+
+       if (owner->currentView()->available()) {
+               LString trypath = owner->currentBuffer()->filepath;
+               // If directory is writeable, use this as default.
+               if (IsDirWriteable(trypath) == 1)
+                       initpath = trypath;
+       }
+
+       ProhibitInput();
+       fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+       fileDlg.SetButton(1, _("Templates"), lyxrc->template_path);
+       fname = fileDlg.Select(_("Enter Filename for new document"), 
+                              initpath, "*.lyx", _("newfile"));
+       AllowInput();
+       
+       if (fname.empty()) {
+               owner->getMiniBuffer()->Set(_("Canceled."));
+               lyxerr.debug("New Document Cancelled.");
+               return;
+       }
+        
+       // get absolute path of file and make sure the filename ends
+       // with .lyx
+       LString s = MakeAbsPath(fname);
+       if (!IsLyXFilename(s))
+               s += ".lyx";
+
+       // Check if the document already is open
+       if (bufferlist.exists(s)){
+               switch(AskConfirmation(_("Document is already open:"), 
+                                      MakeDisplayPath(s,50),
+                                      _("Do you want to close that document now?\n"
+                                        "('No' will just switch to the open version)")))
+               {
+               case 1: // Yes: close the document
+                       if (!bufferlist.close(bufferlist.getBuffer(s)))
+                               // If close is canceled, we cancel here too.
+                               return;
+                       break;
+               case 2: // No: switch to the open document
+                       owner->currentView()->setBuffer(bufferlist.getBuffer(s));
+                       return;
+               case 3: // Cancel: Do nothing
+                       owner->getMiniBuffer()->Set(_("Canceled."));
+                       return;
+               }
+       }
+        
+       // Check whether the file already exists
+       if (IsLyXFilename(s)) {
+               FilePtr myfile(s, FilePtr::read);
+               if (myfile() &&
+                   AskQuestion(_("File already exists:"), 
+                               MakeDisplayPath(s,50),
+                               _("Do you want to open the document?"))) {
+                       // loads document
+                       owner->getMiniBuffer()->Set(_("Opening document"), 
+                                                   MakeDisplayPath(s), "...");
+                       XFlush(fl_display);
+                       owner->currentView()->setBuffer(
+                               bufferlist.loadLyXFile(s));
+                       owner->getMiniBuffer()->Set(_("Document"),
+                                                   MakeDisplayPath(s),
+                                                   _("opened."));
+                       return;
+               }
+       }
+
+       // The template stuff
+       LString templname;
+       if (fromTemplate) {
+               ProhibitInput();
+               fname = fileDlg.Select(_("Choose template"),
+                                      lyxrc->template_path,
+                                      "*.lyx");
+                templname = fname;
+               AllowInput();
+       }
+  
+       // find a free buffer
+       lyxerr.debug("Find a free buffer.");
+       owner->currentView()->setBuffer(bufferlist.newFile(s,templname));
+}
+
+
+void LyXFunc::MenuOpen()
+{
+       LString initpath = lyxrc->document_path;
+       LyXFileDlg fileDlg;
+  
+       if (owner->currentView()->available()) {
+               LString trypath = owner->currentBuffer()->filepath;
+               // If directory is writeable, use this as default.
+               if (IsDirWriteable(trypath) == 1)
+                       initpath = trypath;
+       }
+
+       // launches dialog
+       ProhibitInput();
+       fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+       fileDlg.SetButton(1, _("Examples"), 
+                         AddPath(system_lyxdir, "examples"));
+       LString filename = fileDlg.Select(_("Select Document to Open"),
+                                         initpath, "*.lyx");
+       AllowInput();
+       // check selected filename
+       if (filename.empty()) {
+               owner->getMiniBuffer()->Set(_("Canceled."));
+               return;
+       }
+
+       // get absolute path of file and make sure the filename ends
+       // with .lyx
+       filename = MakeAbsPath(filename);
+       if (!IsLyXFilename(filename))
+               filename += ".lyx";
+
+       // loads document
+       owner->getMiniBuffer()->Set(_("Opening document"),
+                                   MakeDisplayPath(filename), "...");
+       Buffer * openbuf = bufferlist.loadLyXFile(filename);
+       if (openbuf) {
+               owner->currentView()->setBuffer(openbuf);
+               owner->getMiniBuffer()->Set(_("Document"),
+                                           MakeDisplayPath(filename),
+                                           _("opened."));
+       } else {
+               owner->getMiniBuffer()->Set(_("Could not open document"),
+                                           MakeDisplayPath(filename));
+       }
+}
+
+
+void LyXFunc::doImportASCII(bool linorpar)
+{
+       LString initpath = lyxrc->document_path;
+       LyXFileDlg fileDlg;
+  
+       if (owner->currentView()->available()) {
+               LString trypath = owner->currentBuffer()->filepath;
+               // If directory is writeable, use this as default.
+               if (IsDirWriteable(trypath) == 1)
+                       initpath = trypath;
+       }
+
+       // launches dialog
+       ProhibitInput();
+       fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+       fileDlg.SetButton(1, _("Examples"), 
+                         AddPath(system_lyxdir, "examples"));
+       LString filename = fileDlg.Select(_("Select ASCII file to Import"),
+                                         initpath, "*.txt");
+       AllowInput();
+       // check selected filename
+       if (filename.empty()) {
+               owner->getMiniBuffer()->Set(_("Canceled."));
+               return;
+       }
+
+       // get absolute path of file
+       filename = MakeAbsPath(filename);
+
+       LString s = ChangeExtension(filename, ".lyx", false);
+
+       // Check if the document already is open
+       if (bufferlist.exists(s)){
+               switch(AskConfirmation(_("Document is already open:"), 
+                                      MakeDisplayPath(s,50),
+                                      _("Do you want to close that document now?\n"
+                                        "('No' will just switch to the open version)")))
+               {
+               case 1: // Yes: close the document
+                       if (!bufferlist.close(bufferlist.getBuffer(s)))
+                               // If close is canceled, we cancel here too.
+                               return;
+                       break;
+               case 2: // No: switch to the open document
+                       owner->currentView()->setBuffer(bufferlist.getBuffer(s));
+                       return;
+               case 3: // Cancel: Do nothing
+                       owner->getMiniBuffer()->Set(_("Canceled."));
+                       return;
+               }
+       }
+
+       // Check if a LyX document by the same root exists in filesystem
+       FileInfo f(s, true);
+       if (f.exist() && !AskQuestion(_("A document by the name"), 
+                                     MakeDisplayPath(s),
+                                     _("already exists. Overwrite?"))) {
+               owner->getMiniBuffer()->Set(_("Canceled."));
+               return;
+       }
+
+       owner->currentView()->setBuffer(bufferlist.newFile(s,LString()));
+       owner->getMiniBuffer()->Set(_("Importing ASCII file"),
+                                   MakeDisplayPath(filename), "...");
+       // Insert ASCII file
+       InsertAsciiFile(filename,linorpar);
+       owner->getMiniBuffer()->Set(_("ASCII file "),
+                                   MakeDisplayPath(filename),
+                                   _("imported."));
+}
+
+
+void LyXFunc::doImportLaTeX(bool isnoweb)
+{
+       LString initpath = lyxrc->document_path;
+       LyXFileDlg fileDlg;
+  
+       if (owner->currentView()->available()) {
+               LString trypath = owner->currentBuffer()->filepath;
+               // If directory is writeable, use this as default.
+               if (IsDirWriteable(trypath) == 1)
+                       initpath = trypath;
+       }
+
+       // launches dialog
+       ProhibitInput();
+       fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+       fileDlg.SetButton(1, _("Examples"), 
+                         AddPath(system_lyxdir, "examples"));
+       LString filename;
+       if (isnoweb) {
+               filename = fileDlg.Select(_("Select Noweb file to Import"),
+                                         initpath, "*.nw");
+       } else {
+               filename = fileDlg.Select(_("Select LaTeX file to Import"),
+                                         initpath, "*.tex");
+       }
+       
+       AllowInput();
+       // check selected filename
+       if (filename.empty()) {
+               owner->getMiniBuffer()->Set(_("Canceled."));
+               return;
+       }
+
+       // get absolute path of file
+       filename = MakeAbsPath(filename);
+
+       // Check if the document already is open
+       LString LyXfilename = ChangeExtension(filename, ".lyx", false);
+       if (bufferlist.exists(LyXfilename)){
+               switch(AskConfirmation(_("Document is already open:"), 
+                                      MakeDisplayPath(LyXfilename,50),
+                                      _("Do you want to close that document now?\n"
+                                        "('No' will just switch to the open version)")))
+               {
+               case 1: // Yes: close the document
+                       if (!bufferlist.close(bufferlist.getBuffer(LyXfilename)))
+                               // If close is canceled, we cancel here too.
+                               return;
+                       break;
+               case 2: // No: switch to the open document
+                       owner->currentView()->setBuffer(
+                               bufferlist.getBuffer(LyXfilename));
+                       return;
+               case 3: // Cancel: Do nothing
+                       owner->getMiniBuffer()->Set(_("Canceled."));
+                       return;
+               }
+       }
+
+       // Check if a LyX document by the same root exists in filesystem
+       FileInfo f(LyXfilename, true);
+       if (f.exist() && !AskQuestion(_("A document by the name"), 
+                                     MakeDisplayPath(LyXfilename),
+                                     _("already exists. Overwrite?"))) {
+               owner->getMiniBuffer()->Set(_("Canceled."));
+               return;
+       }
+
+       // loads document
+       Buffer * openbuf;
+       if (!isnoweb) {
+               owner->getMiniBuffer()->Set(_("Importing LaTeX file"),
+                                           MakeDisplayPath(filename), "...");
+               ImportLaTeX myImport(filename);
+               openbuf = myImport.run();
+       } else {
+               owner->getMiniBuffer()->Set(_("Importing Noweb file"),
+                                           MakeDisplayPath(filename), "...");
+               ImportNoweb myImport(filename);
+               openbuf = myImport.run();
+       }
+       if (openbuf) {
+               owner->currentView()->setBuffer(openbuf);
+               owner->getMiniBuffer()->Set(isnoweb ?
+                                           _("Noweb file ") : _("LateX file "),
+                                           MakeDisplayPath(filename),
+                                           _("imported."));
+       } else {
+               owner->getMiniBuffer()->Set(isnoweb ?
+                                           _("Could not import Noweb file") :
+                                           _("Could not import LaTeX file"),
+                                           MakeDisplayPath(filename));
+       }
+}
+
+
+void LyXFunc::MenuInsertLyXFile(LString const & filen)
+{
+       LString filename = filen;
+
+       if (filename.empty()) {
+               // Launch a file browser
+               LString initpath = lyxrc->document_path;
+               LyXFileDlg fileDlg;
+
+               if (owner->currentView()->available()) {
+                       LString trypath = owner->currentBuffer()->filepath;
+                       // If directory is writeable, use this as default.
+                       if (IsDirWriteable(trypath) == 1)
+                               initpath = trypath;
+               }
+
+               // launches dialog
+               ProhibitInput();
+               fileDlg.SetButton(0, _("Documents"), lyxrc->document_path);
+               fileDlg.SetButton(1, _("Examples"), 
+                                 AddPath(system_lyxdir, "examples"));
+               filename = fileDlg.Select(_("Select Document to Insert"),
+                                         initpath, "*.lyx");
+               AllowInput();
+
+               // check selected filename
+               if (filename.empty()) {
+                       owner->getMiniBuffer()->Set(_("Canceled."));
+                       return;
+               }
+       } 
+
+       // get absolute path of file and make sure the filename ends
+       // with .lyx
+       filename = MakeAbsPath(filename);
+       if (!IsLyXFilename(filename))
+               filename += ".lyx";
+
+       // Inserts document
+       owner->getMiniBuffer()->Set(_("Inserting document"),
+                                   MakeDisplayPath(filename), "...");
+       bool res = owner->currentBuffer()->insertLyXFile(filename);
+       if (res) {
+               owner->getMiniBuffer()->Set(_("Document"),
+                                           MakeDisplayPath(filename),
+                                           _("inserted."));
+       } else {
+               owner->getMiniBuffer()->Set(_("Could not insert document"),
+                                           MakeDisplayPath(filename));
+       }
+}
+
+
+void LyXFunc::reloadBuffer()
+{
+       LString fn = owner->currentBuffer()->getFileName();
+       if (bufferlist.close(owner->currentBuffer()))
+               owner->currentView()->setBuffer(bufferlist.loadLyXFile(fn));
+}
+
+
+void LyXFunc::CloseBuffer()
+{
+       if (bufferlist.close(owner->currentBuffer()) && !quitting) {
+               if (bufferlist.isEmpty()) {
+                       // need this otherwise SEGV may occur while trying to
+                       // set variables that don't exist
+                       // since there's no current buffer
+                       CloseAllBufferRelatedPopups();
+               }
+               else {
+                       owner->currentView()->setBuffer(bufferlist.first());
+               }
+       }
+}
+
+
+Inset* LyXFunc::getInsetByCode(Inset::Code code)
+{
+       bool found = false;
+       Inset* inset = 0;
+       LyXCursor cursor = owner->currentBuffer()->text->cursor;
+       int pos = cursor.pos;
+       LyXParagraph *par = cursor.par;
+       
+       while (par && !found) {
+               while ((inset = par->ReturnNextInsetPointer(pos))){
+                       if (inset->LyxCode()==code) {
+                               found = true;
+                               break;
+                       }
+                       pos++;
+               } 
+               par = par->next;
+       }
+       return (found) ? inset: 0;
+}
+
+
+// Each "owner" should have it's own message method. lyxview and
+// the minibuffer would use the minibuffer, but lyxserver would
+// send an ERROR signal to its client.  Alejandro 970603
+// This func is bit problematic when it comes to NLS, to make the
+// lyx servers client be language indepenent we must not translate
+// strings sent to this func.
+void LyXFunc::setErrorMessage(LString const &m) 
+{
+       dispatch_buffer = m;
+       errorstat = true;
+}
+
+
+void LyXFunc::setMessage(LString const & m)
+{
+       dispatch_buffer = m;
+}
diff --git a/src/lyxfunc.h b/src/lyxfunc.h
new file mode 100644 (file)
index 0000000..1e4c37c
--- /dev/null
@@ -0,0 +1,178 @@
+// -*- C++ -*-
+#ifndef _LYXFUNC_H_
+#define _LYXFUNC_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "commandtags.h"
+#include "kbmap.h"
+#include "tex-accent.h"
+#include "LyXAction.h"
+#include "insets/lyxinset.h"
+#include "LString.h"
+class LyXView;
+
+
+/** This class encapsulates all the LyX command operations. 
+    This is the class of the LyX's "high level event handler".
+    Every user command is processed here, either invocated from
+    keyboard or from the GUI. All GUI objects, including buttons and
+    menus should use this class and never call kernel functions directly.
+*/
+class LyXFunc {
+public:
+       ///
+       LyXFunc(LyXView*);
+       ///
+       ~LyXFunc();
+    
+       /// LyX distpatcher, executes lyx actions.
+       LString Dispatch(int action, char const* arg = 0);
+                        
+       /// The same but uses the name of a lyx command.
+       LString Dispatch(LString const &cmd, LString const &arg = LString());
+
+       
+       /// A keyboard event is processed to execute a lyx action. 
+       int  processKeyEvent(XEvent *ev);
+     
+       /// The last key was meta
+       bool wasMetaKey();
+
+       // These can't be global because are part of the internat state (ale970227)
+       /// Get the current keyseq string
+       LString keyseqStr(int l=190);
+
+       /// Is the key sequence uncomplete?
+       bool keyseqUncomplete();
+
+       /// get options for the current keyseq
+       LString keyseqOptions(int l=190);
+
+       /// Returns the name of a funcion given a keyseq
+       char const* getFunc(char*) 
+       { /* unimplemented */ return 0; }
+
+       /// Return a string with the keybind to an action, if any
+       char const* getKeybind(int) 
+       { /* unimplemented */ return 0; }
+
+        /// True if lyxfunc reports an error
+        bool errorStat() const { return errorstat; }
+        /// Buffer to store result messages
+        void setMessage(LString const &m);
+        /// Buffer to store result messages
+        void setErrorMessage(LString const &); 
+        /// Buffer to store result messages
+        LString getMessage() const { return dispatch_buffer; }
+        /// Get next inset of this class from current cursor position  
+        Inset* getInsetByCode(Inset::Code);
+       
+       /// Should a hint message be displayed?
+       void setHintMessage(bool);
+
+private:
+       ///
+       LString argAsString(char const *const argument);
+       ///
+       LyXView *owner;
+       ///
+       static kb_func_table* lyx_func_table;
+       ///
+       static kb_func_table *lyx_func_args;
+       ///
+       static int psd_idx;
+       ///
+       kb_sequence keyseq;
+       ///
+       kb_sequence cancel_meta_seq;
+       ///
+       unsigned meta_fake_bit;
+       ///
+       void moveCursorUpdate(bool selecting = false);
+       ///
+       void setupLocalKeymap();
+        ///
+        kb_action lyx_dead_action;
+        ///
+        kb_action lyx_calling_dead_action;
+        /// Error status, only Dispatch can change this flag
+        bool errorstat;
+
+        /** Buffer to store messages and result data. Is there a
+         good reason to have this one as static in Dispatch? (Ale)
+         */
+        LString dispatch_buffer;
+       /// Command name and shortcut information
+       LString commandshortcut;
+
+       // I think the following should be moved to BufferView. (Asger)
+
+       ///
+       void MenuNew(bool fromTemplate);
+
+       ///
+       void MenuOpen();
+
+       ///
+       void doImportLaTeX(bool);
+
+       ///
+       void doImportASCII(bool);
+
+       ///
+       void MenuInsertLyXFile(LString const &);
+
+       ///
+       void CloseBuffer();
+       ///
+       void reloadBuffer();
+       /// This is the same for all lyxfunc objects
+       static bool show_sc;
+};
+     
+     
+/*--------------------  inlines  --------------------------*/
+
+inline
+bool LyXFunc::wasMetaKey() 
+{ 
+       return (meta_fake_bit != 0);
+}
+     
+
+inline
+LString LyXFunc::keyseqStr(int l)
+{
+       char text[200];
+       keyseq.print(text, l, true);
+       LString tmp(text);
+       return tmp;
+} 
+
+
+inline
+LString LyXFunc::keyseqOptions(int l)
+{
+       char text[200];
+       keyseq.printOptions(text, l);
+       LString tmp(text);
+       return tmp;
+} 
+
+
+inline
+bool LyXFunc::keyseqUncomplete() 
+{ 
+       return (keyseq.length > 0);
+}
+
+inline
+void LyXFunc::setHintMessage(bool hm) 
+{ 
+       show_sc = hm;
+}
+
+#endif
diff --git a/src/lyxlex.C b/src/lyxlex.C
new file mode 100644 (file)
index 0000000..213abec
--- /dev/null
@@ -0,0 +1,525 @@
+//  Generalized simple lexical analizer.
+//  It can be used for simple syntax parsers, like lyxrc,
+//  texclass and others to come.   [asierra30/03/96]
+//
+//   (C) 1996 Lyx Team.
+
+#include <config.h>
+//#include "definitions.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef __GNUG__
+#pragma implementation "lyxlex.h"
+#endif
+
+#include "lyxlex.h"
+#include "error.h"
+#include "filetools.h"
+
+//     $Id: lyxlex.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $    
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lyxlex.C,v 1.1 1999/09/27 18:44:37 larsbj Exp $";
+#endif /* lint */
+
+
+LyXLex::LyXLex(keyword_item* tab, int num)
+       : table(tab), no_items(num)
+{
+       file = NULL;
+       owns_file = false;
+       status = 0;
+       pushed = NULL;
+}
+
+
+void LyXLex::pushTable(keyword_item* tab, int num)
+{
+       pushed_table *tmppu = new pushed_table;
+       tmppu->next = pushed;
+       tmppu->table_elem = table;
+       tmppu->table_siz = no_items;
+       pushed = tmppu;
+       table = tab;
+       no_items = num;
+}
+
+
+void LyXLex::popTable()
+{
+       if (pushed == NULL)
+               lyxerr.print("LyXLex error: nothing to pop!");
+
+       pushed_table *tmp;
+       tmp = pushed;
+       table = tmp->table_elem;
+       no_items = tmp->table_siz;
+       tmp->table_elem = NULL;
+       pushed = tmp->next;
+       delete tmp;
+}
+
+
+void LyXLex::printTable()
+{
+       lyxerr.print(LString("\nNumber of tags: ")+no_items);
+       for(int i=0; i<no_items; i++)
+               lyxerr.print(LString("table[")+i+
+                              "]:  tag: `"+table[i].tag+
+                              "'  code:"+(long)table[i].code);
+       lyxerr.print(LString());
+}
+
+
+void LyXLex::printError(LString const & message)
+{
+       LString tmpmsg = message;
+       tmpmsg.subst("$$Token",GetString());
+       lyxerr.print("LyX: "+tmpmsg+" [around line "+lineno+" of file "
+                     +MakeDisplayPath(name)+']');
+}
+
+
+bool LyXLex::setFile(LString const & filename)
+{
+        if (file) 
+               lyxerr.print("Error in LyXLex::setFile: file already set.");
+       file = fopen(filename.c_str(), "r");
+       name = filename;
+       owns_file = true;
+       lineno = 0;
+       return (file ? true : false);
+}
+
+
+void LyXLex::setFile(FILE *f)
+{
+        if (file) 
+               lyxerr.print("Error in LyXLex::setFile: file already set.");
+       file = f;
+       owns_file = false;
+       lineno = 0; // this is bogus if the file already has been read from
+}
+
+
+int LyXLex::lex()
+{
+       //NOTE: possible bug.
+   if (next() && status==LEX_TOKEN)
+       return search_kw(buff);
+   else
+       return status;
+}
+
+
+int LyXLex::GetInteger()
+{
+   if (buff[0]>' ')   
+       return atoi(buff);
+   else {
+       printError("Bad integer `$$Token'");
+       return -1;
+   }
+}
+
+
+float LyXLex::GetFloat()
+{
+   if (buff[0]>' ')   
+       return (float)strtod(buff, (char**)NULL);
+   else {
+       printError("Bad float `$$Token'");
+       return -1;
+   }
+}
+
+
+LString LyXLex::GetString() const
+{
+       return LString(buff);
+}
+
+
+// I would prefer to give a tag number instead of an explicit token
+// here, but it is not possible because Buffer::readLyXformat2 uses
+// explicit tokens (JMarc) 
+LString LyXLex::getLongString(LString const &endtoken)
+{
+       LString str, prefix;
+       bool firstline = true;
+
+       while (IsOK()) {
+               if (!EatLine())
+                       // blank line in the file being read
+                       continue;
+               
+               LString const token = GetString().strip().frontStrip();
+               
+               lyxerr.debug("LongString: `"+GetString()+'\'', Error::LEX_PARSER);
+
+               // We do a case independent comparison, like search_kw
+               // does.
+                if (strcasecmp(token.c_str(), endtoken.c_str()) != 0) {
+                       LString tmpstr = GetString();
+                       if (firstline) {
+                               int i = 0;
+                               while(i < tmpstr.length()
+                                     && tmpstr[i] == ' ') {
+                                       i++;
+                                       prefix += ' ';
+                               }
+                               firstline = false;
+                               lyxerr.debug("Prefix = `"+prefix+'\'',
+                                             Error::LEX_PARSER); 
+                       } 
+
+                       if (!prefix.empty() 
+                           && tmpstr.prefixIs(prefix.c_str())) {
+                               tmpstr.substring(prefix.length(), 
+                                                tmpstr.length()-1);
+                       }
+                       str += tmpstr + '\n';
+                }
+               else // token == endtoken
+                       break;
+       }
+       if (!IsOK())
+               printError("Long string not ended by `" + endtoken + '\'');
+
+       return str;
+}
+
+
+bool LyXLex::GetBool()
+{
+   if (strcmp(buff, "true") == 0)
+       return true;
+   else if (strcmp(buff, "false") != 0)
+       printError("Bad boolean `$$Token'. Use \"false\" or \"true\"");
+   return false;
+}
+
+
+bool LyXLex::EatLine()
+{
+       int i=0;
+       int c = '\0'; // getc() returns an int
+
+       while (!feof(file) && c!='\n' && i!=(LEX_MAX_BUFF-1)) {
+               c = getc(file);
+               if (c != '\r')
+                       buff[i++] = c;
+       }
+       if (i==(LEX_MAX_BUFF-1) && c !='\n') {
+               printError("Line too long");
+               c = '\n'; // Pretend we had an end of line
+               lineno--; // but don't increase line counter (netto effect)
+               i++; // and preserve last character read.
+       }
+       if (c=='\n') {
+               lineno++;
+               buff[--i] = '\0'; // i can never be 0 here, so no danger
+               status = LEX_DATA;
+               return true;
+       } else {
+               buff[i] = '\0';
+               return false;
+       }
+}
+
+
+int LyXLex::search_kw(char const * const tag) const
+{
+       int m, k=0 , l= 0, r=no_items;
+
+       while (l < r) {
+               m = (l+r)/2;
+
+               if (lyxerr.debugging(Error::LEX_PARSER)) {
+                       LString my_l;
+                       my_l+="LyXLex::search_kw: elem " ;
+                       my_l+= m; 
+                       my_l+=" tag "; 
+                       my_l+=table[m].tag;
+                       my_l+=" search tag ";
+                       my_l+= tag;
+                       lyxerr.print(my_l);
+               }
+
+               if (table[m].tag)
+                       k = strcasecmp(table[m].tag, tag);
+               if (k==0)
+                       return table[m].code;
+               else
+                       if (k<0) l = m+1; else r = m;
+       }
+       return -1;
+}
+
+
+bool LyXLex::next(bool esc)
+{
+
+       if (!esc) {
+               int c; // getc() returns an int
+               int i;
+               
+               
+               status = 0;
+               while (!feof(file) && !status) { 
+                       c = getc(file);
+                       if (c=='#') {
+                               // Read rest of line (fast :-)
+                               fgets(buff, sizeof(buff), file);
+                               lineno++;
+                               continue;
+                       }
+                       
+                       if (c=='\"') {
+                               i = -1;
+                               do {
+                                       c = getc(file);
+                                       if (c != '\r')
+                                               buff[++i] = c;
+                               } while (c!='\"' && c!='\n' && !feof(file) &&
+                                        i!=(LEX_MAX_BUFF-2));
+                               
+                               if (i==(LEX_MAX_BUFF-2)) {
+                                       printError("Line too long");
+                                       c = '\"'; // Pretend we got a "
+                                       i++;
+                               }
+                               
+                               if (c!='\"') {
+                                       printError("Missing quote");
+                                       if (c=='\n')
+                                               lineno++;
+                               }
+                               
+                               buff[i] = '\0';
+                               status = LEX_DATA;
+                               break; 
+                       }
+                       
+                       if (c==',')
+                               continue;              /* Skip ','s */
+                       
+                       if (c > ' ' && !feof(file))  {
+                               i = 0;
+                               do {
+                                       buff[i++] = c;
+                                       c = getc(file);
+                               } while (c > ' ' && c != ',' && !feof(file) &&
+                                        (i != LEX_MAX_BUFF-1) );
+                               if (i == LEX_MAX_BUFF-1) {
+                                       printError("Line too long");
+                               }
+                               buff[i] = '\0';
+                               status = LEX_TOKEN;
+                       }
+                       
+                       if (c=='\r' && !feof(file)) {
+                               // The Windows support has lead to the
+                               // possibility of "\r\n" at the end of
+                               // a line.  This will stop LyX choking
+                               // when it expected to find a '\n'
+                               c = getc(file);
+                       }
+
+                       if (c=='\n')
+                               lineno++;
+                       
+               }
+               if (status) return true;
+               
+               status = (feof(file)) ? LEX_FEOF: LEX_UNDEF;
+               buff[0] = '\0';
+               return false;
+       } else {
+               int c; // getc() returns an int
+               int i;
+               
+               
+               status = 0;
+               while (!feof(file) && !status) { 
+                       c = getc(file);
+
+                       // skip ','s
+                       if (c==',') continue;
+                       
+                       if (c=='\\') {
+                               // escape
+                               i = 0;
+                               do {
+                                       if (c == '\\') {
+                                               // escape the next char
+                                               c = getc(file);
+                                       }
+                                       buff[i++] = c;
+                                       c = getc(file);
+                               } while (c > ' ' && c != ',' && !feof(file) &&
+                                        (i != LEX_MAX_BUFF-1) );
+                               if (i == LEX_MAX_BUFF-1) {
+                                       printError("Line too long");
+                               }
+                               buff[i] = '\0';
+                               status = LEX_TOKEN;
+                               continue;
+                       }
+                       
+                       if (c=='#') {
+                               // Read rest of line (fast :-)
+                               fgets(buff, sizeof(buff), file);
+                               lineno++;
+                               continue;
+                       }
+
+                       // string
+                       if (c=='\"') {
+                               i = -1;
+                               bool escaped = false;
+                               do {
+                                       escaped = false;
+                                       c = getc(file);
+                                       if (c == '\r') continue;
+                                       if (c == '\\') {
+                                               // escape the next char
+                                               c = getc(file);
+                                               escaped = true;
+                                       }
+                                       buff[++i] = c;
+                               
+                                       if (!escaped && c == '\"') break;
+                               } while (c!='\n' && !feof(file) &&
+                                        i!=(LEX_MAX_BUFF-2));
+                               
+                               if (i==(LEX_MAX_BUFF-2)) {
+                                       printError("Line too long");
+                                       c = '\"'; // Pretend we got a "
+                                       i++;
+                               }
+                               
+                               if (c!='\"') {
+                                       printError("Missing quote");
+                                       if (c=='\n')
+                                               lineno++;
+                               }
+                               
+                               buff[i] = '\0';
+                               status = LEX_DATA;
+                               break; 
+                       }
+                       
+                       if (c > ' ' && !feof(file))  {
+                               i = 0;
+                               do {
+                                       if (c == '\\') {
+                                               // escape the next char
+                                               c = getc(file);
+                                               //escaped = true;
+                                       }
+                                       buff[i++] = c;
+                                       c = getc(file);
+                               } while (c > ' ' && c != ',' && !feof(file) &&
+                                        (i != LEX_MAX_BUFF-1) );
+                               if (i == LEX_MAX_BUFF-1) {
+                                       printError("Line too long");
+                               }
+                               buff[i] = '\0';
+                               status = LEX_TOKEN;
+                       }
+
+                       // new line
+                       if (c=='\n')
+                               lineno++;
+               }
+               
+               if (status) return true;
+               
+               status = (feof(file)) ? LEX_FEOF: LEX_UNDEF;
+               buff[0] = '\0';
+               return false;   
+       }
+}
+
+
+bool LyXLex::nextToken()
+{
+       int c; // getc() returns an int
+       int i;
+        
+        status = 0;
+       while (!feof(file) && !status) { 
+               c = getc(file);
+          
+               if (c >= ' ' && !feof(file))  {
+                       i = 0;
+                       if (c == '\\') { // first char == '\\'
+                               do {
+                                       buff[i++] = c;
+                                       c = getc(file);
+                               } while (c > ' ' && c != '\\' && !feof(file) &&
+                                        i != (LEX_MAX_BUFF-1));
+                       } else {
+                               do {
+                                       buff[i++] = c;
+                                       c = getc(file);
+                               } while (c >= ' ' && c != '\\' && !feof(file)
+                                        && i != (LEX_MAX_BUFF-1));
+                       }
+
+                       if (i == (LEX_MAX_BUFF-1)) {
+                               printError("Line too long");
+                       }
+
+                       if (c == '\\') ungetc(c,file); // put it back
+                       buff[i] = '\0';
+                       status = LEX_TOKEN;
+               }
+                 
+               if (c=='\n')
+                       lineno++;
+       
+       }
+        if (status)  return true;
+        
+        status = (feof(file)) ? LEX_FEOF: LEX_UNDEF;
+        buff[0] = '\0';
+        return false;
+}
+
+
+int LyXLex::FindToken(char const* string[])
+{  
+   int i = -1;
+   
+   if (next()) {
+      if (strcmp(buff, "default")) {
+        for (i=0; string[i][0] && strcmp(string[i], buff); i++);
+        if (!string[i][0]) {
+           printError("Unknown argument `$$Token'");
+           i = -1;
+        }
+      }  
+   } else
+     printError("file ended while scanning string token");
+   return i;
+}
+
+
+int LyXLex::CheckToken(char const* string[], int print_error)
+{  
+   int i = -1;
+   
+   if (strcmp(buff, "default")) {
+       for (i=0; string[i][0] && strcmp(string[i], buff); i++);
+       if (!string[i][0]) {
+           if (print_error)
+               printError("Unknown argument `$$Token'");
+           i = -1;
+       }
+   }
+   return i;
+}
diff --git a/src/lyxlex.h b/src/lyxlex.h
new file mode 100644 (file)
index 0000000..c12afdb
--- /dev/null
@@ -0,0 +1,169 @@
+// -*- C++ -*-
+//  Generalized simple lexical analizer.
+//  It can be used for simple syntax parsers, like lyxrc,
+//  texclass and others to come.   [asierra30/03/96]
+//
+//   (C) 1996 Lyx Team.
+#ifndef _LYXLEX_H
+#define _LYXLEX_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <stdio.h>
+#include "LString.h"
+
+///
+struct keyword_item {
+       ///
+       char const* tag;
+       ///
+       short code;
+};
+
+/*@Doc:
+  Generalized simple lexical analizer.
+  It can be used for simple syntax parsers, like lyxrc,
+  texclass and others to come.
+  See lyxrc.C for an example of usage.
+  */
+class LyXLex { 
+public:
+       ///
+       LyXLex (keyword_item*, int);
+       ///
+       ~LyXLex() { if (file && owns_file) fclose(file); };
+
+       /// Lex basic codes
+       enum {
+               ///
+               LEX_UNDEF = -1,
+               ///
+               LEX_FEOF  = -2,
+               ///
+               LEX_DATA  = -3,
+               ///
+               LEX_TOKEN = -4
+       };
+
+       /// file is open and end of file is not reached
+       bool IsOK();
+       /// return true if able to open file, else false
+       bool setFile(LString const & filename);
+       /// if file is already read from, line numbers will be wrong.
+       // should be removed
+       void setFile(FILE *f);
+       ///
+       // should be removed
+       FILE *getFile() { return file; }
+       /// Danger! Don't use it unless you know what you are doing.
+       void setLineNo(int l) { lineno = l; }
+       /// returns a lex code
+       int lex();
+
+       /** Just read athe next word. If esc is true remember that
+         some chars might be escaped: "\ atleast */
+       bool next(bool esc = false);
+
+       /** Read next token. This one is almost the same as next,
+         but it will consider " as a regular character and always
+         split a word if it contains a backslash.
+         */
+       bool nextToken();
+       
+       /// 
+       int GetLineNo() { return lineno; }
+       ///
+       int GetInteger();
+       ///
+       bool GetBool();
+       ///
+       float GetFloat();
+       ///
+       LString GetString() const;
+       
+       /// get a long string, ended by the tag `endtag'
+       LString getLongString(LString const &endtoken);
+       
+       ///
+       bool EatLine();
+       ///
+       int FindToken(char const* string[]);
+       ///
+       int CheckToken(char const* string[], int print_error);
+
+       ///
+       char const *text() const { return &buff[0]; }
+
+       /** Pushes a token list on a stack and replaces it with a new one.
+        */
+       void pushTable(keyword_item*, int);
+
+       /** Pops a token list into void and replaces it with the one now
+         on top of the stack.
+         */
+       void popTable();
+
+       /** Prints an error message with the corresponding line number
+         and file name. If message contains the substring `$$Token',
+         it is replaced with the value of GetString()
+         */
+       void printError(LString const & message);
+
+       /**
+         Prints the current token table on stderr.
+         */
+       void printTable();
+protected:
+       ///
+       enum {
+       ///
+               LEX_MAX_BUFF = 2048
+       };
+
+       ///
+       struct pushed_table {
+               ///
+               pushed_table(){
+                       next=NULL;
+                       table_elem=NULL;
+               }
+               ///
+               pushed_table *next;
+               ///
+               keyword_item *table_elem;
+               ///
+               int table_siz;
+       };
+
+       ///
+       FILE *file;
+        ///
+        bool owns_file;
+       /// 
+       LString name;
+       ///
+       int lineno;
+       ///
+       keyword_item *table;
+       ///
+       int no_items;
+       ///
+       char buff[LEX_MAX_BUFF];
+       ///
+       pushed_table *pushed;
+       ///
+       int search_kw(char const * const) const;
+       ///
+       short status;
+};
+
+
+inline
+bool LyXLex::IsOK()
+{
+       return (file && !feof(file));
+}
+
+#endif
diff --git a/src/lyxlib.h b/src/lyxlib.h
new file mode 100644 (file)
index 0000000..70b617d
--- /dev/null
@@ -0,0 +1,65 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#ifndef _LYX_LIB_H
+#define _LYX_LIB_H
+
+#include <stdlib.h>
+#include <time.h>
+#include "LString.h"
+#include "gettext.h"
+
+/// generates an checksum
+unsigned long lyxsum(char const *file);
+
+/// returns a date string
+inline char* date() 
+{
+       time_t tid;
+       if ((tid=time(NULL)) == (time_t)-1)
+               return (char*)NULL;
+       else
+               return (ctime(&tid));
+}
+
+
+// Where can I put this?  I found the occurence of the same code
+// three/four times. Don't you think it better to use a macro definition
+// (an inlined member of some class)?
+///
+inline LString getUserName()
+{
+       LString userName ;
+       userName = getenv("LOGNAME");
+       if (userName.empty())
+               userName = getenv("USER");
+       if (userName.empty())
+               userName = _("unknown");
+       return userName;
+}
+
+
+/// Returns the maximum of two integers.
+inline
+int Maximum(int a, int b)
+{
+       return ((a>b) ? a : b);
+}
+
+
+/// Returns the minimum of two integers.
+inline
+int Minimum(int a, int b)
+{
+       return ((a<b) ? a : b);
+}
+
+#endif
diff --git a/src/lyxlookup.C b/src/lyxlookup.C
new file mode 100644 (file)
index 0000000..ee36103
--- /dev/null
@@ -0,0 +1,230 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich 
+*           Copyright (C) 1995-1998 The LyX team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#ifdef HAVE_XOPENIM
+// This part is the full blown Input Method manager for X11R5 and up.
+// For the plain-and-old-X11R4 version, see later.
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
+#include "error.h"
+
+static XIM xim;
+static XIC xic;
+XComposeStatus compose_status={NULL,0};
+
+// This is called after the main LyX window has been created
+void InitLyXLookup(Display* display, Window window) 
+{
+       xic = NULL;
+
+       // This part could be done before opening display
+       setlocale(LC_CTYPE,"");
+               if (!XSupportsLocale()) {
+               lyxerr.debug("InitLyXLookup: X does not support this locale.");
+               return;
+       } 
+       if (!XSetLocaleModifiers("")) {
+               lyxerr.debug("InitLyXLookup: Could not set modifiers "
+                            "for this locale.");
+               return;
+       }
+
+       // This part will have to be done for each frame
+       xim = XOpenIM (display, NULL, NULL, NULL);
+       if (xim) {
+               xic = XCreateIC (xim,  
+                           XNInputStyle, XIMPreeditNothing | XIMStatusNothing,
+                           XNClientWindow, window,
+                           XNFocusWindow, window, 
+                           NULL);
+               
+               if (!xic) {
+                       lyxerr.debug("InitLyXLookup: could not create "
+                                    "an input context");
+                       XCloseIM (xim);
+                       xim = NULL;
+               } 
+       }
+       else 
+               lyxerr.debug("InitLyXLookup: could not open "
+                            "an input method.");
+
+}
+
+
+static
+bool isDeadEvent(XEvent *event,
+                 char *buffer_return, int bytes_buffer,
+                 KeySym *keysym_return)
+{
+       XLookupString(&event->xkey, buffer_return,
+                     bytes_buffer, keysym_return,
+                     NULL);
+       // Can this be done safely in any other way?
+       // This is all the dead keys I know of in X11R6.1
+       if (false
+#ifdef XK_dead_grave
+           || *keysym_return == XK_dead_grave
+#endif
+#ifdef XK_dead_acute
+           || *keysym_return == XK_dead_acute
+#endif
+#ifdef XK_dead_circumflex
+           || *keysym_return == XK_dead_circumflex
+#endif
+#ifdef XK_dead_tilde
+           || *keysym_return == XK_dead_tilde
+#endif
+#ifdef XK_dead_macron
+           || *keysym_return == XK_dead_macron
+#endif
+#ifdef XK_dead_breve
+           || *keysym_return == XK_dead_breve
+#endif
+#ifdef XK_dead_abovedot
+           || *keysym_return == XK_dead_abovedot
+#endif
+#ifdef XK_dead_diaeresis
+           || *keysym_return == XK_dead_diaeresis
+#endif
+#ifdef XK_dead_abovering
+           || *keysym_return == XK_dead_abovering
+#endif
+#ifdef XK_dead_doubleacute
+           || *keysym_return == XK_dead_doubleacute
+#endif
+#ifdef XK_dead_caron
+           || *keysym_return == XK_dead_caron
+#endif
+#ifdef XK_dead_cedilla
+           || *keysym_return == XK_dead_cedilla
+#endif
+#ifdef XK_dead_ogonek
+           || *keysym_return == XK_dead_ogonek
+#endif
+#ifdef XK_dead_iota
+           || *keysym_return == XK_dead_iota
+#endif
+#ifdef XK_dead_voiced_sound
+           || *keysym_return == XK_dead_voiced_sound
+#endif
+#ifdef XK_dead_semivoiced_sound
+           || *keysym_return == XK_dead_semivoiced_sound
+#endif
+#ifdef XK_dead_belowdot
+           || *keysym_return == XK_dead_belowdot
+#endif
+           )
+               return true;
+       return false;
+}
+
+
+// This is called instead of XLookupString()
+int LyXLookupString(XEvent *event,    
+                   char *buffer_return, int bytes_buffer,
+                   KeySym *keysym_return) 
+{
+       int result = 0;
+       if (xic) {
+               if (isDeadEvent(event, buffer_return, bytes_buffer,
+                                keysym_return)) {
+                       return 0;
+               }
+               if (XFilterEvent (event, None)) {
+                       //lyxerr.print("XFilterEvent");
+                       *keysym_return = NoSymbol;
+                        return 0;
+               }
+               if (event->type != KeyPress)
+                       lyxerr.print("LyXLookupString: wrong event type" 
+                                     +LString(event->type));
+               Status status_return;
+               
+               result =  XmbLookupString(xic, &event->xkey, buffer_return,
+                                      bytes_buffer, keysym_return,
+                                      &status_return);
+               switch(status_return) {
+               case XLookupBoth:
+                       //lyxerr.print("XLookupBoth");
+                       break;
+               case XLookupChars:
+                       //lyxerr.print("XLookupChars");
+                       *keysym_return = NoSymbol;
+                       break;
+               case XLookupKeySym:
+                       //lyxerr.print("XLookupKeySym");
+                       result = 0;
+                       break;
+               default:
+                       //lyxerr.print("default");
+                       *keysym_return = NoSymbol;
+                       result = 0;
+                       break;
+               }
+       } else {
+               result = XLookupString(&event->xkey, buffer_return,
+                                 bytes_buffer, keysym_return,
+                                 &compose_status);
+       }
+       return result;
+}
+
+// This is called after the main window has been destroyed
+void CloseLyXLookup() 
+{
+       if (xic) {
+               lyxerr.debug("CloseLyXLookup: destroying input context");
+               XDestroyIC(xic);
+               XCloseIM(xim);
+       }
+}
+
+
+#else // We do not have XOpenIM, so we stick with normal XLookupString
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+XComposeStatus compose_status={NULL,0};
+
+// This is called after the main LyX window has been created
+void InitLyXLookup(Display* , Window ) 
+{
+       //Nothing to do.
+}
+
+// This is called instead of XLookupString(). I this particular case,
+// this *is* XLookupString...
+int LyXLookupString(XEvent *event,    
+                   char *buffer_return, int bytes_buffer,
+                   KeySym *keysym_return) 
+{
+       return XLookupString(&event->xkey, buffer_return,
+                                 bytes_buffer, keysym_return,
+                                 &compose_status);
+}
+
+// This is called after the main window has been destroyed
+void CloseLyXLookup() 
+{
+       // Nothing to do
+}
+
+
+#endif // HAVE_XOPENIM
diff --git a/src/lyxlookup.h b/src/lyxlookup.h
new file mode 100644 (file)
index 0000000..1ecda2c
--- /dev/null
@@ -0,0 +1,29 @@
+/* This file is part of                   -*- C++ -*-
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995-1997 Matthias Ettrich 
+*                                    & The LyX team
+*
+*======================================================*/
+
+/* This header file defines wrappers around the X input method related
+   functions. This should probably be moved into LyXView (to have
+   different input methods for different frames, but for now we can
+   keep it as it is. */
+
+#include <config.h>
+#include <X11/Xlib.h>
+
+// Initialize the compose key handling
+extern void InitLyXLookup(Display* , Window ) ;
+
+// Read a keysym and/or a string (like XLookupString)
+extern int LyXLookupString(XEvent *event,    
+                   char *buffer_return, int bytes_buffer,
+                   KeySym *keysym_return);
+
+// Call this when you destroy your window
+extern void CloseLyXLookup();
+
diff --git a/src/lyxparagraph.h b/src/lyxparagraph.h
new file mode 100644 (file)
index 0000000..51b0dd6
--- /dev/null
@@ -0,0 +1,519 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+#ifndef _LYXPARAGRAPH_H
+#define _LYXPARAGRAPH_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "definitions.h"
+#include "insets/lyxinset.h"
+#include "table.h"
+#include "textutils.h"
+#include "vspace.h"
+#include "insets/insetbib.h"
+
+class BufferParams;
+class LyXBuffer;
+class LyXLayout;
+class TexRow;
+struct LaTeXFeatures;
+
+/// A LyXParagraph holds all text, attributes and insets in a text paragraph
+class LyXParagraph  {
+public:
+
+       /// The footnoteflag
+       enum footnote_flag {
+               ///
+               NO_FOOTNOTE,
+               ///
+               OPEN_FOOTNOTE,
+               ///
+               CLOSED_FOOTNOTE
+       };
+
+       /// The footnotekinds
+       enum footnote_kind {
+               ///
+               FOOTNOTE,
+               ///
+               MARGIN,
+               ///
+               FIG,
+               ///
+               TAB,
+               ///
+               ALGORITHM,  // Bernhard, 970807
+               ///
+               WIDE_FIG,   // CFO-G, 971106
+               ///
+               WIDE_TAB    // CFO-G, 971106
+       };
+       
+       ///
+       LyXParagraph();
+       /// this konstruktor inserts the new paragraph in a list
+       LyXParagraph(LyXParagraph *par);
+       /// the destruktors removes the new paragraph from the list
+       ~LyXParagraph();
+
+       ///
+       void writeFile(FILE*, BufferParams &, char, char);
+
+       // ///
+       //void writeLaTeX(FILE*, BufferParams &);
+
+       ///
+       void validate(LaTeXFeatures&);
+       
+       ///
+       int GetID(){
+               return id;
+       }
+       ///
+       void SetID(int id_arg){
+               id = id_arg;
+       }
+       
+       /** allocates more memory for the specified paragraph
+         pos is needed to specify the paragraph correctly. Remember the
+         closed footnotes
+         */
+       void Enlarge(int pos, int number);
+
+       /** make the allocated memory fit to the needed size
+         used to make a paragraph smaller
+         */
+       void FitSize();
+       
+       ///
+       void read();
+       
+       ///
+       void readSimpleWholeFile(FILE *);
+
+       ///
+       LyXParagraph* TeXOnePar(LString &file, TexRow &texrow,
+                               LString &foot, TexRow &foot_texrow,
+                               int &foot_count);
+
+       ///
+       LyXParagraph* TeXEnvironment(LString &file, TexRow &texrow,
+                                    LString &foot, TexRow &foot_texrow,
+                                    int &foot_count);
+       
+       ///
+       LyXParagraph* Clone();
+       
+       ///
+       bool HasSameLayout(LyXParagraph *par);
+       
+       ///
+       void MakeSameLayout(LyXParagraph *par);
+
+       /// Is it the first par with same depth and layout?
+       bool IsFirstInSequence() {
+               LyXParagraph *dhook = DepthHook(GetDepth());
+               return (dhook == this
+                       || dhook->GetLayout() != GetLayout()
+                       || dhook->GetDepth() != GetDepth());
+       }
+
+       ///
+       int size;
+       
+       ///
+       char *text;
+
+       /// 
+       VSpace added_space_top;
+       
+       /// 
+       VSpace added_space_bottom;
+       
+       ///
+       signed char layout;
+       
+       /**
+         \begin{itemize}
+         \item no footnote, closed footnote, 
+         \item open footnote, where footnote
+         \item means footnote-environment
+         \end{itemize}
+        */
+       footnote_flag footnoteflag;
+
+       /// footnote, margin, fig, tab
+       footnote_kind footnotekind;
+   
+       //@Man: the LyX- DTP-switches
+       //@{
+       ///
+       bool line_top;
+       
+       ///
+       bool line_bottom;
+       
+       ///
+       bool pagebreak_top;
+       
+       ///
+       bool pagebreak_bottom;
+       
+       ///
+       char align;
+       
+       ///
+       char depth;
+       
+       ///
+        bool noindent;
+       
+private:
+       ///
+       int counter[10];
+public:
+       ///
+       void setCounter(int i, int v) { counter[i] = v; }
+       int getCounter(int i) { return counter[i]; }
+       void incCounter(int i) { counter[i]++; }
+       ///
+       bool start_of_appendix;
+
+       ///
+       bool appendix;
+
+       ///
+       char enumdepth;
+       
+       ///
+       char itemdepth;
+
+        /* This is for the paragraph extra stuff */
+        ///
+        int pextra_type;
+        ///
+        LString pextra_width;
+        ///
+        LString pextra_widthp;
+        ///
+        int pextra_alignment;
+        ///
+        bool pextra_hfill;
+        ///
+        bool pextra_start_minipage;
+        
+        ///
+       LString labelstring;
+       
+       ///
+       LString labelwidthstring;
+       //@}
+       
+       ///
+       int last;
+       ///
+       LyXParagraph *next;
+       ///
+       LyXParagraph *previous;
+
+       /* table stuff -- begin*/
+       ///
+       LyXTable *table;
+       /* table stuff -- end*/
+
+        /// 
+        InsetBibKey* bibkey;  // ale970302
+
+       /** these function are able to hide closed footnotes
+        */
+       LyXParagraph *Next();
+       
+       ///
+       LyXParagraph *Previous();
+
+       /** these function are able to hide open and closed footnotes
+        */ 
+       LyXParagraph *NextAfterFootnote();
+       ///
+       LyXParagraph *PreviousBeforeFootnote();
+       ///
+       LyXParagraph *LastPhysicalPar();
+       ///
+       LyXParagraph *FirstPhysicalPar();
+       
+       /// returns the physical paragraph
+       LyXParagraph *ParFromPos(int pos);
+       /// returns the position in the physical par
+       int PositionInParFromPos(int pos);
+
+       /// for the environments
+       LyXParagraph* DepthHook(int depth);
+       ///
+       int BeginningOfMainBody();
+       ///
+       LString GetLabelString();
+       
+       /// the next two functions are for the manual labels
+       LString GetLabelWidthString();
+       ///
+       void SetLabelWidthString(const LString &s);
+       ///
+       int GetLayout();
+       ///
+       char GetAlign();
+       ///
+       char GetDepth();
+       ///
+       void SetLayout(char new_layout);
+       ///
+       void SetOnlyLayout(char new_layout);
+       ///
+       int GetFirstCounter(int i);
+       ///
+       int Last();
+       
+       /** This one resets all layout and dtp switches but not the font
+        of the single characters
+        */ 
+       void Clear();
+       ///
+       void Erase(int pos);
+
+       /** the flag determines wether the layout should be copied
+        */ 
+       void BreakParagraph(int pos, int flag);
+       ///
+       void BreakParagraphConservative(int pos);
+
+       /** paste this paragraph with the next one
+         be carefull, this doesent make any check at all
+         */ 
+       void PasteParagraph();
+
+       /** Get unistantiated font setting. Returns the difference
+         between the characters font and the layoutfont.
+         This is what is stored in the fonttable
+        */ 
+       LyXFont GetFontSettings(int pos);
+       
+       /** Get fully instantiated font. If pos == -1, use the layout
+         font attached to this paragraph.
+         If pos == -2, use the label font of the layout attached here.
+         In all cases, the font is instantiated, i.e. does not have any
+         attributes with values LyXFont::INHERIT, LyXFont::IGNORE or 
+         LyXFont::TOGGLE.
+         */
+       LyXFont getFont(int pos);
+       
+       ///
+       char GetChar(int pos);
+       ///
+        LString GetWord(int &);
+       ///
+       void SetFont(int pos, LyXFont const & font);
+       /// Returns the height of the highest font in range
+       LyXFont::FONT_SIZE HighestFontInRange(int startpos, int endpos) const;
+       ///
+       void InsertChar(int pos, char c);
+       ///
+       void InsertInset(int pos, Inset *inset);
+       ///
+       Inset* GetInset(int pos);
+       
+       /// used to remove the error messages
+       int AutoDeleteInsets();
+
+       ///
+       Inset* ReturnNextInsetPointer(int &pos);
+       
+       /// returns -1 if inset not found
+       int GetPositionOfInset(Inset* inset);
+       
+       /// ok and now some footnote functions
+       void OpenFootnotes();
+       ///
+       void OpenFootnote(int pos);
+       ///
+       void CloseFootnotes();
+       ///
+       void CloseFootnote(int pos);
+   
+       /// important for cut and paste
+       void CopyIntoMinibuffer(int pos);
+       ///
+       void CutIntoMinibuffer(int pos);
+       ///
+       void InsertFromMinibuffer(int pos);
+       
+       ///
+       LyXParagraph *FirstSelfrowPar();
+       
+       ///
+       bool IsHfill(int pos) {
+               return IsHfillChar(GetChar(pos));
+       }
+       
+       ///
+       bool IsInset(int pos) {
+               return IsInsetChar(GetChar(pos));
+       }
+       
+       ///
+       bool IsFloat(int pos) {
+               return IsFloatChar(GetChar(pos));
+       }
+       
+       ///
+       bool IsNewline(int pos) {
+               bool tmp=false;
+               if (pos>=0)
+                       tmp= IsNewlineChar(GetChar(pos));
+               return tmp;
+       }
+       
+       ///
+       bool IsSeparator(int pos) {
+               return IsSeparatorChar(GetChar(pos));
+       }
+       
+       ///
+       bool IsLineSeparator(int pos) {
+               return IsLineSeparatorChar(GetChar(pos));
+       }
+       
+       ///
+       bool IsKomma(int pos){
+               return IsKommaChar(GetChar(pos));
+       }
+       
+       /// Used by the spellchecker
+       bool IsLetter(int pos);
+       
+       /// 
+       bool IsWord( int pos ) {
+         return IsWordChar( GetChar(pos) ) ;
+       }
+
+       ///
+       int ClearParagraph(){
+               int i=0;
+               if (!IsDummy() && !table){
+                       while (Last()
+                              && (IsNewline(0) 
+                                  || IsLineSeparator(0))){
+                               Erase(0);
+                               i++;
+                       }
+               }
+               return i;
+       }
+       
+       /** A paragraph following a footnote is a "dummy". A paragraph
+         with a footnote in it is stored as three paragraphs:
+         First a paragraph with the text up to the footnote, then
+         one (or more) paragraphs with the footnote, and finally
+         the a paragraph with the text after the footnote. Only the
+         first paragraph keeps information  about layoutparameters, */
+       bool IsDummy(){
+               return (footnoteflag == LyXParagraph::NO_FOOTNOTE && previous
+                       && previous->footnoteflag != LyXParagraph::NO_FOOTNOTE);
+       }
+
+        /* If I set a PExtra Indent on one paragraph of a ENV_LIST-TYPE
+           I have to set it on each of it's elements */
+       ///
+        void SetPExtraType(int type, const char *width, const char *widthp);
+       ///
+        void UnsetPExtraType();
+       ///
+       bool RoffContTableRows(FILE *file, int i, int actcell);
+       ///
+       bool linuxDocConvertChar(char c, LString &sgml_string);
+       ///
+       void SimpleDocBookOneTablePar(LString &file, LString &extra,
+                                     int &desc_on, int depth);
+       ///
+       void DocBookContTableRows(LString &file, LString &extra, int &desc_on,
+                                 int i, int current_cell_number, int &column);
+private:
+       /** A font entry covers a range of positions. Notice that the
+         entries in the list are inserted in random order.
+         I don't think it's worth the effort to implement a more effective
+         datastructure, because the number of different fonts in a paragraph
+         is limited. (Asger)
+       */
+       struct FontTable  {
+               /// Start position of paragraph this font attribute covers
+               int pos;
+               /// Ending position of paragraph this font attribute covers
+               int pos_end;
+
+               /** Font. Interpretation of the font values:
+               If a value is LyXFont::INHERIT_*, it means that the font 
+               attribute is inherited from either the layout of this
+               paragraph or, in the case of nested paragraphs, from the 
+               layout in the environment one level up until completely 
+               resolved.
+               The values LyXFont::IGNORE_* and LyXFont::TOGGLE are NOT 
+               allowed in these font tables.
+               */
+               LyXFont font;
+               /// Pointer to next font entry
+               FontTable *next;
+       };
+       ///
+       struct InsetTable {
+               ///
+               int pos;
+               ///
+               Inset *inset;
+               ///
+               InsetTable *next;
+       };
+       ///
+       FontTable *fonttable;
+       ///
+       InsetTable *insettable;
+       ///
+       LyXParagraph * TeXDeeper(LString &file, TexRow &texrow,
+                                  LString &foot, TexRow &foot_texrow,
+                                  int &foot_count);
+       ///
+       LyXParagraph * TeXFootnote(LString &file, TexRow &texrow,
+                                  LString &foot, TexRow &foot_texrow,
+                                  int &foot_count);
+       ///
+       bool SimpleTeXOnePar(LString &file, TexRow &texrow);
+       ///
+       bool SimpleTeXOneTablePar(LString &file, TexRow &texrow);
+       ///
+       bool TeXContTableRows(LString &file, int i, int current_cell_number,
+                              int &column, TexRow &texrow);
+       ///
+       void SimpleTeXBlanks(LString &file, TexRow &texrow,
+                            int const i, int &column, LyXFont const &font,
+                            LyXLayout const * const style);
+       ///
+       void SimpleTeXSpecialChars(LString &file, TexRow &texrow,
+                                  LyXFont &font, LyXFont &running_font,
+                                  LyXFont &basefont, bool &open_font,
+                                  LyXLayout const * const style,
+                                  int &i, int &column, char const c);
+       ///
+       int id;
+       ///
+       static unsigned int paragraph_id;
+};
+
+#endif
diff --git a/src/lyxrc.C b/src/lyxrc.C
new file mode 100644 (file)
index 0000000..0fb6fb7
--- /dev/null
@@ -0,0 +1,914 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *           Copyright (C) 1995-1998 The LyX Team.
+ *
+ * ====================================================== */
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "lyxrc.h"
+#endif
+
+#include "error.h"
+
+#include "lyxrc.h"
+#include "LyXAction.h"
+#include "lyxserver.h"
+#include "lyx_main.h"
+#include "intl.h"
+#include "tex-strings.h"
+#include "pathstack.h"
+#include "filetools.h"
+#include "lyxtext.h"
+
+//     $Id: lyxrc.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $     
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lyxrc.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+// this is crappy... why are those colors command line arguments and
+// not in lyxrc?? (Matthias) 
+// Because nobody put them there. (Asger)
+extern int fast_selection;
+extern LString background_color;
+extern char selection_color[];
+extern bool cursor_follows_scrollbar;
+extern kb_keymap *toplevel_keymap;
+extern LyXAction lyxaction;
+
+enum _LyXRCTags {
+       RC_BEGINTOOLBAR=1,
+       RC_FONT_ENCODING,
+       RC_PRINTER,
+       RC_PRINT_COMMAND,
+       RC_PRINTEVENPAGEFLAG,
+       RC_PRINTODDPAGEFLAG,
+       RC_PRINTPAGERANGEFLAG,
+       RC_PRINTCOPIESFLAG,
+       RC_PRINTCOLLCOPIESFLAG,
+       RC_PRINTREVERSEFLAG,
+       RC_PRINTLANDSCAPEFLAG,
+       RC_PRINTTOPRINTER,
+       RC_PRINT_ADAPTOUTPUT,
+       RC_PRINTTOFILE,
+       RC_PRINTFILEEXTENSION,
+       RC_PRINTEXSTRAOPTIONS,
+       RC_PRINTSPOOL_COMMAND,
+       RC_PRINTSPOOL_PRINTERPREFIX,
+        RC_PRINTPAPERFLAG,
+       RC_PRINTPAPERDIMENSIONFLAG,
+       RC_CUSTOM_EXPORT_COMMAND,
+       RC_CUSTOM_EXPORT_FORMAT,
+       RC_LATEX_COMMAND,
+        RC_LITERATE_COMMAND,
+        RC_LITERATE_EXTENSION,
+        RC_LITERATE_ERROR_FILTER,
+        RC_BUILD_COMMAND,
+        RC_BUILD_ERROR_FILTER,
+       RC_SCREEN_DPI,
+       RC_SCREEN_ZOOM,
+       RC_SCREEN_FONT_SIZES,
+       RC_SCREEN_FONT_ROMAN,
+       RC_SCREEN_FONT_SANS,
+       RC_SCREEN_FONT_TYPEWRITER,
+       RC_SCREEN_FONT_MENU,
+       RC_SCREEN_FONT_POPUP,
+       RC_SCREEN_FONT_ENCODING,
+       RC_AUTOSAVE,
+       RC_SGML_EXTRA_OPTIONS,
+       RC_DOCUMENTPATH,
+       RC_TEMPLATEPATH,
+       RC_TEMPDIRPATH,
+       RC_USETEMPDIR,
+       RC_LASTFILES,
+       RC_AUTOREGIONDELETE,
+       RC_BIND,
+       RC_SERVERPIPE,
+       RC_NOMENUACCELERATORS,
+       RC_INPUT,
+       RC_BINDFILE,
+       RC_KBMAP,
+       RC_KBMAP_PRIMARY,
+       RC_KBMAP_SECONDARY,
+       RC_FAST_SELECTION,
+       RC_SELECTION_COLOR,
+       RC_BACKGROUND_COLOR,
+       RC_FAX_COMMAND,
+       RC_PHONEBOOK,
+       RC_FAXPROGRAM,
+       RC_ASCIIROFF_COMMAND,
+       RC_ASCII_LINELEN,
+       RC_NUMLASTFILES,
+       RC_CHECKLASTFILES,
+       RC_VIEWDVI_COMMAND,
+       RC_DEFAULT_PAPERSIZE,
+       RC_PS_COMMAND,
+       RC_VIEWPS_COMMAND,
+       RC_VIEWPSPIC_COMMAND,
+       RC_ACCEPT_COMPOUND,
+       RC_SPELL_COMMAND,
+       RC_USE_INP_ENC,
+       RC_USE_ALT_LANG,
+       RC_USE_PERS_DICT,
+       RC_USE_ESC_CHARS,
+       RC_SCREEN_FONT_SCALABLE,
+       RC_ALT_LANG,
+       RC_PERS_DICT,
+       RC_ESC_CHARS,
+       RC_CHKTEX_COMMAND,
+       RC_CURSOR_FOLLOWS_SCROLLBAR,
+       RC_EXIT_CONFIRMATION,
+       RC_DISPLAY_SHORTCUTS,
+       RC_RELYX_COMMAND,
+       RC_LAST 
+};
+
+static keyword_item lyxrcTags[] = {
+       { "\\accept_compound", RC_ACCEPT_COMPOUND },
+       { "\\alternate_language", RC_ALT_LANG },
+       { "\\ascii_linelen", RC_ASCII_LINELEN },
+       { "\\ascii_roff_command", RC_ASCIIROFF_COMMAND },
+       { "\\auto_region_delete", RC_AUTOREGIONDELETE },
+       { "\\autosave", RC_AUTOSAVE },
+       { "\\background_color", RC_BACKGROUND_COLOR },
+       { "\\begin_toolbar", RC_BEGINTOOLBAR },
+       { "\\bind", RC_BIND },
+       { "\\bind_file", RC_BINDFILE },
+        { "\\build_command", RC_BUILD_COMMAND },
+        { "\\build_error_filter", RC_BUILD_ERROR_FILTER },
+       { "\\check_lastfiles", RC_CHECKLASTFILES },
+       { "\\chktex_command", RC_CHKTEX_COMMAND },
+       { "\\cursor_follows_scrollbar", RC_CURSOR_FOLLOWS_SCROLLBAR },
+       { "\\custom_export_command", RC_CUSTOM_EXPORT_COMMAND },
+       { "\\custom_export_format", RC_CUSTOM_EXPORT_FORMAT },
+       { "\\default_papersize", RC_DEFAULT_PAPERSIZE },
+       { "\\display_shortcuts", RC_DISPLAY_SHORTCUTS },
+       { "\\document_path", RC_DOCUMENTPATH },
+       { "\\escape_chars", RC_ESC_CHARS },
+       { "\\exit_confirmation", RC_EXIT_CONFIRMATION },
+       { "\\fast_selection", RC_FAST_SELECTION },
+       { "\\fax_command", RC_FAX_COMMAND },
+       { "\\fax_program", RC_FAXPROGRAM },
+       { "\\font_encoding", RC_FONT_ENCODING },
+       { "\\input", RC_INPUT },
+       { "\\kbmap", RC_KBMAP },
+       { "\\kbmap_primary", RC_KBMAP_PRIMARY },
+       { "\\kbmap_secondary", RC_KBMAP_SECONDARY },
+       { "\\lastfiles", RC_LASTFILES },
+       { "\\latex_command", RC_LATEX_COMMAND },
+        { "\\literate_command", RC_LITERATE_COMMAND },
+        { "\\literate_error_filter", RC_LITERATE_ERROR_FILTER },
+        { "\\literate_extension", RC_LITERATE_EXTENSION },
+       { "\\num_lastfiles", RC_NUMLASTFILES },
+       { "\\personal_dictionary", RC_PERS_DICT },
+       { "\\phone_book", RC_PHONEBOOK },
+       { "\\print_adapt_output", RC_PRINT_ADAPTOUTPUT },
+       { "\\print_collcopies_flag", RC_PRINTCOLLCOPIESFLAG },
+       { "\\print_command", RC_PRINT_COMMAND },
+       { "\\print_copies_flag", RC_PRINTCOPIESFLAG },
+       { "\\print_evenpage_flag", RC_PRINTEVENPAGEFLAG },
+       { "\\print_extra_options", RC_PRINTEXSTRAOPTIONS },
+       { "\\print_file_extension", RC_PRINTFILEEXTENSION },
+       { "\\print_landscape_flag", RC_PRINTLANDSCAPEFLAG },
+       { "\\print_oddpage_flag", RC_PRINTODDPAGEFLAG },
+       { "\\print_pagerange_flag", RC_PRINTPAGERANGEFLAG },
+        { "\\print_paper_dimension_flag", RC_PRINTPAPERDIMENSIONFLAG },
+        { "\\print_paper_flag", RC_PRINTPAPERFLAG },
+       { "\\print_reverse_flag", RC_PRINTREVERSEFLAG },
+       { "\\print_spool_command", RC_PRINTSPOOL_COMMAND },
+       { "\\print_spool_printerprefix", RC_PRINTSPOOL_PRINTERPREFIX },
+       { "\\print_to_file", RC_PRINTTOFILE },
+       { "\\print_to_printer", RC_PRINTTOPRINTER },
+       { "\\printer", RC_PRINTER },
+       { "\\ps_command", RC_PS_COMMAND },
+       { "\\relyx_command", RC_RELYX_COMMAND },
+       { "\\screen_dpi", RC_SCREEN_DPI },
+       { "\\screen_font_encoding", RC_SCREEN_FONT_ENCODING },
+       { "\\screen_font_menu", RC_SCREEN_FONT_MENU },
+       { "\\screen_font_popup", RC_SCREEN_FONT_POPUP },
+       { "\\screen_font_roman", RC_SCREEN_FONT_ROMAN },
+       { "\\screen_font_sans", RC_SCREEN_FONT_SANS },
+       { "\\screen_font_scalable", RC_SCREEN_FONT_SCALABLE },
+       { "\\screen_font_sizes", RC_SCREEN_FONT_SIZES },
+       { "\\screen_font_typewriter", RC_SCREEN_FONT_TYPEWRITER },
+       { "\\screen_zoom", RC_SCREEN_ZOOM },
+       { "\\selection_color", RC_SELECTION_COLOR },
+       { "\\serverpipe", RC_SERVERPIPE },
+       { "\\sgml_extra_options", RC_SGML_EXTRA_OPTIONS },
+       { "\\spell_command", RC_SPELL_COMMAND },
+       { "\\tempdir_path", RC_TEMPDIRPATH },
+       { "\\template_path", RC_TEMPLATEPATH },
+       { "\\use_alt_language", RC_USE_ALT_LANG },
+       { "\\use_escape_chars", RC_USE_ESC_CHARS },
+       { "\\use_input_encoding", RC_USE_INP_ENC },
+       { "\\use_personal_dictionary", RC_USE_PERS_DICT },
+       { "\\use_tempdir", RC_USETEMPDIR },
+       { "\\view_dvi_command", RC_VIEWDVI_COMMAND },
+       { "\\view_ps_command", RC_VIEWPS_COMMAND },
+        { "\\view_pspic_command", RC_VIEWPSPIC_COMMAND }
+};
+
+/* Let the range depend of the size of lyxrcTags.  Alejandro 240596 */
+static const int lyxrcCount = sizeof(lyxrcTags) / sizeof(keyword_item);
+
+// Should this be moved inside LyXAction? 
+static inline
+int bindKey(char const* seq, int action)
+{ 
+       return toplevel_keymap->bind(seq, action); 
+}
+
+
+LyXRC::LyXRC()
+{
+       // Get printer from the environment. If fail, use default "",
+       // assuming that everything is set up correctly.
+       printer = getenv("PRINTER");
+       print_command = "dvips";
+       print_evenpage_flag = "-B";
+       print_oddpage_flag = "-A";
+       print_pagerange_flag = "-pp";
+       print_copies_flag = "-c";
+       print_collcopies_flag = "-C";
+       print_reverse_flag = "-r";
+       print_landscape_flag = "-t landscape";
+       print_to_printer = "-P";
+       print_to_file = "-o ";
+       print_file_extension = ".ps";
+        print_paper_flag = "-t";
+       print_paper_dimension_flag = "-T";
+       document_path = getEnvPath("HOME");
+       tempdir_path = "/tmp";
+       use_tempdir = true;
+       latex_command = "latex";
+        literate_command = "none";
+        literate_extension = "none";
+        literate_error_filter = "cat";
+        build_command = "make";
+        build_error_filter = "cat";
+       relyx_command = "reLyX";
+       ps_command = "gs";
+       view_ps_command = "ghostview -swap";
+       view_pspic_command = "ghostview";
+       view_dvi_command = "xdvi";
+       default_papersize = PAPER_USLETTER;
+       custom_export_format = "ps";
+       chktex_command = "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38";
+       fontenc = "default";
+       dpi = 75;
+       // Because a screen typically is wider than a piece of paper:
+       zoom = 150;
+       // Default LaTeX font size:
+       font_sizes[LyXFont::SIZE_TINY] = 5.0;
+       font_sizes[LyXFont::SIZE_SCRIPT] = 7.0;
+       font_sizes[LyXFont::SIZE_FOOTNOTE] = 8.0;
+       font_sizes[LyXFont::SIZE_SMALL] = 9.0;
+       font_sizes[LyXFont::SIZE_NORMAL] = 10.0;
+       font_sizes[LyXFont::SIZE_LARGE] = 12.0;
+       font_sizes[LyXFont::SIZE_LARGER] = 14.4;
+       font_sizes[LyXFont::SIZE_LARGEST] = 17.26;
+       font_sizes[LyXFont::SIZE_HUGE] = 20.74;
+       font_sizes[LyXFont::SIZE_HUGER] = 24.88;
+       use_scalable_fonts = true;
+       roman_font_name = "-*-times";
+       sans_font_name = "-*-helvetica";
+       typewriter_font_name = "-*-courier";
+       menu_font_name = "-*-helvetica-bold-r";
+       popup_font_name = "-*-helvetica-medium-r";
+       font_norm = "iso8859-1";
+       autosave = 300;
+       auto_region_delete = true;
+       ascii_linelen = 75;
+       num_lastfiles = 4;
+       check_lastfiles = true;
+       exit_confirmation = true;
+       display_shortcuts = true;
+       // Spellchecker settings:
+       isp_command = "ispell";
+       isp_accept_compound = false;
+       isp_use_input_encoding = false;
+       isp_use_alt_lang = false;
+       isp_use_pers_dict = false;
+       isp_use_esc_chars = false;
+       use_kbmap = false;
+       hasBindFile = false;
+       defaultKeyBindings();
+}
+
+
+LyXRC::~LyXRC()
+{
+}
+
+int LyXRC::ReadBindFile(LString name)
+{
+       hasBindFile = true;
+       LString tmp = i18nLibFileSearch("bind",name,"bind");
+       lyxerr.debug("Reading bindfile:" + tmp, Error::LYXRC); 
+       int result = Read(tmp);
+       if (result) {
+               lyxerr.print("Error reading bind file: " + tmp);
+       }
+       return result;
+}
+
+int LyXRC::Read(LString const &filename)
+{
+       // Default bindfile.
+       LString bindFile = "cua";
+
+       LyXLex lexrc(lyxrcTags, lyxrcCount);
+       if (lyxerr.debugging(Error::LEX_PARSER))
+               lexrc.printTable();
+       
+       lexrc.setFile(filename);
+       if (!lexrc.IsOK()) return -2;
+
+       lyxerr.debug("Reading '" + filename + "'...", Error::INIT);
+       
+       while (lexrc.IsOK()) {
+
+               switch(lexrc.lex()) {
+               case LyXLex::LEX_FEOF:
+                       break;
+               case RC_INPUT: // Include file
+                       if (lexrc.next()) {
+                               LString tmp = LibFileSearch(LString(),
+                                                          lexrc.GetString()); 
+                               if (Read(tmp)) {
+                                       lexrc.printError("Error reading "
+                                                       "included file: "+tmp);
+                               }
+                       }
+                       break;
+               case RC_BINDFILE:                     // RVDK_PATCH_5
+                       if (lexrc.next()) 
+                               ReadBindFile(lexrc.GetString());
+                       break;
+
+               case RC_BEGINTOOLBAR:
+                       // this toolbar should be changed to be a completely
+                       // non gui toolbar. (Lgb)
+                       toolbar.read(lexrc);
+                       break;
+                       
+               case RC_KBMAP:
+                       if (lexrc.next())
+                               use_kbmap = lexrc.GetBool();
+                       break;
+
+               case RC_EXIT_CONFIRMATION:
+                       if (lexrc.next())
+                               exit_confirmation = lexrc.GetBool();
+                       break;
+
+               case RC_DISPLAY_SHORTCUTS:
+                       if (lexrc.next())
+                               display_shortcuts = lexrc.GetBool();
+                       break;
+
+               case RC_KBMAP_PRIMARY:
+                       if (lexrc.next())
+                               primary_kbmap = lexrc.GetString();
+                       break;
+
+               case RC_KBMAP_SECONDARY:
+                       if (lexrc.next())
+                               secondary_kbmap = lexrc.GetString();
+                       break;
+                         
+               case RC_FONT_ENCODING:
+                       if (lexrc.next())
+                               fontenc = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTER:
+                       if (lexrc.next())
+                               printer = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINT_COMMAND:
+                       if (lexrc.next())
+                               print_command = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTEVENPAGEFLAG:
+                       if (lexrc.next())
+                               print_evenpage_flag = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTODDPAGEFLAG:
+                       if (lexrc.next())
+                               print_oddpage_flag = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTPAGERANGEFLAG:
+                       if (lexrc.next())
+                               print_pagerange_flag = lexrc.GetString();
+                       break;
+
+               case RC_PRINTCOPIESFLAG:
+                       if (lexrc.next())
+                               print_copies_flag = lexrc.GetString();
+                       break;
+
+               case RC_PRINTCOLLCOPIESFLAG:
+                       if (lexrc.next())
+                               print_collcopies_flag = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTREVERSEFLAG:
+                       if (lexrc.next())
+                               print_reverse_flag = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTLANDSCAPEFLAG:
+                       if (lexrc.next())
+                               print_landscape_flag = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTTOPRINTER:
+                       if (lexrc.next())
+                               print_to_printer = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINT_ADAPTOUTPUT:
+                       if (lexrc.next())
+                               print_adapt_output = lexrc.GetBool();
+                       break;
+                       
+               case RC_PRINTTOFILE:
+                       if (lexrc.next())
+                               print_to_file = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTFILEEXTENSION:
+                       if (lexrc.next())
+                               print_file_extension = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTEXSTRAOPTIONS:
+                       if (lexrc.EatLine())
+                               print_extra_options = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTSPOOL_COMMAND:
+                       if (lexrc.next())
+                               print_spool_command = lexrc.GetString();
+                       break;
+                       
+               case RC_PRINTSPOOL_PRINTERPREFIX:
+                       if (lexrc.next())
+                               print_spool_printerprefix = lexrc.GetString();
+                       break;
+
+                case RC_PRINTPAPERDIMENSIONFLAG:
+                       if (lexrc.next())
+                               print_paper_dimension_flag = lexrc.GetString();
+                       break;
+
+                case RC_PRINTPAPERFLAG:
+                       if (lexrc.next())
+                               print_paper_flag = lexrc.GetString();
+                       break;
+                       
+               case RC_CUSTOM_EXPORT_COMMAND:
+                       if (lexrc.next())
+                               custom_export_command = lexrc.GetString();
+                       break;
+
+               case RC_CUSTOM_EXPORT_FORMAT:
+                       if (lexrc.next())
+                               custom_export_format = lexrc.GetString();
+                       break;
+                       
+               case RC_LATEX_COMMAND:
+                       if (lexrc.next())
+                               latex_command = lexrc.GetString();
+                       break;
+
+                case RC_LITERATE_COMMAND:
+                        if (lexrc.next())
+                                literate_command = lexrc.GetString();
+                        break;
+                case RC_LITERATE_EXTENSION:
+                        if (lexrc.next())
+                                literate_extension = lexrc.GetString();
+                        break;
+
+                case RC_LITERATE_ERROR_FILTER:
+                        if (lexrc.next())
+                                literate_error_filter = lexrc.GetString();
+                        break;
+
+                case RC_BUILD_COMMAND:
+                        if (lexrc.next())
+                                build_command = lexrc.GetString();
+                        break;
+
+                case RC_BUILD_ERROR_FILTER:
+                        if (lexrc.next())
+                                build_error_filter = lexrc.GetString();
+                         break;
+               case RC_RELYX_COMMAND:
+                       if (lexrc.next())
+                               relyx_command = lexrc.GetString();
+                       break;
+
+               case RC_DEFAULT_PAPERSIZE:
+                        if (lexrc.next()) {
+                               LString size = lexrc.GetString();
+                               size.lowercase();
+                               if (size == "usletter")
+                                       default_papersize = PAPER_USLETTER;
+                               else if (size == "legal")
+                                       default_papersize = PAPER_LEGALPAPER;
+                               else if (size == "executive")
+                                       default_papersize = PAPER_EXECUTIVEPAPER;
+                               else if (size == "a3")
+                                       default_papersize = PAPER_A3PAPER;
+                               else if (size == "a4")
+                                       default_papersize = PAPER_A4PAPER;
+                               else if (size == "a5")
+                                       default_papersize = PAPER_A5PAPER;
+                               else if (size == "b5")
+                                       default_papersize = PAPER_B5PAPER;
+                       }
+                       break;
+               case RC_VIEWDVI_COMMAND:
+                       if (lexrc.next())
+                               view_dvi_command = lexrc.GetString();
+                       break;
+
+               case RC_PS_COMMAND:
+                       if (lexrc.next())
+                               ps_command = lexrc.GetString();
+                       break;
+
+               case RC_VIEWPS_COMMAND:
+                       if (lexrc.next())
+                               view_ps_command = lexrc.GetString();
+                       break;
+
+               case RC_VIEWPSPIC_COMMAND:
+                       if (lexrc.next())
+                               view_pspic_command = lexrc.GetString();
+                       break;
+
+               case RC_CHKTEX_COMMAND:
+                       if (lexrc.next())
+                               chktex_command = lexrc.GetString();
+                       break;
+
+               case RC_SCREEN_DPI:
+                       if (lexrc.next())
+                               dpi = lexrc.GetInteger();
+                       break;
+
+               case RC_SCREEN_ZOOM:
+                       if (lexrc.next())
+                               zoom = lexrc.GetInteger();
+                       break;
+
+               case RC_SCREEN_FONT_SIZES:
+                       if (lexrc.next())
+                               font_sizes[LyXFont::SIZE_TINY] =
+                                       lexrc.GetFloat();
+                       if (lexrc.next())
+                               font_sizes[LyXFont::SIZE_SCRIPT] =
+                                       lexrc.GetFloat();
+                       if (lexrc.next())
+                               font_sizes[LyXFont::SIZE_FOOTNOTE] =
+                                       lexrc.GetFloat();
+                       if (lexrc.next())
+                               font_sizes[LyXFont::SIZE_SMALL] =
+                                       lexrc.GetFloat();
+                       if (lexrc.next())
+                               font_sizes[LyXFont::SIZE_NORMAL] =
+                                       lexrc.GetFloat();
+                       if (lexrc.next())
+                               font_sizes[LyXFont::SIZE_LARGE] =
+                                       lexrc.GetFloat();
+                       if (lexrc.next())
+                               font_sizes[LyXFont::SIZE_LARGER] =
+                                       lexrc.GetFloat();
+                       if (lexrc.next())
+                               font_sizes[LyXFont::SIZE_LARGEST] =
+                                       lexrc.GetFloat();
+                       if (lexrc.next())
+                               font_sizes[LyXFont::SIZE_HUGE] =
+                                       lexrc.GetFloat();
+                       if (lexrc.next())
+                               font_sizes[LyXFont::SIZE_HUGER] =
+                                       lexrc.GetFloat();
+                       break;
+
+                case RC_SCREEN_FONT_SCALABLE:
+                        if (lexrc.next())
+                                use_scalable_fonts = lexrc.GetBool();
+                       break;
+
+               case RC_AUTOSAVE:
+                       if (lexrc.next())
+                               autosave = lexrc.GetInteger();
+                       break;
+                       
+               case RC_SGML_EXTRA_OPTIONS:
+                       if (lexrc.next())
+                               sgml_extra_options = lexrc.GetString();
+                       break;
+
+               case RC_DOCUMENTPATH:
+                       if (lexrc.next()) {
+                               document_path = ExpandPath(lexrc.GetString());
+                       }
+                       break;
+
+               case RC_TEMPLATEPATH:
+                       if (lexrc.next())
+                               template_path = ExpandPath(lexrc.GetString());
+                       break;
+
+               case RC_TEMPDIRPATH:
+                       if (lexrc.next())
+                               tempdir_path = ExpandPath(lexrc.GetString());
+                       break;
+                       
+               case RC_USETEMPDIR:
+                       if (lexrc.next())
+                               use_tempdir = lexrc.GetBool();
+                       break;
+
+               case RC_LASTFILES:
+                       if (lexrc.next())
+                               lastfiles = ExpandPath(lexrc.GetString());
+                       break;
+
+                case RC_NUMLASTFILES:
+                        if (lexrc.next())
+                                num_lastfiles = lexrc.GetInteger();
+                       break;
+
+                case RC_CHECKLASTFILES:
+                        if (lexrc.next())
+                                check_lastfiles = lexrc.GetBool();
+                       break;
+
+               case RC_SCREEN_FONT_ROMAN:
+                       if (lexrc.next())
+                               roman_font_name = lexrc.GetString();
+                       break;
+
+               case RC_SCREEN_FONT_SANS:
+                       if (lexrc.next())
+                               sans_font_name = lexrc.GetString();
+                       break;
+
+               case RC_SCREEN_FONT_TYPEWRITER:
+                       if (lexrc.next())
+                               typewriter_font_name = lexrc.GetString();
+                       break;
+                       
+               case RC_SCREEN_FONT_MENU:
+                       if (lexrc.next())
+                               menu_font_name = lexrc.GetString();
+                       break;
+                       
+               case RC_SCREEN_FONT_POPUP:
+                       if (lexrc.next())
+                               popup_font_name = lexrc.GetString();
+                       break;
+                       
+               case RC_SCREEN_FONT_ENCODING:
+                       if (lexrc.next())
+                               font_norm = lexrc.GetString();
+                       break;
+                       
+               case RC_AUTOREGIONDELETE:
+                       // Auto region delete defaults to true
+                       if (lexrc.next())
+                               auto_region_delete = lexrc.GetBool();
+                       break;
+                       
+               case RC_BIND:
+               {
+                       // we should not do an explicit binding before
+                       // loading a bind file. So, in this case, load
+                       // the default bind file.
+                       if (!hasBindFile)
+                               ReadBindFile();
+
+                       // !!!chb, dynamic key binding...
+                       int action, res=0;
+                       LString seq, cmd;
+
+                       if (lexrc.lex()==LyXLex::LEX_DATA)  {
+                               seq = lexrc.GetString();
+                       } else {
+                               lexrc.printError("Bad key sequence: `$$Token'");
+                               break;
+                       }
+
+                       if (lexrc.lex()==LyXLex::LEX_DATA) {
+                               cmd = lexrc.GetString();
+                       } else {
+                               lexrc.printError("Bad command: `$$Token'");
+                               break;
+                       }
+
+                       if ((action = lyxaction.LookupFunc(cmd.c_str()))>=0) {
+                               if (lyxerr.debugging(Error::KEY)) {
+                                       lyxerr.print("RC_BIND: Sequence `"
+                                                     + seq + "' Command `"
+                                                     + cmd + "' Action `"
+                                                     + (int) action + '\'');
+                               }
+                               res = bindKey(seq.c_str(), action);
+                               if (res != 0) {
+                                       lexrc.printError(
+                                             "Invalid key sequence `"
+                                             + seq + '\''); 
+                               }
+                       } else {// cmd is the last token read.
+                               lexrc.printError(
+                                           "Unknown LyX function `$$Token'");
+                       }
+                       break;
+               }
+               case RC_SERVERPIPE:
+                       if (lexrc.next())
+                               lyxpipes = ExpandPath(lexrc.GetString());
+                       break;
+                       
+               case RC_CURSOR_FOLLOWS_SCROLLBAR:
+                       if (lexrc.next())
+                               cursor_follows_scrollbar = lexrc.GetBool();
+                       break;
+               case RC_FAST_SELECTION:
+                       if (lexrc.next())
+                               fast_selection = lexrc.GetBool();
+                       break;
+               case RC_BACKGROUND_COLOR:
+                       if (lexrc.next())
+                               background_color = lexrc.GetString();
+                       break;
+               case RC_SELECTION_COLOR:
+                       if (lexrc.next())
+                               strncpy(selection_color,
+                                       lexrc.GetString().c_str(),31);
+                       break;
+               case RC_FAX_COMMAND:
+                       if (lexrc.next())
+                               fax_command = lexrc.GetString();
+                       break;
+               case RC_FAXPROGRAM:
+                       if (lexrc.next())
+                               fax_program = lexrc.GetString();
+                       break;
+               case RC_PHONEBOOK:
+                       if (lexrc.next()) {
+                               LString s = lexrc.GetString();
+                               if (AbsolutePath(s))
+                                       phone_book = s;
+                               else
+                                       phone_book = user_lyxdir + s;
+                       }
+                       break;
+               case RC_ASCIIROFF_COMMAND:
+                       if (lexrc.next())
+                            ascii_roff_command = lexrc.GetString();
+                       break;
+               case RC_ASCII_LINELEN:
+                       if (lexrc.next())
+                            ascii_linelen = lexrc.GetInteger();
+                       break;
+               // Spellchecker settings:
+               case RC_SPELL_COMMAND:
+                       if (lexrc.next())
+                               isp_command = lexrc.GetString();
+                       break;
+               case RC_ACCEPT_COMPOUND:
+                       if (lexrc.next())
+                               isp_accept_compound = lexrc.GetBool();
+                       break;
+               case RC_USE_INP_ENC:
+                       if (lexrc.next())
+                               isp_use_input_encoding = lexrc.GetBool();
+                       break;
+               case RC_USE_ALT_LANG:
+                       if (lexrc.next())
+                               isp_use_alt_lang = lexrc.GetBool();
+                       break;
+               case RC_USE_PERS_DICT:
+                       if (lexrc.next())
+                               isp_use_pers_dict = lexrc.GetBool();
+                       break;
+               case RC_USE_ESC_CHARS:
+                       if (lexrc.next())
+                               isp_use_esc_chars = lexrc.GetBool();
+                       break;
+               case RC_ALT_LANG:
+                       if (lexrc.next())
+                               isp_alt_lang = lexrc.GetString();
+                       break;
+               case RC_PERS_DICT:
+                       if (lexrc.next())
+                               isp_pers_dict = lexrc.GetString();
+                       break;
+               case RC_ESC_CHARS:
+                       if (lexrc.next())
+                               isp_esc_chars = lexrc.GetString();
+                       break;
+
+               default:
+                       lexrc.printError("Unknown tag `$$Token'");
+                       break;
+               }
+       }
+
+       return 0;
+}
+
+
+void LyXRC::Print()
+{
+       lyxerr.print("The current internal LyXRC:");
+}
+
+
+/// define the default key bindings for LyX.
+void LyXRC::defaultKeyBindings()
+{
+       bindKey("Right",   LFUN_RIGHT);
+       bindKey("Left",    LFUN_LEFT);
+       bindKey("Up",      LFUN_UP);
+       bindKey("Down",    LFUN_DOWN);
+
+       bindKey("Tab",  LFUN_TAB);
+
+       bindKey("Home",    LFUN_HOME);
+       bindKey("End",     LFUN_END);
+       bindKey("Prior",   LFUN_PRIOR);
+       bindKey("Next",    LFUN_NEXT);
+
+       bindKey("Return",  LFUN_BREAKPARAGRAPH);
+       bindKey("~C-~S-~M-nobreakspace", LFUN_PROTECTEDSPACE);
+
+       bindKey("Delete",  LFUN_DELETE);
+       bindKey("BackSpace",    LFUN_BACKSPACE);
+       // bindKeyings for transparent handling of deadkeys
+       // The keysyms are gotten from XFree86 X11R6
+       bindKey("~C-~S-~M-dead_acute",           LFUN_ACUTE);
+       bindKey("~C-~S-~M-dead_breve",           LFUN_BREVE);
+       bindKey("~C-~S-~M-dead_caron",           LFUN_CARON);
+       bindKey("~C-~S-~M-dead_cedilla",         LFUN_CEDILLA);
+       bindKey("~C-~S-~M-dead_abovering",          LFUN_CIRCLE);
+       bindKey("~C-~S-~M-dead_circumflex",      LFUN_CIRCUMFLEX);
+       bindKey("~C-~S-~M-dead_abovedot",             LFUN_DOT);
+       bindKey("~C-~S-~M-dead_grave",           LFUN_GRAVE);
+       bindKey("~C-~S-~M-dead_doubleacute",     LFUN_HUNG_UMLAUT);
+       bindKey("~C-~S-~M-dead_macron",          LFUN_MACRON);
+       // nothing with this name
+       // bindKey("~C-~S-~M-dead_special_caron",   LFUN_SPECIAL_CARON);
+       bindKey("~C-~S-~M-dead_tilde",           LFUN_TILDE);
+       bindKey("~C-~S-~M-dead_diaeresis",       LFUN_UMLAUT);
+       // nothing with this name either...
+       //bindKey("~C-~S-~M-dead_underbar",        LFUN_UNDERBAR);
+       bindKey("~C-~S-~M-dead_belowdot",        LFUN_UNDERDOT);
+       bindKey("~C-~S-~M-dead_tie",             LFUN_TIE);
+       bindKey("~C-~S-~M-dead_ogonek",           LFUN_OGONEK);
+
+       // bindings to utilize the use of the numeric keypad
+       // e.g. Num Lock set
+       bindKey("KP_0",        LFUN_SELFINSERT);
+       bindKey("KP_Decimal",  LFUN_SELFINSERT);
+       bindKey("KP_Enter",    LFUN_SELFINSERT);
+       bindKey("KP_1",        LFUN_SELFINSERT);
+       bindKey("KP_2",        LFUN_SELFINSERT);
+       bindKey("KP_3",        LFUN_SELFINSERT);
+       bindKey("KP_4",        LFUN_SELFINSERT);
+       bindKey("KP_5",        LFUN_SELFINSERT);
+       bindKey("KP_6",        LFUN_SELFINSERT);
+       bindKey("KP_Add",      LFUN_SELFINSERT);
+       bindKey("KP_7",        LFUN_SELFINSERT);
+       bindKey("KP_8",        LFUN_SELFINSERT);
+       bindKey("KP_9",        LFUN_SELFINSERT);
+       bindKey("KP_Divide",   LFUN_SELFINSERT);
+       bindKey("KP_Multiply", LFUN_SELFINSERT);
+       bindKey("KP_Subtract", LFUN_SELFINSERT);
+    
+       /* Most self-insert keys are handled in the 'default:' section of
+        * WorkAreaKeyPress - so we don't have to define them all.
+        * However keys explicit decleared as self-insert are
+        * handled seperatly (LFUN_SELFINSERT.) Lgb. */
+
+        bindKey("C-Tab",  LFUN_TABINSERT);  // ale970515
+}
diff --git a/src/lyxrc.h b/src/lyxrc.h
new file mode 100644 (file)
index 0000000..8e1f5f1
--- /dev/null
@@ -0,0 +1,189 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 1996 Matthias Ettrich
+ *           and the LyX Team.
+ *
+ *======================================================*/
+
+#ifndef _LYXRC_H
+#define _LYXRC_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "toolbar.h"
+
+/// This contains the runtime configuration of LyX
+class LyXRC {
+public:
+       ///
+       LyXRC();
+       ///
+       ~LyXRC();
+       ///
+       int Read (LString const & filename);
+       ///
+        void Print();
+       /// Is a bind file already (or currently) read?
+       bool hasBindFile;
+       ///
+       int ReadBindFile(LString name = "cua");
+       ///
+       Toolbar toolbar;
+       ///
+       LString printer;
+       ///
+       LString print_command;
+       ///
+       LString print_evenpage_flag;
+       ///
+       LString print_oddpage_flag;
+       ///
+       LString print_pagerange_flag;
+       ///
+       LString print_copies_flag;
+       ///
+       LString print_collcopies_flag;
+       ///
+       LString print_reverse_flag;
+       ///
+       LString print_landscape_flag;
+       ///
+       LString print_to_printer;
+       ///
+       bool print_adapt_output;
+       ///
+       LString print_to_file;
+       ///
+       LString print_file_extension;
+       ///
+       LString print_extra_options;
+       ///
+       LString print_spool_command;
+        ///
+       LString print_spool_printerprefix;
+       ///
+       LString print_paper_flag;
+       ///
+       LString print_paper_dimension_flag;
+       ///
+        LString custom_export_command;
+       ///
+       LString custom_export_format;
+       /// program for running latex
+       LString latex_command;
+        /// program for performing literate programming
+        LString literate_command;
+        LString literate_extension;
+        LString literate_error_filter;
+        /// program for compiling
+        LString build_command;
+        LString build_error_filter;
+       /// program for running relyx
+       LString relyx_command;
+       /// postscript interpreter (in general "gs", if it is installed)
+       LString ps_command;
+       /// program for viewing postscript output (default "ghostview -swap")
+       LString view_ps_command;
+       /// program for viewing postscript pictures (default "ghostview")
+       LString view_pspic_command;
+       /// program for viewing dvi output (default "xdvi")
+       LString view_dvi_command;
+        /// default paper size for local xdvi/dvips/ghostview/whatever
+        LYX_PAPER_SIZE default_papersize;
+       /// command to run chktex incl. options
+       LString chktex_command;
+       ///
+       LString sgml_extra_options;
+       ///
+       LString document_path;
+       ///
+       LString template_path;
+       ///
+       LString tempdir_path;
+       ///
+       bool use_tempdir;
+       ///
+       bool auto_region_delete;
+       /// flag telling whether lastfiles should be checked for existance
+       bool check_lastfiles;
+       /// filename for lastfiles file
+       LString lastfiles;
+       /// maximal number of lastfiles
+       unsigned int num_lastfiles;
+       /// Zoom factor for screen fonts
+       unsigned int zoom;
+       /// Screen font sizes in points for each font size
+       float font_sizes[10];
+       /// Allow the use of scalable fonts? Default is yes.
+       bool use_scalable_fonts;
+       /// DPI of monitor
+       float dpi;
+       ///
+       LString fontenc;
+       ///
+       LString roman_font_name;
+       ///
+       LString sans_font_name;
+       ///
+       LString typewriter_font_name;
+       ///
+       LString menu_font_name;
+       ///
+       LString popup_font_name;
+       ///
+       LString font_norm;
+       ///
+       unsigned int autosave;
+       ///
+       LString fax_command;
+       ///
+       LString phone_book;
+       ///
+       LString fax_program;
+       ///
+       LString ascii_roff_command;
+       ///
+       unsigned int ascii_linelen;
+       /// Ispell command
+       LString isp_command;
+       /// Accept compound words in spellchecker?
+       bool isp_accept_compound;
+       /// Pass input encoding switch to ispell?
+       bool isp_use_input_encoding;
+       /// Use alternate language?
+       bool isp_use_alt_lang;
+       /// Use personal dictionary?
+       bool isp_use_pers_dict;
+       /// Use escape chars?
+       bool isp_use_esc_chars;
+       /// Alternate language for ispell
+       LString isp_alt_lang;
+       /// Alternate personal dictionary file for ispell
+       LString isp_pers_dict;
+       /// Escape characters
+       LString isp_esc_chars;
+       ///
+       bool use_kbmap;
+       /// Ask for confirmation of exit when there are unsaved documents?
+       bool exit_confirmation;
+       /// Should we display short-cut information in the minibuffer?
+       bool display_shortcuts;
+       ///
+       LString primary_kbmap;
+       ///
+       LString secondary_kbmap;
+       ///
+       LString lyxpipes;
+
+private:
+       ///
+       void defaultKeyBindings();
+};
+
+#endif
diff --git a/src/lyxrow.h b/src/lyxrow.h
new file mode 100644 (file)
index 0000000..64089fc
--- /dev/null
@@ -0,0 +1,41 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+
+#ifndef _LYXROW_H
+#define _LYXROW_H
+
+//#include "lyxparagraph.h"
+
+class LyXParagraph;
+
+///
+struct Row {
+       ///
+       LyXParagraph *par;
+       ///
+       int pos;
+       ///
+       unsigned short  baseline;
+       ///
+       /** what is missing to a full row can be negative.
+         Needed for hfills, flushright, block etc. */
+       int fill;
+       ///
+       unsigned short  height;
+       ///
+       unsigned short ascent_of_text;
+       
+       ///
+       Row* next;
+       ///
+       Row* previous;
+};
+
+#endif
diff --git a/src/lyxscreen.h b/src/lyxscreen.h
new file mode 100644 (file)
index 0000000..826b7a2
--- /dev/null
@@ -0,0 +1,289 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team
+ *
+ *======================================================*/
+#ifndef _LYXSCREEN_H
+#define _LYXSCREEN_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+#include <X11/Xlib.h>
+#include "lyxdraw.h"
+
+class LyXText;
+struct Row;
+typedef unsigned short Dimension;
+
+/** The class LyXScreen is used for the main Textbody.
+    Concretely, the screen is held in a pixmap.  This pixmap is kept up to
+    date and used to optimize drawing on the screen.
+    This class also handles the drawing of the cursor and partly the selection.
+ */
+class LyXScreen {
+public:
+       ///
+       LyXScreen(Window window,
+                 Dimension width, 
+                 Dimension height,
+                 Dimension offset_x,
+                 Dimension offset_y,
+                 LyXText *text_ptr);
+       ///
+       ~LyXScreen();
+
+       /** Return the forground pixmap. This function is a _hack_,
+         we should be rid of it as soon as possible. But to do that
+         a lot in the mathcode and the figinset has to be rewritten.
+         Tasks for 0.13. */
+       Pixmap getForeground() { return foreground; };
+       
+       /** Draws the screen form textposition y. Uses as much of
+         the already printed pixmap as possible */
+       void Draw(long y );
+
+       /// Redraws the screen, without using existing pixmap
+       void Redraw();
+   
+       /// Returns a new top so that the cursor is visible
+       long TopCursorVisible();
+       /// Redraws the screen such that the cursor is visible
+       int FitCursor();
+       ///
+       void ShowCursor();
+       ///
+       void HideCursor();
+       ///
+       void CursorToggle();
+       ///
+       void ShowManualCursor(long x, long y, int asc, int desc);
+       ///
+       void HideManualCursor(long x, long y, int asc, int desc);
+       /// returns 1 if first has changed, otherwise 0
+       int  FitManualCursor(long, long, int, int);
+       ///
+       void ToggleSelection(bool = true);
+       ///
+       void ToggleToggle();
+       
+       /** Updates part of the screen. If text->status is
+         LyXText::NEED_MORE_REFRESH, we update from the
+         point of change and to the end of the screen.
+         If text->status is LyXText::NEED_VERY_LITTLE_REFRESH,
+         we only update the current row. */
+       void Update();
+
+       /** Updates part of the screen. Updates till row with cursor,
+         or only current row */
+       void SmallUpdate();
+
+       /** Functions for drawing into the LyXScreen. The number of
+         drawing functions should be minimized, now there
+         is too many. And also there is mixed X and XForms drawing
+         functions called. Not good. */
+       void drawPoint(GC gc, int x, int y);
+       ///
+       void drawLine(gc_type t, int baseline, int x, int length);
+       ///
+       void drawLine(GC gc, int a, int b, int c, int d);
+       ///
+       void drawLines(GC gc, XPoint *p, int np);
+       ///
+       void drawVerticalLine(gc_type t, int x, int y1, int y2);
+       ///
+       void drawOnOffLine(int baseline, int x, int length);
+       ///
+       void drawThickLine(int baseline, int x, int length);
+       ///
+       void drawTableLine(int baseline, int x, int length, bool on_off);
+       ///
+       void drawVerticalTableLine(int x, int y1, int y2, bool on_off);
+       ///
+       void drawVerticalOnOffLine(int x, int y1, int y2);
+       ///
+       void drawArc(GC gc, int x, int y,
+                    unsigned int w, unsigned int h,
+                    int a1, int a2);
+       ///
+       void drawSegments(GC gc, XSegment *s, int ns);
+       ///
+       void fillRectangle(gc_type t, int, int, int, int);
+       ///
+       void drawRectangle(gc_type t, int x, int y, int width, int height);
+       ///
+       void drawFrame(int ft, int x, int y, int w, int h,
+                      FL_COLOR col, int b); 
+       ///
+       int drawText(LyXFont const &font, char const*,
+                     int n, int baseline, int x);
+       ///
+       int drawString(LyXFont const &font, LString const &str,
+                       int baseline, int x);
+               
+       /// first visible pixel-row
+       long first;
+
+       ///
+       bool cursor_visible;
+private:
+       /// Copies specified area of pixmap to screen
+       void expose(int x, int y, int exp_width, int exp_height); 
+
+       /// y1 and y2 are coordinates of the screen
+       void DrawFromTo(int y1, int y2);
+   
+       /// y is a coordinate of the text
+       void DrawOneRow(Row* row, long &y_text);
+
+       ///
+       LyXText *text;
+
+       ///
+       Pixmap foreground;
+       ///
+       Pixmap cursor_pixmap;
+       ///
+       int cursor_pixmap_x;
+       ///
+       int cursor_pixmap_y;
+       ///
+       int cursor_pixmap_w;
+       ///
+       int cursor_pixmap_h;
+       ///
+       Window _window;
+        ///
+       Dimension _width;
+       ///
+       Dimension _height;
+        ///
+       Dimension _offset_x;
+       ///
+       Dimension _offset_y;
+       ///
+       long screen_refresh_y;
+       ///
+       Row *screen_refresh_row;
+       ///
+       friend class InsetFormula;  
+};
+
+// Some of the easy to inline draw methods:
+
+inline void LyXScreen::drawPoint(GC gc, int x, int y)
+{
+       XDrawPoint(fl_display, foreground, gc,
+                  x, y);
+}
+
+
+inline void LyXScreen::drawLine(GC gc, int a, int b, int c, int d)
+{
+       XDrawLine(fl_display, foreground, gc, a, b, c, d);
+}
+
+
+inline void LyXScreen::drawLine(gc_type t, int baseline, int x, int length)
+{
+       drawLine(getGC(t), x, baseline, x + length, baseline);
+}
+
+
+inline void LyXScreen::drawLines(GC gc, XPoint *p, int np)
+{
+       XDrawLines(fl_display, foreground, gc, p, np, CoordModeOrigin);
+}
+
+
+inline void LyXScreen::drawVerticalLine(gc_type t, int x, int y1, int y2)
+{
+       drawLine(getGC(t),
+                x,
+                y1,
+                x,
+                y2);
+}
+
+
+inline void LyXScreen::drawOnOffLine(int baseline, int x, int length)
+{
+       drawLine(getGC(gc_on_off_line),
+                x,
+                baseline,
+                x + length,
+                baseline);
+}
+
+       
+inline void LyXScreen::drawThickLine(int baseline, int x, int length)
+{
+       drawLine(getGC(gc_thick_line),
+                x,
+                baseline,
+                x + length,
+                baseline);
+}
+
+
+inline void LyXScreen::drawVerticalOnOffLine(int x, int y1, int y2)
+{
+       drawLine(getGC(gc_fill),
+                x,
+                y1,
+                x,
+                y2);
+}      
+
+
+inline void LyXScreen::drawArc(GC gc, int x, int y,
+                       unsigned int w, unsigned int h,
+                       int a1, int a2)
+{
+       XDrawArc(fl_display, foreground, gc,
+                x, y,
+                w, h, a1, a2);
+}
+
+
+inline void LyXScreen::drawSegments(GC gc, XSegment *s, int ns)
+{
+       XDrawSegments(fl_display, foreground, gc, s, ns);
+}
+
+
+inline void LyXScreen::fillRectangle(gc_type t, int a, int b, int c, int d)
+{
+       XFillRectangle(fl_display, foreground, getGC(t),
+                      a, b, c, d);
+}
+
+
+inline void LyXScreen::drawRectangle(gc_type t, int x, int y, int width, int height)
+{
+       XDrawRectangle(fl_display, foreground, getGC(t),
+                      x, y, width, height);
+}
+
+
+inline int LyXScreen::drawText(LyXFont const &font, char const*fs,
+                        int n, int baseline, int x)
+{
+       return font.drawText(fs, n, foreground, baseline, x);
+}
+
+
+inline int LyXScreen::drawString(LyXFont const &font, LString const &str,
+                          int baseline, int x)
+{
+       return font.drawString(str, foreground, baseline, x);
+}
+
+#endif
diff --git a/src/lyxserver.C b/src/lyxserver.C
new file mode 100644 (file)
index 0000000..e5cda8f
--- /dev/null
@@ -0,0 +1,549 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+/**
+  Docu   : To use the lyxserver define the name of the pipe in your
+           lyxrc:
+           \serverpipe "/home/myhome/.lyxpipe"
+           Then use .lyxpipe.in and .lyxpipe.out to communicate to LyX.
+           Each message consists of a single line in ASCII. Input lines
+           (client -> LyX) have the following format:
+            "LYXCMD:<clientname>:<functionname>:<argument>"
+           Answers from LyX look like this:
+           "INFO:<clientname>:<functionname>:<data>"
+ [asierra970531] Or like this in case of error:
+           "ERROR:<clientname>:<functionname>:<error message>"
+           where <clientname> and <functionname> are just echoed.
+           If LyX notifies about a user defined extension key-sequence,
+           the line looks like this:
+           "NOTIFY:<key-sequence>"
+ [asierra970531] New server-only messages to implement a simple protocol
+           "LYXSRV:<clientname>:<protocol message>"
+           where <protocol message> can be "hello" or "bye". If hello is
+           received LyX will inform the client that it's listening its
+           messages, and 'bye' will inform that lyx is closing.
+
+           See development/server_monitor.c for an example client.
+  Purpose: implement a client/server lib for LyX
+*/
+
+#include <config.h>
+
+#include <string.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include FORMS_H_LOCATION
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "lyxserver.h"
+#include "lyxfunc.h"
+#include "lyx_main.h"
+#include "error.h"
+
+#ifdef __EMX__
+#include <stdlib.h>
+#include <io.h>
+#define OS2EMX_PLAIN_CHAR
+#define INCL_DOSNMPIPES
+#define INCL_DOSERRORS
+#include <os2.h>
+#include "os2_errortable.h"
+#endif
+
+// provide an empty mkfifo() if we do not have one. This disables the
+// lyxserver. 
+#ifndef HAVE_MKFIFO
+int    mkfifo( char *__path, mode_t __mode ) {
+       return 0;
+}
+#endif
+
+
+//     $Id: lyxserver.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $ 
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: lyxserver.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+       
+/* === variables ========================================================= */
+
+extern LyXAction lyxaction;
+
+// LyXComm class
+ // Open pipes
+void LyXComm::openConnection() {
+       lyxerr.debug("LyXComm: Opening connection", Error::LYXSERVER);
+       
+       // If we are up, that's an error
+       if (ready) {
+               lyxerr.print("LyXComm: Already connected");
+               return;
+       }
+       // We assume that we don't make it
+       ready = false;
+       if (pipename.empty()) return;
+
+       // --- prepare input pipe ---------------------------------------
+       LString tmp = pipename + ".in";
+       
+#ifdef __EMX__
+       HPIPE fd;
+       APIRET rc;
+       int errnum;
+       // Try create one instance of named pipe with the mode O_RDONLY|O_NONBLOCK.
+       // The current emx implementation of access() won't work with pipes.
+       rc = DosCreateNPipe(tmp.c_str(), &fd, NP_ACCESS_INBOUND,
+               NP_NOWAIT|0x01, 0600, 0600, 0);
+       if (rc == ERROR_PIPE_BUSY) {
+#else
+       if (access(tmp.c_str(), F_OK) == 0) {
+#endif
+               lyxerr.print("LyXComm: Pipe " + tmp + " already exists.");
+               lyxerr.print("If no other LyX program is active, please delete"
+                            " the pipe by hand and try again.");
+               pipename = LString();
+               return;
+       }
+#ifndef __EMX__
+       if (mkfifo(tmp.c_str(), 0600) < 0) {
+               lyxerr.print("LyXComm: Could not create pipe " + tmp);
+               lyxerr.print(strerror(errno));
+               return;
+       };
+       infd = open(tmp.c_str(), O_RDONLY|O_NONBLOCK);
+#else
+       if (rc != NO_ERROR) {
+               errnum = TranslateOS2Error(rc);
+               lyxerr.print("LyXComm: Could not create pipe " + tmp);
+               lyxerr.print(strerror(errnum));
+               return;
+       };
+       // Listen to it.
+       rc = DosConnectNPipe(fd);
+       if (rc != NO_ERROR && rc != ERROR_PIPE_NOT_CONNECTED) {
+               errnum = TranslateOS2Error(rc);
+               lyxerr.print("LyXComm: Could not create pipe " + tmp);
+               lyxerr.print(strerror(errnum));
+               return;
+       };
+       // Imported handles can be used both with OS/2 APIs and emx
+       // library functions. 
+       infd = _imphandle(fd);
+#endif
+       if (infd < 0) {
+               lyxerr.print("LyXComm: Could not open pipe " + tmp);
+               lyxerr.print(strerror(errno));
+               return;
+       }
+       fl_add_io_callback(infd, FL_READ, callback, (void*)this);
+       // --- prepare output pipe ---------------------------------------
+       tmp = pipename + ".out";
+       
+#ifndef __EMX__       
+       if (access(tmp.c_str(), F_OK) == 0) {
+#else
+       rc = DosCreateNPipe(tmp.c_str(), &fd, NP_ACCESS_DUPLEX,
+               NP_NOWAIT|0x01, 0600, 0600, 0);
+
+       if (rc == ERROR_PIPE_BUSY) {
+#endif
+               lyxerr.print("LyXComm: Pipe " + tmp + " already exists.");
+               lyxerr.print("If no other LyX program is active, please delete"
+                            " the pipe by hand and try again.");
+               pipename = LString();
+               return;
+       }
+#ifndef __EMX__
+       if (mkfifo(tmp.c_str(), 0600) < 0) {
+               lyxerr.print("LyXComm: Could not create pipe " + tmp);
+               lyxerr.print(strerror(errno));
+               return;
+       };
+       if (access(tmp.c_str(), F_OK) != 0) {
+               lyxerr.print("LyXComm: Pipe " + tmp + " does not exist");
+               return;
+       }
+       outfd = open(tmp.c_str(), O_RDWR);
+#else
+       if (rc != NO_ERROR) {
+               errnum = TranslateOS2Error(rc);
+               lyxerr.print("LyXComm: Could not create pipe " + tmp);
+               lyxerr.print(strerror(errnum));
+               return;
+       }
+       rc = DosConnectNPipe(fd);
+       if (rc == ERROR_BAD_PIPE) {
+               lyxerr.print("LyXComm: Pipe " + tmp + " does not exist");
+               return;
+       }
+       if (rc != NO_ERROR && rc != ERROR_PIPE_NOT_CONNECTED) {
+               errnum = TranslateOS2Error(rc);
+               lyxerr.print("LyXComm: Could not create pipe " + tmp);
+               lyxerr.print(strerror(errnum));
+               return;
+       }
+       outfd = _imphandle(fd);
+#endif
+       if (outfd < 0) {
+               lyxerr.print("LyXComm: Could not open pipe " + tmp);
+               lyxerr.print(strerror(errno));
+               return;
+       }
+       if (fcntl(outfd, F_SETFL, O_NONBLOCK) < 0) {
+               lyxerr.print("LyXComm: Could not set flags on pipe " + tmp);
+               lyxerr.print(strerror(errno));
+               return;
+       };
+       // We made it!
+       ready = true;
+       lyxerr.debug("LyXComm: Connection established", Error::LYXSERVER);
+}
+/// Close pipes
+void LyXComm::closeConnection() {
+#ifdef __EMX__
+       APIRET rc;
+       int errnum;
+#endif
+               lyxerr.debug("LyXComm: Closing connection", Error::LYXSERVER);
+
+       if (pipename.empty()) {
+               return;
+       }
+
+       if (!ready) {
+               lyxerr.print("LyXComm: Already disconnected");
+               return;
+       }
+       if(infd > -1) {
+               fl_remove_io_callback(infd, FL_READ, callback);
+               LString tmp = pipename + ".in";
+#ifdef __EMX__         // Notify the operating system.
+               rc = DosDisConnectNPipe(infd);
+               if (rc != NO_ERROR) {
+                       errnum = TranslateOS2Error(rc);
+                       lyxerr.print("LyXComm: Could not disconnect pipe " + tmp);
+                       lyxerr.print(strerror(errnum));
+                       return;
+               }
+#endif
+               if (close(infd) < 0) {
+                       lyxerr.print("LyXComm: Could not close pipe " + tmp);
+                       lyxerr.print(strerror(errno));
+               }
+#ifndef __EMX__                // OS/2 named pipes will be automatically removed.
+               if (unlink(tmp.c_str()) < 0){
+                       lyxerr.print("LyXComm: Could not remove pipe " + tmp);
+                       lyxerr.print(strerror(errno));
+               };
+#endif
+       }
+       if(outfd > -1) {
+               LString tmp = pipename + ".out";
+#ifdef __EMX__
+               rc = DosDisConnectNPipe(outfd);
+               if (rc != NO_ERROR) {
+                       errnum = TranslateOS2Error(rc);
+                       lyxerr.print("LyXComm: Could not disconnect pipe " + tmp);
+                       lyxerr.print(strerror(errnum));
+                       return;
+               }
+#endif
+               if (close(outfd) < 0) {
+                       lyxerr.print("LyXComm: Could not close pipe " + tmp);
+                       lyxerr.print(strerror(errno));
+               }
+#ifndef __EMX__
+               if (unlink(tmp.c_str()) < 0){
+                       lyxerr.print("LyXComm: Could not remove pipe " + tmp);
+                       lyxerr.print(strerror(errno));
+               };
+#endif
+       }
+       ready = false;
+}
+// Receives messages and sends then to client
+void LyXComm::callback(int fd, void *v)
+{
+       LyXComm * c = (LyXComm *) v;
+       if (lyxerr.debugging(Error::LYXSERVER)) {
+               lyxerr.print(LString("LyXComm: Receiving from fd ") + int(fd));
+       }
+        const int CMDBUFLEN = 100;
+       char charbuf[CMDBUFLEN];
+       LString cmd;
+// nb! make lsbuf a class-member for multiple sessions
+       static LString lsbuf;
+
+       errno = 0;
+       int status;
+       // the single = is intended here.
+       while((status = read(fd,charbuf,CMDBUFLEN-1)))
+       {// break and return in loop
+               if(status > 0) // got something
+               {
+                       charbuf[status]='\0'; // turn it into a c string
+                       lsbuf += charbuf;
+                       lsbuf.strip('\r');
+                       // commit any commands read
+                       while(lsbuf.charPos('\n') >= 0) // while still
+                                                       // commands
+                                                       // left 
+                       {
+                               // split() grabs the entire string if
+                               // the delim /wasn't/ found. ?:-P 
+                               lsbuf.split(cmd,'\n');
+                               lyxerr.debug(LString("LyXComm: status:") 
+                                            + status + ", lsbuf:" + lsbuf 
+                                            + ", cmd:" + cmd, 
+                                            Error::LYXSERVER);
+                               if(!cmd.empty())
+                                       c->clientcb(c->client, cmd); 
+                                       //\n or not \n?
+                       }
+               }
+               if(errno == EAGAIN)
+               {  // EAGAIN is not really an error , it means we're
+                  // only reading too fast for the writing process on
+                  // the other end of the pipe. 
+                       errno = 0;
+                       return; // up to libforms select-loop (*crunch*)
+               }
+               if(errno != 0 )
+               {
+                       lyxerr.print(LString("LyXComm: ") + strerror(errno));
+                       if(!lsbuf.empty())
+                       {
+                               lyxerr.print("LyxComm: truncated command: " 
+                                            + lsbuf);
+                               lsbuf.clean();
+                       }
+                       break; // reset connection
+               }
+       }
+       c->closeConnection();
+       c->openConnection();
+       errno=0;
+}
+void LyXComm::send(LString const & msg) {
+       if (msg.empty()) {
+               lyxerr.print("LyXComm: Request to send empty string. Ignoring.");
+               return;
+       }
+
+       if (lyxerr.debugging(Error::LYXSERVER)) {
+               lyxerr.print("LyXComm: Sending '" + msg + '\'');
+       }
+
+       if (pipename.empty()) return;
+
+       if (!ready) {
+               lyxerr.print("LyXComm: Pipes are closed. Could not send "+ msg);
+       } else if (write(outfd, msg.c_str(), msg.length()) < 0) {
+               lyxerr.print("LyXComm: Error sending message: " + msg);
+               lyxerr.print(strerror(errno));
+               lyxerr.print("LyXComm: Resetting connection");
+               closeConnection();
+               openConnection();
+       }
+#ifdef __EMX__
+       APIRET rc;
+       int errnum;
+       rc = DosResetBuffer(outfd);     // To avoid synchronization problems.
+       if (rc != NO_ERROR) {
+               errnum = TranslateOS2Error(rc);
+               lyxerr.print("LyXComm: Message could not be flushed: " +msg);
+               lyxerr.print(strerror(errnum));
+       }
+#endif
+}
+
+
+// LyXServer class
+
+LyXServer::~LyXServer()
+{
+       // say goodbye to clients so they stop sending messages
+       // modified june 1999 by stefano@zool.su.se to send as many bye
+       // messages as there are clients, each with client's name.
+       LString message;
+       for (int i=0; i<numclients; i++) {
+               message = "LYXSRV:" + clients[i] + ":bye\n";
+               pipes.send(message);
+       }
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+   Function  : ServerCallback
+    Called by : LyXComm
+    Purpose   : handle data gotten from communication
+\* ---F------------------------------------------------------------------- */
+
+void LyXServer::callback(LyXServer * serv, LString const & msg)
+{
+       lyxerr.debug("LyXServer: Received: '" + msg + '\'', Error::LYXSERVER);
+       char const *p = msg.c_str();
+       // --- parse the string --------------------------------------------
+       //
+       //  Format: LYXCMD:<client>:<func>:<argstring>\n
+       //
+       bool server_only = false;
+       while(*p) {
+               // --- 1. check 'header' ---
+               if (strncmp(p, "LYXSRV:", 7)==0) {
+                       server_only = true; 
+               } else if(0!=strncmp(p, "LYXCMD:", 7)) {
+                       lyxerr.print("LyXServer: Unknown request");
+                       return;
+               }
+               p += 7;
+               
+               // --- 2. for the moment ignore the client name ---
+               LString client;
+               while(*p && *p != ':')
+                       client += char(*p++);
+               if(*p == ':') p++;
+               if(!*p) return;
+               
+               // --- 3. get function name ---
+               LString cmd;
+               while(*p && *p != ':')
+                       cmd += char(*p++);
+               
+               // --- 4. parse the argument ---
+               LString arg;
+               if(!server_only && *p == ':' && *(++p)) {
+                       while(*p && *p != '\n')
+                               arg += char(*p++);
+                       if(*p) p++;
+               }
+               lyxerr.debug("LyXServer: Client: '" + client + "' Command: '" + cmd + "' Argument: '" + arg + '\'', Error::LYXSERVER);
+               
+               // --- lookup and exec the command ------------------
+               if (server_only) {
+                       LString buf;
+                       // return the greeting to inform the client that 
+                       // we are listening.
+                       if (cmd == "hello") {
+                               // One more client
+                               if(serv->numclients==MAX_CLIENTS){ //paranoid check
+                                       lyxerr.debug("LyXServer: too many clients...", Error::LYXSERVER);
+                                       return;
+                               }
+                               int i=0; //find place in clients[]
+                               while (!serv->clients[i].empty() 
+                                      && i<serv->numclients) 
+                                       i++;
+                               serv->clients[i] = client;
+                               serv->numclients++;
+                               buf = "LYXSRV:" + client + ":hello\n";
+                               lyxerr.debug("LyXServer: Greeting " + client, Error::LYXSERVER);
+                               serv->pipes.send(buf);
+                       } else if (cmd == "bye") {
+                               // If clients==0 maybe we should reset the pipes
+                               // to prevent fake callbacks
+                               int i; //look if client is registered
+                               for (i=0; i<serv->numclients; i++) {
+                                       if (serv->clients[i] == client) break;
+                               }
+                               if (i<serv->numclients) {
+                                       serv->numclients--;
+                                       serv->clients[i].clean();
+                                       lyxerr.debug("LyXServer: Client " + client + " said goodbye",
+                                               Error::LYXSERVER);
+                               } else {
+                                       lyxerr.debug("LyXServer: ignoring bye messge from unregistered client" +
+                                               client + "\n", Error::LYXSERVER);
+                               }
+                       } else {
+                               lyxerr.print("LyXServer: Undefined server command " + cmd + ".");
+                       }
+                       return;
+               }
+               if (!cmd.empty()) {
+                       // which lyxfunc should we let it connect to?
+                       // The correct solution would be to have a
+                       // specialized (non-gui) BufferView. But how do
+                       // we do it now? Probably we should just let it
+                       // connect to the lyxfunc in the single LyXView we
+                       // support currently. (Lgb)
+
+                       int action = lyxaction.LookupFunc(cmd.c_str());
+                       //int action = -1;
+                       LString rval, buf;
+                   
+                       if (action>=0) {
+                               rval = serv->func->Dispatch(action, arg.c_str());
+                       } else {
+                               rval = "Unknown command";
+                       }
+
+      //modified june 1999 stefano@zool.su.se:
+                       //all commands produce an INFO or ERROR message
+                       //in the output pipe, even if they do not return
+                       //anything. See chapter 4 of Customization doc.
+                       if (action<0 || serv->func->errorStat())
+                               buf = "ERROR:";
+                       else
+                               buf = "INFO:";
+                       buf += LString(client) + ":" + cmd      + ":" + rval + "\n";
+                       serv->pipes.send(buf);
+
+                       // !!! we don't do any error checking -
+                       //  if the client won't listen, the
+                       //  message is lost and others too
+                       //  maybe; so the client should empty
+                       //  the outpipe before issuing a request.
+               
+                       // not found
+               }
+       }  /* while *p */
+}
+
+
+/* ---F+------------------------------------------------------------------ *\
+   Function  : LyxNotifyClient
+   Called by : WorkAreaKeyPress
+   Purpose   : send a notify messge to a client
+   Parameters: s - string to send
+   Returns   : nothing
+   \* ---F------------------------------------------------------------------- */
+
+void LyXServer::notifyClient(LString const & s)
+{
+       LString buf = LString("NOTIFY:") + s + "\n";
+       pipes.send(buf);
+}
+
diff --git a/src/lyxserver.h b/src/lyxserver.h
new file mode 100644 (file)
index 0000000..0dee84f
--- /dev/null
@@ -0,0 +1,122 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#ifndef _LYXSERVER_H_
+#define _LYXSERVER_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+class LyXFunc;
+class LyXServer;
+
+/* --- i/o pipes --------------------------------------------------------- */
+
+/** This class managed the pipes used for communicating with clients.
+ Usage: Initialize with pipe-filename-base, client class to receive
+ messages, and callback-function that will be called with the messages.
+ When you want to send, use "send()".
+ This class encapsulates all the dirty communication and thus provides
+ a clean LString interface.
+ */
+class LyXComm
+{
+public:
+       /** When we receive a message, we send it to a client.
+         This is one of the small things that would have been a lot
+         cleaner with a Signal/Slot thing.
+        */
+       typedef void (*ClientCallbackfct)(LyXServer *, LString const &);
+
+       /// Construct with pipe-basename and callback to receive messages
+       LyXComm(LString const &pip, LyXServer * cli, ClientCallbackfct ccb = 0)
+               :pipename(pip), client(cli), clientcb(ccb)
+       {
+               ready = false;
+               openConnection();
+       }
+
+       ///
+       ~LyXComm() {
+               closeConnection();
+       }
+
+       /// Send message
+       void send(LString const &);
+private:
+       /// Open pipes
+       void openConnection();
+       
+       /// Close pipes
+       void closeConnection();
+
+       /// We receive messages via XForms through this callback
+       static void callback(int fd, void *v);
+
+       /// This is -1 if not open
+       int infd;
+
+       /// This is -1 if not open
+       int outfd;
+
+       /// Are we up and running?
+       bool ready;
+
+       /// Base of pipename including path
+       LString pipename;
+
+       /// The client
+       LyXServer * client;
+
+       /// The client callback function
+       ClientCallbackfct clientcb;
+};
+
+
+/* --- prototypes -------------------------------------------------------- */
+class LyXServer
+{
+public:
+       // FIXME IN 0.13
+       // Hack! This should be changed in 0.13
+
+       /// The lyx server should not take an argument "LyXFunc" but this is
+       // how it will be done for 0.12. In 0.13 we must write a non-gui
+       // bufferview.
+        // IMO lyxserver is atypical, and for the moment the only one, non-gui
+        // bufferview. We just have to find a way to handle situations like if
+        // lyxserver is using a buffer that is being edited with a bufferview.
+        // With a common buffer list this is not a problem, maybe. (Alejandro)
+       LyXServer(LyXFunc *f, LString const &pip)
+               : numclients(0), func(f), pipes(pip, (this), callback)
+       { }
+        /// 
+       ~LyXServer();
+       ///
+       void notifyClient(LString const &);
+private:
+       ///
+       static void callback(LyXServer *, LString const & msg);
+       /// Names and number of current clients
+       enum { MAX_CLIENTS = 10 };
+       LString clients[MAX_CLIENTS];
+       int numclients;
+       ///
+       LyXFunc *func;
+       ///
+       LyXComm pipes;
+};
+
+#endif /* _LYXSERVER_H_ */
+
+/* === End of File: lyxserver.h ========================================== */
diff --git a/src/lyxsum.C b/src/lyxsum.C
new file mode 100644 (file)
index 0000000..644791b
--- /dev/null
@@ -0,0 +1,123 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor        
+ *
+ *    The function lyxsum is taken from GNU textutill-1.22
+ *    and is there part of the program chsum. The chsum program
+ *    is written by Q. Frank Xia, qx@math.columbia.edu.
+ *
+ *    Modified for use in LyX by Lars G. Bjønnes.
+ *
+ *======================================================
+ */
+
+
+#include <config.h>
+#include <stdio.h>
+
+/* Number of bytes to read at once.  */
+#define BUFLEN (1 << 16)
+
+// DO _NOT_ CHANGE _ANYTHING_ IN THIS TABLE
+static unsigned long const crctab[256] =
+{
+       0x0,
+       0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B,
+       0x1A864DB2, 0x1E475005, 0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6,
+       0x2B4BCB61, 0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD,
+       0x4C11DB70, 0x48D0C6C7, 0x4593E01E, 0x4152FDA9, 0x5F15ADAC,
+       0x5BD4B01B, 0x569796C2, 0x52568B75, 0x6A1936C8, 0x6ED82B7F,
+       0x639B0DA6, 0x675A1011, 0x791D4014, 0x7DDC5DA3, 0x709F7B7A,
+       0x745E66CD, 0x9823B6E0, 0x9CE2AB57, 0x91A18D8E, 0x95609039,
+       0x8B27C03C, 0x8FE6DD8B, 0x82A5FB52, 0x8664E6E5, 0xBE2B5B58,
+       0xBAEA46EF, 0xB7A96036, 0xB3687D81, 0xAD2F2D84, 0xA9EE3033,
+       0xA4AD16EA, 0xA06C0B5D, 0xD4326D90, 0xD0F37027, 0xDDB056FE,
+       0xD9714B49, 0xC7361B4C, 0xC3F706FB, 0xCEB42022, 0xCA753D95,
+       0xF23A8028, 0xF6FB9D9F, 0xFBB8BB46, 0xFF79A6F1, 0xE13EF6F4,
+       0xE5FFEB43, 0xE8BCCD9A, 0xEC7DD02D, 0x34867077, 0x30476DC0,
+       0x3D044B19, 0x39C556AE, 0x278206AB, 0x23431B1C, 0x2E003DC5,
+       0x2AC12072, 0x128E9DCF, 0x164F8078, 0x1B0CA6A1, 0x1FCDBB16,
+       0x018AEB13, 0x054BF6A4, 0x0808D07D, 0x0CC9CDCA, 0x7897AB07,
+       0x7C56B6B0, 0x71159069, 0x75D48DDE, 0x6B93DDDB, 0x6F52C06C,
+       0x6211E6B5, 0x66D0FB02, 0x5E9F46BF, 0x5A5E5B08, 0x571D7DD1,
+       0x53DC6066, 0x4D9B3063, 0x495A2DD4, 0x44190B0D, 0x40D816BA,
+       0xACA5C697, 0xA864DB20, 0xA527FDF9, 0xA1E6E04E, 0xBFA1B04B,
+       0xBB60ADFC, 0xB6238B25, 0xB2E29692, 0x8AAD2B2F, 0x8E6C3698,
+       0x832F1041, 0x87EE0DF6, 0x99A95DF3, 0x9D684044, 0x902B669D,
+       0x94EA7B2A, 0xE0B41DE7, 0xE4750050, 0xE9362689, 0xEDF73B3E,
+       0xF3B06B3B, 0xF771768C, 0xFA325055, 0xFEF34DE2, 0xC6BCF05F,
+       0xC27DEDE8, 0xCF3ECB31, 0xCBFFD686, 0xD5B88683, 0xD1799B34,
+       0xDC3ABDED, 0xD8FBA05A, 0x690CE0EE, 0x6DCDFD59, 0x608EDB80,
+       0x644FC637, 0x7A089632, 0x7EC98B85, 0x738AAD5C, 0x774BB0EB,
+       0x4F040D56, 0x4BC510E1, 0x46863638, 0x42472B8F, 0x5C007B8A,
+       0x58C1663D, 0x558240E4, 0x51435D53, 0x251D3B9E, 0x21DC2629,
+       0x2C9F00F0, 0x285E1D47, 0x36194D42, 0x32D850F5, 0x3F9B762C,
+       0x3B5A6B9B, 0x0315D626, 0x07D4CB91, 0x0A97ED48, 0x0E56F0FF,
+       0x1011A0FA, 0x14D0BD4D, 0x19939B94, 0x1D528623, 0xF12F560E,
+       0xF5EE4BB9, 0xF8AD6D60, 0xFC6C70D7, 0xE22B20D2, 0xE6EA3D65,
+       0xEBA91BBC, 0xEF68060B, 0xD727BBB6, 0xD3E6A601, 0xDEA580D8,
+       0xDA649D6F, 0xC423CD6A, 0xC0E2D0DD, 0xCDA1F604, 0xC960EBB3,
+       0xBD3E8D7E, 0xB9FF90C9, 0xB4BCB610, 0xB07DABA7, 0xAE3AFBA2,
+       0xAAFBE615, 0xA7B8C0CC, 0xA379DD7B, 0x9B3660C6, 0x9FF77D71,
+       0x92B45BA8, 0x9675461F, 0x8832161A, 0x8CF30BAD, 0x81B02D74,
+       0x857130C3, 0x5D8A9099, 0x594B8D2E, 0x5408ABF7, 0x50C9B640,
+       0x4E8EE645, 0x4A4FFBF2, 0x470CDD2B, 0x43CDC09C, 0x7B827D21,
+       0x7F436096, 0x7200464F, 0x76C15BF8, 0x68860BFD, 0x6C47164A,
+       0x61043093, 0x65C52D24, 0x119B4BE9, 0x155A565E, 0x18197087,
+       0x1CD86D30, 0x029F3D35, 0x065E2082, 0x0B1D065B, 0x0FDC1BEC,
+       0x3793A651, 0x3352BBE6, 0x3E119D3F, 0x3AD08088, 0x2497D08D,
+       0x2056CD3A, 0x2D15EBE3, 0x29D4F654, 0xC5A92679, 0xC1683BCE,
+       0xCC2B1D17, 0xC8EA00A0, 0xD6AD50A5, 0xD26C4D12, 0xDF2F6BCB,
+       0xDBEE767C, 0xE3A1CBC1, 0xE760D676, 0xEA23F0AF, 0xEEE2ED18,
+       0xF0A5BD1D, 0xF464A0AA, 0xF9278673, 0xFDE69BC4, 0x89B8FD09,
+       0x8D79E0BE, 0x803AC667, 0x84FBDBD0, 0x9ABC8BD5, 0x9E7D9662,
+       0x933EB0BB, 0x97FFAD0C, 0xAFB010B1, 0xAB710D06, 0xA6322BDF,
+       0xA2F33668, 0xBCB4666D, 0xB8757BDA, 0xB5365D03, 0xB1F740B4
+};
+/* Calculate the checksum of file FILE.
+   Return crc if successful, 0 if an error occurs. */
+unsigned long
+lyxsum (char const*file)
+{
+       unsigned char buf[BUFLEN];
+       unsigned long crc = 0;
+       long length = 0;
+       long bytes_read;
+       register FILE *fp;
+       fp = fopen (file, "r");
+       if (fp == NULL) {
+               return 0;
+       }
+       while ((bytes_read = fread (buf, 1, BUFLEN, fp)) > 0) {
+               unsigned char *cp = buf;
+               
+               length += bytes_read;
+               while (bytes_read--)
+                       crc = (crc << 8) ^ crctab[((crc >> 24) ^ *(cp++)) & 0xFF];
+       }
+       if (ferror (fp)) {
+               fclose (fp);
+               return 0;
+       }
+       if (fclose (fp) == EOF) {
+               return 0;
+       }
+       bytes_read = length;
+       while (bytes_read > 0) {
+               crc = (crc << 8) ^ crctab[((crc >> 24) ^ bytes_read) & 0xFF];
+               bytes_read >>= 8;
+       }
+       crc = ~crc & 0xFFFFFFFF;
+       return crc;
+}
diff --git a/src/lyxtext.h b/src/lyxtext.h
new file mode 100644 (file)
index 0000000..1a052ea
--- /dev/null
@@ -0,0 +1,565 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+
+#ifndef _LYXTEXT_H
+#define _LYXTEXT_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "definitions.h"
+#include "layout.h"
+#include "lyxfont.h"
+#include "lyxrow.h"
+#include "undo.h"
+#include "lyxcursor.h"
+
+class Buffer;
+class BufferParams;
+class LyXScreen;
+
+/**
+  This class holds the mapping between buffer paragraphs and screen rows.
+  */
+class LyXText {
+public:
+       ///
+       enum text_status {
+               ///
+               UNCHANGED,
+               ///
+               NEED_LITTLE_REFRESH,
+               ///
+               NEED_MORE_REFRESH,
+               ///
+               NEED_VERY_LITTLE_REFRESH
+       };
+
+       /// points to Buffer.params
+       BufferParams *parameters;
+       /// points to Buffer
+       Buffer *params;
+       ///
+       int number_of_rows;
+       ///
+       long height;
+       /// the current font settings
+       LyXFont current_font;
+       /// the current font
+       LyXFont real_current_font;
+
+       /// Constructor
+       LyXText(int paperwidth, Buffer *);
+   
+       /// Destructor
+       ~LyXText();
+   
+       ///
+       LyXFont GetFont(LyXParagraph* par, int pos);
+       ///
+       void SetCharFont(LyXParagraph *par, int pos, LyXFont font);
+   
+       /// returns a pointer to the very first LyXParagraph
+       LyXParagraph *FirstParagraph();
+  
+       /// what you expect when pressing <enter> at cursor position
+       void BreakParagraph(char keep_layout = 0);
+
+       /** set layout over selection and make a total rebreak of
+         those paragraphs
+         */
+       void SetLayout(char layout);
+       
+       /// used in setlayout
+       void MakeFontEntriesLayoutSpecific(LyXParagraph *par);
+       
+       /** increment depth over selection and make a total rebreak of those 
+         paragraphs
+         */
+       void IncDepth();
+       
+       /** decrement depth over selection and make a total rebreak of those  
+         paragraphs */
+       void DecDepth();
+
+       /** Get the depth at current cursor position
+        */
+       int GetDepth() { return cursor.par->GetDepth(); }
+       
+       /** set font over selection and make a total rebreak of those
+         paragraphs.
+         toggleall defaults to false.
+         */
+       void SetFont(LyXFont font, bool toggleall=false);
+       
+       /** deletes and inserts again all paragaphs between the cursor
+         and the specified par .The Cursor is needed to set the refreshing
+         parameters. 
+         This function is needed after SetLayout and SetFont etc.
+         */
+       void RedoParagraphs(LyXCursor cursor, LyXParagraph *end_par);
+       ///
+       void RedoParagraph();
+       
+       ///
+       void ToggleFree(LyXFont font,bool toggleall=false);
+       
+       /** recalculates the heights of all previous rows of the
+           specified paragraph.  needed, if the last characters font
+           has changed.  
+           */
+       void RedoHeightOfParagraph(LyXCursor cursor);
+       
+       /** forces the redrawing of a paragraph. Needed when manipulating a 
+           right address box
+           */ 
+       void RedoDrawingOfParagraph(LyXCursor cursor);
+       
+       /** insert a character, moves all the following breaks in the 
+         same Paragraph one to the right and make a little rebreak
+         */
+       void InsertChar(char c);
+       ///
+       void InsertInset(Inset *inset);
+   
+       /// completes the insertion with a full rebreak
+       int FullRebreak();
+   
+       /// may be important for the menu
+       char* GetLayout(int row);
+       ///
+       LyXParagraph::footnote_flag GetFootnoteFlag(int row);
+       ///
+       Row* need_break_row;
+       ///
+       long refresh_y;
+       ///
+       int refresh_height;
+       ///
+       int refresh_width;
+       ///
+       int refresh_x;
+       ///
+       Row *refresh_row;
+       ///
+       int refresh_pos;
+       
+       /** wether the screen needs a refresh,
+          starting with refresh_y
+          */
+       text_status status;
+       
+       /** returns a pointer to the row near the specified y-coordinate
+         (relative to the whole text). y is set to the real beginning
+         of this row
+         */ 
+       Row* GetRowNearY(long &y);
+       
+       /** returns the column near the specified x-coordinate of the row 
+        x is set to the real beginning of this column
+        */ 
+       int GetColumnNearX(Row *row, int& x);
+       
+       /** returns a pointer to a specified row. y is set to the beginning
+        of the row
+        */
+       Row* GetRow(LyXParagraph *par, int pos, long &y);
+       
+       /** returns the height of a default row, needed  for scrollbar
+        */
+       int DefaultHeight();
+   
+       /** The cursor.
+         Later this variable has to be removed. There should be now internal
+         cursor in a text (and thus not in a buffer). By keeping this it is
+         (I think) impossible to have several views with the same buffer, but
+         the cursor placed at different places.
+         */
+       LyXCursor cursor;
+   
+       /* the selection cursor */
+       /// 
+       bool selection;
+       ///
+       bool mark_set;
+
+       ///
+       LyXCursor sel_cursor;
+       ///
+       LyXCursor sel_start_cursor;
+       ///
+       LyXCursor sel_end_cursor;
+       /// needed for the toggling
+       LyXCursor last_sel_cursor;
+       ///
+       LyXCursor toggle_cursor;
+       ///
+       LyXCursor toggle_end_cursor;
+   
+       /// need the selection cursor:
+       void SetSelection();
+       ///
+       void ClearSelection();
+
+       /// just selects the word the cursor is in
+       void SelectWord();
+
+       /** 'selects" the next word, where the cursor is not in 
+        and returns this word as string. THe cursor will be moved 
+        to the beginning of this word. 
+        With SelectSelectedWord can this be highlighted really
+        */ 
+       char* SelectNextWord(float &value);
+       ///
+       void SelectSelectedWord();
+       ///
+       void SetCursor(LyXParagraph *par, int pos);
+       ///
+       void SetCursorIntern(LyXParagraph *par, int pos);
+       ///
+       void SetCursorFromCoordinates(int x, long y);
+       ///
+       void CursorUp();
+       ///
+       void CursorDown();
+       ///
+       void CursorLeft();
+       ///
+       void CursorRight();
+       ///
+       void CursorLeftOneWord();
+       ///
+       void CursorRightOneWord();
+       ///
+       void CursorUpParagraph();
+       ///
+       void CursorDownParagraph();
+       ///
+       void CursorHome();
+       ///
+       void CursorEnd();
+       ///
+       void CursorTab();
+       ///
+       void CursorTop();
+       ///
+       void CursorBottom();
+       ///
+       void Delete();
+       ///
+       void Backspace();
+       ///
+       void DeleteWordForward();
+       ///
+       void DeleteWordBackward();
+       ///
+       void DeleteLineForward();
+       ///
+       int SelectWordWhenUnderCursor();
+       /// Change the case of the word at cursor position
+       /** action is 0 for lower case, 1 for capitalization and 2 for
+           uppercase. 
+        */
+       void ChangeWordCase(int action);
+
+       /** returns a printed row in a pixmap. The y value is needed to
+         decide, wether it is selected text or not. This is a strange
+         solution but faster.
+        */ 
+       void GetVisibleRow(LyXScreen &scr, int offset, 
+                          Row *row_ptr, long y);
+                                          
+       /* footnotes: */
+       ///
+       void ToggleFootnote();
+       ///
+       void OpenStuff();
+       ///
+       void OpenFootnotes();
+       ///
+       void OpenFootnote();
+       ///
+       void CloseFootnotes();
+       ///
+       void CloseFootnote();
+
+       /** turn the selection into a new environment. If there is no
+         selection, create an empty environment
+        */ 
+       void InsertFootnoteEnvironment(LyXParagraph::footnote_kind kind);
+       ///
+       void MeltFootnoteEnvironment();
+       ///
+       void CutSelection(bool = true);
+       ///
+       void CopySelection();
+       ///
+       void PasteSelection();
+       ///
+       void copyEnvironmentType();
+       ///
+       void pasteEnvironmentType();
+       ///
+       void InsertFootnote();
+       ///
+       void InsertMarginpar();
+       ///
+       void InsertFigure();
+       ///
+       void InsertTabular();
+
+       /** the DTP switches for paragraphs. LyX will store the top settings
+        always in the first physical paragraph, the bottom settings in the
+        last. When a paragraph is broken, the top settings rest, the bottom 
+        settings are given to the new one. So I can make shure, they do not
+        duplicate themself (and you cannnot make dirty things with them! )
+        */ 
+       void SetParagraph(bool line_top, bool line_bottom,
+                         bool pagebreak_top, bool pagebreak_bottom,
+                         VSpace space_top, VSpace space_bottom,
+                         char align, 
+                         LString labelwidthstring,
+                         bool noindent);
+        void SetParagraphExtraOpt(int type,
+                                  const char *width,
+                                  const char *widthp,
+                                  int alignment, bool hfill,
+                                  bool start_minipage);
+
+       /* these things are for search and replace */
+
+       /** returns true if the specified string is at the specified
+         position
+         */
+       bool IsStringInText(LyXParagraph *par, int pos, char const* string);
+
+       /** sets the selection over the number of characters of string,
+         no check!!
+         */
+       void SetSelectionOverString(char const* string);
+
+       /** simple replacing. The font of the first selected character
+         is used
+         */
+       void ReplaceSelectionWithString(char const* string);
+
+       /** if the string can be found: return true and set the cursor to
+         the new position */
+       bool SearchForward(char const* string);
+       bool SearchBackward(char const* string);
+       /// needed to insert the selection
+       void InsertStringA(char* string);
+       /// needed to insert the selection
+       void InsertStringB(char* string);
+   
+       /// usefull when texing from within LyX
+       bool GotoNextError();
+
+       /// just another feature :)
+       bool GotoNextNote();
+
+       /** needed to switch between different classes this works
+         for a list of paragraphs beginning with the specified par 
+         return value is the number of wrong conversions
+         */ 
+       int SwitchLayoutsBetweenClasses(char class1, char class2, LyXParagraph *par);
+
+       /* for the greater insets */
+  
+       /// returns 0 if inset wasn't found
+       int UpdateInset(Inset* inset);
+       ///
+       void CheckParagraph(LyXParagraph* par, int pos);
+
+       /* table stuff -- begin*/
+
+       /** all table features of the text-class are put together in
+         this function. Possible values of feature are defined in table.h
+         */
+       void TableFeatures(int feature,LString val);
+        ///
+       void TableFeatures(int feature);
+       ///
+       int NumberOfCell(LyXParagraph *par, int pos);
+
+       /** pos points at the beginning of the next cell (if there is one)
+        */
+       int WidthOfCell(LyXParagraph *par, int &pos);
+       ///
+       void InsertCharInTable(char c);
+       ///
+       void BackspaceInTable();
+       ///
+       void CheckParagraphInTable(LyXParagraph* par, int pos);
+       ///
+       char HitInTable(Row* row, int x);
+       ///
+       bool MouseHitInTable(int x, long y);
+       /* table stuff -- end*/
+       ///
+       LyXParagraph* GetParFromID(int id);
+
+       // undo functions
+       /// returns false if no undo possible
+       bool  TextUndo();
+       /// returns false if no redo possible
+       bool  TextRedo();
+       /// used by TextUndo/TextRedo
+       bool TextHandleUndo(Undo* undo);
+       /// makes sure the next operation will be stored
+       void FinishUndo();
+       /// this is dangerous and for internal use only
+       void FreezeUndo();
+       /// this is dangerous and for internal use only
+       void UnFreezeUndo();
+       /// the flag used by FinishUndo();
+       bool undo_finished;
+       /// a flag
+       bool undo_frozen;
+       ///
+       void SetUndo(Undo::undo_kind kind, LyXParagraph *before, LyXParagraph *end);
+       ///
+       void SetRedo(Undo::undo_kind kind, LyXParagraph *before, LyXParagraph *end);
+       ///
+       Undo *CreateUndo(Undo::undo_kind kind, LyXParagraph *before, LyXParagraph *end);
+       /// for external use in lyx_cb.C
+       void SetCursorParUndo();
+       ///
+       void CursorLeftIntern();
+       ///
+       void CursorRightIntern();
+        ///
+        void RemoveTableRow(LyXCursor *cursor);
+        ///
+        bool IsEmptyTableRow(LyXCursor *cursor);
+        ///
+        bool IsEmptyTableCell();
+        ///
+        void toggleAppendix();
+
+private:
+       ///
+       Row* firstrow;
+       ///
+       Row* lastrow;
+
+       /** Copybuffer for copy environment type
+         Asger has learned that this should be a buffer-property instead
+         Lgb has learned that 'char' is a lousy type for non-characters
+         */
+       char copylayouttype;
+
+       /// the currentrow is needed to access rows faster*/ 
+       Row* currentrow;                       /* pointer to the current row  */
+       /// position in the text 
+       long  currentrow_y;
+       /// width of the paper
+       unsigned short  paperwidth;
+   
+       /** inserts a new row behind the specified row, increments
+        * the touched counters */
+       void InsertRow(Row *row, LyXParagraph *par, int pos );
+
+       /** removes the row and reset the touched counters */
+       void RemoveRow(Row *row);
+
+       /** remove all following rows of the paragraph of the specified row. */
+       void RemoveParagraph(Row *row);
+
+       /** insert the specified paragraph behind the specified row */
+       void InsertParagraph(LyXParagraph *par, Row *row);
+
+       /** appends  the implizit specified paragraph behind the specified row,
+        * start at the implizit given position */
+       void AppendParagraph(Row *row);
+   
+       ///
+       void BreakAgain(Row *row);
+       ///
+       void BreakAgainOneRow(Row *row);
+       ///
+       void SetHeightOfRow(Row *row_ptr); /* calculate and set the height 
+                                           * of the row */
+
+       /** this calculates the specified parameters. needed when setting
+        * the cursor and when creating a visible row */ 
+       void PrepareToPrint(Row *row, float &x, float &fill_separator, 
+                           float &fill_hfill, float &fill_label_hfill);
+       ///
+       void DeleteEmptyParagraphMechanism(LyXCursor old_cursor);
+
+       /** Updates all counters starting BEHIND the row. Changed paragraphs
+        * with a dynamic left margin will be rebroken. */ 
+       void UpdateCounters(Row *row);
+       ///
+       void SetCounter(LyXParagraph *par);
+   
+       /*
+        * some low level functions
+        */
+       
+       ///
+       int SingleWidth(LyXParagraph *par, int pos);
+       ///
+       int SingleWidth(LyXParagraph *par, int pos, char c);
+       ///
+       void Draw(Row *row, int &pos, LyXScreen &scr, int offset, float &x);
+       /// get the next breakpoint in a given paragraph
+       int NextBreakPoint(Row* row, int width);
+       /// returns the minimum space a row needs on the screen in pixel
+       int Fill(Row *row, int paperwidth);
+       
+       /** returns the minimum space a manual label needs on the
+         screen in pixel */ 
+       int LabelFill(Row *row);
+       
+       ///
+       int BeginningOfMainBody(LyXParagraph *par);
+       
+       /** Returns the left beginning of the text.
+         This information cannot be taken from the layouts-objekt, because
+         in LaTeX the beginning of the text fits in some cases
+         (for example sections) exactly the label-width.
+         */
+       int LeftMargin(Row *row);
+       ///
+       int RightMargin(Row *row);
+       ///
+       int LabelEnd (Row *row);
+
+       /** returns the number of separators in the specified row.
+         The separator on the very last column doesnt count
+         */ 
+       int NumberOfSeparators(Row *row);
+
+       /** returns the number of hfills in the specified row. The
+         LyX-Hfill is a LaTeX \hfill so that the hfills at the
+         beginning and at the end were ignored. This is {\em MUCH}
+         more usefull than not to ignore!
+         */
+       int NumberOfHfills(Row *row);
+   
+       /// like NumberOfHfills, but only those in the manual label!
+       int NumberOfLabelHfills(Row *row);
+
+       /** returns true, if a expansion is needed. Rules are given by 
+         LaTeX
+         */ 
+       bool HfillExpansion(Row *row_ptr, int pos);
+   
+       /** returns the paragraph position of the last character in the 
+         specified row
+         */
+       int RowLast(Row *row);
+};
+
+#endif
diff --git a/src/lyxvc.C b/src/lyxvc.C
new file mode 100644 (file)
index 0000000..1c01548
--- /dev/null
@@ -0,0 +1,391 @@
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include FORMS_H_LOCATION
+#include "lyxvc.h"
+#include "error.h"
+#include "lyx_gui_misc.h"
+#include "bufferlist.h"
+#include "syscall.h"
+#include "pathstack.h"
+#include "filetools.h"
+#include "FileInfo.h"
+#include "gettext.h"
+#include "LyXView.h"
+#include "lyxfunc.h"
+#include "latexoptions.h"
+
+extern BufferList bufferlist;
+extern void MenuWrite(Buffer *);
+
+#if 0
+extern bool gsworking();
+#endif
+
+LyXVC::LyXVC()
+{
+       backend = UNKNOWN_VCS;
+       _owner = 0;
+       browser = 0;
+}
+
+
+LyXVC::~LyXVC()
+{
+       if (browser) {
+               if (browser->LaTeXLog->visible)
+                       fl_hide_form(browser->LaTeXLog);
+               fl_free_form(browser->LaTeXLog);
+       }
+}
+
+
+bool LyXVC::file_found_hook(LString const & fn)
+{
+       LString tmp(fn);
+       FileInfo f;
+       // Check if *,v exists.
+       tmp += ",v";
+       lyxerr.debug(LString("Checking if file is under vc: ") + tmp, Error::LYXVC);
+       if (f.newFile(tmp).readable()) {
+               lyxerr.debug("Yes it is under vc.", Error::LYXVC);
+               master = tmp;
+               backend = RCS_VCS;
+               scanMaster();
+               return true;
+       } else {
+               // Check if RCS/*,v exists.
+               tmp = AddName(AddPath(OnlyPath(fn), "RCS"), fn);
+               tmp += ",v";
+               lyxerr.debug("Checking if file is under vc: " + tmp, Error::LYXVC);
+               if (f.newFile(tmp).readable()) {
+                       lyxerr.debug("Yes it is under vc.", Error::LYXVC);
+                       master = tmp;
+                       backend = RCS_VCS;
+                       scanMaster();
+                       return true;
+               }
+       }
+       // If either one, return true
+
+       // file is not under any VCS.
+       return false;
+}
+
+
+bool LyXVC::file_not_found_hook(LString const &)
+{
+       // file is not under any VCS.
+       return false;
+}
+
+
+void LyXVC::scanMaster()
+{
+       lyxerr.debug("LyXVC: This file is a VC file.", Error::LYXVC);
+
+       LyXLex lex(NULL, 0);
+       lex.setFile(master);
+
+       LString token;
+       bool read_enough = false;
+       while (lex.IsOK() && !read_enough) {
+               lex.next();
+               token = lex.GetString();
+               
+               lyxerr.debug("LyXVC::scanMaster: current lex text: `"
+                               +token+"'", Error::LYXVC);
+
+               if (token.empty())
+                       continue;
+               else if (token == "head") {
+                       // get version here
+                       lex.next();
+                       LString tmv = lex.GetString();
+                       tmv.strip(';');
+                       version = tmv;
+               } else if (token.contains("access")
+                          || token.contains("symbols")
+                          || token.contains("strict")) {
+                       // nothing
+               } else if (token.contains("locks")) {
+                       // get locker here
+                       if (token.contains(";")) {
+                               locker = "Unlocked";
+                               vcstat = UNLOCKED;
+                               continue;
+                       }
+                       LString tmpt, s1, s2;
+                       do {
+                               lex.next();
+                               tmpt = lex.GetString();
+                               s1 = tmpt;
+                               s1.strip(';');
+                               // tmp is now in the format <user>:<version>
+                               s1.split(s2, ':');
+                               // s2 is user, and s1 is version
+                               if (s1 == version) {
+                                       locker = s2;
+                                       vcstat = LOCKED;
+                                       break;
+                               }
+                       } while (!tmpt.contains(";"));
+                       
+               } else if (token == "comment") {
+                       // we don't need to read any further than this.
+                       read_enough = true;
+               } else {
+                       // unexpected
+                       lyxerr.debug("LyXVC::scanMaster(): unexpected token", Error::LYXVC);
+               }
+       }
+}
+
+
+void LyXVC::setBuffer(Buffer *buf)
+{
+       _owner = buf;
+}
+
+
+//
+// I will probably add some backend_xxxx functions later to perform the
+// version control system specific commands. Something like:
+// void backend_revert(<params>) {
+//        if (backend == "RCS") {
+//        } else if (backend == "CVS") {
+//        } else if (backend == "SCCS") {
+//        }
+//
+// But for 0.12 we will only support RCS.
+//
+
+void LyXVC::registrer()
+{
+       // If the document is changed, we might want to save it
+       if (!_owner->isLyxClean() && 
+           AskQuestion(_("Changes in document:"),
+                       MakeDisplayPath(_owner->getFileName(),50),
+                       _("Save document and proceed?"))) {
+               MenuWrite(_owner);
+       }
+
+       // Maybe the save fails, or we answered "no". In both cases,
+       // the document will be dirty, and we abort.
+       if (!_owner->isLyxClean()) {
+               return;
+       }
+
+       lyxerr.debug("LyXVC: registrer", Error::LYXVC);
+       LString tmp = askForText(_("LyX VC: Initial description"),
+                                _("(no initial description)"));
+       if (tmp.empty()) {
+               lyxerr.debug("LyXVC: user cancelled", Error::LYXVC);
+               WriteAlert(_("Info"), _("This document has NOT been registered."));
+               return;
+       }
+       LString cmd = "ci -q -u -i -t-\"";
+       cmd += tmp;
+       cmd += "\" \"";
+       cmd += OnlyFilename(_owner->getFileName());
+       cmd += "\"";
+       doVCCommand(cmd);
+       _owner->getUser()->getOwner()->getLyXFunc()->Dispatch("buffer-reload");
+}
+
+
+void LyXVC::checkIn()
+{
+       // If the document is changed, we might want to save it
+       if (!_owner->isLyxClean() && 
+           AskQuestion(_("Changes in document:"),
+                       MakeDisplayPath(_owner->getFileName(),50),
+                       _("Save document and proceed?"))) {
+               MenuWrite(_owner);
+       }
+
+       // Maybe the save fails, or we answered "no". In both cases,
+       // the document will be dirty, and we abort.
+       if (!_owner->isLyxClean()) {
+               return;
+       }
+
+       lyxerr.debug("LyXVC: checkIn", Error::LYXVC);
+       _owner->getUser()->getOwner()->getLyXFunc()->Dispatch(LFUN_MENUWRITE);
+       LString tmp = askForText(_("LyX VC: Log Message"));
+       if (tmp.empty()) tmp = "(no log msg)";
+       doVCCommand("ci -q -u -m\"" + tmp + "\" \""
+                   + OnlyFilename(_owner->getFileName()) + "\"");
+       _owner->getUser()->getOwner()->getLyXFunc()->Dispatch("buffer-reload");
+}
+
+
+void LyXVC::checkOut()
+{
+       lyxerr.debug("LyXVC: checkOut", Error::LYXVC);
+       if (!_owner->isLyxClean() 
+           && !AskQuestion(_("Changes in document:"),
+                          MakeDisplayPath(_owner->getFileName(),50),
+                          _("Ignore changes and proceed with check out?"))) {
+               return;
+       }
+
+       _owner->markLyxClean();
+       doVCCommand("co -q -l \""
+                   + OnlyFilename(_owner->getFileName()) + "\"");
+       _owner->getUser()->getOwner()->getLyXFunc()->Dispatch("buffer-reload");
+}
+
+
+void LyXVC::revert()
+{
+       lyxerr.debug("LyXVC: revert", Error::LYXVC);
+       // Here we should check if the buffer is dirty. And if it is
+       // we should warn the user that reverting will discard all
+       // changes made since the last check in.
+       if (AskQuestion(_("When you revert, you will loose all changes made"),
+                       _("to the document since the last check in."),
+                       _("Do you still want to do it?"))) {
+               
+               doVCCommand("co -f -u" + getVersion() + " \""
+                           + OnlyFilename(_owner->getFileName()) + "\"");
+               // We ignore changes and just reload!
+               _owner->markLyxClean();
+               _owner->getUser()->getOwner()->
+                       getLyXFunc()->Dispatch("buffer-reload");
+       }
+}
+
+
+void LyXVC::undoLast()
+{
+       lyxerr.debug("LyXVC: undoLast", Error::LYXVC);
+       doVCCommand("rcs -o" + getVersion() + " \""
+                   + OnlyFilename(_owner->getFileName()) + "\"");
+}
+
+
+void LyXVC::toggleReadOnly()
+{
+       switch (vcstat) {
+       case UNLOCKED:
+               checkOut();
+               break;
+       case LOCKED:
+               checkIn();
+               break;
+       }
+}
+
+
+bool LyXVC::inUse()
+{
+       if (!master.empty())
+               return true;
+       return false;
+}
+
+
+LString const LyXVC::getVersion() const
+{
+       return version;
+}
+
+
+LString const LyXVC::getLocker() const
+{
+       return locker;
+}
+
+// This is a hack anyway so I'll put it here in the mean time.
+void LyXVC::logClose(FL_OBJECT *obj, long)
+{
+       LyXVC *This = (LyXVC*)obj->form->u_vdata;
+       fl_hide_form(This->browser->LaTeXLog);
+}
+
+
+void LyXVC::logUpdate(FL_OBJECT *obj, long)
+{
+       LyXVC *This = (LyXVC*)obj->form->u_vdata;
+       This->showLog();
+}
+
+
+void LyXVC::viewLog(LString const & fil)
+{
+       if (!browser) {
+               FL_OBJECT *obj;
+               browser = (FD_LaTeXLog *) fl_calloc(1, sizeof(*browser));
+               
+               browser->LaTeXLog = fl_bgn_form(FL_NO_BOX, 470, 380);
+               browser->LaTeXLog->u_vdata = (void*)this;
+               obj = fl_add_box(FL_UP_BOX, 0, 0, 470, 380, "");
+               browser->browser_latexlog = fl_add_browser(FL_NORMAL_BROWSER, 10, 10, 450, 320, "");
+               obj = fl_add_button(FL_RETURN_BUTTON, 270, 340, 90, 30, _("Close"));
+               fl_set_object_lsize(obj, FL_NORMAL_SIZE);
+               fl_set_object_callback(obj, logClose, 0);
+               obj = fl_add_button(FL_NORMAL_BUTTON,370,340,90,30,
+                                   idex(_("Update|#Uu")));
+               fl_set_button_shortcut(obj,scex(_("Update|#Uu")),1);
+               fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+               fl_set_object_callback(obj,logUpdate,0);
+               fl_end_form();
+               fl_set_form_atclose(browser->LaTeXLog, CancelCloseBoxCB, NULL);
+       }
+
+       if (!fl_load_browser(browser->browser_latexlog, fil.c_str()))
+               fl_add_browser_line(browser->browser_latexlog, _("No RCS History!"));
+       
+       if (browser->LaTeXLog->visible) {
+               fl_raise_form(browser->LaTeXLog);
+       } else {
+               fl_show_form(browser->LaTeXLog,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
+                            _("RCS History"));
+       }
+}
+
+
+void LyXVC::showLog()
+{
+       // This I really don't like, but we'll look at this problem
+       // in 0.13. Then we can make a clean solution.
+#if 0
+       if (gsworking()) {
+                WriteAlert(_("Sorry, can't do this while"
+                            " pictures are being rendered."),
+                           _("Please wait a few seconds for"
+                            " this to finish and try again."),
+                           _("(or kill runaway gs processes"
+                            " by hand and try again.)"));
+                return;
+        }
+        extern pid_t isp_pid; // from spellchecker.C
+        if(isp_pid != -1) {
+               WriteAlert(_("Can't do this while the"
+                            " spellchecker is running."),
+                          _("Stop the spellchecker first."));
+               return;
+       }
+#endif
+       LString tmpf = tmpnam(NULL);
+       doVCCommand("rlog \""
+                   + OnlyFilename(_owner->getFileName()) + "\" > " + tmpf);
+       viewLog(tmpf);
+       unlink(tmpf.c_str());
+}
+
+
+int LyXVC::doVCCommand(LString const & cmd)
+{
+       lyxerr.debug("doVCCommand: " + cmd, Error::LYXVC);
+        Systemcalls one;
+       PathPush(_owner->filepath);
+       int ret = one.Startscript(Systemcalls::System, cmd);
+       PathPop();
+       return ret;
+}
diff --git a/src/lyxvc.h b/src/lyxvc.h
new file mode 100644 (file)
index 0000000..dc5e3eb
--- /dev/null
@@ -0,0 +1,142 @@
+// -*- C++ -*-
+
+#ifndef _LYX_VC_H_
+#define _LYX_VC_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+#include "latexoptions.h"
+
+class Buffer;
+
+/** Version Control for LyX. This is the class giving the verison control
+features to LyX. It is
+  intended to support different kinds of version control, but at this point
+  we will only support RCS. Later CVS is a likely candidate for support.
+  The support in LyX is based loosely upon the version control in GNU Emacs,
+  but is not as extensive as that one. See examples/VC.lyx for a simple
+  tutorial and manual for the use of the version control system in LyX.
+
+  LyXVC use this algorithm when it searches for VC files:
+  for RCS it searches for <filename>,v and RCS/<filename>,v similar
+  should be done for CVS. By doing this there doesn't need to be any
+  special support for VC in the lyx format, and this is especially good
+  when the lyx format will be a subset of LaTeX.
+  */
+class LyXVC {
+public:
+       ///
+       LyXVC();
+       ///
+       ~LyXVC();
+       /** Not a good name perhaps. This function should be called whenever
+         LyX loads a file. This function then checks for a master VC file
+         (for RCS this is *,v or RCS/ *,v) if this file is found, the loaded
+         file is assumed to be under controll by VC (only RCS so far), and
+         the appropiate actions is taken. Returns true if the file is under
+         control by a VCS.
+         */
+       bool file_found_hook(LString const & fn);
+       
+       /** This function should be run when a file is requested for loading,
+         but it does not exist. This function will then check for a VC master
+         file with the same name (see above function). If this exists the
+         user should be asked if he/her wants to checkout a version for
+         viewing/editing. Returns true if the file is under control by a VCS
+         and the user wants to view/edit it.
+         */
+       static bool file_not_found_hook(LString const & fn);
+
+       ///
+       void scanMaster();
+       ///
+       void setBuffer(Buffer*);
+
+       /// Register the document as an VC file.
+       void registrer();
+
+       /// Unlock and commit changes.
+       void checkIn();
+
+       /// Lock and prepare to edit document.
+       void checkOut();
+
+       /// Revert to last version
+       void revert();
+
+       /// Undo last check-in.
+       void undoLast();
+
+       ///
+       void viewLog(LString const &);
+
+       ///
+       void showLog();
+
+       /// 
+       void toggleReadOnly();
+       
+       /// Is the document under administration by RCS?
+       bool inUse();
+
+       /// Returns the version number.
+       LString const getVersion() const;
+
+       /// Returns the userid of the person who has locked the doc.
+       LString const getLocker() const;
+protected:
+private:
+       ///
+       int doVCCommand(LString const&);
+       
+       /** The master VC file. For RCS this is *,v or RCS/ *,v. master should
+         have full path.
+         */
+       LString master;
+
+       /** The version of the VC file. I am not sure if this can be a
+       string of if it must be a
+         float/int. */
+       LString version;
+
+       /// The user currently keeping the lock on the VC file.
+       LString locker;
+
+       ///
+       enum VCStatus {
+               ///
+               UNLOCKED,
+               ///
+               LOCKED
+       };
+
+       /// The status of the VC controlled file.
+       VCStatus vcstat;
+
+       ///     
+       enum Backend {
+               ///
+               UNKNOWN_VCS,
+               ///
+               RCS_VCS
+       };
+
+       /// The VC backend used. (so far this can only be RCS)
+       Backend backend;
+
+       /// The buffer using this VC
+       Buffer *_owner;
+
+       ///
+       FD_LaTeXLog *browser; // FD_LaTeXLog is just a browser with a
+       // close button. Unfortunately we can not use the standard callbacks.
+       ///
+       static void logClose(FL_OBJECT*, long);
+       ///
+       static void logUpdate(FL_OBJECT*, long);
+};
+
+#endif
diff --git a/src/main.C b/src/main.C
new file mode 100644 (file)
index 0000000..cb1e53a
--- /dev/null
@@ -0,0 +1,51 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1999 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+#include FORMS_H_LOCATION
+#include "lyx_main.h"
+#include "gettext.h"
+#include "LString.h"
+#include "filetools.h"
+
+//     $Id: main.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $      
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: main.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+// I keep these here so that it will be processed as early in
+// the compilation process as possible.
+#if !defined(FL_REVISION) || (FL_REVISION != 88 && FL_REVISION != 89) \
+                         || FL_VERSION != 0
+#error LyX will not compile with this version of XForms.\
+       Please get version 0.89.\
+       If you want to try to compile anyway, delete this test in src/main.C.
+#endif
+
+
+int main(int argc, char *argv[]) {
+       // lyx_localedir is used by gettext_init() is we have
+       //   i18n support built-in
+       LString lyx_localedir = getEnvPath("LYX_LOCALEDIR");
+       if (lyx_localedir.empty())
+               lyx_localedir = LOCALEDIR;
+       
+       // initialize for internationalized version *EK*
+       locale_init();
+       gettext_init();
+
+#ifdef __EMX__
+       _wildcard(&argc, &argv);
+#endif
+
+       LyX lyx(&argc,argv);
+       return 0; // ok
+}
diff --git a/src/mathed/Makefile.am b/src/mathed/Makefile.am
new file mode 100644 (file)
index 0000000..e0562fc
--- /dev/null
@@ -0,0 +1,38 @@
+AUTOMAKE_OPTIONS = foreign
+MAINTAINERCLEANFILES = Makefile.in
+noinst_PROGRAMS = mathed.o
+LIBS=
+LDFLAGS=
+ETAGS_ARGS = --c++
+INCLUDES = -I${top_srcdir}/images -I${srcdir}/../
+CXXLINK = $(LD) -r -o $(noinst_PROGRAMS)
+
+mathed_o_SOURCES = array.h \
+       formula.C \
+       formula.h \
+       formulamacro.C \
+       formulamacro.h \
+       math_cursor.C \
+       math_cursor.h \
+       math_defs.h \
+       math_delim.C \
+       math_draw.C \
+       math_forms.C \
+       math_forms.h \
+       math_hash.C \
+       math_inset.C \
+       math_inset.h \
+       math_iter.C \
+       math_iter.h \
+       math_macro.C \
+       math_macro.h \
+       math_panel.C \
+       math_panel.h \
+       math_parser.C \
+       math_parser.h \
+       math_root.C \
+       math_root.h \
+       math_symbols.C \
+       math_utils.C \
+       math_write.C \
+       symbol_def.h
diff --git a/src/mathed/array.h b/src/mathed/array.h
new file mode 100644 (file)
index 0000000..88fc0ad
--- /dev/null
@@ -0,0 +1,235 @@
+// -*- C++ -*-
+/*
+ *  File:        array.h
+ *  Purpose:     A general purpose resizable array.  
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *
+ *  Dependencies: None (almost)
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra
+ *                 1997  The LyX Team!
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <string.h>
+
+#ifndef byte
+#define byte unsigned char
+#endif
+
+/*@Doc: A resizable array
+  Why is it called "LyXArrayBase" if it is generic? (Lgb)
+  Initially I thought it could be the base class for both mathed's
+  and LyX' kernels data buffer. (Ale)
+  */
+class LyxArrayBase  {
+public:
+       ///
+       enum {
+               ///
+               ARRAY_SIZE = 256,
+               ///
+               ARRAY_STEP = 16,
+               ///
+               ARRAY_MIN_SIZE = 4
+       };
+
+       ///
+       LyxArrayBase(int size=ARRAY_STEP);
+       ///
+       LyxArrayBase(const LyxArrayBase&);
+       ///
+       ~LyxArrayBase();
+   
+       
+       ///
+       int Empty() { return (last==0); }
+   
+       ///
+       int Last() { return last; }
+   
+       /// Fills with 0 the entire array and set last to 0
+       void Init();     
+   
+       /// Make the allocated memory fit the needed size
+       void Fit();     
+
+       /// Remove dx elements from position pos. Don't changes the size
+       void Remove(int pos, int dx);   
+
+       /// Merge dx elements from array a at pos. Changes the size if necessary.
+       void Merge(LyxArrayBase *a, int pos, int dx); 
+
+       /// Same as Merge but doesn't changes the size (dangerous)
+       void MergeF(LyxArrayBase *a, int pos, int dx); 
+
+       /// Copy dx byts from an array at position pos
+       void Copy(void *, int pos, int dx); 
+
+       /// Constructs a new array with dx elements starting at pos 
+       LyxArrayBase* Extract(int pos, int dx); 
+
+       /// Insert a character at position pos
+       void Insert(int pos, byte);
+
+       /// Insert a string of lenght dx at position pos
+       void Insert(int pos, byte *, int dx);
+
+       /// Constructs a new array with dx elements starting at pos 
+       byte operator[](const int);
+
+       /// Constructs a new array with dx elements starting at pos 
+       LyxArrayBase& operator=(const LyxArrayBase&); 
+
+protected:
+       ///
+       void Resize(int newsize);
+       ///
+       bool Move(int p, int shift);
+
+       /// Buffer
+       byte *bf;
+       /// Last position inserted.
+       int last;
+       /// Max size of the array.
+       int maxsize;
+private:
+       ///
+       friend class MathedIter;
+};
+   
+
+
+/************************ Inline functions *****************************/
+
+inline
+void LyxArrayBase::Init()
+{
+       memset(bf, 0, maxsize);
+       last = 0;
+}
+
+inline // Hmmm, Hp-UX's CC can't handle this inline. Asger.
+void LyxArrayBase::Resize(int newsize)
+{
+       if (newsize<ARRAY_MIN_SIZE)
+               newsize = ARRAY_MIN_SIZE;
+       newsize += ARRAY_STEP - (newsize % ARRAY_STEP);
+       byte *nwbf = new byte[newsize];
+       if (last >= newsize) last = newsize-1;
+       maxsize = newsize;
+       memcpy(nwbf, bf, last);
+       delete[] bf;
+       bf = nwbf;
+       bf[last] = 0;
+}
+
+inline
+LyxArrayBase::LyxArrayBase(int size) 
+{
+       maxsize = (size<ARRAY_MIN_SIZE) ? ARRAY_MIN_SIZE: size;
+       bf = new byte[maxsize]; // this leaks
+       Init();
+}
+
+inline   
+LyxArrayBase::~LyxArrayBase() 
+{
+       delete[] bf;
+}
+
+inline
+LyxArrayBase::LyxArrayBase(const LyxArrayBase& a) 
+{
+       maxsize = a.maxsize;
+       bf = new byte[maxsize];
+       memcpy(&bf[0], &a.bf[0], maxsize);
+       last = a.last;
+}
+
+inline
+LyxArrayBase& LyxArrayBase::operator=(const LyxArrayBase& a)
+{
+       if (this != &a) {
+               Resize(a.maxsize);
+               memcpy(&bf[0], &a.bf[0], maxsize);
+       }
+       return *this;
+}
+
+inline   
+bool LyxArrayBase::Move(int p, int shift) 
+{
+       bool result = false;
+       if (p<=last) {
+               if (last+shift>=maxsize) { 
+                   Resize(last + shift);
+               }
+               memmove(&bf[p+shift], &bf[p], last-p);
+               last += shift;
+               bf[last] = 0;
+               result = true;
+       }
+       return result;
+}
+
+inline
+void LyxArrayBase::Fit()
+{
+       Resize(last);
+}
+
+inline
+void LyxArrayBase::Remove(int pos, int dx)
+{
+       Move(pos+dx, -dx);
+}    
+
+inline
+void LyxArrayBase::Merge(LyxArrayBase *a, int p, int dx)
+{
+       Move(p, dx);
+       memcpy(&bf[p], &a->bf[0], dx);
+}
+inline
+void LyxArrayBase::MergeF(LyxArrayBase *a, int p, int dx)
+{
+       memcpy(&bf[p], &a->bf[0], dx);
+}
+inline
+void LyxArrayBase::Copy(void *a, int p, int dx)
+{
+       memcpy(&bf[p], a, dx);
+}
+
+inline
+LyxArrayBase *LyxArrayBase::Extract(int, int dx)
+{
+       LyxArrayBase *a = new LyxArrayBase(dx);
+       a->Merge(this, 0, dx);
+       return a;
+}
+inline
+byte LyxArrayBase::operator[](const int i)
+{
+       return bf[i];
+}
+
+
+inline
+void LyxArrayBase::Insert(int pos, byte c)
+{
+       if (pos<0) pos = last;
+       if (pos>=maxsize) 
+               Resize(maxsize+ARRAY_STEP);
+       bf[pos] = c;
+       if (pos>=last)
+               last = pos+1;
+}
diff --git a/src/mathed/formula.C b/src/mathed/formula.C
new file mode 100644 (file)
index 0000000..c89a4d1
--- /dev/null
@@ -0,0 +1,1255 @@
+/*
+ *  File:        formula.h
+ *  Purpose:     Implementation of formula inset
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Allows the edition of math paragraphs inside Lyx. 
+ *
+ *  Copyright: (c) 1996-1998 Alejandro Aguilar Sierra
+ *
+ *  Version: 0.4, Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation "formula.h"
+#endif
+
+#include "formula.h"
+#include "commandtags.h"
+#include "math_cursor.h"
+#include "math_parser.h"
+#include "lyx_main.h"
+#include "bufferlist.h"
+#include "lyx_cb.h"
+#include "minibuffer.h"
+#include "BufferView.h"
+#include "lyxscreen.h"
+#include "lyxdraw.h"
+#include "lyxtext.h"
+#include "gettext.h"
+#include "LaTeXFeatures.h"
+#include "error.h"
+#include "lyx_gui_misc.h"
+
+//     $Id: formula.C,v 1.1 1999/09/27 18:44:40 larsbj Exp $   
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: formula.C,v 1.1 1999/09/27 18:44:40 larsbj Exp $";
+#endif /* lint */
+
+extern void UpdateInset(Inset* inset, bool mark_dirty = true);
+extern void LockedInsetStoreUndo(Undo::undo_kind);
+extern MiniBuffer *minibuffer;
+extern void ShowLockedInsetCursor(long, long, int, int);
+extern void HideLockedInsetCursor(long, long, int, int);
+extern void FitLockedInsetCursor(long, long, int, int);
+extern int LockInset(UpdatableInset*);
+extern int UnlockInset(UpdatableInset*);
+
+
+extern GC canvasGC, mathGC, mathLineGC, latexGC, cursorGC, mathFrameGC;
+extern char *mathed_label;
+
+extern int mono_video;
+extern int fast_selection;
+
+extern BufferView *current_view;
+extern BufferList bufferlist;
+extern char const *latex_special_chars;
+
+short greek_kb_flag = 0;
+
+LyXFont *Math_Fonts = NULL; // this is only used by Whichfont and mathed_init_fonts (Lgb)
+
+static LyXFont::FONT_SIZE lfont_size = LyXFont::SIZE_NORMAL;
+
+// local global 
+static int sel_x, sel_y;
+static bool sel_flag;
+MathedCursor* InsetFormula::mathcursor = NULL; 
+
+
+int MathedInset::df_asc;
+int MathedInset::df_des;
+int MathedInset::df_width;
+
+// wrong name on this one should be called "IsAscii"
+inline bool IsAlpha(char c)
+{
+   return ('A' <= c  && c<='Z' || 'a' <= c  && c<='z');
+}
+
+inline bool IsDigit(char c)
+{
+   return ('0' <= c && c <='9');
+}
+
+inline bool IsMacro(short token, int id)
+{
+   return (token!=LM_TK_FRAC && token!=LM_TK_SQRT &&
+         !((token==LM_TK_SYM || token==LM_TC_BSYM) && id<255));
+}
+
+void mathedValidate(LaTeXFeatures &features, MathParInset *par);
+
+LyXFont WhichFont(short type, int size)
+{
+    LyXFont f;
+    
+      if (!Math_Fonts)
+       mathed_init_fonts();
+   
+   switch (type) {
+    case LM_TC_SYMB:        
+      f = Math_Fonts[2];
+      break;
+    case LM_TC_BSYM:        
+      f = Math_Fonts[2];
+      break;
+    case LM_TC_VAR:
+    case LM_TC_IT:
+      f = Math_Fonts[0];
+      break;
+    case LM_TC_BF:
+      f = Math_Fonts[3];
+      break;
+    case LM_TC_SF:
+      f = Math_Fonts[7];
+      break;
+    case LM_TC_CAL:
+      f = Math_Fonts[4];
+      break;
+    case LM_TC_TT:
+      f = Math_Fonts[5];
+      break;
+    case LM_TC_SPECIAL: //f = Math_Fonts[0]; break;
+    case LM_TC_TEXTRM:
+    case LM_TC_RM:    
+      f = Math_Fonts[6];
+      break;
+    default:
+      f = Math_Fonts[1];
+      break;   
+   }
+    
+    f.setSize(lfont_size);
+    
+    switch (size) {
+     case LM_ST_DISPLAY:     
+       if (type==LM_TC_BSYM) {
+           f.incSize();
+           f.incSize();
+       }
+       break;
+     case LM_ST_TEXT:
+       break;
+     case LM_ST_SCRIPT:
+       f.decSize();
+       break;
+     case LM_ST_SCRIPTSCRIPT:
+       f.decSize();
+       f.decSize();
+       break;
+     default:
+       fprintf(stderr, "Mathed Error: wrong font size: %d\n", size);
+       break;
+    }
+    
+    if (type!=LM_TC_TEXTRM) 
+      f.setColor(LyXFont::MATH);
+    return f;
+}
+
+
+void mathed_init_fonts() //removed 'static' because DEC cxx does not
+                        //like it (JMarc) 
+{
+
+    Math_Fonts = new LyXFont[8]; //DEC cxx cannot initialize all fonts
+                                //at once (JMarc) rc
+    for (int i=0 ; i<8 ; i++){ 
+       Math_Fonts[i] = LyXFont::ALL_SANE;
+    }
+    Math_Fonts[0].setShape(LyXFont::ITALIC_SHAPE);
+    
+    Math_Fonts[1].setFamily(LyXFont::SYMBOL_FAMILY);
+    
+    Math_Fonts[2].setFamily(LyXFont::SYMBOL_FAMILY);
+    Math_Fonts[2].setShape(LyXFont::ITALIC_SHAPE);
+
+    Math_Fonts[3].setSeries(LyXFont::BOLD_SERIES);
+      
+    Math_Fonts[4].setFamily(LyXFont::SANS_FAMILY);
+    Math_Fonts[4].setShape(LyXFont::ITALIC_SHAPE);
+      
+    Math_Fonts[5].setFamily(LyXFont::TYPEWRITER_FAMILY);
+
+    Math_Fonts[6].setFamily(LyXFont::ROMAN_FAMILY);
+
+    Math_Fonts[7].setFamily(LyXFont::SANS_FAMILY);
+    
+    LyXFont f = WhichFont(LM_TC_VAR, LM_ST_TEXT);
+    MathedInset::df_asc = f.maxAscent(); 
+    MathedInset::df_des = f.maxDescent();
+    MathedInset::df_width = f.width('I');    
+}
+
+
+void mathed_set_font(short type, int size)
+{
+    if (!canvasGC) {
+           cursorGC = getGC(gc_thin_on_off_line);
+           canvasGC = getGC(gc_lighted);
+           latexGC =  getGC(gc_latex);
+           mathLineGC = getGC(gc_math);
+           mathFrameGC = getGC(gc_math_frame);
+    }
+    LyXFont f = WhichFont(type, size); 
+    if (type==LM_TC_TEX) {
+       f.setLatex(LyXFont::ON);
+       latexGC = f.getGC();
+    } else
+      mathGC = f.getGC();
+}
+
+
+int mathed_string_width(short type, int size, byte const* s, int ls)
+{
+    LyXFont f = WhichFont(type, size);
+
+    byte sx[80];
+    if (MathIsBinary(type)) {
+       byte *ps = &sx[0];
+       for (int i=0; i<ls && i<75; i++) {
+           *(ps++) = ' ';
+           *(ps++) = s[i];
+           *(ps++) = ' ';
+       }
+       *(ps++) = '\0';
+       ls = 3*ls;
+       s = &sx[0];
+    }
+    return f.textWidth((const char*)s, ls);;
+}
+
+int mathed_char_width(short type, int size, byte c)
+{
+    int t= (MathIsBinary(type)) ? mathed_string_width(type, size, &c, 1):
+           WhichFont(type, size).width(c);
+    return t;
+}
+
+int mathed_string_height(short type, int size, byte const * s, int ls, int& asc, int& des)
+{
+   LyXFont font = WhichFont(type, size);
+   asc = des = 0;
+   for (int i=0; i<ls; i++) {
+      if (font.descent(s[i]) > des)
+       des = font.descent(s[i]);
+      if (font.ascent(s[i]) > asc)
+       asc = font.ascent(s[i]);
+   }
+   return asc+des;
+}
+
+int mathed_char_height(short type, int size, byte c, int& asc, int& des)
+{
+   LyXFont font = WhichFont(type, size);
+   asc = des = 0;
+   des = font.descent(c);
+   asc = font.ascent(c);
+   return asc+des;
+}
+
+
+// In a near future maybe we use a better fonts renderer
+void MathedInset::drawStr(short type, int size, int x, int y, byte* s, int ls)
+{
+    mathed_set_font(type, size);
+    byte sx[80];
+    if (MathIsBinary(type)) {
+       byte *ps = &sx[0];
+       for (int i=0; i<ls && i < 75; i++) {
+           *(ps++) = ' ';
+           *(ps++) = s[i];
+           *(ps++) = ' ';
+       }
+       //    *ps = ' ';
+       ls = 3*ls;
+       s = &sx[0];
+    }
+    GC gc = (type==LM_TC_TEX) ? latexGC: mathGC;
+    XDrawString(fl_display, pm, gc, x, y, (char*)s, ls);
+    XFlush(fl_display);
+}
+
+
+InsetFormula::InsetFormula(bool display)
+{
+  par = new MathParInset; // this leaks
+  //   mathcursor = NULL;
+  disp_flag = display;
+  //label = NULL;
+  if (disp_flag) {
+    par->SetType(LM_OT_PAR);
+    par->SetStyle(LM_ST_DISPLAY);
+  }
+}
+
+InsetFormula::InsetFormula(MathParInset *p)
+{
+   par = (p->GetType()>=LM_OT_MPAR) ? 
+         new MathMatrixInset((MathMatrixInset*)p): 
+         new MathParInset(p);
+//   mathcursor = NULL;
+   
+   disp_flag = (par->GetType()>0);
+   //label = NULL;
+}
+
+InsetFormula::~InsetFormula()
+{
+   delete par;
+   //if (label) delete label;
+}
+
+Inset* InsetFormula::Clone()
+{
+    InsetFormula* f = new InsetFormula(par);
+    f->label = label;
+    return (Inset*)f;
+}
+
+void InsetFormula::Write(FILE *file)
+{
+   fprintf(file, "Formula ");
+   Latex(file, 0);
+}
+
+int InsetFormula::Latex(FILE *file, signed char fragile)
+{
+    int ret = 0;      
+//#warning Alejandro, the number of lines is not returned in this case
+// This problem will disapear at 0.13.
+    LString output;
+    InsetFormula::Latex(output, fragile);
+    fprintf(file, "%s", output.c_str());
+    return ret;
+}
+
+int InsetFormula::Latex(LString &file, signed char fragile)
+{
+    int ret = 0;        
+//#warning Alejandro, the number of lines is not returned in this case
+// This problem will disapear at 0.13.
+    if (fragile < 0)
+        par->Write(file);
+    else
+        mathed_write(par, file, &ret, fragile, label.c_str());
+    return ret;
+}
+
+
+int InsetFormula::Linuxdoc(LString &/*file*/)
+{
+    return 0;
+}
+
+
+int InsetFormula::DocBook(LString &/*file*/)
+{
+    return 0;
+}
+
+
+// Check if uses AMS macros 
+void InsetFormula::Validate(LaTeXFeatures &features) const
+{
+    // Validation only necesary if not using an AMS Style
+    if (!features.amsstyle)
+      mathedValidate(features, par);
+}
+
+
+void InsetFormula::Read(LyXLex &lex)
+{
+    FILE *file = lex.getFile();
+    
+    mathed_parser_file(file, lex.GetLineNo());   
+   
+   // Silly hack to read labels. 
+   mathed_label = NULL;
+   mathed_parse(0, NULL, &par);
+   par->Metrics();
+   disp_flag = (par->GetType()>0);
+   
+    // Update line number
+    lex.setLineNo(mathed_parser_lineno());
+    
+   if (mathed_label) {
+      label = mathed_label;
+      mathed_label = NULL;
+   }
+   
+#ifdef DEBUG
+   Write(stdout);
+   fflush(stdout);
+#endif
+}
+
+int InsetFormula::Ascent(LyXFont const &) const
+{
+   return par->Ascent() + ((disp_flag) ? 8: 1);
+}
+
+int InsetFormula::Descent(LyXFont const &) const
+{
+   return par->Descent() + ((disp_flag) ? 8: 1);
+}
+
+int InsetFormula::Width(LyXFont const &f) const
+{
+    lfont_size = f.size();
+    par->Metrics();
+    return par->Width(); //+2;
+}
+
+void InsetFormula::Draw(LyXFont f, LyXScreen &scr, int baseline, float &x)
+{
+       // This is Alejandros domain so I'll use this
+       unsigned long pm = scr.getForeground();
+       
+   lfont_size = f.size();
+   mathed_set_font(LM_TC_TEXTRM, LM_ST_TEXT); // otherwise a segfault could occur
+                                                               // in some XDrawRectangles (i.e. matrix) (Matthias)   
+   if (mathcursor && mathcursor->GetPar()==par) { 
+       if (mathcursor->Selection()) {
+          int n;
+          XPoint * p = mathcursor->SelGetArea(n);
+          XFillPolygon(fl_display, pm, getGC(gc_selection), //LyXGetSelectionGC(),
+                       p, n, Nonconvex, CoordModeOrigin);
+       }
+       mathcursor->Draw(pm, (int)x, baseline);
+   } else {
+//       par->Metrics();
+       par->setDrawable(pm);
+       par->Draw((int)x, baseline);
+   }
+   x += (float)Width(f);
+   if (par->GetType()==LM_OT_PARN || par->GetType()==LM_OT_MPARN) {
+       char s[80];
+       LyXFont  font = WhichFont(LM_TC_BF, par->size);
+       font.setLatex(LyXFont::OFF);
+      
+       if (par->GetType()==LM_OT_PARN) {
+          if (!label.empty())
+            sprintf(s, "(%s)", label.c_str());
+          else
+            sprintf(s, "(#)");
+          font.drawString(s, pm, baseline, int(x+20));
+       } else 
+       if (par->GetType()==LM_OT_MPARN) {
+          MathMatrixInset *mt = (MathMatrixInset*)par;
+          //int i=0;
+          int y;
+          MathedRowSt const* crow = mt->getRowSt();
+          while (crow) {
+              y = baseline + crow->getBaseline();
+              if (crow->isNumbered()) {
+                  if (crow->getLabel())
+                    sprintf(s, "(%s)", crow->getLabel());
+                  else
+                    sprintf(s, "(#)");
+                  font.drawString(s, pm, y, int(x+20));
+              }
+              crow = crow->getNext();
+          }
+       }
+   }
+   cursor_visible = false;
+}
+
+
+void InsetFormula::Edit(int x, int y)
+{
+   mathcursor = new MathedCursor(par);
+   LockInset(this);
+   par->Metrics();
+   UpdateInset(this, false);
+   x += par->xo; 
+   y += par->yo; 
+   mathcursor->SetPos(x, y);
+    sel_x = sel_y = 0;
+    sel_flag = false;
+}
+                                      
+void InsetFormula::InsetUnlock()
+{
+   if (mathcursor) {
+       if (mathcursor->InMacroMode()) {
+          mathcursor->MacroModeClose();
+          UpdateLocal();
+       }                                         
+     delete mathcursor;
+   }
+   mathcursor = NULL;
+   UpdateInset(this, false);
+}
+
+// Now a symbol can be inserted only if the inset is locked
+void InsetFormula::InsertSymbol(char const* s)
+{ 
+   if (!s || !mathcursor) return;   
+   mathcursor->Interpret(s);
+   UpdateLocal();
+}
+   
+void InsetFormula::GetCursorPos(int& x, int& y)
+{
+    mathcursor->GetPos(x, y);
+    x -= par->xo; 
+    y -= par->yo;
+}
+
+void InsetFormula::ToggleInsetCursor()
+{
+  if (!mathcursor)
+    return;
+
+  int x, y, asc, desc;
+  mathcursor->GetPos(x, y);
+//  x -= par->xo; 
+  y -= par->yo; 
+    LyXFont font = WhichFont(LM_TC_TEXTRM, LM_ST_TEXT);
+  asc = font.maxAscent();
+  desc = font.maxDescent();
+  
+  if (cursor_visible)
+    HideLockedInsetCursor(x, y, asc, desc);
+  else
+    ShowLockedInsetCursor(x, y, asc, desc);
+  cursor_visible = !cursor_visible;
+}
+
+void InsetFormula::ShowInsetCursor(){
+  if (!cursor_visible){
+    int x, y, asc, desc;
+    if (mathcursor){
+      mathcursor->GetPos(x, y);
+      //  x -= par->xo; 
+      y -= par->yo;
+       LyXFont font = WhichFont(LM_TC_TEXTRM, LM_ST_TEXT);
+       asc = font.maxAscent();
+       desc = font.maxDescent();
+      FitLockedInsetCursor(x, y, asc, desc);
+    }
+    ToggleInsetCursor();
+  }
+}
+
+void InsetFormula::HideInsetCursor(){
+  if (cursor_visible)
+    ToggleInsetCursor();
+}
+
+void InsetFormula::ToggleInsetSelection()
+{
+    if (!mathcursor)
+      return;
+    
+//    int x, y, w, h;
+    //int n;
+    //XPoint * p = 
+    //mathcursor->SelGetArea(n);
+//    XFillPolygon(fl_display, pm, LyXGetSelectionGC(), p, n, Nonconvex, CoordModeOrigin);
+//    x -= par->xo; 
+//    y -= par->yo;
+
+    UpdateInset(this, false);
+      
+}
+
+void InsetFormula::SetDisplay(bool dspf)
+{
+   if (dspf!=disp_flag) {
+      if (dspf) {
+        par->SetType(LM_OT_PAR);
+        par->SetStyle(LM_ST_DISPLAY);
+      } else {
+        if (par->GetType()>=LM_OT_MPAR) { 
+           MathParInset *p = new MathParInset(par);
+           delete par;
+           par = p;
+           if (mathcursor) 
+              mathcursor->SetPar(par); 
+        }
+        par->SetType(LM_OT_MIN);
+        par->SetStyle(LM_ST_TEXT);
+        if (!label.empty() && par->GetType()!=LM_OT_MPARN) {
+                label.clean();
+        }
+      }
+      disp_flag = dspf;
+   }   
+}
+   
+
+
+int InsetFormula::GetNumberOfLabels() const
+{
+   // This is dirty, I know. I'll clean it at 0.13
+   if (par->GetType()==LM_OT_MPARN) {
+       MathMatrixInset *mt = (MathMatrixInset*)par;
+       int nl=0;
+       MathedRowSt const* crow = mt->getRowSt();
+       while (crow) {
+          if (crow->getLabel()) nl++;
+          crow = crow->getNext();
+       }
+       return nl;
+   } else
+   if (!label.empty())
+       return 1;
+   else
+       return 0;
+}
+
+
+LString InsetFormula::getLabel(int il) const
+{
+//#warning This is dirty, I know. Ill clean it at 0.11
+    // Correction, the only way to clean this is with a new kernel: 0.13.
+       if (par->GetType()==LM_OT_MPARN) {
+       LString label;
+       MathMatrixInset *mt = (MathMatrixInset*)par;
+       int nl=0;
+       MathedRowSt const* crow = mt->getRowSt();
+       while (crow) {
+          if (crow->getLabel()) {
+              if (nl==il) {
+                  label = crow->getLabel();
+                  break;
+              }
+              nl++;
+          }
+          crow = crow->getNext();
+       }
+       return label;
+   }
+   return label;
+}
+
+void InsetFormula::UpdateLocal()
+{
+   par->Metrics();  // To inform lyx kernel the exact size 
+                  // (there were problems with arrays).
+   UpdateInset(this);
+}
+   
+
+
+void InsetFormula::InsetButtonRelease(int x, int y, int /*button*/)
+{
+    HideInsetCursor();
+    x += par->xo;
+    y += par->yo;
+    mathcursor->SetPos(x, y);
+    ShowInsetCursor();
+    if (sel_flag) {
+       sel_flag = false; 
+       sel_x = sel_y = 0;
+       UpdateInset(this,false); 
+    }
+}
+
+void InsetFormula::InsetButtonPress(int x, int y, int /*button*/)
+{
+    sel_flag = false;
+    sel_x = x;  sel_y = y; 
+    if (mathcursor->Selection()) {
+       mathcursor->SelClear();
+       UpdateInset(this, false); 
+    }
+}
+
+void InsetFormula::InsetMotionNotify(int x, int y, int /*button*/)
+{
+    if (sel_x && sel_y && abs(x-sel_x)>4 && !sel_flag) {
+       sel_flag = true;
+       HideInsetCursor();
+       mathcursor->SetPos(sel_x + par->xo, sel_y + par->yo);
+       mathcursor->SelStart();
+       ShowInsetCursor(); 
+       mathcursor->GetPos(sel_x, sel_y);
+    } else
+      if (sel_flag) {
+         HideInsetCursor();
+         x += par->xo;
+         y += par->yo;
+         mathcursor->SetPos(x, y);
+         ShowInsetCursor();
+         mathcursor->GetPos(x, y);
+         if (sel_x!=x || sel_y!=y)
+           UpdateInset(this, false); 
+         sel_x = x;  sel_y = y;
+      }
+}
+
+void InsetFormula::InsetKeyPress(XKeyEvent *)
+{
+   lyxerr.debug("Used InsetFormula::InsetKeyPress.", Error::MATHED);
+}
+
+// Special Mathed functions
+bool InsetFormula::SetNumber(bool numbf)
+{
+   if (disp_flag) {
+      short type = par->GetType();
+      bool oldf = (type==LM_OT_PARN || type==LM_OT_MPARN);
+      if (numbf && !oldf) type++;
+      if (!numbf && oldf) type--;
+      par->SetType(type);
+      return oldf;
+   } else
+     return false;
+}
+
+bool InsetFormula::LocalDispatch(int action, char const *arg)
+{
+//   extern char *dispatch_result;
+    MathedTextCodes varcode = LM_TC_MIN;       
+   bool was_macro = mathcursor->InMacroMode();
+   bool sel=false;
+   bool space_on = false;
+   bool was_selection = mathcursor->Selection();
+   bool result = true;
+   static MathSpaceInset* sp=NULL;
+
+   HideInsetCursor();
+   if (mathcursor->Selection() && (fast_selection || mono_video)) ToggleInsetSelection();
+
+    if (mathcursor->getLastCode()==LM_TC_TEX) { 
+       varcode = LM_TC_TEX;
+    }
+   switch (action) {
+       
+    // --- Cursor Movements ---------------------------------------------
+    case LFUN_RIGHTSEL: sel = true;
+    case LFUN_RIGHT:
+      {
+        result = mathcursor->Right(sel);
+        break;
+      }
+    case LFUN_LEFTSEL: sel = true;     
+    case LFUN_LEFT:
+      {
+        result = mathcursor->Left(sel);
+        break;
+      }
+    case LFUN_UPSEL: sel = true;  
+    case LFUN_UP:
+      result = mathcursor->Up(sel);
+      break;
+       
+    case LFUN_DOWNSEL: sel = true;  
+    case LFUN_DOWN:
+      result = mathcursor->Down(sel);
+      break;
+    case LFUN_HOME:
+      mathcursor->Home();
+      break;
+    case LFUN_END:
+      mathcursor->End();
+      break;
+    case LFUN_DELETE_LINE_FORWARD:
+           //LockedInsetStoreUndo(Undo::INSERT);
+           LockedInsetStoreUndo(Undo::DELETE);
+      mathcursor->DelLine();
+      UpdateLocal();
+      break;
+    case LFUN_BREAKLINE:
+      LockedInsetStoreUndo(Undo::INSERT);
+      mathcursor->Insert(' ', LM_TC_CR);
+      par = mathcursor->GetPar();
+      UpdateLocal();     
+      break;
+    case LFUN_TAB:
+      LockedInsetStoreUndo(Undo::INSERT);
+      mathcursor->Insert(0, LM_TC_TAB);
+      //UpdateInset(this);
+      break;     
+    case LFUN_TABINSERT:
+      LockedInsetStoreUndo(Undo::INSERT);
+      mathcursor->Insert('T', LM_TC_TAB);
+      UpdateLocal();
+      break;     
+    case LFUN_BACKSPACE:
+       if (!mathcursor->Left()) 
+        break;
+       
+       if (!mathcursor-> InMacroMode() && mathcursor->pullArg()) {       
+          UpdateInset(this);
+          break;
+       }
+      
+    case LFUN_DELETE:
+           //LockedInsetStoreUndo(Undo::INSERT);
+           LockedInsetStoreUndo(Undo::DELETE);
+      mathcursor->Delete();       
+      UpdateInset(this);
+      break;    
+//    case LFUN_GETXY:
+//      sprintf(dispatch_buffer, "%d %d",);
+//      dispatch_result = dispatch_buffer;
+//      break;
+    case LFUN_SETXY:
+      {
+        int x, y, x1, y1;
+         sscanf(arg, "%d %d", &x, &y);
+        par->GetXY(x1, y1);
+        mathcursor->SetPos(x1+x, y1+y);
+      }
+      break;
+
+      /* cursor selection ---------------------------- */
+
+    case LFUN_PASTE:
+            if (was_macro)
+               mathcursor->MacroModeClose();
+           LockedInsetStoreUndo(Undo::INSERT);
+           mathcursor->SelPaste(); UpdateLocal(); break;
+    case LFUN_CUT:
+           LockedInsetStoreUndo(Undo::DELETE);
+           mathcursor->SelCut(); UpdateLocal(); break;
+    case LFUN_COPY: mathcursor->SelCopy(); break;      
+    case LFUN_HOMESEL:
+    case LFUN_ENDSEL:
+    case LFUN_WORDRIGHTSEL:
+    case LFUN_WORDLEFTSEL:
+      break;
+      
+    // --- accented characters ------------------------------
+
+    case LFUN_UMLAUT: mathcursor->setAccent(LM_ddot); break;
+    case LFUN_CIRCUMFLEX: mathcursor->setAccent(LM_hat); break;
+    case LFUN_GRAVE: mathcursor->setAccent(LM_grave); break;
+    case LFUN_ACUTE: mathcursor->setAccent(LM_acute); break;
+    case LFUN_TILDE: mathcursor->setAccent(LM_tilde); break;
+    case LFUN_MACRON: mathcursor->setAccent(LM_bar); break;
+    case LFUN_DOT: mathcursor->setAccent(LM_dot); break;
+    case LFUN_CARON: mathcursor->setAccent(LM_check); break;
+    case LFUN_BREVE: mathcursor->setAccent(LM_breve); break;
+    case LFUN_VECTOR: mathcursor->setAccent(LM_vec); break; 
+      
+    // Greek mode     
+    case LFUN_GREEK:
+    {
+       if (!greek_kb_flag) {
+         greek_kb_flag = 1;
+         minibuffer->Set(_("Math greek mode on"));
+       } else
+        greek_kb_flag = 0;
+       break;
+    }  
+      
+    // Greek keyboard      
+    case LFUN_GREEK_TOGGLE:
+    {
+       greek_kb_flag = (greek_kb_flag) ? 0: 2;
+       if (greek_kb_flag)
+        minibuffer->Set(_("Math greek keyboard on"));
+       else
+        minibuffer->Set(_("Math greek keyboard off"));
+       break;
+    }  
+   
+      //  Math fonts 
+    case LFUN_BOLD:    mathcursor->setLastCode(LM_TC_BF); break;
+    case LFUN_SANS:  mathcursor->setLastCode( LM_TC_SF); break;
+    case LFUN_EMPH:  mathcursor->setLastCode(LM_TC_CAL); break;
+    case LFUN_ROMAN: mathcursor->setLastCode(LM_TC_RM); break;
+    case LFUN_CODE: mathcursor->setLastCode(LM_TC_TT); break;   
+    case LFUN_DEFAULT:  mathcursor->setLastCode(LM_TC_VAR ) ; break;
+    case LFUN_TEX: 
+    {
+//       varcode = LM_TC_TEX;
+       mathcursor->setLastCode(LM_TC_TEX);
+       minibuffer->Set(_("TeX mode")); 
+       break;
+    }
+
+    case LFUN_MATH_NUMBER:
+    {
+      LockedInsetStoreUndo(Undo::INSERT);
+       if (disp_flag) {
+         short type = par->GetType();
+         bool oldf = (type==LM_OT_PARN || type==LM_OT_MPARN);
+         if (oldf) {
+            type--;
+            if (!label.empty()) {
+                    label.clean();
+            }
+            minibuffer->Set(_("No number"));  
+         } else {
+            type++;
+             minibuffer->Set(_("Number"));
+         }
+         par->SetType(type);
+         UpdateLocal();
+       }
+       break;
+    }
+    
+    case LFUN_MATH_NONUMBER:
+    { 
+       if (par->GetType()==LM_OT_MPARN) {
+//        MathMatrixInset *mt = (MathMatrixInset*)par;
+          //BUG 
+//        mt->SetNumbered(!mt->IsNumbered());
+           
+           mathcursor->setNumbered();
+          UpdateLocal();
+       }
+       break;
+    }
+       
+    case LFUN_MATH_LIMITS:
+    {
+      LockedInsetStoreUndo(Undo::INSERT);
+       if (mathcursor->Limits())
+        UpdateLocal();
+    }
+    case LFUN_MATH_SIZE:
+       if (arg) {
+          latexkeys *l = in_word_set (arg, strlen(arg));
+          int sz = (l) ? l->id: -1;
+          mathcursor->SetSize(sz);
+          UpdateLocal();
+          break;
+       }
+       
+    case LFUN_INSERT_MATH:
+    {
+       LockedInsetStoreUndo(Undo::INSERT);
+       InsertSymbol(arg);
+       break;
+    }
+    
+    case LFUN_INSERT_MATRIX:
+    { 
+      LockedInsetStoreUndo(Undo::INSERT);
+       int k, m, n;
+       char s[80], arg2[80];
+       // This is just so that too long args won't ooze out of s.
+       strncpy(arg2,arg,80); arg2[79]=(char)0;
+       k = sscanf(arg2, "%d %d %s", &m, &n, s);
+       s[79] = (char)0;
+       
+       if (k<1) {
+          m = n = 1;
+       } else if (k==1) {
+          n = 1;
+       }
+       
+       MathMatrixInset *p = new MathMatrixInset(m, n);      
+       if (mathcursor && p) {
+         if (k>2 && (int)strlen(s)>m)
+           p->SetAlign(s[0], &s[1]);
+         mathcursor->Insert(p, LM_TC_ACTIVE_INSET);
+         UpdateLocal();     
+       }
+       break;
+    }
+      
+    case LFUN_MATH_DELIM:
+    {  
+      LockedInsetStoreUndo(Undo::INSERT);
+       char lf[40], rg[40], arg2[40];
+       int ilf = '(', irg = '.';
+       latexkeys *l;
+       LString vdelim("(){}[]./|");
+       
+       if (!arg) break;
+       strncpy(arg2,arg,40); arg2[39]=(char)0;
+       int n = sscanf(arg2, "%s %s", lf, rg);
+       lf[39] = (char)0; rg[39] = (char)0;
+
+       if (n>0) {
+          if (IsDigit(lf[0])) 
+            ilf = atoi(lf);
+          else 
+            if (lf[1]) {
+                l = in_word_set(lf, strlen(lf));
+                // Long words will cause l==0; so check.
+                if(l) ilf = l->id;
+            } else
+            if (vdelim.charPos(lf[0])>=0)
+              ilf = lf[0];
+          
+          if (n>1) {
+              if (IsDigit(rg[0]))
+                irg = atoi(rg);
+              else 
+                if (rg[1]) {
+                    l = in_word_set(rg, strlen(rg));
+                    if(l) irg = l->id;
+                } else
+                if (vdelim.charPos(rg[0])>=0)
+                  irg = rg[0];
+          }
+       }
+       
+       MathDelimInset* p = new MathDelimInset(ilf, irg);
+       mathcursor->Insert(p, LM_TC_ACTIVE_INSET);
+       UpdateLocal();                             
+       break;
+    }
+
+    case LFUN_PROTECTEDSPACE:
+    {
+      LockedInsetStoreUndo(Undo::INSERT);
+       sp = new MathSpaceInset(1); 
+       mathcursor->Insert(sp);
+       space_on = true;
+       UpdateLocal();
+       break;
+    }
+      
+    case LFUN_INSERT_LABEL:
+    {
+      LockedInsetStoreUndo(Undo::INSERT);
+       if (par->GetType()<LM_OT_PAR) break;
+       LString lb = arg;
+       if (lb.empty())
+             lb = LString(askForText(_("Enter new label to insert:")));
+       if (!lb.empty() && lb[0]> ' ') {
+         SetNumber(true);
+         if (par->GetType()==LM_OT_MPARN) {
+             mathcursor->setLabel(lb.c_str());
+//           MathMatrixInset *mt = (MathMatrixInset*)par;
+//           mt->SetLabel(lb);
+         } else {
+                 //if (label.notEmpty()) delete label;
+             label = lb;
+         }
+         UpdateLocal();
+       } else
+              label.clean();
+              //label = NULL;
+       break;
+    }
+    
+    case LFUN_MATH_DISPLAY:
+           //LockedInsetStoreUndo(Undo::INSERT);
+           LockedInsetStoreUndo(Undo::EDIT);
+      SetDisplay(!disp_flag);
+      UpdateLocal();
+      break;
+      
+    // Invalid actions under math mode
+    case LFUN_MATH_MODE:  
+    {
+       if (mathcursor->getLastCode()!=LM_TC_TEXTRM) {
+           minibuffer->Set(_("math text mode"));
+           varcode = LM_TC_TEXTRM;
+       } else {
+           varcode = LM_TC_VAR;
+       }
+       mathcursor->setLastCode(varcode);
+       break; 
+    }
+    case LFUN_UNDO:
+      minibuffer->Set(_("Invalid action in math mode!"));
+      break;
+
+    //------- dummy actions
+    case LFUN_EXEC_COMMAND:
+       minibuffer->ExecCommand(); 
+       break;
+       
+    default:
+      if ((action==-1  || action==LFUN_SELFINSERT) && arg)  {
+        unsigned char c = arg[0];
+        LockedInsetStoreUndo(Undo::INSERT);
+        
+        if (c==' ' && mathcursor->getAccent()==LM_hat) {
+            c = '^';
+            mathcursor->setAccent(0);
+        }
+        if (c==0) {      // Dead key, do nothing 
+            //fprintf(stderr, "deadkey");
+            break;
+        } 
+        if (isalpha(c)) {
+            if (mathcursor->getLastCode()==LM_TC_TEX) { 
+              mathcursor->MacroModeOpen();
+              mathcursor->clearLastCode();
+              varcode = LM_TC_MIN;
+           } else          
+           if (!varcode) {             
+               short f = (mathcursor->getLastCode()) ? 
+                         mathcursor->getLastCode():
+                         (MathedTextCodes)mathcursor->GetFCode();
+              varcode =  MathIsAlphaFont(f) ?  (MathedTextCodes)f:LM_TC_VAR;
+           }
+
+//          fprintf(stderr, "Varcode %d ", varcode);
+           mathcursor->Insert(c, (greek_kb_flag) ? LM_TC_SYMB: varcode);
+           varcode = LM_TC_MIN;
+           if (greek_kb_flag<2) greek_kb_flag = 0;
+        } else 
+          if (strchr("!,:;{}", c) && (varcode==LM_TC_TEX||was_macro)) {
+              mathcursor->Insert(c, LM_TC_TEX);
+              if (c=='{') {
+                  mathcursor->Insert('}', LM_TC_TEX);
+                  mathcursor->Left();
+              }
+              mathcursor->clearLastCode();
+//            varcode = LM_TC_MIN;
+          } else
+          if (c=='_' && varcode==LM_TC_TEX) {
+              mathcursor->Insert(c, LM_TC_SPECIAL);
+              mathcursor->clearLastCode();
+//            varcode = LM_TC_MIN;
+          } else
+           if (('0'<=c && c<='9') && (varcode==LM_TC_TEX||was_macro)) {
+               mathcursor->MacroModeOpen();
+               mathcursor->clearLastCode();
+               mathcursor->Insert(c, LM_TC_MIN);
+           }
+        else
+          if (('0'<=c && c<='9') || strchr(";:!|[]().,?", c)) 
+             mathcursor->Insert(c, LM_TC_CONST);
+        else
+          if (strchr("+/-*<>=", c))
+             mathcursor->Insert(c, LM_TC_BOP);
+        else
+          if (strchr(latex_special_chars, c) && c!='_')
+             mathcursor->Insert(c, LM_TC_SPECIAL);
+        else
+          if (c=='_' || c=='^') {
+              char s[2];
+              s[0] = c;
+              s[1] = 0;
+             mathcursor->Interpret (s);
+          } else
+          if (c==' ') {            
+              if (!varcode) {  
+                  short f = (mathcursor->getLastCode()) ? 
+                             mathcursor->getLastCode():
+                             (MathedTextCodes)mathcursor->GetFCode();
+                  varcode = MathIsAlphaFont(f) ? (MathedTextCodes)f:LM_TC_VAR;
+              }
+             if (varcode==LM_TC_TEXTRM) {
+                 mathcursor->Insert(c, LM_TC_TEXTRM);
+             } else
+             if (was_macro)
+               mathcursor->MacroModeClose();
+             else 
+             if (sp) {
+                int isp = (sp->GetSpace()<5) ? sp->GetSpace()+1: 0;
+                sp->SetSpace(isp);
+                space_on = true;
+             } else {
+                 if (!mathcursor->Pop() && mathcursor->IsEnd()) 
+                   result = false;
+             }
+          } else
+          if (c=='\'') {
+             mathcursor->Insert (c, LM_TC_VAR);
+          } else
+          if (c=='\\') {
+             if (was_macro)
+               mathcursor->MacroModeClose();
+             minibuffer->Set(_("TeX mode")); 
+              mathcursor->setLastCode(LM_TC_TEX);
+          } 
+        UpdateLocal();
+      } else {
+       // fprintf(stderr, "Closed by action %d\n", action);
+       result =  false;
+      }
+   }
+   if (was_macro!=mathcursor->InMacroMode()&&action>=0&&action!=LFUN_BACKSPACE)
+     UpdateLocal();
+   if (sp && !space_on) sp = NULL;
+   if (mathcursor->Selection() || (was_selection && !(fast_selection || mono_video)))
+       ToggleInsetSelection();
+    
+   if (result)
+      ShowInsetCursor();
+   else
+      UnlockInset(this);
+    
+   return result;
+}
+
+
+void
+MathFuncInset::Draw(int x, int y)
+{ 
+       if (name && name[0]>' ') {
+               LyXFont  font = WhichFont(LM_TC_TEXTRM, size);
+               font.setLatex(LyXFont::ON);
+               x += (font.textWidth("I", 1)+3)/4;
+               if (mono_video) {
+                       int a=font.maxAscent(), d=font.maxDescent();
+                       XFillRectangle (fl_display, pm, getGC(gc_copy),
+                                       x, y-a,
+                                       font.textWidth(name, strlen(name)), a+d);
+                       XFlush(fl_display);
+               }
+               font.drawString(name, pm, y, x);
+       }
+}
+
+
+void MathFuncInset::Metrics() 
+{
+       ln = (name) ? strlen(name): 0;
+       LyXFont  font = WhichFont(LM_TC_TEXTRM, size);
+       font.setLatex(LyXFont::ON);
+       width = font.textWidth(name, ln) + font.textWidth("I", 1)/2;
+       mathed_string_height(LM_TC_TEXTRM, size, (byte const *) name,
+                            strlen(name), ascent, descent);
+}
+
+
+void mathedValidate(LaTeXFeatures &features, MathParInset *par)
+{
+    MathedIter it(par->GetData());
+    
+    while (it.OK() && !(features.binom && features.boldsymbol)) {
+       if (it.IsInset()) {
+           if(it.IsActive()) {
+               MathParInset *p = it.GetActiveInset();
+               if (!features.binom && p->GetType()==LM_OT_MACRO && 
+                   strcmp(p->GetName(), "binom")==0) {
+                   features.binom = true;
+               } else {
+                   for (int i=0; i<=p->getMaxArgumentIdx(); i++) {
+                       p->setArgumentIdx(i);
+                       mathedValidate(features, p);
+                   }
+               }
+           } else {
+               MathedInset* p = it.GetInset();
+               if (!features.boldsymbol && p->GetName() &&
+                   strcmp(p->GetName(), "boldsymbol")==0) {
+                   features.boldsymbol = true;
+               }
+           }       
+       }
+       it.Next();
+    }
+}
diff --git a/src/mathed/formula.h b/src/mathed/formula.h
new file mode 100644 (file)
index 0000000..4526e2a
--- /dev/null
@@ -0,0 +1,131 @@
+// -*- C++ -*-
+/*
+ *  File:        formula.h
+ *  Purpose:     Declaration of formula inset
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Allows the edition of math paragraphs inside Lyx. 
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra
+ *
+ *  Version: 0.4, Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#ifndef _INSET_FORMULA_H 
+#define _INSET_FORMULA_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "definitions.h"
+#include "insets/lyxinset.h"
+
+
+class MathParInset;
+class MathedCursor;
+
+///
+class InsetFormula: public UpdatableInset {
+public:
+       ///
+       InsetFormula(bool display=false);
+       ///
+       InsetFormula(MathParInset*);
+       ///
+       ~InsetFormula();
+       ///
+       int Ascent(LyXFont const &font) const;
+       ///
+       int Descent(LyXFont const &font) const;
+       ///
+       int Width(LyXFont const &font) const;
+       ///
+       void Draw(LyXFont font, LyXScreen &scr, int baseline, float &x);
+       ///
+       void Write(FILE *file);
+       ///
+       void Read(LyXLex &lex);
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+       ///
+       void Validate(LaTeXFeatures &) const;
+       ///
+       Inset* Clone();
+       ///
+       Inset::Code LyxCode() const { return Inset::MATH_CODE; }
+       ///
+       LyXFont ConvertFont(LyXFont font) {
+               // We have already discussed what was here
+               font.setLatex(LyXFont::OFF);
+               return font;
+       }
+
+       /// what appears in the minibuffer when opening
+       char const* EditMessage() {return _("Math editor mode");}
+       ///
+       void Edit(int x, int y);
+       ///
+       bool Display() const { return (disp_flag) ? true: false; }
+       ///
+       void SetDisplay(bool);
+       ///
+       void ToggleInsetCursor();
+       ///
+       void ShowInsetCursor();
+       ///
+       void HideInsetCursor();
+       ///
+       void GetCursorPos(int&, int&);
+       ///
+       void ToggleInsetSelection();
+       ///
+       void InsetButtonPress(int x, int y, int button);
+       ///
+       void InsetButtonRelease(int x, int y, int button);
+       ///
+       void InsetKeyPress(XKeyEvent *ev);
+       ///
+       void InsetMotionNotify(int x, int y, int state);
+       ///
+       void InsetUnlock();
+   
+       ///  To allow transparent use of math editing functions
+       virtual bool LocalDispatch(int, char const*);
+    
+       ///
+       void InsertSymbol(char const*);
+       ///
+       bool SetNumber(bool);
+       ///
+       int GetNumberOfLabels() const;
+       ///
+       LString getLabel(int) const;
+   
+protected:
+       void UpdateLocal();
+       MathParInset* par;
+       static MathedCursor* mathcursor;
+    
+private:
+       bool disp_flag;
+       //char *label;
+       LString label;
+};
+
+
+// If a mathinset exist at cursor pos, just lock it.
+// Otherwise create a new one, and lock it.
+bool OpenMathInset(Buffer *);
+
+#endif
+
diff --git a/src/mathed/formulamacro.C b/src/mathed/formulamacro.C
new file mode 100644 (file)
index 0000000..f25e190
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ *  File:        formula.h
+ *  Purpose:     Implementation of formula inset
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Allows the edition of math paragraphs inside Lyx. 
+ *
+ *  Copyright: (c) 1996, 1997 Alejandro Aguilar Sierra
+ *
+ *  Version: 0.4, Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+#include <stdlib.h>
+
+#ifdef __GNUG__
+#pragma implementation "formulamacro.h"
+#endif
+
+#include "formulamacro.h"
+#include "commandtags.h"
+#include "math_cursor.h"
+#include "math_parser.h"
+#include "math_macro.h"
+#include "lyx_main.h"
+#include "bufferlist.h"
+#include "lyx_cb.h"
+#include "BufferView.h"
+#include "lyxscreen.h"
+#include "lyxdraw.h"
+#include "gettext.h"
+
+
+InsetFormulaMacro::InsetFormulaMacro():
+        InsetFormula(true)
+{
+    tmacro = 0;
+    opened = false;
+}
+
+
+InsetFormulaMacro::InsetFormulaMacro(LString nm, int na, bool /*e*/):
+        InsetFormula(true), name(nm)
+{
+    tmacro = MathMacroTable::mathMTable.getTemplate(name.c_str());
+    if (!tmacro) {
+       tmacro = new MathMacroTemplate(name.c_str(), na);
+       MathMacroTable::mathMTable.addTemplate(tmacro);
+    }
+    opened = false;
+}
+
+
+InsetFormulaMacro::~InsetFormulaMacro()
+{
+    par = 0;
+}
+
+
+Inset* InsetFormulaMacro::Clone()
+{
+   InsetFormulaMacro* f = new InsetFormulaMacro(name);
+   return (Inset*)f;
+}
+
+
+void InsetFormulaMacro::Write(FILE *file)
+{
+    fprintf(file, "FormulaMacro ");
+    Latex(file, 0);
+}
+
+
+int InsetFormulaMacro::Latex(FILE *file, signed char /*fragile*/)
+{
+    int ret = 1;
+    tmacro->WriteDef(file);
+    return ret;
+}
+
+
+int InsetFormulaMacro::Latex(LString &file, signed char /*fragile*/)
+{
+    int ret = 1;
+    tmacro->WriteDef(file);
+    return ret;
+}
+
+
+int InsetFormulaMacro::Linuxdoc(LString &/*file*/)
+{
+    return 0;
+}
+
+
+int InsetFormulaMacro::DocBook(LString &/*file*/)
+{
+    return 0;
+}
+
+
+void InsetFormulaMacro::Read(LyXLex &lex)
+{
+    FILE *file = lex.getFile();
+    mathed_parser_file(file, lex.GetLineNo());   
+    mathed_parse(0, 0, (MathParInset **)&tmacro);
+    
+    // Update line number
+    lex.setLineNo(mathed_parser_lineno());
+    
+    MathMacroTable::mathMTable.addTemplate(tmacro);
+    name = tmacro->GetName();
+    par = tmacro;
+}
+
+
+int InsetFormulaMacro::Ascent(LyXFont const &f) const
+{
+    if (opened) {
+       tmacro->update();
+       return InsetFormula::Ascent(f);
+    }
+    return f.maxAscent()+3;
+}
+
+
+int InsetFormulaMacro::Descent(LyXFont const &f) const
+{
+    if (opened) {
+       tmacro->update();
+       return InsetFormula::Descent(f);
+    }
+    return f.maxDescent()+1;
+}
+
+
+int InsetFormulaMacro::Width(LyXFont const &f) const
+{
+    if (opened) {
+       tmacro->update();
+       return InsetFormula::Width(f);
+    }
+    LString ilabel(_("Macro: "));
+    ilabel += name;
+    return 6 + f.stringWidth(ilabel);
+}
+
+
+void InsetFormulaMacro::Draw(LyXFont font, LyXScreen &scr,
+                            int baseline, float &x)
+{
+    tmacro->update();
+    if (opened) {
+       tmacro->setEditMode(true);
+       InsetFormula::Draw(font, scr, baseline, x);
+       tmacro->setEditMode(false);     
+    } else {
+       font.setColor(LyXFont::MATH);
+       
+       int y=baseline - Ascent(font)+1;
+       int w=Width(font) - 2, h=(Ascent(font)+Descent(font)-2);
+
+       
+       scr.fillRectangle(gc_lighted, int(x), y,  w,  h);
+       scr.drawFrame(FL_UP_FRAME, int(x), y, w, h, FL_BLACK, -1); 
+       
+        LString s(_("Macro: "));
+        s += name;
+        scr.drawString(font, s, baseline, int(x +2));
+       x +=  Width(font) - 1;
+    }
+}
+
+
+void InsetFormulaMacro::Edit(int x, int y)
+{
+    opened = true;
+    par = (MathParInset*)tmacro->Clone();
+    InsetFormula::Edit(x, y);
+}
+
+              
+void InsetFormulaMacro::InsetUnlock()
+{
+    opened = false;
+    LyxArrayBase *tarray = tmacro->GetData();
+    MathedIter it(tarray);
+    it.Clear();
+    tmacro->SetData(par->GetData());
+    tmacro->setEditMode(false);
+    InsetFormula::InsetUnlock();
+}
+
+
+bool InsetFormulaMacro::LocalDispatch(int action, char const *arg)
+{
+    if (action==LFUN_MATH_MACROARG) {
+       int i = atoi(arg) - 1;
+       if (i>=0 && i<tmacro->getNoArgs()) {
+           mathcursor->Insert(tmacro->getMacroPar(i), LM_TC_INSET);
+           InsetFormula::UpdateLocal();
+       }
+       
+       return true;
+    }
+    tmacro->setEditMode(true);
+    tmacro->Metrics();
+    bool result = InsetFormula::LocalDispatch(action, arg);
+    tmacro->setEditMode(false);
+    
+    return result;
+}
diff --git a/src/mathed/formulamacro.h b/src/mathed/formulamacro.h
new file mode 100644 (file)
index 0000000..42e929e
--- /dev/null
@@ -0,0 +1,86 @@
+// -*- C++ -*-
+/*
+ *  File:        formula.h
+ *  Purpose:     Declaration of formula inset
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Allows the edition of math paragraphs inside Lyx. 
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra
+ *
+ *  Version: 0.4, Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#ifndef _INSET_FORMULA_MACRO_H 
+#define _INSET_FORMULA_MACRO_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "formula.h"
+
+
+
+
+class MathMacroTemplate;
+
+
+///
+class InsetFormulaMacro: public InsetFormula {
+public:
+       ///
+       InsetFormulaMacro();
+       ///
+       InsetFormulaMacro(LString name, int na=0, bool env=false);
+       ///
+       ~InsetFormulaMacro();
+       ///
+       int Ascent(LyXFont const &font) const;
+       ///
+       int Descent(LyXFont const &font) const;
+       ///
+       int Width(LyXFont const &font) const;
+       ///
+       void Draw(LyXFont font, LyXScreen &scr, int baseline, float &x);
+       ///
+       void Read(LyXLex &lex);
+        ///
+       void Write(FILE *file);
+       ///
+//     void Read(LyXLex &lex);
+       ///
+       int Latex(FILE *file, signed char fragile);
+       ///
+       int Latex(LString &file, signed char fragile);
+       ///
+       int Linuxdoc(LString &file);
+       ///
+       int DocBook(LString &file);
+       ///
+       Inset* Clone();
+
+       /// what appears in the minibuffer when opening
+       char const* EditMessage() {return "Math macro editor mode";}
+       ///
+       void Edit(int x, int y);
+       ///
+       void InsetUnlock();
+   
+       bool LocalDispatch(int, char const*);
+   
+protected:
+       void UpdateLocal();
+private:
+        bool opened;
+        LString name; 
+        class MathMacroTemplate* tmacro;
+
+};
+
+
+#endif
+
diff --git a/src/mathed/math_cursor.C b/src/mathed/math_cursor.C
new file mode 100644 (file)
index 0000000..7597f80
--- /dev/null
@@ -0,0 +1,1014 @@
+/*
+ *  File:        math_cursor.C
+ *  Purpose:     Interaction for mathed
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Math interaction for a WYSIWYG math editor.
+ *
+ *  Dependencies: Xlib, XForms
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta, Mathed & Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+#include <config.h>
+#include FORMS_H_LOCATION
+#include "math_inset.h"
+#include "math_parser.h"
+#include "math_cursor.h"
+#include "math_macro.h"
+#include "math_root.h"
+#include "error.h"
+
+extern void mathed_set_font(short type, int style);
+
+extern GC canvasGC, mathGC, latexGC, cursorGC, mathFrameGC;
+
+static LyxArrayBase *selarray=0;
+
+inline bool IsAlpha(char c)
+{
+   return ('A' <= c  && c<='Z' || 'a' <= c  && c<='z');
+}
+
+// This was very smaller, I'll change it later 
+inline bool IsMacro(short token, int id)
+{
+   return (token!=LM_TK_STACK && token!=LM_TK_FRAC && token!=LM_TK_SQRT && token!=LM_TK_WIDE &&
+          token!=LM_TK_SPACE && token!=LM_TK_DOTS &&  token!=LM_TK_FUNCLIM &&
+          token!=LM_TK_BIGSYM && token!=LM_TK_ACCENT && 
+          !(token==LM_TK_SYM && id<255));
+}
+
+// Yes, mathed isn't using LString yet.
+inline char *strnew(char const* s)
+{
+    char *s1 = new char[strlen(s)+1];
+    strcpy(s1, s);
+    return s1;
+}
+
+
+
+#define MAX_STACK_ITEMS 32
+
+struct MathStackXIter {
+    
+    int i, imax;
+    MathedXIter *item;
+    
+    MathStackXIter(int n=MAX_STACK_ITEMS): imax(n) {
+       item = new MathedXIter[imax];
+       i = 0;
+    }
+    
+    MathStackXIter(MathStackXIter &stk);
+    
+    ~MathStackXIter() {
+       delete[] item;
+    }
+   
+    void push(MathedXIter** a) {
+       *a = &item[i++];
+    }
+      
+    MathedXIter* pop() {
+       i--;
+       return &item[i-1];
+    }
+      
+    MathedXIter* Item(int idx) {
+       return (idx+1 <= i) ? &item[i-idx-1]: (MathedXIter*)NULL;
+    }
+
+    void Reset() {
+       i = 0;
+    }
+   
+    int Full() {
+       return (i>=MAX_STACK_ITEMS);
+    }
+   
+    int Empty() {
+       return (i<=1);
+    }
+
+    int Level() { return i; } 
+    
+} mathstk, *selstk=0;
+
+
+MathStackXIter::MathStackXIter(MathStackXIter &stk) {
+    imax = stk.imax;
+    item = new MathedXIter[imax];
+    i = stk.i;
+    for (int k=0; k<i; k++) {
+        item[k].SetData(stk.item[k].getPar());
+        item[k].GoBegin();
+        item[k].goPosAbs(stk.item[k].getPos());
+    }
+}
+
+
+/***----------------  Mathed Cursor  ---------------------------***/
+  
+MathedCursor::MathedCursor(MathParInset *p) // : par(p)
+{
+    accent = 0;
+    anchor = 0;
+    lastcode = LM_TC_MIN;
+    SetPar(p);
+//    selarray = NULL;     
+    if (!MathMacroTable::built)
+       MathMacroTable::mathMTable.builtinMacros();
+}
+
+
+void MathedCursor::SetPar(MathParInset *p)
+{
+   win = 0;
+   is_visible = False;
+   macro_mode = false;
+   selection = false; // not SelClear() ?
+   mathstk.Reset();
+   mathstk.push(&cursor);
+   par = p;
+   cursor->SetData(par);
+}
+
+void MathedCursor::Draw(long unsigned pm, int x, int y)
+{
+//    fprintf(stderr, "Cursor[%d %d] ", x, y);
+    win = pm;    // win = (mathedCanvas) ? mathedCanvas: pm;
+    par->Metrics();
+    int w = par->Width()+2, a = par->Ascent()+1, h = par->Height()+1;
+    if (par->GetType()>LM_OT_PAR) { a += 4;  h += 8; }
+    
+   if (!canvasGC) mathed_set_font(LM_TC_VAR, 1);
+    //   XFillRectangle(fl_display,pm, canvasGC, x, y-a, w, h);
+    XDrawRectangle(fl_display,pm, mathFrameGC, x-1, y-a, w, h);
+    XFlush(fl_display);
+    MathParInset::pm = pm;
+    par->Draw(x, y);
+    cursor->Adjust();
+}
+
+
+void MathedCursor::Redraw()
+{  
+   lyxerr.debug("Mathed: Redrawing!", Error::MATHED);
+   par->Metrics();
+   int w = par->Width(), h = par->Height();
+   int x, y;
+   par->GetXY(x, y);
+   mathed_set_font(LM_TC_VAR, 1);
+   XFillRectangle(fl_display, win,canvasGC,x, y-par->Ascent(), w, h);
+   XFlush(fl_display);
+    MathParInset::pm = win;
+   par->Draw(x, y);
+}
+
+bool MathedCursor::Left(bool sel)
+{
+   if (macro_mode) {
+      MacroModeBack();
+      return true;
+   }
+    clearLastCode();
+   if (sel && !selection) SelStart();
+   if (!sel && selection) SelClear();
+   bool result = cursor->Prev();
+   if (!result && !mathstk.Empty()) {
+      cursor = mathstk.pop();
+      cursor->Adjust();
+      result = true;
+      if (selection) SelClear();
+   } else  
+     if (result && cursor->IsActive()) {
+       if (cursor->IsScript()) {
+          cursor->Prev();
+          if (!cursor->IsScript())
+            cursor->Next();
+          cursor->Adjust(); 
+          return true;
+       }
+       if (!selection) {
+           MathParInset *p = cursor->GetActiveInset();
+           if (!p)
+             return result;
+               
+           p->setArgumentIdx(p->getMaxArgumentIdx());
+           mathstk.push(&cursor);
+           cursor->SetData(p);
+           cursor->GoLast();
+       }
+     } 
+   return result;  
+}
+
+// Leave the inset
+bool MathedCursor::Pop()
+{
+   if (!mathstk.Empty()) {
+      cursor = mathstk.pop();
+      cursor->Next(); 
+      return true;
+   }
+   return false;
+}
+
+// Go to the inset 
+bool MathedCursor::Push()
+{ 
+   if (cursor->IsActive()) {
+      MathParInset *p = cursor->GetActiveInset();
+       if (!p) return false;
+      mathstk.push(&cursor);
+      cursor->SetData(p);
+      return true;
+   }
+   return false;
+}  
+
+bool MathedCursor::Right(bool sel)
+{  
+   if (macro_mode) {
+      MacroModeClose();
+      return true;
+   } 
+    clearLastCode();
+   if (sel && !selection) SelStart();
+   if (!sel && selection) SelClear();
+   bool result = false;
+   if (cursor->IsActive()) {
+      if (cursor->IsScript()) {
+        cursor->Next();
+        // A script may be followed by another script
+        if (cursor->IsScript()) 
+          cursor->Next();
+        return true;
+      }
+      if (!selection) { 
+         MathParInset *p = cursor->GetActiveInset();
+         if (!p) {
+             fprintf(stderr, "Math error: Inset expected.\n");
+             return cursor->Next();
+         }
+         p->setArgumentIdx(0);
+         mathstk.push(&cursor);
+         cursor->SetData(p);
+         result = true;
+      } else
+        result = cursor->Next();
+   } else {
+       if (cursor->GetChar()!=LM_TC_CR)
+        result = cursor->Next();
+     if (!result && !mathstk.Empty()) {
+       cursor = mathstk.pop();
+       cursor->Next();
+        cursor->Adjust();
+       result = true;
+       if (selection) SelClear();
+     }
+   }
+   return result;
+}
+
+
+void MathedCursor::SetPos(int x, int y)
+{
+    int xp = 0;
+    
+    if (macro_mode) MacroModeClose();
+    lastcode = LM_TC_MIN;
+    mathstk.Reset();
+    mathstk.push(&cursor);
+    cursor->SetData(par);
+    cursor->fitCoord(x, y);
+    while (cursor->GetX()<x && cursor->OK()) {
+       if (cursor->IsActive()) {
+           MathParInset *p = cursor->GetActiveInset();
+           if (p->Inside(x, y)) {
+               p->SetFocus(x, y);
+               mathstk.push(&cursor);
+               cursor->SetData(p);
+               cursor->fitCoord(x, y);
+               continue;
+           }
+       }
+       xp = cursor->GetX();
+       cursor->ipush();
+       if (!cursor->Next() && !Pop()) 
+         break;
+    }
+    if (x-xp < cursor->GetX()-x) cursor->ipop();
+    cursor->Adjust();
+}
+   
+
+void MathedCursor::Home()
+{
+   if (macro_mode) MacroModeClose();
+    clearLastCode();
+   mathstk.Reset();
+   mathstk.push(&cursor);
+   cursor->GoBegin();
+}
+
+void MathedCursor::End()
+{
+   if (macro_mode) MacroModeClose();
+    clearLastCode();
+   mathstk.Reset();
+   mathstk.push(&cursor);
+   cursor->GoLast();
+}
+
+void MathedCursor::Insert(byte c, MathedTextCodes t)
+{  
+   if (selection) SelDel();
+   
+   if (t==LM_TC_MIN)
+      t = lastcode;
+    
+   if (macro_mode && !(MathIsAlphaFont(t) || t==LM_TC_MIN))
+      MacroModeClose();
+       
+   if (t==LM_TC_CR) {
+      MathParInset *p= cursor->p;
+      if (p==par && p->GetType()<LM_OT_MPAR && p->GetType()>LM_OT_MIN) {
+        MathMatrixInset* mt = new MathMatrixInset(3, 0);
+        mt->SetAlign(' ', "rcl");
+        mt->SetStyle(LM_ST_DISPLAY);
+        mt->SetType((p->GetType()==LM_OT_PARN) ? LM_OT_MPARN: LM_OT_MPAR);
+        mt->SetData(p->GetData());
+        p->SetData(0);//BUG duda
+        delete p;
+        par = mt;
+        p = mt;
+        p->Metrics();
+        int pos = cursor->getPos();
+        cursor->SetData(par);
+        cursor->goPosAbs(pos);
+      }      
+      if (p &&  p->Permit(LMPF_ALLOW_CR)) {
+         cursor->addRow();
+      }
+   } else
+   if (t==LM_TC_TAB) {
+      MathParInset *p = cursor->p;
+      if (p &&  p->Permit(LMPF_ALLOW_TAB)) {
+         if (c) {
+             cursor->Insert(c, t);
+             cursor->checkTabs();
+         } else
+           cursor->goNextColumn();
+      } else // Navigate between arguments
+        if (p && p->GetType()==LM_OT_MACRO) {
+            if (p->getArgumentIdx() < p->getMaxArgumentIdx()) {
+                p->setArgumentIdx(p->getArgumentIdx()+1);
+                cursor->SetData(p);
+                return;
+            }
+        }       
+   } else {
+       if (macro_mode) {
+          if (MathIsAlphaFont(t) || t==LM_TC_MIN) {
+              MacroModeInsert(c);
+              return;
+          }
+       } 
+       if (accent) {
+              doAccent(c, t);
+       } else 
+        cursor->Insert(c, t);
+       lastcode = t;
+       
+       return;
+   }
+    clearLastCode();
+}
+
+void MathedCursor::Insert(MathedInset* p, int t)
+{
+   if (macro_mode) MacroModeClose();
+   if (selection) {
+      if (MathIsActive(t)) {
+        SelCut();
+        ((MathParInset*)p)->SetData(selarray);
+      } else
+       SelDel();
+   }
+         
+   if (mathstk.i<MAX_STACK_ITEMS-1) {
+       
+       if (accent && !MathIsActive(t)) {              
+              doAccent(p);
+       } else {
+          cursor->Insert(p, t);
+       
+          if (MathIsActive(t)) {
+              cursor->Prev();
+              Push();
+          }
+       }
+     
+   } else
+     fprintf(stderr, "Math error: Full stack.\n");
+}
+
+void MathedCursor::Delete() 
+{   
+   if (macro_mode) return;
+   if (selection) {
+      SelDel();
+      return;
+   }
+   if (cursor->Empty() && !mathstk.Empty()) {
+      cursor = mathstk.pop();
+   } 
+//   if (cursor->GetChar()!=LM_TC_TAB)
+    cursor->Delete();
+    cursor->checkTabs();
+}
+
+void MathedCursor::DelLine()
+{  
+    if (macro_mode) MacroModeClose();
+    if (selection) {
+       SelDel();
+       return;
+    }
+    MathParInset *p= cursor->p;
+    if (p &&  (p->GetType()<=LM_OT_MATRIX && p->GetType()>=LM_OT_MPAR)) {
+       cursor->delRow();
+    }
+}
+
+
+bool MathedCursor::Up(bool sel)
+{
+    bool result = false;
+   
+    if (macro_mode) MacroModeClose();
+    
+    if (sel && !selection) SelStart();
+    if (!sel && selection) SelClear();
+    
+    MathParInset *p;
+
+    if (cursor->IsScript()) {
+       char cd = cursor->GetChar();
+       if (MathIsUp(cd)) {
+           Push();
+           return true;
+       } else {
+           // A subscript may be followed by a superscript
+           cursor->ipush();
+           cursor->Next();
+           if (MathIsUp(cursor->GetChar())) {
+               Push();
+               return true;
+           } else  // return to the previous state
+             cursor->ipop();
+      }
+   }    
+     
+    result = cursor->Up();
+    if (!result && cursor->p) {
+       p = cursor->p;   
+   
+       if (p->GetType()==LM_OT_SCRIPT) {
+           MathedXIter *cx = mathstk.Item(1);
+           bool is_down = (cx->GetChar()==LM_TC_DOWN);
+           cursor = mathstk.pop();
+           cursor->Next();
+           result =  (is_down) ? true: Up();
+       } else {
+           result = (p->getArgumentIdx() > 0);
+           if (result) {
+               p->setArgumentIdx(p->getArgumentIdx()-1);
+               cursor->SetData(p);
+           }
+       }
+       if (!result && !mathstk.Empty()) {
+           cursor = mathstk.pop();
+           return Up();
+       }     
+    }
+    return result;
+}
+
+
+bool MathedCursor::Down(bool sel)
+{
+    bool result = false;
+   
+    if (macro_mode) MacroModeClose();
+    
+    if (sel && !selection) SelStart();
+    if (!sel && selection) SelClear();
+//    if (selection) SelClear();
+
+    MathParInset *p;
+
+    if (cursor->IsScript()) {
+       char cd = cursor->GetChar(); 
+       if (MathIsDown(cd)) {
+           Push();
+           return true;
+       } else {
+           // A superscript may be followed by a subscript
+           cursor->ipush();
+           cursor->Next();
+           if (MathIsDown(cursor->GetChar())) {
+               Push();
+               return true;
+           } else
+             cursor->ipop();
+      }
+   }
+     
+    result = cursor->Down();
+    if (!result && cursor->p) {
+       p= cursor->p;   
+       if (p->GetType()==LM_OT_SCRIPT) {
+           MathedXIter *cx = mathstk.Item(1);
+           bool is_up = (cx->GetChar()==LM_TC_UP);
+           cursor = mathstk.pop();
+           cursor->Next();
+           result = (is_up) ? true: Down();
+       } else {
+           result = (p->getArgumentIdx() < p->getMaxArgumentIdx());
+           if (result) {
+               p->setArgumentIdx(p->getArgumentIdx()+1);
+               cursor->SetData(p);
+           }
+       }
+       if (!result && !mathstk.Empty()) {
+           cursor = mathstk.pop();
+           return Down(sel);
+       }    
+    }
+    return result;
+}
+
+bool MathedCursor::Limits()
+{
+   if (cursor->IsInset()) {
+      MathedInset *p = cursor->GetInset();
+      bool ol = p->GetLimits();
+      p->SetLimits(!ol);
+      return (ol!=p->GetLimits());
+   }
+   return false;
+}
+
+void MathedCursor::SetSize(short size)
+{
+    MathParInset *p = cursor->p;
+    p->UserSetSize(size);
+    cursor->SetData(p);
+}
+
+
+void MathedCursor::setLabel(char const* label)
+{  // ugly hack and possible bug
+    if (!cursor->setLabel(strnew(label)))
+      fprintf(stderr, "MathErr: Bad place to set labels.");
+}
+
+
+void MathedCursor::setNumbered()
+{  // another ugly hack
+    MathedRowSt *crow = cursor->crow;
+    if (!crow) return;    
+    crow->setNumbered(!crow->isNumbered());
+}
+
+
+void MathedCursor::Interpret(char const *s)
+{
+    MathedInset *p = 0;
+    latexkeys *l = 0;   
+    MathedTextCodes tcode = LM_TC_INSET;
+    
+    if (s[0]=='^' || s[0]=='_') {
+       char c = cursor->GetChar();
+       if (MathIsUp(c) && s[0]=='^' || MathIsDown(c) && s[0]=='_') {
+           Push();
+           return;
+       } else // A script may be followed by a script
+         if (MathIsUp(c)  || MathIsDown(c)) { 
+           cursor->ipush();
+           cursor->Next();
+           c = cursor->GetChar();
+           if (MathIsUp(c) && s[0]=='^' || MathIsDown(c) && s[0]=='_') {
+               Push();
+               return;
+           } else
+             cursor->ipop();
+       }
+       p = new MathParInset(LM_ST_SCRIPT, "", LM_OT_SCRIPT);
+       Insert (p, (s[0]=='_') ? LM_TC_DOWN: LM_TC_UP); 
+       return;
+    } else   
+      if (s[0]=='!' || s[0]==','  || s[0]==':' || s[0]==';') {
+         int sp = ((s[0]==',') ? 1:((s[0]==':') ? 2:((s[0]==';') ? 3: 0))); 
+         p = new MathSpaceInset(sp);
+         Insert(p);
+         return;
+      } else  
+      l = in_word_set (s, strlen(s));
+    
+    if (!l) {       
+       p = MathMacroTable::mathMTable.getMacro(s);
+       if (!p) {
+           lyxerr.debug(LString("Macro2 ") + s + ' ' 
+                        + (long)tcode, Error::MATHED);
+           if (strcmp("root", s)==0) {
+               p = new MathRootInset();
+               tcode = LM_TC_ACTIVE_INSET;
+           } else
+             p = new MathFuncInset(s, LM_OT_UNDEF);
+       } else {
+           tcode = ((MathMacro*)p)->getTCode();
+           fprintf(stderr, "Macro2 %s %d  ", s, tcode);
+       }
+    } else {
+       MathedInsetTypes fractype = LM_OT_FRAC;
+       switch (l->token) {
+        case LM_TK_BIGSYM:
+        {
+            p = new MathBigopInset(l->name, l->id);
+            break;
+        }
+        case LM_TK_SYM:
+        {                   
+            if (l->id<255) {
+                Insert((byte)l->id, MathIsBOPS(l->id) ? 
+                       LM_TC_BOPS: LM_TC_SYMB);            
+            } else {
+                p = new MathFuncInset(l->name);
+            }
+            break;
+        }  
+        case LM_TK_STACK:
+           fractype = LM_OT_STACKREL;
+           lyxerr.debug(" i:stackrel ", Error::MATHED);
+        case LM_TK_FRAC: 
+        {       
+            p = new MathFracInset(fractype);
+            tcode = LM_TC_ACTIVE_INSET;
+            break;
+        }
+        case LM_TK_SQRT: 
+        {       
+            p = new MathSqrtInset; 
+            tcode = LM_TC_ACTIVE_INSET;
+            break;
+        }
+        case LM_TK_WIDE: 
+        {       
+            p = new MathDecorationInset(l->id); 
+            tcode = LM_TC_ACTIVE_INSET;
+            break;
+        } 
+        case  LM_TK_FUNCLIM:
+        {
+            p = new MathFuncInset(l->name, LM_OT_FUNCLIM);
+            break;
+        }
+        case LM_TK_SPACE:
+        {
+            p = new MathSpaceInset(l->id);
+            break;
+        }         
+        case LM_TK_DOTS: 
+        {
+            p = new MathDotsInset(l->name, l->id);
+            break;
+        }         
+        case LM_TK_ACCENT:
+           setAccent(l->id);
+           break;
+        case LM_TK_MACRO:
+           p = MathMacroTable::mathMTable.getMacro(s);
+           tcode = ((MathMacro*)p)->getTCode();
+           lyxerr.debug(LString("Macro ") + s + ' ' 
+                        + (long)tcode, Error::MATHED);
+           break;
+        default:
+        {
+            p = new MathFuncInset(l->name);
+            break;
+        }
+       }
+    }
+    if (p) {
+       Insert(p, tcode);
+       par->Metrics();
+    }
+}
+
+
+bool MathedCursor::pullArg()
+{ 
+    if (cursor->IsActive()) {
+       MathParInset *p = cursor->GetActiveInset();
+       if (!p) { 
+           return false;
+       }
+       LyxArrayBase *a = p->GetData();
+       p->SetData(0);
+       Delete();
+       if (a) {
+           cursor->Merge(a);
+           cursor->Adjust();
+       }
+       
+       return true;
+    }
+    return false;
+}  
+
+void MathedCursor::MacroModeOpen()
+{
+   if (!macro_mode)  {
+      macroln = 0;
+      macrobf[0] = '\0';
+      imacro = new MathFuncInset(&macrobf[0]);
+      Insert (imacro);
+      macro_mode = true;
+   } else
+     fprintf(stderr, "Mathed Warning: Already in macro mode\n");
+}
+
+void MathedCursor::MacroModeClose()
+{
+   if (macro_mode)  {
+      macro_mode = false;
+      latexkeys *l = in_word_set(macrobf, macroln);
+      if (macroln>0 && (!l || (l && IsMacro(l->token, l->id))) && 
+         !MathMacroTable::mathMTable.getMacro(macrobf)) {
+         if (!l) {
+           imacro->SetName(strnew(macrobf));
+             // This guarantees that the string will be removed by destructor
+           imacro->SetType(LM_OT_UNDEF);
+         } else 
+           imacro->SetName(l->name);
+      } else {
+         Left();
+        imacro->SetName(NULL);
+        if (cursor->GetInset()->GetType()==LM_OT_ACCENT) {
+            setAccent(((MathAccentInset*)cursor->GetInset())->getAccentCode());
+        }
+        cursor->Delete();
+        if (l || MathMacroTable::mathMTable.getMacro(macrobf)) {
+           Interpret(macrobf);
+        }
+      }
+      imacro = NULL;
+   }  
+}
+
+void MathedCursor::MacroModeBack()
+{
+   if (macro_mode) {
+     if (macroln>0) {
+       macrobf[--macroln] = '\0';
+       imacro->Metrics();
+     } else 
+       MacroModeClose();
+   } else
+     fprintf(stderr, "Mathed Warning: we are not in macro mode\n");
+}
+
+void MathedCursor::MacroModeInsert(char c)
+{
+   if (macro_mode) {
+      macrobf[macroln+1] = macrobf[macroln];
+      macrobf[macroln++] = c;
+      imacro->Metrics();
+   } else
+     fprintf(stderr, "Mathed Warning: we are not in macro mode\n");
+}
+
+void MathedCursor::SelCopy()
+{
+    if (selection) {
+       int p1, p2;
+       p1 = (cursor->pos < selpos) ? cursor->pos: selpos;
+       p2 = (cursor->pos > selpos) ? cursor->pos: selpos;
+       selarray = cursor->Copy(p1, p2);
+       cursor->Adjust();
+       SelClear();
+    }
+}
+
+void MathedCursor::SelCut()
+{   
+    if (selection) {
+       if (cursor->pos==selpos) return;
+       
+       int p1, p2;
+       p1 = (cursor->pos < selpos) ? cursor->pos: selpos;
+       p2 = (cursor->pos > selpos) ? cursor->pos: selpos;
+       selarray = cursor->Copy(p1, p2);
+       cursor->Clean(selpos);
+       cursor->Adjust();
+       SelClear();
+    }
+}
+
+void MathedCursor::SelDel()
+{
+//    fprintf(stderr, "Deleting sel ");
+    if (selection) {    
+       if (cursor->pos==selpos) return;
+       cursor->Clean(selpos);
+       cursor->Adjust();
+       SelClear();
+    }
+}
+
+void MathedCursor::SelPaste()
+{
+//    fprintf(stderr, "paste %p %d ", selarray, cursor->pos);
+    if (selection) SelDel();
+    if (selarray) {
+       cursor->Merge(selarray);
+       cursor->Adjust();
+    }
+}
+
+void MathedCursor::SelStart()
+{
+   lyxerr.debug("Starting sel ",Error::MATHED);
+    if (!anchor) {
+       selpos = cursor->pos;   
+       selstk = new MathStackXIter(mathstk); 
+       anchor = selstk->Item(-1); 
+       anchor->SetData(cursor->p);
+       anchor->GoBegin();
+       anchor->goPosAbs(selpos);
+       selection = true;
+       
+    }
+}
+
+void MathedCursor::SelClear()
+{   
+   lyxerr.debug("Clearing sel ", Error::MATHED);
+    selection = false;
+    delete selstk;
+    selstk = 0;
+    anchor = 0;
+}
+
+
+
+// Anchor position must be at the same level that stack.
+void MathedCursor::SelBalance()
+{
+    int d = mathstk.Level() - selstk->Level();
+
+    // If unbalanced, balance them
+    while (d != 0) {
+        if (d<0) {
+//            fprintf(stderr, "b[%d %d %d %d]", mathstk.Level(), selstk->Level(), anchor->GetX(), cursor->GetX());
+            anchor = selstk->pop();
+            if (anchor->GetX() >= cursor->GetX()) 
+             anchor->Next();
+        } else {
+//            fprintf(stderr, "a[%d %d]", mathstk.Level(), selstk->Level());
+            Pop();
+        }
+        d = mathstk.Level() - selstk->Level();
+    }
+
+    // Once balanced the levels, check that they are at the same paragraph
+    selpos = anchor->pos;
+} 
+
+
+XPoint *MathedCursor::SelGetArea(int& np)
+{   
+    if (!selection) {
+       np = 0;
+       return 0;
+    }
+    
+    static XPoint point[10];
+    
+    // single row selection
+    int i = 0, x, y, a, d, w, xo, yo, x1, y1, a1, d1; //, p1, p2;
+
+    // Balance anchor and cursor
+    SelBalance();
+    cursor->p->GetXY(xo, yo);
+    w = cursor->p->Width();
+    cursor->GetPos(x1, y1);
+    cursor->getAD(a1, d1);
+    anchor->GetPos(x, y);
+    anchor->getAD(a, d);
+
+    point[i].x = x;
+    point[i++].y = y+d;
+    point[i].x = x;
+    point[i++].y = y-a;
+    
+    if (y!=y1) {
+       point[i].x = xo + w;
+       point[i++].y = y-a;
+       if (x1<xo+w) {
+           point[i].x = xo + w;
+           point[i++].y = y1-a;
+       }
+    }
+       
+    point[i].x = x1;
+    point[i++].y = y1-a;
+    point[i].x = x1;
+    point[i++].y = y1+d;
+    
+    if (y!=y1) {
+       point[i].x = xo;
+       point[i++].y = y1+d;
+       if (x>xo) {
+           point[i].x = xo;
+           point[i++].y = y+d;
+       }
+    }
+    point[i].x = point[0].x;
+    point[i++].y = point[0].y;
+    np = i;
+//    fprintf(stderr, "AN[%d %d %d %d] ", x, y, x1, y1); 
+//    fprintf(stderr, "MT[%d %d %d %d] ", a, d, a1, d1);
+//    for (i=0; i<np; i++)
+//      fprintf(stderr, "XY[%d %d] ", point[i].x, point[i].y);
+    
+    return &point[0];
+}
+
+
+
+void MathedCursor::setAccent(int ac)
+{
+       if (ac > 0 && accent < 8) {
+               nestaccent[accent++] = ac;
+       } else
+         accent = 0;  // consumed!
+}
+
+int MathedCursor::getAccent() const
+{
+       return (accent>0) ? nestaccent[accent-1]: 0;
+}
+
+
+void MathedCursor::doAccent(byte c, MathedTextCodes t)
+{
+       MathedInset *ac = 0;
+       
+       for (int i=accent-1; i>=0; i--) {
+               if (i==accent-1)
+                 ac = new MathAccentInset(c, t, nestaccent[i]);
+               else 
+                 ac = new MathAccentInset(ac, nestaccent[i]);
+       }
+       if (ac) 
+         cursor->Insert(ac);
+       
+       accent = 0;  // consumed!
+}
+
+
+void MathedCursor::doAccent(MathedInset *p)
+{
+       MathedInset *ac = 0;
+       
+       for (int i=accent-1; i>=0; i--) {
+               if (i==accent-1)
+                 ac = new MathAccentInset(p, nestaccent[i]);
+               else 
+                 ac = new MathAccentInset(ac, nestaccent[i]);
+       }
+       if (ac) 
+         cursor->Insert(ac);
+       
+       accent = 0;  // consumed!
+}
+
diff --git a/src/mathed/math_cursor.h b/src/mathed/math_cursor.h
new file mode 100644 (file)
index 0000000..dea75ab
--- /dev/null
@@ -0,0 +1,180 @@
+// -*- C++ -*-
+/*
+ *  File:        math_cursor.h
+ *  Purpose:     Declaration of interaction classes for mathed
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: MathCursor control all user interaction
+ *
+ *  Dependencies: Xlib, XForms
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta, Mathed & Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#ifndef __MATH_CURSOR__
+#define __MATH_CURSOR__
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "math_iter.h" 
+#include "math_inset.h"
+
+
+/// This is the external interface of Mathed's subkernel
+class MathedCursor {
+ public:
+    ///
+    MathedCursor(MathParInset *p);
+    ///
+    ~MathedCursor() { };
+    ///
+    void Insert(byte, MathedTextCodes t=LM_TC_MIN);
+    ///
+    void Insert(MathedInset*, int t=LM_TC_INSET);
+    ///
+    void Home();
+    ///
+    void End();
+    ///
+    bool Right(bool sel=false);
+    ///
+    bool Left(bool sel=false);
+    ///
+    bool Up(bool sel=false);
+    ///
+    bool Down(bool sel=false);
+    ///
+    bool Pop();
+    ///
+    bool Push();
+    /// Pull out an argument from its container inset
+    bool pullArg();
+    ///
+    void Draw(long unsigned pm, int x, int y);
+    ///
+    void Redraw();
+    ///
+    void Delete();
+    ///
+    void DelLine();
+    ///
+    void SetPos(int, int);
+    ///
+    void GetPos(int& x, int& y) { cursor->GetPos(x, y); }
+    ///
+    short GetFCode() { return cursor->FCode(); }
+    ///
+    MathParInset *GetPar() { return par; }
+    ///
+    MathParInset *getCurrentPar() const { return cursor->p; }
+    ///
+    void SetPar(MathParInset*);
+    ///
+    void Interpret(char const*);
+    ///
+    void SetSize(short);
+    ///
+    void setNumbered();
+    void setLabel(char const*);
+    ///
+    bool Limits();
+    /// Set accent: if argument=0 it's considered consumed 
+    void setAccent(int ac=0);
+    /// Returns last accent
+    int getAccent() const;
+    ///
+    bool IsEnd() const { return !cursor->OK(); }
+    // Macro mode methods
+    ///
+    void MacroModeOpen();
+    ///
+    void MacroModeClose();
+    ///
+    bool InMacroMode() { return macro_mode; }
+    
+    // Local selection methods
+    ///
+    bool Selection() { return selection; }
+    ///
+    void SelCopy();
+    ///
+    void SelCut();
+    ///
+    void SelDel();
+    ///
+    void SelPaste();
+    ///
+    void SelStart();
+    ///
+    void SelClear();
+    ///
+    void SelBalance();  
+    ///
+    XPoint *SelGetArea(int&);
+    ///
+    void clearLastCode() { lastcode = LM_TC_MIN; }
+    ///
+    void setLastCode(MathedTextCodes t) { lastcode = t; }
+    ///
+    MathedTextCodes getLastCode() const { return lastcode; }
+    
+ protected:
+    ///
+    bool macro_mode;
+    ///
+    void MacroModeBack();
+    ///
+    void MacroModeInsert(char);
+    
+    // Selection stuff
+    ///
+    bool selection;
+    ///
+    int  selpos;
+    ///
+    MathedXIter cursel, *anchor;
+    ///
+//    LyxArrayBase *selarray; 
+    ///
+    Bool is_visible;
+    ///
+    long unsigned win;
+    ///
+    MathParInset *par;
+    ///
+    MathedXIter *cursor;
+    ///
+    int xc, yc;
+    ///
+    void doAccent(byte c, MathedTextCodes t);
+    ///
+    void doAccent(MathedInset *p);
+    ///
+    int accent;
+       ///
+    int nestaccent[8];
+       ///
+    MathedTextCodes lastcode;
+
+ private:
+       ///
+    char macrobf[80];
+       ///
+    int macroln;
+       ///
+    MathFuncInset* imacro;
+};
+
+
+//--------------------   Inline Functions  -------------------------// 
+
+
+#endif
+
diff --git a/src/mathed/math_defs.h b/src/mathed/math_defs.h
new file mode 100644 (file)
index 0000000..cd464b5
--- /dev/null
@@ -0,0 +1,616 @@
+// -*- C++ -*-
+/*
+ *  File:        math_defs.h
+ *  Purpose:     Math editor definitions 
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Math paragraph and objects for a WYSIWYG math editor.
+ *
+ *  Dependencies: Xlib
+ *
+ *  Copyright: (c) 1996, 1997 Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta, Mathed & Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ * 
+ */
+
+#ifndef __MATH_DEFS__
+#define __MATH_DEFS__
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <stdio.h>
+#include "array.h"
+
+///
+#define MATH_ALIGN_LEFT    1
+///
+#define MATH_ALIGN_RIGHT   2
+///
+#define MATH_ALIGN_BOTTOM  4
+///
+#define MATH_ALIGN_TOP     8
+///
+#define MATH_COLSEP 8
+///
+#define MATH_ROWSEP 8
+
+
+/// Standard Math Sizes (Math mode styles)
+enum MathedStyles {
+       ///
+   LM_ST_DISPLAY=0,
+   ///
+   LM_ST_TEXT,
+   ///
+   LM_ST_SCRIPT,
+   ///
+   LM_ST_SCRIPTSCRIPT
+};
+
+
+/// Standard LaTeX Math Environments
+enum MathedEnvironment {
+       ///
+   LM_EN_INTEXT=0,
+   ///
+   LM_EN_DISPLAY,
+   ///
+   LM_EN_EQUATION,
+   ///
+   LM_EN_EQNARRAYAST,
+   ///
+   LM_EN_EQNARRAY,
+   ///
+   LM_EN_ARRAY
+};
+
+
+/** The restrictions of a standard LaTeX math paragraph
+  allows to get a small number of text codes (<30) */
+enum MathedTextCodes  {
+   /// This must be >= 0
+   LM_TC_MIN = 0,
+   /// Open and Close group
+   LM_TC_OPEN,
+   ///
+   LM_TC_CLOSE,
+   /// Tabulator
+   LM_TC_TAB,
+   /// New line
+   LM_TC_CR,
+   /// Math Inset
+   LM_TC_INSET,
+   /// Super and sub scripts
+   LM_TC_UP,
+   ///
+   LM_TC_DOWN,
+   /// Editable Math Inset
+   LM_TC_ACTIVE_INSET,
+   /// Editable Text Inset
+   LM_TC_TEXT_INSET,
+   ///
+   LM_FONT_BEGIN,
+   /// Internal code for constants
+   LM_TC_CONST,
+   /// Internal code for variables
+   LM_TC_VAR,
+   ///
+   LM_TC_RM,
+   ///
+   LM_TC_CAL,
+   ///
+   LM_TC_BF,
+   ///
+   LM_TC_SF,
+   ///
+   LM_TC_TT,
+   ///
+   LM_TC_IT,
+   ///
+   LM_TC_TEXTRM,
+   /// Math mode TeX characters ",;:{}"
+   LM_TC_TEX,
+   /// Special characters "{}&#_%"
+   LM_TC_SPECIAL,
+   /// Internal code for operators
+   LM_TC_BOP,
+   /// Internal code for symbols
+   LM_TC_SYMB,
+   ///
+   LM_TC_BOPS,
+   ///
+   LM_TC_BSYM,
+   ///
+   LM_FONT_END,
+   
+   /// This must be < 32 
+   LM_TC_MAX
+};
+
+///
+#define LM_TC_NORMAL LM_TC_VAR
+       
+/// Types of lyx-math insets 
+enum MathedInsetTypes  {
+   ///
+   LM_OT_MIN = 0,
+   /// A simple paragraph
+   LM_OT_PAR,
+   /// A simple numbered paragraph
+   LM_OT_PARN,
+   /// A multiline paragraph
+   LM_OT_MPAR,
+   /// A multiline numbered paragraph
+   LM_OT_MPARN,
+   /// An array
+   LM_OT_MATRIX,
+   /// A big operator
+   LM_OT_BIGOP,
+   /// A LaTeX macro
+   LM_OT_UNDEF,
+   ///
+   LM_OT_FUNC,
+   ///
+   LM_OT_FUNCLIM,
+   ///
+   LM_OT_SCRIPT,
+   ///
+   LM_OT_SPACE,
+   ///
+   LM_OT_DOTS,
+   /// A fraction
+   LM_OT_FRAC,
+   ///
+   LM_OT_ATOP,
+   ///
+   LM_OT_STACKREL,
+   /// A radical
+   LM_OT_SQRT,
+   /// A delimiter
+   LM_OT_DELIM,
+   /// A decoration
+   LM_OT_DECO,
+   /// An accent
+   LM_OT_ACCENT,
+   ///
+   LM_OT_MACRO,
+   ///
+   LM_OT_MACRO_ARG,
+   ///
+   LM_OT_MAX
+};
+
+///
+enum MathedBinaryTypes {
+       ///
+    LMB_NONE = 0,
+    ///
+    LMB_RELATION,
+    ///
+    LMB_OPERATOR,
+    ///
+    LMB_BOP = (LMB_RELATION | LMB_OPERATOR)
+};
+
+class LString;
+class MathedInset;
+class MathParInset;
+
+
+/** Abstract base class for all math objects.
+    A math insets is for use of the math editor only, it isn't a
+    general LyX inset. It's used to represent all the math objects.
+    The formulaInset (a LyX inset) encapsulates a math inset.
+ */
+class MathedInset  {
+ public: 
+    /// A math inset has a name (usually its LaTeX name), type and font-size
+    MathedInset(char const *nm, short ot, short st);
+    ///
+    MathedInset(MathedInset*);
+    ///
+    virtual ~MathedInset() { };
+    
+    /// Draw the object 
+    virtual void Draw(int x, int baseline)=0;
+    
+    /// Write LaTeX and Lyx code
+    virtual void Write(FILE *file)=0;
+    /// Write LaTeX and Lyx code
+    virtual void Write(LString &file)=0;
+   
+    /// Reproduces itself
+    virtual MathedInset *Clone()=0;
+   
+    /// Compute the size of the object
+    virtual void Metrics()=0; 
+    /// 
+    virtual int Ascent() const { return ascent; }
+    ///
+    virtual int Descent() const { return descent; }
+    ///
+    virtual int Width() const { return width; }
+    ///
+    virtual int Height() const { return ascent + descent; }
+    
+    ///
+    virtual bool GetLimits() const { return false; }
+    ///
+    virtual void SetLimits(bool) { }   
+   
+    ///
+    char const *GetName() const { return name; }
+    ///
+    short GetType() const { return objtype; }
+    ///
+    short GetStyle() const { return size; }
+          
+    //Man:  Avoid to use these functions if it's not strictly necessary 
+    ///
+    virtual void  SetType(short t) { objtype = t; }
+    ///
+    virtual void  SetStyle(short st) { size = st; } // Metrics();
+    ///
+    virtual void  SetName(char const* n) { name = n; }
+    /// 
+    void setDrawable(long unsigned int d) { pm = d; }
+ protected:
+    ///
+    char const *name;
+    ///
+    short objtype;
+    ///
+    int width;
+    ///
+    int ascent;
+    ///
+    int descent;
+    ///
+    short size;
+    /// This works while only one process can draw unless
+    /// the process have their own data
+    static long unsigned int pm;
+    /// Default metrics
+    static int df_asc, df_des, df_width;
+
+    /// In a near future maybe we use a better fonts renderer than X
+    void drawStr(short, int, int, int, byte*, int);
+       ///
+    friend class MathedCursor;
+       ///
+    friend void mathed_init_fonts();
+};
+
+struct MathedRowSt;
+
+
+/// Paragraph permissions
+enum MathedParFlag {
+    LMPF_BASIC = 0,
+    /// If false can use a non-standard size
+    LMPF_FIXED_SIZE = 1,
+    /// If true can insert newlines 
+    LMPF_ALLOW_CR  = 2,
+    /// If true can use tabs
+    LMPF_ALLOW_TAB = 4,
+    /// If true can insert new columns
+    LMPF_ALLOW_NEW_COL = 8,
+    /// Smaller than current size (frac)
+    LMPF_SMALLER = 16,
+    /// Script size (subscript, stackrel)
+    LMPF_SCRIPT = 32
+};
+
+
+/** The math paragraph base class, base to all editable math objects */
+class MathParInset: public MathedInset  {
+ public: 
+    ///
+    MathParInset(short st=LM_ST_TEXT, char const *nm=NULL, short ot=LM_OT_MIN);
+    ///
+    MathParInset(MathParInset*);
+    ///
+    virtual ~MathParInset();
+    ///
+    virtual MathedInset *Clone();   
+
+    /// Draw the object on a drawable
+    virtual void Draw(int x, int baseline);
+   
+    /// Write LaTeX code
+    virtual void Write(FILE *file);
+    /// Write LaTeX code
+    virtual void Write(LString &file);
+    ///
+    virtual void Metrics();
+    ///
+    virtual void UserSetSize(short);
+    /// Data is stored in a LyXArray
+    virtual void SetData(LyxArrayBase *);
+    ///
+    virtual LyxArrayBase * GetData() { return array; }
+
+    /// Paragraph position
+    virtual void GetXY(int&, int&) const;
+    ///
+    virtual void setXY(int x, int y) { xo =x;  yo = y; }
+    ///
+    virtual void SetFocus(int,int) { };
+    ///
+    virtual bool Inside(int, int);   
+   
+    // Tab stuff used by Matrix.
+    ///
+    virtual void SetAlign(char, char const*) { };
+//    ///
+//    virtual int GetTabPos() { return 0; }
+//    ///
+//    virtual int GetTab(int) { return 0; }
+    ///
+    virtual int GetColumns() { return 1; }
+    ///
+    virtual int GetRows() { return 1; }
+    ///
+    virtual bool isMatrix() { return false; }
+//    /// These functions should report an error
+//    virtual char const* GetLabel() { return 0; }
+//    virtual char const* GetLabel(int) { return 0; }
+
+    // Vertical switching
+    ///
+    virtual bool setArgumentIdx(int i) { return (i==0); }
+    ///
+    virtual bool setNextArgIdx() { return false; }
+    ///
+    virtual int  getArgumentIdx() { return 0; }
+    ///
+    virtual int  getMaxArgumentIdx() { return 0; }
+//    ///
+//    virtual void SetLabel(char const*) { }
+    ///
+    virtual void SetStyle(short);
+       ///
+    virtual MathedRowSt *getRowSt() const { return 0; }
+       ///
+    virtual void setRowSt(MathedRowSt*) { }
+       ///
+    virtual bool Permit(short f) { return (bool)(f & flag); }
+    
+ protected:
+    /// Paragraph data is stored here
+    LyxArrayBase *array;
+    /// Cursor start position
+    int xo, yo;
+    /// 
+    short flag;
+
+ private:
+    ///
+    virtual void setFlag(MathedParFlag f) { flag |= f; }
+       ///
+    friend class InsetFormula;
+       ///
+    friend class MathedXIter;
+       ///
+    friend class MathedCursor;
+       ///
+    friend LyxArrayBase *mathed_parse(unsigned flags = 0, LyxArrayBase*a=NULL, MathParInset**p=NULL);
+};
+
+
+/* The physical structure of a row and aditional information is stored here.
+    It allows to manage the extra info independently of the paragraph data.  
+    Only used for multiline paragraphs.
+ */
+struct MathedRowSt {    
+    /// 
+    MathedRowSt(int n) {
+           w = new int[n+1]; // this leaks
+       next = 0;
+       label = 0;
+       numbered = true;
+    }
+    ///
+    ~MathedRowSt() {
+       delete[] w;
+       if (label) delete[] label;
+    }
+    /// Should be const but...
+    MathedRowSt* getNext() const  { return next; }
+    /// ...we couldn't use this.
+    void setNext(MathedRowSt* n) { next = n; }
+    ///
+    char const* getLabel() const { return label; }
+    ///
+    bool isNumbered() const { return numbered; }
+    ///
+    int  getBaseline() const { return y; }    
+    ///
+    int  getTab(int i) { return w[i]; }
+    /// 
+    void setLabel(char* l) { label = l; }
+    ///
+    void setNumbered(bool nf) { numbered = nf; }
+    ///
+    void setTab(int i, int t) { w[i] = t; }
+    
+ private:
+    /// Vericals 
+    int asc, desc, y;
+    /// widths 
+    int *w;
+    /// 
+    char *label;
+    ///
+    bool numbered;
+    ///
+    MathedRowSt *next;
+       ///
+    friend class MathMatrixInset;
+       ///
+    friend class MathedXIter;
+};
+
+
+/** Multiline math paragraph base class.
+    This is the base to all multiline editable math objects
+    like array and eqnarray. 
+ */
+class MathMatrixInset: public MathParInset {
+ public: 
+    ///
+    MathMatrixInset(int m=1, int n=1, short st=LM_ST_TEXT);
+    ///
+    MathMatrixInset(MathMatrixInset*);
+    ///
+    MathedInset *Clone();
+    ///
+    virtual ~MathMatrixInset();
+    ///
+    void Draw(int, int);
+    ///
+    void Write(FILE *file);
+    ///
+    void Write(LString &file);
+    ///
+    void Metrics();
+    ///
+    void SetData(LyxArrayBase *);
+    ///
+    void SetAlign(char, char const*);
+    ///
+    char *GetAlign(char* vv) {
+       *vv = v_align;
+       return h_align;
+    }
+//    ///
+//    int GetTab(int);
+    ///
+    int GetColumns() { return nc; }
+    ///
+    int GetRows() { return nr; }
+    ///
+    virtual bool isMatrix() { return true; }
+
+    /// Use this to manage the extra information independently of paragraph
+    MathedRowSt *getRowSt() const { return row; }
+       ///
+    void setRowSt(MathedRowSt* r) { row = r; }
+    
+ protected:
+    ///  Number of columns & rows
+    int nc, nr;
+    /// tab sizes
+    int *ws;   
+    /// 
+    char v_align; // add approp. signedness
+    ///
+    char* h_align;
+    /// Vertical structure
+    MathedRowSt *row;
+
+};
+
+
+
+/*************************  Prototypes  **********************************/
+/// 
+LyxArrayBase *mathed_parse(unsigned flags, LyxArrayBase *data, MathParInset **mt);
+///
+void mathed_write(MathParInset*, FILE *, int*, char fragile, char const* label=NULL);
+///
+void mathed_write(MathParInset*, LString&, int*, char fragile, char const* label=NULL);
+///
+void mathed_parser_file(FILE*, int);
+///
+int mathed_parser_lineno();
+///
+int MathedLookupBOP(short);
+
+/************************ Inline functions ********************************/
+
+///
+#define MathIsInset(x)  (LM_TC_INSET<=(x) && (x)<=LM_TC_ACTIVE_INSET)
+///
+#define MathIsFont(x)  (LM_TC_CONST<=(x) && (x)<=LM_TC_BSYM)
+///
+#define MathIsAlphaFont(x)  (LM_TC_VAR<=(x) && (x)<=LM_TC_TEXTRM)
+///
+#define MathIsActive(x)  (LM_TC_INSET<(x) && (x)<=LM_TC_ACTIVE_INSET) 
+///
+#define MathIsUp(x)    ((x)==LM_TC_UP) 
+///
+#define MathIsDown(x)  ((x)==LM_TC_DOWN)
+///
+#define MathIsScript(x)  ((x)==LM_TC_DOWN || (x)==LM_TC_UP)  
+///
+#define MathIsBOPS(x)    (MathedLookupBOP(x)>LMB_NONE)
+
+
+///
+inline bool MathIsBinary(short x)
+{
+    return (x==LM_TC_BOP || x==LM_TC_BOPS);
+}
+
+///
+inline bool MathIsSymbol(short x) {
+    return (LM_TC_SYMB<=x && x<=LM_TC_BSYM);
+}
+     
+
+inline 
+MathedInset::MathedInset(char const *nm, short ot, short st):
+  name(nm), objtype(ot), size(st) 
+{
+   width = ascent = descent = 0;
+}
+
+inline
+bool MathParInset::Inside(int x, int y) 
+{
+  return (x>=xo && x<=xo+width && y<=yo+descent && y>=yo-ascent);
+}
+
+
+inline
+void MathParInset::GetXY(int& x, int& y) const
+{
+   x = xo; y = yo;
+}
+
+
+inline
+void MathParInset::UserSetSize(short sz)
+{
+   if (sz>=0) {
+       size = sz;      
+       flag = flag & ~LMPF_FIXED_SIZE;
+   }
+}
+
+
+inline
+void MathParInset::SetStyle(short sz) 
+{
+    if (Permit(LMPF_FIXED_SIZE)) {
+       if (Permit(LMPF_SCRIPT)) 
+         sz = (sz<LM_ST_SCRIPT) ? LM_ST_SCRIPT: LM_ST_SCRIPTSCRIPT;
+       if (Permit(LMPF_SMALLER) && sz < LM_ST_SCRIPTSCRIPT) {
+           sz++;
+       } 
+       MathedInset::SetStyle(sz);
+    }
+}
+
+#endif
+
diff --git a/src/mathed/math_delim.C b/src/mathed/math_delim.C
new file mode 100644 (file)
index 0000000..55e3ee2
--- /dev/null
@@ -0,0 +1,507 @@
+ /* 
+ *  File:        math_delim.C
+ *  Purpose:     Draw delimiters and decorations
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Vectorial fonts for simple and resizable objets.
+ *
+ *  Dependencies: Xlib, XForms
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta, Mathed & Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "symbol_def.h"
+#include "math_inset.h"
+
+/* 
+ * Internal struct of a drawing: code n x1 y1 ... xn yn, where code is:
+ * 0 = end, 1 = line, 2 = polyline, 3 = square line, 4= square polyline
+ */
+
+static float parenth[] = {
+  2.0, 13.0,
+  0.9930, 0.0071,  0.7324, 0.0578,  0.5141, 0.1126,  0.3380, 0.1714,
+  0.2183, 0.2333,  0.0634, 0.3621,  0.0141, 0.5000,  0.0563, 0.6369,
+  0.2113, 0.7647,  0.3310, 0.8276,  0.5070, 0.8864,  0.7254, 0.9412,
+  0.9930, 0.9919,
+  0.0   
+};
+
+static float parenthHigh[] = {
+    2.0, 13.0, 0.9840, 0.0014, 0.7143, 0.0323, 0.4603, 0.0772, 0.2540, 
+    0.1278, 0.1746, 0.1966, 0.0952, 0.3300, 0.0950, 0.5000, 0.0952, 0.6700, 
+    0.1746, 0.8034, 0.2540, 0.8722, 0.4603, 0.9228, 0.7143, 0.9677, 0.9840, 
+    0.9986, 0.0 
+};
+
+static float brace[] = {
+  2.0, 21.0,
+  0.9492, 0.0020, 0.9379, 0.0020, 0.7458, 0.0243, 0.5819, 0.0527,
+  0.4859, 0.0892, 0.4463, 0.1278, 0.4463, 0.3732, 0.4011, 0.4199,
+  0.2712, 0.4615, 0.0734, 0.4919, 0.0113, 0.5000, 0.0734, 0.5081,
+  0.2712, 0.5385, 0.4011, 0.5801, 0.4463, 0.6268, 0.4463, 0.8722,
+  0.4859, 0.9108, 0.5819, 0.9473, 0.7458, 0.9757, 0.9379, 0.9980,
+  0.9492, 0.9980,
+  0.0
+};
+
+static float arrow[] = {
+   4, 7,
+   0.015, 0.7500,  0.2, 0.6,  0.35, 0.35,  0.5, 0.05,
+   0.65, 0.35,  0.8, 0.6,  0.95, 0.7500,
+   3, 0.5, 0.15,  0.5, 0.95,
+   0.0 
+};
+
+static float Arrow[] = {
+   4, 7,
+   0.015, 0.7500,  0.2, 0.6,  0.35, 0.35,  0.5, 0.05,
+   0.65, 0.35,  0.8, 0.6,  0.95, 0.7500,
+   3, 0.35, 0.5, 0.35, 0.95,
+   3, 0.65, 0.5, 0.65, 0.95,
+   0.0
+};
+
+static float udarrow[] = {
+   2, 3,
+   0.015, 0.25,  0.5, 0.05, 0.95, 0.25,
+   2, 3,
+   0.015, 0.75,  0.5, 0.95, 0.95, 0.75,  
+   1, 0.5, 0.2,  0.5, 0.8,
+   0.0 
+};
+
+static float Udarrow[] = {
+   2, 3,
+   0.015, 0.25,  0.5, 0.05, 0.95, 0.25,
+   2, 3,
+   0.015, 0.75,  0.5, 0.95, 0.95, 0.75,  
+   1, 0.35, 0.2, 0.35, 0.8,
+   1, 0.65, 0.2, 0.65, 0.8,
+   0.0 
+};
+
+static float brack[] = {
+   2.0, 4,
+   0.95, 0.05,  0.05, 0.05,  0.05, 0.95,  0.95, 0.95,
+   0.0
+};
+
+static float corner[] = {
+   2.0, 3,
+   0.95, 0.05,  0.05, 0.05,  0.05, 0.95,
+   0.0
+};
+
+static float angle[] = {
+   2.0, 3,
+   1, 0,  0.05, 0.5,  1, 1,
+   0.0
+};
+
+static float slash[] = {
+   1, 0.95, 0.05,  0.05, 0.95, 
+   0.0
+};
+
+static float hline[] = {
+   1, 0.05, 0.5,  0.95, 0.5, 
+   0.0
+};
+
+
+static float hline2[] = {
+   1, 0.1, 0.5,  0.3, 0.5,
+   1, 0.7, 0.5,  0.9, 0.5,
+   0.0
+}; 
+
+static float hline3[] = {
+   1, 0.1, 0,  0.15, 0,
+   1, 0.475, 0,  0.525, 0,
+   1, 0.85, 0,  0.9, 0,  
+   0.0
+};
+
+
+static float dline3[] = {
+   1, 0.1, 0.1,  0.15, 0.15,
+   1, 0.475, 0.475,  0.525, 0.525,
+   1, 0.85, 0.85,  0.9, 0.9,
+   0.0
+};     
+
+static float hlinesmall[] = {
+   1, 0.4, 0.5,  0.6, 0.5, 
+   0.0
+};
+
+static float vert[] = {
+   1, 0.5, 0.05,  0.5, 0.95, 
+   0.0
+};
+
+static float Vert[] = {
+   1, 0.3, 0.05,  0.3, 0.95, 
+   1, 0.7, 0.05,  0.7, 0.95,
+   0.0
+};
+
+static float tilde[] = {
+   2.0, 4,
+   0.05, 0.8,  0.25, 0.2,  0.75, 0.8,  0.95, 0.2,
+   0.0
+};
+
+static struct math_deco_struct {
+    int code; float *data; int angle;
+} math_deco_table[] = {   
+
+   // Decorations
+  { LM_widehat, &angle[0], 3 },
+  { LM_widetilde, &tilde[0], 0 },
+  { LM_underline, &hline[0], 0 },
+  { LM_overline, &hline[0], 0 },
+  { LM_underbrace, &brace[0], 1 },
+  { LM_overbrace,  &brace[0], 3 },
+  { LM_overleftarrow, &arrow[0], 1 },
+  { LM_overightarrow, &arrow[0], 3 },
+     
+  // Delimiters
+  { '(', &parenth[0], 0 },
+  { ')', &parenth[0], 2 },
+  { '{', &brace[0], 0 },
+  { '}', &brace[0], 2 },
+  { '[', &brack[0], 0 },
+  { ']', &brack[0], 2 },
+  { '|', &vert[0], 0 },
+  { '/', &slash[0], 0 },
+  { LM_Vert, &Vert[0], 0 },
+  { LM_backslash, &slash[0], 1 },
+  { LM_langle, &angle[0], 0 },
+  { LM_lceil, &corner[0], 0 }, 
+  { LM_lfloor, &corner[0], 1 },  
+  { LM_rangle, &angle[0], 2 }, 
+  { LM_rceil, &corner[0], 3 }, 
+  { LM_rfloor, &corner[0], 2 },
+  { LM_downarrow, &arrow[0], 2 },
+  { LM_Downarrow, &Arrow[0], 2 }, 
+  { LM_uparrow, &arrow[0], 0 },
+  { LM_Uparrow, &Arrow[0], 0 },
+  { LM_updownarrow, &udarrow[0], 0 },
+  { LM_Updownarrow, &Udarrow[0], 0 },   
+
+  // Accents   
+  { LM_ddot, &hline2[0], 0 },
+  { LM_hat, &angle[0], 3 },
+  { LM_grave, &slash[0], 1 },
+  { LM_acute, &slash[0], 0 },
+  { LM_tilde, &tilde[0], 0 },
+  { LM_bar, &hline[0], 0 },
+  { LM_dot, &hlinesmall[0], 0 },
+  { LM_check, &angle[0], 1 },
+  { LM_breve, &parenth[0], 1 },
+  { LM_vec, &arrow[0], 3 },
+  { LM_not, &slash[0], 0 },  
+
+  // Dots
+  { LM_ldots, &hline3[0], 0 }, 
+  { LM_cdots, &hline3[0], 0 },
+  { LM_vdots, &hline3[0], 1 },
+  { LM_ddots, &dline3[0], 0 },
+     
+  { 0, 0, 0 }
+};
+
+
+inline int odd(int x) { return ((x) & 1); }
+
+typedef float matriz_data[2][2];
+
+const matriz_data MATIDEN={ {1,0}, {0,1}};
+
+extern void mathed_set_font(short type, int style);
+extern int mathed_char_width(short type, int style, byte c);
+extern int mathed_char_height(short, int, byte, int&, int&);
+
+#define mateq(m1,m2)  memcpy(m1,m2,sizeof(matriz_data))
+
+class Matriz {
+ public: 
+   Matriz() { mateq(m,MATIDEN); }
+   void rota(int);
+   void escala(float, float);
+   void transf(float, float, float&, float&);
+   
+ protected:
+   matriz_data m;
+   void matmat(matriz_data& a);
+};
+
+
+void Matriz::rota(int code)
+{
+   float cs, sn;
+   
+   matriz_data r;
+   mateq(r,MATIDEN);
+   cs = (odd(code)) ? 0: 1 - code;
+   sn = (odd(code)) ? 2 - code: 0;
+   r[0][0] = cs;         r[0][1] = sn;
+   r[1][0] = -r[0][1];   r[1][1] = r[0][0];
+   matmat(r);
+}
+
+void Matriz::escala(float x, float y)
+{
+   matriz_data s;
+   mateq(s,MATIDEN);
+   s[0][0] = x;  s[1][1] = y;
+   matmat(s);
+}
+
+
+void Matriz::matmat(matriz_data& a)
+{
+   int i;
+   matriz_data c;   
+   for (i=0;i<2; i++) {
+      c[0][i] = a[0][0]*m[0][i] + a[0][1]*m[1][i];
+      c[1][i] = a[1][0]*m[0][i] + a[1][1]*m[1][i];
+   }
+   mateq(m, c);
+}
+
+void Matriz::transf(float xp, float yp, float &x, float &y)
+{
+   x = m[0][0]*xp + m[0][1]*yp;
+   y = m[1][0]*xp + m[1][1]*yp;
+}
+
+extern GC latexGC, mathGC, mathLineGC, cursorGC;
+
+static int search_deco(int code)
+{
+   int i=0;
+   
+   while (math_deco_table[i].code &&  math_deco_table[i].code!=code) i++;
+   if (!math_deco_table[i].code) i = -1;
+   return i;
+}
+      
+void mathed_draw_deco(Window win, int x, int y, int w, int h, int code)
+{
+   Matriz mt, sqmt;
+   XPoint p[32];
+   float *d, xx, yy, x2, y2;
+   int i=0,j, n, r;
+   
+   j = search_deco(code);   
+   if (j<0) return;
+   
+   r = math_deco_table[j].angle;
+   d = math_deco_table[j].data;
+   
+   if (h > 70 && (math_deco_table[j].code == (int) '(' || math_deco_table[j].code == (int) ')'))
+      d = parenthHigh;
+    
+   mt.rota(r);
+   mt.escala(w, h);
+   
+   n = (w < h) ? w: h;
+   sqmt.rota(r);
+   sqmt.escala(n, n);
+   if (r> 0 && r< 3) y += h;   
+   if (r>=2) x += w;   
+   do {
+      code = (int)d[i++];
+      switch (code) {
+       case 0: break;
+       case 1: 
+       case 3:
+       {
+         xx = d[i++]; yy = d[i++];
+         x2 = d[i++]; y2 = d[i++];
+         if (code==3) 
+           sqmt.transf(xx, yy, xx, yy);
+         else
+           mt.transf(xx, yy, xx, yy);
+         mt.transf(x2, y2, x2, y2);
+         XDrawLine(fl_display, win, mathGC, x+(int)xx, y+(int)yy,
+                   x+(int)x2, y+(int)y2);
+         XFlush(fl_display);
+         break;
+       }        
+       case 2: 
+       case 4:
+       {
+         n = (int)d[i++];
+         for (j=0; j<n; j++) {
+            xx = d[i++]; yy = d[i++];
+//          fprintf(stderr, " %g %g ", xx, yy);
+            if (code==4) 
+              sqmt.transf(xx, yy, xx, yy);
+            else
+              mt.transf(xx, yy, xx, yy);
+            p[j].x = x+(int)xx;
+            p[j].y = y+(int)yy;
+            //      fprintf(stderr, "P[%d %g %g %d %d]", j, xx, yy, x, y);
+         }
+         XDrawLines(fl_display, win, mathLineGC, p, n, CoordModeOrigin);
+         XFlush(fl_display);
+       }
+      }
+   } while (code);
+}
+
+void
+MathDelimInset::Draw(int x, int y)
+{ 
+   xo = x;  yo = y; 
+   MathParInset::Draw(x+dw+2, y-dh); 
+   //int h=Height(), hg=descent-1;  
+
+   if (left=='.') {
+     XDrawLine(fl_display, pm, cursorGC, x+4, yo-ascent, x+4, yo+descent);
+     XFlush(fl_display);
+   }
+   else
+     mathed_draw_deco(pm, x, y-ascent, dw, Height(), left);
+   x += Width()-dw-2;
+   if (right=='.') {
+     XDrawLine(fl_display, pm, cursorGC, x+4, yo-ascent, x+4, yo+descent);
+     XFlush(fl_display);
+   }
+   else
+     mathed_draw_deco(pm, x, y-ascent, dw, Height(), right);
+}
+
+void
+MathDelimInset::Metrics()
+{
+   MathParInset::Metrics();
+   int d;
+   
+   mathed_char_height(LM_TC_CONST, size, 'I', d, dh);
+   dh /= 2;
+   ascent += 2 + dh;
+   descent += 2 - dh;
+   dw = Height()/5;
+   if (dw > 15) dw = 15;
+   if (dw<6) dw = 6;
+   width += 2*dw+4;
+}
+
+
+void
+MathDecorationInset::Draw(int x, int y)
+{ 
+   MathParInset::Draw(x+(width-dw)/2, y);
+   mathed_draw_deco(pm, x, y+dy, width, dh, deco);
+}
+
+
+void
+MathDecorationInset::Metrics()
+{
+   int h = 2*mathed_char_height(LM_TC_VAR, size, 'I', ascent, descent);  
+   MathParInset::Metrics();
+   int w = Width()+4;
+   if (w<16) w = 16;
+   dh = w/5;
+   if (dh>h) dh = h;
+
+   if (upper) {
+      ascent += dh+2;
+      dy = -ascent;
+   } else {
+      dy = descent+2;
+      descent += dh+4;
+   }
+   dw = width;
+   width = w;
+}
+
+void
+MathAccentInset::Draw(int x, int y)
+{
+    int dw = width-2;
+/*    char s[8];
+    mathed_set_font(fn, size);
+    if (MathIsBinary(fn)) {
+       s[0] = s[2] = ' '; 
+       s[1] = (char)c;
+       ns = 3;
+       dw = mathed_char_width(fn, size, c);
+    } else
+      s[0] = (char)c;
+*/
+    if (inset) {
+       inset->Draw(x, y);
+    } else {
+       drawStr(fn, size, x, y, &c, 1);
+       XFlush(fl_display);
+    }
+    x += (code==LM_not) ? (width-dw)/2: 2;
+    mathed_draw_deco(pm, x, y-dy, dw, dh, code);
+}
+
+void
+MathAccentInset::Metrics()
+{
+    
+    if (inset) {
+       inset->Metrics();
+       ascent = inset->Ascent();
+       descent = inset->Descent();
+       width = inset->Width();
+       dh = ascent;
+    } else {
+       mathed_char_height(fn, size, c, ascent, descent);
+       width = mathed_char_width(fn, size, c);
+       dh = (width-2)/2; 
+    }
+    if (code==LM_not) {
+       ascent += dh;
+       descent += dh;
+       dh = Height();
+    } else 
+      ascent += dh+2;
+           
+    dy = ascent;
+//    if (MathIsBinary(fn))
+//     width += 2*mathed_char_width(fn, size, ' ');    
+}
+
+
+void
+MathDotsInset::Draw(int x, int y)
+{
+   mathed_draw_deco(pm, x+2, y-dh, width-2, ascent, code);
+   if (code==LM_vdots||code==LM_ddots) x++; 
+   if (code!=LM_vdots) y--;
+   mathed_draw_deco(pm, x+2, y-dh, width-2, ascent, code);
+}     
+
+void
+MathDotsInset::Metrics()
+{
+   mathed_char_height(LM_TC_VAR, size, 'M', ascent, descent);
+   width = mathed_char_width(LM_TC_VAR, size, 'M');   
+   switch (code) {
+    case LM_ldots: dh = 0; break;
+    case LM_cdots: dh = ascent/2; break;
+    case LM_vdots: width /=2;
+    case LM_ddots: dh = ascent; break;
+   }
+} 
+
diff --git a/src/mathed/math_draw.C b/src/mathed/math_draw.C
new file mode 100644 (file)
index 0000000..163ce1a
--- /dev/null
@@ -0,0 +1,367 @@
+/*
+ *  File:        math_draw.C
+ *  Purpose:     Interaction and drawing for mathed
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Math drawing and interaction for a WYSIWYG math editor.
+ *
+ *  Dependencies: Xlib, XForms
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta, Mathed & Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+#include FORMS_H_LOCATION
+#include "math_cursor.h"
+#include "math_parser.h"
+
+extern void mathed_set_font(short type, int style);
+extern int mathed_char_width(short type, int style, byte c);
+extern int mathed_string_width(short type, int style, byte const* s, int ls);
+extern int mathed_string_height(short, int, byte const*, int, int&, int&);
+extern int mathed_char_height(short, int, byte, int&, int&);
+   
+GC canvasGC=0, mathGC=0, mathLineGC=0, latexGC=0, cursorGC=0, mathFrameGC=0;
+
+
+long unsigned int MathedInset::pm;
+
+void
+MathSpaceInset::Draw(int x, int y)
+{ 
+
+// XPoint p[4] = {{++x, y-3}, {x, y}, {x+width-2, y}, {x+width-2, y-3}};
+
+// Sadly, HP-UX CC can't handle that kind of initialization.
+
+   XPoint p[4];
+   p[0].x = ++x;       p[0].y = y-3;
+   p[1].x = x;         p[1].y = y;
+   p[2].x = x+width-2; p[2].y = y;
+   p[3].x = x+width-2; p[3].y = y-3;
+
+   XDrawLines(fl_display,pm,(space) ? latexGC: mathGC,p,4,CoordModeOrigin);
+   XFlush(fl_display);
+}
+
+void 
+MathParInset::Draw(int x, int y)
+{
+   byte cx, cxp=0;
+   int xp=0, ls;
+   int asc=df_asc, des=0;
+   bool limits = false;
+    
+   xo = x;  yo = y; 
+   if (!array || array->Empty()) {
+      mathed_set_font(LM_TC_VAR, 1);
+       if (array) {
+          MathedXIter data(this);
+          data.GetPos(x, y);
+       }
+      XDrawRectangle(fl_display,pm,mathLineGC,x,y-df_asc, df_width, df_asc);
+      XFlush(fl_display);
+      return;
+   }  
+   MathedXIter data(this);
+   data.GoBegin();
+   while (data.OK()) {
+      data.GetPos(x, y);
+      cx = data.GetChar();
+      if (cx >= ' ') {
+        byte *s = data.GetString(ls);
+         drawStr(data.FCode(), size, x, y, s, ls);
+         mathed_char_height(data.FCode(), size, s[ls-1], asc, des);
+         limits = false;
+      } else {
+         if (cx==0) break;
+        if (MathIsInset(cx)) {
+           int yy = y;
+           MathedInset *p = data.GetInset();
+           if (cx==LM_TC_UP) {
+              if (limits) {
+                 x -= (xp>p->Width()) ? p->Width()+(xp-p->Width())/2: xp;  
+                 yy -= (asc + p->Descent()+4);
+              } else
+                 yy -= (p->Descent()>asc) ? p->Descent()+4: asc;
+           } else
+           if (cx==LM_TC_DOWN) {
+              if (limits) {
+                 x -= (xp>p->Width()) ? p->Width()+(xp-p->Width())/2: xp;
+                 yy += des + p->Ascent() + 2;
+              } else
+                yy += des + p->Ascent()/2;
+           } else {
+              asc = p->Ascent();
+              des = p->Descent();
+           }
+           p->Draw(x, yy);
+           if (cx!=LM_TC_UP && cx!=LM_TC_DOWN) {
+              limits = p->GetLimits();
+              if (limits) xp = p->Width();
+           }
+           data.Next();
+        } else 
+          if (cx==LM_TC_TAB) {
+              if ((cxp==cx || cxp==LM_TC_CR || data.IsFirst())) { // && objtype==L
+                  XDrawRectangle(fl_display,pm,mathLineGC,
+                                 x,y-df_asc, df_width, df_asc);
+              }
+          
+             XFlush(fl_display);
+             data.Next();
+             limits = false;
+          } else
+           if (cx==LM_TC_CR) {
+               if (cxp==LM_TC_TAB || cxp==LM_TC_CR || data.IsFirst()) { //  && objtype==LM_OT_MATRIX) {
+                 XDrawRectangle(fl_display,pm,mathLineGC,x,y-df_asc, df_width, df_asc);
+               }
+               data.Next();
+               limits = false;
+           }
+        else {  
+           fprintf(stderr, "GMathed Error: Unrecognized code[%d]\n", cx);
+           break;
+        }
+      }
+      cxp = cx;
+   }
+   if (cxp==LM_TC_TAB || cxp==LM_TC_CR) { // && objtype==LM_OT_MATRIX) {
+      data.GetPos(x, y);
+      XDrawRectangle(fl_display,pm,mathLineGC,x,y-df_asc, df_width, df_asc);
+      XFlush(fl_display);
+   }
+}
+
+
+void 
+MathParInset::Metrics()
+{
+    byte cx, cxp=0, *s;
+    int ls;
+    int asc=df_asc, des=0;
+    int tb = 0, tab=0;
+
+    bool limits = false;
+    
+    ascent = df_asc;//mathed_char_height(LM_TC_VAR, size, 'I', asc, des); 
+    width = df_width;
+    descent = 0;
+    if (!array) return;
+    if (array->Empty()) return;
+    
+    ascent = 0;
+    MathedXIter data(this);
+    data.GoBegin();
+    while (data.OK()) {
+       cx = data.GetChar();      
+       if (cx >= ' ') {
+           s = data.GetString(ls);
+           mathed_string_height(data.FCode(), size, s, ls, asc, des);
+           if (asc > ascent) ascent = asc;
+           if (des > descent) descent = des;
+           limits = false;
+       } else
+         if (MathIsInset(cx)) {
+             MathedInset *p = data.GetInset();
+             p->SetStyle(size);   
+             p->Metrics();
+             if (cx==LM_TC_UP) {
+                 asc += (limits) ? p->Height()+4: p->Ascent() + 
+                   ((p->Descent()>asc) ? p->Descent()-asc+4: 0);
+             } else
+               if (cx==LM_TC_DOWN) {
+                   des += ((limits) ? p->Height()+4: p->Height()-p->Ascent()/2);
+               } else {
+                   asc = p->Ascent();
+                   des = p->Descent();
+               }
+             if (asc > ascent) ascent = asc;
+             if (des > descent) descent = des;
+             if (cx!=LM_TC_UP && cx!=LM_TC_DOWN)
+               limits = p->GetLimits();
+             data.Next();
+         } else 
+         if (cx==LM_TC_TAB) {
+             int x, y;
+             data.GetIncPos(x, y);
+             if (data.IsFirst() || cxp==LM_TC_TAB || cxp==LM_TC_CR) {
+                 if (ascent<df_asc) ascent = df_asc;
+                 tb = x;
+             }
+             data.setTab(x-tb, tab);
+             tb = x;
+             tab++;
+             limits = false;                   
+             data.Next();
+         } else
+         if (cx==LM_TC_CR) {
+             if (tb>0) {
+                 int x, y;
+                 data.GetIncPos(x, y);
+                 if (data.IsFirst() || cxp==LM_TC_TAB || cxp==LM_TC_CR) {
+                     if (ascent<df_asc) ascent = df_asc;
+                     tb = x;
+                 } 
+                 data.setTab(x-tb, tab);
+             } else //if (GetColumns()==1) 
+                   {
+                 int x, y;
+                 data.GetIncPos(x, y);
+                 data.setTab(x, tab);
+                 if (ascent<df_asc) ascent = df_asc;
+             } 
+             tb=tab=0;
+             data.subMetrics(ascent, descent);
+             ascent = df_asc;   
+             descent = 0;
+             data.Next();
+         }      
+       else {
+           fprintf(stderr, "Mathed Error: Unrecognized code[%d]\n", cx);
+           break;
+       }       
+       cxp = cx;
+    }
+    data.GetIncPos(width, ls);
+    
+    // No matter how simple is a matrix, it is NOT a subparagraph
+    if (isMatrix()) {
+       if (cxp==LM_TC_TAB) {
+           if (ascent<df_asc) ascent = df_asc;
+           data.setTab(0, tab);
+       } else {
+         data.setTab(width-tb, tab);
+       }
+    }
+         
+    data.subMetrics(ascent, descent);
+}
+
+
+void
+MathSqrtInset::Draw(int x, int y)
+{ 
+   MathParInset::Draw(x+hmax+2, y); 
+   int h=ascent, d=descent, h2=Height()/2, w2 = (Height()>4*hmax)?hmax:hmax/2; 
+   XPoint p[4];
+   p[0].x = x + hmax + wbody, p[0].y = y-h;
+   p[1].x = x+hmax,    p[1].y = y-h;
+   p[2].x = x+w2,      p[2].y = y+d;
+   p[3].x = x,         p[3].y = y+d-h2;
+   XDrawLines(fl_display, pm, mathLineGC,p, 4, CoordModeOrigin);
+   XFlush(fl_display);
+}
+
+void
+MathSqrtInset::Metrics()
+{
+   MathParInset::Metrics();
+   ascent += 4;
+   descent += 2;
+   int a, b;
+   hmax = mathed_char_height(LM_TC_VAR, size, 'I',a, b);
+   if (hmax<10) hmax = 10;
+   wbody = width + 4;
+   width += hmax + 4;
+}
+
+void
+MathFracInset::Draw(int x, int y)
+{ 
+    short idxp = idx;
+    short sizex = size;
+    
+    idx = 0;
+    if (size==LM_ST_DISPLAY) size++;
+    MathParInset::Draw(x+(width-w0)/2, y - des0);
+    den->Draw(x+(width-w1)/2, y + den->Ascent() + 2 - dh);
+    size = sizex;
+    if (objtype==LM_OT_FRAC)
+      XDrawLine(fl_display, pm, mathLineGC, x+2, y-dh, x+width-4, y - dh);
+    XFlush(fl_display);
+    idx = idxp;
+}
+
+void
+MathFracInset::Metrics()
+{
+    if (!dh) {
+       int a, b;
+       dh = mathed_char_height(LM_TC_CONST, size, 'I', a, b)/2;
+    }
+    short idxp = idx;
+    short sizex = size; 
+    idx = 0;
+    if (size==LM_ST_DISPLAY) size++; 
+    MathParInset::Metrics();
+    size = sizex;
+    w0 = width;
+    int as = Height() + 2 + dh;
+    des0 = Descent() + 2 + dh;
+    den->Metrics();  
+    w1 = den->Width();   
+    width = ((w0 > w1) ? w0: w1) + 12;
+    ascent = as; 
+    descent = den->Height()+ 2 - dh;
+    idx = idxp;
+}
+
+
+void
+MathBigopInset::Draw(int x, int y)
+{
+   int ls;
+   char c;
+   char const *s;
+   short t;
+   
+   if (sym<256 || sym==LM_oint) {
+      ls = 1;
+      c = (sym==LM_oint) ? LM_int: sym;
+      s = &c;
+      t = LM_TC_BSYM;
+   } else {
+      s = name;
+      ls = strlen(name);
+      t = LM_TC_TEXTRM;
+   }
+   mathed_set_font(t, size);
+   if (sym==LM_oint) {
+      XDrawArc(fl_display, pm, mathLineGC, x,y-5*width/4,width,width,0,23040);
+      XFlush(fl_display);
+      x++;
+   }
+   XDrawString(fl_display, pm, mathGC, x, y, s, ls);
+   XFlush(fl_display);
+}
+
+void
+MathBigopInset::Metrics()
+{   
+   int ls;
+   char c;
+   char const *s;
+   short t;
+
+   if (sym<256 || sym==LM_oint) {
+      ls = 1;
+      c = (sym==LM_oint) ? LM_int: sym;
+      s = &c;
+      t = LM_TC_BSYM;
+   } else {
+      s = name;
+      ls = strlen(name);
+      t = LM_TC_TEXTRM;
+   }
+   mathed_set_font(t, size);
+   mathed_string_height(t, size, (unsigned char const *)s, ls, ascent, descent);
+   width = mathed_string_width(t, size, (unsigned char const *)s, ls);
+   if (sym==LM_oint) width += 2;
+}
+
diff --git a/src/mathed/math_forms.C b/src/mathed/math_forms.C
new file mode 100644 (file)
index 0000000..04c7a20
--- /dev/null
@@ -0,0 +1,241 @@
+// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "math_panel.h"
+
+FD_panel *create_form_panel(void)
+{
+  FL_OBJECT *obj;
+  FD_panel *fdui = (FD_panel *) fl_calloc(1, sizeof(FD_panel));
+
+  fdui->panel = fl_bgn_form(FL_NO_BOX, 290, 172);
+  obj = fl_add_box(FL_UP_BOX,0,0,290,172,"");
+  obj = fl_add_button(FL_RETURN_BUTTON,80,14,80,30,_("Close "));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,button_cb,100);
+  fdui->func_browse = obj = fl_add_browser(FL_SELECT_BROWSER,180,40,94,110,_("Functions"));
+    fl_set_object_lalign(obj,FL_ALIGN_TOP);
+    fl_set_object_callback(obj,button_cb,MM_FUNC);
+#if FL_REVISION > 85
+    fl_set_browser_hscrollbar(obj, FL_OFF);
+#endif
+  fdui->greek = obj = fl_add_button(FL_NORMAL_BUTTON,10,90,50,30,_("Greek"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,15);
+    fl_set_object_callback(obj,button_cb,MM_GREEK);
+  fdui->arrow = obj = fl_add_button(FL_NORMAL_BUTTON,10,120,50,30,_("­ Û"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,15);
+    fl_set_object_callback(obj,button_cb,MM_ARROW);
+  fdui->boperator = obj = fl_add_button(FL_NORMAL_BUTTON,60,90,50,30,_("± ´"));
+    fl_set_object_lsize(obj,0);
+    fl_set_object_lstyle(obj,15);
+    fl_set_object_callback(obj,button_cb,MM_BOP);
+  fdui->brelats = obj = fl_add_button(FL_NORMAL_BUTTON,110,90,50,30,_("£ @"));
+    fl_set_object_lsize(obj,0);
+    fl_set_object_lstyle(obj,15);
+    fl_set_object_callback(obj,button_cb,MM_BRELATS);
+  fdui->varsize = obj = fl_add_button(FL_NORMAL_BUTTON,60,120,50,30,_("S  ò"));
+    fl_set_object_lsize(obj,0);
+    fl_set_object_lstyle(obj,15);
+    fl_set_object_callback(obj,button_cb,MM_VARSIZE);
+  fdui->misc = obj = fl_add_button(FL_NORMAL_BUTTON,110,120,50,30,_("Misc"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lstyle(obj,FL_TIMESITALIC_STYLE);
+    fl_set_object_callback(obj,button_cb,MM_MISC);
+  fdui->equation = obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON,130,50,30,30,"");
+    fl_set_object_color(obj,FL_MCOL,FL_BLUE);
+    fl_set_object_callback(obj,button_cb,MM_EQU);
+  fdui->sqrt = obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON,10,15,30,30,"");
+    fl_set_object_color(obj,FL_MCOL,FL_BLUE);
+    fl_set_object_callback(obj,button_cb,MM_SQRT);
+  fdui->frac = obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON,40,15,30,30,"");
+    fl_set_object_color(obj,FL_MCOL,FL_BLUE);
+    fl_set_object_lcol(obj,FL_COL1);
+    fl_set_object_callback(obj,button_cb,MM_FRAC);
+  fdui->delim = obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON,10,50,30,30,"");
+    fl_set_object_color(obj,FL_MCOL,FL_BLUE);
+    fl_set_object_callback(obj,button_cb,MM_DELIM);
+  fdui->matrix = obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON,100,50,30,30,"");
+    fl_set_object_color(obj,FL_MCOL,FL_BLUE);
+    fl_set_object_callback(obj,button_cb,MM_MATRIX);
+  fdui->deco = obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON,40,50,30,30,"");
+    fl_set_object_color(obj,FL_MCOL,FL_BLUE);
+    fl_set_object_callback(obj,button_cb,MM_DECO);
+  fdui->space = obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON,70,50,30,30,"");
+    fl_set_object_color(obj,FL_MCOL,FL_BLUE);
+    fl_set_object_callback(obj,button_cb,MM_SPACE);
+  fl_end_form();
+
+  //fdui->panel->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_delim *create_form_delim(void)
+{
+  FL_OBJECT *obj;
+  FD_delim *fdui = (FD_delim *) fl_calloc(1, sizeof(FD_delim));
+
+  fdui->delim = fl_bgn_form(FL_NO_BOX, 250, 260);
+  obj = fl_add_box(FL_UP_BOX,0,0,250,260,"");
+  fdui->menu = obj = fl_add_bmtable(FL_PUSH_BUTTON,40,70,170,140,"");
+    fl_set_object_lcol(obj,FL_BLUE);
+    fl_set_object_callback(obj,delim_cb,2);
+
+  fdui->lado = fl_bgn_group();
+  fdui->right = obj = fl_add_checkbutton(FL_RADIO_BUTTON,40,40,80,30,idex(_("Right|#R")));fl_set_button_shortcut(obj,scex(_("Right|#R")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,delim_cb,4);
+  fdui->left = obj = fl_add_checkbutton(FL_RADIO_BUTTON,40,10,80,30,idex(_("Left|#L")));fl_set_button_shortcut(obj,scex(_("Left|#L")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,delim_cb,3);
+  fl_end_group();
+
+  obj = fl_add_button(FL_NORMAL_BUTTON,170,220,70,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,delim_cb,MM_CLOSE);
+  fdui->pix = obj = fl_add_pixmapbutton(FL_NORMAL_BUTTON,130,20,50,40,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+    fl_set_object_callback(obj,delim_cb,MM_APPLY);
+  obj = fl_add_button(FL_NORMAL_BUTTON,90,220,70,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,delim_cb,MM_APPLY);
+  obj = fl_add_button(FL_RETURN_BUTTON,10,220,70,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,delim_cb,MM_OK);
+  fl_end_form();
+
+  //fdui->delim->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_matrix *create_form_matrix(void)
+{
+  FL_OBJECT *obj;
+  FD_matrix *fdui = (FD_matrix *) fl_calloc(1, sizeof(FD_matrix));
+
+  fdui->matrix = fl_bgn_form(FL_NO_BOX, 280, 170);
+  obj = fl_add_box(FL_UP_BOX,0,0,280,170,"");
+  obj = fl_add_button(FL_RETURN_BUTTON,10,130,80,30,_("OK  "));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,matrix_cb,MM_OK);
+  obj = fl_add_button(FL_NORMAL_BUTTON,190,130,80,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,matrix_cb,MM_CLOSE);
+  fdui->rows = obj = fl_add_valslider(FL_HOR_NICE_SLIDER,10,30,160,30,_("Rows"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP);
+    fl_set_object_callback(obj,matrix_cb,-1);
+    fl_set_slider_precision(obj, 0);
+    fl_set_slider_bounds(obj, 1, 20);
+     fl_set_slider_return(obj, FL_RETURN_END_CHANGED);
+  fdui->columns = obj = fl_add_valslider(FL_HOR_NICE_SLIDER,10,90,160,30,_("Columns "));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP);
+    fl_set_object_callback(obj,matrix_cb,2);
+    fl_set_slider_precision(obj, 0);
+    fl_set_slider_bounds(obj, 1, 20);
+     fl_set_slider_return(obj, FL_RETURN_END_CHANGED);
+  fdui->valign = obj = fl_add_choice(FL_NORMAL_CHOICE,180,30,90,30,idex(_("Vertical align|#V")));fl_set_button_shortcut(obj,scex(_("Vertical align|#V")),1);
+    fl_set_object_boxtype(obj,FL_FRAME_BOX);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP);
+    fl_set_object_callback(obj,matrix_cb,-1);
+  fdui->halign = obj = fl_add_input(FL_NORMAL_INPUT,180,90,90,30,idex(_("Horizontal align|#H")));fl_set_button_shortcut(obj,scex(_("Horizontal align|#H")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP);
+    fl_set_object_callback(obj,matrix_cb,2);
+  obj = fl_add_button(FL_NORMAL_BUTTON,100,130,80,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,matrix_cb,MM_APPLY);
+  fl_end_form();
+
+  //fdui->matrix->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_deco *create_form_deco(void)
+{
+  FL_OBJECT *obj;
+  FD_deco *fdui = (FD_deco *) fl_calloc(1, sizeof(FD_deco));
+
+  fdui->deco = fl_bgn_form(FL_NO_BOX, 160, 150);
+  obj = fl_add_box(FL_UP_BOX,0,0,160,150,"");
+  fdui->menu = obj = fl_add_bmtable(FL_PUSH_BUTTON,10,10,140,90,"");
+    fl_set_object_lcol(obj,FL_BLUE);
+    fl_set_object_callback(obj,deco_cb,MM_APPLY);
+  obj = fl_add_button(FL_RETURN_BUTTON,30,110,100,30,_("Close"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,deco_cb,MM_CLOSE);
+  fl_end_form();
+
+  //fdui->deco->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_space *create_form_space(void)
+{
+  FL_OBJECT *obj;
+  FD_space *fdui = (FD_space *) fl_calloc(1, sizeof(FD_space));
+
+  fdui->space = fl_bgn_form(FL_NO_BOX, 280, 150);
+  obj = fl_add_box(FL_UP_BOX,0,0,280,150,"");
+  obj = fl_add_button(FL_RETURN_BUTTON,10,110,80,30,_("OK "));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,space_cb,MM_OK);
+  obj = fl_add_button(FL_NORMAL_BUTTON,190,110,80,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,space_cb,MM_CLOSE);
+  obj = fl_add_button(FL_NORMAL_BUTTON,100,110,80,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,space_cb,MM_APPLY);
+
+  fdui->spaces = fl_bgn_group();
+  obj = fl_add_checkbutton(FL_RADIO_BUTTON,20,10,120,30,idex(_("Thin|#T")));fl_set_button_shortcut(obj,scex(_("Thin|#T")),1);
+    fl_set_object_color(obj,FL_MCOL,FL_YELLOW);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,space_cb,1);
+  obj = fl_add_checkbutton(FL_RADIO_BUTTON,20,40,120,30,idex(_("Medium|#M")));fl_set_button_shortcut(obj,scex(_("Medium|#M")),1);
+    fl_set_object_color(obj,FL_MCOL,FL_YELLOW);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,space_cb,2);
+  obj = fl_add_checkbutton(FL_RADIO_BUTTON,20,70,120,30,idex(_("Thick|#H")));fl_set_button_shortcut(obj,scex(_("Thick|#H")),1);
+    fl_set_object_color(obj,FL_MCOL,FL_YELLOW);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,space_cb,3);
+  obj = fl_add_checkbutton(FL_RADIO_BUTTON,140,10,120,30,idex(_("Negative|#N")));fl_set_button_shortcut(obj,scex(_("Negative|#N")),1);
+    fl_set_object_color(obj,FL_MCOL,FL_YELLOW);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,space_cb,0);
+  obj = fl_add_checkbutton(FL_RADIO_BUTTON,140,40,120,30,idex(_("Quadratin|#Q")));fl_set_button_shortcut(obj,scex(_("Quadratin|#Q")),1);
+    fl_set_object_color(obj,FL_MCOL,FL_YELLOW);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,space_cb,4);
+  obj = fl_add_checkbutton(FL_RADIO_BUTTON,140,70,120,30,idex(_("2Quadratin|#2")));fl_set_button_shortcut(obj,scex(_("2Quadratin|#2")),1);
+    fl_set_object_color(obj,FL_MCOL,FL_YELLOW);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,space_cb,5);
+  fl_end_group();
+
+  fl_end_form();
+
+  //fdui->space->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
diff --git a/src/mathed/math_forms.h b/src/mathed/math_forms.h
new file mode 100644 (file)
index 0000000..d2757c2
--- /dev/null
@@ -0,0 +1,85 @@
+/** Header file generated with fdesign on Mon Apr 12 19:09:42 1999.**/
+
+#ifndef FD_panel_h_
+#define FD_panel_h_
+
+/** Callbacks, globals and object handlers **/
+extern void button_cb(FL_OBJECT *, long);
+
+extern void delim_cb(FL_OBJECT *, long);
+
+extern void matrix_cb(FL_OBJECT *, long);
+
+extern void deco_cb(FL_OBJECT *, long);
+
+extern void space_cb(FL_OBJECT *, long);
+
+
+/**** Forms and Objects ****/
+typedef struct {
+       FL_FORM *panel;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *func_browse;
+       FL_OBJECT *greek;
+       FL_OBJECT *arrow;
+       FL_OBJECT *boperator;
+       FL_OBJECT *brelats;
+       FL_OBJECT *varsize;
+       FL_OBJECT *misc;
+       FL_OBJECT *equation;
+       FL_OBJECT *sqrt;
+       FL_OBJECT *frac;
+       FL_OBJECT *delim;
+       FL_OBJECT *matrix;
+       FL_OBJECT *deco;
+       FL_OBJECT *space;
+} FD_panel;
+
+extern FD_panel * create_form_panel(void);
+typedef struct {
+       FL_FORM *delim;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *menu;
+       FL_OBJECT *lado;
+       FL_OBJECT *right;
+       FL_OBJECT *left;
+       FL_OBJECT *pix;
+} FD_delim;
+
+extern FD_delim * create_form_delim(void);
+typedef struct {
+       FL_FORM *matrix;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *rows;
+       FL_OBJECT *columns;
+       FL_OBJECT *valign;
+       FL_OBJECT *halign;
+} FD_matrix;
+
+extern FD_matrix * create_form_matrix(void);
+typedef struct {
+       FL_FORM *deco;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *menu;
+} FD_deco;
+
+extern FD_deco * create_form_deco(void);
+typedef struct {
+       FL_FORM *space;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *spaces;
+} FD_space;
+
+extern FD_space * create_form_space(void);
+
+#endif /* FD_panel_h_ */
diff --git a/src/mathed/math_hash.C b/src/mathed/math_hash.C
new file mode 100644 (file)
index 0000000..5be6cb7
--- /dev/null
@@ -0,0 +1,407 @@
+/* C code produced by gperf version 2.5 (GNU C++ version) */
+/* Command-line: gperf -a -p -o -t -G -D keywords  */
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "math_defs.h"
+#include "math_parser.h"
+//struct latexkeys { char* name; short token; int id; };
+
+#define TOTAL_KEYWORDS 269
+#define MIN_WORD_LENGTH 2
+#define MAX_WORD_LENGTH 18
+#define MIN_HASH_VALUE 8
+#define MAX_HASH_VALUE 490
+/* maximum key range = 483, duplicates = 40 */
+
+static unsigned int
+hash (register const char *str, register int len)
+{
+  static unsigned short asso_values[] =
+    {
+     491, 491, 491, 491, 491, 491, 491, 491, 491, 491,
+     491, 491, 491, 491, 491, 491, 491, 491, 491, 491,
+     491, 491, 491, 491, 491, 491, 491, 491, 491, 491,
+     491, 491, 491, 491, 491, 491, 491, 491, 491, 491,
+     491, 491, 491, 491, 491, 491, 491, 491, 491, 491,
+     491, 491, 491, 491, 491, 491, 491, 491, 491, 491,
+     491, 491, 491, 491, 491, 491, 491, 491,  95, 491,
+     491,  45, 491,  10, 491, 491, 255, 491, 491,  65,
+      30, 491,   0,  70,  80,  70,  15, 491,  10, 491,
+     491, 491, 491, 491, 491, 491, 491,  50, 200, 140,
+     219,  35, 135, 237, 230,  69,   0,  20,  10, 180,
+     105, 247,  55, 208, 125,   0,  25,  42, 255,  75,
+       5,   0,   0, 491, 491, 491, 491, 491,
+    };
+  return len + asso_values[str[len - 1]] + asso_values[str[0]];
+}
+
+static struct latexkeys wordlist[] =
+{
+      {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
+      {"setminus",  LM_TK_SYM, LM_setminus},
+      {"ldots",  LM_TK_DOTS, LM_ldots},
+      {"limits",  LM_TK_LIMIT, 1 },
+      {"stackrel",  LM_TK_STACK},
+      {"ll",  LM_TK_SYM, LM_ll},
+      {"label",  LM_TK_LABEL},
+      {"lceil",  LM_TK_SYM, LM_lceil},
+      {"sqrt",  LM_TK_SQRT},
+      {"times",  LM_TK_SYM, LM_times},
+      {"subset",  LM_TK_SYM, LM_subset},
+      {"supset",  LM_TK_SYM, LM_supset},
+      {"spadesuit",  LM_TK_SYM, LM_spadesuit},
+      {"Re",  LM_TK_SYM, LM_Re},
+      {"left",  LM_TK_LEFT},
+      {"smile",  LM_TK_SYM, LM_smile},
+      {"exists",  LM_TK_SYM, LM_exists},
+      {"Vert",  LM_TK_SYM, LM_Vert},
+      {"scriptstyle",  LM_TK_STY, LM_ST_SCRIPT},
+      {"uplus",  LM_TK_SYM, LM_uplus},
+      {"ell",  LM_TK_SYM, LM_ell},
+      {"langle",  LM_TK_SYM, LM_langle},
+      {"scriptscriptstyle",  LM_TK_STY, LM_ST_SCRIPTSCRIPT},
+      {"zeta",  LM_TK_SYM, LM_zeta},
+      {"sigma",  LM_TK_SYM, LM_sigma},
+      {"arccos",  LM_TK_FUNC},
+      {"sup",  LM_TK_FUNCLIM},
+      {"sharp",  LM_TK_SYM, LM_sharp},
+      {"sqcup",  LM_TK_SYM, LM_sqcup},
+      {"sqcap",  LM_TK_SYM, LM_sqcap},
+      {"approx",  LM_TK_SYM, LM_approx},
+      {"triangleleft",  LM_TK_SYM, LM_triangleleft},
+      {"triangleright",  LM_TK_SYM, LM_triangleright},
+      {"tilde",  LM_TK_ACCENT, LM_tilde},
+      {"lambda",  LM_TK_SYM, LM_lambda},
+      {"emptyset",  LM_TK_MACRO, LM_emptyset},
+      {"triangle",  LM_TK_SYM, LM_triangle},
+      {"textstyle",  LM_TK_STY, LM_ST_TEXT},
+      {"tau",  LM_TK_SYM, LM_tau},
+      {"limsup",  LM_TK_FUNCLIM},
+      {"partial",  LM_TK_SYM, LM_partial},
+      {"parallel",  LM_TK_SYM, LM_parallel},
+      {"infty",  LM_TK_SYM, LM_infty},
+      {"kappa",  LM_TK_SYM, LM_kappa},
+      {"xi",  LM_TK_SYM, LM_xi},
+      {"leftharpoonup",  LM_TK_SYM, LM_leftharpoonup},
+      {"theta",  LM_TK_SYM, LM_theta},
+      {"Xi",  LM_TK_SYM, LM_Xi},
+      {"searrow",  LM_TK_SYM, LM_searrow},
+      {"swarrow",  LM_TK_SYM, LM_swarrow},
+      {"top",  LM_TK_SYM, LM_top},
+      {"Rightarrow",  LM_TK_SYM, LM_Rightarrow},
+      {"underline",  LM_TK_WIDE, LM_underline},
+      {"underbrace",  LM_TK_WIDE, LM_underbrace},
+      {"eta",  LM_TK_SYM, LM_eta},
+      {"acute",  LM_TK_ACCENT, LM_acute},
+      {"angle",  LM_TK_SYM, LM_angle},
+      {"exp",  LM_TK_FUNC},
+      {"leftarrow",  LM_TK_SYM, LM_leftarrow},
+      {"prime",  LM_TK_SYM, LM_prime},
+      {"int",  LM_TK_BIGSYM, LM_int},
+      {"longleftarrow",  LM_TK_SYM, LM_longleftarrow},
+      {"leftrightarrow",  LM_TK_SYM, LM_leftrightarrow},
+      {"longrightarrow",  LM_TK_SYM, LM_longrightarrow},
+      {"Gamma",  LM_TK_SYM, LM_Gamma},
+      {"Pi",  LM_TK_SYM, LM_Pi},
+      {"Phi",  LM_TK_SYM, LM_Phi},
+      {"Psi",  LM_TK_SYM, LM_Psi},
+      {"longleftrightarrow",  LM_TK_SYM, LM_longleftrightarrow},
+      {"alpha",  LM_TK_SYM, LM_alpha},
+      {"widehat",  LM_TK_WIDE, LM_widehat},
+      {"sin",  LM_TK_FUNC},
+      {"asymp",  LM_TK_SYM, LM_asymp},
+      {"nolimits",  LM_TK_LIMIT, 0 },
+      {"perp",  LM_TK_MACRO, LM_perp},
+      {"wedge",  LM_TK_SYM, LM_wedge},
+      {"ln",  LM_TK_FUNC},
+      {"widetilde",  LM_TK_WIDE, LM_widetilde},
+      {"Omega",  LM_TK_SYM, LM_Omega},
+      {"natural",  LM_TK_SYM, LM_natural},
+      {"iota",  LM_TK_SYM, LM_iota},
+      {"uparrow",  LM_TK_SYM, LM_uparrow},
+      {"Sigma",  LM_TK_SYM, LM_Sigma},
+      {"pi",  LM_TK_SYM, LM_pi},
+      {"phi",  LM_TK_SYM, LM_phi},
+      {"psi",  LM_TK_SYM, LM_psi},
+      {"updownarrow",  LM_TK_SYM, LM_updownarrow},
+      {"star",  LM_TK_SYM, LM_star},
+      {"leftharpoondown",  LM_TK_SYM, LM_leftharpoondown},
+      {"wp",  LM_TK_SYM, LM_wp},
+      {"not",  LM_TK_ACCENT, LM_not},
+      {"tan",  LM_TK_FUNC},
+      {"Theta",  LM_TK_SYM, LM_Theta},
+      {"rceil",  LM_TK_SYM, LM_rceil},
+      {"lfloor",  LM_TK_SYM, LM_lfloor},
+      {"rightleftharpoons",  LM_TK_SYM, LM_rightleftharpoons},
+      {"cos",  LM_TK_FUNC},
+      {"sec",  LM_TK_FUNC},
+      {"succ",  LM_TK_SYM, LM_succ},
+      {"cdots",  LM_TK_DOTS, LM_cdots},
+      {"epsilon",  LM_TK_SYM, LM_epsilon},
+      {"ker",  LM_TK_FUNC},
+      {"nu",  LM_TK_SYM, LM_nu},
+      {"Delta",  LM_TK_SYM, LM_Delta},
+      {"forall",  LM_TK_SYM, LM_forall},
+      {"liminf",  LM_TK_FUNCLIM},
+      {"Uparrow",  LM_TK_SYM, LM_Uparrow},
+      {"upsilon",  LM_TK_SYM, LM_upsilon},
+      {"right",  LM_TK_RIGHT},
+      {"Updownarrow",  LM_TK_SYM, LM_Updownarrow},
+      {"Pr",  LM_TK_FUNCLIM},
+      {"nabla",  LM_TK_SYM, LM_nabla},
+      {"arcsin",  LM_TK_FUNC},
+      {"arctan",  LM_TK_FUNC},
+      {"flat",  LM_TK_SYM, LM_flat},
+      {"check",  LM_TK_ACCENT, LM_check},
+      {"rangle",  LM_TK_SYM, LM_rangle},
+      {"cot",  LM_TK_FUNC},
+      {"cdot",  LM_TK_SYM, LM_cdot},
+      {"clubsuit",  LM_TK_SYM, LM_clubsuit},
+      {"in",  LM_TK_SYM, LM_in},
+      {"ni",  LM_TK_SYM, LM_ni},
+      {"Downarrow",  LM_TK_SYM, LM_Downarrow},
+      {"Upsilon",  LM_TK_SYM, LM_Upsilon},
+      {"sim",  LM_TK_SYM, LM_sim},
+      {"sum",  LM_TK_BIGSYM, LM_sum},
+      {"models",  LM_TK_SYM, LM_models},
+      {"nearrow",  LM_TK_SYM, LM_nearrow},
+      {"nwarrow",  LM_TK_SYM, LM_nwarrow},
+      {"max",  LM_TK_FUNCLIM},
+      {"Im",  LM_TK_SYM, LM_Im},
+      {"lim",  LM_TK_FUNCLIM},
+      {"rightharpoonup",  LM_TK_SYM, LM_rightharpoonup},
+      {"mathcal",  LM_TK_FONT, LM_TC_CAL},
+      {"cap",  LM_TK_SYM, LM_cap},
+      {"cup",  LM_TK_SYM, LM_cup},
+      {"prec",  LM_TK_SYM, LM_prec},
+      {"mathnormal",  LM_TK_FONT, LM_TC_NORMAL},
+      {"wr",  LM_TK_SYM, LM_wr},
+      {"inf",  LM_TK_FUNCLIM},
+      {"bigoplus",  LM_TK_BIGSYM, LM_oplus},
+      {"biguplus",  LM_TK_BIGSYM, LM_biguplus},
+      {"bigotimes",  LM_TK_BIGSYM, LM_otimes},
+      {"rightarrow",  LM_TK_SYM, LM_rightarrow},
+      {"mathit",  LM_TK_FONT, LM_TC_IT},
+      {"textrm",  LM_TK_FONT, LM_TC_TEXTRM},
+      {"mathtt",  LM_TK_FONT, LM_TC_TT},
+      {"chi",  LM_TK_SYM, LM_chi},
+      {"simeq",  LM_TK_SYM, LM_simeq},
+      {"succeq",  LM_TK_SYM, LM_succeq},
+      {"notin",  LM_TK_MACRO, LM_notin},
+      {"subseteq",  LM_TK_SYM, LM_subseteq},
+      {"supseteq",  LM_TK_SYM, LM_supseteq},
+      {"sqsubseteq",  LM_TK_SYM, LM_sqsubseteq},
+      {"sqsupseteq",  LM_TK_SYM, LM_sqsupseteq},
+      {"leq",  LM_TK_SYM, LM_leq},
+      {"surd",  LM_TK_SYM, LM_surd},
+      {"ddots",  LM_TK_DOTS, LM_ddots},
+      {"mu",  LM_TK_SYM, LM_mu},
+      {"bot",  LM_TK_SYM, LM_bot},
+      {"bullet",  LM_TK_SYM, LM_bullet},
+      {"bigodot",  LM_TK_BIGSYM, LM_bigodot},
+      {"sinh",  LM_TK_FUNC},
+      {"jmath",  LM_TK_SYM, LM_jmath},
+      {"mp",  LM_TK_SYM, LM_mp},
+      {"pm",  LM_TK_SYM, LM_pm},
+      {"nonumber",  LM_TK_NONUM},
+      {"breve",  LM_TK_ACCENT, LM_breve},
+      {"bigvee",  LM_TK_BIGSYM, LM_vee},
+      {"bowtie",  LM_TK_SYM, LM_bowtie},
+      {"bigwedge",  LM_TK_BIGSYM, LM_wedge},
+      {"frown",  LM_TK_SYM, LM_frown},
+      {"rightharpoondown",  LM_TK_SYM, LM_rightharpoondown},
+      {"det",  LM_TK_FUNCLIM},
+      {"dot",  LM_TK_ACCENT, LM_dot},
+      {"ddot",  LM_TK_ACCENT, LM_ddot},
+      {"lg",  LM_TK_FUNC},
+      {"log",  LM_TK_FUNC},
+      {"oplus",  LM_TK_SYM, LM_oplus},
+      {"ominus",  LM_TK_SYM, LM_ominus},
+      {"otimes",  LM_TK_SYM, LM_otimes},
+      {"beta",  LM_TK_SYM, LM_beta},
+      {"diamondsuit",  LM_TK_SYM, LM_diamondsuit},
+      {"rfloor",  LM_TK_SYM, LM_rfloor},
+      {"end",  LM_TK_END},
+      {"hat",  LM_TK_ACCENT, LM_hat},
+      {"tanh",  LM_TK_FUNC},
+      {"vdots",  LM_TK_DOTS, LM_vdots},
+      {"bigcap",  LM_TK_BIGSYM, LM_cap},
+      {"bigcup",  LM_TK_BIGSYM, LM_cup},
+      {"bigsqcup",  LM_TK_BIGSYM, LM_bigsqcup},
+      {"heartsuit",  LM_TK_SYM, LM_heartsuit},
+      {"displaystyle",  LM_TK_STY, LM_ST_DISPLAY},
+      {"longmapsto",  LM_TK_SYM, LM_longmapsto},
+      {"bigtriangleup",  LM_TK_SYM, LM_bigtriangleup},
+      {"preceq",  LM_TK_SYM, LM_preceq},
+      {"delta",  LM_TK_SYM, LM_delta},
+      {"odot",  LM_TK_SYM, LM_odot},
+      {"oint",  LM_TK_BIGSYM, LM_oint},
+      {"grave",  LM_TK_ACCENT, LM_grave},
+      {"pmod",  LM_TK_PMOD},
+      {"prod",  LM_TK_BIGSYM, LM_prod},
+      {"frac",  LM_TK_FRAC},
+      {"csc",  LM_TK_FUNC},
+      {"circ",  LM_TK_SYM, LM_circ},
+      {"aleph",  LM_TK_SYM, LM_aleph},
+      {"min",  LM_TK_FUNCLIM},
+      {"overline",  LM_TK_WIDE, LM_overline},
+      {"arg",  LM_TK_FUNC},
+      {"overbrace",  LM_TK_WIDE, LM_overbrace},
+      {"amalg",  LM_TK_SYM, LM_amalg},
+      {"gamma",  LM_TK_SYM, LM_gamma},
+      {"vee",  LM_TK_SYM, LM_vee},
+      {"equiv",  LM_TK_SYM, LM_equiv},
+      {"omega",  LM_TK_SYM, LM_omega},
+      {"downarrow",  LM_TK_SYM, LM_downarrow},
+      {"imath",  LM_TK_SYM, LM_imath},
+      {"propto",  LM_TK_SYM, LM_propto},
+      {"begin",  LM_TK_BEGIN},
+      {"Lambda",  LM_TK_SYM, LM_Lambda},
+      {"varsigma",  LM_TK_SYM, LM_varsigma},
+      {"vartheta",  LM_TK_SYM, LM_vartheta},
+      {"neq",  LM_TK_SYM, LM_neq},
+      {"hookleftarrow",  LM_TK_SYM, LM_hookleftarrow},
+      {"hookrightarrow",  LM_TK_SYM, LM_hookrightarrow},
+      {"bigtriangledown",  LM_TK_SYM, LM_bigtriangledown},
+      {"mathbf",  LM_TK_FONT, LM_TC_BF},
+      {"mathsf",  LM_TK_FONT, LM_TC_SF},
+      {"bar",  LM_TK_ACCENT, LM_bar},
+      {"varpi",  LM_TK_SYM, LM_varpi},
+      {"varphi",  LM_TK_SYM, LM_varphi},
+      {"newcommand",  LM_TK_NEWCOMMAND },
+      {"overleftarrow",  LM_TK_WIDE, LM_overleftarrow},
+      {"overrightarrow",  LM_TK_WIDE, LM_overightarrow},
+      {"Leftarrow",  LM_TK_SYM, LM_Leftarrow},
+      {"Longleftarrow",  LM_TK_SYM, LM_Longleftarrow},
+      {"Leftrightarrow",  LM_TK_SYM, LM_Leftrightarrow},
+      {"Longrightarrow",  LM_TK_SYM, LM_Longrightarrow},
+      {"neg",  LM_TK_SYM, LM_neg},
+      {"bigcirc",  LM_TK_SYM, LM_bigcirc},
+      {"Longleftrightarrow",  LM_TK_SYM, LM_Longleftrightarrow},
+      {"dagger",  LM_TK_SYM, LM_dagger},
+      {"ddagger",  LM_TK_SYM, LM_ddagger},
+      {"hbar",  LM_TK_SYM, LM_hbar},
+      {"coprod",  LM_TK_BIGSYM, LM_coprod},
+      {"mathrm",  LM_TK_FONT, LM_TC_RM},
+      {"varepsilon",  LM_TK_SYM, LM_varepsilon},
+      {"cosh",  LM_TK_FUNC},
+      {"coth",  LM_TK_FUNC},
+      {"rho",  LM_TK_SYM, LM_rho},
+      {"cong",  LM_TK_SYM, LM_cong},
+      {"vec",  LM_TK_ACCENT, LM_vec},
+      {"dim",  LM_TK_FUNC},
+      {"mid",  LM_TK_SYM, LM_mid},
+      {"hom",  LM_TK_FUNC},
+      {"bmod",  LM_TK_FUNC},
+      {"quad",  LM_TK_SPACE, LM_quad},
+      {"doteq",  LM_TK_SYM, LM_doteq},
+      {"qquad",  LM_TK_SPACE, LM_qquad},
+      {"mapsto",  LM_TK_SYM, LM_mapsto},
+      {"backslash",  LM_TK_SYM, LM_backslash},
+      {"diamond",  LM_TK_SYM, LM_diamond},
+      {"geq",  LM_TK_SYM, LM_geq},
+      {"deg",  LM_TK_FUNC},
+      {"gcd",  LM_TK_FUNCLIM},
+      {"gg",  LM_TK_SYM, LM_gg},
+      {"div",  LM_TK_SYM, LM_div},
+      {"dashv",  LM_TK_SYM, LM_dashv},
+      {"oslash",  LM_TK_SYM, LM_oslash},
+      {"vdash",  LM_TK_SYM, LM_vdash},
+};
+
+static short lookup[] =
+{
+        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   8,  -1,  -1,  -1,  -1,  -1,
+        -1,   9,  10,  -1,  11,  -1,  -1,  -1,  12,  -1,  -1, 491, -13,  -2,
+        -1,  15,  16, 491, -17,  -2,  19,  -1,  -1,  20,  -1,  21,  22,  23,
+        -1,  -1,  24,  -1,  25,  26,  27,  -1,  -1,  28,  29,  -1,  30,  31,
+        32,  -1,  33,  -1, 635,  37,  38,  39,  -1,  40,  41,  -1, 617,  44,
+        45,  46,  47,  48,  49,  50,  51,  -1,  52,  -1,  53,  54, 588,  57,
+        -1,  58,  59,  60,  61,  -1, 491, -62,  -2,  64,  65,  66,  -1,  67,
+        68, 565,  71,  72, 499,  75,  -1,  76,  -1,  77,  78,  -1,  79, -73,
+        -2,  80,  81,  82,  -1,  83,  -1,  84,  85,  -1,  86,  87,  88,  89,
+        90, 501,  93,  94,  95,  -1,  96, 493,  -1,  99, -97,  -2, -91,  -2,
+       100, 101, 102, 517, 105, 106,  -1, 107, 108, 109, 110, 497, 113,  -1,
+       114, 115, 116, 117,-111,  -2, 118, 491,-119,  -2, 121, 122, 123,  -1,
+       124, 125,-103,  -2,  -1, 126, -69,  -2, 491,-127,  -2, 129, -55,  -2,
+       130, 491,-131,  -2, 133, 492, 136,-134,  -2,  -1, 137, 138, 139, -42,
+        -2, 140, 495, 143, 144,  -1, 145,-141,  -2, -34,  -3, 146, 613, 149,
+       150, 605, 154, 155, 156, 157, 503,  -1, 491,-160,  -2, 162,  -1, 163,
+       491,-164,  -2,  -1, 166,-158,  -2, 167, 168,  -1, 169, 170,  -1, 577,
+       173,  -1, 174, 554,  -1, 177,  -1, 178, 179, 543, 182, 183, 184,  -1,
+       185, 509, 188, 189, 190, 191, 192, 193, 194, 499,  -1, 197, 198,  -1,
+       199, 200, 201, 202,-195,  -2,-186,  -2, 203,  -1, 500, 206, 492, 209,
+      -207,  -2,  -1, 210, 211, 212,-204,  -2, 213,  -1, 498, 216, 494, 219,
+        -1, 220,-217,  -2,-214,  -2,-180,  -2, 221, 222, 223,-175,  -2,  -1,
+       224,  -1, 225, 226,  -1, 491,-227,  -2, 229,  -1, 230, 231, 232, 491,
+      -233,  -2,-171,  -2,-151,  -3, 235, 236, 237,-147,  -2,  -1, 238, 239,
+       240,  -1,  -1, 241,  -1,  -1,  -1, 242, 498, 245,  -1, 246, 247,  -1,
+       248, 249,-243,  -2,  -1,  -1,  -1,  -1,  -1, 250,  -1,  -1,  -1,  -1,
+        -1, 251, 252,  -1,  -1,  -1, 253,  -1,  -1,  -1, 492, 256,-254,  -2,
+        -1,  -1,  -1, 257,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+        -1,  -1,  -1,  -1,  -1,  -1, 258,  -1,  -1,  -1, 491,-259,  -2,  -1,
+        -1,  -1,  -1,  -1,  -1,  -1,  -1, 261,  -1,  -1,  -1,  -1,  -1,  -1,
+        -1,  -1,  -1, 262,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 263, 492, 266,
+      -264,  -2,  -1,  -1,  -1, 267,  -1,  -1,  -1,  -1,  -1, 268,  -1,  -1,
+       269,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1, 491,-270,  -2,
+        -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+       272, 273,  -1, 274,  -1,  -1,  -1, 275,  -1,  -1,  -1,  -1,  -1,  -1,
+       276,
+};
+
+struct latexkeys *
+in_word_set (register const char *str, register int len)
+{
+  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+    {
+      register int key = hash (str, len);
+
+      if (key <= MAX_HASH_VALUE && key >= 0)
+        {
+          register int index = lookup[key];
+
+          if (index >= 0 && index < MAX_HASH_VALUE)
+            {
+              register char const *s = wordlist[index].name;
+
+              if (*s == *str && !strcmp (str + 1, s + 1))
+                return &wordlist[index];
+            }
+          else if (index < 0 && index >= -MAX_HASH_VALUE)
+            return 0;
+          else
+            {
+              register int offset = key + index + (index > 0 ? -MAX_HASH_VALUE : MAX_HASH_VALUE);
+              register struct latexkeys *base = &wordlist[-lookup[offset]];
+              register struct latexkeys *ptr = base + -lookup[offset + 1];
+
+              while (--ptr >= base)
+                if (*str == *ptr->name && !strcmp (str + 1, ptr->name + 1))
+                  return ptr;
+            }
+        }
+    }
+  return 0;
+}
+
+latexkeys *lm_get_key_by_id(int t, short tk)
+{
+   latexkeys* l = &wordlist[MIN_HASH_VALUE+TOTAL_KEYWORDS];
+   latexkeys* base = &wordlist[MIN_HASH_VALUE];
+   while (--l >= base) {
+     if (t==l->id && tk==l->token)
+       return l;
+   }
+   return NULL;
+}
+
+latexkeys *lm_get_key_by_index(int i)
+{
+   if (i>0 && i<TOTAL_KEYWORDS+2)
+     return &wordlist[i];
+   else
+     return NULL;
+}
diff --git a/src/mathed/math_inset.C b/src/mathed/math_inset.C
new file mode 100644 (file)
index 0000000..caf2c80
--- /dev/null
@@ -0,0 +1,540 @@
+/*
+ *  File:        math_inset.C
+ *  Purpose:     Implementation of insets for mathed
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: 
+ *
+ *  Dependencies: Xlib, XForms
+ *
+ *  Copyright: (c) 1996, 1997 Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "math_inset.h"
+#endif
+
+#include "math_iter.h"
+#include "math_inset.h"
+#include "symbol_def.h"
+
+
+inline
+char *strnew(char const* s)
+{
+   char *s1 = new char[strlen(s)+1];
+   return strcpy(s1, s);
+}
+
+
+MathedInset::MathedInset(MathedInset* inset) 
+{
+   if (inset) {
+      name = inset->GetName();
+      objtype = inset->GetType();
+      size = inset->GetStyle();
+      width = inset->Width();
+      ascent = inset->Ascent();
+      descent = inset->Descent();
+   } else {
+      objtype = LM_OT_UNDEF;
+      size = LM_ST_TEXT;
+      width = ascent = descent = 0;
+      name = 0;
+   }
+}
+
+
+MathFuncInset::MathFuncInset(char const *nm, short ot, short st):
+    MathedInset("", ot, st)
+{
+   ln = 0;
+   lims = (GetType()==LM_OT_FUNCLIM);
+    if (GetType()==LM_OT_UNDEF) {
+       fname = strnew(nm);
+       SetName(fname);
+    } else {
+       fname = 0;
+       SetName(nm);
+    }
+}
+
+MathedInset *MathFuncInset::Clone()
+{ 
+   MathedInset *l = new MathFuncInset(name, GetType(), GetStyle());
+   return l;
+}
+
+MathSpaceInset::MathSpaceInset(int sp, short ot, short st):
+    MathedInset("", ot, st), space(sp)
+{
+}
+
+MathedInset *MathSpaceInset::Clone()
+{ 
+   MathedInset *l = new MathSpaceInset(space, GetType(), GetStyle());
+   return l;
+}
+
+MathParInset::MathParInset(short st, char const *nm, short ot):
+   MathedInset(nm, ot, st)
+{
+    array = 0;
+    ascent = 8;
+    width = 4;
+    descent = 0;
+    flag = 1;
+    if (objtype==LM_OT_SCRIPT)
+      flag |= LMPF_SCRIPT;
+}
+
+MathParInset::MathParInset(MathParInset* p): MathedInset(p)
+{
+    flag = p->flag;
+    p->setArgumentIdx(0);
+    MathedIter it(p->GetData());
+    SetData(it.Copy());
+}
+
+
+MathParInset::~MathParInset()
+{
+   if (array) {
+      MathedIter it(array);
+      it.Clear();
+      delete array;
+   }
+}
+
+
+MathedInset *MathParInset::Clone()
+{   
+   MathParInset* p = new MathParInset(this);
+   return p;
+}
+
+
+void MathParInset::SetData(LyxArrayBase *a)
+{
+    array = a;
+   
+    // A standard paragraph shouldn't have any tabs nor CRs.
+    if (array) {
+       MathedIter it(array);
+       while (it.OK()) {
+           char c = it.GetChar();
+           if (c==LM_TC_TAB || c==LM_TC_CR) 
+             it.Delete();
+           else
+             it.Next();
+       }
+   }
+}
+
+
+MathSqrtInset::MathSqrtInset(short st): MathParInset(st, "sqrt", LM_OT_SQRT)
+{    
+}
+
+
+MathedInset *MathSqrtInset::Clone()
+{   
+   MathSqrtInset* p = new MathSqrtInset(GetStyle());
+   MathedIter it(array);
+   p->SetData(it.Copy());
+   return p;
+}
+
+
+bool MathSqrtInset::Inside(int x, int y) 
+{
+    return (x>=xo-hmax && x<=xo+width-hmax && y<=yo+descent && y>=yo-ascent);
+}
+
+
+MathDelimInset::MathDelimInset(int l, int r, short st): 
+  MathParInset(st, "", LM_OT_DELIM), left(l), right(r)
+{
+}
+
+MathedInset *MathDelimInset::Clone()
+{   
+   MathDelimInset* p = new MathDelimInset(left, right, GetStyle());
+   MathedIter it(array);
+   p->SetData(it.Copy());
+   return p;
+}
+
+
+MathDecorationInset::MathDecorationInset(int d, short st): 
+  MathParInset(st, "", LM_OT_DECO), deco(d)
+{
+   upper = (deco!=LM_underline && deco!=LM_underbrace);
+}
+
+MathedInset *MathDecorationInset::Clone()
+{   
+   MathDecorationInset* p = new MathDecorationInset(deco, GetStyle());
+   MathedIter it(array);
+   p->SetData(it.Copy());
+   return p;
+}
+
+MathFracInset::MathFracInset(short ot): MathParInset(LM_ST_TEXT, "frac", ot)
+{
+       
+    den = new MathParInset(LM_ST_TEXT); // this leaks
+    dh = 0;
+    idx = 0;
+    if (objtype==LM_OT_STACKREL) {
+       flag |= LMPF_SCRIPT;
+       SetName("stackrel");
+    }
+}
+
+MathFracInset::~MathFracInset()
+{
+    delete den;
+}
+
+MathedInset *MathFracInset::Clone()
+{   
+    MathFracInset* p = new MathFracInset(GetType());
+    MathedIter itn(array);
+    MathedIter itd(den->GetData());
+    p->SetData(itn.Copy(), itd.Copy());
+    p->idx = idx;
+    p->dh = dh;
+   return p;
+}
+
+bool MathFracInset::setArgumentIdx(int i)
+{
+   if (i==0 || i==1) {
+       idx = i;
+       return true;
+   } else 
+      return false;
+}
+
+
+void MathFracInset::SetStyle(short st)
+{
+    MathParInset::SetStyle(st);
+    dh = 0;
+    den->SetStyle((size==LM_ST_DISPLAY) ? (short)LM_ST_TEXT: size);
+}
+
+void MathFracInset::SetData(LyxArrayBase *n, LyxArrayBase *d)
+{
+   den->SetData(d);
+   MathParInset::SetData(n);
+}
+
+void MathFracInset::SetData(LyxArrayBase *d)
+{
+   if (idx==0)
+     MathParInset::SetData(d);
+   else {
+      den->SetData(d);
+   }
+}
+
+void MathFracInset::GetXY(int& x, int& y) const
+{  
+   if (idx==0)
+     MathParInset::GetXY(x, y);
+   else
+     den->GetXY(x, y);
+}
+   
+LyxArrayBase *MathFracInset::GetData()
+{
+   if (idx==0)
+     return array;
+   else
+     return den->GetData();
+}
+
+
+bool MathFracInset::Inside(int x, int y) 
+{
+    int xx = xo - (width-w0)/2;
+    
+    return (x>=xx && x<=xx+width && y<=yo+descent && y>=yo-ascent);
+}
+
+void MathFracInset::SetFocus(int /*x*/, int y)
+{  
+//    fprintf(stderr, "y %d %d %d ", y, yo, den->yo);
+    idx = (y > yo) ? 1: 0;
+}
+
+
+MathMatrixInset::MathMatrixInset(int m, int n, short st): 
+   MathParInset(st, "array", LM_OT_MATRIX), nc(m)
+{
+    ws = new int[nc]; 
+    v_align = 0;
+    h_align = new char[nc+1];
+    for (int i =0; i<nc; i++) h_align[i] = 'c'; 
+    h_align[nc] = '\0';
+    nr = 0;
+    row = 0;
+    flag = 15;
+    if (n>0) {
+           row = new MathedRowSt(nc+1);
+       MathedXIter it(this);
+       for (int i=1; i<n; i++) it.addRow();
+       nr = n;
+       if (nr==1 && nc>1) {
+           for (int i=0; i<nc-1; i++) 
+             it.Insert('T', LM_TC_TAB);
+       }
+    } else if (n<0) {
+           row = new MathedRowSt(nc+1);
+       nr = 1;
+    }
+}
+
+
+MathMatrixInset::MathMatrixInset(MathMatrixInset *mt): 
+   MathParInset(mt->GetStyle(), mt->GetName(), mt->GetType())
+{
+    nr = 0;
+    nc = mt->nc;
+    ws = new int[nc];
+    h_align = new char[nc+1];
+    strcpy(h_align, mt->GetAlign(&v_align));
+    MathedIter it;   
+    it.SetData(mt->GetData());
+    array = it.Copy();
+    if (mt->row != 0) {
+       MathedRowSt *r, *ro=0, *mrow = mt->row;
+       mrow = mt->row;
+       while (mrow) {
+           r = new MathedRowSt(nc+1);
+           r->numbered = mrow->numbered;
+           if (mrow->label) 
+             r->label = strnew(mrow->label);
+           if (!ro) 
+             row = r;
+           else
+             ro->next = r;
+           mrow = mrow->next;
+           ro = r;
+           nr++;
+       } 
+    } else         
+      row = 0;
+    flag = mt->flag;
+}
+
+
+MathMatrixInset::~MathMatrixInset()
+{
+    delete[] ws;
+    
+    MathedRowSt *r = row;    
+    while (r) {
+       MathedRowSt *q = r->next;
+       delete r;
+       r = q;
+    }
+}
+
+MathedInset *MathMatrixInset::Clone()
+{   
+    MathMatrixInset* mt = new MathMatrixInset(this);
+    return mt;
+}
+
+void MathMatrixInset::SetAlign(char vv, char const* hh)
+{
+   v_align = vv;
+   strncpy(h_align, hh, nc);
+}
+
+
+// Check the number of tabs and crs
+void MathMatrixInset::SetData(LyxArrayBase *a)
+{
+    if (!a) return;
+    MathedIter it(a);
+    int nn = nc-1;
+    nr = 1;
+    // count tabs per row
+    while (it.OK()) {
+       if (it.IsTab()) {
+           if (nn<0) { 
+               it.Delete();
+               continue;
+           } else {
+//           it.Next();
+               nn--;
+           }
+       }
+       if (it.IsCR()) {
+           while (nn>0) {
+               it.Insert(' ', LM_TC_TAB);
+               nn--;
+           }
+           nn = nc-1;
+           nr++;
+       }
+       it.Next();
+    }  
+    it.Reset();
+
+    // Automatically inserts tabs around bops
+    // DISABLED because it's very easy to insert tabs 
+    array = a;
+}
+
+
+void MathMatrixInset::Draw(int x, int baseline)
+{
+    MathParInset::Draw(x, baseline);
+}                
+
+void MathMatrixInset::Metrics()
+{
+    int i, /*cy,*/ hl, h=0;
+    MathedRowSt *cprow=0, *cxrow;
+
+    if (!row) {
+//     fprintf(stderr, " MIDA ");
+       MathedXIter it(this);
+       row = it.adjustVerticalSt();
+    } 
+    
+    // Clean the arrays      
+    cxrow = row;
+    while (cxrow) {   
+       for (i=0; i<=nc; i++) cxrow->w[i] = 0;
+       cxrow = cxrow->next;
+    }
+    
+    // Basic metrics
+    MathParInset::Metrics();
+           
+    if (nc<=1 && !row->next) {
+       row->asc = ascent;
+       row->desc = descent;
+    }
+    
+    // Vertical positions of each row
+    cxrow = row;     
+    while (cxrow) {
+       for (i=0; i<nc; i++) {
+           if (cxrow==row || ws[i]<cxrow->w[i]) ws[i]=cxrow->w[i];
+           if (cxrow->next==0 && ws[i]==0) ws[i] = df_width;
+       }
+       
+       cxrow->y = (cxrow==row) ? cxrow->asc:
+                  cxrow->asc + cprow->desc + MATH_ROWSEP + cprow->y;
+       h += cxrow->asc + cxrow->desc + MATH_ROWSEP;    
+       cprow = cxrow;
+       cxrow = cxrow->next;
+    }
+    
+    hl = Descent();
+    h -= MATH_ROWSEP;
+
+    //  Compute vertical align
+    switch (v_align) {
+     case 't': ascent = row->y; break;
+     case 'b': ascent = h - hl; break;
+     default:  ascent = (row->next) ? h/2: h - hl; break;
+    }
+    descent = h - ascent + 2;
+    
+   
+   // Adjust local tabs
+    cxrow = row;
+    width = MATH_COLSEP;
+    while (cxrow) {   
+       int rg=MATH_COLSEP, ww, lf=0, *w = cxrow->w;
+       for (i=0; i<nc; i++) {
+           bool isvoid = false;
+           if (w[i]<=0) {
+               w[i] = df_width;
+               isvoid = true;
+           }
+           switch (h_align[i]) {
+            case 'l': lf = 0; break;
+            case 'c': lf = (ws[i] - w[i])/2; 
+                      break;
+            case 'r': lf = ws[i] - w[i]; break;
+           }
+           ww = (isvoid) ? lf: lf + w[i];
+           w[i] = lf + rg;
+           rg = ws[i] - ww + MATH_COLSEP;
+           if (cxrow==row) width += ws[i] + MATH_COLSEP;
+       }
+       cxrow->y -= ascent;
+       cxrow = cxrow->next;
+    }
+}
+
+MathAccentInset::MathAccentInset(byte cx, MathedTextCodes f, int cd, short st): 
+  MathedInset("", LM_OT_ACCENT, st), c(cx), fn(f), code(cd)
+{
+    inset = 0;
+}
+
+MathAccentInset::MathAccentInset(MathedInset *ins, int cd, short st):
+  MathedInset("", LM_OT_ACCENT, st), c(0), fn(LM_TC_MIN), code(cd), inset(ins)
+{
+}
+
+
+MathAccentInset::~MathAccentInset()
+{
+    if (inset)
+      delete inset;
+}
+
+MathedInset *MathAccentInset::Clone()
+{   
+    MathAccentInset* p;
+    
+    if (inset) 
+      p = new MathAccentInset(inset->Clone(), code, GetStyle());
+    else
+      p = new MathAccentInset(c, fn, code, GetStyle());
+    
+    return p;
+}
+
+
+MathBigopInset::MathBigopInset(char const* name, int id, short st): 
+  MathedInset(name, LM_OT_BIGOP, st), sym(id)
+{
+   lims = -1;
+}
+
+MathedInset *MathBigopInset::Clone()
+{   
+   MathBigopInset* p = new MathBigopInset(name, sym, GetStyle());
+   return p;
+}
+MathDotsInset::MathDotsInset(char const* name, int id, short st):
+  MathedInset(name, LM_OT_DOTS, st), code(id)
+{
+}
+
+MathedInset *MathDotsInset::Clone()
+{
+   MathDotsInset* p = new MathDotsInset(name, code, GetStyle());
+   return p;
+}     
+
diff --git a/src/mathed/math_inset.h b/src/mathed/math_inset.h
new file mode 100644 (file)
index 0000000..4b72a52
--- /dev/null
@@ -0,0 +1,385 @@
+// -*- C++ -*-
+/*
+ *  File:        math_inset.h
+ *  Purpose:     Declaration of insets for mathed 
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Math paragraph and objects for a WYSIWYG math editor.
+ *
+ *  Dependencies: Xlib, XForms
+ *
+ *  Copyright: (c) 1996, 1997 Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta, Mathed & Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+//  Note: These math insets are internal to Mathed and are not derived
+//        from lyx inset.
+
+#ifndef __MATH_INSET__
+#define __MATH_INSET__
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <stdio.h>
+#include "math_defs.h"
+#include "symbol_def.h"
+#include "LString.h"
+
+
+/**
+ Functions or LaTeX names for objects that I don't know how to draw.
+ */
+class MathFuncInset: public MathedInset  {
+public:
+       ///
+   MathFuncInset(char const *nm, short ot=LM_OT_FUNC, short st=LM_ST_TEXT);
+       ///
+   ~MathFuncInset();
+       ///
+   MathedInset *Clone();
+       ///
+   void Draw(int, int);
+       ///
+   void Write(FILE *file);
+       ///
+   void Write(LString &file);
+       ///
+   void Metrics();
+       ///
+   inline bool GetLimits() const;
+protected:
+       ///
+   int ln;
+       ///
+   bool lims;
+       ///
+   char *fname;
+};
+
+
+/// Accents
+class MathAccentInset: public MathedInset {
+ public:
+       ///
+   MathAccentInset(byte, MathedTextCodes, int, short st=LM_ST_TEXT);
+       ///
+   MathAccentInset(MathedInset *, int, short st=LM_ST_TEXT);
+       ///
+   ~MathAccentInset();
+       ///
+   MathedInset *Clone();
+       ///
+   void Draw(int, int);
+       ///
+   void Write(FILE *file);
+       ///
+   void Write(LString &file);
+       ///
+   void Metrics();
+       ///
+   int getAccentCode() const { return code; }
+
+ protected:
+       ///
+   byte c;
+       ///
+   MathedTextCodes fn;
+       ///
+   int code;
+       ///
+   MathedInset *inset;
+       ///
+   int dh, dy;
+};
+
+
+///
+class MathDotsInset: public MathedInset {
+ public:
+       ///
+   MathDotsInset(char const*,int,short st=LM_ST_TEXT);
+       ///
+   ~MathDotsInset() { };
+       ///
+   MathedInset *Clone();
+       ///
+   void Draw(int, int);
+       ///
+   void Write(FILE *file);
+       ///
+   void Write(LString &file);
+       ///
+   void Metrics();
+ protected:
+       ///
+   int dh, code;
+};   
+
+
+/// Smart spaces
+class MathSpaceInset: public MathedInset  {
+ public:
+       ///
+   MathSpaceInset(int sp, short ot=LM_OT_SPACE, short st=LM_ST_TEXT);
+       ///
+   ~MathSpaceInset() { };
+       ///
+   MathedInset *Clone();
+       ///
+  void Draw(int, int);
+       ///
+   void Write(FILE *file);
+       ///
+   void Write(LString &file);
+       ///
+   inline void Metrics();
+       ///
+   inline void SetSpace(int sp);
+       ///
+   int GetSpace() { return space; }
+ protected:
+       ///
+   int space;
+};
+
+
+/// big operators
+class MathBigopInset: public MathedInset {
+ public:
+       ///
+   MathBigopInset(char const*, int, short st=LM_ST_TEXT);
+       ///
+   ~MathBigopInset() { };
+       ///
+   MathedInset *Clone();
+       ///
+   void Draw(int, int);
+       ///
+   void Write(FILE *file);
+       ///
+   void Write(LString &file);
+       ///
+   void Metrics();
+       ///
+   inline bool GetLimits() const;
+       ///
+   inline void SetLimits(bool);
+ protected:
+       ///
+   int lims;
+       ///
+   int sym;   
+};
+
+//------- All editable insets must be derived from MathParInset.
+
+///
+class MathSqrtInset: public MathParInset {
+ public:
+    ///
+    MathSqrtInset(short st=LM_ST_TEXT);
+    ///
+    ~MathSqrtInset() { };
+    ///
+    MathedInset *Clone();
+    ///
+    void Draw(int x, int baseline);
+    ///
+    void Write(FILE *file);
+    ///
+    void Write(LString &file);
+    ///
+    void Metrics();
+    ///
+    bool Inside(int, int);
+    
+ private:
+    ///
+   int hmax, wbody;
+};
+
+
+/// Fraction like objects (frac, stackrel, binom) 
+class MathFracInset: public MathParInset {
+ public:
+       ///
+    MathFracInset(short ot=LM_OT_FRAC);
+       ///
+    ~MathFracInset();
+       ///
+    MathedInset *Clone();
+       ///
+    void Draw(int x, int baseline);
+       ///
+    void Write(FILE *file);
+       ///
+    void Write(LString &file);
+       ///
+    void Metrics();
+    /** This does the same that SetData(LyxArrayBase*) but for both
+         numerator and denominator at once.
+     */
+    void SetData(LyxArrayBase*, LyxArrayBase*);
+       ///
+    void SetData(LyxArrayBase*);
+       ///
+    void GetXY(int& x, int& y) const;
+       ///
+    void SetFocus(int,int);
+    ///
+    bool Inside(int, int);
+    ///
+    LyxArrayBase * GetData();
+    ///
+    bool setArgumentIdx(int i); // was bool Up/down(void);
+    ///
+    int  getArgumentIdx() { return (int)idx; }
+    ///
+    int  getMaxArgumentIdx() { return 1; }
+       ///
+    void  SetStyle(short);
+ protected:
+       ///
+    short idx;
+       ///
+    MathParInset *den;
+       ///
+    int w0, w1, des0, dh;
+};
+
+
+/// A delimiter
+class MathDelimInset: public MathParInset {
+ public:
+       ///
+   MathDelimInset(int, int, short st=LM_ST_TEXT);
+       ///
+   ~MathDelimInset() { };
+       ///
+   MathedInset *Clone();
+       ///
+   void Draw(int, int);
+       ///
+   void Write(FILE *file);
+       ///
+   void Write(LString &file);
+       ///
+   void Metrics();
+ protected:
+       ///
+   int left, right;
+       ///
+   int dw, dh;
+};
+
+
+/// Decorations over (below) a math object
+class MathDecorationInset: public MathParInset {
+ public:
+       ///
+   MathDecorationInset(int, short st=LM_ST_TEXT);
+       ///
+   ~MathDecorationInset() { };
+       ///
+   MathedInset *Clone();
+       ///
+   void Draw(int, int);
+       ///
+   void Write(FILE *file);
+       ///
+   void Write(LString &file);
+       ///
+   void Metrics();
+       ///
+   inline bool GetLimits() const;
+ protected:
+       ///
+   int deco;
+       ///
+   bool upper;
+       ///
+   int dw, dh, dy;
+};
+
+
+// --------------------  Inline functions ---------------------
+
+inline
+MathFuncInset::~MathFuncInset()
+{
+    if (fname && GetType()==LM_OT_UNDEF) delete[] fname;
+}
+
+inline
+bool MathFuncInset::GetLimits() const 
+{  
+   return (bool)(lims && (GetStyle()==LM_ST_DISPLAY)); 
+} 
+
+inline
+void MathFuncInset::Write(FILE *file)
+{
+   fprintf(file, "\\%s ", name);
+}
+
+inline
+void MathFuncInset::Write(LString &file)
+{
+   file += '\\';
+   file += name;
+   file += ' ';
+}
+
+inline
+void MathSpaceInset::Metrics()
+{
+   width = (space) ? space*2: 2;
+   if (space>3) width *= 2;
+   if (space==5) width *= 2;
+   width += 4;
+   ascent = 4; descent = 0;
+}
+
+inline
+void MathSpaceInset::SetSpace(int sp)
+{ 
+   space = sp;
+   Metrics();
+}    
+
+inline
+bool MathBigopInset::GetLimits() const 
+{  
+    // Default case
+    if (lims<0) {
+       return (bool)(sym!=LM_int && sym!=LM_oint && (GetStyle()==LM_ST_DISPLAY));
+    } 
+    
+    // Custom 
+    return (bool)(lims>0);
+} 
+
+inline
+void MathBigopInset::SetLimits(bool ls) 
+{  
+    lims = (ls) ? 1: 0; 
+} 
+
+inline
+bool MathDecorationInset::GetLimits() const
+{ 
+   return (bool)(deco==LM_underbrace||deco==LM_overbrace);
+}    
+
+
+#endif
+
diff --git a/src/mathed/math_iter.C b/src/mathed/math_iter.C
new file mode 100644 (file)
index 0000000..2cc8ec9
--- /dev/null
@@ -0,0 +1,968 @@
+/*
+ *  File:        math_inset.C
+ *  Purpose:     Implementation of insets for mathed
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: 
+ *
+ *  Dependencies: Xlib, XForms
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "math_iter.h"
+#endif
+
+#include "math_iter.h"
+#include "math_inset.h"
+#include "symbol_def.h"
+#include "error.h"
+
+const int SizeInset = sizeof(char*) + 2;
+const int SizeFont = 2;
+
+extern int mathed_char_width(short type, int style, byte c);
+extern int mathed_string_width(short type, int style, byte const* s, int ls);
+extern int mathed_char_height(short, int, byte, int&, int&);
+
+
+void MathedIter::Reset()
+{
+    if (array->last>0 && MathIsFont(array->bf[0])) {
+       fcode = array->bf[0];
+       pos = 1;
+    } else {
+       fcode = -1;
+       pos = 0;
+    }
+    col = row = 0;
+}
+
+
+byte MathedIter::GetChar()
+{
+    if (IsFont()) { 
+       fcode = array->bf[pos];
+       pos++;
+    }
+    return array->bf[pos];
+}
+
+
+byte* MathedIter::GetString(int& len)
+{
+    if (IsFont()) { 
+       fcode = array->bf[++pos];
+       pos++;
+    }
+    byte *s = &array->bf[pos];
+    len = pos;
+    while (array->bf[pos]>=' ' && pos<array->last) pos++;
+    len = pos-len;   
+   
+   return s;
+}
+
+MathedInset* MathedIter::GetInset()
+{
+   if (IsInset()) {
+      MathedInset* p;
+      memcpy(&p, &array->bf[pos+1], sizeof(p));
+      return p;
+   } else {
+      fprintf(stderr,"Math Error: This is not an inset[%d]\n", array->bf[pos]);
+     return 0;
+   }
+}
+
+// An active math inset MUST be derived from MathParInset because it 
+// must have at least one paragraph to edit
+MathParInset* MathedIter::GetActiveInset()
+{
+    if (IsActive()) {
+       return (MathParInset*)GetInset();
+    } 
+    
+    fprintf(stderr,"Math Error: This is not an active inset\n");
+    return 0;
+}
+
+bool MathedIter::Next()
+{  
+    if (!OK()) return false;
+   
+    if (array->bf[pos]<' ') {
+       fcode = -1;     
+       if (IsTab()) col++;
+       if (IsCR())  {
+           col = 0;
+           row++;
+       }
+    }
+       
+    if (IsInset())
+      pos += sizeof(char*) + 2;
+    else 
+      pos++;
+    
+    if (IsFont()) {
+       fcode = array->bf[pos++];
+    }
+
+    return true;   
+}
+
+
+bool MathedIter::goNextCode(MathedTextCodes code)
+{  
+    while (Next()) {
+       if (array->bf[pos]==code) 
+         return true;
+    }
+    
+    return false;
+}
+
+
+void MathedIter::goPosAbs(int p)
+{  
+    Reset();
+    while (pos<p && Next());
+}
+
+
+void MathedIter::goPosRel(int dp)
+{  
+    int posx = pos+dp;
+    // is posx a valid position?
+    if (dp<0)
+      Reset();
+    while (pos<posx && Next());
+}
+
+
+void MathedIter::Insert(byte c, MathedTextCodes t)
+{
+    if (c<' ') return;
+    
+    if (t==LM_TC_TAB && col>=ncols-1) 
+      return;
+    
+    // Never more than one space // array->bf[pos-1] gives error from purify:
+    //       Reading 1 byte from 0x47b857 in the heap.
+    //  Address 0x47b857 is 1 byte before start of malloc'd block at 0x47b858 of 16 bytes.
+    if (c==' ' && (array->bf[pos]==' ' || array->bf[pos-1]==' ')) 
+      return;
+       
+    if (IsFont() && array->bf[pos]==t) {
+       fcode = t;
+       pos++;
+    } else
+      if (t!=fcode && pos>0 && MathIsFont(array->bf[pos-1])) {
+         pos--;
+         int k;
+         for (k=pos-1; k>=0 && array->bf[k]>=' '; k--);
+         fcode = (k >= 0 && MathIsFont(array->bf[k])) ? array->bf[k]: -1;
+      }
+    short f = (array->bf[pos]<' ') ? 0: fcode;
+    int shift = (t==fcode) ? 1: ((f) ? 3: 2);
+    
+    if (t==LM_TC_TAB || t==LM_TC_CR) {
+       shift--;
+       c = t;
+       if (t==LM_TC_CR) {
+           row++;
+           col = 0;
+       } else
+         col++;
+    }
+    if (pos < array->last)
+        array->Move(pos, shift);
+    else {
+       if (array->last+shift>=array->maxsize) {
+           array->Resize(array->last+shift);
+       }
+       array->last += shift;
+       array->bf[array->last] = '\0';
+    }
+    if (t != fcode) {
+       if (f)  
+         array->bf[pos+shift-1] = fcode;
+       if (c>=' ') {
+           array->bf[pos++] = t;
+           fcode = t;
+       } else {
+           fcode = 0;
+       }
+    }      
+    array->bf[pos++] = c;
+}
+
+
+// Prepare to insert a non-char object
+void MathedIter::split(int shift)
+{
+   if (pos < array->last) {
+      bool fg = false;
+      if (array->bf[pos]>=' ') {
+        if (pos> 0 && MathIsFont(array->bf[pos-1]))
+          pos--;
+        else { 
+           fg = true; 
+           shift++;
+        }
+      }      
+      array->Move(pos, shift);
+      if (fg) array->bf[pos+shift-1] = fcode;
+   } else {
+      if (array->last+shift>=array->maxsize) {
+         array->Resize(array->last+shift);
+      }
+      array->last += shift;
+   }
+   array->bf[array->last] = '\0';
+}
+
+
+// I assume that both pos and pos2 are legal positions
+void MathedIter::join(int pos2)
+{   
+    if (!OK() || pos2<=pos)
+      return;    
+
+    short f=fcode;         
+    if (pos>0 && array->bf[pos]>=' ' && MathIsFont(array->bf[pos-1])) 
+      pos--;   
+           
+    if (MathIsFont(array->bf[pos2-1]))
+      pos2--;
+    
+    if (array->bf[pos2]>=' ') {
+       for (int p=pos2; p>0; p--) 
+         if (MathIsFont(array->bf[p])) {
+             f = array->bf[p];
+             break;
+         }
+       array->bf[pos++] = f;
+    }    
+
+    array->Move(pos2, pos-pos2);
+}
+
+void MathedIter::Insert(MathedInset* p, int type)
+{
+    int shift = SizeInset;
+    if (!MathIsInset(type))
+      type = LM_TC_INSET;
+    split(shift);
+//      array->bf[pos] = type;
+//      memcpy(&array->bf[pos+1], &p, sizeof(p));
+//      pos += SizeInset;
+//      array->bf[pos-1] = type;
+    {
+       unsigned char *pt = &array->bf[pos];
+       unsigned char *ps = (unsigned char *)&p;
+       size_t i;
+       *pt++ = type;
+       for(i = 0; i < sizeof(p); i++) {
+           *pt++ = *ps++;
+       }
+       *pt = type;
+    }
+    pos += SizeInset;
+    array->bf[array->last] = '\0';
+    fcode = -1;
+}
+
+
+bool MathedIter::Delete()
+{   
+   if (!OK())
+     return false;
+   
+   int shift = 0;
+   byte c = GetChar();
+   if (c>=' ') { 
+      if (MathIsFont(array->bf[pos-1]) && array->bf[pos+1]<' ') {
+        int i;
+        shift = 2;
+        pos--;
+        for (i=pos-1; i>0 && !MathIsFont(array->bf[i]); i--);
+        if (i>0 && MathIsFont(array->bf[i]))
+          fcode = array->bf[i];
+      } else
+       shift = 1;      
+   } else {
+      if (MathIsInset(array->bf[pos]))
+       shift = sizeof(char*) + 2;
+     else 
+      if (c==LM_TC_TAB || c==LM_TC_CR) {
+        shift++;
+//      fprintf(stderr, "Es un tab.");
+      }
+     else {
+       fprintf(stderr, "Math Warning: expected inset.");
+       fflush(stderr);
+     }
+   } 
+    
+   if (shift!=0) {
+      array->Move(pos+shift, -shift);
+      if (pos>=array->last) 
+        pos = (array->last>0) ? array->last: 0;
+       return true;
+   } else
+     return false;
+}
+
+
+LyxArrayBase *MathedIter::Copy(int pos1, int pos2)
+{
+   if (!array) {
+//      fprintf(stderr, "Math error: Attempting to copy a void array.\n");
+      return 0;
+   }
+      
+//   int posx = pos;
+   ipush(); 
+   LyxArrayBase *t=array, *a;
+    
+   if (pos1>0 || pos2<=array->last) {       
+       short fc=0;
+       if (pos1>0 && array->bf[pos1]>' ') {
+          for (int p=pos1; p>=0; p--) 
+            if (MathIsFont(array->bf[p])) {
+                if (p!=pos1-1)
+                  fc = array->bf[p];
+                else
+                  pos1--;
+                break;
+            }
+       }
+
+       if (pos2>0 && array->bf[pos2]>=' ' && MathIsFont(array->bf[pos2-1])) 
+        pos2--;
+
+       int dx = pos2 - pos1;
+       a = new LyxArrayBase(dx+LyxArrayBase::ARRAY_MIN_SIZE);
+//       fprintf(stderr, "VA %d %d %d ", pos1, pos2, dx); fflush(stderr);
+       memcpy(&a->bf[(fc) ? 1: 0], &array->bf[pos1], dx);
+       if (fc) {
+          a->bf[0] = fc;
+          dx++;
+       }
+       a->last = dx;
+       a->bf[dx] = '\0';
+   }  else   
+      a = new LyxArrayBase(*array);
+   SetData(a);
+   while (OK()) {
+      if (IsInset()) {
+        MathedInset* inset = GetInset();
+        inset = inset->Clone();
+        memcpy(&array->bf[pos+1], &inset, sizeof(inset));
+      }
+      Next();
+   }
+//   pos = posx;
+   array = t;
+   ipop(); 
+   return a;
+}
+
+
+void MathedIter::Clear()
+{
+   if (!array) {
+      fprintf(stderr, "Math error: Attempting to clean a void array.\n");
+      return;
+   }   
+   Reset();  
+   while (OK()) {
+      if (IsInset()) {
+        MathedInset* inset = GetInset();
+         if (inset->GetType()!=LM_OT_MACRO_ARG)
+           delete inset;
+         Delete();
+      } else
+       Next();
+   }
+}
+
+
+// Check consistency of tabs and crs
+void MathedIter::checkTabs()
+{
+    ipush();
+    
+//    MathedIter:Reset();
+    while (OK()) {
+        if ((IsTab() && col>=ncols-1) || (IsCR() && !(MthIF_CR&flags))) {
+            Delete();
+            continue;
+        }
+        if (IsCR() && col<ncols-2) {
+            Insert(' ', LM_TC_TAB);
+       }
+        MathedIter::Next();
+    }
+    if (col<ncols-2) {
+       Insert(' ', LM_TC_TAB);
+    }
+    ipop();
+}         
+
+
+//  Try to adjust tabs in the expected place, as used in eqnarrays
+//  Rules:
+//   - If there are a relation operator, put tabs around it
+//   - If tehre are not a relation operator, put everything in the
+//     3rd column.
+void MathedIter::adjustTabs()
+{
+
+}         
+
+
+void MathedXIter::Clean(int pos2)
+{
+    if (!array) {
+       fprintf(stderr, "Math error: Attempting to clean a void array.\n");
+       return;
+    } 
+    
+    int pos1 = pos;
+    
+    if (pos2<pos1) {  
+       GoBegin();
+       while (pos<pos2 && OK()) { Next();
+       }
+       pos2 = pos1;
+       pos1 = pos;
+    }
+
+    ipush();
+    while (OK() && pos<pos2) {
+       if (IsInset()) {
+           MathedInset* inset = GetInset();
+           Next();
+           if (inset->GetType()!=LM_OT_MACRO_ARG)
+             delete inset;
+           continue;
+       } 
+       if (IsCR()) {
+           if (crow) {
+               MathedRowSt *r = crow->next;
+               if (r) {
+                   crow->next = r->next;
+                   delete r;
+               }          
+           }
+       }
+       Next();
+    }    
+    ipop();
+    
+    if (pos2<=array->Last()) {
+       pos = pos1;
+       join(pos2);
+       checkTabs();
+    } 
+}
+
+
+void MathedXIter::Merge(LyxArrayBase *a0)
+{
+    if (!a0) {
+       lyxerr.debug("Math error: Attempting to merge a void array.",
+                    Error::MATHED);
+       return;
+    }
+    // All insets must be clonned
+    MathedIter it(a0);
+    LyxArrayBase *a = it.Copy();
+    
+    // make rom for the data 
+    split(a->Last());
+    array->MergeF(a, pos, a->Last());
+
+    int pos1=pos, pos2 = pos + a->Last(); // pos3=0;
+
+    goPosAbs(pos1);
+    
+    // Complete rows
+    while (pos<pos2 && OK()) {
+       if (IsCR()) {
+           if (p && p->Permit(LMPF_ALLOW_CR)) {
+               MathedRowSt *r = new MathedRowSt(ncols+1);
+               if (crow) {
+                   r->next = crow->next;
+                   crow->next = r;
+                 } else {
+                     r->next = 0;
+                 }
+               crow = r;
+           } else {
+               Delete();
+               pos2--;
+           }
+       }
+        Next();    
+    }
+    pos2 = getPos();
+    goPosAbs(pos1);
+    checkTabs();
+    goPosAbs(pos2);
+    
+    delete a;
+}
+
+
+//-----------  XIter
+
+
+MathedXIter::MathedXIter(MathParInset* pp): p(pp) 
+{ 
+    x = y = 0;
+    sx = sw = 0;   
+    limits = false;
+    s_type = 0;  
+    if (p) 
+      SetData(p);
+    else {
+       crow = 0;
+       size = 0;
+    }
+}
+
+void MathedXIter::SetData(MathParInset *pp)
+{
+    p = pp;
+    x = y = 0;
+    array = p->GetData();
+    ncols = p->GetColumns();
+    crow = p->getRowSt();
+    if (p->Permit(LMPF_ALLOW_CR))
+      flags |= MthIF_CR;
+    if (p->Permit(LMPF_ALLOW_TAB))
+      flags |= MthIF_Tabs;
+    
+    if (crow) {
+       x = crow->getTab(0);
+       y = crow->getBaseline();
+    } 
+    if (!array) {
+           array = new LyxArrayBase; // this leaks
+       p->SetData(array);
+    }
+    size = p->GetStyle();
+    Reset();
+}
+
+byte* MathedXIter::GetString(int& ls)
+{  
+   static byte s[255];
+   byte const *sx =  MathedIter::GetString(ls);
+   if (ls>0) {
+       strncpy((char *)s, (char const*)sx, ls);
+       x += mathed_string_width(fcode, size, s, ls);
+       return &s[0];
+   }       
+    return 0;
+}
+
+
+bool MathedXIter::Next()
+{  
+//    fprintf(stderr, "Ne[%d]", pos);
+   if (!OK()) return false;
+   int w=0;
+//   fprintf(stderr, "xt ");
+   if (IsInset()) {
+      MathedInset* px = GetInset();
+      w = px->Width();
+      if (px->GetType()==LM_OT_SCRIPT) {
+        if (w>sw) sw = w;
+        w = 0;
+      } else
+       sx = (px->GetLimits()) ? w: 0;
+   } else {  
+      byte c = GetChar();
+      if (c>=' ') {
+//       fprintf(stderr, "WD[%d %d %c] ", fcode, size, c); fflush(stderr);
+         w = mathed_char_width(fcode, size, c);
+      } else
+      if (c==LM_TC_TAB && p) {
+//      w = p->GetTab(col+1);
+         w = (crow) ? crow->getTab(col+1): 0;
+        //fprintf(stderr, "WW[%d]", w);
+      } else
+      if (c==LM_TC_CR && p) {
+         x = 0;
+         if (crow && crow->next) {
+             crow = crow->next;
+             y = crow->getBaseline();
+             w = crow->getTab(0);
+         }
+//       fprintf(stderr, "WW[%d %d|%d]", col, row, w);
+      } else 
+       fprintf(stderr, "No hubo w[%d]!", (int)c);   
+   }
+   if (MathedIter::Next()) {
+//       fprintf(stderr, "LNX %d ", pos); fflush(stderr);
+//       if (sw>0 && GetChar()!=LM_TC_UP && GetChar()!=LM_TC_DOWN) {
+//        w = (sx>sw) ? 0: sw-sx;
+      if ((sw>0 || sx>0) && GetChar()!=LM_TC_UP && GetChar()!=LM_TC_DOWN) {
+         if (sw>0)
+           w = (sx>sw) ? 0: sw-sx;
+         sx = sw = 0;
+      }
+      x += w;
+      return true;
+   } else
+     return false;
+}
+
+
+void MathedXIter::GoBegin()
+{
+   Reset();
+   x = y = 0;   
+   sw = sx = 0;
+   if (p) {
+       crow = p->getRowSt();
+       if (crow) {
+          x = crow->getTab(0);
+          y = crow->getBaseline();
+       }
+   }
+}
+
+void MathedXIter::GoLast()
+{
+   while (Next());
+}
+
+
+void MathedXIter::Adjust()
+{
+   int posx = pos;
+   GoBegin();
+   while (posx>pos && OK()) Next();  
+}
+
+
+bool MathedXIter::Prev()
+{  
+    if (pos==0 || (pos==1 && GetChar()>=' '))
+      return false;
+    
+    int pos2 = pos; // pos1
+    GoBegin();
+    do {
+       ipush();
+       Next();
+    } while (pos<pos2);
+    ipop();
+    
+    return (!IsCR());
+}
+
+
+bool MathedXIter::goNextColumn()
+{  
+    int rowp = row, colp=col;
+    while (Next() && col==colp);
+    
+    return (col!=colp+1 || rowp!=row);
+}
+
+
+bool MathedXIter::Up()
+{
+    if (row==0) return false;
+    int xp = x, rowp = row, colp=col;
+    GoBegin();
+    while (row<rowp-1) Next();
+    while (x<xp && OK() && !IsCR()) {
+       ipush();
+       Next();
+    }
+    if (col>colp) // || (stck.col==colp && stck.x<=xp && x>xp))
+      ipop();
+    
+    return true;
+}
+
+
+bool MathedXIter::Down()
+{
+       int xp = x, colp=col; // ,rowp = row
+    
+    bool res = (IsCR()) ? true: goNextCode(LM_TC_CR);
+    if (res) {
+        Next();
+       ipush();
+       while (x<xp && OK()) {
+           ipush();
+           Next();
+       }
+       if (col>colp || (stck.col==colp && stck.x<=xp && x>xp)) 
+         ipop();         
+        return true;
+    }
+    return false;
+}
+
+
+void MathedXIter::addRow()
+{
+    if (!crow) {
+       lyxerr.debug(LString("MathErr: Attempt to insert new"
+                            " line in a subparagraph. ")
+                    + long(this), Error::MATHED);
+       return;
+    }    
+    // Create new item for the structure    
+    MathedRowSt *r = new MathedRowSt(ncols+1);
+    if (crow) {
+       r->next = crow->next;
+       crow->next = r;
+    } else {
+       crow = r;
+       r->next = 0;
+    }    
+    // Fill missed tabs in current row
+    while (col<ncols-1) 
+      Insert('T', LM_TC_TAB); 
+    //newline
+    Insert('K', LM_TC_CR);
+    
+    ipush();
+    if (!IsCR())
+      goNextCode(LM_TC_CR);
+    
+    // Fill missed tabs in new row
+    while (col<ncols-1) 
+      Insert('T', LM_TC_TAB);
+    ipop();
+}
+
+
+void MathedXIter::delRow()
+{
+    if (!crow) {
+       lyxerr.debug("MathErr: Attempt to delete a line in a subparagraph.",
+                    Error::MATHED);
+       return;
+    }
+    bool line_empty = true;
+    ipush();
+//    while (Next()) {
+    do {
+       if (IsCR()){
+           break;
+       } else if (!IsTab()) {
+           line_empty = false;
+       }
+    } while (Next());
+    int p1 = getPos();
+    ipop();
+    
+    if (line_empty) {
+       
+       MathedRowSt *r = crow->next;
+       if (r) {
+           crow->next = r->next;
+           delete r;
+       }
+       join(p1);
+       Delete();
+    } else
+      Clean(p1);
+    
+    checkTabs();    
+}
+
+void MathedXIter::ipush()
+{ 
+    MathedIter::ipush();
+    stck.x = x;
+    stck.y = y;
+}
+
+
+void MathedXIter::ipop()
+{ 
+    MathedIter::ipop();
+    x = stck.x;
+    y = stck.y;
+    if (p) {
+       crow = p->getRowSt();
+       if (crow)
+         for (int i=0; i<row; i++) 
+           crow = crow->next;
+    }
+}
+
+
+void MathedXIter::fitCoord(int /*xx*/, int yy)
+{
+    int xo = 0, yo = 0;
+    
+    GoBegin();
+    if (p) 
+      p->GetXY(xo, yo);
+    // first fit vertically
+    while (crow && OK()) {
+       if (yy>=yo+y-crow->asc && yy<= yo+y+crow->desc) 
+         break;
+       goNextCode(LM_TC_CR);
+       Next();
+    }
+    // now horizontally
+//    while (x<xx && Next());
+}
+
+void MathedXIter::setTab(int tx, int tab)
+{
+    if (crow && tab<=ncols) {
+       crow->w[tab] = tx;
+    }
+    else 
+      fprintf(stderr, "MathErr: No tabs allowed here");
+}
+
+
+void MathedXIter::subMetrics(int a, int d)
+{
+    if (!crow) {
+//     fprintf(stderr, "MathErr: Attempt to submetric a subparagraph.");
+       return;
+    }    
+    crow->asc = a;
+    crow->desc = d;
+}
+
+
+// This function is not recursive, as MathPar::Metrics is
+void MathedXIter::IMetrics(int pos2, int& width, int& ascent, int& descent)
+{  
+       byte cx, cxp=0;// *s;
+       int x1;// ls;
+    int asc=0, des=0;
+    bool limits = false;
+  
+    descent = ascent = width = 0;
+    if (!array) return;
+    if (array->Empty()) return;
+//    if  (pos2 > array->last) return;
+    x1 = x; 
+    while (pos<pos2) {
+       cx = GetChar();
+       if (cx >= ' ') {
+           mathed_char_height(FCode(), size, cx, asc, des);
+           if (asc > ascent) ascent = asc;
+           if (des > descent) descent = des;
+           limits = false;
+       } else
+       if (MathIsInset(cx)) {
+           MathedInset *pp = GetInset();
+           if (cx==LM_TC_UP) {
+               if (!asc && p) {
+                   int xx, yy;
+                   p->GetXY(xx, yy);
+                   ((MathParInset*)pp)->GetXY(xx, asc);
+                   asc = yy - asc;
+               }
+               asc += ((limits) ? pp->Height()+4: pp->Ascent());
+           } else
+             if (cx==LM_TC_DOWN) {
+                 if (!des && p) {
+                     int xx, yy;
+                     p->GetXY(xx, yy);
+                     ((MathParInset*)pp)->GetXY(xx, des);
+                     if (des-pp->Height()<yy && !asc)
+                       asc = yy - (des-pp->Height());
+                     des -= yy;
+                 }
+                 des += ((limits) ? pp->Height()+4: pp->Height()-pp->Ascent()/2);
+             } else {
+                 asc = pp->Ascent();
+                 des = pp->Descent();
+             }
+           if (asc > ascent) ascent = asc;
+           if (des > descent) descent = des;
+           if (cx!=LM_TC_UP && cx!=LM_TC_DOWN)
+             limits = pp->GetLimits();
+       } else 
+       if (cx==LM_TC_TAB) {
+           limits = false;                   
+       }      
+       else {
+           lyxerr.debug(LString("Mathed Sel-Error: Unrecognized code[")
+                        + int(cx) + ']', Error::MATHED);
+           break;
+       }       
+       if (pos<pos2)  Next();
+       cxp = cx;
+   }
+    width = x - x1;
+}
+
+
+bool MathedXIter::setNumbered(bool numb)
+{  
+    if (crow) {
+       crow->setNumbered(numb);
+       return true;
+    }
+    
+    return false;
+}
+
+
+bool MathedXIter::setLabel(char* label)
+{  
+    if (label && crow) {
+       crow->setLabel(label);
+       return true;
+    }
+    
+    return false;
+}
+
+
+MathedRowSt *MathedXIter::adjustVerticalSt()
+{
+    GoBegin();
+    if (!crow) {
+//     fprintf(stderr, " CRW%d ", ncols);
+           crow = new MathedRowSt(ncols+1); // this leaks
+    }
+//    fprintf(stderr, " CRW[%p] ", crow);
+    MathedRowSt *row = crow;
+    while (OK()) {
+       if (IsCR()) {
+           if (col>=ncols) ncols = col+1; 
+           MathedRowSt *r = new MathedRowSt(ncols+1); // this leaks
+//         r->next = crow->next;
+           crow->next = r;
+           crow = r;
+//         fprintf(stderr, " CX[%p]", crow);
+       }   
+       Next(); 
+    }
+    return row;
+}
+
diff --git a/src/mathed/math_iter.h b/src/mathed/math_iter.h
new file mode 100644 (file)
index 0000000..4e95737
--- /dev/null
@@ -0,0 +1,387 @@
+// -*- C++ -*-
+/*
+ *  File:        math_iter.h
+ *  Purpose:     Iterator for Math paragraphs
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1997
+ *  Description: Using iterators is the only way to handle math paragraphs 
+ *
+ *  Dependencies: Xlib
+ *
+ *  Copyright: (c) 1996, 1997 Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta, Mathed & Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ * 
+ */
+
+#ifndef __MATH_ITER__
+#define __MATH_ITER__
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "math_defs.h"
+
+///
+enum mathIterFlags {
+       /// Allow newlines
+    MthIF_CR = 1,
+    /// Allow tabs
+    MthIF_Tabs = 2
+};
+
+
+/**
+ Specialized array iterator for amth paragraph.  Used for
+ storing and querying data operations
+ */
+class MathedIter {
+ public:
+    ///
+    MathedIter()
+    {
+       pos = 0;
+       fcode = 0;
+       array = NULL;
+       flags = 0;
+       ncols = row = col = 0;
+    }
+    ///
+    MathedIter(LyxArrayBase *);
+    ///
+    virtual ~MathedIter() { }
+    ///
+    bool goNextCode(MathedTextCodes);
+    ///
+   void goPosRel(int);
+    ///
+    void goPosAbs(int);
+    ///
+    int Empty() { return array->last<=1; }
+    ///
+    int OK() { return array && (pos < array->last); }
+    ///
+    int IsFirst() { return (pos==0); }
+    ///
+    byte GetChar();
+    ///
+    byte* GetString(int& len);
+    ///
+    MathedInset* GetInset();
+    ///
+    MathParInset* GetActiveInset();
+    ///
+    bool IsInset();
+    ///
+    bool IsActive();
+    ///
+    bool IsFont();
+    ///
+    bool IsScript();
+    ///
+    bool IsTab();
+    ///
+    bool IsCR();
+    ///
+    virtual void Reset();
+    ///
+    virtual void Insert(byte, MathedTextCodes c=LM_TC_CONST);
+    ///
+    virtual void Insert(MathedInset*, int t=LM_TC_INSET);
+    ///
+    virtual bool Delete();
+    ///
+    virtual bool Next();
+    /// Check consistency of tabs and newlines
+    void checkTabs();
+    /// Try to adjust tabs in the expected place, as in eqnarrays
+    void adjustTabs();
+    ///
+    short FCode() const { return fcode; }
+    ///
+    int getPos() const { return pos; }
+    ///
+    int getRow() const { return row; }
+    ///
+    int getCol() const { return col; }
+    ///
+    void setNumCols(int n) { ncols = n; }
+    ///
+    void SetData(LyxArrayBase *a) { array = a; Reset(); }
+    ///
+    LyxArrayBase *GetData() { return array; }
+    
+    /// Copy every object from position p1 to p2
+    LyxArrayBase *Copy(int p1=0, int p2=10000);
+   
+    /// Delete every object from position p1 to p2
+    void Clear();
+    
+ protected:
+    ///
+    void split(int);
+    ///
+    void join(int);
+    ///
+    int flags;
+    ///
+    short fcode;
+    ///
+    int pos;
+    ///
+    int row, col, ncols;
+    ///
+    LyxArrayBase *array;
+    // one element stack
+    struct MIState {
+           ///
+       short fcode;
+           ///
+       int x, y;
+           ///
+       int pos, row, col;
+    } stck;
+    
+    /// Saves the current state of the iterator
+    virtual void ipush();
+    /// Recover previous state
+    virtual void ipop();
+};
+
+///
+#define MX_WAS_SUB   1
+///
+#define MX_WAS_SUPER 2
+
+
+/**
+ A graphic iterator (updates position.) Used for
+ metrics and updating cursor position
+ */
+class MathedXIter: public MathedIter {
+ public:
+    ///
+    MathedXIter(): MathedIter() { x = y = size = 0;  p = 0; crow = 0; }
+    ///
+    MathedXIter(MathParInset*);
+    ///
+    ~MathedXIter() { };
+    ///
+    void SetData(MathParInset *);
+    ///
+    MathParInset *getPar() { return p; }
+    ///
+    bool Next();
+    ///
+    bool Prev();
+    ///
+    bool Up();
+    ///
+    bool Down();
+    ///
+    bool goNextColumn();
+    ///
+    void GoLast();
+    ///
+    void GoBegin();
+    ///
+    void Adjust();
+    ///
+    inline void GetPos(int&, int&);
+    ///
+    inline void GetIncPos(int&, int&);
+    ///
+    byte* GetString(int&);
+    ///
+    int GetX();
+    ///
+    int GetY();
+    ///
+    void subMetrics(int, int);
+    ///
+    void fitCoord(int, int);
+    /// 
+    void getAD(int& a, int& d);
+    
+    /// Create a new row and insert #ncols# tabs.
+    void addRow();
+       ///
+       void delRow();
+    
+       /**$ These two functions will be moved from here */
+         //@{
+       ///
+    bool setLabel(char* label);
+       ///
+    bool setNumbered(bool);
+       //@}
+       
+       ///
+    void setTab(int, int);
+    /// Merge the array at current position
+    void Merge(LyxArrayBase*);
+    /// Delete every object from current position to pos2
+    void Clean(int pos2);
+    MathedRowSt *adjustVerticalSt();
+    
+ private:
+    /// This function is not recursive, as MathPar::Metrics is
+    void IMetrics(int, int&, int&, int&);
+    /// Font size (display, text, script, script2) 
+    int size;
+    /// current position
+    int x, y;
+//    /// max ascent and descent
+//    int asc, des;
+       ///
+    MathParInset *p;
+    
+    // Limits auxiliary variables
+    /// Position and max width of a script
+    int sx, sw;
+    /// true=center, false=left align (default)
+    bool limits;
+    /// Type of previous script
+    short s_type;  
+
+    void ipush();
+
+    void ipop();
+
+ protected:
+    /// 
+    MathedRowSt *crow;
+    
+ private:
+    ///
+    friend class MathedCursor;
+};
+
+
+//--------------------   Inline functions   --------------------------//
+
+
+inline
+bool MathedIter::IsInset()
+{
+    return MathIsInset(array->bf[pos]);
+}
+inline
+bool MathedIter::IsActive()
+{
+    return MathIsActive(array->bf[pos]);
+}
+
+inline
+bool MathedIter::IsFont()
+{
+    return MathIsFont(array->bf[pos]);
+}
+
+
+inline
+bool MathedIter::IsScript()
+{
+    return MathIsScript(array->bf[pos]);
+}   
+
+inline
+bool MathedIter::IsTab()
+{
+    return (array->bf[pos]==LM_TC_TAB);
+}  
+
+
+inline
+bool MathedIter::IsCR()
+{
+    return (array->bf[pos]==LM_TC_CR);
+}  
+
+
+inline
+MathedIter::MathedIter(LyxArrayBase *d): array(d)
+{
+    pos = 0;
+    row = col = 0;
+    fcode = (array && IsFont()) ? array->bf[0]: 0;
+}
+     
+
+inline
+void MathedIter::ipush()
+{ 
+    stck.fcode = fcode;
+    stck.pos = pos;
+    stck.row = row;
+    stck.col = col; 
+}
+
+
+inline
+void MathedIter::ipop()
+{ 
+    fcode = stck.fcode;
+    pos = stck.pos;
+    row = stck.row;
+    col = stck.col;  
+}
+
+
+inline
+void MathedXIter::GetPos(int&xx, int& yy)
+{ 
+    if (p) 
+      p->GetXY(xx, yy);
+    else
+      { xx = 0;  yy = 0; }        
+    xx += x;  yy += y;
+}
+
+inline 
+int MathedXIter::GetX() 
+{ 
+    int xx, yy;
+    GetPos(xx, yy);
+    return xx; 
+}
+
+inline 
+int MathedXIter::GetY() 
+{ 
+    int xx, yy;
+    GetPos(xx, yy);
+    return yy; 
+}
+
+
+inline
+void MathedXIter::GetIncPos(int& xx, int& yy) 
+{ 
+    xx = x;  yy = y; 
+}
+
+
+inline
+void MathedXIter::getAD(int& a, int& d) 
+{ 
+    if (crow) {
+       a = crow->asc;
+       d = crow->desc;
+    } else 
+      if (p) {
+         a = p->Ascent();
+         d = p->Descent();
+      } else {
+         a = d = 0;
+      }
+}
+
+
+#endif
+
diff --git a/src/mathed/math_macro.C b/src/mathed/math_macro.C
new file mode 100644 (file)
index 0000000..52f6296
--- /dev/null
@@ -0,0 +1,553 @@
+// -*- C++ -*-
+/*
+ *  File:        math_macro.C
+ *  Purpose:     Implementation of macro class for mathed 
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     November 1996
+ *  Description: WYSIWYG math macros
+ *
+ *  Dependencies: Mathed
+ *
+ *  Copyright: (c) 1996, 1997 Alejandro Aguilar Sierra
+ *
+ *  Version: 0.2, Mathed & Lyx project.
+ *
+ *  This code is under the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+#include FORMS_H_LOCATION
+
+#ifdef __GNUG__
+#pragma implementation "math_macro.h"
+#pragma implementation "math_defs.h"
+#endif
+
+#include "LString.h"
+#include "math_macro.h"
+#include "math_iter.h"
+#include "math_inset.h"
+#include "error.h"
+
+
+enum MathedMacroFlag {
+    MMF_Env=1,
+    MMF_Exp=2,
+    MMF_Edit=4
+};
+
+
+extern GC mathGC, mathFrameGC, latexGC;
+extern int mathed_string_width(short type, int style, byte const* s, int ls);
+extern int mathed_string_height(short, int, byte const*, int, int&, int&);
+
+
+MathMacro::MathMacro(MathMacroTemplate* t): 
+    MathParInset(LM_ST_TEXT, "", LM_OT_MACRO), tmplate(t)
+{
+    nargs = tmplate->getNoArgs();
+    tcode = tmplate->getTCode();
+    args = new MacroArgumentBase[nargs];
+    for (int i=0; i<nargs; i++) {
+//     if (tmplate->getMacroPar(i)->Permit(LMPF_ALLOW_CR))
+//       args[i].row = new MathedRowSt(tmplate->getMacroPar(i)->GetColumns());
+//     else 
+         args[i].row = 0;
+/*     int k = tmplate->getMacroPar(i)->GetColumns();
+       if (k>0) {
+           args[i].array = new LyxArrayBase;
+           for (int j=0; j<k-1; j++) args[i].array->Insert(j, LM_TC_TAB);
+       }*/
+    }
+    idx = 0;
+    SetName(tmplate->GetName());
+}
+
+MathMacro::MathMacro(MathMacro* m): 
+    MathParInset(LM_ST_TEXT, m->GetName(), LM_OT_MACRO)
+{
+    tmplate = m->tmplate;
+    nargs = tmplate->getNoArgs();
+    tcode = tmplate->getTCode();
+    args = new MacroArgumentBase[nargs];
+    idx = 0;
+    SetName(tmplate->GetName());
+    for (int i=0; i<tmplate->nargs; i++) {
+       m->setArgumentIdx(i);
+       MathedIter it(m->GetData());
+       args[i].row = m->args[i].row;
+       args[i].array = it.Copy();
+    }
+}
+
+MathMacro::~MathMacro()
+{
+    for (idx=0; idx<nargs; idx++) {
+       MathedIter it(args[idx].array);
+       it. Clear();
+       delete args[idx].row;
+    }
+    delete[] args;
+}
+
+
+MathedInset *MathMacro::Clone()
+{
+    MathMacro *m = new MathMacro(this);
+    return m;
+}
+
+
+void MathMacro::Metrics()
+{
+    if (nargs>0)
+      tmplate->update(this);
+    tmplate->Metrics();
+    width = tmplate->Width();
+    ascent = tmplate->Ascent();
+    descent = tmplate->Descent();
+}
+
+
+void MathMacro::Draw(int x, int y)
+{
+    xo = x;  yo = y;
+    Metrics();
+    tmplate->update(this);
+    tmplate->SetStyle(size);
+    mathGC = latexGC;
+    tmplate->Draw(x, y);
+    for (int i=0; i<nargs; i++)
+      tmplate->GetMacroXY(i, args[i].x, args[i].y);
+}
+
+
+int MathMacro::GetColumns()
+{
+    return tmplate->getMacroPar(idx)->GetColumns();
+}
+
+
+void MathMacro::GetXY(int& x, int& y) const
+{
+    x = args[idx].x;  y = args[idx].y;
+}
+
+
+bool MathMacro::Permit(short f)
+{
+    return ((nargs>0) ? tmplate->getMacroPar(idx)->Permit(f): MathParInset::Permit(f));
+}
+
+void MathMacro::SetFocus(int x, int y)
+{
+    tmplate->update(this);
+    tmplate->SetMacroFocus(idx, x, y);
+}
+
+
+void MathMacro::Write(FILE *file)
+{
+   LString output;
+   MathMacro::Write(output);
+   fprintf(file, "%s", output.c_str());
+}
+
+
+void MathMacro::Write(LString &file)
+{
+    if (tmplate->flags & MMF_Exp) {
+       lyxerr.debug(LString("Expand ")+ int(tmplate->flags)
+                    + ' ' + int(MMF_Exp), 
+                    Error::MATHED);
+       tmplate->update(this);
+       tmplate->Write(file);
+    } else {
+       if (tmplate->flags & MMF_Env) {
+         file += "\\begin{";
+         file += name;
+         file += "} ";
+       } else {
+         file += '\\';
+         file += name;
+       }
+//     if (options) { 
+//       file += '[';
+//       file += options;
+//       file += ']';
+//      }
+       
+       if (!(tmplate->flags & MMF_Env) && nargs>0) 
+         file += '{';
+       
+       for (int i=0; i<nargs; i++) {
+           array = args[i].array;
+           MathParInset::Write(file);
+           if (i<nargs-1)  
+             file += "}{";
+       }   
+       if (tmplate->flags & MMF_Env) {
+           file += "\\end{";
+           file += name;
+           file += '}';
+       } else {
+           if (nargs>0) 
+               file += '}';
+           else
+               file += ' ';
+       }
+    }
+}
+
+
+
+/*---------------  Macro argument -----------------------------------*/
+
+MathMacroArgument::MathMacroArgument(int n)
+{
+    number = n;
+    expnd_mode = false;
+    SetType(LM_OT_MACRO_ARG);
+}
+
+void MathMacroArgument::Draw(int x, int baseline)
+{
+    if (expnd_mode) {
+       MathParInset::Draw(x, baseline);
+    } else {
+       unsigned char s[3];
+       sprintf((char*)s, "#%d", number);
+       drawStr(LM_TC_TEX, size, x, baseline, &s[0], 2);
+    }
+}
+
+
+void MathMacroArgument::Metrics()
+{
+    if (expnd_mode) {
+       MathParInset::Metrics();
+    } else {
+       unsigned char s[3];
+       sprintf((char*)s, "#%d", number);
+       width = mathed_string_width(LM_TC_TEX, size, &s[0], 2);
+       mathed_string_height(LM_TC_TEX, size, &s[0], 2, ascent, descent);
+    }
+}
+
+void MathMacroArgument::Write(FILE *file)
+{
+   LString output;
+   MathMacroArgument::Write(output);
+   fprintf(file, "%s", output.c_str());
+}
+
+void MathMacroArgument::Write(LString &file)
+{
+    if (expnd_mode) {
+       MathParInset::Write(file);
+    } else {
+       file += '#';
+       file += number;
+       file += ' ';
+    }
+}
+
+
+/* --------------------- MathMacroTemplate ---------------------------*/
+
+MathMacroTemplate::MathMacroTemplate(char const *nm, int na, int flg):
+    MathParInset(LM_ST_TEXT, nm, LM_OT_MACRO), 
+    flags(flg), nargs(na)
+{
+    if (nargs>0) {
+       tcode = LM_TC_ACTIVE_INSET;
+       args = new MathMacroArgument[nargs];
+       for (int i=0; i<nargs; i++) {
+           args[i].setNumber(i+1);
+       }
+    } else 
+      tcode = LM_TC_INSET;
+}
+
+
+MathMacroTemplate::~MathMacroTemplate()
+{
+    // prevent to delete already deleted objects
+    for (int i=0; i<nargs; i++) {
+       args[i].SetData(0);
+    }
+    delete[] args;
+}
+
+
+void MathMacroTemplate::setEditMode(bool ed)
+{
+    if (ed) {
+       flags |= MMF_Edit;
+       for (int i=0; i<nargs; i++) {
+           args[i].setExpand(false);
+       }
+    } else {
+       flags &= ~MMF_Edit;
+       for (int i=0; i<nargs; i++) {
+           args[i].setExpand(true);
+       }
+    }
+}
+
+
+void MathMacroTemplate::Draw(int x, int y)
+{
+    int x2, y2;
+    bool expnd = (nargs>0) ? args[0].getExpand(): false;
+    if (flags & MMF_Edit) {
+       for (int i=0; i<nargs; i++) {
+           args[i].setExpand(false);
+       }
+      x2 = x; y2 = y;
+    } else {
+       for (int i=0; i<nargs; i++) {
+           args[i].setExpand(true);
+       }
+      x2 = xo; y2 = yo;
+    }
+    MathParInset::Draw(x, y);
+    xo = x2; yo = y2;
+    
+    for (int i=0; i<nargs; i++) {
+       args[i].setExpand(expnd);
+    }
+}
+
+void MathMacroTemplate::Metrics()
+{
+    bool expnd = (nargs>0) ? args[0].getExpand(): false;
+    
+    if (flags & MMF_Edit) {
+       for (int i=0; i<nargs; i++) {
+           args[i].setExpand(false);
+       }
+    } else {
+       for (int i=0; i<nargs; i++) {
+           args[i].setExpand(true);
+       }
+    }
+    MathParInset::Metrics();
+    
+    for (int i=0; i<nargs; i++) {
+       args[i].setExpand(expnd);
+    }
+}
+
+void MathMacroTemplate::update(MathMacro* macro)
+{
+    int idx = (macro) ? macro->getArgumentIdx(): 0;
+    for (int i=0; i<nargs; i++) {
+       if (macro) {
+           macro->setArgumentIdx(i);
+           args[i].SetData(macro->GetData());
+           MathedRowSt *row = macro->getRowSt();
+           args[i].setRowSt(row);
+       }
+    }  
+    if (macro)
+      macro->setArgumentIdx(idx);
+}
+    
+
+void MathMacroTemplate::WriteDef(FILE *file)
+{
+    fprintf(file, "\n\\newcommand{\\%s}", name);
+      
+    if (nargs > 0 ) 
+      fprintf(file, "[%d]", nargs);
+    
+    fprintf(file, "{");
+    
+    for (int i=0; i<nargs; i++) {
+       args[i].setExpand(false);
+    }   
+    Write(file); 
+    fprintf(file, "}\n");
+}
+
+void MathMacroTemplate::WriteDef(LString &file)
+{
+    file += "\n\\newcommand{\\";
+    file += name;
+    file += '}';
+      
+    if (nargs > 0 ) {
+      file += '[';
+      file += nargs;
+      file += ']';
+    }
+    
+    file += '{';
+    
+    for (int i=0; i<nargs; i++) {
+       args[i].setExpand(false);
+    }   
+    Write(file); 
+    file += "}\n";
+}
+
+void MathMacroTemplate::setArgument(LyxArrayBase *a, int i)
+{
+    args[i].SetData(a);
+}
+
+void MathMacroTemplate::GetMacroXY(int i, int& x, int& y) const
+{
+    args[i].GetXY(x, y);
+}
+
+
+MathParInset *MathMacroTemplate::getMacroPar(int i) const
+{
+    return ((i>=0 && i<nargs) ? (MathParInset*)&args[i]: 0);
+}
+
+
+void MathMacroTemplate::SetMacroFocus(int &idx, int x, int y)
+{
+    for (int i=0; i<nargs; i++) {
+       if (args[i].Inside(x, y)) {
+           idx = i;
+           break;
+       }
+    }
+}
+
+
+/* -------------------------- MathMacroTable -----------------------*/
+
+MathMacroTable::MathMacroTable(int n): max_macros(n)
+{
+    macro_table = new MathMacroTemplateP[max_macros];
+    num_macros = 0;
+}
+
+
+MathMacroTable::~MathMacroTable()
+{
+    delete[] macro_table;
+}
+
+
+// The search is currently linear but will be binary or hash, later.
+MathMacroTemplate *MathMacroTable::getTemplate(char const* name) const
+{
+    for (int i=0; i<num_macros; i++) {
+      if (strcmp(name, macro_table[i]->GetName())==0) 
+       return macro_table[i];
+    }
+    
+    return 0;
+}
+
+void MathMacroTable::addTemplate(MathMacroTemplate *m)
+{
+    if (num_macros<max_macros)
+      macro_table[num_macros++] = m;
+    else
+      lyxerr.print("Error (MathMacroTable::addTemplate): "
+                  "Macro table exhausted!");
+}
+
+
+// All this stuff aparently leaks because it's created here and is not 
+// deleted never, but it have to live all the LyX sesion. OK, would not
+// so hard to do it in the MacroTable destructor, but this doesn't harm
+// seriously, so don't bother me with purify results here.   ;-)
+
+void MathMacroTable::builtinMacros()
+{
+    MathMacroTemplate *m;
+    MathedIter iter;
+    MathParInset* inset;// *arg;
+    LyxArrayBase *array, *array2;
+    
+    built = true;
+    
+    lyxerr.debug("Building macros", Error::MATHED);
+    
+    // This macro doesn't have arguments
+    m = new MathMacroTemplate("notin");  // this leaks
+    addTemplate(m);
+    array = new LyxArrayBase; // this leaks
+    iter.SetData(array);
+    iter.Insert(new MathAccentInset(LM_in, LM_TC_BOPS, LM_not)); // this leaks
+    m->SetData(array);
+    
+    // These two are only while we are still with LyX 2.x
+    m = new MathMacroTemplate("emptyset"); // this leaks
+    addTemplate(m);
+    array = new LyxArrayBase; // this leaks
+    iter.SetData(array);
+    iter.Insert(new MathAccentInset('O', LM_TC_RM, LM_not)); // this leaks
+    m->SetData(array);
+    
+    m = new MathMacroTemplate("perp"); // this leaks
+    addTemplate(m);
+    array = new LyxArrayBase; // this leaks
+    iter.SetData(array);
+    iter.Insert(LM_bot, LM_TC_BOP);
+    m->SetData(array);
+
+    // binom has two arguments
+    m = new MathMacroTemplate("binom", 2);
+    addTemplate(m);
+    array = new LyxArrayBase; 
+    m->SetData(array);
+    iter.SetData(array);
+    inset = new MathDelimInset('(', ')');
+    iter.Insert(inset, LM_TC_ACTIVE_INSET);
+    array = new LyxArrayBase; 
+    iter.SetData(array);
+    MathFracInset *frac = new MathFracInset(LM_OT_ATOP);
+    iter.Insert(frac, LM_TC_ACTIVE_INSET);
+    inset->SetData(array);
+    array = new LyxArrayBase;
+    array2 = new LyxArrayBase;  
+    iter.SetData(array);
+    iter.Insert(m->getMacroPar(0));
+    iter.SetData(array2);
+    iter.Insert(m->getMacroPar(1));
+    frac->SetData(array, array2);
+
+/*
+    // Cases has 1 argument
+    m = new MathMacroTemplate("cases", 1, MMF_Env); // this leaks
+    addTemplate(m);
+    array = new LyxArrayBase; // this leaks
+    iter.SetData(array);
+    arg = new MathMatrixInset(2,1); // this leaks
+
+    m->setArgument(arg);
+    arg->SetAlign('c',"ll");
+    iter.Insert(arg, LM_TC_ACTIVE_INSET);
+    inset = new MathDelimInset('{', '.'); // this leaks
+    inset->SetData(array);
+    array = new LyxArrayBase; // this leaks
+    iter.SetData(array);
+    iter.Insert(inset, LM_TC_ACTIVE_INSET);
+    m->SetData(array);
+  
+
+    // the environment substack has 1 argument
+    m = new MathMacroTemplate("substack", 1, MMF_Env); // this leaks
+    addTemplate(m);     
+    arg = new MathMatrixInset(1,1); // this leaks
+    m->setArgument(arg);
+    arg->SetType(LM_OT_MACRO);
+    array = new LyxArrayBase; // this leaks
+    iter.SetData(array);
+    iter.Insert(arg, LM_TC_ACTIVE_INSET);
+    m->SetData(array);*/
+}
+
+
+MathMacroTable MathMacroTable::mathMTable(255);
+bool  MathMacroTable::built = false;
+
diff --git a/src/mathed/math_macro.h b/src/mathed/math_macro.h
new file mode 100644 (file)
index 0000000..8b9ca85
--- /dev/null
@@ -0,0 +1,271 @@
+// -*- C++ -*-
+/*
+ *  File:        math_macro.h
+ *  Purpose:     Declaration of macro class for mathed 
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     November 1996
+ *  Description: WYSIWYG math macros
+ *
+ *  Dependencies: Mathed
+ *
+ *  Copyright: (c) 1996, 1997 Alejandro Aguilar Sierra
+ *
+ *   Version: 0.2, Mathed & Lyx project.
+ *
+ *   This code is under the GNU General Public Licence version 2 or later.
+ */
+#ifndef __MATH_MACRO__
+#define __MATH_MACRO__
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "math_defs.h"
+
+///
+typedef MathParInset* MathParInsetP;
+///
+typedef LyxArrayBase *LyxArrayBaseP;
+
+class MathMacroTemplate;
+
+
+/// This class contains the data for a macro
+class MathMacro: public MathParInset
+{
+ public:
+    /// A macro can only be builded from an existing template
+    MathMacro(MathMacroTemplate *);
+    /// or from another macro.
+    MathMacro(MathMacro*);
+       ///
+    ~MathMacro();
+       ///
+    void Draw(int, int);
+       ///
+    void Metrics();
+       ///
+    MathedInset *Clone();
+       ///
+    void Write(FILE *);
+       ///
+    void Write(LString &);
+       ///
+    bool setArgumentIdx(int);
+       ///
+    int  getArgumentIdx();
+       ///
+    int  getMaxArgumentIdx();
+       ///
+    int GetColumns();
+       ///
+    void GetXY(int&, int&) const;
+       ///
+    void SetFocus(int, int);
+       ///
+    LyxArrayBase *GetData();
+       ///
+    MathedRowSt *getRowSt() const { return args[idx].row; }
+       ///
+    void SetData(LyxArrayBase *);
+       ///
+    MathedTextCodes getTCode() { return tcode; }
+       ///
+    bool Permit(short);
+    
+ private:
+       ///
+    MathMacroTemplate *tmplate;
+       ///
+    struct MacroArgumentBase {
+       /// Position of the macro
+       int x, y;
+           ///
+       MathedRowSt *row;
+           ///
+       LyxArrayBase *array;
+           ///
+       MacroArgumentBase() { x = y = 0;  array = 0; row = 0; }
+    } *args;
+       ///
+    int idx;
+       ///
+    int nargs;
+       ///
+    MathedTextCodes tcode;
+       ///
+    friend class MathMacroTemplate;
+};
+
+
+/// An argument
+class MathMacroArgument: public MathParInset
+{
+ public:
+    ///
+    MathMacroArgument() { expnd_mode = false; number = 1;  SetType(LM_OT_MACRO_ARG); }
+    ///
+    MathMacroArgument(int);
+    ///
+    ~MathMacroArgument() { fprintf(stderr, "help, destroyme!\n"); }
+    ///
+    MathedInset *Clone() { return this; }
+       ///
+    void Metrics();
+       ///
+    void Draw(int x, int baseline);
+       ///
+    void Write(FILE*);
+       ///
+    void Write(LString &);
+    ///
+    void setNumber(int n) { number = n; }
+    /// Is expanded or not
+    void setExpand(bool e) { expnd_mode = e; }
+    /// Is expanded or not
+    bool getExpand() { return expnd_mode; }
+    
+ private:
+       ///
+    bool expnd_mode;
+       ///
+    int number;
+};
+
+
+/// This class contains the macro definition
+class MathMacroTemplate: public MathParInset
+{
+ public:
+    /// A template constructor needs all the data
+    MathMacroTemplate(char const*, int na=0, int f=0);
+       ///
+    ~MathMacroTemplate();
+       ///
+    void Draw(int, int);
+       ///
+    void Metrics();
+       ///
+    void WriteDef(FILE *); 
+       ///
+    void WriteDef(LString &); 
+    /// useful for special insets
+    void  setTCode(MathedTextCodes t) { tcode = t; }
+    ///
+    MathedTextCodes getTCode() { return tcode; }
+    /// 
+    void setArgument(LyxArrayBase *, int i=0);
+    /// Number of arguments
+    int getNoArgs() { return nargs; }
+    ///
+    void GetMacroXY(int, int&, int&) const;
+    ///
+    MathParInset *getMacroPar(int) const;
+    ///
+    void SetMacroFocus(int&, int, int);
+       ///
+    void setEditMode(bool);
+
+    /// Replace the appropriate arguments with a specific macro's data
+    void update(MathMacro* m=0);
+      
+ private:
+    ///
+    short flags;
+    ///
+    MathedTextCodes tcode;
+    ///
+    MathMacroArgument *args;
+    ///
+    int nargs;
+    ///
+    friend class MathMacro;
+};
+     
+
+///
+typedef MathMacro *MathMacroP;
+///
+typedef MathMacroTemplate *MathMacroTemplateP;
+
+///
+class MathMacroTable 
+{
+ public:
+       ///
+    MathMacroTable(int);
+       ///
+    ~MathMacroTable();
+       ///
+    void addTemplate(MathMacroTemplate *);
+       ///
+    MathMacro *getMacro(char const*) const;
+       ///
+    MathMacroTemplate *getTemplate(char const*) const;
+       ///
+    void builtinMacros();
+       ///
+    static MathMacroTable mathMTable;
+       ///
+    static bool built;
+    
+ private:
+       ///
+    const int max_macros;
+       ///
+    int num_macros;
+       ///
+    MathMacroTemplateP *macro_table;
+};
+
+
+
+/*-----------------------  inlines  -------------------------*/
+
+inline
+bool MathMacro::setArgumentIdx(int i)
+{
+    if (i>=0 && i<nargs) {
+       idx = i;
+       return true;
+    } else
+      return false;
+}
+
+inline
+int  MathMacro::getArgumentIdx() 
+{ 
+    return idx; 
+}
+
+inline
+int  MathMacro::getMaxArgumentIdx() 
+{ 
+    return nargs-1; 
+} 
+
+
+inline
+LyxArrayBase *MathMacro::GetData() 
+{ 
+    return args[idx].array; 
+} 
+
+
+inline
+void MathMacro::SetData(LyxArrayBase *a)
+{
+   args[idx].array = a;
+}
+
+
+inline 
+MathMacro *MathMacroTable::getMacro(char const* name) const
+ {
+     MathMacroTemplate *mt = getTemplate(name);
+     return (mt) ? new MathMacro(mt): 0;
+ }
+
+
+#endif
diff --git a/src/mathed/math_panel.C b/src/mathed/math_panel.C
new file mode 100644 (file)
index 0000000..fafc6e6
--- /dev/null
@@ -0,0 +1,352 @@
+/*
+ *  File:        math_panel.C
+ *  Purpose:     Mathed GUI for lyx
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx>
+ *  Created:     March 28, 1996
+ * 
+ *  Dependencies: Xlib, Xpm, XForms, Lyx
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra 
+ *
+ *   You are free to use and modify it under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+
+#include FORMS_H_LOCATION
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "lyx_gui_misc.h" 
+#include "math_panel.h"
+#include "symbol_def.h"
+#include "formula.h"
+#include "lyxfunc.h"
+#include "gettext.h"
+
+/* Bitmaps */
+#include "delim.xbm"
+#include "delim0.xpm"
+#include "delim.xpm"
+#include "deco.xbm"
+#include "deco.xpm"
+#include "space.xpm"
+#include "sqrt.xpm"
+#include "frac.xpm"
+#include "matrix.xpm"
+#include "equation.xpm"
+
+//     $Id: math_panel.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $        
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: math_panel.C,v 1.1 1999/09/27 18:44:39 larsbj Exp $";
+#endif /* lint */
+
+static LyXFunc *lyxfunc=0;
+
+//static FD_panel* symb_form=0;
+
+FD_panel  *fd_panel;
+FD_delim  *fd_delim;
+FD_deco   *fd_deco;
+FD_space  *fd_space;
+FD_matrix *fd_matrix;
+
+int delim_code[] = {   
+   '(', ')', LM_lceil,  LM_rceil,  LM_uparrow,  LM_Uparrow,
+   '[', ']', LM_lfloor,  LM_rfloor,  LM_updownarrow, LM_Updownarrow,
+   '{', '}',  '/', LM_backslash,  LM_downarrow,  LM_Downarrow,
+   LM_langle,  LM_rangle, '|', LM_Vert, '.', 0
+};
+
+static char const *deco_code[] = {
+   "widehat", "widetilde", "overbrace", "overleftarrow", "overrightarrow", 
+   "overline","underbrace", "underline"
+};
+
+
+static char const *func_code[] = {
+    "arccos", "arcsin", "arctan", "arg", "bmod",
+    "cos", "cosh", "cot", "coth", "csc", "deg",
+    "det", "dim", "exp", "gcd", "hom", "inf", "ker",
+    "lg", "lim", "liminf", "limsup", "ln", "log",
+    "max", "min", "sec", "sin", "sinh", "sup",
+    "tan", "tanh"
+};
+
+static char h_align_str[80] = "c";
+
+/* callbacks for form panel */
+void button_cb(FL_OBJECT *ob, long data)
+{   
+   extern void free_symbols_form();
+   switch (data)  {
+    case MM_GREEK:
+    case MM_VARSIZE:
+    case MM_BRELATS:
+    case MM_ARROW:
+    case MM_BOP:
+    case MM_MISC: 
+      {           
+        BitmapMenu *menu = (BitmapMenu *)ob->u_vdata;
+        menu->Show();  
+        break;
+      }
+    case MM_FRAC:
+       lyxfunc->Dispatch(LFUN_INSERT_MATH, "frac");
+      break;
+    case MM_SQRT:
+       lyxfunc->Dispatch(LFUN_INSERT_MATH, "sqrt");
+      break;
+    case MM_DELIM:
+      fl_show_form(fd_delim->delim,FL_PLACE_MOUSE,FL_FULLBORDER, _("Delimiter"));
+       fl_set_form_atclose(fd_delim->delim, CancelCloseBoxCB, NULL);
+      break;
+    case MM_DECO:
+      fl_show_form(fd_deco->deco,FL_PLACE_MOUSE,FL_FULLBORDER,_("Decoration"));
+       fl_set_form_atclose(fd_deco->deco, CancelCloseBoxCB, NULL);
+      break;
+    case MM_SPACE:
+      fl_show_form(fd_space->space,FL_PLACE_MOUSE,FL_FULLBORDER,_("Spacing"));
+       fl_set_form_atclose(fd_space->space, CancelCloseBoxCB, NULL);
+      break;
+    case MM_MATRIX:
+      fl_show_form(fd_matrix->matrix,FL_PLACE_MOUSE,FL_FULLBORDER,_("Matrix"));
+       fl_set_form_atclose(fd_matrix->matrix, CancelCloseBoxCB, NULL);
+      break;
+    case MM_EQU:
+       lyxfunc->Dispatch(LFUN_MATH_DISPLAY);
+      break;
+    case MM_FUNC:
+      {
+         int i = fl_get_browser(fd_panel->func_browse) - 1;
+         lyxfunc->Dispatch(LFUN_INSERT_MATH, func_code[i]);
+         break;
+      }
+    case 100:
+      free_symbols_form();
+      break;
+   }
+}
+
+
+/* callbacks for form delim */
+void delim_cb(FL_OBJECT *, long data)
+{
+   int left=fd_delim->left->u_ldata, right=fd_delim->right->u_ldata;
+   int side=(fl_get_button(fd_delim->right)!=0);
+   Pixmap p1, p2;
+   
+   switch (data) {
+    case MM_APPLY:
+    case MM_OK:
+      {
+        char s[80];
+        sprintf(s, "%d %d", delim_code[left], delim_code[right]); 
+        lyxfunc->Dispatch(LFUN_MATH_DELIM, s);
+        if (data==MM_APPLY) break;
+      }
+    case MM_CLOSE: fl_hide_form(fd_delim->delim); break;
+    case 2: 
+      {
+         int i = fl_get_bmtable(fd_delim->menu);
+         if (i>=0) {
+#if FL_REVISION > 85
+             if (side || (fl_get_bmtable_numb(fd_delim->menu)!=FL_LEFT_MOUSE)) 
+#else
+             if (side || (fl_get_bmtable_numb(fd_delim->menu)!= 1))
+       
+#endif
+               right = i;
+             else
+               left = i;
+         }
+         p1 = fl_get_pixmap_pixmap(fd_delim->pix, &p1, &p2);
+         fl_draw_bmtable_item(fd_delim->menu,left,p1,0,0);
+         fl_draw_bmtable_item(fd_delim->menu,right,p1,16,0);
+         fl_redraw_object(fd_delim->pix);
+         
+         fd_delim->left->u_ldata = left;
+         fd_delim->right->u_ldata = right;
+
+         break;
+      }
+    case 3: break;
+    case 4: break;
+   }
+}
+
+/* callbacks for form matrix */
+void matrix_cb(FL_OBJECT *, long data)
+{
+   int nx, ny;
+   static char v_align_c[] = "tcb";
+   switch (data) {
+    case MM_APPLY:
+    case MM_OK: 
+      {
+        char s[80];
+        char c = v_align_c[fl_get_choice(fd_matrix->valign)-1];
+        char const *sh = fl_get_input(fd_matrix->halign);
+        nx = (int)(fl_get_slider_value(fd_matrix->columns)+0.5);
+        ny = (int)(fl_get_slider_value(fd_matrix->rows)+0.5);
+        sprintf(s, "%d %d %c%s", nx, ny, c, sh);      
+        if (data==MM_OK) fl_hide_form(fd_matrix->matrix);
+        lyxfunc->Dispatch(LFUN_INSERT_MATRIX, s);
+        break;
+      }
+    case MM_CLOSE: fl_hide_form(fd_matrix->matrix); break;
+    case 2: 
+      {
+        nx = (int)(fl_get_slider_value(fd_matrix->columns)+0.5);
+        for (int i=0; i<nx; i++) h_align_str[i] = 'c';
+        //memset(h_align_str, 'c', nx);
+        h_align_str[nx] = '\0';
+//      fl_freeze_form(fd_form_main->form_main);
+//     fl_addto_form(fd_form_main->form_main);
+
+        fl_set_input(fd_matrix->halign, h_align_str);  
+        fl_redraw_object(fd_matrix->halign);    
+        break;
+      }
+   }
+}
+
+/* callbacks for form deco */
+void deco_cb(FL_OBJECT *, long data)
+{
+   switch (data) {
+    case MM_APPLY:
+    case MM_OK:
+      { 
+        int i = fl_get_bmtable(fd_deco->menu);
+        lyxfunc->Dispatch(LFUN_INSERT_MATH, deco_code[i]);
+        if (data==MM_APPLY) break;
+      }
+    case MM_CLOSE: fl_hide_form(fd_deco->deco); break;
+   }
+}
+
+/* callbacks for form space */
+void space_cb(FL_OBJECT *, long data)
+{
+   static short sp=-1;
+   extern char *latex_mathspace[];
+   
+   if (data>=0 && data<6) 
+      sp = (short)data;
+   else
+   switch (data) {
+    case MM_APPLY:
+    case MM_OK:
+      { 
+         if (sp>=0) 
+           lyxfunc->Dispatch(LFUN_INSERT_MATH, latex_mathspace[sp]);
+        if (data==MM_APPLY) break;
+      }
+    case MM_CLOSE: fl_hide_form(fd_space->space); break;
+   }
+}
+
+int align_filter(FL_OBJECT *, char const *, char const *cur, int c)
+{
+   int n = (int)(fl_get_slider_value(fd_matrix->columns)+0.5) - strlen(cur);
+   return ((c=='c'||c=='l'||c=='r') && n>=0) ? FL_VALID: FL_INVALID;
+}
+
+char** mathed_get_pixmap_from_icon(int d)
+{
+   switch (d) {
+    case MM_FRAC: return frac;
+    case MM_SQRT: return sqrt;
+    case MM_DELIM: return delim;
+    case MM_MATRIX: return matrix;
+    case MM_EQU: return equation; 
+    case MM_DECO: return deco; 
+    case MM_SPACE: return space_xpm; 
+    default: return NULL;
+   }
+}
+
+FD_panel *create_math_panel( )
+{
+   fd_panel = create_form_panel();
+   fd_delim = create_form_delim();
+   fd_deco = create_form_deco();
+   fd_space = create_form_space();
+   fd_matrix = create_form_matrix();
+
+   /* fill-in form initialization code */
+   fl_set_button(fd_delim->left, 1);
+   fl_set_pixmap_data(fd_delim->pix, delim0);
+   fl_set_bmtable_data(fd_delim->menu,6,4,delim_width,delim_height,
+                      (char*)delim_bits);
+   fl_set_bmtable_maxitems(fd_delim->menu, 23);
+   
+   fl_set_pixmap_data(fd_panel->sqrt, sqrt);
+   fl_set_pixmap_data(fd_panel->frac, frac);
+   fl_set_pixmap_data(fd_panel->delim, delim);
+   fl_set_pixmap_data(fd_panel->deco, deco);
+   fl_set_pixmap_data(fd_panel->space, space_xpm);
+   fl_set_pixmap_data(fd_panel->matrix, matrix);
+   fl_set_pixmap_data(fd_panel->equation, equation);
+
+   for (int i=0; i<32; i++) {
+       fl_add_browser_line(fd_panel->func_browse, func_code[i]);
+   }
+    
+   fl_addto_choice(fd_matrix->valign, _("Top | Center | Bottom"));
+   fl_set_choice(fd_matrix->valign, 2);
+   fl_set_input(fd_matrix->halign, h_align_str);
+   fl_set_input_filter(fd_matrix->halign, align_filter);
+   
+   fl_set_bmtable_data(fd_deco->menu,3,3,deco_width,deco_height,
+                      (char*)deco_bits);
+   fl_set_bmtable_maxitems(fd_deco->menu, 8);
+
+   fd_delim->left->u_ldata = 0;
+   fd_delim->right->u_ldata = 1;
+    
+   return fd_panel;
+}
+
+extern BitmapMenu* sym_menu;
+extern void  create_symbol_menues(FD_panel *);
+
+void free_symbols_form()
+{
+   if (fd_panel) {
+      fl_hide_form(fd_panel->panel);
+      fl_free_form(fd_panel->panel);
+      delete sym_menu;
+      delete fd_panel;
+      fd_panel = NULL;  
+   }
+}
+
+int AtClose_symbols_form(FL_FORM *, void *)
+{
+  free_symbols_form();
+  return FL_IGNORE;
+}
+
+
+void show_symbols_form(LyXFunc *lf)
+{
+    lyxfunc = lf;
+    if (!fd_panel) {
+       fd_panel = create_math_panel();
+       fl_register_raw_callback(fd_panel->panel, 
+                                ButtonPressMask|KeyPressMask, peek_event);
+       create_symbol_menues(fd_panel); 
+       fl_set_form_atclose(fd_panel->panel, AtClose_symbols_form, NULL);
+    }
+    if (fd_panel->panel->visible) {
+       fl_raise_form(fd_panel->panel);
+    } else {
+      fl_show_form(fd_panel->panel, FL_PLACE_MOUSE | FL_FREE_SIZE,
+                  FL_FULLBORDER, _("Math Panel"));
+    }
+}
diff --git a/src/mathed/math_panel.h b/src/mathed/math_panel.h
new file mode 100644 (file)
index 0000000..633f161
--- /dev/null
@@ -0,0 +1,103 @@
+// -*- C++ -*-
+/*
+ *  File:        math_panel.h
+ *  Purpose:     Mathed GUI for lyx
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx>
+ *  Created:     March 28, 1996
+ * 
+ *  Dependencies: Xlib, Xpm, XForms, Lyx
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra 
+ *
+ *   You are free to use and modify it under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#ifndef FD_math_panel_h_
+#define FD_math_panel_h_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "bmtable.h"                 
+
+///
+enum  {
+   MM_GREEK, MM_ARROW, MM_BOP, MM_BRELATS, MM_VARSIZE, MM_MISC,
+   MM_FRAC, MM_SQRT, MM_DELIM, MM_MATRIX, MM_EQU,
+   MM_DECO, MM_SPACE, MM_DOTS, MM_FUNC,
+   MM_MAX,
+   MM_CLOSE = 1024,
+   MM_APPLY, MM_OK
+};
+
+///
+typedef FL_OBJECT* FL_OBJECTP;
+
+/// Class to manage bitmap menu bars
+class BitmapMenu {
+  ///
+   static BitmapMenu *active;
+   ///
+   friend int peek_event(FL_FORM *, void *);
+ protected:
+   ///
+   BitmapMenu *next, *prev;
+   ///
+   int nb;             // Number of bitmaps
+                           ///
+   int i;              // Current bitmap
+                           ///
+   int ww;             // Border width
+                           ///
+   int x, y, w, h;
+   ///
+   FL_FORM *form;
+   ///
+   FL_OBJECTP *bitmap;
+   ///
+   FL_OBJECT *button;
+ public:
+   ///
+   BitmapMenu(int n, FL_OBJECT* bt, BitmapMenu* prevx=NULL);
+   ///
+   ~BitmapMenu();
+   ///
+   FL_OBJECT* AddBitmap(int id,
+                       int nx, int ny, int bw, int bh,
+                       char* data, Bool vert=True); // Why Bool?
+   ///
+   void Create();
+   ///
+   void Hide();
+   ///
+   void Show();
+   ///
+   void Prev();
+   ///
+   void Next();
+   ///
+   int  GetIndex(FL_OBJECT* ob);
+};
+
+
+inline
+void BitmapMenu::Prev()  {
+   Hide();
+   if (prev)
+     prev->Show();
+}
+
+inline
+void BitmapMenu::Next()  {
+   Hide();
+   if (next)
+     next->Show();
+}
+
+#include "math_forms.h"
+
+extern FD_panel * create_math_panel(void);
+
+#endif /* FD_math_panel_h_ */
diff --git a/src/mathed/math_parser.C b/src/mathed/math_parser.C
new file mode 100644 (file)
index 0000000..eee0c2b
--- /dev/null
@@ -0,0 +1,844 @@
+/*
+ *  File:        math_parser.C
+ *  Purpose:     Parser for mathed
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Parse LaTeX2e math mode code.
+ *
+ *  Dependencies: Xlib, XForms
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#ifdef __GNUG__
+#pragma implementation "math_parser.h"
+#endif
+
+#include "math_parser.h"
+#include "math_iter.h"
+#include "math_inset.h"
+#include "math_macro.h"
+#include "math_root.h"
+#include "error.h"
+
+enum {
+       FLAG_BRACE      = 1,    //  A { needed
+       FLAG_BRACE_ARG  = 2,    //  Next { is argument
+       FLAG_BRACE_OPT  = 4,    //  Optional {
+       FLAG_BRACE_LAST = 8,    //  Last } ends the parsing process
+       FLAG_BRACK_ARG  = 16,   //  Optional [
+       FLAG_RIGHT      = 32,      //  Next right ends the parsing process
+       FLAG_END        = 64,      //  Next end ends the parsing process
+       FLAG_BRACE_FONT = 128,  //  Next } closes a font
+       FLAG_BRACK_END  = 256   // Next ] ends the parsing process
+};
+
+YYSTYPE yylval;
+
+
+static short mathed_env = LM_EN_INTEXT;
+
+char *mathed_label = NULL;
+
+char const *latex_mathenv[] = { 
+   "math", 
+   "displaymath", 
+   "equation", 
+   "eqnarray*",
+   "eqnarray",
+   "array"
+};
+
+
+char const *latex_mathspace[] = {
+   "!", ",", ":", ";", "quad", "qquad"
+};
+   
+char const *latex_special_chars = "#$%&_{}";
+           
+// These are lexical codes, not semantic
+enum lexcode_enum {
+   LexNone,
+   LexESC,
+   LexAlpha,
+   LexDigit,
+   LexBOP,         // Binary operators or relations
+   LexMathSpace,
+   LexOpen,
+   LexClose,
+   LexComment,
+   LexArgument,
+   LexSpace,
+   LexNewLine,
+   LexOther,
+   LexSelf
+};
+
+static lexcode_enum lexcode[256];  
+static char yytext[256];
+static int yylineno;
+static FILE *yyin;
+static bool yy_mtextmode=false;
+           
+inline
+char *strnew(char const* s)
+{
+       char *s1 = new char[strlen(s)+1]; // this leaks when not delete[]'ed
+       strcpy(s1, s);
+       return s1;
+}
+
+
+static void mathPrintError(char const *msg) 
+{
+    fprintf(stderr, "Line ~%d: Math parse error: %s\n", yylineno, msg); 
+}
+
+
+static void LexInitCodes()
+{
+   int i;
+   
+   for (i=0;  i<=255; i++)     {
+     if (isalpha(i)) lexcode[i] = LexAlpha;
+     else if (isdigit(i)) lexcode[i] = LexDigit;
+     else if (isspace(i)) lexcode[i] = LexSpace;
+     else lexcode[i] = LexNone;
+   }
+    
+   lexcode['\t'] = lexcode['\f'] = lexcode[' '] = LexSpace;
+   lexcode['\n'] = LexNewLine;
+   lexcode['%'] = LexComment;
+   lexcode['#'] = LexArgument;
+   lexcode['+'] = lexcode['-'] = lexcode['*'] = lexcode['/'] = 
+   lexcode['<'] = lexcode['>'] = lexcode['='] = LexBOP;
+   
+   lexcode['!'] = lexcode[','] = lexcode[':'] = lexcode[';'] = LexMathSpace;
+   lexcode['('] = lexcode[')'] = lexcode['|'] = lexcode['.'] = lexcode['?'] = LexOther; 
+   lexcode['\'']= LexAlpha;
+   
+   lexcode['['] = lexcode[']'] = lexcode['^'] = lexcode['_'] = 
+   lexcode['&'] = LexSelf;  
+   
+   lexcode['\\'] = LexESC;
+   lexcode['{'] = LexOpen;
+   lexcode['}'] = LexClose;
+}
+
+static char LexGetArg(char lf, bool accept_spaces=false)
+{
+   char c, rg, *p = &yytext[0];
+   int bcnt =1;
+   
+   while (!feof(yyin)) {
+      c = getc(yyin); 
+      if (c>' ') {
+        if (!lf) lf = c; else
+        if (c!=lf)
+          fprintf(stderr, "Math parse error: unexpected '%c'\n", c);
+        break;
+      }
+   }
+   rg = (lf=='{') ? '}': ((lf=='[') ? ']': ((lf=='(') ? ')': 0));
+   if (!rg) {
+      fprintf(stderr, "Math parse error: unknown bracket '%c'\n", lf);
+      return '\0';
+   } 
+   do {
+      c = getc(yyin); 
+      if (c==lf) bcnt++;
+      if (c==rg) bcnt--;
+      if ((c>' ' || (c==' ' && accept_spaces)) && bcnt>0) *(p++) = c;
+   } while (bcnt>0 && !feof(yyin));
+   *p = '\0';
+   return rg;
+}
+
+static int yylex(void)
+{
+   static int init_done = 0;
+   unsigned char c;
+   
+   if (!init_done) LexInitCodes();
+   
+   while (!feof(yyin)) { 
+      c = getc(yyin);
+       
+      if (yy_mtextmode && c==' ') {
+         yylval.i=' ';
+         return LM_TK_ALPHA;
+      }
+       
+       if (lexcode[c]==LexNewLine) {
+          yylineno++; 
+          continue;
+       }
+        
+      if (lexcode[c]==LexComment) 
+       do c = getc(yyin); while (c!='\n' % !feof(yyin));  // eat comments
+    
+      if (lexcode[c]==LexDigit || lexcode[c]==LexOther || lexcode[c]==LexMathSpace) 
+        { yylval.i= c; return LM_TK_STR; }
+      if (lexcode[c]==LexAlpha) { yylval.i=c; return LM_TK_ALPHA; }
+      if (lexcode[c]==LexBOP)   { yylval.i=c; return LM_TK_BOP; }
+      if (lexcode[c]==LexSelf)  { return c; }   
+      if (lexcode[c]==LexArgument)   { 
+         c = getc(yyin);
+         yylval.i = c - '0';
+         return LM_TK_ARGUMENT; 
+      }
+      if (lexcode[c]==LexOpen)   { return LM_TK_OPEN; }
+      if (lexcode[c]==LexClose)   { return LM_TK_CLOSE; }
+      
+      if (lexcode[c]==LexESC)   {
+        c = getc(yyin);
+        if (c=='\\')   { return LM_TK_NEWLINE; }
+        if (c=='(')    { yylval.i = LM_EN_INTEXT; return LM_TK_BEGIN; }
+        if (c==')')    { yylval.i = LM_EN_INTEXT; return LM_TK_END; }
+        if (c=='[')    { yylval.i = LM_EN_DISPLAY; return LM_TK_BEGIN; }
+        if (c==']')    { yylval.i = LM_EN_DISPLAY; return LM_TK_END; }
+        if (strchr(latex_special_chars, c)) {
+            yylval.i = c;
+            return LM_TK_SPECIAL;
+        }  
+        if (lexcode[c]==LexMathSpace) {
+           int i;
+           for (i=0; i<4 && c!=latex_mathspace[i][0]; i++);
+           yylval.i = (i<4) ? i: 0; 
+           return LM_TK_SPACE; 
+        }
+        if (lexcode[c]==LexAlpha || lexcode[c]==LexDigit) {
+           char* p = &yytext[0];
+           while (lexcode[c]==LexAlpha || lexcode[c]==LexDigit) {
+              *p = c;
+              c = getc(yyin);
+              p++;
+           }
+           *p = '\0';
+           if (!feof(yyin)) ungetc(c, yyin);
+           latexkeys *l = in_word_set (yytext, strlen(yytext));
+           if (l) {
+              if (l->token==LM_TK_BEGIN || l->token==LM_TK_END) { 
+                 int i;
+                 LexGetArg('{');
+//               for (i=0; i<5 && strncmp(yytext, latex_mathenv[i],
+//                             strlen(latex_mathenv[i])); i++);
+                 
+                 for (i=0; i<6 && strcmp(yytext, latex_mathenv[i]); i++);
+                 yylval.i = i;
+              } else
+              if (l->token==LM_TK_SPACE) 
+                yylval.i = l->id;
+              else
+                yylval.l = l;
+              return l->token;
+           } else { 
+              yylval.s = yytext;
+              return LM_TK_UNDEF;
+           }
+        }
+      }
+   }
+   return 0;
+}
+
+int parse_align(char *hor, char *)
+{    
+   char *c;
+
+   int nc = 0;
+   for (c=hor; c && *c>' '; c++) nc++;
+   return nc;
+}
+
+// Accent hacks only for 0.12. Stolen from Cursor.
+int accent = 0;
+int nestaccent[8];
+
+void setAccent(int ac)
+{
+       if (ac > 0 && accent < 8) {
+               nestaccent[accent++] = ac;
+       } else
+         accent = 0;  // consumed!
+}
+
+
+MathedInset *doAccent(byte c, MathedTextCodes t)
+{
+       MathedInset *ac = 0;
+       
+       for (int i=accent-1; i>=0; i--) {
+               if (i==accent-1)
+                 ac = new MathAccentInset(c, t, nestaccent[i]);
+               else 
+                 ac = new MathAccentInset(ac, nestaccent[i]);
+       }
+       accent = 0;  // consumed!
+       
+       return ac;
+}
+
+
+MathedInset *doAccent(MathedInset *p)
+{
+       MathedInset *ac = 0;
+       
+       for (int i=accent-1; i>=0; i--) {
+               if (i==accent-1)
+                 ac = new MathAccentInset(p, nestaccent[i]);
+               else 
+                 ac = new MathAccentInset(ac, nestaccent[i]);
+       }
+       accent = 0;  // consumed!
+       
+       return ac;
+}
+
+
+
+
+LyxArrayBase *mathed_parse(unsigned flags, LyxArrayBase *array, MathParInset **mtx)
+{
+   int t = yylex(), tprev = 0;
+   bool panic = false;
+   static int plevel = -1;
+   static int size = LM_ST_TEXT;
+   MathedTextCodes varcode = LM_TC_VAR;
+   MathedInset* binset = 0;
+   static MathMacroTemplate *macro=0;
+   
+   int brace = 0;
+   int acc_brace = 0;
+   int acc_braces[8];
+   MathParInset *mt = (mtx) ? *mtx: 0;//(MathParInset*)NULL;
+    MathedRowSt *crow = (mt) ? mt->getRowSt(): 0;
+
+   plevel++;
+   if (!array) array = new LyxArrayBase;
+   MathedIter data(array);
+   while (t) {
+      if ((flags & FLAG_BRACE) && t != LM_TK_OPEN) {
+        if ((flags & FLAG_BRACK_ARG) && t=='[') {
+        }
+        else {
+            mathPrintError("Expected {. Maybe you forgot to enclose an argument in {}");
+           panic = true;
+           break;
+        }
+      }
+    MathedInsetTypes fractype = LM_OT_FRAC;
+    switch (t) {
+    case LM_TK_ALPHA:
+      {
+        if (accent) {
+            data.Insert(doAccent(yylval.i, varcode));
+        } else
+           data.Insert (yylval.i, varcode);  //LM_TC_VAR);
+        break;
+      }
+    case LM_TK_ARGUMENT:
+      {
+         if (macro) {
+             data.Insert(macro->getMacroPar(yylval.i-1), LM_TC_INSET);
+         } 
+         break;
+      } 
+    case LM_TK_NEWCOMMAND:
+      {
+         int na = 0; 
+
+         LexGetArg('{');
+         // This name lives until quitting, for that reason
+         // I didn't care on deleting explicitly. Later I will.
+         char const *name = strnew(&yytext[1]);
+         // ugly trick to be removed soon (lyx3)
+         char c = getc(yyin);
+         ungetc(c, yyin);
+         if (c=='[') {
+             LexGetArg('[');
+             na = atoi(yytext);
+         }  
+         macro = new MathMacroTemplate(name, na);
+         flags = FLAG_BRACE|FLAG_BRACE_LAST;
+         *mtx = macro;
+         macro->SetData(array);
+         break;
+      }
+    case LM_TK_SPECIAL:
+      {          
+         data.Insert (yylval.i, LM_TC_SPECIAL);
+         break;
+      }
+    case LM_TK_STR:
+      {          
+         if (accent) {
+                 data.Insert(doAccent(yylval.i, LM_TC_CONST));
+         } else
+           data.Insert (yylval.i, LM_TC_CONST);
+         break;
+      }
+    case LM_TK_OPEN:
+      {
+       brace++;
+       if  (accent && tprev==LM_TK_ACCENT) {
+           acc_braces[acc_brace++] = brace;
+           break;
+       }
+       if (flags & FLAG_BRACE_OPT) {
+          flags &= ~FLAG_BRACE_OPT;
+          flags |= FLAG_BRACE;
+       }
+                
+       if (flags & FLAG_BRACE)
+         flags &= ~FLAG_BRACE;
+        else {
+           data.Insert ('{', LM_TC_TEX);
+        }
+       break;
+      }
+    case LM_TK_CLOSE:
+      {
+        brace--;        
+        if (brace < 0) {
+           mathPrintError("Unmatching braces");
+           panic = true;
+           break;
+        }
+        if (acc_brace && brace==acc_braces[acc_brace-1]-1) {
+            acc_brace--;
+            break;
+        }
+        if (flags & FLAG_BRACE_FONT) {
+           varcode = LM_TC_VAR;
+           yy_mtextmode = false;
+           flags &= ~FLAG_BRACE_FONT;
+           break;
+        }
+        if (brace == 0 && (flags & FLAG_BRACE_LAST)) {
+           plevel--;
+           return array;
+        } else {
+           data.Insert ('}', LM_TC_TEX);
+        }
+        break;
+      }
+
+    case '[':
+      {
+        if (flags & FLAG_BRACK_ARG) {
+          flags &= ~FLAG_BRACK_ARG;
+          char rg=LexGetArg('[');
+          if (rg!=']') {
+             mathPrintError("Expected ']'");
+             panic = true;
+             break;
+          }       
+//        if (arg) strcpy(arg, yytext);
+       } else
+         data.Insert ('[');
+       break;
+      }
+    case ']':
+      {
+         if (flags & FLAG_BRACK_END) {
+             plevel--;
+             return array;
+         } else
+           data.Insert (']');
+       break;
+      }
+
+    case '^':
+      {  
+        MathParInset *p = new MathParInset(size, "", LM_OT_SCRIPT);
+        LyxArrayBase * ar = mathed_parse(FLAG_BRACE_OPT|FLAG_BRACE_LAST, NULL);
+        p->SetData(ar);
+//      fprintf(stderr, "UP[%d]", p->GetStyle());
+        data.Insert (p, LM_TC_UP);
+        break;
+      }
+    case '_':
+      {
+        MathParInset *p = new MathParInset(size, "", LM_OT_SCRIPT);
+        LyxArrayBase * ar = mathed_parse(FLAG_BRACE_OPT|FLAG_BRACE_LAST, NULL);
+        p->SetData(ar);
+        data.Insert (p, LM_TC_DOWN);
+        break;
+      }
+
+    case LM_TK_LIMIT:
+      {
+        if (binset) {
+           binset->SetLimits((bool)(yylval.l->id));
+           binset = NULL;
+        }
+        break;
+      }
+      
+    case '&':    // Tab
+      {
+        if ((flags & FLAG_END) && mt && data.getCol()<mt->GetColumns()-1) {
+            data.setNumCols(mt->GetColumns());
+            data.Insert('T', LM_TC_TAB);
+        } else 
+           mathPrintError("Unexpected tab");
+        // debug info. [made that conditional -JMarc]
+        if (lyxerr.debugging(Error::MATHED))
+                fprintf(stderr, "%d %d\n", data.getCol(), mt->GetColumns());
+       break;
+      }
+    case LM_TK_NEWLINE:
+      {
+         if (mt && (flags & FLAG_END)) {
+             if (mt->Permit(LMPF_ALLOW_CR)) {
+                 if (crow) {
+                         crow->setNext(new MathedRowSt(mt->GetColumns()+1)); // this leaks
+                     crow = crow->getNext();
+                 }
+                 data.Insert('K', LM_TC_CR);
+             } else 
+               mathPrintError("Unexpected newline");
+         }
+         break;
+      }
+    case LM_TK_BIGSYM:  
+      {
+        binset = new MathBigopInset(yylval.l->name,yylval.l->id);
+        data.Insert(binset);   
+        break;
+      }
+    case LM_TK_SYM:
+      {
+        if (yylval.l->id < 256) {
+           MathedTextCodes tc = MathIsBOPS(yylval.l->id) ? LM_TC_BOPS: LM_TC_SYMB;
+           if (accent) {
+               data.Insert(doAccent(yylval.l->id, tc));
+           } else
+           data.Insert (yylval.l->id, tc);
+        } else {
+           MathFuncInset *bg = new MathFuncInset(yylval.l->name);
+            if (accent) {
+                    data.Insert(doAccent(bg));
+            } else
+            data.Insert(bg, true);     
+        }
+        break;
+      }
+    case LM_TK_BOP:
+      {
+        if (accent) {
+                data.Insert(doAccent(yylval.i, LM_TC_BOP));
+         } else
+           data.Insert (yylval.i, LM_TC_BOP);
+        break;
+      }
+    case LM_TK_STY:
+      {
+         if (mt) {
+             mt->UserSetSize(yylval.l->id);
+         }
+         break; 
+      }
+    case LM_TK_SPACE:
+      {
+        if (yylval.i>=0) {
+           MathSpaceInset *sp = new MathSpaceInset(yylval.i);
+           data.Insert(sp);
+        }
+        break;
+      }           
+    case LM_TK_DOTS:
+      {
+        MathDotsInset *p = new MathDotsInset(yylval.l->name, yylval.l->id);
+        data.Insert(p);
+        break;
+      }     
+    case LM_TK_STACK:
+       fractype = LM_OT_STACKREL;
+    case LM_TK_FRAC:
+      {
+        MathFracInset *fc = new MathFracInset(fractype);
+        LyxArrayBase* num = mathed_parse(FLAG_BRACE|FLAG_BRACE_LAST);
+        LyxArrayBase* den = mathed_parse(FLAG_BRACE|FLAG_BRACE_LAST);
+        fc->SetData(num, den);
+        data.Insert(fc, LM_TC_ACTIVE_INSET);
+        break;
+      }
+    case LM_TK_SQRT:
+      {            
+        MathParInset *rt;
+         
+        char c = getc(yyin);
+         
+        if (c=='[') {
+            rt = new MathRootInset(size);
+            rt->setArgumentIdx(0);
+            rt->SetData(mathed_parse(FLAG_BRACK_END, 0, &rt));
+            rt->setArgumentIdx(1);
+        } else {
+            ungetc(c, yyin);
+            rt = new MathSqrtInset(size);
+        }
+        rt->SetData(mathed_parse(FLAG_BRACE|FLAG_BRACE_LAST, 0, &rt));
+        data.Insert(rt, LM_TC_ACTIVE_INSET);
+        break;
+      }
+       
+    case LM_TK_LEFT:
+      {
+        int lfd, rgd;
+        lfd=yylex();
+        if (lfd==LM_TK_SYM || lfd==LM_TK_STR || lfd==LM_TK_BOP|| lfd==LM_TK_SPECIAL)
+          lfd = (lfd==LM_TK_SYM) ? yylval.l->id: yylval.i;
+//      fprintf(stderr, "L[%d %c]", lfd, lfd);
+        LyxArrayBase* a = mathed_parse(FLAG_RIGHT);
+        rgd=yylex();
+//      fprintf(stderr, "R[%d]", rgd);
+        if (rgd==LM_TK_SYM || rgd==LM_TK_STR || rgd==LM_TK_BOP || rgd==LM_TK_SPECIAL)
+          rgd = (rgd==LM_TK_SYM) ? yylval.l->id: yylval.i;      
+        MathDelimInset *dl = new MathDelimInset(lfd, rgd);
+        dl->SetData(a);
+        data.Insert(dl, LM_TC_ACTIVE_INSET);
+//      fprintf(stderr, "RL[%d %d]", lfd, rgd);
+        break;
+      }
+    case LM_TK_RIGHT:
+      {
+        if (flags & FLAG_RIGHT) { 
+           plevel--;
+           return array;
+        } else {
+           mathPrintError("Unmatched right delimiter");
+//         panic = true;
+        }
+        break;
+      }
+
+    case LM_TK_FONT:
+      {
+        varcode = (MathedTextCodes)yylval.l->id;
+         yy_mtextmode = (bool)(varcode==LM_TC_TEXTRM);
+        flags |= (FLAG_BRACE|FLAG_BRACE_FONT);
+       break;
+      }
+    case LM_TK_WIDE:
+      {  
+        MathDecorationInset *sq = new MathDecorationInset(yylval.l->id, size);
+        sq->SetData(mathed_parse(FLAG_BRACE|FLAG_BRACE_LAST));
+        data.Insert(sq, LM_TC_ACTIVE_INSET);
+        break;
+      }
+      
+    case LM_TK_ACCENT: setAccent(yylval.l->id); break;
+         
+    case LM_TK_NONUM:
+      {
+         if (crow)
+           crow->setNumbered(false);
+         break;
+      }
+
+    case LM_TK_PMOD:
+    case LM_TK_FUNC:
+      {
+         MathedInset *bg = new MathFuncInset(yylval.l->name); 
+         if (accent) {
+             data.Insert(t);
+         } else
+           data.Insert(bg);
+         break;
+      }
+    case LM_TK_FUNCLIM:
+      {
+        data.Insert(new MathFuncInset(yylval.l->name, LM_OT_FUNCLIM));
+        break;
+      }
+    case LM_TK_UNDEF:
+      {
+         
+       MathMacro* p = 
+        MathMacroTable::mathMTable.getMacro(yylval.s);
+       if (p) {
+          if (accent) 
+            data.Insert(doAccent(p), p->getTCode());
+          else
+            data.Insert(p, p->getTCode());
+          for (int i=0; p->setArgumentIdx(i); i++)
+            p->SetData(mathed_parse(FLAG_BRACE|FLAG_BRACE_LAST));
+       }
+       else {
+          MathedInset *q = new MathFuncInset(yylval.s, LM_OT_UNDEF);
+          if (accent) {
+                  data.Insert(doAccent(q));
+          } else {
+              data.Insert(q);
+          }
+       }
+        break;
+      }
+    case LM_TK_END:
+      {
+         if (mathed_env != yylval.i && yylval.i!=LM_EN_ARRAY)
+          mathPrintError("Unmatched environment");
+        // debug info [made that conditional -JMarc]
+        if (lyxerr.debugging(Error::MATHED))
+                fprintf(stderr, "[%d]\n", yylval.i);
+        plevel--;
+        if (mt) { // && (flags & FLAG_END)) {
+           mt->SetData(array);
+           array = NULL;
+        }
+        return array;
+      }
+    case LM_TK_BEGIN:
+      {
+        if (yylval.i==LM_EN_ARRAY) {
+           char ar[120], ar2[8];
+           ar[0] = ar2[0] = '\0'; 
+            char rg=LexGetArg(0);
+           if (rg==']') {
+              strcpy(ar2, yytext);
+              rg = LexGetArg('{');
+           }
+           strcpy(ar, yytext);
+           int nc = parse_align(ar, ar2);
+           MathParInset* mm = new MathMatrixInset(nc, 0);
+           mm->SetAlign(ar2[0], ar);
+                   data.Insert(mm, LM_TC_ACTIVE_INSET);
+            mathed_parse(FLAG_END, mm->GetData(), &mm);
+        } else
+        if (yylval.i>=LM_EN_INTEXT && yylval.i<=LM_EN_EQNARRAY) {
+            if (plevel!=0) {
+                mathPrintError("Misplaced environment");
+                break;
+            }
+            if (!mt) {
+                mathPrintError("NULL paragraph.");
+                panic = true;
+            }
+            
+            mathed_env = yylval.i;
+            if (mathed_env>=LM_EN_DISPLAY) {
+                size = LM_ST_DISPLAY;
+                if (mathed_env>LM_EN_EQUATION) {
+                    mt = new MathMatrixInset(3, -1);
+                    mt->SetAlign(' ', "rcl");
+                    if (mtx) *mtx = mt;
+                    flags |= FLAG_END;
+//                  data.Insert(' ', LM_TC_TAB);
+//                  data.Insert(' ', LM_TC_TAB);
+//                  data.Reset();
+                }
+                mt->SetStyle(size);
+                mt->SetType(mathed_env);
+                crow = mt->getRowSt();
+            }
+                              
+#ifdef DEBUG
+              fprintf(stderr, "MATH BEGIN[%d]\n", mathed_env);
+#endif
+        } else {
+//          fprintf(stderr, "MATHCRO[%s]",yytext);
+            MathMacro* p = 
+              MathMacroTable::mathMTable.getMacro(yytext);
+            if (p) {
+                data.Insert(p, p->getTCode());
+                p->setArgumentIdx(0);
+                mathed_parse(FLAG_END, p->GetData(), (MathParInset**)&p);
+//              for (int i=0; p->setArgumentIdx(i); i++)
+//                p->SetData(mathed_parse(FLAG_BRACE|FLAG_BRACE_LAST));
+            } else 
+              mathPrintError("Unrecognized environment");
+        }
+        break;
+      }
+       
+    case LM_TK_MACRO:
+     { 
+         MathedInset* p = 
+           MathMacroTable::mathMTable.getMacro(yylval.l->name);
+        
+         if (p) {
+             if (accent) {
+               data.Insert(doAccent(p));
+             } else
+               data.Insert(p, ((MathMacro*)p)->getTCode());
+         }
+         break;
+      }
+       
+     case LM_TK_LABEL:
+       {          
+         char rg = LexGetArg('\0', true);
+         if (rg != '}') {
+            mathPrintError("Expected '{'");
+             // debug info
+             fprintf(stderr, "[%s]\n", yytext); fflush(stderr);
+             panic = true;
+            break;
+         } 
+         if (crow) {
+             // This is removed by crow's destructor. Bad design? yes, this 
+             // will be changed after 0.12
+             crow->setLabel(strnew(yytext));
+         }
+         else {
+                 // where is this math_label free'ed?
+                 // Supposedly in ~formula, another bad hack,
+                 // give me some time please.
+                 mathed_label = strnew(yytext);
+         }
+#ifdef DEBUG
+         fprintf(stderr, "Label[%d]\n", mathed_label);
+#endif
+         break;
+       } 
+     default:
+       mathPrintError("Unrecognized token");
+       // debug info
+       fprintf(stderr, "[%d %s]\n", t, yytext);
+       break;
+    }
+    tprev = t;
+    if (panic) {
+       fprintf(stderr, " Math Panic, expect problems!\n"); 
+       //   Search for the end command. 
+       do t = yylex (); while (t != LM_TK_END && t);
+    } else
+     t = yylex ();
+   
+   if ((flags & FLAG_BRACE_OPT)/* && t!='^' && t!='_'*/) {
+        flags &= ~FLAG_BRACE_OPT;
+       //data.Insert (LM_TC_CLOSE);
+       break;
+    }
+   }
+   plevel--;
+   return array;
+}
+
+
+void mathed_parser_file(FILE* file, int lineno)
+{
+    yyin = file;
+    yylineno = lineno;
+    if (!MathMacroTable::built)
+       MathMacroTable::mathMTable.builtinMacros();
+}
+
+
+int mathed_parser_lineno()
+{
+    return yylineno;
+}
+
diff --git a/src/mathed/math_parser.h b/src/mathed/math_parser.h
new file mode 100644 (file)
index 0000000..a11b016
--- /dev/null
@@ -0,0 +1,96 @@
+// -*- C++ -*-
+/*
+ *  File:        math_parser.h
+ *  Purpose:     Declaration of parsing utilities for mathed
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: Parse LaTeX2e math mode code.
+ *
+ *  Dependencies: Xlib, XForms
+ *
+ *  Copyright: (c) 1996, Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#ifndef __MATH_PARSER__
+#define __MATH_PARSER__
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "symbol_def.h"
+
+///
+#define LM_TK_OPEN '{'
+///
+#define LM_TK_CLOSE '}'
+
+///
+enum MathTokenEnum
+{
+   LM_TK_BOP = 256,
+     LM_TK_ALPHA,
+     LM_TK_STR,
+     LM_TK_SYM,
+     LM_TK_FRAC,
+     LM_TK_SQRT,
+     LM_TK_BEGIN,
+     LM_TK_END,
+     LM_TK_NEWLINE,
+     LM_TK_UNDEF,
+     LM_TK_FONT,
+     LM_TK_LEFT,
+     LM_TK_RIGHT,
+     LM_TK_ACCENT,
+     LM_TK_WIDE,
+     LM_TK_FUNC,
+     LM_TK_FUNCLIM,
+     LM_TK_BIGSYM,
+     LM_TK_LABEL,
+     LM_TK_NONUM,
+     LM_TK_SPACE,
+     LM_TK_DOTS,
+     LM_TK_LIMIT,
+     LM_TK_STY,
+     LM_TK_PMOD,
+     LM_TK_BMOD,
+     LM_TK_MACRO,
+     LM_TK_SPECIAL,
+     LM_TK_ARGUMENT, 
+     LM_TK_NEWCOMMAND,
+     LM_TK_STACK
+};
+
+///
+struct latexkeys { char const* name; short token; int id; };
+
+///
+struct latexkeys *
+in_word_set (register char const *str, register int len);
+
+///
+struct latexkeys *lm_get_key(int index);
+
+///
+struct latexkeys *lm_get_key_by_id(int id, short tc=LM_TK_SYM);
+
+///
+typedef union{
+  ///
+unsigned char c;
+  ///
+char *s;
+  ///
+int i;
+  ///
+latexkeys *l;
+} YYSTYPE;
+
+extern YYSTYPE yylval;
+
+#endif
diff --git a/src/mathed/math_root.C b/src/mathed/math_root.C
new file mode 100644 (file)
index 0000000..31d2079
--- /dev/null
@@ -0,0 +1,154 @@
+// -*- C++ -*-
+/*
+ *  File:        math_root.C
+ *  Purpose:     Implementation of the root object 
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1999
+ *  Description: Root math object
+ *
+ *  Copyright: (c) 1999 Alejandro Aguilar Sierra
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+#include FORMS_H_LOCATION
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "math_iter.h"
+#include "math_root.h"
+
+MathRootInset::MathRootInset(short st): MathSqrtInset(st)
+{
+    idx = 1;
+    uroot = new MathParInset(LM_ST_TEXT); 
+}
+
+
+MathRootInset::~MathRootInset() 
+{
+    delete uroot;
+}
+
+
+MathedInset *MathRootInset::Clone()
+{
+   MathRootInset* p = new MathRootInset(GetStyle());
+   MathedIter it(array), itr(uroot->GetData());
+   p->SetData(it.Copy());
+   p->setArgumentIdx(0);
+   p->SetData(itr.Copy());
+
+   return p;
+}
+
+
+void MathRootInset::SetData(LyxArrayBase *d)
+{
+   if (idx==1)
+     MathParInset::SetData(d);
+   else {
+      uroot->SetData(d);
+   }
+}
+
+
+bool MathRootInset::setArgumentIdx(int i)
+{
+   if (i==0 || i==1) {
+       idx = i;
+       return true;
+   } else
+      return false;
+}
+
+
+void MathRootInset::GetXY(int& x, int& y) const
+{
+   if (idx==1)
+     MathParInset::GetXY(x, y);
+   else
+     uroot->GetXY(x, y);
+}
+
+LyxArrayBase *MathRootInset::GetData()
+{
+   if (idx==1)
+     return array;
+   else
+     return uroot->GetData();
+}
+
+
+bool MathRootInset::Inside(int x, int y)
+{
+    return (uroot->Inside(x, y) || MathSqrtInset::Inside(x, y));
+}
+
+
+void MathRootInset::Metrics()
+{
+    int idxp = idx;
+
+    idx = 1;
+    MathSqrtInset::Metrics();
+    uroot->Metrics();
+    wroot = uroot->Width();
+    dh = Height()/2;
+    width += wroot;
+    //    if (uroot->Ascent() > dh) 
+    if (uroot->Height() > dh) 
+      ascent += uroot->Height() - dh;
+    dh -= descent - uroot->Descent();
+    idx = idxp;
+}
+
+
+void MathRootInset::Draw(int x, int y)
+{
+    int idxp = idx;
+
+    idx = 1;
+    uroot->Draw(x, y - dh);
+    MathSqrtInset::Draw(x+wroot, y);
+    XFlush(fl_display);
+    idx = idxp;
+}
+
+
+void MathRootInset::SetStyle(short st)
+{
+    MathSqrtInset::SetStyle(st);
+    
+    uroot->SetStyle((size<LM_ST_SCRIPTSCRIPT) ? size+1: size);
+}
+
+
+void MathRootInset::SetFocus(int x, int)
+{  
+    idx = (x > xo + wroot) ? 1: 0;
+}
+
+
+void MathRootInset::Write(FILE *outf)
+{ 
+   LString output;
+   MathRootInset::Write(output);  
+   fprintf(outf, "%s", output.c_str());
+}
+
+
+void MathRootInset::Write(LString &outf)
+{ 
+   outf += '\\';
+   outf += name;
+   outf += '[';
+   uroot->Write(outf);  
+   outf += "]{";
+   MathParInset::Write(outf);
+   outf += '}';
+}
diff --git a/src/mathed/math_root.h b/src/mathed/math_root.h
new file mode 100644 (file)
index 0000000..3f79655
--- /dev/null
@@ -0,0 +1,77 @@
+// -*- C++ -*-
+/*
+ *  File:        math_root.h
+ *  Purpose:     Declaration of the root object 
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1999
+ *  Description: Root math object
+ *
+ *  Copyright: (c) 1999 Alejandro Aguilar Sierra
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#ifndef __MATH_ROOT__
+#define __MATH_ROOT__
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <stdio.h>
+#include "math_defs.h"
+#include "math_inset.h"
+#include "symbol_def.h"
+#include "LString.h"
+
+
+///
+class MathRootInset: public MathSqrtInset {
+ public:
+    ///
+    MathRootInset(short st=LM_ST_TEXT);
+    ///
+    //    MathRootInset(MathSqrtInset &);
+    ///
+    ~MathRootInset();
+    ///
+    MathedInset *Clone();
+    ///
+    void Draw(int x, int baseline);
+    ///
+    void Write(FILE *file);
+    ///
+    void Write(LString &file);
+    ///
+    void Metrics();
+    ///
+    bool Inside(int, int);
+    ///
+    void SetFocus(int,int);
+    ///
+    void SetData(LyxArrayBase*);
+    ///
+    void GetXY(int& x, int& y) const;
+    ///
+    LyxArrayBase * GetData();
+    ///
+    bool setArgumentIdx(int i);
+    ///
+    int  getArgumentIdx() { return idx; }
+    ///
+    int  getMaxArgumentIdx() { return 1; }
+    ///
+    void  SetStyle(short);
+
+ protected:
+    ///
+    int idx;
+    ///
+    MathParInset *uroot;
+    ///
+    int wroot, dh;
+};
+
+
+#endif
diff --git a/src/mathed/math_symbols.C b/src/mathed/math_symbols.C
new file mode 100644 (file)
index 0000000..4457fc2
--- /dev/null
@@ -0,0 +1,544 @@
+/*
+ *  File:        math_symbols.C
+ *  Purpose:     User interface to math symbols
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx>
+ *  Created:     November 1995
+ *  Version:     0.8 28/03/96
+ *  Description: Provides a GUI to introduce mathematical
+ *               symbols in lyx.
+ *
+ *  Dependencies: Xlib, XForms, Lyx
+ *
+ *  Copyright: (c) 1995, 1996, Alejandro Aguilar Sierra 
+ *
+ *   You are free to use and modify it under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+#include XPM_H_LOCATION
+
+#ifdef __GNUG__
+#pragma implementation "math_panel.h"
+#endif
+
+#include "lyx_main.h"
+#include "buffer.h"
+#include "BufferView.h"
+#include "minibuffer.h"
+#include "lyxrc.h"
+#include "lyxlib.h"
+#include "LyXView.h"
+#include "error.h"
+
+#include "formula.h"
+
+#include "math_panel.h"                 
+#include "math_parser.h"
+
+//     $Id: math_symbols.C,v 1.1 1999/09/27 18:44:40 larsbj Exp $      
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: math_symbols.C,v 1.1 1999/09/27 18:44:40 larsbj Exp $";
+#endif /* lint */
+
+extern void SmallUpdate(signed char);
+extern void BeforeChange();
+extern void Update(signed char);
+extern int UnlockInset(UpdatableInset*);
+extern short greek_kb_flag;
+extern MiniBuffer *minibuffer;
+
+extern BufferView *current_view;
+
+/* Bitmaps */
+#include "greek.xbm"
+#include "arrows.xbm"
+#include "brel.xbm"
+#include "bop.xbm"
+#include "misc.xbm"           
+#include "varsz.xbm"           
+#include "dots.xbm"
+
+/* Latex code for those bitmaps */
+static char const *latex_greek[] =  {
+   "Gamma", "Delta", "Theta", "Lambda", "Xi", "Pi",
+   "Sigma", "Upsilon", "Phi", "Psi", "Omega",
+   "alpha", "beta", "gamma", "delta", "epsilon", "varepsilon", "zeta",
+   "eta", "theta", "vartheta", "iota", "kappa", "lambda", "mu",
+   "nu", "xi", "pi", "varpi", "rho", "sigma", "varsigma",
+   "tau", "upsilon", "phi", "varphi", "chi", "psi", "omega", ""
+};
+
+static char const *latex_brel[] = {
+  "leq", "geq", "equiv", "models", 
+  "prec", "succ", "sim", "perp", 
+  "preceq", "succeq", "simeq", "mid", 
+  "ll", "gg", "asymp", "parallel", 
+  "subset", "supset", "approx", "smile", 
+  "subseteq", "supseteq", "cong", "frown", 
+  "sqsubseteq", "sqsupseteq", "doteq", "neq", 
+  "in", "ni", "propto", "notin", 
+  "vdash", "dashv", "bowtie", ""
+};
+
+static char const* latex_arrow[] = {
+  "downarrow", "leftarrow", "Downarrow", "Leftarrow", 
+  "hookleftarrow", "rightarrow", "uparrow", "Rightarrow", "Uparrow",
+  "hookrightarrow","updownarrow", "Leftrightarrow", "leftharpoonup", 
+  "rightharpoonup", "rightleftharpoons", "leftrightarrow", "Updownarrow", 
+  "leftharpoondown", "rightharpoondown", "mapsto",
+  "Longleftarrow", "Longrightarrow", "Longleftrightarrow", 
+  "longleftrightarrow", "longleftarrow", "longrightarrow", "longmapsto",
+  "nwarrow", "nearrow", "swarrow", "searrow",  "",
+};
+
+char const* latex_varsz[] = {
+"sum", "int", "oint", 
+"prod", "coprod", "bigsqcup", 
+"bigotimes", "bigodot", "bigoplus", 
+"bigcap", "bigcup", "biguplus", 
+"bigvee", "bigwedge", ""
+};
+
+static char const* latex_bop[] = {   
+  "pm", "cap", "diamond", "oplus", 
+  "mp", "cup", "bigtriangleup", "ominus", 
+  "times", "uplus", "bigtriangledown", "otimes", 
+  "div", "sqcap", "triangleright", "oslash", 
+  "cdot", "sqcup", "triangleleft", "odot", 
+  "star", "vee", "amalg", "bigcirc", 
+  "setminus", "wedge", "dagger", "circ", 
+  "bullet", "wr", "ddagger", ""
+};
+
+static char const* latex_misc[] = {
+  "nabla", "partial", "infty", "prime", "ell", 
+  "emptyset", "exists", "forall", "imath",  "jmath",
+  "Re", "Im", "aleph", "wp", "hbar", 
+  "angle", "top", "bot", "Vert", "neg", 
+  "flat", "natural", "sharp", "surd", "triangle", 
+  "diamondsuit", "heartsuit", "clubsuit", "spadesuit", "" 
+};
+
+static char const* latex_dots[] = { 
+   "ldots", "cdots", "vdots", "ddots"
+};
+
+static signed char latin2greek[] =  {
+  0, 1, 25, 3, 4, 23, 2, 7, 10, 24, 11, 12, 13, 14, -1, 16, 8, 18,
+  19, 21, 22, 17, 27, 15, 26, 6
+};
+static signed char Latin2Greek[] =  {
+ -1, -1, -1, 1, -1, 8, 0, -1, -1, -1, -1, 3, -1, -1, -1,
+ 5, 2, -1, 6, -1, 7, -1, 10, 4, 9, -1
+}; 
+
+extern char** mathed_get_pixmap_from_icon(int d);
+static void math_cb(FL_OBJECT*, long);
+static char** pixmapFromBitmapData(char const *, int, int);
+void math_insert_symbol(char const* s);
+Bool math_insert_greek(char const c);
+
+BitmapMenu *BitmapMenu::active = NULL;
+
+BitmapMenu::BitmapMenu(int n,  FL_OBJECT* bt, BitmapMenu* prevx): nb(n)  {
+   w = h = 0;
+   form = 0;
+   i = 0;
+   ww = 2*FL_abs(FL_BOUND_WIDTH);
+   x = y = ww;
+   y += 8;
+   bitmap = new FL_OBJECTP[nb];
+   button = bt;
+   button->u_vdata = this;
+   prev = prevx;
+   next = NULL;
+   if (prev)
+     prev->next = this;
+}
+
+BitmapMenu::~BitmapMenu() {
+ if (next) delete next;
+ if (form->visible) Hide();
+ fl_free_form(form);  
+ delete[] bitmap;
+}
+
+void BitmapMenu::Hide()  {
+   fl_hide_form(form);
+   fl_set_button(button, 0);
+   active = NULL;
+}
+
+void BitmapMenu::Show()  {
+   if (active)
+     active->Hide();
+   active = this;
+   //   int x = button->form->x + button->x, y = button->form->y + button->y;
+   //   fl_set_form_position(form, x, y + button->h);
+   fl_set_button(button, 1);
+   fl_show_form(form, FL_PLACE_MOUSE, FL_NOBORDER, "");
+}
+
+FL_OBJECT*
+BitmapMenu::AddBitmap(int id, int nx, int ny, int bw, int bh, char* data, Bool vert)
+{
+   if (i>=nb)
+     return NULL;
+   int wx=bw+ww/2, wy=bh+ww/2;
+   wx += (wx % nx);
+   wy += (wy % ny); 
+   FL_OBJECT *obj = fl_create_bmtable(1, x, y, wx, wy, "");   
+   fl_set_object_callback(obj, math_cb, id);
+   fl_set_object_lcol(obj, FL_BLUE);    
+   fl_set_object_boxtype(obj, FL_UP_BOX);   
+   fl_set_bmtable_data(obj, nx, ny, bw, bh, data);
+   if (vert) { 
+      y += wy + 8;
+      h = Maximum(y, h);
+      w = Maximum(x + wx + ww, w);
+   } else  {
+      x += wx + 8;
+      w = Maximum(x, w);
+      h = Maximum(y + wy + ww, h);
+   }
+   bitmap[i++] = obj;
+   return obj;
+}
+
+void BitmapMenu::Create()
+{
+   if (i<nb)  {
+      fprintf(stderr, "Error: Bitmaps not created!");
+      return;
+   }
+   form = fl_bgn_form(FL_UP_BOX, w, h);   
+   for (i=0; i<nb; i++) {
+      fl_add_object(form, bitmap[i]);
+      bitmap[i]->u_vdata = this;
+   }
+   fl_end_form();
+   fl_register_raw_callback(form, KeyPressMask, peek_event);
+}
+
+int BitmapMenu::GetIndex(FL_OBJECT* ob)
+{
+   if (active==this) {
+      int k = 0;
+      for (i=0; i<nb; i++) {
+        if (bitmap[i]==ob) 
+          return k+fl_get_bmtable(ob);
+        k += fl_get_bmtable_maxitems(bitmap[i]);
+      }
+   }
+   return -1;
+}
+
+int peek_event(FL_FORM * /*form*/, void *xev)
+{
+   if (BitmapMenu::active==NULL)
+     return 0;
+  
+   if(((XEvent *)xev)->type == ButtonPress)
+   {
+        BitmapMenu::active->Hide();
+        return 1;
+   }
+   if(((XEvent *)xev)->type == KeyPress)
+   {
+      char c[5];
+      KeySym keysym;
+      XLookupString(&((XEvent *)xev)->xkey, &c[0], 5, &keysym, NULL);
+      if (keysym==XK_Left) 
+       BitmapMenu::active->Prev(); else
+      if (keysym==XK_Right) 
+       BitmapMenu::active->Next(); 
+      else 
+       BitmapMenu::active->Hide();
+      return 1;
+   }
+   return 0;  
+}
+
+static void math_cb(FL_OBJECT* ob, long data)
+{
+   BitmapMenu* menu = (BitmapMenu*)ob->u_vdata;
+   int i = menu->GetIndex(ob);   
+   char const *s = 0;
+
+//   fprintf(stderr, "data[%d]", data);     
+   if (i<0) return;
+   switch (data)  {
+    case MM_GREEK: 
+      s = latex_greek[i]; 
+      break;
+    case MM_ARROW: 
+      s = latex_arrow[i]; 
+      break;  
+    case MM_BRELATS: 
+      s = latex_brel[i]; 
+      break;  
+    case MM_BOP: 
+      s = latex_bop[i]; 
+      break;  
+    case MM_VARSIZE: 
+      s = latex_varsz[i];  
+      break;
+    case MM_MISC: 
+      s = latex_misc[i];  
+      break;
+    case MM_DOTS: 
+//      fprintf(stderr, "dots[%s %d]", latex_dots[i], i);
+      s = latex_dots[i-29];  
+      break;
+   }
+  
+   if (s)  {
+      if (current_view->available() && lyxrc->display_shortcuts) {
+         minibuffer->Set("Inserting symbol ", s);
+      }
+      current_view->getOwner()->getLyXFunc()->Dispatch(LFUN_INSERT_MATH, s);
+   }      
+   if (menu)  
+     menu->Hide(); 
+}
+
+char** get_pixmap_from_symbol(char const *arg, int wx, int hx)
+{
+   char** data=NULL;                       
+   latexkeys *l = in_word_set (arg, strlen(arg));
+   if (!l) 
+    return NULL;
+    
+   switch (l->token) {
+    case LM_TK_FRAC:
+      data = mathed_get_pixmap_from_icon(MM_FRAC);
+      break;
+    case LM_TK_SQRT: 
+      data = mathed_get_pixmap_from_icon(MM_SQRT);
+      break;
+    case LM_TK_BIGSYM:
+    case LM_TK_SYM:
+       // I have to use directly the bitmap data since the
+       // bitmap tables are not yet created when this
+       // function is called.
+       data = pixmapFromBitmapData(arg, wx, hx);
+       break;
+   }
+   
+   return data;
+}
+
+Bool math_insert_greek(char const c)
+{
+   int i;
+   char const *s=NULL;
+   
+   if ('A'<=c && c<='Z') {
+      if ((i=Latin2Greek[c - 'A'])>=0)
+       s = latex_greek[i];
+   }   
+   if ('a'<=c && c<='z') {
+      if ((i=latin2greek[c - 'a'])>=0)
+       s = latex_greek[i+11];
+   }
+   if (s) {
+      math_insert_symbol(s);
+      if (greek_kb_flag<2) {
+        greek_kb_flag = 0;
+        UnlockInset(current_view->currentBuffer()->the_locking_inset);
+      }
+      return True;
+   } else
+     return False; 
+}
+
+void math_insert_symbol(char const* s)
+{
+   if (current_view->available())   {
+      if (!current_view->currentBuffer()->the_locking_inset) {
+        InsetFormula* new_inset = new InsetFormula();
+        BeforeChange();
+        current_view->currentBuffer()->insertInset(new_inset);
+//      Update(1);//BUG
+        new_inset->Edit(0,0);
+        new_inset->InsertSymbol(s);
+      } else
+       if (current_view->currentBuffer()->the_locking_inset->LyxCode()==Inset::MATH_CODE)
+         ((InsetFormula*)current_view->currentBuffer()->the_locking_inset)->InsertSymbol(s);
+        else 
+         fprintf(stderr, "Math error: attempt to write on a wrong class of inset.\n");
+   }
+}
+
+BitmapMenu* sym_menu=0;
+
+void  create_symbol_menues(FD_panel *symb_form)
+{
+   FL_OBJECT* obj; 
+   BitmapMenu* menu;
+   
+   sym_menu = menu = new BitmapMenu(2, symb_form->greek);
+   obj = menu->AddBitmap(MM_GREEK, 6, 2, Greek_width, Greek_height, 
+                          Greek_bits);         
+   fl_set_bmtable_maxitems(obj, 11);
+   obj = menu->AddBitmap(MM_GREEK, 7, 4, greek_width, greek_height,
+                          greek_bits); 
+   menu->Create();
+   
+   menu = new BitmapMenu(1, symb_form->boperator, menu);
+   obj = menu->AddBitmap(MM_BOP, 4, 8, bop_width, bop_height,
+                         bop_bits);      
+   fl_set_bmtable_maxitems(obj, 31);
+   menu->Create();   
+      
+   menu = new BitmapMenu(1, symb_form->brelats, menu);
+   obj = menu->AddBitmap(MM_BRELATS, 4, 9, brel_width, brel_height, 
+                        brel_bits);        
+   fl_set_bmtable_maxitems(obj, 35);       
+   menu->Create();
+   
+   menu = new BitmapMenu(3, symb_form->arrow, menu);
+   obj = menu->AddBitmap(MM_ARROW, 5, 4, arrow_width, arrow_height,
+                        arrow_bits);
+   obj = menu->AddBitmap(MM_ARROW, 2, 4, larrow_width, larrow_height, 
+                        larrow_bits, False);          
+   fl_set_bmtable_maxitems(obj, 7);
+   obj = menu->AddBitmap(MM_ARROW, 2, 2, darrow_width, darrow_height, 
+                        darrow_bits);
+   menu->Create(); 
+     
+   menu = new BitmapMenu(1, symb_form->varsize, menu);
+    obj = menu->AddBitmap(MM_VARSIZE, 3, 5, varsz_width, varsz_height, 
+                        varsz_bits);         
+   fl_set_bmtable_maxitems(obj, 14);
+   menu->Create();
+      
+   menu = new BitmapMenu(2, symb_form->misc, menu);
+     obj = menu->AddBitmap(MM_MISC, 5, 6, misc_width, misc_height,
+                          misc_bits);         
+     fl_set_bmtable_maxitems(obj, 29);
+     obj = menu->AddBitmap(MM_DOTS, 4, 1, dots_width, dots_height, 
+                          dots_bits);         
+   menu->Create();
+}
+
+static
+char** pixmapFromBitmapData(char const *s, int wx, int hx)
+{
+    int i, id;
+    char** data=0;
+    
+    id=-1;
+    
+    for (i=0; i<6; i++) {
+       char const **latex_str = 0;
+       switch (i) {
+        case 0: latex_str = latex_greek; break;
+        case 1: latex_str = latex_bop; break;
+        case 2: latex_str = latex_brel; break;
+        case 3: latex_str = latex_arrow; break;
+        case 4: latex_str = latex_varsz; break;
+        case 5: latex_str = latex_misc; break;
+       }
+       
+       for (int k = 0; latex_str[k][0]>' '; k++) {
+           if (strcmp(latex_str[k], s)==0) {
+               id = k;
+               break;
+           }
+       }
+       if (id>=0) break;
+    }
+    if (i<6 && id>=0) {
+       char *bdata = 0;
+       int w = 0, h = 0, dw = 0, dh = 0;
+
+       lyxerr.debug(LString("Imando ") + int(i) + ", " + int(id), Error::MATHED);
+       switch (i) {
+        case 0: 
+           if (id<=10) {
+               w = Greek_width;
+               h = Greek_height;
+               bdata = Greek_bits;
+               dw = 6;  dh = 2;
+           } else {
+               w = greek_width;
+               h = greek_height;
+               bdata = greek_bits;
+               dw = 7;  dh = 4;
+               id -= 11;
+           }
+           break;
+        case 1:
+           w = bop_width;
+           h = bop_height;
+           bdata = bop_bits;
+           dw = 4;  dh = 8;
+           break;
+        case 2:
+           w = brel_width;
+           h = brel_height;
+           bdata = brel_bits;
+           dw = 4;  dh = 9;
+           break;
+        case 3:
+           if (id<20) {                
+               w = arrow_width;
+               h = arrow_height;
+               bdata = arrow_bits;
+               dw = 5;  dh = 4;
+           } else if (id>28) {         
+               w = darrow_width;
+               h = darrow_height;
+               bdata = darrow_bits;
+               dw = 2;  dh = 2;
+               id -= 29;
+           } else {            
+               w = larrow_width;
+               h = larrow_height;
+               bdata = larrow_bits;
+               dw = 2;  dh = 4;
+               id -= 20;
+           }
+           break;
+        case 4:
+           w = varsz_width;
+           h = varsz_height;
+           bdata = varsz_bits;
+           dw = 3;  dh = 5;
+           break;
+        case 5:
+           w = misc_width;
+           h = misc_height;
+           bdata = misc_bits;
+           dw = 5;  dh = 6;
+           break;
+       }
+       int ww = w/dw, hh = h/dh, x, y;
+   
+       XImage *xima = XCreateImage(fl_display, NULL, 1, XYBitmap, 0, 
+                                   bdata, w, h, 8, 0);
+       xima->byte_order = LSBFirst;
+       xima->bitmap_bit_order = LSBFirst;
+       x = (id % dw)*ww;
+       y = (id/dw)*hh;
+       if (ww>wx) ww = wx;
+       if (hh>hx) hh = hx;
+       XImage *sbima = XSubImage(xima, x, y, ww, hh);
+       XpmCreateDataFromImage(fl_display, &data, sbima, sbima, 0);
+       
+       // Dirty hack to get blue symbols quickly
+       char *sx = strstr(data[2], "FFFFFFFF");
+       if (sx) {
+           for (int k=0; k<8; k++) sx[k] = '0';
+       }
+
+//     XDestroyImage(xima);
+    }
+
+    return data;
+}
+
diff --git a/src/mathed/math_utils.C b/src/mathed/math_utils.C
new file mode 100644 (file)
index 0000000..a2a25b6
--- /dev/null
@@ -0,0 +1,87 @@
+/* 
+ *  File:        math_utils.C
+ *  Purpose:     X independent general mathed routines
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     August 1996
+ *  
+ *  Copyright: (c) 1996, 1997 Alejandro Aguilar Sierra
+ *
+ *  License: GNU GPL version 2 or later
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include "math_defs.h"
+#include "symbol_def.h"
+
+
+// This table includes all binary operators and relations
+struct binary_op_pair { short id, isrel; } binary_op_table[] = {
+      { LM_leq, LMB_RELATION }, { LM_geq, LMB_RELATION }, 
+      { LM_equiv, LMB_RELATION }, { LM_models, LMB_RELATION }, 
+      { LM_prec, LMB_RELATION }, { LM_succ, LMB_RELATION }, 
+      { LM_sim, LMB_RELATION }, { LM_perp, LMB_RELATION }, 
+      { LM_preceq, LMB_RELATION }, { LM_succeq, LMB_RELATION }, 
+      { LM_simeq, LMB_RELATION }, { LM_mid, LMB_RELATION }, 
+      { LM_ll, LMB_RELATION }, { LM_gg, LMB_RELATION }, 
+      { LM_asymp, LMB_RELATION }, { LM_parallel, LMB_RELATION }, 
+      { LM_subset, LMB_RELATION }, { LM_supset, LMB_RELATION }, 
+      { LM_approx, LMB_RELATION }, { LM_smile, LMB_RELATION }, 
+      { LM_subseteq, LMB_RELATION }, { LM_supseteq, LMB_RELATION }, 
+      { LM_cong, LMB_RELATION }, { LM_frown, LMB_RELATION }, 
+      { LM_sqsubseteq, LMB_RELATION }, { LM_sqsupseteq, LMB_RELATION }, 
+      { LM_doteq, LMB_RELATION }, { LM_neq, LMB_RELATION }, 
+      { LM_in, LMB_RELATION }, { LM_ni, LMB_RELATION }, 
+      { LM_propto, LMB_RELATION }, { LM_notin, LMB_RELATION }, 
+      { LM_vdash, LMB_RELATION }, { LM_dashv, LMB_RELATION }, 
+      { LM_bowtie, LMB_RELATION },
+      { LM_pm, LMB_OPERATOR }, { LM_cap, LMB_OPERATOR }, 
+      { LM_diamond, LMB_OPERATOR }, { LM_oplus, LMB_OPERATOR },
+      { LM_mp, LMB_OPERATOR }, { LM_cup, LMB_OPERATOR }, 
+      { LM_bigtriangleup, LMB_OPERATOR }, { LM_ominus, LMB_OPERATOR },
+      { LM_times, LMB_OPERATOR }, { LM_uplus, LMB_OPERATOR }, 
+      { LM_bigtriangledown, LMB_OPERATOR }, { LM_otimes, LMB_OPERATOR },
+      { LM_div, LMB_OPERATOR }, { LM_sqcap, LMB_OPERATOR }, 
+      { LM_triangleright, LMB_OPERATOR }, { LM_oslash, LMB_OPERATOR },
+      { LM_cdot, LMB_OPERATOR }, { LM_sqcup, LMB_OPERATOR }, 
+      { LM_triangleleft, LMB_OPERATOR }, { LM_odot, LMB_OPERATOR },
+      { LM_star, LMB_OPERATOR }, { LM_vee, LMB_OPERATOR }, 
+      { LM_amalg, LMB_OPERATOR }, { LM_bigcirc, LMB_OPERATOR },
+      { LM_setminus, LMB_OPERATOR }, { LM_wedge, LMB_OPERATOR }, 
+      { LM_dagger, LMB_OPERATOR }, { LM_circ, LMB_OPERATOR },
+      { LM_bullet, LMB_OPERATOR }, { LM_wr, LMB_OPERATOR }, 
+      { LM_ddagger, LMB_OPERATOR }
+};
+
+static int compara(const void *a, const void *b)
+{
+    int i = ((binary_op_pair const *)a)->id, j = ((binary_op_pair const*)b)->id;
+    return i - j;
+}
+
+int MathedLookupBOP(short id)
+{
+    static int bopCount = sizeof(binary_op_table) / sizeof(binary_op_pair);
+    static bool issorted = false;
+
+    if (!issorted) { 
+       qsort(binary_op_table, bopCount, sizeof(binary_op_pair), compara);
+       issorted = true;
+    }
+    
+   int result=0, m, k, l= 0, r = bopCount;
+  
+   while (l < r) {
+      m = (l+r)/2;
+      k = binary_op_table[m].id - id;
+      if (k==0) {
+        result = binary_op_table[m].isrel;
+        break;
+      } else
+       if (k<0) l = m+1; else r = m;
+   }
+
+   return result;
+}
+
diff --git a/src/mathed/math_write.C b/src/mathed/math_write.C
new file mode 100644 (file)
index 0000000..10818a1
--- /dev/null
@@ -0,0 +1,471 @@
+/*
+ *  File:        math_write.h
+ *  Purpose:     Write math paragraphs in LaTeX
+ *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
+ *  Created:     January 1996
+ *  Description: 
+ *
+ *  Dependencies: Xlib, XForms
+ *
+ *  Copyright: (c) 1996, 1997 Alejandro Aguilar Sierra
+ *
+ *   Version: 0.8beta, Mathed & Lyx project.
+ *
+ *   You are free to use and modify this code under the terms of
+ *   the GNU General Public Licence version 2 or later.
+ */
+
+#include <config.h>
+#include "LString.h"
+#include "math_inset.h"
+#include "math_iter.h"
+#include "math_parser.h"
+
+
+extern char const *latex_mathenv[];
+extern char *latex_mathspace[];
+
+// quite a hack i know. Should be done with return values...
+static int number_of_newlines;
+
+char const *math_font_name[] = {
+   "mathrm",
+   "mathcal",
+   "mathbf",
+   "mathsf",
+   "mathtt",
+   "mathit",
+   "textrm"
+};
+
+
+void
+MathSpaceInset::Write(FILE *outf)
+{ 
+   if (space>=0 && space<6) {
+       LString output;
+       MathSpaceInset::Write(output);
+       fprintf(outf, "%s", output.c_str());
+   }
+}
+
+void
+MathSpaceInset::Write(LString &outf)
+{ 
+   if (space>=0 && space<6) {
+       outf += '\\';
+       outf += latex_mathspace[space];
+       outf += ' ';
+   }
+}
+
+
+void
+MathDotsInset::Write(FILE *outf)
+{
+   LString output;
+   MathDotsInset::Write(output);
+   fprintf(outf, "%s", output.c_str());
+}   
+
+void
+MathDotsInset::Write(LString &outf)
+{
+   outf += '\\';
+   outf += name;
+   outf += ' ';
+}   
+
+
+void MathSqrtInset::Write(FILE *outf)
+{ 
+   LString output;
+   MathSqrtInset::Write(output);  
+   fprintf(outf, "%s", output.c_str());
+}
+
+void MathSqrtInset::Write(LString &outf)
+{ 
+   outf += '\\';
+   outf += name;
+   outf += '{';
+   MathParInset::Write(outf);  
+   outf += '}';
+}
+
+
+void MathDelimInset::Write(FILE *outf)
+{ 
+    LString output;
+    MathDelimInset::Write(output);
+    fprintf(outf, "%s", output.c_str());
+}
+
+void MathDelimInset::Write(LString &outf)
+{ 
+    latexkeys* l = (left != '|') ? lm_get_key_by_id(left, LM_TK_SYM): 0;
+    latexkeys* r = (right != '|') ? lm_get_key_by_id(right, LM_TK_SYM): 0;
+    outf += "\\left";
+    if (l) {
+        outf += '\\';
+       outf += l->name;
+       outf += ' ';
+    } else {
+        if (left=='{' || left=='}') {
+           outf += '\\';
+           outf += (char) left;
+           outf += ' ';
+        } else {
+           outf += (char) left;
+           outf += ' ';
+        }
+    }
+   MathParInset::Write(outf);  
+   outf += "\\right";
+   if (r) {
+       outf += '\\';
+       outf += r->name;
+       outf += ' ';
+   } else {
+       if (right=='{' || right=='}') {
+          outf += '\\';
+          outf += (char) right;
+          outf += ' ';
+      } else {
+          outf += (char) right;
+          outf += ' ';
+      }
+   }        
+}
+
+
+void MathDecorationInset::Write(FILE *outf)
+{
+   LString output;
+   MathDecorationInset::Write(output);
+   fprintf(outf, "%s", output.c_str());
+}
+
+void MathDecorationInset::Write(LString &outf)
+{ 
+   latexkeys* l = lm_get_key_by_id(deco, LM_TK_WIDE);
+   outf += '\\';
+   outf += l->name;
+   outf += '{';
+   MathParInset::Write(outf);  
+   outf += '}';
+}
+
+
+void MathAccentInset::Write(FILE *outf)
+{ 
+    LString output;
+    MathAccentInset::Write(output);
+    fprintf(outf, "%s", output.c_str());
+}
+
+void MathAccentInset::Write(LString &outf)
+{ 
+    latexkeys* l = lm_get_key_by_id(code, LM_TK_ACCENT);
+    outf += '\\';
+    outf += l->name;
+    if (code!=LM_not)
+      outf += '{';
+    else
+      outf += ' ';
+
+    if (inset) {
+      inset->Write(outf);
+    } else {
+      if (fn>=LM_TC_RM && fn<=LM_TC_TEXTRM) {
+        outf += '\\';
+        outf += math_font_name[fn-LM_TC_RM];
+        outf += '{';
+      }
+      if (MathIsSymbol(fn)) {
+          latexkeys *l = lm_get_key_by_id(c, LM_TK_SYM);
+          if (l) {
+           outf += '\\';
+           outf += l->name;
+           outf += ' ';
+          }
+      } else
+        outf += (char) c;
+
+      if (fn>=LM_TC_RM && fn<=LM_TC_TEXTRM)
+        outf += '}';
+    }
+
+    if (code!=LM_not)
+      outf += '}';
+}
+
+
+void MathBigopInset::Write(FILE *outf)
+{ 
+   LString output;
+   MathBigopInset::Write(output);
+   fprintf(outf, "%s", output.c_str());
+}
+
+void MathBigopInset::Write(LString &outf)
+{ 
+    bool limp = GetLimits();
+    
+    outf += '\\';
+    outf += name;
+    
+    if (limp && !(sym!=LM_int && sym!=LM_oint && (GetStyle()==LM_ST_DISPLAY)))
+      outf += "\\limits ";
+    else 
+    if (!limp && (sym!=LM_int && sym!=LM_oint && (GetStyle()==LM_ST_DISPLAY)))
+       outf += "\\nolimits ";
+    else 
+      outf += ' ';
+}
+
+
+void MathFracInset::Write(FILE *outf)
+{ 
+   LString output;
+   MathFracInset::Write(output);  
+   fprintf(outf, "%s", output.c_str());
+}
+
+void MathFracInset::Write(LString &outf)
+{ 
+   outf += '\\';
+   outf += name;
+   outf += '{';
+   MathParInset::Write(outf);  
+   outf += "}{";
+   den->Write(outf);  
+   outf += '}';
+}
+
+
+void MathParInset::Write(FILE *outf)
+{
+   if (!array) return;
+   LString output;
+   MathParInset::Write(output);
+   fprintf(outf, "%s", output.c_str());
+}
+
+
+void MathParInset::Write(LString &outf)
+{
+   if (!array) return;
+   int brace = 0;
+   latexkeys *l;
+   MathedIter data(array);
+   // hack
+   MathedRowSt const* crow = getRowSt();   
+   data.Reset();
+    
+   if (!Permit(LMPF_FIXED_SIZE)) { 
+       l = lm_get_key_by_id(size, LM_TK_STY);
+       if (l) {
+          outf += '\\';
+          outf += l->name;
+          outf += ' ';
+       }
+   }
+   while (data.OK()) {
+      byte cx = data.GetChar();
+      if (cx>=' ') {
+        int ls;
+        byte *s = data.GetString(ls);
+       
+        if (data.FCode()>=LM_TC_RM && data.FCode()<=LM_TC_TEXTRM) {
+            outf += '\\';
+            outf += math_font_name[data.FCode()-LM_TC_RM];
+            outf += '{';
+        }
+        while (ls>0) {
+           if (MathIsSymbol(data.FCode())) {
+               l = lm_get_key_by_id(*s,(data.FCode()==LM_TC_BSYM)?LM_TK_BIGSYM:LM_TK_SYM);
+              if (l) {
+                outf += '\\';
+                outf += l->name;
+                outf += ' ';
+              } else { 
+                fprintf(stderr, "Illegal symbol code[%u %d %d]", *s, ls, data.FCode());
+              }
+           } else {
+              // Is there a standard logical XOR?
+              if ((data.FCode()==LM_TC_TEX && *s!='{' && *s!='}') ||
+                  (data.FCode()==LM_TC_SPECIAL))
+                outf += '\\';
+              else {
+                 if (*s=='{') brace++;
+                 if (*s=='}') brace--;
+              }
+              if (*s=='}' && data.FCode()==LM_TC_TEX && brace<0) 
+                fprintf(stderr, "Math warning: Unexpected closing brace.\n");
+              else            
+                outf += (char) *s;
+           }
+           s++; ls--;
+        }
+        if (data.FCode()>=LM_TC_RM && data.FCode()<=LM_TC_TEXTRM)
+          outf += '}';
+      } else     
+      if (MathIsInset(cx)) {
+        MathedInset *p = data.GetInset();
+        if (cx==LM_TC_UP)
+          outf += "^{";
+        if (cx==LM_TC_DOWN)
+          outf += "_{";
+        p->Write(outf);
+        if (cx==LM_TC_UP || cx==LM_TC_DOWN)
+          outf += '}';
+        data.Next();
+      } else
+       switch(cx) {
+        case LM_TC_TAB:
+           {
+              outf += " & ";
+              data.Next();
+              break;
+           }
+        case LM_TC_CR:
+           {
+               if (crow) {
+                   if (!crow->isNumbered()) {  
+                       outf +="\\nonumber ";
+                   }
+                   if (crow->getLabel()) {
+                       outf += "\\label{";
+                       outf += crow->getLabel();
+                       outf += "} ";
+                   }
+                   crow = crow->getNext();
+               }
+              outf += "\\\\\n";
+              number_of_newlines++;
+              data.Next();
+              break;
+           }
+        default:
+          fprintf(stderr, "WMath Error: unrecognized code[%d]", cx);
+          return;
+       }     
+   }
+    
+    if (crow) {
+       if (!crow->isNumbered()) {
+           outf +="\\nonumber ";
+       }
+       if (crow->getLabel()) {
+           outf += "\\label{";
+           outf += crow->getLabel();
+           outf += "} ";
+       }
+    }
+   while (brace>0) {
+      outf += '}';
+      brace--;
+   }
+}
+
+
+void MathMatrixInset::Write(FILE *outf)
+{
+    LString output;
+    MathMatrixInset::Write(output);
+    fprintf(outf, "%s", output.c_str());
+}
+
+void MathMatrixInset::Write(LString &outf)
+{
+    if (GetType() == LM_OT_MATRIX){
+       outf += "\\begin{";
+       outf += name;
+       outf += '}';
+       if (v_align=='t' || v_align=='b') {
+           outf += '[';
+           outf += (char) v_align;
+           outf += ']';
+       }
+       outf += '{';
+       outf += h_align;
+       outf += "}\n";
+       number_of_newlines++;
+    }
+    MathParInset::Write(outf);
+    if (GetType() == LM_OT_MATRIX){
+       outf += "\n\\end{";
+       outf += name;
+       outf += '}';
+       number_of_newlines++;
+    }
+}
+
+
+void mathed_write(MathParInset* p,  FILE* outf, int* newlines,  char fragile, char const* label)
+{
+   LString output;
+   mathed_write(p, output, newlines, fragile, label);
+   fprintf(outf, "%s", output.c_str());
+}
+
+extern int tex_code_break_column;
+
+void mathed_write(MathParInset* p, LString& outf, int* newlines,
+                  char fragile, char const* label)
+{  
+   number_of_newlines = 0;
+   short mathed_env = p->GetType();
+
+   if (mathed_env==LM_EN_INTEXT) {
+     if (fragile) outf += "\\protect";
+     outf += "\\( "; // changed from " \\( " (Albrecht Dress)
+   } 
+   else {
+     if (! outf.suffixIs('\n')) {
+       // in batchmode we need to make sure
+       // a space before an equation doesn't
+       // make the LaTeX output different 
+       // compared to "Exported LaTeX"  ARRae
+       // Modified to work in a cleaner and hopefully more general way
+       // (JMarc)
+       outf += "\n";
+       number_of_newlines++;
+     }
+     if (mathed_env==LM_EN_DISPLAY){
+       outf += "\\[\n";
+     }
+     else {
+       outf += "\\begin{";
+       outf += latex_mathenv[mathed_env];
+       outf += "}\n";
+     }
+     number_of_newlines++;
+   }
+   
+   if (label && label[0]>' ' && mathed_env==LM_EN_EQUATION){
+     outf += "\\label{";
+     outf += label;
+     outf += "}\n";
+     number_of_newlines++;
+   }
+
+   p->Write(outf);
+   
+   if (mathed_env==LM_EN_INTEXT){
+     if (fragile) outf += "\\protect";
+     outf += " \\)";
+   }
+   else if (mathed_env==LM_EN_DISPLAY){
+     outf += "\\]\n";
+     number_of_newlines++;
+   }
+   else {
+     outf += "\n\\end{";
+     outf += latex_mathenv[mathed_env];
+     outf += "}\n";
+     number_of_newlines+=2;
+   }
+   *newlines = number_of_newlines;
+}
diff --git a/src/mathed/symbol_def.h b/src/mathed/symbol_def.h
new file mode 100644 (file)
index 0000000..f61b279
--- /dev/null
@@ -0,0 +1,157 @@
+// This file was created automatically. Don't change it!  [asierra18jan96]
+
+#ifndef __SYMBOL_DEF__
+#define __SYMBOL_DEF__ 
+
+// Symbols that do exist in X11 symbol font
+#define LM_Gamma 0x47
+#define LM_Delta 0x44
+#define LM_Theta 0x51
+#define LM_Lambda 0x4c
+#define LM_Xi 0x58
+#define LM_Pi 0x50
+#define LM_Sigma 0x53
+#define LM_Upsilon 0x55
+#define LM_Phi 0x46
+#define LM_Psi 0x59
+#define LM_Omega 0x57
+#define LM_alpha 0x61
+#define LM_beta 0x62
+#define LM_gamma 0x67
+#define LM_delta 0x64
+#define LM_epsilon 0x65
+#define LM_eta 0x68
+#define LM_theta 0x71
+#define LM_vartheta 0x4a
+#define LM_iota 0x69
+#define LM_kappa 0x6b
+#define LM_lambda 0x6c
+#define LM_mu 0x6d
+#define LM_nu 0x6e
+#define LM_xi 0x78
+#define LM_pi 0x70
+#define LM_varpi 0x76
+#define LM_rho 0x72
+#define LM_sigma 0x73
+#define LM_tau 0x74
+#define LM_varsigma 0x56
+#define LM_zeta 0x7a 
+#define LM_upsilon 0x75
+#define LM_phi 0x66
+#define LM_varphi 0x6a
+#define LM_chi 0x63
+#define LM_psi 0x79
+#define LM_omega 0x77
+#define LM_downarrow 0xaf
+#define LM_leftarrow 0xac
+#define LM_Downarrow 0xdf
+#define LM_Leftarrow 0xdc
+#define LM_rightarrow 0xae
+#define LM_uparrow 0xad
+#define LM_Rightarrow 0xde
+#define LM_Uparrow 0xdd
+#define LM_Leftrightarrow 0xdb
+#define LM_leftrightarrow 0xab
+#define LM_leq 0xa3
+#define LM_geq 0xb3
+#define LM_equiv 0xba
+#define LM_subset 0xcc
+#define LM_supset 0xc9
+#define LM_approx 0xbb
+#define LM_subseteq 0xcd
+#define LM_supseteq 0xca
+#define LM_cong 0x40
+#define LM_neq 0xb9
+#define LM_in 0xce
+#define LM_propto 0xb5
+#define LM_pm 0xb1
+#define LM_cap 0xc7
+#define LM_diamond 0xe0
+#define LM_oplus 0xc5
+#define LM_cup 0xc8
+#define LM_times 0xb4
+#define LM_otimes 0xc4
+#define LM_div 0xb8
+#define LM_oslash 0xc6
+#define LM_cdot 0xd7
+#define LM_wedge 0xd9
+#define LM_bullet 0xb7
+#define LM_sum 0xe5
+#define LM_int 0xf2
+#define LM_prod 0xd5
+#define LM_nabla 0xd1
+#define LM_partial 0xb6
+#define LM_infty 0xa5
+#define LM_prime 0xa2
+//#define LM_emptyset 0xc6
+#define LM_exists 0x24
+#define LM_forall 0x22
+#define LM_Re 0xc2
+#define LM_Im 0xc1
+#define LM_aleph 0xc0
+#define LM_wp 0xc3
+#define LM_bot 0x5e
+#define LM_neg 0xd8
+#define LM_sharp 0x23
+#define LM_surd 0xd6
+#define LM_diamondsuit 0xa8
+#define LM_heartsuit 0xa9
+#define LM_clubsuit 0xa7
+#define LM_spadesuit 0xaa
+#define LM_langle 0xe1
+#define LM_lceil 0xe9
+#define LM_lfloor 0xeb
+#define LM_rangle 0xf1
+#define LM_rceil 0xf9
+#define LM_rfloor 0xfb
+#define LM_mid 0x7c
+
+//#define LM_backslash '\\'
+  
+// Symbols that don't exist in X11 symbol font
+enum Math_Symbols_enum {
+  LM_NoFont = 256,
+  LM_varepsilon,  
+  LM_hookleftarrow,  LM_hookrightarrow,  LM_updownarrow,  LM_leftharpoonup,
+  LM_rightharpoonup,  LM_rightleftharpoons,  LM_Updownarrow,
+  LM_leftharpoondown,  LM_rightharpoondown,  LM_mapsto,  LM_Longleftarrow,
+  LM_Longrightarrow,  LM_Longleftrightarrow,  LM_longleftrightarrow,
+  LM_longleftarrow,  LM_longrightarrow,  LM_longmapsto,  LM_nwarrow,
+  LM_nearrow,  LM_swarrow,  LM_searrow,
+  LM_models,  LM_prec,  LM_succ,  LM_sim,  LM_perp,  LM_preceq,  LM_succeq,
+  LM_simeq,  LM_ll,  LM_gg,  LM_asymp,  LM_parallel,  LM_smile,
+  LM_frown,  LM_sqsubseteq,  LM_sqsupseteq,  LM_doteq,  LM_ni,  LM_notin,
+  LM_vdash,  LM_dashv,  LM_bowtie,
+  LM_mp,  LM_bigtriangleup,  LM_ominus,  LM_uplus,  LM_bigtriangledown,
+  LM_sqcap,  LM_triangleright,  LM_sqcup,  LM_triangleleft,  LM_odot,  LM_star,
+  LM_vee,  LM_amalg,  LM_bigcirc,  LM_setminus,  LM_dagger,  LM_circ,  LM_wr,
+  LM_ddagger,
+  LM_oint,  LM_coprod,  LM_bigsqcup,  LM_bigotimes,  LM_bigodot,  LM_bigoplus,
+  LM_bigcap,  LM_bigcup,  LM_biguplus,  LM_bigvee,  LM_bigwedge,
+  LM_ell,  LM_imath,  LM_jmath,  LM_hbar,  LM_angle,  LM_top,  LM_Vert,  LM_flat,
+  LM_natural,  LM_triangle,
+  LM_widehat,LM_widetilde, LM_underline, LM_overline, LM_underbrace, 
+  LM_overbrace, LM_overleftarrow, LM_overightarrow, 
+  LM_ldots, LM_cdots, LM_vdots, LM_ddots,            
+  LM_backslash, LM_emptyset,
+  LM_last_symbol
+};
+
+// Accents
+#define LM_acute '\''
+#define LM_grave  '`'
+#define LM_hat '^'
+#define LM_tilde '~'
+#define LM_dot  '.'
+#define LM_bar '-'
+
+enum Math_Accent_enum {
+  LM_ddot = LM_last_symbol,
+  LM_check, LM_vec, LM_breve, LM_not
+};
+
+#define LM_quad  4
+#define LM_qquad 5
+
+#endif
+
diff --git a/src/menus.C b/src/menus.C
new file mode 100644 (file)
index 0000000..904cbe6
--- /dev/null
@@ -0,0 +1,1624 @@
+/*
+ *  This file is part of
+ * ==================================================
+ *
+ *       LyX, The Document Processor
+ *
+ *       Copyright (C) 1995 Matthias Ettrich
+ *       Copyright (C) 1995-1998 The LyX Team.
+ *
+ * ==================================================
+ */
+
+/* This file contains all the menu and submenu declarations.
+   The call backs are in lyx_cb.C */
+
+/*
+ * REMEMBER:
+ * XFORMS can handle 10 (more with the new xforms, but not unlimited)
+ * popups at the same time
+ * so when you are finished looking at a pup free it (fl_freepup)
+ */
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "menus.h"
+#include "lyx_cb.h"
+#include "version.h"
+#include "lyxfont.h"
+#include "lyx_main.h"
+#include "lyxfunc.h"
+#include "spellchecker.h"
+#include "filetools.h"
+#include "LyXView.h"
+#include "lastfiles.h"
+#include "bufferlist.h"
+#include "lyx_gui_misc.h"
+#include "minibuffer.h"
+#include "lyxscreen.h"
+#include "intl.h"
+#include "error.h"
+#include "lyxrc.h"
+#include "lyxtext.h"
+#include "gettext.h"
+
+//     $Id: menus.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $     
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: menus.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+extern FD_form_screen *fd_form_screen;
+extern BufferList bufferlist;
+
+// I would really prefere to see most or all of these 'extern's disappear.
+// Their commands should be called through LyXFunc (IMO). (Lgb)
+
+extern void MenuLayoutSave();
+extern void ShowCredits();
+extern void ShowCopyright();
+extern void show_symbols_form(LyXFunc*);
+extern void BeforeChange();
+extern void ProhibitInput();
+extern void AllowInput();
+extern void OpenStuff();
+extern void ToggleFloat();
+extern void AllFloats(char flag, char figmar);
+extern void LaTeXOptions();
+
+Menus::Menus(LyXView *view,int air)
+       : _view(view)
+{      
+       create_menus(air);
+       // deactivate the menu accelerators
+       fl_set_object_shortcut(menu_file, "", 1);
+       fl_set_object_shortcut(menu_file2, "", 1);
+       fl_set_object_shortcut(menu_edit, "", 1);
+       fl_set_object_shortcut(menu_layout, "", 1);
+       fl_set_object_shortcut(menu_math, "", 1);
+       fl_set_object_shortcut(menu_insert, "", 1);
+       fl_set_object_shortcut(menu_options, "", 1);
+       fl_set_object_shortcut(menu_options2, "", 1);
+       fl_set_object_shortcut(menu_buffer, "", 1);
+       fl_set_object_shortcut(menu_help, "", 1);
+       fl_set_object_shortcut(menu_help2, "", 1);
+       hideMenus();
+}
+
+
+inline BufferView *Menus::currentView() 
+{
+       return _view->currentView(); 
+}
+
+
+void Menus::showMenus()
+{
+       fl_hide_object(menu_grp2);
+       fl_show_object(menu_grp1);
+}
+
+
+void Menus::hideMenus()
+{
+       fl_hide_object(menu_grp1);
+       fl_show_object(menu_grp2);
+}
+
+
+void Menus::openByName(LString const &menuName)
+       /* Opens the visible menu of given name, or simply does nothing
+          when the name is not known. NOTE THE EXTREMELY STUPID
+          IMPLEMENTATION! :-) There are probably hundred ways to do
+          this better, for instance, by scanning the menu objects and
+          testing for the given name. I leave this as an exercise for an
+          experienced GG (GUI Guy/Girl). RVDK_PATCH_5. */
+{
+       if (menu_file->visible) {
+               if (menuName == _("File"))           ShowFileMenu(menu_file, 0);
+               else if (menuName == _("Edit"))      ShowEditMenu(menu_edit, 0);
+               else if (menuName == _("Layout"))    ShowLayoutMenu(menu_layout, 0);
+               else if (menuName == _("Insert"))    ShowInsertMenu(menu_insert, 0);
+               else if (menuName == _("Math"))      ShowMathMenu(menu_math, 0);
+               else if (menuName == _("Options"))   ShowOptionsMenu(menu_options, 0);
+               else if (menuName == _("Documents")) ShowBufferMenu(menu_buffer, 0);
+               else if (menuName == _("Help"))      ShowHelpMenu(menu_help, 0);
+               else lyxerr.print("The menu '" + menuName + "' is not available.");
+       } else {
+               if (menuName == _("File"))           ShowFileMenu2(menu_file2, 0);
+               else if (menuName == _("Options"))   ShowOptionsMenu(menu_options2, 0);
+               else if (menuName == _("Help"))      ShowHelpMenu(menu_help2, 0);
+               else lyxerr.print("The menu '" + menuName + "' is not available.");
+       }
+}
+
+
+void Menus::create_menus(int air)
+{
+       FL_FORM *form = _view->getForm(); 
+
+       // Here I'd really like to see code like:
+       // addMenuBar();
+       FL_OBJECT *obj;
+
+       const int MENU_LABEL_SIZE = FL_NORMAL_SIZE;
+       const int mheight = 30;
+       const int mbheight= 22;
+       // where to place the menubar?
+       const int yloc = (mheight - mbheight)/2; //air + bw;
+       const int mbadd = 20; // menu button add (to width)
+       int moffset = 0;
+
+       // menubar frame
+       obj = fl_add_frame(FL_UP_FRAME,0,0,form->w,mheight,"");
+       fl_set_object_resize(obj, FL_RESIZE_ALL);
+       fl_set_object_gravity(obj, NorthWestGravity, NorthEastGravity);
+
+       menu_grp1 = fl_bgn_group();
+       
+       // File menu button
+       menu_file = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             air+moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("File"),
+                                                 strlen(_("File"))) + mbadd,
+                             mbheight,_("File"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
+       fl_set_object_callback(obj,ShowFileMenu, 0);
+       obj->u_ldata = (long)this;
+       
+       // Edit menu button
+       menu_edit = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("Edit"),
+                                                 strlen(_("Edit"))) + mbadd,
+                             mbheight,_("Edit"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#E")),1);
+       fl_set_object_callback(obj,ShowEditMenu,0);
+       obj->u_ldata = (long) this;
+       
+       // Layout menu button
+       menu_layout = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("Layout"),
+                                                 strlen(_("Layout"))) + mbadd,
+                                         mbheight,_("Layout"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#L")), 1);
+       fl_set_object_callback(obj,ShowLayoutMenu,0);
+       obj->u_ldata = (long) this;
+       
+       // Insert menu button button
+       menu_insert = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("Insert"),
+                                                 strlen(_("Insert"))) + mbadd,
+                             mbheight,_("Insert"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#I")), 1);
+       fl_set_object_callback(obj,ShowInsertMenu,0);
+       obj->u_ldata = (long) this;
+       
+       // Math menu button
+       menu_math = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("Math"),
+                                                 strlen(_("Math"))) + mbadd,
+                             mbheight,_("Math"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#M")), 1);
+       fl_set_object_callback(obj,ShowMathMenu,0);
+       obj->u_ldata = (long) this;
+       
+       // Options menu button
+       menu_options = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("Options"),
+                                                 strlen(_("Options"))) + mbadd,
+                             mbheight,_("Options"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
+       fl_set_object_callback(obj,ShowOptionsMenu, 0);
+       obj->u_ldata = (long) this;
+
+       // Documents menu button
+       menu_buffer = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("Documents"),
+                                                 strlen(_("Documents"))) + mbadd,
+                             mbheight,_("Documents"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#D")), 1);
+       fl_set_object_callback(obj,ShowBufferMenu,0);
+       obj->u_ldata = (long) this;
+       
+       // Help menu button
+       menu_help = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("Help"),
+                                                 strlen(_("Help"))) + mbadd,
+                             mbheight,_("Help"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
+       fl_set_object_callback(obj,ShowHelpMenu,0);
+       obj->u_ldata = (long) this;
+       
+       fl_end_group();
+
+       // Set the menu buttons atrributes.
+       // Due to a bug in xforms we cant do this only an the group.
+       obj = menu_grp1->next;
+       do {
+               fl_set_object_boxtype(obj, FL_FLAT_BOX);
+               fl_set_object_color(obj,FL_MCOL, FL_MCOL);
+               fl_set_object_lsize(obj,MENU_LABEL_SIZE);
+               fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+               fl_set_object_resize(obj, FL_RESIZE_ALL);
+               fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
+               obj=obj->next;
+       } while (obj != 0 && obj->objclass != FL_END_GROUP);
+
+       // group 2
+       moffset = 0;
+       menu_grp2 = fl_bgn_group();
+       
+       // File menu button
+       menu_file2 = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             air+moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("File"),
+                                                 strlen(_("File"))) + mbadd,
+                             mbheight,_("File"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#F")), 1);
+       fl_set_object_callback(obj,ShowFileMenu2, 0);
+       obj->u_ldata = (long)this;
+       
+       // Options menu button
+       menu_options2 = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("Options"),
+                                                 strlen(_("Options"))) +mbadd,
+                             mbheight,_("Options"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#O")), 1);
+       fl_set_object_callback(obj,ShowOptionsMenu, 0);
+       obj->u_ldata = (long) this;
+
+       // Help menu button
+       menu_help2 = obj =
+               fl_add_button(FL_TOUCH_BUTTON,
+                             moffset,yloc,
+                             fl_get_string_width(FL_BOLD_STYLE,
+                                                 MENU_LABEL_SIZE,
+                                                 _("Help"),
+                                                 strlen(_("Help"))) + mbadd,
+                             mbheight,_("Help"));
+       moffset += obj->w + air;
+       fl_set_object_shortcut(obj, scex(_("MB|#H")), 1);
+       fl_set_object_callback(obj,ShowHelpMenu,0);
+       obj->u_ldata = (long) this;
+       
+       fl_end_group();
+
+       // Set the menu buttons atrributes.
+       // Due to a bug in xforms we cant do this only an the group.
+       obj = menu_grp2->next;
+       do {
+               fl_set_object_boxtype(obj, FL_FLAT_BOX);
+               fl_set_object_color(obj,FL_MCOL, FL_MCOL);
+               fl_set_object_lsize(obj,MENU_LABEL_SIZE);
+               fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+               fl_set_object_resize(obj, FL_RESIZE_ALL);
+               fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
+               obj=obj->next;
+       } while (obj != 0 && obj->objclass != FL_END_GROUP);
+}
+
+
+void Menus::ScreenOptions()
+{
+       // this is not very nice....
+       fl_set_input(fd_form_screen->input_roman, 
+                    lyxrc->roman_font_name.c_str());
+       fl_set_input(fd_form_screen->input_sans, 
+                    lyxrc->sans_font_name.c_str());
+       fl_set_input(fd_form_screen->input_typewriter,
+                    lyxrc->typewriter_font_name.c_str());
+       fl_set_input(fd_form_screen->input_font_norm, 
+                    lyxrc->font_norm.c_str());
+       char tmpstring[10];
+       sprintf(tmpstring,"%d", lyxrc->zoom);
+       fl_set_input(fd_form_screen->intinput_size, tmpstring);
+       if (fd_form_screen->form_screen->visible) {
+               fl_raise_form(fd_form_screen->form_screen);
+       } else {
+               fl_show_form(fd_form_screen->form_screen,
+                            FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
+                            _("Screen Options"));
+       }
+}
+
+
+//
+// Here comes all the menu callbacks.
+//
+
+void Menus::ShowFileMenu(FL_OBJECT *ob, long)
+{
+       Menus *men = (Menus*) ob->u_ldata;
+
+       // Regarding the pseudo-menu-button:
+       // ok, ok this is a hack. It would be better to use the menus of the
+       // xforms 0.8 library. but then all popups have to be defined all the
+       // time, code rewriting would be necessary and contex-depending menus
+       // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
+       // course it would be more proper (and little faster). So if anybody
+       // likes to do the cleanup, just do it. Matthias
+
+       // set the pseudo menu-button
+       fl_set_object_boxtype(ob, FL_UP_BOX);
+       fl_set_button(ob, 0);
+       fl_redraw_object(ob);
+
+       Buffer *tmpbuffer = men->_view->currentBuffer();
+       LyXFunc *tmpfunc = men->_view->getLyXFunc();
+
+       bool LinuxDoc = tmpbuffer->isLinuxDoc();
+       bool DocBook  = tmpbuffer->isDocBook();
+       bool Literate = tmpbuffer->isLiterate();
+
+       // Import sub-menu
+
+       int SubFileImport =fl_defpup(FL_ObjWin(ob),
+                                    _("Import%t"
+                                      "|LaTeX...%x30"
+                                      "|Ascii Text as Lines...%x31"
+                                      "|Ascii Text as Paragraphs%x32"
+                                      "|Noweb%x33"));
+       fl_setpup_shortcut(SubFileImport, 30, scex(_("FIM|Ll#l#L")));
+       fl_setpup_shortcut(SubFileImport, 31, scex(_("FIM|Aa#a#A")));
+       fl_setpup_shortcut(SubFileImport, 32, scex(_("FIM|Pp#p#P")));
+       fl_setpup_shortcut(SubFileImport, 33, scex(_("FIM|Nn#n#N")));
+
+       // Export sub-menu
+
+       // remember to make this handle linuxdoc too.
+       // and now docbook also.
+       int SubFileExport;
+       if (!LinuxDoc && !DocBook)
+            SubFileExport=fl_defpup(FL_ObjWin(ob),
+                                     _("Export%t"
+                                       "|as LaTeX...%x40"
+                                       "|as DVI...%x41"
+                                       "|as PostScript...%x42"
+                                       "|as Ascii Text...%x43"
+                                       "|Custom...%x44"));
+        else if(LinuxDoc)
+            SubFileExport=fl_defpup(FL_ObjWin(ob),
+                                     _("Export%t"
+                                       "|as LinuxDoc...%x40"
+                                       "|as DVI...%x41"
+                                       "|as PostScript...%x42"
+                                       "|as Ascii Text...%x43"));
+        else if(DocBook)
+            SubFileExport=fl_defpup(FL_ObjWin(ob),
+                                     _("Export%t"
+                                       "|as DocBook...%x40"
+                                       "|as DVI...%x41"
+                                       "|as PostScript...%x42"
+                                       "|as Ascii Text...%x43"));
+
+       fl_setpup_shortcut(SubFileExport, 40, scex(_("FEX|Ll#l#L")));
+       fl_setpup_shortcut(SubFileExport, 41, scex(_("FEX|Dd#d#D")));
+       fl_setpup_shortcut(SubFileExport, 42, scex(_("FEX|Pp#p#P")));
+       fl_setpup_shortcut(SubFileExport, 43, scex(_("FEX|Tt#t#T")));
+       fl_setpup_shortcut(SubFileExport, 44, scex(_("FEX|mM#m#M")));
+       
+       int FileMenu = fl_defpup(FL_ObjWin(ob),
+                                _("New..."
+                                  "|New from template..."
+                                  "|Open...%l"
+                                  "|Close"
+                                  "|Save"
+                                  "|Save As..."
+                                  "|Revert to saved%l"
+                                  "|View dvi"
+                                  "|View PostScript"
+                                  "|Update dvi"
+                                   "|Update PostScript"
+                                   "|Build program%l"
+                                  "|Print..."
+                                  "|Fax..."));
+
+       fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
+       fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
+       fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
+       fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Cc#c#C")));
+       fl_setpup_shortcut(FileMenu, 5, scex(_("FM|Ss#s#S")));
+       fl_setpup_shortcut(FileMenu, 6, scex(_("FM|Aa#a#A")));
+       fl_setpup_shortcut(FileMenu, 7, scex(_("FM|Rr#r#R")));
+       fl_setpup_shortcut(FileMenu, 8, scex(_("FM|dD#d#D")));
+       fl_setpup_shortcut(FileMenu, 9, scex(_("FM|wW#w#W")));
+       fl_setpup_shortcut(FileMenu,10, scex(_("FM|vV#v#V")));
+       fl_setpup_shortcut(FileMenu,11, scex(_("FM|Uu#u#U")));
+        fl_setpup_shortcut(FileMenu,12, scex(_("FM|Bb#b#B")));
+        fl_setpup_shortcut(FileMenu,13, scex(_("FM|Pp#p#P")));
+        fl_setpup_shortcut(FileMenu,14, scex(_("FM|Ff#f#F")));
+
+       // These commands are disabled when the corresponding programs
+       // are not installed. I simply grey them out, since I do not
+       // want to change their number (JMarc)
+       bool hasLaTeX = lyxrc->latex_command != "none";
+
+       if (!hasLaTeX || lyxrc->view_dvi_command == "none") 
+               fl_setpup_mode(FileMenu, 8, FL_PUP_GREY);
+       
+       if (!hasLaTeX || lyxrc->view_ps_command == "none") 
+               fl_setpup_mode(FileMenu, 9, FL_PUP_GREY);
+       
+       if (!hasLaTeX) {
+               fl_setpup_mode(FileMenu, 10, FL_PUP_GREY);
+               fl_setpup_mode(FileMenu, 11, FL_PUP_GREY);
+       } 
+
+        if (lyxrc->literate_command == "none" || ! Literate) 
+               fl_setpup_mode(FileMenu, 12, FL_PUP_GREY);
+
+       if (!hasLaTeX || lyxrc->print_command == "none") 
+               fl_setpup_mode(FileMenu, 13, FL_PUP_GREY);
+
+       if (!hasLaTeX || lyxrc->fax_command == "none") 
+               fl_setpup_mode(FileMenu, 14, FL_PUP_GREY);
+
+       bool hasReLyX = lyxrc->relyx_command != "none";
+       if (!hasReLyX) {
+               // Disable import LaTeX and Noweb
+               fl_setpup_mode(SubFileImport, 30, FL_PUP_GREY);
+               fl_setpup_mode(SubFileImport, 33, FL_PUP_GREY);
+       }
+
+       if (!hasLaTeX) {
+               // Disable export dvi and export postscript
+               fl_setpup_mode(SubFileExport, 41, FL_PUP_GREY);
+               fl_setpup_mode(SubFileExport, 42, FL_PUP_GREY);
+       }
+       // xgettext:no-c-format
+       fl_addtopup(FileMenu,_("|Import%m"), SubFileImport);
+       // xgettext:no-c-format
+       fl_addtopup(FileMenu,_("|Export%m%l"), SubFileExport);
+       // xgettext:no-c-format
+       fl_addtopup(FileMenu,_("|Exit%l"));
+       fl_setpup_shortcut(FileMenu, 15, scex(_("FM|Ii#i#I")));
+       fl_setpup_shortcut(FileMenu, 16, scex(_("FM|Ee#e#E")));
+       fl_setpup_shortcut(FileMenu, 17, scex(_("FM|xX#x#X")));
+
+       // make the lastfiles menu
+       LastFiles_Iter liter(*lastfiles); // :-)
+       LString filname;
+       int ii = 1;
+       while( ii < 10 && !(filname = liter()).empty() ) {
+               LString tmp;
+               LString tmp2;
+               LString relbuf = MakeDisplayPath(filname,30);
+               tmp += ii;
+               tmp2 = tmp;
+               tmp += ". " + relbuf;
+               tmp2 += LString('#') + ii;
+               fl_addtopup(FileMenu, tmp.c_str());
+               fl_setpup_shortcut(FileMenu, 18 - 1 + ii, tmp2.c_str());
+               ii++;
+       }
+
+       // place popup
+       fl_setpup_position(
+               men->_view->getForm()->x + ob->x,
+               men->_view->getForm()->y + ob->y + ob->h + 10);   
+       int choice = fl_dopup(FileMenu);
+       XFlush(fl_display);
+
+       // set the pseudo menu-button back
+       fl_set_object_boxtype(ob, FL_FLAT_BOX);
+       fl_redraw_object(ob);
+
+       switch (choice) {
+       case -1: case 0: // we won't do anything
+               break;
+       case  1: tmpfunc->Dispatch(LFUN_MENUNEW); break;
+       case  2: tmpfunc->Dispatch(LFUN_MENUNEWTMPLT); break;
+       case  3: tmpfunc->Dispatch(LFUN_MENUOPEN); break;
+       case  4: tmpfunc->Dispatch(LFUN_CLOSEBUFFER); break;
+       case  5: tmpfunc->Dispatch(LFUN_MENUWRITE); break;
+       case  6: tmpfunc->Dispatch(LFUN_MENUWRITEAS); break;
+       case  7: tmpfunc->Dispatch(LFUN_MENURELOAD); break;
+       case  8: tmpfunc->Dispatch(LFUN_PREVIEW); break;
+       case  9: tmpfunc->Dispatch(LFUN_PREVIEWPS); break;
+       case 10: tmpfunc->Dispatch(LFUN_RUNLATEX); break;
+       case 11: tmpfunc->Dispatch(LFUN_RUNDVIPS); break;
+       case 12: tmpfunc->Dispatch(LFUN_BUILDPROG); break;
+       case 13: tmpfunc->Dispatch(LFUN_MENUPRINT); break;
+       case 14: tmpfunc->Dispatch(LFUN_FAX); break;
+       case 15: // import menu
+       case 30: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
+               break;
+       case 31: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
+               break;
+       case 32: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
+               break;
+       case 33: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
+               break;
+       case 16: // export menu
+       case 40:
+               if (!LinuxDoc && !DocBook)
+                       tmpfunc->Dispatch(LFUN_EXPORT, "latex");
+               else if(LinuxDoc)
+                       tmpfunc->Dispatch(LFUN_EXPORT, "linuxdoc");
+               else
+                       tmpfunc->Dispatch(LFUN_EXPORT, "docbook");
+               break;
+       case 41: tmpfunc->Dispatch(LFUN_EXPORT, "dvi");
+               break;
+       case 42: tmpfunc->Dispatch(LFUN_EXPORT, "postscript");
+               break;
+       case 43: tmpfunc->Dispatch(LFUN_EXPORT, "ascii");
+               break;
+       case 44: tmpfunc->Dispatch(LFUN_EXPORT, "custom"); 
+               break;
+       case 17: tmpfunc->Dispatch(LFUN_QUIT); break;
+               // Lastfiles:
+       case 18: // The first item with lastfiles.
+       default:
+               men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-18])); // ok one more
+               break;
+       }
+       fl_freepup(SubFileImport);
+       fl_freepup(SubFileExport);
+       fl_freepup(FileMenu);
+
+       AllowInput();
+}
+
+
+void Menus::ShowFileMenu2(FL_OBJECT *ob, long)
+{
+       Menus *men = (Menus*) ob->u_ldata;
+
+       // Regarding the pseudo-menu-button:
+       // ok, ok this is a hack. It would be better to use the menus of the
+       // xforms 0.8 library. but then all popups have to be defined all the
+       // time, code rewriting would be necessary and contex-depending menus
+       // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of
+       // course it would be more proper (and little faster). So if anybody
+       // likes to do the cleanup, just do it. Matthias
+
+       // set the pseudo menu-button
+       fl_set_object_boxtype(ob, FL_UP_BOX);
+       fl_set_button(ob, 0);
+       fl_redraw_object(ob);
+
+       LyXFunc *tmpfunc = men->_view->getLyXFunc();
+
+       // Import sub-menu
+       
+       int SubFileImport = fl_defpup(FL_ObjWin(ob),
+                                    _("Import%t"
+                                      "|LaTeX...%x15"
+                                      "|Ascii Text as Lines...%x16"
+                                      "|Ascii Text as Paragraphs...%x17"
+                                      "|Noweb...%x18"));
+       fl_setpup_shortcut(SubFileImport, 15, scex(_("FIM|Ll#l#L")));
+       fl_setpup_shortcut(SubFileImport, 16, scex(_("FIM|Aa#a#A")));
+       fl_setpup_shortcut(SubFileImport, 17, scex(_("FIM|Pp#p#P")));
+       fl_setpup_shortcut(SubFileImport, 18, scex(_("FIM|Nn#n#N")));
+
+       bool hasReLyX = lyxrc->relyx_command != "none";
+       if (!hasReLyX) {
+               // Disable import LaTeX and Noweb
+               fl_setpup_mode(SubFileImport, 15, FL_PUP_GREY);
+               fl_setpup_mode(SubFileImport, 18, FL_PUP_GREY);
+       }
+
+       // This can be done cleaner later.
+       int FileMenu = fl_defpup(FL_ObjWin(ob), 
+                                _("New..."
+                                "|New from template..."
+                                "|Open...%l"
+                                "|Import%m%l"
+                                "|Exit%l"), SubFileImport);
+       fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
+       fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
+       fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
+       fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Ii#i#I")));
+       fl_setpup_shortcut(FileMenu, 5, scex(_("FM|xX#x#X")));
+       
+       // make the lastfiles menu
+       LastFiles_Iter liter(*lastfiles); // :-)
+       LString filname;
+       int ii = 1;
+       while( ii < 10 && !(filname = liter()).empty() ) {
+               LString tmp;
+               LString tmp2;
+               LString relbuf = MakeDisplayPath(filname,30);
+               tmp += ii;
+               tmp2 = tmp;
+               tmp += ". " + relbuf;
+               tmp2 += LString('#') + ii;
+               fl_addtopup(FileMenu, tmp.c_str());
+               fl_setpup_shortcut(FileMenu, 6 - 1 + ii, tmp2.c_str());
+               ii++;
+       }
+
+       // place popup
+       fl_setpup_position(
+               men->_view->getForm()->x + ob->x,
+               men->_view->getForm()->y + ob->y + ob->h + 10);   
+       int choice = fl_dopup(FileMenu);
+       XFlush(fl_display);
+
+       // set the pseudo menu-button back
+       fl_set_object_boxtype(ob, FL_FLAT_BOX);
+       fl_redraw_object(ob);
+
+       switch (choice) {
+       case -1: case 0: // we won't do anything
+               break;
+       case 1:
+               tmpfunc->Dispatch(LFUN_MENUNEW);
+               break;
+       case 2:
+               tmpfunc->Dispatch(LFUN_MENUNEWTMPLT);
+               break;
+       case 3:
+               tmpfunc->Dispatch(LFUN_MENUOPEN);
+               break;
+       case 4: // import menu
+       case 15: tmpfunc->Dispatch(LFUN_IMPORT, "latex");
+               break;
+       case 16: tmpfunc->Dispatch(LFUN_IMPORT, "ascii");
+               break;
+       case 17: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph");
+               break;
+       case 18: tmpfunc->Dispatch(LFUN_IMPORT, "noweb");
+               break;
+       case 5:
+               tmpfunc->Dispatch(LFUN_QUIT);
+               break;
+               // Lastfiles:
+       default:
+               men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-6]));
+               break;
+       }
+
+       fl_freepup(SubFileImport);
+       fl_freepup(FileMenu);
+       AllowInput();
+       return;
+}
+
+
+void Menus::ShowEditMenu(FL_OBJECT *ob, long)
+{
+       Menus *men = (Menus*) ob->u_ldata;
+       
+       // set the pseudo menu-button
+       fl_set_object_boxtype(ob, FL_UP_BOX);
+       fl_set_button(ob, 0);
+       fl_redraw_object(ob);
+
+       Buffer *tmpbuffer = men->_view->currentBuffer();
+       LyXFunc *tmpfunc = men->_view->getLyXFunc();
+
+       // Floats & Insets submenu
+       int SubEditFloats=fl_defpup(FL_ObjWin(ob),
+                                   _("Floats & Insets%t"
+                                   "|Open/Close%x21"
+                                   "|Melt%x22"
+                                   "|Open All Footnotes/Margin Notes%x23"
+                                   "|Close All Footnotes/Margin Notes%x24"
+                                   "|Open All Figures/Tables%x25"
+                                   "|Close All Figures/Tables%x26%l"
+                                   "|Remove all Error Boxes%x27")
+               );
+       fl_setpup_shortcut(SubEditFloats, 21, scex(_("EMF|Oo#o#O")));
+       fl_setpup_shortcut(SubEditFloats, 22, scex(_("EMF|Mm#m#M")));
+       fl_setpup_shortcut(SubEditFloats, 23, scex(_("EMF|Aa#a#A")));
+       fl_setpup_shortcut(SubEditFloats, 24, scex(_("EMF|Cc#c#C")));
+       fl_setpup_shortcut(SubEditFloats, 25, scex(_("EMF|Ff#f#F")));
+       fl_setpup_shortcut(SubEditFloats, 26, scex(_("EMF|Tt#t#T")));
+       fl_setpup_shortcut(SubEditFloats, 27, scex(_("EMF|Rr#r#R")));
+
+       // Table submenu
+       int SubEditTable = fl_newpup(FL_ObjWin(ob));
+       if (men->currentView()->available() && 
+           tmpbuffer->text->cursor.par->table &&
+           !tmpbuffer->isReadonly()){
+
+               fl_addtopup(SubEditTable, _("Table%t"));
+
+               if (tmpbuffer->text->cursor.par->table->
+                   IsMultiColumn(tmpbuffer->text->
+                                 NumberOfCell(tmpbuffer->
+                                              text->cursor.par, 
+                                              tmpbuffer->
+                                              text->cursor.pos)))
+                       fl_addtopup(SubEditTable, _("|Multicolumn%B%x44%l"));
+               else
+                       fl_addtopup(SubEditTable, _("|Multicolumn%b%x44%l"));
+               fl_setpup_shortcut(SubEditTable, 44, scex(_("EMT|Mm#m#M")));
+     
+               if (tmpbuffer->text->cursor.par->table->
+                   TopLine(tmpbuffer->text->
+                           NumberOfCell(tmpbuffer->
+                                        text->cursor.par, 
+                                        tmpbuffer->text->
+                                        cursor.pos)))
+                       fl_addtopup(SubEditTable, _("|Line Top%B%x36"));
+               else
+                       fl_addtopup(SubEditTable, _("|Line Top%b%x36"));
+               fl_setpup_shortcut(SubEditTable, 36, scex(_("EMT|Tt#t#T")));
+     
+               if (tmpbuffer->text->cursor.par->table->
+                   BottomLine(tmpbuffer->text->
+                              NumberOfCell(tmpbuffer->
+                                           text->cursor.par, 
+                                           tmpbuffer->
+                                           text->cursor.pos)))
+                       fl_addtopup(SubEditTable, _("|Line Bottom%B%x37"));
+               else
+                       fl_addtopup(SubEditTable, _("|Line Bottom%b%x37"));
+               fl_setpup_shortcut(SubEditTable, 37, scex(_("EMT|Bb#b#B")));
+
+               if (tmpbuffer->text->cursor.par->table->
+                   LeftLine(tmpbuffer->text->
+                            NumberOfCell(tmpbuffer->
+                                         text->cursor.par, 
+                                         tmpbuffer->
+                                         text->cursor.pos)))
+                       fl_addtopup(SubEditTable, _("|Line Left%B%x38"));
+               else
+                       fl_addtopup(SubEditTable, _("|Line Left%b%x38"));
+               fl_setpup_shortcut(SubEditTable, 38, scex(_("EMT|Ll#l#L")));
+
+               if (tmpbuffer->text->cursor.par->table->
+                   RightLine(tmpbuffer->text->
+                             NumberOfCell(tmpbuffer->
+                                          text->cursor.par, 
+                                          tmpbuffer->
+                                          text->cursor.pos)))
+                       fl_addtopup(SubEditTable, _("|Line Right%B%x39%l"));
+               else
+                       fl_addtopup(SubEditTable, _("|Line Right%b%x39%l"));
+               fl_setpup_shortcut(SubEditTable, 39, scex(_("EMT|Rr#r#R")));
+
+               int align = tmpbuffer->text->cursor.par->
+                       table->GetAlignment(tmpbuffer->text->
+                                    NumberOfCell(tmpbuffer->
+                                                 text->cursor.par, 
+                                                 tmpbuffer->
+                                                 text->cursor.pos));
+               if (align == LYX_ALIGN_LEFT)
+                       fl_addtopup(SubEditTable, _("|Align Left%R%x40"));
+               else
+                       fl_addtopup(SubEditTable, _("|Align Left%r%x40"));
+               fl_setpup_shortcut(SubEditTable, 40, scex(_("EMT|eE#e#E")));
+
+               if (align == LYX_ALIGN_RIGHT)
+                       fl_addtopup(SubEditTable, _("|Align Right%R%x41"));
+               else
+                       fl_addtopup(SubEditTable, _("|Align Right%r%x41"));
+               fl_setpup_shortcut(SubEditTable, 41, scex(_("EMT|iI#i#I")));
+
+               if (align == LYX_ALIGN_CENTER)
+                       fl_addtopup(SubEditTable, _("|Align Center%R%x42%l"));
+               else
+                       fl_addtopup(SubEditTable, _("|Align Center%r%x42%l"));
+               fl_setpup_shortcut(SubEditTable, 42, scex(_("EMT|Cc#c#C")));
+
+               // xgettext:no-c-format
+               fl_addtopup(SubEditTable, _("|Append Row%x32"));
+               fl_setpup_shortcut(SubEditTable, 32, scex(_("EMT|oO#o#O")));
+               // xgettext:no-c-format
+               fl_addtopup(SubEditTable, _("|Append Column%x33%l"));
+               fl_setpup_shortcut(SubEditTable, 33, scex(_("EMT|uU#u#U")));
+               // xgettext:no-c-format
+               fl_addtopup(SubEditTable, _("|Delete Row%x34"));
+               fl_setpup_shortcut(SubEditTable, 34, scex(_("EMT|wW#w#W")));
+               // xgettext:no-c-format
+               fl_addtopup(SubEditTable, _("|Delete Column%x35%l"));
+               fl_setpup_shortcut(SubEditTable, 35, scex(_("EMT|nN#n#N")));
+               // xgettext:no-c-format
+               fl_addtopup(SubEditTable, _("|Delete Table%x43"));
+               fl_setpup_shortcut(SubEditTable, 43, scex(_("EMT|Dd#d#D")));
+       }
+       else {
+               fl_addtopup(SubEditTable, _("Table%t"));
+               // xgettext:no-c-format
+               fl_addtopup(SubEditTable, _("|Insert table%x31"));
+               fl_setpup_shortcut(SubEditTable, 31, scex(_("EMT|Ii#i#I")));
+       }
+
+       int SubVersionControl = fl_newpup(FL_ObjWin(ob));
+       fl_addtopup(SubVersionControl, _("Version Control%t"));
+       if (tmpbuffer->lyxvc.inUse()) {
+               // xgettext:no-c-format
+               fl_addtopup(SubVersionControl, _("|Register%d%x51"));
+               if (tmpbuffer->isReadonly()) {
+                       // signifies that the file is not checked out
+                       // xgettext:no-c-format
+                       fl_addtopup(SubVersionControl, _("|Check In Changes%d%x52"));
+                       // xgettext:no-c-format
+                       fl_addtopup(SubVersionControl, _("|Check Out for Edit%x53"));
+               } else {
+                       // signifies that the file is checked out
+                       // xgettext:no-c-format
+                       fl_addtopup(SubVersionControl, _("|Check In Changes%x52"));
+                       // xgettext:no-c-format
+                       fl_addtopup(SubVersionControl, _("|Check Out for Edit%d%x53"));
+               }
+               // xgettext:no-c-format
+               fl_addtopup(SubVersionControl, _("|Revert to last version%x54"));
+               // xgettext:no-c-format
+               fl_addtopup(SubVersionControl, _("|Undo last check in%x55"));
+               // xgettext:no-c-format
+               fl_addtopup(SubVersionControl, _("|Show History%x56"));
+       } else {
+               // xgettext:no-c-format
+               fl_addtopup(SubVersionControl, _("|Register%x51"));
+       }
+       // the shortcuts are not good.
+       fl_setpup_shortcut(SubVersionControl, 51, scex(_("EMV|Rr#r#R")));
+       fl_setpup_shortcut(SubVersionControl, 52, scex(_("EMV|Ii#i#I")));
+       fl_setpup_shortcut(SubVersionControl, 53, scex(_("EMV|Oo#o#O")));
+       fl_setpup_shortcut(SubVersionControl, 54, scex(_("EMV|lL#l#l")));
+       fl_setpup_shortcut(SubVersionControl, 55, scex(_("EMV|Uu#u#U")));
+       fl_setpup_shortcut(SubVersionControl, 56, scex(_("EMV|Hh#h#H")));
+
+       int EditMenu=fl_defpup(FL_ObjWin(ob),
+                              _("Undo"
+                              "|Redo %l"
+                              "|Cut"
+                              "|Copy"
+                              "|Paste%l"
+                              "|Find & Replace..."
+                              "|Go to Error"
+                              "|Go to Note"
+                              "|Floats & Insets%m"
+                              "|Table%m"
+                              "|Spellchecker...."
+                              "|Check TeX"
+                              "|Table of Contents...%l"
+                              "|Version Control%m%l"
+                              "|View LaTeX log file%l"
+                              "|Paste Primary Selection as Lines"
+                              "|Paste Primary Selection as Paragraphs"),
+                              SubEditFloats, SubEditTable, SubVersionControl);
+
+       fl_setpup_shortcut(EditMenu, 1, scex(_("EM|Uu#u#U")));
+       fl_setpup_shortcut(EditMenu, 2, scex(_("EM|Rr#r#R")));
+       fl_setpup_shortcut(EditMenu, 3, scex(_("EM|Cc#c#C")));
+       fl_setpup_shortcut(EditMenu, 4, scex(_("EM|oO#o#O")));
+       fl_setpup_shortcut(EditMenu, 5, scex(_("EM|Pp#p#P")));
+       fl_setpup_shortcut(EditMenu, 6, scex(_("EM|Ff#f#F")));
+       fl_setpup_shortcut(EditMenu, 7, scex(_("EM|Ee#e#E")));
+       fl_setpup_shortcut(EditMenu, 8, scex(_("EM|Nn#n#N")));
+       fl_setpup_shortcut(EditMenu, 9, scex(_("EM|Ii#i#I")));
+       fl_setpup_shortcut(EditMenu, 10, scex(_("EM|Tt#t#T")));
+       fl_setpup_shortcut(EditMenu, 11, scex(_("EM|Ss#s#S")));
+       fl_setpup_shortcut(EditMenu, 12, scex(_("EM|hH#h#H")));
+       fl_setpup_shortcut(EditMenu, 13, scex(_("EM|aA#a#A")));
+       fl_setpup_shortcut(EditMenu, 14, scex(_("EM|Vv#v#V")));
+       fl_setpup_shortcut(EditMenu, 15, scex(_("EM|wW#w#W")));
+       fl_setpup_shortcut(EditMenu, 16, scex(_("EM|Ll#l#L")));
+       fl_setpup_shortcut(EditMenu, 17, scex(_("EM|gG#g#G")));
+      
+       // disable unavailable entries.
+       if(tmpbuffer->undostack.Top() == NULL)
+               fl_setpup_mode(EditMenu, 1, FL_PUP_GREY);
+       if(tmpbuffer->redostack.Top() == NULL)
+               fl_setpup_mode(EditMenu, 2, FL_PUP_GREY);
+       if(lyxrc->isp_command == "none") 
+               fl_setpup_mode(EditMenu, 11, FL_PUP_GREY);
+       if(lyxrc->chktex_command == "none") 
+               fl_setpup_mode(EditMenu, 12, FL_PUP_GREY);
+
+       if (tmpbuffer->isReadonly()) {
+                fl_setpup_mode(EditMenu, 1, FL_PUP_GREY); 
+                fl_setpup_mode(EditMenu, 2, FL_PUP_GREY); 
+                fl_setpup_mode(EditMenu, 3, FL_PUP_GREY); 
+                fl_setpup_mode(EditMenu, 5, FL_PUP_GREY); 
+                fl_setpup_mode(EditMenu, 16, FL_PUP_GREY); 
+                fl_setpup_mode(EditMenu, 17, FL_PUP_GREY);
+       }
+       
+       fl_setpup_position(men->_view->getForm()->x + ob->x,
+                          men->_view->getForm()->y + ob->y +
+                          ob->h + 10);   
+       int choice = fl_dopup(EditMenu);
+       XFlush(fl_display);
+   
+       // set the pseudo menu-button back
+       fl_set_object_boxtype(ob, FL_FLAT_BOX);
+       fl_redraw_object(ob);
+
+       switch (choice) {
+       case  1: tmpfunc->Dispatch(LFUN_UNDO); break;
+       case  2: tmpfunc->Dispatch(LFUN_REDO); break;
+       case  3: tmpfunc->Dispatch(LFUN_CUT); break;
+       case  4: tmpfunc->Dispatch(LFUN_COPY); break;
+       case  5: tmpfunc->Dispatch(LFUN_PASTE); break;
+       case  6: tmpfunc->Dispatch(LFUN_MENUSEARCH); break;
+       case  7: tmpfunc->Dispatch(LFUN_GOTOERROR); break;
+       case  8: tmpfunc->Dispatch(LFUN_GOTONOTE); break;
+       case  9: // floats & insets
+               break;
+       case 10:// table 
+               break;
+       case 11: tmpfunc->Dispatch(LFUN_SPELLCHECK); break;
+       case 12: tmpfunc->Dispatch(LFUN_RUNCHKTEX); break;
+       case 13: tmpfunc->Dispatch(LFUN_TOCVIEW); break;
+       case 14: // version control
+               break;
+       case 15: tmpfunc->Dispatch(LFUN_LATEX_LOG); break;
+       case 16: tmpfunc->Dispatch(LFUN_PASTESELECTION, "line"); break;
+       case 17: tmpfunc->Dispatch(LFUN_PASTESELECTION, "paragraph"); break;
+
+               // floats & insets sub-menu
+       case 21: ToggleFloat(); break;
+       case 22: tmpfunc->Dispatch(LFUN_MELT); break;
+       case 23: AllFloats(1, 0); break;
+       case 24: AllFloats(0, 0); break;
+       case 25: AllFloats(1, 1); break;
+       case 26: AllFloats(0, 1); break;
+       case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
+
+       case 31: tmpfunc->Dispatch(LFUN_TABLE); break;
+               // this is really temporary. We need new function in keybind.C
+               // These should set the minibuffer, too.
+       case 32: case 33: case 34:
+       case 35: case 36: case 37:
+       case 38: case 39: case 40: 
+       case 41: case 42: case 43:
+       case 44: 
+               if (men->currentView()->available()){
+                       men->currentView()->getScreen()->HideCursor();
+                       if (!tmpbuffer->text->selection){
+                               BeforeChange(); 
+                               tmpbuffer->update(-2);
+                       }
+                       tmpbuffer->text->
+                               TableFeatures(choice - 32);
+                       tmpbuffer->update(1);
+               }
+               break;
+               // version control sub-menu
+       case 51: // register
+               tmpfunc->Dispatch(LFUN_VC_REGISTER);
+               break;
+       case 52: // check in
+               tmpfunc->Dispatch(LFUN_VC_CHECKIN);
+               break;
+       case 53: // check out
+               tmpfunc->Dispatch(LFUN_VC_CHECKOUT);
+               break;
+       case 54: // revert to last
+               tmpfunc->Dispatch(LFUN_VC_REVERT);
+               break;
+       case 55: // undo last
+               tmpfunc->Dispatch(LFUN_VC_UNDO);
+               break;
+       case 56: // show history
+               tmpfunc->Dispatch(LFUN_VC_HISTORY);
+               break;
+       }
+
+       fl_freepup(EditMenu);
+       fl_freepup(SubEditFloats);
+       fl_freepup(SubEditTable);
+       fl_freepup(SubVersionControl);
+}
+
+
+void Menus::ShowLayoutMenu(FL_OBJECT *ob, long)
+{
+       Menus *men = (Menus*) ob->u_ldata;
+
+       if (!men->currentView()->available())
+               return;
+       
+       // set the pseudo menu-button
+       fl_set_object_boxtype(ob, FL_UP_BOX);
+       fl_set_button(ob, 0);
+       fl_redraw_object(ob);
+   
+       Buffer *tmpbuffer = men->_view->currentBuffer();
+       LyXFunc *tmpfunc = men->_view->getLyXFunc();
+
+       int LayoutMenu = fl_newpup(FL_ObjWin(ob));
+       fl_addtopup(LayoutMenu, _("Character..."
+                                 "|Paragraph..."
+                                 "|Document..."
+                                 "|Paper..."
+                                 "|Table..."
+                                 "|Quotes...%l"
+                                 "|Emphasize Style%b"
+                                 "|Noun Style%b"
+                                 "|Bold Style%b"
+                                 "|TeX Style%b"
+                                 "|Change Environment Depth"
+                                 "|LaTeX Preamble...%l"
+                                 "|Save layout as default"));
+       fl_setpup_shortcut(LayoutMenu, 1, scex(_("LM|Cc#c#C")));
+       fl_setpup_shortcut(LayoutMenu, 2, scex(_("LM|Pp#p#P")));
+       fl_setpup_shortcut(LayoutMenu, 3, scex(_("LM|Dd#d#D")));
+       fl_setpup_shortcut(LayoutMenu, 4, scex(_("LM|aA#a#A")));
+       fl_setpup_shortcut(LayoutMenu, 5, scex(_("LM|eE#e#E")));
+       fl_setpup_shortcut(LayoutMenu, 6, scex(_("LM|Qq#q#Q")));
+       fl_setpup_shortcut(LayoutMenu, 7, scex(_("LM|mM#m#M")));
+       fl_setpup_shortcut(LayoutMenu, 8, scex(_("LM|Nn#n#N")));
+       fl_setpup_shortcut(LayoutMenu, 9, scex(_("LM|Bb#b#B")));
+       fl_setpup_shortcut(LayoutMenu, 10, scex(_("LM|Tt#t#T")));
+       fl_setpup_shortcut(LayoutMenu, 11, scex(_("LM|vV#v#V")));
+       fl_setpup_shortcut(LayoutMenu, 12, scex(_("LM|Ll#l#L")));
+       fl_setpup_shortcut(LayoutMenu, 13, scex(_("LM|Ss#s#S")));
+
+       // Set values of checkboxes according to font
+       LyXFont font = tmpbuffer->text->real_current_font;
+       if (font.emph() == LyXFont::ON)
+               fl_setpup_mode(LayoutMenu, 7, FL_PUP_CHECK);
+       if (font.noun() == LyXFont::ON)
+               fl_setpup_mode(LayoutMenu, 8, FL_PUP_CHECK);
+       if (font.series() == LyXFont::BOLD_SERIES)
+               fl_setpup_mode(LayoutMenu, 9, FL_PUP_CHECK);
+       if (font.latex() == LyXFont::ON)
+               fl_setpup_mode(LayoutMenu, 10, FL_PUP_CHECK);
+          
+       // Grey out unavailable entries
+       if (!tmpbuffer->text->cursor.par->table)
+               fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
+
+       if (tmpbuffer->isReadonly()) {
+               fl_setpup_mode(LayoutMenu, 1, FL_PUP_GREY);
+               fl_setpup_mode(LayoutMenu, 6, FL_PUP_GREY);
+               fl_setpup_mode(LayoutMenu, 11, FL_PUP_GREY);
+       }
+
+       fl_setpup_position(
+               men->_view->getForm()->x + ob->x,
+               men->_view->getForm()->y + ob->y + ob->h + 10);
+       int choice = fl_dopup(LayoutMenu);
+       XFlush(fl_display);
+
+       // set the pseudo menu-button back
+       fl_set_object_boxtype(ob, FL_FLAT_BOX);
+       fl_redraw_object(ob);
+
+       switch (choice) {
+       case 1:  tmpfunc->Dispatch(LFUN_LAYOUT_CHARACTER); break;
+       case 2:  tmpfunc->Dispatch(LFUN_LAYOUT_PARAGRAPH); break;
+       case 3:  tmpfunc->Dispatch(LFUN_LAYOUT_DOCUMENT);  break;
+       case 4:  tmpfunc->Dispatch(LFUN_LAYOUT_PAPER); break;
+       case 5:  tmpfunc->Dispatch(LFUN_LAYOUT_TABLE, "true"); break;
+       case 6:  tmpfunc->Dispatch(LFUN_LAYOUT_QUOTES); break;
+       case 7:  tmpfunc->Dispatch(LFUN_EMPH); break;
+       case 8:  tmpfunc->Dispatch(LFUN_NOUN); break;
+       case 9:  tmpfunc->Dispatch(LFUN_BOLD); break;
+       case 10: tmpfunc->Dispatch(LFUN_TEX); break;
+       case 11: tmpfunc->Dispatch(LFUN_DEPTH_PLUS); break;
+       case 12: tmpfunc->Dispatch(LFUN_LAYOUT_PREAMBLE); break;
+       case 13: tmpfunc->Dispatch(LFUN_LAYOUT_SAVE_DEFAULT); break;//MenuLayoutSave(); break;
+       }
+       fl_freepup(LayoutMenu); 
+}
+
+
+void Menus::ShowInsertMenu(FL_OBJECT *ob, long /*data*/)
+{
+       Menus *men = (Menus*) ob->u_ldata;
+       
+       // set the pseudo menu-button
+       fl_set_object_boxtype(ob, FL_UP_BOX);
+       fl_set_button(ob, 0);
+       fl_redraw_object(ob);
+       Buffer *tmpbuffer = men->_view->currentBuffer();
+       LyXFunc *tmpfunc = men->_view->getLyXFunc();
+
+#if 0
+       // Is textclass LinuxDoc?
+       bool LinuxDoc = tmpbuffer->isLinuxDoc();
+#endif
+
+       int SubInsertAscii = fl_defpup(FL_ObjWin(ob),
+                                      _("Import ASCII file%t"
+                                      "|As Lines%x41"
+                                      "|As Paragraphs%x42"));
+       fl_setpup_shortcut(SubInsertAscii, 41, scex(_("IMA|Ll#l#L")));
+       fl_setpup_shortcut(SubInsertAscii, 42, scex(_("IMA|Pp#p#P")));
+
+       int SubInsertTableList=fl_defpup(FL_ObjWin(ob),
+                                        _("Lists & TOC%t"
+                                          "|Table of Contents%x21"
+                                          "|List of Figures%x22"
+                                          "|List of Tables%x23"
+                                          "|List of Algorithms%x24"
+                                          "|Index List%x25"
+                                          "|BibTeX Reference%x26"));      
+       fl_setpup_shortcut(SubInsertTableList, 21, scex(_("IMT|Cc#c#C")));
+       fl_setpup_shortcut(SubInsertTableList, 22, scex(_("IMT|Ff#f#F")));
+       fl_setpup_shortcut(SubInsertTableList, 23, scex(_("IMT|Tt#t#T")));
+       fl_setpup_shortcut(SubInsertTableList, 24, scex(_("IMT|Aa#a#A")));
+       fl_setpup_shortcut(SubInsertTableList, 25, scex(_("IMT|Ii#i#I")));
+       fl_setpup_shortcut(SubInsertTableList, 26, scex(_("IMT|Bb#b#B")));
+
+       int SubInsertFloatList;
+       //if (men->_view->currentBuffer()->params.columns == 1) {
+       // SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
+       //                               _("Floats%t"
+       //                                 "|Figure Float%x71"
+       //                                 "|Table Float%l%x72"
+       //                                 "|Algorithm Float%x73"));
+       //}
+       //else {
+         SubInsertFloatList = fl_defpup(FL_ObjWin(ob),
+                                        _("Floats%t"
+                                          "|Figure Float%x71"
+                                          "|Table Float%x72"
+                                          "|Wide Figure Float%x73"
+                                          "|Wide Table Float%l%x74"
+                                          "|Algorithm Float%x75"));
+         //}
+       fl_setpup_shortcut(SubInsertFloatList, 71, scex(_("IMF|gG#g#G")));
+       fl_setpup_shortcut(SubInsertFloatList, 72, scex(_("IMF|Tt#t#T")));
+       fl_setpup_shortcut(SubInsertFloatList, 73, scex(_("IMF|Ww#w#W")));
+       fl_setpup_shortcut(SubInsertFloatList, 74, scex(_("IMF|iI#i#I")));
+       fl_setpup_shortcut(SubInsertFloatList, 75, scex(_("IMF|Aa#a#A")));
+       
+       int SubInsertSpecial=fl_defpup(FL_ObjWin(ob),
+                                      _("Special Character%t"
+                                        "|HFill%x31"
+                                        "|Hyphenation Point%x32"
+                                        "|Protected Blank%x33"
+                                        "|Linebreak%x34"
+                                        "|Ellipsis (...)%x35"
+                                        "|End of sentence period%x36"
+                                        "|Ordinary Quote (\")%x37"
+                                        "|Menu Separator %x38"));
+
+       fl_setpup_shortcut(SubInsertSpecial, 31, scex(_("IMS|Hh#h#H")));
+       fl_setpup_shortcut(SubInsertSpecial, 32, scex(_("IMS|Pp#p#P")));
+       fl_setpup_shortcut(SubInsertSpecial, 33, scex(_("IMS|Bb#b#B")));
+       fl_setpup_shortcut(SubInsertSpecial, 34, scex(_("IMS|Ll#l#L")));
+       fl_setpup_shortcut(SubInsertSpecial, 35, scex(_("IMS|iI#i#I")));
+       fl_setpup_shortcut(SubInsertSpecial, 36, scex(_("IMS|Ee#e#E")));
+       fl_setpup_shortcut(SubInsertSpecial, 37, scex(_("IMS|Qq#q#Q")));
+       fl_setpup_shortcut(SubInsertSpecial, 38, scex(_("IMS|Mm#m#M")));
+       
+       int InsertMenu = fl_defpup(FL_ObjWin(ob),
+                                  _("Figure..."
+                                    "|Table...%l"
+                                    "|Include File..." 
+                                    "|Import ASCII File%m"
+                                    "|Insert LyX File...%l"
+                                    "|Footnote"
+                                    "|Margin Note"
+                                    "|Floats%m%l"      
+                                    "|Lists & TOC%m%l"
+                                    "|Special Character%m%l"
+                                    "|Note..."
+                                    "|Label..."
+                                    "|Cross-Reference..."
+                                    "|Citation Reference..."
+                                    "|Index entry..."
+                                    "|Index entry of last word"),
+                                  SubInsertAscii,
+                                  SubInsertFloatList,  
+                                  SubInsertTableList,
+                                  SubInsertSpecial);
+
+       fl_setpup_shortcut(InsertMenu, 1, scex(_("IM|gG#g#G")));
+       fl_setpup_shortcut(InsertMenu, 2, scex(_("IM|bB#b#B")));
+       fl_setpup_shortcut(InsertMenu, 3, scex(_("IM|cC#c#C")));
+       fl_setpup_shortcut(InsertMenu, 4, scex(_("IM|Aa#a#A")));
+       fl_setpup_shortcut(InsertMenu, 5, scex(_("IM|Xx#x#X")));
+       fl_setpup_shortcut(InsertMenu, 6, scex(_("IM|Ff#f#F")));
+       fl_setpup_shortcut(InsertMenu, 7, scex(_("IM|Mm#m#M")));
+       fl_setpup_shortcut(InsertMenu, 8, scex(_("IM|oO#o#O")));
+       fl_setpup_shortcut(InsertMenu, 9, scex(_("IM|Tt#t#T")));
+       fl_setpup_shortcut(InsertMenu, 10, scex(_("IM|Ss#s#S")));
+       fl_setpup_shortcut(InsertMenu, 11, scex(_("IM|Nn#n#N")));
+       fl_setpup_shortcut(InsertMenu, 12, scex(_("IM|Ll#l#L")));
+       fl_setpup_shortcut(InsertMenu, 13, scex(_("IM|rR#r#R")));     
+       fl_setpup_shortcut(InsertMenu, 14, scex(_("IM|iI#i#I")));
+       fl_setpup_shortcut(InsertMenu, 15, scex(_("IM|dD#d#D")));
+       fl_setpup_shortcut(InsertMenu, 16, scex(_("IM|wW#w#W")));
+
+#if 0
+       if (LinuxDoc) {
+               /* for linuxdoc sgml */
+#endif
+               fl_addtopup(InsertMenu, _("|URL..."));
+               fl_setpup_shortcut(InsertMenu, 17, scex(_("IM|Uu#u#U")));
+#if 0
+       }      
+#endif
+       if (tmpbuffer->isReadonly()) {
+                for (int ii = 1; ii <= 16; ii++)
+                       fl_setpup_mode(InsertMenu, ii, FL_PUP_GREY);
+#if 0
+                if (LinuxDoc) {
+#endif
+                        fl_setpup_mode(InsertMenu, 17, FL_PUP_GREY);
+#if 0
+                }
+#endif
+       }
+
+       fl_setpup_position(
+               men->_view->getForm()->x + ob->x,
+               men->_view->getForm()->y + ob->y + ob->h + 10);
+   
+       int choice = fl_dopup(InsertMenu);
+       XFlush(fl_display);
+
+       // set the pseudo menu-button back
+       fl_set_object_boxtype(ob, FL_FLAT_BOX);
+       fl_redraw_object(ob);
+
+       if (men->currentView()->available()){
+               men->currentView()->getScreen()->HideCursor();
+               switch (choice) {
+               case 1: tmpfunc->Dispatch(LFUN_FIGURE); break;
+               case 2: tmpfunc->Dispatch(LFUN_TABLE); break;
+               case 3: tmpfunc->Dispatch(LFUN_CHILDINSERT); break;
+               case 4: // Insert ASCII file submenu
+                       break;
+               case 5: tmpfunc->Dispatch(LFUN_FILE_INSERT); break;
+               case 41: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "line"); break;
+               case 42: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "paragraph"); break;
+               case 43: 
+                       break;
+
+               case 6: tmpfunc->Dispatch(LFUN_FOOTMELT); break
+;
+               case 7: tmpfunc->Dispatch(LFUN_MARGINMELT); break;
+  
+               case 8: // Float sub-menu
+                case 71:
+                       tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "figure");
+                       break;
+               case 72:
+                       tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "table");
+                       break;
+               case 73:
+                       tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-fig");
+                       break;
+               case 74:
+                       tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-tab");
+                       break;
+               case 75:
+                       tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "algorithm");
+                       break;
+
+               case 9: // Table/List submenu
+                       break;
+               case 21: tmpfunc->Dispatch(LFUN_TOC_INSERT); break;
+               case 22: tmpfunc->Dispatch(LFUN_LOF_INSERT); break;
+               case 23: tmpfunc->Dispatch(LFUN_LOT_INSERT); break;
+               case 24: tmpfunc->Dispatch(LFUN_LOA_INSERT); break;
+               case 25: tmpfunc->Dispatch(LFUN_INDEX_PRINT); break;
+               case 26: tmpfunc->Dispatch(LFUN_INSERT_BIBTEX); break;
+
+               case 10: // Special Character submenu
+                       break;
+               case 31: tmpfunc->Dispatch(LFUN_HFILL); break;
+               case 32: tmpfunc->Dispatch(LFUN_HYPHENATION); break;
+               case 33: tmpfunc->Dispatch(LFUN_PROTECTEDSPACE); break; 
+               case 34: tmpfunc->Dispatch(LFUN_BREAKLINE); break; 
+               case 35: tmpfunc->Dispatch(LFUN_LDOTS); break;
+               case 36: tmpfunc->Dispatch(LFUN_END_OF_SENTENCE); break;
+               case 37: tmpfunc->Dispatch(LFUN_QUOTE); break;
+               case 38: tmpfunc->Dispatch(LFUN_MENU_SEPARATOR); break;
+
+               case 11: tmpfunc->Dispatch(LFUN_INSERT_NOTE); break;
+               case 12: tmpfunc->Dispatch(LFUN_INSERT_LABEL); break;
+               case 13: tmpfunc->Dispatch(LFUN_INSERT_REF); break;
+               case 14: tmpfunc->Dispatch(LFUN_INSERT_CITATION); break;
+               case 15: tmpfunc->Dispatch(LFUN_INDEX_INSERT); break;
+               case 16: tmpfunc->Dispatch(LFUN_INDEX_INSERT_LAST); break;
+               case 17: tmpfunc->Dispatch(LFUN_URL); break;
+               }
+       }
+       fl_freepup(InsertMenu);
+       fl_freepup(SubInsertAscii);
+       fl_freepup(SubInsertTableList);
+       fl_freepup(SubInsertFloatList);
+       fl_freepup(SubInsertSpecial);
+}
+
+
+void Menus::ShowMathMenu(FL_OBJECT *ob, long)
+{
+       extern void math_insert_symbol(char const* s);
+
+       Menus *men = (Menus*) ob->u_ldata;
+
+       // set the pseudo menu-button
+       fl_set_object_boxtype(ob, FL_UP_BOX);
+       fl_set_button(ob, 0);
+       fl_redraw_object(ob);
+
+       Buffer *tmpbuffer = men->_view->currentBuffer();
+       LyXFunc *tmpfunc = men->_view->getLyXFunc();
+
+       int MathMenu = fl_defpup(FL_ObjWin(ob), 
+                                _("Fraction"
+                                "|Square root"
+                                "|Exponent"
+                                "|Index"
+                                "|Sum"
+                                "|Integral%l"
+                                "|Math mode"
+                                "|Display%l"
+                                "|Math Panel..."));
+
+       fl_setpup_shortcut(MathMenu, 1, scex(_("MM|Ff#f#F")));
+       fl_setpup_shortcut(MathMenu, 2, scex(_("MM|Ss#s#S")));
+       fl_setpup_shortcut(MathMenu, 3, scex(_("MM|Ee#e#E")));
+       fl_setpup_shortcut(MathMenu, 4, scex(_("MM|xX#x#X")));
+       fl_setpup_shortcut(MathMenu, 5, scex(_("MM|uU#u#U")));
+       fl_setpup_shortcut(MathMenu, 6, scex(_("MM|Ii#i#I")));
+       fl_setpup_shortcut(MathMenu, 7, scex(_("MM|Mm#m#M")));
+       fl_setpup_shortcut(MathMenu, 8, scex(_("MM|Dd#d#D")));
+       fl_setpup_shortcut(MathMenu, 9, scex(_("MM|Pp#p#P")));
+
+       if (tmpbuffer->isReadonly()) 
+                for (int ii = 1; ii <= 9; ii++)
+                       fl_setpup_mode(MathMenu, ii, FL_PUP_GREY);
+
+
+       fl_setpup_position(
+               men->_view->getForm()->x + ob->x,
+               men->_view->getForm()->y + ob->y + ob->h + 10);   
+       int choice = fl_dopup(MathMenu);  
+       XFlush(fl_display);
+
+       // set the pseudo menu-button back
+       fl_set_object_boxtype(ob, FL_FLAT_BOX);
+       fl_redraw_object(ob);
+
+       if (men->currentView()->available())  {
+               switch (choice) {
+               case 1: /* frac */
+                       tmpfunc->Dispatch(LFUN_INSERT_MATH, "frac");
+                       break;
+               case 2: /* sqrt */
+                       tmpfunc->Dispatch(LFUN_INSERT_MATH, "sqrt");
+                       break;
+               case 3: /* Exponent */ 
+                       tmpfunc->Dispatch(LFUN_INSERT_MATH, "^");
+                       break;
+               case 4: /* Index */
+                       tmpfunc->Dispatch(LFUN_INSERT_MATH, "_");
+                       break;
+               case 5: /* sum */ 
+                       tmpfunc->Dispatch(LFUN_INSERT_MATH, "sum");
+                       break;
+               case 6: /* int */
+                       tmpfunc->Dispatch(LFUN_INSERT_MATH, "int");
+                       break;
+               case 7:
+                       tmpfunc->Dispatch(LFUN_MATH_MODE);
+                       break;
+               case 8:
+                       tmpfunc->Dispatch(LFUN_MATH_DISPLAY);
+                       break;
+               case 9: /* Panel */
+                       show_symbols_form(tmpfunc);
+                       break;
+               }
+               tmpbuffer->update(0);
+       } 
+       fl_freepup(MathMenu);
+}
+
+
+void Menus::ShowOptionsMenu(FL_OBJECT *ob, long)
+{
+       Menus *men = (Menus*) ob->u_ldata;
+
+       // set the pseudo menu-button
+       fl_set_object_boxtype(ob, FL_UP_BOX);
+       fl_set_button(ob, 0);
+       fl_redraw_object(ob);
+
+       //Buffer *tmpbuffer = men->_view->currentBuffer();
+       LyXFunc *tmpfunc = men->_view->getLyXFunc();
+
+       int OptionsMenu = fl_defpup(FL_ObjWin(ob),
+                                   _("Screen Fonts..."
+                                   "|Spellchecker Options..."
+                                   "|Keyboard..."
+                                   "|LaTeX...%l"
+                                   "|Reconfigure" ));
+
+       fl_setpup_shortcut(OptionsMenu, 1, scex(_("OM|Ff#f#F")));
+       fl_setpup_shortcut(OptionsMenu, 2, scex(_("OM|Ss#s#S")));
+       fl_setpup_shortcut(OptionsMenu, 3, scex(_("OM|Kk#k#K")));
+       fl_setpup_shortcut(OptionsMenu, 4, scex(_("OM|Ll#l#L")));
+       fl_setpup_shortcut(OptionsMenu, 5, scex(_("OM|Rr#r#R")));
+
+       if(lyxrc->isp_command == "none") 
+               fl_setpup_mode(OptionsMenu, 2, FL_PUP_GREY);
+
+       fl_setpup_position(
+               men->_view->getForm()->x + ob->x,
+               men->_view->getForm()->y + ob->y + ob->h + 10);   
+       int choice = fl_dopup(OptionsMenu);
+       XFlush(fl_display);
+
+       // set the pseudo menu-button back
+       fl_set_object_boxtype(ob, FL_FLAT_BOX);
+       fl_redraw_object(ob);
+       switch (choice){
+       case 1: men->ScreenOptions(); break;
+       case 2: SpellCheckerOptions(); break;      
+       case 3: men->_view->getIntl()->MenuKeymap(); break;
+       case 4: LaTeXOptions(); break;
+       case 5: tmpfunc->Dispatch(LFUN_RECONFIGURE); break;
+       default: break;
+       }   
+       fl_freepup(OptionsMenu);
+}
+
+
+void Menus::ShowBufferMenu(FL_OBJECT *ob, long)
+{
+       Menus *men = (Menus*) ob->u_ldata;
+       
+       // set the pseudo menu-button
+       fl_set_object_boxtype(ob, FL_UP_BOX);
+       fl_set_button(ob, 0);
+       fl_redraw_object(ob);
+   
+       int BufferMenu = fl_newpup(FL_ObjWin(ob));
+       bufferlist.makePup(BufferMenu);
+   
+       fl_setpup_position(
+               men->_view->getForm()->x + ob->x,
+               men->_view->getForm()->y + ob->y + ob->h + 10);   
+       int choice = fl_dopup(BufferMenu);
+       XFlush(fl_display);
+
+       // set the pseudo menu-button back
+       fl_set_object_boxtype(ob, FL_FLAT_BOX);
+       fl_redraw_object(ob);
+       if (choice > 0) men->handleBufferMenu(choice);
+   
+       fl_freepup(BufferMenu);
+}
+
+
+static
+char const *doc_files [] = {"Intro", "Tutorial", 
+                           "UserGuide", "Extended",
+                           "Customization", "Reference",
+                           "BUGS", "LaTeXConfig"}; 
+
+void Menus::ShowHelpMenu(FL_OBJECT *ob, long)
+{
+       Menus *men = (Menus*) ob->u_ldata;
+
+       // set the pseudo menu-button
+       fl_set_object_boxtype(ob, FL_UP_BOX);
+       fl_set_button(ob, 0);
+       fl_redraw_object(ob);
+   
+       int HelpMenu = fl_defpup(FL_ObjWin(ob),
+                                _("Introduction"
+                                "|Tutorial"
+                                "|User's Guide"
+                                "|Extended Features"
+                                "|Customization"
+                                "|Reference Manual"
+                                "|Known Bugs"
+                                "|LaTeX Configuration%l"
+                                "|Copyright and Warranty..."
+                                "|Credits..."
+                                "|Version..."));
+   
+       fl_setpup_shortcut(HelpMenu,  1, scex(_("HM|Ii#I#i")));
+       fl_setpup_shortcut(HelpMenu,  2, scex(_("HM|Tt#T#t")));
+       fl_setpup_shortcut(HelpMenu,  3, scex(_("HM|Uu#U#u")));
+       fl_setpup_shortcut(HelpMenu,  4, scex(_("HM|xX#x#X")));
+       fl_setpup_shortcut(HelpMenu,  5, scex(_("HM|Cc#C#c")));
+       fl_setpup_shortcut(HelpMenu,  6, scex(_("HM|Rr#R#r")));
+       fl_setpup_shortcut(HelpMenu,  7, scex(_("HM|Kk#K#k")));
+       fl_setpup_shortcut(HelpMenu,  8, scex(_("HM|Ll#L#l")));
+       fl_setpup_shortcut(HelpMenu,  9, scex(_("HM|oO#o#O")));
+       fl_setpup_shortcut(HelpMenu, 10, scex(_("HM|eE#e#E")));
+       fl_setpup_shortcut(HelpMenu, 11, scex(_("HM|Vv#v#V")));
+
+       fl_setpup_position(
+               men->_view->getForm()->x + ob->x,
+               men->_view->getForm()->y + ob->y + ob->h + 10);   
+       int choice = fl_dopup(HelpMenu);
+       XFlush(fl_display);
+
+       // set the pseudo menu-button back
+       fl_set_object_boxtype(ob, FL_FLAT_BOX);
+       fl_redraw_object(ob);
+
+       switch (choice) {
+       case 1: case 2: case 3: case 4: case 5: 
+       case 6: case 7: case 8:
+               ProhibitInput();
+               men->MenuDocu(doc_files[choice - 1]);
+               AllowInput();
+               break;
+       case 9: ShowCopyright(); break;
+       case 10: ShowCredits(); break;
+       case 11:
+               ProhibitInput();
+               fl_show_message((LString(_("LyX Version ")) + LYX_VERSION 
+                                + _(" of ") + LYX_RELEASE).c_str(),
+                               (_("Library directory: ")
+                                + MakeDisplayPath(system_lyxdir)).c_str(),
+                               (_("User directory: ") 
+                                + MakeDisplayPath(user_lyxdir)).c_str());
+               AllowInput();
+               break;
+       }
+       fl_freepup(HelpMenu);
+}
+
+
+void Menus::MenuDocu(LString const &docname) 
+{
+       LString fname = i18nLibFileSearch("doc", docname, "lyx");
+       _view->getMiniBuffer()->Set(_("Opening help file"),
+                                   MakeDisplayPath(fname),"...");
+       currentView()->setBuffer(bufferlist.loadLyXFile(fname,false));
+
+       if (docname == "Reference")
+               _view->getLyXFunc()->Dispatch(LFUN_TOCVIEW);
+}
+
+
+void Menus::handleBufferMenu(int choice)
+{
+       currentView()->setBuffer(bufferlist.getBuffer(choice));
+}
diff --git a/src/menus.h b/src/menus.h
new file mode 100644 (file)
index 0000000..64bbc6c
--- /dev/null
@@ -0,0 +1,101 @@
+// -*- C++ -*-
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995 1996 Matthias Ettrich
+*           and the LyX Team.
+*
+*======================================================*/
+
+#ifndef _MENUS_H
+#define _MENUS_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+#include "lyx.h"
+
+class BufferView;
+class LyXView;
+class LString;
+
+///
+class Menus {
+public:
+       ///
+       Menus(LyXView *view, int air);
+       ///
+       void showMenus();
+       ///
+       void hideMenus();
+       ///
+       void openByName(LString const &menuName);
+private:
+       ///
+       void create_menus(int air);
+       ///
+       void ScreenOptions();
+       ///
+       void showCopyright();
+       ///
+       void showLicense();
+       ///
+       void MenuDocu(LString const & docname);
+       ///
+       void handleBufferMenu(int choice);
+       
+       ///
+       static void ShowFileMenu(FL_OBJECT *ob, long);
+       ///
+       static void ShowFileMenu2(FL_OBJECT *ob, long);
+       ///
+       static void ShowEditMenu(FL_OBJECT *ob, long data);
+       ///
+       static void ShowLayoutMenu(FL_OBJECT *ob, long data);
+       ///
+       static void ShowInsertMenu(FL_OBJECT *ob, long data);
+       ///
+       static void ShowMathMenu(FL_OBJECT *ob, long);
+       ///
+       static void ShowOptionsMenu(FL_OBJECT *ob, long men);
+       ///
+       static void ShowBufferMenu(FL_OBJECT *ob, long);
+       ///
+       static void ShowHelpMenu(FL_OBJECT *ob, long);
+       /// 
+       BufferView *currentView();
+       ///
+       LyXView *_view;
+       ///
+       FL_OBJECT *menu_grp1;
+       ///
+       FL_OBJECT *menu_grp2;
+       ///
+       FL_OBJECT *menu_file;
+       ///
+       FL_OBJECT *menu_file2;
+       ///
+       FL_OBJECT *menu_edit;
+       ///
+       FL_OBJECT *menu_layout;
+       ///
+       FL_OBJECT *menu_insert;
+       ///
+       FL_OBJECT *menu_math;
+       ///
+        FL_OBJECT *menu_options;
+       ///
+        FL_OBJECT *menu_options2;
+       ///
+       FL_OBJECT *menu_buffer;
+       ///
+       FL_OBJECT *menu_help;
+       ///
+       FL_OBJECT *menu_help2;
+};
+
+#endif
diff --git a/src/minibuffer.C b/src/minibuffer.C
new file mode 100644 (file)
index 0000000..226180e
--- /dev/null
@@ -0,0 +1,281 @@
+/* ###########################################################################
+ *
+ *                 The MiniBuffer Class
+ *                 read minibuffer.h for more
+ *                 information.
+ * 
+ *           Copyright (C) 1995 Matthias Ettrich
+ *           Copyright (C) 1995-1998 The LyX Team.  
+ * 
+ * ###########################################################################
+ */
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "minibuffer.h"
+#endif
+
+#include "filetools.h"
+#include "lyx_main.h" 
+#include "lyxfunc.h"
+#include FORMS_H_LOCATION
+#include "minibuffer.h"  
+#include "LyXView.h"
+#include "error.h"
+#include "gettext.h"
+
+//     $Id: minibuffer.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $        
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: minibuffer.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+extern bool keyseqUncomplete();
+extern LString keyseqOptions(int l=190);
+extern LString keyseqStr(int l=190);
+extern LyXAction lyxaction;
+
+void MiniBuffer::TimerCB(FL_OBJECT *, long tmp)
+{
+       MiniBuffer *obj= (MiniBuffer*)tmp;
+       obj->Init();
+}
+
+
+void MiniBuffer::ExecutingCB(FL_OBJECT *ob, long)
+{
+       MiniBuffer *obj = (MiniBuffer*)ob->u_vdata;
+       lyxerr.debug("Getting ready to execute: " + obj->cur_cmd);
+       fl_set_focus_object(obj->owner->getForm(),
+                           obj->owner->currentView()->getWorkArea());
+       if (obj->cur_cmd.empty()) { 
+               obj->Init();
+               return ; 
+       }
+       obj->Set(_("Executing:"), obj->cur_cmd);
+       obj->addHistory(obj->cur_cmd);
+       
+       // Split command into function and argument
+       // This is done wrong Asger. Instead of <function argument>
+       // it ends up as <argument function> Queer solution:
+       LString arg = obj->cur_cmd;
+       LString function;
+       if (arg.contains(" ")) {
+               arg.split(function, ' ');
+               function.strip();
+       } else {
+               function = arg;
+               arg.clean();
+       }
+       lyxerr.debug("Function: " + function);
+       lyxerr.debug("Arg     : " + arg);
+       // Check if the name is valid (ale)
+       // No, let the dispatch functions handle that.
+       //int action = lyxaction.LookupFunc(function.c_str());
+       //lyxerr.debug(LString("minibuffer action: ") + action);
+       //if (action>=0) {
+           // Dispatch only returns requested data for a few commands (ale)
+       LString res=obj->owner->getLyXFunc()->Dispatch(function.c_str(),
+                                                      arg.c_str());
+       lyxerr.debug(LString("Minibuffer Res: ") + res);
+/*     if (!res.empty())
+               if(obj->owner->getLyXFunc()->errorStat())
+                       obj->Set(_("Error:"), _(res.c_str()), LString(), 4);
+               else
+                       obj->Set(_("Result:"), _(res.c_str()), LString(), 4);
+       else
+               obj->Init();
+*/
+       //} else {
+#ifdef WITH_WARNINGS
+#warning Look at this.
+#endif
+       //obj->Set(_("Cannot find function"), function, "!");
+       obj->shows_no_match = false;
+       //}
+
+       return ;
+}
+
+
+void MiniBuffer::ExecCommand()
+{
+       text.clean();
+       fl_set_input(the_buffer, "");
+       fl_set_focus_object(owner->getForm(),the_buffer);
+}
+
+
+FL_OBJECT *MiniBuffer::add(int type, FL_Coord x, FL_Coord y,
+                          FL_Coord w, FL_Coord h)
+{
+       FL_OBJECT *obj;
+       
+       the_buffer = obj = fl_add_input(type,x,y,w,h,text.c_str());
+        fl_set_object_boxtype(obj,FL_DOWN_BOX);
+        fl_set_object_resize(obj, FL_RESIZE_ALL);
+        fl_set_object_gravity(obj, SouthWestGravity, SouthEastGravity);
+        fl_set_object_color(obj,FL_MCOL,FL_MCOL);
+        fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+       fl_set_object_callback(obj,ExecutingCB, 0);
+
+       // To intercept Up, Down, Table for history
+        fl_set_object_prehandler(obj, peek_event);
+        obj->u_vdata = (void*)this;
+        obj->wantkey = FL_KEY_TAB;
+       
+       // timer
+       timer = fl_add_timer(FL_HIDDEN_TIMER, 0,0,0,0, "Timer");
+       fl_set_object_callback(timer, TimerCB, (long)this);
+       fl_set_input(the_buffer, text.c_str());
+
+       return obj;
+}
+
+
+// Added optional arg `delay_secs', defaults to 4.
+//When 0, no timeout is done. RVDK_PATCH_5 
+void MiniBuffer::Set(LString const& s1, LString const& s2,
+                    LString const& s3, int delay_secs)
+{
+       setTimer(delay_secs);
+
+       LString ntext = s1 + ' ' + s2 + ' ' + s3;
+       ntext.strip(' ');
+
+       if (!the_buffer->focus) {
+               fl_set_input(the_buffer, ntext.c_str());
+               XFlush(fl_display);
+               text = ntext;
+       }
+}
+
+
+void MiniBuffer::Init()
+{
+       // If we have focus, we don't want to change anything.
+       if (the_buffer->focus)
+               return;
+
+       // When meta-fake key is pressed, show the key sequence so far + "M-".
+       if (owner->getLyXFunc()->wasMetaKey()) {
+               text = owner->getLyXFunc()->keyseqStr();
+               text += " M-";
+       }
+
+       // Else, when a non-complete key sequence is pressed,
+       // show the available options.
+       else if (owner->getLyXFunc()->keyseqUncomplete()) 
+               text = owner->getLyXFunc()->keyseqOptions();
+   
+       // Else, show the buffer state.
+       else if (owner->currentView()->available()) {
+                       LString nicename =
+                               MakeDisplayPath(owner->currentBuffer()->
+                                               getFileName());
+                       // Should we do this instead? (kindo like emacs)
+                       // leaves more room for other information
+                       text = "LyX: ";
+                       text += nicename;
+                       if (owner->currentBuffer()->lyxvc.inUse()) {
+                               text += " [RCS:";
+                               text += owner->currentBuffer()->lyxvc.getVersion();
+                               text += ' ';
+                               text += owner->currentBuffer()->lyxvc.getLocker();
+                               if (owner->currentBuffer()->isReadonly())
+                                       text += " (RO)";
+                               text += ']';
+                       } else if (owner->currentBuffer()->isReadonly())
+                               text += " [RO]";
+                       if (!owner->currentBuffer()->isLyxClean())
+                               text += _(" (Changed)");
+       } else {
+               if (text != "Welcome to LyX!") // this is a hack
+                       text = _("* No document open *");
+       }
+       
+
+       fl_set_input(the_buffer, text.c_str());
+       setTimer(0);
+       XFlush(fl_display);
+}
+
+
+// allows to store and reset the contents one time. Usefull for
+// status messages like "load font" (Matthias)
+void MiniBuffer::Store()
+{
+       text_stored = fl_get_input(the_buffer);
+}
+
+
+void MiniBuffer::Reset()
+{
+       if (!text_stored.empty()){
+               Set(text_stored);
+               text_stored.clean();
+       }
+}
+
+void MiniBuffer::Activate()
+{
+       fl_activate_object(the_buffer);
+       fl_redraw_object(the_buffer);
+}
+
+void MiniBuffer::Deactivate()
+{
+       fl_deactivate_object(the_buffer);
+}
+
+
+// This is not as dirty as it seems, the hidden buttons removed by this
+// function were just kludges for an uncomplete keyboard callback (ale)
+int MiniBuffer::peek_event(FL_OBJECT *ob, int event, FL_Coord, FL_Coord,
+                          int key, void */*xev*/)
+{
+       MiniBuffer *mini = (MiniBuffer*)ob->u_vdata;
+       
+       if (event==FL_KEYBOARD){
+               switch (key) {
+               case XK_Down:
+                       mini->history_idx++;
+                       if (!mini->getHistory().empty()) {
+                               fl_set_input(ob, mini->getHistory().c_str());
+                       } else
+                               mini->history_idx--;
+                       return 1; 
+               case XK_Up:
+                       if (mini->history_idx > 0) mini->history_idx--;
+                       fl_set_input(ob, mini->getHistory().c_str());
+                       return 1; 
+               case 9:
+               case XK_Tab:
+               {
+                       // complete or increment the command
+                       const char *s = lyxaction.getApproxFuncName(fl_get_input(ob));
+                       if (s && s[0])
+                               fl_set_input(ob, s);
+                       return 1; 
+               }
+               case 27:
+               case XK_Escape:
+                       // Abort
+                       fl_set_focus_object(mini->owner->getForm(),
+                                           mini->owner->currentView()->getWorkArea());
+                       mini->Init();
+                       return 1; 
+               case 13:
+               case XK_Return:
+                       // Execute a command. 
+                       mini->cur_cmd = LString(fl_get_input(ob));
+                       ExecutingCB(ob, 0);
+                       return 1;
+               default:
+                       return 0;
+               }
+       }
+       return 0;
+}
+
diff --git a/src/minibuffer.h b/src/minibuffer.h
new file mode 100644 (file)
index 0000000..495b004
--- /dev/null
@@ -0,0 +1,93 @@
+// -*- C++ -*-
+#ifndef _MINIBUFFER_H
+#define _MINIBUFFER_H
+
+#include FORMS_H_LOCATION
+#include "LString.h"
+#include "gettext.h"
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+class LyXView;
+
+///
+class MiniBuffer {
+public:
+       ///
+       MiniBuffer(LyXView *o, FL_Coord x, FL_Coord y, FL_Coord h, FL_Coord w)
+               : owner(o)
+       {
+               text = _("Welcome to LyX!");
+               shows_no_match = true;
+               history_idx = history_cnt = 0;
+               add(FL_NORMAL_INPUT, x, y, h, w);
+       }
+       ///
+       bool shows_no_match;
+       ///
+       void setTimer(int a) {
+               fl_set_timer(timer, a);
+       }
+       ///
+       void Set(LString const& = LString(),
+                LString const& = LString(),
+                LString const& = LString(),
+                int delay_secs=6);
+       /// 
+       LString GetText() const { return text; }
+       ///
+       void Init();
+       ///
+       void ExecCommand();
+       /** allows to store and reset the contents one time. Usefull
+         for status messages like "load font" (Matthias)
+         */
+       void Store();
+       ///
+       void Reset();
+       ///
+       void Activate();
+       ///
+       void Deactivate();
+private:
+       ///
+       LyXView *owner;
+       ///
+       LString text;
+       ///
+       LString text_stored;
+       ///
+       FL_OBJECT *add(int, FL_Coord, FL_Coord, FL_Coord, FL_Coord);
+       ///
+       static void ExecutingCB(FL_OBJECT *ob, long);
+       ///
+       static void TimerCB(FL_OBJECT *ob, long);
+       ///
+        static int  peek_event(FL_OBJECT *, int, FL_Coord, FL_Coord,
+                              int, void *);
+        ///
+       FL_OBJECT *timer;
+       ///
+       FL_OBJECT *the_buffer;
+       ///
+       LString cur_cmd;
+        ///
+        enum{ MAX_HISTORY = 10 };
+        ///
+        LString history[MAX_HISTORY];
+        ///
+        int history_idx, history_cnt;
+        ///
+        void addHistory(LString const &cmd) { 
+               if (history_cnt==0 || (history_cnt>0 && cmd!=history[(history_cnt-1) % MAX_HISTORY])) {
+                   history[history_cnt % MAX_HISTORY] = cmd;
+                   history_cnt++;
+               }
+               history_idx = history_cnt;
+       }
+        ///
+        LString getHistory() { return history[history_idx % MAX_HISTORY]; }
+};
+#endif
diff --git a/src/nt_defines.h b/src/nt_defines.h
new file mode 100644 (file)
index 0000000..496d022
--- /dev/null
@@ -0,0 +1,19 @@
+/* -*- C++ -*- */
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, the High Level Word Processor
+ *        
+ *           Copyright (C) 1995Matthias Ettrich
+ *           Copyright (C) 1995-1998 The LyX Team.
+ *
+ * ======================================================
+ A few prototypes and definitions needed for Windows NT */
+
+/* Hacks to get LyX running under Win-NT w. Cygnus b19 (steven@cs.uu.nl) */
+
+#ifndef NT_DEFINES_H
+#define NT_DEFINES_H
+
+
+#endif /* NT_DEFINES_H */
diff --git a/src/os2_defines.h b/src/os2_defines.h
new file mode 100644 (file)
index 0000000..02525f9
--- /dev/null
@@ -0,0 +1,47 @@
+/* -*- C++ -*- */
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995,1996 Matthias Ettrich
+*
+*======================================================
+ A few prototypes and definitions needed for OS/2 */
+
+#ifndef _OS2_DEFINES_H
+#define _OS2_DEFINES_H
+
+#include <ctype.h>
+#include <process.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <X11/Xlocale.h>
+/* #include <assert.h> */
+/* #include <malloc.h> */
+#define lstat stat
+#define S_ISLNK(x) false
+#define S_ISBLK(x) false
+#define readlink(s,t,l) (strcpy(t,s),strlen(t))
+/*#define mkfifo(p,m) (0) *//* LyXserver is temporary disabled. */
+#define getcwd _getcwd2
+#define chdir _chdir2
+#define strcasecmp stricmp
+#if defined (__cplusplus)
+extern "C" {
+#endif
+const char* __XOS2RedirRoot(const char* pathname);
+#if defined (__cplusplus)
+}
+#endif
+#undef LYX_DIR
+#define LYX_DIR __XOS2RedirRoot("/XFree86/lib/X11/lyx")
+#undef LOCALEDIR
+#define LOCALEDIR __XOS2RedirRoot("/XFree86/lib/X11/locale")
+#undef TOP_SRCDIR
+#define TOP_SRCDIR ".."
+/* I have the slightest idea what I am doing here... */
+#define bindtextdomain bindtextdomain__
+#define textdomain textdomain__
+
+#endif /* _OS2_DEFINES_H */
diff --git a/src/os2_errortable.h b/src/os2_errortable.h
new file mode 100644 (file)
index 0000000..12ef894
--- /dev/null
@@ -0,0 +1,98 @@
+/* -*- C++ -*- */
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*        
+*           Copyright (C) 1995,1996 Matthias Ettrich
+*
+*======================================================
+ A table for translating OS/2 API return code into errno.
+ Copied from emx library source.                        */
+
+#ifndef _OS2_ERRORTABLE_H
+#define _OS2_ERRORTABLE_H
+#ifndef _ERRNO_H
+#include <errno.h>
+#endif
+
+static unsigned char const errno_tab[] =
+{
+  EINVAL, EINVAL, ENOENT, ENOENT, EMFILE,  /* 0..4 */
+  EACCES, EBADF,  EIO,    ENOMEM, EIO,     /* 5..9 */
+  EINVAL, ENOEXEC,EINVAL, EINVAL, EINVAL,  /* 10..14 */
+  ENOENT, EBUSY,  EXDEV,  ENOENT, EROFS,   /* 15..19 */
+  EIO,    EIO,    EIO,    EIO,    EIO,     /* 20..24 */
+  EIO,    EIO,    EIO,    ENOSPC, EIO,     /* 25..29 */
+  EIO,    EIO,    EACCES, EACCES, EIO,     /* 30..34 */
+  EIO,    EIO,    EIO,    EIO,    ENOSPC,  /* 35..39 */
+  EIO,    EIO,    EIO,    EIO,    EIO,     /* 40..44 */
+  EIO,    EIO,    EIO,    EIO,    EIO,     /* 45..49 */
+  EIO,    EIO,    EIO,    EIO,    EBUSY,   /* 50..54 */
+  EIO,    EIO,    EIO,    EIO,    EIO,     /* 55..59 */
+  EIO,    ENOSPC, ENOSPC, EIO,    EIO,     /* 60..64 */
+  EACCES, EIO,    EIO,    EIO,    EIO,     /* 65..69 */
+  EIO,    EIO,    EIO,    EROFS,  EIO,     /* 70..74 */
+  EIO,    EIO,    EIO,    EIO,    EIO,     /* 75..79 */
+  EEXIST, EIO,    ENOENT, EIO,    EIO,     /* 80..84 */
+  EIO,    EIO,    EINVAL, EIO,    EAGAIN,  /* 85..89 */
+  EIO,    EIO,    EIO,    EIO,    EIO,     /* 90..94 */
+  EINTR,  EIO,    EIO,    EIO,    EACCES,  /* 95..99 */
+  ENOMEM, EINVAL, EINVAL, ENOMEM, EINVAL,  /* 100..104 */
+  EINVAL, ENOMEM, EIO,    EACCES, EPIPE,   /* 105..109 */
+  ENOENT, E2BIG,  ENOSPC, ENOMEM, EINVAL,  /* 110..114 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 115..119 */
+  EINVAL, EINVAL, EINVAL, ENOENT, EINVAL,  /* 120..124 */
+  ENOENT, ENOENT, ENOENT, ECHILD, ECHILD,  /* 125..129 */
+  EACCES, EINVAL, ESPIPE, EINVAL, EINVAL,  /* 130..134 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 135..139 */
+  EINVAL, EINVAL, EBUSY,  EINVAL, EINVAL,  /* 140..144 */
+  EINVAL, EINVAL, EINVAL, EBUSY,  EINVAL,  /* 145..149 */
+  EINVAL, EINVAL, ENOMEM, EINVAL, EINVAL,  /* 150..154 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 155..159 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EAGAIN,  /* 160..164 */
+  EINVAL, EINVAL, EACCES, EINVAL, EINVAL,  /* 165..169 */
+  EBUSY,  EINVAL, EINVAL, EINVAL, EINVAL,  /* 170..174 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 175..179 */
+  EINVAL, EINVAL, EINVAL, EINVAL, ECHILD,  /* 180..184 */
+  EINVAL, EINVAL, ENOENT, EINVAL, EINVAL,  /* 185..189 */
+  ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC, /* 190..194 */
+  ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC,ENOEXEC, /* 195..199 */
+  ENOEXEC,ENOEXEC,ENOEXEC,ENOENT, EINVAL,  /* 200..204 */
+  EINVAL, ENAMETOOLONG, EINVAL, EINVAL, EINVAL,  /* 205..209 */
+  EINVAL, EINVAL, EACCES, ENOEXEC,ENOEXEC, /* 210..214 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 215..219 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 220..224 */
+  EINVAL, EINVAL, EINVAL, ECHILD, EINVAL,  /* 225..229 */
+  EINVAL, EBUSY,  EAGAIN, ENOTCONN, EINVAL, /* 230..234 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 235..239 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 240..244 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 245..249 */
+  EACCES, EACCES, EINVAL, ENOENT, EINVAL,  /* 250..254 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 255..259 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 260..264 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 265..269 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 270..274 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 275..279 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EEXIST,  /* 280..284 */
+  EEXIST, EINVAL, EINVAL, EINVAL, EINVAL,  /* 285..289 */
+  ENOMEM, EMFILE, EINVAL, EINVAL, EINVAL,  /* 290..294 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,  /* 295..299 */
+  EINVAL, EBUSY,  EINVAL, ESRCH,  EINVAL,  /* 300..304 */
+  ESRCH,  EINVAL, EINVAL, EINVAL, ESRCH,   /* 305..309 */
+  EINVAL, ENOMEM, EINVAL, EINVAL, EINVAL,  /* 310..314 */
+  EINVAL, E2BIG,  ENOENT, EIO,    EIO,     /* 315..319 */
+  EINVAL, EINVAL, EINVAL, EINVAL, EAGAIN,  /* 320..324 */
+  EINVAL, EINVAL, EINVAL, EIO,    ENOENT,  /* 325..329 */
+  EACCES, EACCES, EACCES, ENOENT, ENOMEM   /* 330..334 */
+};
+
+inline int TranslateOS2Error(unsigned long rc)
+{
+       if (rc >= sizeof (errno_tab))
+               return EINVAL;
+       else
+               return errno_tab[rc];
+}
+
+#endif /* _OS2_ERRORTABLE_H */
diff --git a/src/paragraph.C b/src/paragraph.C
new file mode 100644 (file)
index 0000000..4ab9eac
--- /dev/null
@@ -0,0 +1,3896 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team. 
+*
+*======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "lyxparagraph.h"
+#endif
+
+#include "lyxparagraph.h"
+#include "lyxrc.h"
+#include "layout.h"
+#include "tex-strings.h"
+#include "bufferparams.h"
+#include "FileInfo.h"
+#include "error.h"
+#include "LaTeXFeatures.h"
+#include "insets/insetinclude.h"
+#include "filetools.h"
+#include "lyx_gui_misc.h"
+#include "texrow.h"
+
+//     $Id: paragraph.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $ 
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: paragraph.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+#define INITIAL_SIZE_PAR 10 /*Number of bytes in one paragraph*/
+#define STEP_SIZE_PAR 10 /*Number of bytes added when reallocated*/
+
+extern void addNewlineAndDepth(LString & file, int const depth); // Jug 990923
+extern unsigned char GetCurrentTextClass(); // this should be fixed/removed
+int tex_code_break_column = 72;  // needs non-zero initialization. set later.
+// this is a bad idea, but how can LyXParagraph find its buffer to get
+// parameters? (JMarc)
+extern BufferView *current_view;
+extern LyXRC *lyxrc;
+
+
+// ale970405
+extern LString bibitemWidthest();
+
+/* this is a minibuffer */
+static char minibuffer_char;
+static LyXFont minibuffer_font;
+static Inset *minibuffer_inset;
+
+
+// Initialization of the counter for the paragraph id's,
+// declared in lyxparagraph.h
+unsigned int LyXParagraph::paragraph_id = 0;
+
+
+LyXParagraph::LyXParagraph()
+{
+       size = INITIAL_SIZE_PAR;
+       last = 0;
+       text = new char[size];
+       for (int i=0; i<10; i++) setCounter(i , 0);
+       appendix = false;
+       enumdepth = 0;
+       itemdepth = 0;
+       next = NULL;
+       previous = NULL;
+       fonttable = NULL;
+       insettable = NULL;
+       footnoteflag = LyXParagraph::NO_FOOTNOTE;
+
+       align = LYX_ALIGN_BLOCK;
+
+       /* table stuff -- begin*/ 
+       table = NULL;
+       /* table stuff -- end*/ 
+       id = paragraph_id++;
+        bibkey = NULL; // ale970302
+       Clear();
+}
+
+
+/* this konstruktor inserts the new paragraph in a list */ 
+LyXParagraph::LyXParagraph(LyXParagraph *par)
+{
+       size = INITIAL_SIZE_PAR;
+       last = 0;
+       text = new char[size];
+       for (int i=0; i<10; i++) setCounter(i, 0);
+       appendix = false;
+       enumdepth = 0;
+       itemdepth = 0;
+       next = par->next;
+       if (next)
+               next->previous = this;
+       previous = par;
+       previous->next = this;
+       fonttable = NULL;
+       insettable = NULL;
+       footnoteflag = LyXParagraph::NO_FOOTNOTE;
+       footnotekind = LyXParagraph::FOOTNOTE;
+       
+       /* table stuff -- begin*/ 
+       table = NULL;
+       /* table stuff -- end*/ 
+       id = paragraph_id++;
+
+        bibkey = NULL; // ale970302        
+        // ale970302
+//        fprintf(stderr, "new bib "); fflush(stderr);    
+//        if (par->bibkey) {
+//         bibkey = new InsetBibKey(par->bibkey);
+//        }
+    
+       Clear();
+}
+
+/// Used by the spellchecker
+bool LyXParagraph::IsLetter(int pos){
+       unsigned char c = GetChar(pos);
+       if (IsLetterChar(c))
+               return true;
+       // '\0' is not a letter, allthough every string contains "" (below)
+       if( c == '\0')
+               return false;
+       // We want to pass the ' and escape chars to ispell
+       LString extra = lyxrc->isp_esc_chars + '\'';
+       char ch[2];
+       ch[0] = c;
+       ch[1] = 0;
+       return extra.contains(ch);
+}
+
+
+void LyXParagraph::writeFile(FILE *file, BufferParams &params,
+                            char footflag, char dth)
+{
+       LyXFont font1, font2;
+       Inset *inset;
+       int column = 0;
+       int h = 0;
+       char c = 0;
+
+       if (footnoteflag != LyXParagraph::NO_FOOTNOTE
+           || !previous
+           || previous->footnoteflag == LyXParagraph::NO_FOOTNOTE){
+               
+               /* The beginning or the end of a footnote environment? */ 
+               if (footflag != footnoteflag) {
+                       footflag = footnoteflag;
+                       if (footflag) {
+                               fprintf(file, "\n\\begin_float %s ", 
+                                       string_footnotekinds[footnotekind]);
+                       }
+                       else {
+                               fprintf(file, "\n\\end_float ");
+                       }
+               }
+
+               /* The beginning or end of a deeper (i.e. nested) area? */
+               if (dth != depth) {
+                       if (depth > dth) {
+                               while (depth > dth) {
+                                       fprintf(file, "\n\\begin_deeper ");
+                                       dth++;
+                               }
+                       }
+                       else {
+                               while (depth < dth) {
+                                       fprintf(file, "\n\\end_deeper ");
+                                       dth--;
+                               }
+                       }
+               }
+
+               /* First write the layout */ 
+               fprintf(file, "\n\\layout %s\n",
+                       lyxstyle.NameOfLayout(params.textclass,layout).c_str());
+
+               /* maybe some vertical spaces */ 
+               if (added_space_top.kind() != VSpace::NONE)
+                       fprintf(file, "\\added_space_top %s ", 
+                               added_space_top.asLyXCommand().c_str());
+               if (added_space_bottom.kind() != VSpace::NONE)
+                       fprintf(file, "\\added_space_bottom %s ",
+                               added_space_bottom.asLyXCommand().c_str());
+                       
+               /* The labelwidth string used in lists */
+               if (!labelwidthstring.empty())
+                       fprintf(file, "\\labelwidthstring %s\n",
+                               labelwidthstring.c_str());
+
+               /* Lines above or below? */
+               if (line_top)
+                       fprintf(file, "\\line_top ");
+               if (line_bottom)
+                       fprintf(file, "\\line_bottom ");
+
+               /* Pagebreaks above or below? */
+               if (pagebreak_top)
+                       fprintf(file, "\\pagebreak_top ");
+               if (pagebreak_bottom)
+                       fprintf(file, "\\pagebreak_bottom ");
+                       
+               /* Start of appendix? */
+               if (start_of_appendix)
+                       fprintf(file, "\\start_of_appendix ");
+
+               /* Noindent? */
+               if (noindent)
+                       fprintf(file, "\\noindent ");
+                       
+               /* Alignment? */
+               if (align != LYX_ALIGN_LAYOUT) {
+                       switch (align) {
+                       case LYX_ALIGN_LEFT: h = 1; break;
+                       case LYX_ALIGN_RIGHT: h = 2; break;
+                       case LYX_ALIGN_CENTER: h = 3; break;
+                       default: h = 0; break;
+                       }
+                       fprintf(file, "\\align %s ", string_align[h]);
+               }
+                if (pextra_type != PEXTRA_NONE) {
+                        fprintf(file, "\\pextra_type %d", pextra_type);
+                        if (pextra_type == PEXTRA_MINIPAGE) {
+                               fprintf(file, " \\pextra_alignment %d",
+                                       pextra_alignment);
+                               if (pextra_hfill)
+                                       fprintf(file, " \\pextra_hfill %d",
+                                               pextra_hfill);
+                               if (pextra_start_minipage)
+                                       fprintf(file, " \\pextra_start_minipage %d",
+                                               pextra_start_minipage);
+                        }
+                        if (!pextra_width.empty()) {
+                               fprintf(file, " \\pextra_width %s",
+                                        VSpace(pextra_width).asLyXCommand().c_str());
+                        } else if (!pextra_widthp.empty()) {
+                               fprintf(file, " \\pextra_widthp %s",pextra_widthp.c_str());
+                        }
+                        fprintf(file,"\n");
+                }
+       }
+       else {
+               /* Dummy layout. This means that a footnote ended */
+               fprintf(file, "\n\\end_float ");
+               footflag = LyXParagraph::NO_FOOTNOTE;
+       }
+               
+       /* It might be a table */ 
+       if (table){
+               fprintf(file, "\\LyXTable\n");
+               table->Write(file);
+       }
+
+       // bibitem  ale970302
+       if (bibkey)
+               bibkey->Write(file);
+
+       font1 = LyXFont(LyXFont::ALL_INHERIT);
+
+       column = 0;
+       for (int i = 0; i < last; i++) {
+               if (!i){
+                       fprintf(file, "\n");
+                       column = 0;
+               }
+
+               // Write font changes
+               font2 = GetFontSettings(i);
+               if (font2 != font1) {
+                       font2.lyxWriteChanges(font1, file);
+                       column = 0;
+                       font1 = font2;
+               }
+
+               c = GetChar(i);
+               switch (c) {
+               case LYX_META_INSET:
+                       inset = GetInset(i);
+                       if (inset)
+                               if (inset->DirectWrite()) {
+                                       // international char, let it write
+                                       // code directly so it's shorter in
+                                       // the file
+                                       inset->Write(file);
+                               } else {
+                                       fprintf(file, "\n\\begin_inset ");
+                                       inset->Write(file);
+                                       fprintf(file, "\n\\end_inset \n");
+                                       fprintf(file, "\n");
+                                       column = 0;
+                               }
+                       break;
+               case LYX_META_NEWLINE: 
+                       fprintf(file, "\n\\newline \n");
+                       column = 0;
+                       break;
+               case LYX_META_HFILL: 
+                       fprintf(file, "\n\\hfill \n");
+                       column = 0;
+                       break;
+               case LYX_META_PROTECTED_SEPARATOR: 
+                       fprintf(file, "\n\\protected_separator \n");
+                       column = 0;
+                       break;
+               case '\\': 
+                       fprintf(file, "\n\\backslash \n");
+                       column = 0;
+                       break;
+               case '.':
+                       if (i + 1 < last && GetChar(i + 1) == ' ') {
+                               fprintf(file, ".\n");
+                               column = 0;
+                       } else
+                               fprintf(file, ".");
+                       break;
+               default:
+                       if ((column > 70 && c==' ')
+                           || column > 79){
+                               fprintf(file, "\n");
+                               column = 0;
+                       }
+                       // this check is to amend a bug. LyX sometimes
+                       // inserts '\0' this could cause problems.
+                       if (c != '\0')
+                               fprintf(file, "%c", c);
+                       else
+                               lyxerr.print("ERROR (LyXParagraph::writeFile):"
+                                            " NULL char in structure.");
+                       column++;
+                       break;
+               }
+       }
+
+       // now write the next paragraph
+       if (next)
+               next->writeFile(file, params, footflag, dth);
+}
+
+
+void LyXParagraph::validate(LaTeXFeatures &features)
+{
+       // this will be useful later
+       LyXLayout *layout = lyxstyle.Style(GetCurrentTextClass(), 
+                                          GetLayout());
+       
+       // check the params.
+       if (line_top || line_bottom)
+               features.lyxline = true;
+       
+       // then the layouts
+       features.layout[GetLayout()] = true;
+
+       // then the fonts
+       FontTable *tmpfonttable = fonttable;
+       while (tmpfonttable) {
+               if (tmpfonttable->font.noun() == LyXFont::ON) {
+                       lyxerr.debug(LString("font.noun: ") 
+                                    + int(tmpfonttable->font.noun()),
+                                    Error::LATEX);
+                       features.noun = true;
+                       lyxerr.debug("Noun enabled. Font: "
+                                    +tmpfonttable->font.stateText(),
+                                    Error::LATEX);
+               }
+               switch (tmpfonttable->font.color()) {
+               case LyXFont::NONE: 
+               case LyXFont::INHERIT_COLOR:
+               case LyXFont::IGNORE_COLOR:
+                       break;
+               default:
+                       features.color = true;
+                       lyxerr.debug("Color enabled. Font: "
+                                    +tmpfonttable->font.stateText(),
+                                    Error::LATEX);
+               }
+               tmpfonttable = tmpfonttable->next;
+       }
+       
+       // then the insets
+       InsetTable *tmpinsettable = insettable;
+       while (tmpinsettable) {
+               if (tmpinsettable->inset) {
+                       tmpinsettable->inset->Validate(features);
+               }
+               tmpinsettable = tmpinsettable->next;
+       }
+        if (table && table->IsLongTable())
+               features.longtable = true;
+        if (pextra_type == PEXTRA_INDENT)
+                features.LyXParagraphIndent = true;
+        if (pextra_type == PEXTRA_FLOATFLT)
+                features.floatflt = true;
+        if (layout->needprotect 
+           && next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE)
+               features.NeedLyXFootnoteCode = true;
+        if ((current_view->currentBuffer()->params.paragraph_separation == LYX_PARSEP_INDENT) &&
+            (pextra_type == PEXTRA_MINIPAGE))
+               features.NeedLyXMinipageIndent = true;
+        if (table && table->NeedRotating())
+               features.rotating = true;
+       if (footnoteflag != NO_FOOTNOTE && footnotekind == ALGORITHM)
+               features.algorithm = true;
+}
+
+
+/* first few functions needed for cut and paste and paragraph breaking */
+void LyXParagraph::CopyIntoMinibuffer(int pos)
+{
+       minibuffer_char = GetChar(pos);
+       minibuffer_font = GetFontSettings(pos);
+       minibuffer_inset = 0;
+       if (minibuffer_char == LYX_META_INSET) {
+               if (GetInset(pos)) {
+                       minibuffer_inset = GetInset(pos)->Clone();
+               } else {
+                       minibuffer_inset = NULL;
+                       minibuffer_char = ' ';
+                       // This reflects what GetInset() does (ARRae)
+               }
+       }
+}
+
+
+void LyXParagraph::CutIntoMinibuffer(int pos)
+{
+       minibuffer_char = GetChar(pos);
+       minibuffer_font = GetFontSettings(pos);
+       minibuffer_inset = 0;
+       if (minibuffer_char == LYX_META_INSET) {
+               if (GetInset(pos)) {
+                       minibuffer_inset = GetInset(pos);
+                       /* This is a little hack since I want exactly the inset,
+                          not just a clone. Otherwise the inset would be deleted
+                          when calling Erase(pos) */
+                       
+                       /* find the entry */ 
+                       InsetTable *tmpi = insettable;
+                       while (tmpi && tmpi->pos != pos) {
+                               tmpi=tmpi->next;
+                       }
+                       if (tmpi) {  /* This should always be true */
+                               tmpi->inset = NULL;
+                       }
+               } else {
+                       minibuffer_inset = NULL;
+                       minibuffer_char = ' ';
+                       // This reflects what GetInset() does (ARRae)
+               }
+
+       }
+
+       /* Erase(pos); now the caller is responsible for that*/
+}
+
+
+void LyXParagraph::InsertFromMinibuffer(int pos)
+{
+       InsertChar(pos, minibuffer_char);
+       SetFont(pos, minibuffer_font);
+       if (minibuffer_char == LYX_META_INSET)
+               InsertInset(pos, minibuffer_inset);
+}
+
+/* end of minibuffer */ 
+
+
+
+void LyXParagraph::Clear()
+{
+       line_top = false;
+       line_bottom = false;
+   
+       pagebreak_top = false;
+       pagebreak_bottom = false;
+
+       added_space_top = VSpace(VSpace::NONE);
+       added_space_bottom = VSpace(VSpace::NONE);
+
+       align = LYX_ALIGN_LAYOUT;
+       depth = 0;
+       noindent = false;
+
+        pextra_type = PEXTRA_NONE;
+        pextra_width.clean();
+        pextra_widthp.clean();
+        pextra_alignment = MINIPAGE_ALIGN_TOP;
+        pextra_hfill = false;
+        pextra_start_minipage = false;
+
+        labelstring.clean();
+       labelwidthstring.clean();
+       layout = 0;
+       bibkey = NULL;
+       
+       start_of_appendix = false;
+}
+
+
+/* the destructor removes the new paragraph from the list */ 
+LyXParagraph::~LyXParagraph()
+{
+       if (previous)
+               previous->next = next;
+       if (next)
+               next->previous = previous;
+
+       if (text)
+               delete[] text;
+   
+       InsetTable *tmpinset;
+       while (insettable) {
+               tmpinset = insettable;
+               insettable = insettable->next;
+               if (tmpinset->inset)
+                       delete tmpinset->inset;
+               delete tmpinset;
+               if (insettable && insettable->next == insettable) {
+                       // somehow this recursion appears occasionally
+                       // but I can't find where.  This bandaid
+                       // helps but isn't the best fix. (ARRae)
+                       if (insettable->inset) {
+                               delete insettable->inset;
+                       }
+                       delete insettable;
+                       break;
+               }
+       }
+
+       FontTable *tmpfont;
+       while (fonttable) {
+               tmpfont = fonttable;
+               fonttable = fonttable->next;
+               delete tmpfont;
+       }
+
+       /* table stuff -- begin*/ 
+       if (table)
+               delete table;
+       /* table stuff -- end*/ 
+
+        // ale970302
+       if (bibkey)
+               delete bibkey;
+}
+
+
+void LyXParagraph::Erase(int pos)
+{
+       int i;
+
+       /* > because last is the next unused position, and you can 
+        * use it if you want  */
+       if (pos > last) {
+               if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) 
+                       NextAfterFootnote()->Erase(pos - last - 1);
+               else 
+                       lyxerr.debug("ERROR (LyXParagraph::Erase): position does not exist.");
+               return;
+       }
+       if (pos < last) { // last is free for insertation, but should be empty
+      
+               /* if it is an inset, delete the inset entry */ 
+               if (text[pos] == LYX_META_INSET) {
+                       /* find the entry */ 
+                       InsetTable *tmpi = insettable;
+                       InsetTable *tmpi2 = tmpi;
+                       while (tmpi && tmpi->pos != pos) {
+                               tmpi2=tmpi;
+                               tmpi=tmpi->next;
+                       }
+                       if (tmpi) {     // this should always be true
+                               if (tmpi->inset) // delete the inset if it exists
+                                       delete tmpi->inset;
+                               if (tmpi == insettable)
+                                       insettable = tmpi->next;
+                               else 
+                                       tmpi2->next = tmpi->next;
+                               delete tmpi;
+                       }
+               }
+
+               // Shift rest of text      
+               for (i = pos; i < last - 1; i++) {
+                       text[i]=text[i+1];
+               }
+               last--;
+
+               /* erase entries in the tables */ 
+               int found = 0;
+               FontTable *tmp = fonttable;
+               FontTable *prev = NULL;
+               while (tmp && !found) {
+                       if (pos >= tmp->pos && pos <= tmp->pos_end)
+                               found = 1;
+                       else {
+                               prev = tmp;
+                               tmp = tmp->next;
+                       }
+               }
+      
+               if (found && tmp->pos == tmp->pos_end) {  
+                       /* if it is a multi-character font entry, we just make 
+                        * it smaller (see update below), otherwise we should 
+                        * delete it */
+                       if (prev)
+                               prev->next = tmp->next;
+                       else
+                               fonttable = tmp->next;
+        
+                       delete tmp;
+               }
+
+               /* update all other entries */
+
+               tmp = fonttable;
+               while (tmp) {
+                       if (tmp->pos > pos)
+                               tmp->pos--;
+                       if (tmp->pos_end >= pos)
+                               tmp->pos_end--;
+                       tmp = tmp->next;
+               }
+      
+               /* update the inset table */ 
+               InsetTable *tmpi = insettable;
+               while (tmpi) {
+                       if (tmpi->pos > pos)
+                               tmpi->pos--;
+                       tmpi=tmpi->next;
+               }
+      
+       } else {
+               lyxerr.print("ERROR (LyXParagraph::Erase): can't erase non-existant char.");
+       }
+}
+
+
+/* pos is needed to specify the paragraph correctly. Remember the
+* closed footnotes */ 
+void LyXParagraph::Enlarge(int pos, int number)
+{
+       int i;
+
+       /* > because last is the next unused position, and you can 
+        * use it if you want  */
+       if (pos > last) {
+               if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) 
+                       NextAfterFootnote()->Enlarge(pos - last - 1, number);
+               else 
+                       lyxerr.print("ERROR (LyXParagraph::Enlarge): position does not exist.");
+               return;
+       }
+
+       if (size - last < number) {
+               size += number - size + last + STEP_SIZE_PAR;
+               char *tmp = new char[size];
+               for (i = 0; i < last; i++)
+                       tmp[i] = text[i];
+               delete[] text;
+               text = tmp;
+       }
+}
+
+
+/* make the allocated memory fit to the needed size */
+/* used to make a paragraph smaller */
+void LyXParagraph::FitSize()
+{
+       int i;
+  
+       if (size - last > STEP_SIZE_PAR) {
+               size = last + STEP_SIZE_PAR;
+               char *tmp = new char[size];
+               for (i = 0; i < last; i++)
+                       tmp[i] = text[i];
+               delete[] text;
+               text = tmp;
+       }
+}
+
+
+void LyXParagraph::InsertChar(int pos, char c)
+{
+       register int i;
+   
+       /* > because last is the next unused position, and you can 
+        * use it if you want  */
+       if (pos > last) {
+               if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) 
+                       NextAfterFootnote()->InsertChar(pos - last - 1, c);
+               else 
+                       lyxerr.debug("ERROR (LyXParagraph::InsertChar): "
+                                    "position does not exist.");
+               return;
+       }
+
+       // Are we full? If so, enlarge.
+       if (last == size) {
+               size += STEP_SIZE_PAR;
+               char *tmp = new char[size];
+               for (i = 0; i < last; i++)
+                       tmp[i] = text[i];
+               delete[] text;
+               text = tmp;
+       }
+
+       // Shift rest of character
+       for (i = last; i>pos; i--) {
+               text[i]=text[i-1];
+       }
+
+       text[pos]=c;
+       last++;
+   
+       /* update the font table */ 
+       FontTable *tmp = fonttable;
+       while (tmp) {
+               if (tmp->pos >= pos)
+                       tmp->pos++;
+               if (tmp->pos_end >= pos)
+                       tmp->pos_end++;
+               tmp = tmp->next;
+       }
+   
+       /* update the inset table */ 
+       InsetTable *tmpi = insettable;
+       while (tmpi) {
+               if (tmpi->pos >= pos)
+                       tmpi->pos++;
+               tmpi=tmpi->next;
+       }
+}
+
+
+void LyXParagraph::InsertInset(int pos, Inset *inset)
+{
+       /* > because last is the next unused position, and you can 
+        * use it if you want  */
+       if (pos > last) {
+               if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) 
+                       NextAfterFootnote()->InsertInset(pos - last - 1, inset);
+               else 
+                       lyxerr.print("ERROR (LyXParagraph::InsertInset): " 
+                                    "position does not exist: " + pos);
+               return;
+       }
+
+       if (text[pos]!=LYX_META_INSET) {
+               lyxerr.print("ERROR (LyXParagraph::InsertInset): "
+                            "there is no LYX_META_INSET");
+               return;
+       }
+
+       if (inset) {
+               /* add a new entry in the inset table */ 
+               InsetTable *tmpi = new InsetTable;
+               tmpi->pos = pos;
+               tmpi->inset = inset;
+               tmpi->next = insettable;
+               insettable = tmpi;
+       }
+}
+
+
+Inset* LyXParagraph::GetInset(int pos)
+{
+       if (pos >= last) {
+               if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) 
+                       return NextAfterFootnote()->GetInset(pos - last - 1);
+               else { 
+                       lyxerr.print(LString("ERROR (LyXParagraph::GetInset): position does not exist: ") + pos);
+               }
+               return NULL;
+       }
+
+       /* find the inset */ 
+       InsetTable *tmpi = insettable;
+
+       while (tmpi && tmpi->pos != pos)
+               tmpi = tmpi->next;
+
+       if (tmpi)
+               return tmpi->inset;
+       else {
+               lyxerr.print(LString("ERROR (LyXParagraph::GetInset): "
+                                    "Inset does not exist: ") + pos);
+               text[pos] = ' '; /// WHY!!! does this set the pos to ' '????
+               // Did this commenting out introduce a bug? So far I have not
+               // seen any, please enlighten me. (Lgb)
+               // My guess is that since the inset does not exist, we might
+               // as well replace it with a space to prevent crashes. (Asger)
+               return NULL;
+       }
+}
+
+
+// Gets uninstantiated font setting at position.
+// Optimized after profiling. (Asger)
+LyXFont LyXParagraph::GetFontSettings(int pos)
+{
+       if (pos < last) {
+               FontTable *tmp = fonttable;
+               while (tmp) {
+                       if (pos >= tmp->pos && pos <= tmp->pos_end) 
+                               return tmp->font;
+                       tmp = tmp->next;
+               }
+       }
+
+       /* > because last is the next unused position, and you can 
+        * use it if you want  */
+       else if (pos > last) {
+               if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) 
+                       return NextAfterFootnote()->GetFontSettings(pos - last - 1);
+               else {
+                       // Why is it an error to ask for the font of a
+                       // position that does not exist? Would it be
+                       // enough for this to be anable on debug?
+                       // We want strict error checking, but it's ok to only
+                       // have it when debugging. (Asger)
+                       lyxerr.print(
+                               LString("ERROR (LyXParagraph::GetFontSettings): "
+                                       "position does not exist. ") + pos);
+               }
+       } else if (pos) {
+               return GetFontSettings(pos - 1);
+       }
+       return LyXFont(LyXFont::ALL_INHERIT);
+}
+
+
+// Gets the fully instantiated font at a given position in a paragraph
+// This is basically the same function as LyXText::GetFont() in text2.C.
+// The difference is that this one is used for generating the LaTeX file,
+// and thus cosmetic "improvements" are disallowed: This has to deliver
+// the true picture of the buffer. (Asger)
+// If position is -1, we get the layout font of the paragraph.
+// If position is -2, we get the font of the manual label of the paragraph.
+LyXFont LyXParagraph::getFont(int pos)
+{
+       LyXFont tmpfont;
+       LyXLayout *layout = lyxstyle.Style(GetCurrentTextClass(), 
+                                          GetLayout());
+   
+       int main_body=0;
+       if (layout->labeltype == LABEL_MANUAL)
+               main_body = BeginningOfMainBody();
+
+       if (pos >= 0){
+               LyXFont layoutfont;
+               if (pos < main_body)
+                       layoutfont = layout->labelfont;
+               else
+                       layoutfont = layout->font;
+               tmpfont = GetFontSettings(pos);
+               tmpfont.realize(layoutfont);
+       } else {
+               // process layoutfont for pos == -1 and labelfont for pos < -1
+               if (pos == -1)
+                       tmpfont = layout->font;
+               else
+                       tmpfont = layout->labelfont;
+       }
+
+       // check for environment font information
+       char par_depth = GetDepth();
+       LyXParagraph * par = this;
+       while (par && par_depth && !tmpfont.resolved()) {
+               par = par->DepthHook(par_depth - 1);
+               if (par) {
+                       tmpfont.realize(lyxstyle.
+                                       Style(GetCurrentTextClass(),
+                                             par->GetLayout())->font);
+                       par_depth = par->GetDepth();
+               }
+       }
+
+       tmpfont.realize(lyxstyle.TextClass(GetCurrentTextClass())->defaultfont);
+       return tmpfont;
+}
+
+
+/// Returns the height of the highest font in range
+LyXFont::FONT_SIZE LyXParagraph::HighestFontInRange(int startpos, int endpos) const
+{
+       LyXFont::FONT_SIZE maxsize = LyXFont::SIZE_TINY;
+
+       FontTable *tmp = fonttable;
+       while (tmp) {
+               if (startpos <= tmp->pos_end && endpos >= tmp->pos) {
+                       LyXFont::FONT_SIZE size = tmp->font.size();
+                       if (size > maxsize && size<=LyXFont::SIZE_HUGER)
+                               maxsize = size;
+               }
+               tmp = tmp->next;
+       }
+       return maxsize;
+}
+
+
+char LyXParagraph::GetChar(int pos)
+{
+#ifdef DEVEL_VERSION
+       /* a workaround to 'fix' some bugs in text-class */
+       if (pos < 0) {
+               // This function is important. It should not work around bugs.
+               // Let's find the bugs instead and fix them. (Asger)
+               lyxerr.print(LString("FATAL ERROR (LyXParagraph::GetChar):"
+                                    " bad position ") + pos);
+               abort();
+       }
+#endif
+
+       if (pos < last) {
+               return text[pos];
+       }
+
+       /* > because last is the next unused position, and you can 
+        * use it if you want  */
+       else if (pos > last) {
+               if (next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE) 
+                       return NextAfterFootnote()->GetChar(pos - last - 1);
+               else 
+                       lyxerr.print("ERROR (LyXParagraph::GetChar): "
+                                    "position does not exist.");
+               return '\0';
+       } else { // pos==last
+               /* we should have a footnote environment */ 
+               if (!next || next->footnoteflag == LyXParagraph::NO_FOOTNOTE) {
+// Notice that LyX does request the last char from time to time. (Asger)
+//                     lyxerr.print("ERROR (LyXParagraph::GetChar): "
+//                                   "expected footnote.");
+                       return '\0';
+               }
+               switch (next->footnotekind) {
+               case LyXParagraph::FOOTNOTE:
+                       return LYX_META_FOOTNOTE;
+               case LyXParagraph::MARGIN:
+                       return LYX_META_MARGIN;
+               case LyXParagraph::FIG:
+               case LyXParagraph::WIDE_FIG:
+                       return LYX_META_FIG;
+               case LyXParagraph::TAB:
+               case LyXParagraph::WIDE_TAB:
+                       return LYX_META_TAB;
+               case LyXParagraph::ALGORITHM:
+                       return LYX_META_ALGORITHM;
+               }
+//             if (next->footnotekind == LyXParagraph::FOOTNOTE)
+//                     return LYX_META_FOOTNOTE;
+//             if (next->footnotekind == LyXParagraph::MARGIN)
+//                     return LYX_META_MARGIN;
+//             if (next->footnotekind == LyXParagraph::FIG)
+//                     return LYX_META_FIG;
+//             if (next->footnotekind == LyXParagraph::TAB)
+//                     return LYX_META_TAB;
+//             if (next->footnotekind == LyXParagraph::ALGORITHM)
+//                     return LYX_META_ALGORITHM;
+//             lyxerr.print("ERROR (LyXParagraph::GetChar): "
+//                           "unknown footnote kind.");
+//             return 'F';             /* this should not happen!  */
+               // This _can_ not happen, due to the type of next->footnotekind
+               // being LyXParagraph::footnot_kind
+               return '\0'; // to shut up gcc
+       }
+}
+
+
+LString LyXParagraph::GetWord(int & lastpos)
+
+
+  //Added 98/9/21 by REH
+  // return an LString of the current word, and the end of the word
+  // in lastpos.
+
+  // the current word is defined as starting at the first character from
+  // the immediate left of lastpospos which meets the definition of IsLetter(),
+  // continuing to the last character to the right of this meeting
+  // IsLetter.
+
+
+  // i just left this in from GetChar()
+{
+#ifdef DEVEL_VERSION
+       /* a workaround to 'fix' some bugs in text-class */
+       if (lastpos < 0) {
+               // This function is important. It should not work around bugs.
+               // Let's find the bugs instead and fix them. (Asger)
+               lyxerr.print(LString("FATAL ERROR (LyXParagraph::GetWord):"
+                                    " bad position ") + lastpos);
+               abort();
+       }
+#endif
+
+       LString theword;
+
+       // grab a word
+       
+       
+       //i think the devcode aborts before this, but why not be
+       // versatile?
+       if (lastpos < 0) lastpos=0; 
+
+       
+       // move back until we have a letter
+
+       //there's no real reason to have firstpos & lastpos as
+       //separate variables as this is written, but maybe someon
+       // will want to return firstpos in the future.
+
+       //since someone might have typed a punctuation first
+       int firstpos = lastpos;
+       
+       while ((firstpos >=0) && !IsLetter(firstpos))
+               firstpos--;
+
+       // now find the beginning by looking for a nonletter
+       
+       while ((firstpos>=0) && IsLetter(firstpos))
+               firstpos--;
+
+       // the above is now pointing to the preceeding non-letter
+       firstpos++;
+       lastpos=firstpos;
+
+       // so copy characters into theword  until we get a nonletter
+       // note that this can easily exceed lastpos, wich means
+       // that if used in the middle of a word, the whole word
+       // is included
+
+       while (IsLetter(lastpos)) theword += GetChar(lastpos++);
+       
+       return  theword;
+
+}
+
+
+int LyXParagraph::Last()
+{
+       if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
+               return last + NextAfterFootnote()->Last() + 1;   /* the 1 is the symbol
+                                                                 * for the footnote */
+       else
+               return last;
+}
+
+
+LyXParagraph *LyXParagraph::ParFromPos(int pos)
+{
+       /* > because last is the next unused position, and you can 
+        * use it if you want  */
+       if (pos > last) {
+               if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) 
+                       return NextAfterFootnote()->ParFromPos(pos - last - 1);
+               else 
+                       lyxerr.print("ERROR (LyXParagraph::ParFromPos): "
+                                    "position does not exist.");
+               return this;
+       }
+       else
+               return this;
+}
+
+
+int LyXParagraph::PositionInParFromPos(int pos)
+{
+       /* > because last is the next unused position, and you can 
+        * use it if you want  */
+       if (pos > last) {
+               if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) 
+                       return NextAfterFootnote()->PositionInParFromPos(pos - last - 1);
+               else 
+                       lyxerr.print(
+                               "ERROR (LyXParagraph::PositionInParFromPos): "
+                               "position does not exist.");
+               return pos;
+       }
+       else
+               return pos;
+}
+
+
+void LyXParagraph::SetFont(int pos, LyXFont const & font)
+{
+       /* > because last is the next unused position, and you can 
+        * use it if you want  */
+       if (pos > last) {
+               if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
+                       NextAfterFootnote()->SetFont(pos - last - 1, font);
+               } else {
+                       lyxerr.print("ERROR (LyXParagraph::SetFont): "
+                                    "position does not exist.");
+               }
+               return;
+       }
+
+       LyXFont patternfont(LyXFont::ALL_INHERIT);
+
+// First, reduce font against layout/label font
+// Update: The SetCharFont() routine in text2.C already reduces font, so
+// we don't need to do that here. (Asger)
+// No need to simplify this because it will disappear in a new kernel. (Asger)
+
+       // Next search font table
+       FontTable *tmp2;
+
+       bool found = false;
+       FontTable *tmp = fonttable;
+       while (tmp && !found) {
+               if (pos >= tmp->pos && pos <= tmp->pos_end)
+                       found = true;
+               else
+                       tmp = tmp->next;
+       }
+
+       if (!found) {
+               /* if we did not find a font entry, but if the font at hand
+                * is the same as default, we just forget it */
+               if (font == patternfont)
+                       return;
+
+               /* ok, we did not find a font entry. But maybe there is exactly
+                * the needed font entry one position left */ 
+               found = false;
+               tmp2 = fonttable;
+               while (tmp2 && !found) {
+                       if (pos - 1 >= tmp2->pos && pos - 1 <= tmp2->pos_end)
+                               found = true;
+                       else
+                               tmp2 = tmp2->next;
+               }
+               if (found) {
+                       /* ok there is one. maybe it is exactly the needed font */
+                       if (tmp2->font == font) {
+                               /* put the position under the font */ 
+                               tmp2->pos_end++;
+                               return;
+                       }
+               }
+               /* Add a new entry in the 
+                * fonttable for the position */
+               tmp = new FontTable;
+               tmp->pos = pos;
+               tmp->pos_end = pos;
+               tmp->font = patternfont;
+               tmp->next = fonttable;
+               fonttable = tmp;
+       }
+       else {
+               /* we found a font entry. maybe we have to split it and create
+                * a new one */ 
+
+               if (tmp->pos != tmp->pos_end) {  /* more than one character  */
+
+                       if (pos == tmp->pos) {
+                               /* maybe we could enlarge the left fonttable */ 
+
+                               found = false;
+                               tmp2 = fonttable;
+                               while (tmp2 && !found) {
+                                       if (pos - 1 >= tmp2->pos && pos - 1 <= tmp2->pos_end)
+                                               found = true;
+                                       else
+                                               tmp2 = tmp2->next;
+                               }
+
+                               /* Is there is one, and is it exactly the needed font? */
+                               if (found && tmp2->font == font) {
+                                       /* put the position under the font */ 
+                                       tmp2->pos_end++;
+                                       tmp->pos++;
+                                       return;
+                               }
+
+                               /* Add a new entry in the 
+                                * fonttable for the position */
+                               tmp2 = new FontTable;
+                               tmp2->pos = pos + 1;
+                               tmp2->pos_end = tmp->pos_end;
+                               tmp2->font = tmp->font;
+                               tmp->pos_end = pos;
+                               tmp2->next = fonttable;
+                               fonttable = tmp2;
+                       }
+                       else if (pos == tmp->pos_end) {
+                               /* Add a new entry in the 
+                                * fonttable for the position */
+                               tmp2 = new FontTable;
+                               tmp2->pos = tmp->pos;
+                               tmp2->pos_end = tmp->pos_end - 1;
+                               tmp2->font = tmp->font;
+                               tmp->pos = tmp->pos_end;
+                               tmp2->next = fonttable;
+                               fonttable = tmp2;
+                       }
+                       else {
+                               /* Add a new entry in the 
+                                * fonttable for the position */
+                               tmp2 = new FontTable;
+                               tmp2->pos = tmp->pos;
+                               tmp2->pos_end = pos - 1;
+                               tmp2->font = tmp->font;
+                               tmp2->next = fonttable;
+                               fonttable = tmp2;
+           
+                               tmp2 = new FontTable;
+                               tmp2->pos = pos + 1;
+                               tmp2->pos_end = tmp->pos_end;
+                               tmp2->font = tmp->font;
+                               tmp2->next = fonttable;
+                               fonttable = tmp2;
+           
+                               tmp->pos = pos;
+                               tmp->pos_end = pos;
+                       }
+               }
+       }
+
+       tmp->font = font;
+}
+
+   
+/* this function is able to hide closed footnotes */
+LyXParagraph *LyXParagraph::Next()
+{
+       LyXParagraph *tmp;
+       if (next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
+               tmp = next;
+               while (tmp && tmp->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
+                       tmp = tmp->next;
+               if (tmp && tmp->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE) 
+                       return tmp->Next(); /* there can be more than one footnote
+                                            * in a logical paragraph */
+               else
+                       return next;    /* this should never happen! */
+       }
+       else
+               return next;
+}
+
+
+LyXParagraph *LyXParagraph::NextAfterFootnote()
+{
+       LyXParagraph *tmp;
+       if (next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
+               tmp = next;
+               while (tmp && tmp->footnoteflag != LyXParagraph::NO_FOOTNOTE)
+                       tmp = tmp->next;
+               if (tmp && tmp->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE) 
+                       return tmp;            /* there can be more than one footnote
+                                               * in a logical paragraph */
+               else
+                       return next;                   /* this should never happen! */
+       }
+       else
+               return next;
+}
+
+
+LyXParagraph *LyXParagraph::PreviousBeforeFootnote()
+{
+       LyXParagraph *tmp;
+       if (previous && previous->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
+               tmp = next;
+               while (tmp && tmp->footnoteflag != LyXParagraph::NO_FOOTNOTE)
+                       tmp = tmp->previous;
+               if (tmp && tmp->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE) 
+                       return tmp;            /* there can be more than one footnote
+                                               * in a logical paragraph */
+               else
+                       return previous;                       /* this should never happen! */
+       }
+       else
+               return previous;
+}
+
+
+LyXParagraph *LyXParagraph::LastPhysicalPar()
+{
+       LyXParagraph *tmp;
+       if (footnoteflag != LyXParagraph::NO_FOOTNOTE)
+               return this;
+   
+       tmp = this;
+       while (tmp->next && tmp->next->footnoteflag != LyXParagraph::NO_FOOTNOTE)
+               tmp = tmp->NextAfterFootnote();
+   
+       return tmp;
+   
+}
+
+
+LyXParagraph *LyXParagraph::FirstPhysicalPar()
+{
+       if (!IsDummy())
+               return this;
+       LyXParagraph *tmppar = this;
+
+       while (tmppar && (tmppar->IsDummy()
+                         || tmppar->footnoteflag != LyXParagraph::NO_FOOTNOTE))
+               tmppar = tmppar->previous;
+   
+       if (!tmppar)
+               return this;           /* this should never happen!  */
+       else
+               return tmppar;
+}
+
+
+/* this function is able to hide closed footnotes */
+LyXParagraph *LyXParagraph::Previous()
+{
+       LyXParagraph *tmp = previous;
+       if (!tmp)
+               return tmp;
+   
+       if (tmp->previous && tmp->previous->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
+               tmp = tmp->previous;
+               while (tmp && tmp->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
+                       tmp = tmp->previous;
+               if (tmp && tmp->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE) 
+                       return tmp->next->Previous();   
+
+               else
+                       return previous; 
+       }
+       else
+               return previous;
+}
+
+   
+void LyXParagraph::BreakParagraph(int pos, int flag)
+{
+       int i, pos_end, pos_first;
+
+       /* create a new paragraph */
+       LyXParagraph *par = ParFromPos(pos);
+       LyXParagraph *firstpar = FirstPhysicalPar();
+   
+       LyXParagraph *tmp = new LyXParagraph(par);
+   
+       tmp->footnoteflag = footnoteflag;
+       tmp->footnotekind = footnotekind;
+   
+       /* this is an idea for a more userfriendly layout handling, I will
+        * see what the users say */
+   
+       /* layout stays the same with latex-environments */ 
+       if (flag) {
+               tmp->SetOnlyLayout(firstpar->layout);
+               tmp->SetLabelWidthString(firstpar->labelwidthstring);
+       }
+
+       if (Last() > pos || !Last() || flag == 2) {
+               tmp->SetOnlyLayout(firstpar->layout);
+               tmp->align = firstpar->align;
+               tmp->SetLabelWidthString(firstpar->labelwidthstring);
+      
+               tmp->line_bottom = firstpar->line_bottom;
+               firstpar->line_bottom = false;
+               tmp->pagebreak_bottom = firstpar->pagebreak_bottom;
+               firstpar->pagebreak_bottom = false;
+               tmp->added_space_bottom = firstpar->added_space_bottom;
+               firstpar->added_space_bottom = VSpace(VSpace::NONE);
+      
+               tmp->depth = firstpar->depth;
+               tmp->noindent = firstpar->noindent;
+   
+               /* copy everything behind the break-position to the new paragraph */
+               pos_first = 0;
+               while (ParFromPos(pos_first) != par)
+                       pos_first++;
+   
+               pos_end = pos_first + par->last - 1;
+   
+               /* make sure there is enough memory for the now larger
+                  paragraph. This is not neccessary, because
+                  InsertFromMinibuffer will enlarge the memory (it uses
+                  InsertChar of course). But doing it by hand
+                  is MUCH faster! (only one time, not thousend times!!) */
+
+               tmp->Enlarge(0, pos_end - pos);
+
+               for (i = pos; i <= pos_end; i++) {
+                       par->CutIntoMinibuffer(i - pos_first);
+                       tmp->InsertFromMinibuffer(i - pos);
+               }
+
+               for (i = pos_end; i >= pos; i--)
+                       par->Erase(i - pos_first);
+               /* free memory of the now shorter paragraph*/
+               par->FitSize();
+       }
+
+       /* just an idea of me */ 
+       if (!pos) {
+               tmp->line_top = firstpar->line_top;
+               tmp->pagebreak_top = firstpar->pagebreak_top;
+               tmp->added_space_top = firstpar->added_space_top;
+               tmp->bibkey = firstpar->bibkey;
+               firstpar->Clear();
+               /* layout stays the same with latex-environments */ 
+               if (flag) {
+                       firstpar->SetOnlyLayout(tmp->layout);
+                       firstpar->SetLabelWidthString(tmp->labelwidthstring);
+                       firstpar->depth = tmp->depth;
+               }
+       }
+}
+
+
+void LyXParagraph::MakeSameLayout(LyXParagraph *par)
+{
+       par = par->FirstPhysicalPar();
+       footnoteflag = par->footnoteflag;
+       footnotekind = par->footnotekind;
+
+       layout = par->layout;
+       align = par-> align;
+       SetLabelWidthString(par->labelwidthstring);
+
+       line_bottom = par->line_bottom;
+       pagebreak_bottom = par->pagebreak_bottom;
+       added_space_bottom = par->added_space_bottom;
+
+       line_top = par->line_top;
+       pagebreak_top = par->pagebreak_top;
+       added_space_top = par->added_space_top;
+
+        pextra_type = par->pextra_type;
+        pextra_width = par->pextra_width;
+        pextra_widthp = par->pextra_widthp;
+        pextra_alignment = par->pextra_alignment;
+        pextra_hfill = par->pextra_hfill;
+        pextra_start_minipage = par->pextra_start_minipage;
+
+       noindent = par->noindent;
+       depth = par->depth;
+}
+
+
+LyXParagraph *LyXParagraph::FirstSelfrowPar()
+{
+       LyXParagraph *tmppar;
+   
+       tmppar = this;
+       while (tmppar && (
+               (tmppar->IsDummy() && tmppar->previous->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
+               || tmppar->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE))
+               tmppar = tmppar->previous;
+   
+       if (!tmppar)
+               return this;           /* this should never happen!  */
+       else
+               return tmppar;
+}
+
+
+LyXParagraph *LyXParagraph::Clone()
+{
+       int i;
+   
+       /* create a new paragraph */
+       LyXParagraph *result = new LyXParagraph();
+   
+       result->MakeSameLayout(this);
+
+       /* this is because of the dummy layout of the paragraphs that
+          follow footnotes */
+       result->layout = layout;
+   
+       /* table stuff -- begin*/ 
+       if (table)
+               result->table = table->Clone();
+       else
+               result->table = NULL;
+       /* table stuff -- end*/ 
+   
+        // ale970302
+        result->bibkey = (bibkey) ? new InsetBibKey(bibkey): 0;
+               
+    
+       /* copy everything behind the break-position to the new paragraph */
+   
+       /* make shure there is enough memory for the now larger paragraph.
+        * This is not neccessary, because InsertFromMinibuffer will enlarge
+        * the memory (it uses InsertChar of course). But doing it by hand
+        * is MUCH faster! (only one time, not thousend times!!) */
+   
+       result->Enlarge(0, last+2);
+   
+       for (i = 0; i < last; i++) {
+               CopyIntoMinibuffer(i);
+               result->InsertFromMinibuffer(i);
+       }
+       return result;
+}
+
+
+bool LyXParagraph::HasSameLayout(LyXParagraph* par)
+{
+       par = par->FirstPhysicalPar();
+
+       return (
+               par->footnoteflag == footnoteflag &&
+               par->footnotekind == footnotekind &&
+
+               par->layout == layout &&
+
+               par->align == align &&
+
+               par->line_bottom == line_bottom &&
+               par->pagebreak_bottom == pagebreak_bottom &&
+               par->added_space_bottom == added_space_bottom &&
+
+               par->line_top == line_top &&
+               par->pagebreak_top == pagebreak_top &&
+               par->added_space_top == added_space_top &&
+
+                par->pextra_type == pextra_type &&
+                par->pextra_width == pextra_width && 
+                par->pextra_widthp == pextra_widthp && 
+                par->pextra_alignment == pextra_alignment && 
+                par->pextra_hfill == pextra_hfill && 
+                par->pextra_start_minipage == pextra_start_minipage && 
+
+               par->table == table && // what means: NO TABLE AT ALL 
+
+               par->noindent == noindent &&
+               par->depth == depth);
+}
+
+
+void LyXParagraph::BreakParagraphConservative(int pos)
+{
+       int i, pos_end, pos_first;
+   
+       /* create a new paragraph */
+       LyXParagraph *par = ParFromPos(pos);
+
+       LyXParagraph *tmp = new LyXParagraph(par);
+   
+       tmp->MakeSameLayout(par);
+   
+       if (Last() > pos) {   
+               /* copy everything behind the break-position to the new
+                  paragraph */
+               pos_first = 0;
+               while (ParFromPos(pos_first) != par)
+                       pos_first++;
+   
+               pos_end = pos_first + par->last - 1;
+   
+               /* make shure there is enough memory for the now larger
+                  paragraph. This is not neccessary, because
+                  InsertFromMinibuffer will enlarge the memory (it uses
+                  InsertChar of course). But doing it by hand
+                  is MUCH faster! (only one time, not thousend times!!) */
+   
+               tmp->Enlarge(0, pos_end - pos);
+   
+               for (i = pos; i <= pos_end; i++) {
+      
+                       par->CutIntoMinibuffer(i - pos_first);
+                       tmp->InsertFromMinibuffer(i - pos);
+               }
+               for (i = pos_end; i >= pos; i--)
+                       par->Erase(i - pos_first);
+
+               /* free memory of the now shorter paragraph*/
+               par->FitSize();
+       }
+}
+   
+
+/* be carefull, this does not make any check at all */ 
+void LyXParagraph::PasteParagraph()
+{
+       int i, pos_end, pos_insert;
+       LyXParagraph *the_next;
+   
+       /* copy the next paragraph to this one */
+       the_next = Next();
+   
+       LyXParagraph *firstpar = FirstPhysicalPar();
+   
+       /* first the DTP-stuff */ 
+       firstpar->line_bottom = the_next->line_bottom;
+       firstpar->added_space_bottom = the_next->added_space_bottom;
+       firstpar->pagebreak_bottom = the_next->pagebreak_bottom;
+   
+       pos_end = the_next->last - 1;
+       pos_insert = Last();
+   
+       /* enlarge the paragraph. This is faster than enlarge it
+        * every 10th insertion. */ 
+       if (pos_end >= 0)
+               Enlarge(pos_insert, pos_end);
+      
+       /* ok, now copy the paragraph */ 
+       for (i = 0; i <= pos_end; i++) {
+               the_next->CutIntoMinibuffer(i);
+               InsertFromMinibuffer(pos_insert + i);
+       }
+   
+       /* delete the next paragraph */
+       delete the_next;
+}
+
+
+void LyXParagraph::OpenFootnote(int pos)
+{
+       LyXParagraph *par = ParFromPos(pos);
+       par = par->next;
+       while (par && par->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
+               par->footnoteflag = LyXParagraph::OPEN_FOOTNOTE;
+               par = par->next;
+       }
+}
+
+
+void LyXParagraph::CloseFootnote(int pos)
+{
+       LyXParagraph *par = ParFromPos(pos);
+       par = par->next;
+       while (par && par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) {
+               par->footnoteflag = LyXParagraph::CLOSED_FOOTNOTE;
+               par = par->next;
+       }
+}
+
+
+int LyXParagraph::GetLayout()
+{
+       return FirstPhysicalPar()->layout;
+}
+
+
+char LyXParagraph::GetDepth()
+{
+       return FirstPhysicalPar()->depth;
+}
+
+
+char LyXParagraph::GetAlign()
+{
+       return FirstPhysicalPar()->align;
+}
+
+
+LString LyXParagraph::GetLabelString()
+{
+       return FirstPhysicalPar()->labelstring;
+}
+
+
+int LyXParagraph::GetFirstCounter(int i)
+{
+       return FirstPhysicalPar()->counter[i];
+}
+
+
+/* the next two functions are for the manual labels */ 
+LString LyXParagraph::GetLabelWidthString()
+{
+       if (!FirstPhysicalPar()->labelwidthstring.empty())
+               return FirstPhysicalPar()->labelwidthstring;
+       else
+               return _("Senseless with this layout!");
+}
+
+
+void LyXParagraph::SetLabelWidthString(LString const & s)
+{
+       LyXParagraph *par = FirstPhysicalPar();
+
+       par->labelwidthstring = s;
+}
+
+
+void LyXParagraph::SetOnlyLayout(char new_layout)
+{
+       LyXParagraph
+               *par = FirstPhysicalPar(),
+               *ppar = NULL,
+                *npar = NULL;
+
+       par->layout = new_layout;
+       /* table stuff -- begin*/ 
+       if (table) 
+               par->layout = 0;
+       /* table stuff -- end*/ 
+        if (par->pextra_type == PEXTRA_NONE) {
+                if (par->Previous()) {
+                        ppar = par->Previous()->FirstPhysicalPar();
+                        while(ppar
+                             && ppar->Previous()
+                             && (ppar->depth > par->depth))
+                                ppar = ppar->Previous()->FirstPhysicalPar();
+                }
+                if (par->Next()) {
+                        npar = par->Next()->NextAfterFootnote();
+                        while(npar
+                             && npar->Next()
+                             && (npar->depth > par->depth))
+                                npar = npar->Next()->NextAfterFootnote();
+                }
+                if (ppar && (ppar->pextra_type != PEXTRA_NONE)) {
+                        LString
+                                p1 = ppar->pextra_width,
+                                p2 = ppar->pextra_widthp;
+                        ppar->SetPExtraType(ppar->pextra_type,
+                                            p1.c_str(),p2.c_str());
+                }
+                if ((par->pextra_type == PEXTRA_NONE) &&
+                    npar && (npar->pextra_type != PEXTRA_NONE)) {
+                        LString
+                                p1 = npar->pextra_width,
+                                p2 = npar->pextra_widthp;
+                        npar->SetPExtraType(npar->pextra_type,
+                                            p1.c_str(),p2.c_str());
+                }
+        }
+}
+
+
+void LyXParagraph::SetLayout(char new_layout)
+{
+       LyXParagraph
+               *par = FirstPhysicalPar(),
+               *ppar = NULL,
+               *npar = NULL;
+
+        par->layout = new_layout;
+       par->labelwidthstring.clean();
+       par->align = LYX_ALIGN_LAYOUT;
+       //par->depth = 0;
+       par->added_space_top = VSpace(VSpace::NONE);
+       par->added_space_bottom = VSpace(VSpace::NONE);
+       /* table stuff -- begin*/ 
+       if (table) 
+               par->layout = 0;
+       /* table stuff -- end*/
+        if (par->pextra_type == PEXTRA_NONE) {
+                if (par->Previous()) {
+                        ppar = par->Previous()->FirstPhysicalPar();
+                        while(ppar
+                             && ppar->Previous()
+                             && (ppar->depth > par->depth))
+                                ppar = ppar->Previous()->FirstPhysicalPar();
+                }
+                if (par->Next()) {
+                        npar = par->Next()->NextAfterFootnote();
+                        while(npar
+                             && npar->Next()
+                             && (npar->depth > par->depth))
+                                npar = npar->Next()->NextAfterFootnote();
+                }
+                if (ppar && (ppar->pextra_type != PEXTRA_NONE)) {
+                        LString
+                                p1 = ppar->pextra_width,
+                                p2 = ppar->pextra_widthp;
+                        ppar->SetPExtraType(ppar->pextra_type,
+                                            p1.c_str(),p2.c_str());
+                }
+                if ((par->pextra_type == PEXTRA_NONE) &&
+                    npar && (npar->pextra_type != PEXTRA_NONE)) {
+                        LString
+                                p1 = npar->pextra_width,
+                                p2 = npar->pextra_widthp;
+                        npar->SetPExtraType(npar->pextra_type,
+                                            p1.c_str(),p2.c_str());
+                }
+        }
+}
+
+
+/* if the layout of a paragraph contains a manual label, the beginning of the 
+* main body is the beginning of the second word. This is what the par-
+* function returns. If the layout does not contain a label, the main
+* body always starts with position 0. This differentiation is necessary,
+* because there cannot be a newline or a blank <= the beginning of the 
+* main body in TeX. */ 
+
+int LyXParagraph::BeginningOfMainBody()
+{
+       if (FirstPhysicalPar() != this)
+               return -1;
+   
+       int i = 0;
+   
+//     while (i < last   &&  !(i > 1 && GetChar(i-1)==' ')
+//            && GetChar(i)!=LYX_META_NEWLINE)
+//             i++;
+// Unroll the first two cycles of this loop
+// and remember the previous character to remove unnecessary GetChar() calls
+
+       if (i < last
+           && GetChar(i) != LYX_META_NEWLINE) {
+               ++i;
+               char previous_char, temp;
+               if (i < last
+                   && (previous_char = GetChar(i)) != LYX_META_NEWLINE) {
+                       // Yes, this  ^ is supposed to be "=" not "=="
+                       ++i;
+                       while (i < last
+                              && previous_char != ' '
+                              && (temp = GetChar(i)) != LYX_META_NEWLINE) {
+                               ++i;
+                               previous_char = temp;
+                       }
+               }
+       }
+
+       if (i==0 && i == last &&
+           !(footnoteflag==LyXParagraph::NO_FOOTNOTE
+             && next && next->footnoteflag != LyXParagraph::NO_FOOTNOTE)
+               )
+               i++;                           /* the cursor should not jump  
+                                               * to the main body if there
+                                               * is nothing in! */
+       return i;
+}
+
+
+LyXParagraph* LyXParagraph::DepthHook(int deth)
+{
+       LyXParagraph *newpar = this;
+       if (deth < 0)
+               return NULL;
+   
+       do {
+               newpar = newpar->FirstPhysicalPar()->Previous();
+       } while (newpar && newpar->GetDepth() > deth
+                && newpar->footnoteflag == footnoteflag);
+   
+       if (!newpar) {
+               if (Previous() || GetDepth())
+                       lyxerr.print("ERROR (LyXParagraph::DepthHook): "
+                                    "no hook.");
+               newpar = this;
+       }
+       return newpar->FirstPhysicalPar();
+}
+
+
+int LyXParagraph::AutoDeleteInsets()
+{
+       InsetTable *tmpi = insettable;
+       InsetTable *tmpi2 = tmpi;
+       int i=0;
+       while (tmpi) {
+               tmpi2 = tmpi;
+               tmpi = tmpi->next;
+               if (tmpi2->inset)
+                       if (tmpi2->inset->AutoDelete()) {
+                               i++;
+                               Erase(tmpi2->pos);
+                       } else {}
+               else
+                       lyxerr.print(
+                               "ERROR (LyXParagraph::AutoDeleteInsets): "
+                               "cannot auto-delete insets");
+       }
+       return i;
+}
+
+
+Inset* LyXParagraph::ReturnNextInsetPointer(int &pos)
+{
+       InsetTable *tmpi = insettable;
+       InsetTable *tmpi2 = NULL;
+       while (tmpi){
+               if (tmpi->pos >= pos) {
+                       if (!tmpi2 || tmpi->pos < tmpi2->pos)
+                               tmpi2 = tmpi;
+               }
+               tmpi=tmpi->next;
+       }
+       if (tmpi2){
+               pos = tmpi2->pos;
+               return tmpi2->inset;
+       }
+       else
+               return NULL;
+}
+
+
+/* returns -1 if inset not found */
+int LyXParagraph::GetPositionOfInset(Inset* inset)
+{
+       /* find the entry */ 
+       InsetTable *tmpi = insettable;
+       while (tmpi && tmpi->inset != inset) {
+               tmpi=tmpi->next;
+       }
+       if (tmpi && tmpi->inset)
+               return tmpi->pos;
+       else{
+               /* think about footnotes */
+               if (footnoteflag == LyXParagraph::NO_FOOTNOTE 
+                   && next && next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
+                       int further =
+                               NextAfterFootnote()->GetPositionOfInset(inset);
+                       if (further != -1)
+                               return last + 1 + further;
+               }
+               return -1;
+       }
+}
+
+
+void LyXParagraph::readSimpleWholeFile(FILE *myfile)
+{
+       char c;
+
+       FileInfo fileInfo(fileno(myfile));
+       long file_size = fileInfo.getSize();
+       /* it is horrible, I know, but faster.
+        * I should not use InsertString for that :-( */
+   
+       /* I will write a better insertion in the future */ 
+       Enlarge(0, file_size + 10);
+   
+       rewind(myfile);
+   
+       if (!feof(myfile)) {
+               do {
+                       c = fgetc(myfile);
+                       InsertChar(last,c);
+               } while (!feof(myfile));
+      
+       }
+}
+
+
+LyXParagraph* LyXParagraph::TeXOnePar(LString &file, TexRow &texrow,
+                                     LString &foot, TexRow &foot_texrow,
+                                     int &foot_count)
+{
+       lyxerr.debug(LString("TeXOnePar...     ") + (long)this, Error::LATEX);
+       LyXParagraph *par = next;
+       LyXLayout * style = lyxstyle.Style(GetCurrentTextClass(), layout);
+
+       bool further_blank_line = false;
+       if (IsDummy())
+               lyxerr.print("ERROR (LyXParagraph::TeXOnePar) is dummy.");
+
+       if (start_of_appendix) {
+               file += "\\appendix\n";
+               texrow.newline();
+       }
+
+       if (tex_code_break_column && style->isCommand()){
+               file += '\n';
+               texrow.newline();
+       }
+
+       if (pagebreak_top) {
+               file += "\\newpage";
+               further_blank_line = true;
+       }
+       if (added_space_top.kind() != VSpace::NONE) {
+               file += added_space_top.asLatexCommand();
+               further_blank_line = true;
+       }
+      
+       if (line_top) {
+               file += "\\lyxline{\\" + getFont(0).latexSize() + '}';
+               file += "\\vspace{-1\\parskip}";
+               further_blank_line = true;
+       }
+
+       if (further_blank_line){
+               file += '\n';
+               texrow.newline();
+       }
+
+       switch (style->latextype) {
+       case LATEX_COMMAND:
+               file += '\\';
+               file += style->latexname;
+               file += style->latexparam;
+               break;
+       case LATEX_ITEM_ENVIRONMENT:
+               if (bibkey) 
+                       bibkey->Latex(file, false);
+               else
+                       file += "\\item ";
+               break;
+       case LATEX_LIST_ENVIRONMENT:
+               file += "\\item ";
+               break;
+       default:
+               break;
+       }
+
+       bool need_par = SimpleTeXOnePar(file, texrow);
+       // Spit out footnotes
+       while (par && par->footnoteflag != LyXParagraph::NO_FOOTNOTE
+              && par->footnoteflag != footnoteflag) {
+               par = par->TeXFootnote(file, texrow,
+                                      foot, foot_texrow, foot_count);
+               par->SimpleTeXOnePar(file, texrow);
+               par = par->next;
+       }
+
+       // Make sure that \\par is done with the font of the last
+       // character if this has another size as the default.
+       // This is necessary because LaTeX (and LyX on the screen)
+       // calculates the space between the baselines according
+       // to this font. (Matthias)
+       LyXFont font = getFont(Last()-1);
+       if (need_par) {
+               if (style->resfont.size() != font.size()) {
+                       file += '\\';
+                       file += font.latexSize();
+                       file += ' ';
+               }
+               file += "\\par}";
+       } else if (lyxstyle.Style(GetCurrentTextClass(),
+                                 GetLayout())->isCommand()){
+               if (style->resfont.size() != font.size()) {
+                       file += '\\';
+                       file += font.latexSize();
+                       file += ' ';
+               }
+               file += '}';
+       } else if (style->resfont.size() != font.size()){
+               file += "{\\" + font.latexSize() + " \\par}";
+       }
+       
+       switch (style->latextype) {
+       case LATEX_ITEM_ENVIRONMENT:
+       case LATEX_LIST_ENVIRONMENT:
+                if (par && (depth < par->depth)) {
+                        file += '\n';
+                        texrow.newline();
+                }
+               break;
+       case LATEX_ENVIRONMENT:
+               // if its the last paragraph of the current environment
+               // skip it otherwise fall through
+               if (par
+                   && (par->layout != layout
+                       || par->depth != depth
+                       || par->pextra_type != pextra_type))
+                       break;
+       default:
+               if (!(footnoteflag != LyXParagraph::NO_FOOTNOTE
+                     && footnotekind != LyXParagraph::FOOTNOTE
+                     && footnotekind != LyXParagraph::MARGIN
+                     && (table
+                         || (par
+                             && par->table)))) {
+                       // don't insert this if we would be adding it
+                       // before or after a table in a float.  This 
+                       // little trick is needed in order to allow
+                       // use of tables in \subfigures or \subtables.
+                       file += '\n';
+                       texrow.newline();
+               }
+       }
+       
+       further_blank_line = false;
+       if (line_bottom) {
+               file += "\\lyxline{\\" + getFont(Last()-1).latexSize() + '}';
+               further_blank_line = true;
+       }
+
+       if (added_space_bottom.kind() != VSpace::NONE) {
+               file += added_space_bottom.asLatexCommand();
+               further_blank_line = true;
+       }
+      
+       if (pagebreak_bottom) {
+               file += "\\newpage";
+               further_blank_line = true;
+       }
+
+       if (further_blank_line){
+               file += '\n';
+               texrow.newline();
+       }
+
+       if (!(footnoteflag != LyXParagraph::NO_FOOTNOTE && par &&
+              par->footnoteflag == LyXParagraph::NO_FOOTNOTE) // &&
+//            (pextra_type != PEXTRA_MINIPAGE ||
+/*             (par && !par->pextra_type == PEXTRA_MINIPAGE)) */ ) {
+               file += '\n';
+               texrow.newline();
+       }
+
+       lyxerr.debug(LString("TeXOnePar...done ") + (long)par, Error::LATEX);
+       return par;
+}
+
+
+// This one spits out the text of the paragraph
+bool LyXParagraph::SimpleTeXOnePar(LString &file, TexRow &texrow)
+{
+       lyxerr.debug(LString("SimpleTeXOnePar...     ") + (long)this, 
+                    Error::LATEX);
+
+       if (table)
+               return SimpleTeXOneTablePar(file, texrow);
+
+       char c;
+       int main_body;
+       int column;
+       
+       bool return_value = false;
+       //bool underbar = false;
+
+       LyXLayout * style = lyxstyle.Style(GetCurrentTextClass(), GetLayout());
+       LyXFont basefont;
+
+       /* maybe we have to create a optional argument */ 
+       if (style->labeltype != LABEL_MANUAL)
+               main_body = 0;
+       else
+               main_body = BeginningOfMainBody();
+
+       if (main_body > 0) {
+               file += '[';
+               basefont = getFont(-2); // Get label font
+       } else {
+               basefont = getFont(-1); // Get layout font
+       }
+
+       column = 0;
+
+       if (main_body >= 0
+           && !last
+           && !IsDummy()) {
+               if (style->isCommand()) {
+                       file += '{';
+                       column++;
+               } else if (align != LYX_ALIGN_LAYOUT) {
+                       file += '{';
+                       column++;
+                       return_value = true;
+               }
+       }
+       // Which font is currently active?
+       LyXFont running_font = basefont;
+       // Do we have an open font change?
+       bool open_font = false;
+
+       texrow.start(this, 0);
+       for (int i = 0; i < last; i++) {
+               column++;
+               // First char in paragraph or after label?
+               if (i == main_body && !IsDummy()) {
+                       if (main_body > 0) {
+                               if (open_font) {
+                                       column += running_font.latexWriteEndChanges(file, basefont);
+                                       open_font = false;
+                               }
+                               basefont = getFont(-1); // Now use the layout font
+                               running_font = basefont;
+                               file += ']';
+                               column++;
+                       }
+                       if (style->isCommand()) {
+                               file += '{';
+                               column++;
+                       } else if (align != LYX_ALIGN_LAYOUT) {
+                               file += "{\\par";
+                               column += 4;
+                               return_value = true;
+                       }
+
+                       if (noindent) {
+                               file += "\\noindent ";
+                               column += 10;
+                       }
+                       switch (align) {
+                       case LYX_ALIGN_LEFT:
+                               file += "\\raggedright ";
+                               column+=13;
+                               break;
+                       case LYX_ALIGN_RIGHT:
+                               file += "\\raggedleft ";
+                               column+=12;
+                               break;
+                       case LYX_ALIGN_CENTER:
+                               file += "\\centering ";
+                               column+=11;
+                               break;
+                       }        
+               }
+
+               c = GetChar(i);
+
+               // Fully instantiated font
+               LyXFont font = getFont(i);
+
+               // Spaces at end of font change are simulated to be
+               // outside font change, i.e. we write "\textXX{text} "
+               // rather than "\textXX{text }". (Asger) 
+               if (open_font && c == ' ' && i <= last-2 
+                   && !getFont(i+1).equalExceptLatex(running_font) 
+                   && !getFont(i+1).equalExceptLatex(font)) {
+                       font = getFont(i+1);
+               }
+
+               // We end font definition before blanks
+               if (!font.equalExceptLatex(running_font) && open_font) {
+                       column += running_font.latexWriteEndChanges(file, basefont);
+                       running_font = basefont;
+                       open_font = false;
+               }
+
+               // Blanks are printed before start of fontswitch
+               if (c == ' '){
+                       // Do not print the separation of the optional argument
+                       if (i != main_body - 1) {
+                               SimpleTeXBlanks(file, texrow, i, column, font, style);
+                       }
+               }
+
+               // Do we need to change font?
+               if (!font.equalExceptLatex(running_font)
+                   && i != main_body-1) {
+                       column += font.latexWriteStartChanges(file, basefont);
+                       running_font = font;
+                       open_font = true;
+               }
+
+               if (c == LYX_META_NEWLINE) {
+                       // newlines are handled differently here than
+                       // the default in SimpleTeXSpecialChars().
+                       if (!style->newline_allowed
+                           || font.latex() == LyXFont::ON) {
+                               file += '\n';
+                       } else {
+                               if (open_font) {
+                                       column += running_font.latexWriteEndChanges(file, basefont);
+                                       open_font = false;
+                               }
+                               basefont = getFont(-1);
+                               running_font = basefont;
+                               if (font.family() == 
+                                   LyXFont::TYPEWRITER_FAMILY) {
+                                       file += "~";
+                               }
+                               file += "\\\\\n";
+                       }
+                       texrow.newline();
+                       texrow.start(this, i+1);
+                       column = 0;
+               } else {
+                       SimpleTeXSpecialChars(file, texrow,
+                                             font, running_font, basefont,
+                                             open_font, style, i, column, c);
+               }
+       }
+
+       // If we have an open font definition, we have to close it
+       if (open_font) {
+               running_font.latexWriteEndChanges(file, basefont);
+       }
+
+       /* needed if there is an optional argument but no contents */ 
+       if (main_body > 0 && main_body == last) {
+               file += "]~";
+               return_value = false;
+       }
+
+       lyxerr.debug(LString("SimpleTeXOnePar...done ") + (long)this, 
+                    Error::LATEX);
+       return return_value;
+}
+
+
+// This one spits out the text of a table paragraph
+bool LyXParagraph::SimpleTeXOneTablePar(LString &file, TexRow &texrow)
+{
+       lyxerr.debug(LString("SimpleTeXOneTablePar...     ")+
+                    (long)this, Error::LATEX);
+       char c;
+       int column, tmp;
+   
+       bool return_value = false;
+       int current_cell_number = -1;
+
+       LyXLayout * style = lyxstyle.Style(GetCurrentTextClass(), GetLayout());
+       LyXFont basefont;
+
+       basefont = getFont(-1); // Get layout font
+       // Which font is currently active?
+       LyXFont running_font = basefont;
+       // Do we have an open font change?
+       bool open_font = false;
+       column = 0;
+       if (!IsDummy()) { // it is dummy if it is in a float!!!
+               if (style->isCommand()) {
+                       file += '{';
+                       column++;
+               } else if (align != LYX_ALIGN_LAYOUT) {
+                       file += '{';
+                       column++;
+                       return_value = true;
+               }
+               if (noindent) {
+                       file += "\\noindent ";
+                       column += 10;
+               }
+               switch (align) {
+               case LYX_ALIGN_LEFT:
+                       file += "\\raggedright ";
+                       column+=13;
+                       break;
+               case LYX_ALIGN_RIGHT:
+                       file += "\\raggedleft ";
+                       column+=12;
+                       break;
+               case LYX_ALIGN_CENTER:
+                       file += "\\centering ";
+                       column+=11;
+                       break;
+               }
+       }
+       current_cell_number = -1;
+       tmp = table->TexEndOfCell(file,current_cell_number);
+       for (;tmp>0;tmp--)
+               texrow.newline();
+       
+       texrow.start(this, 0);
+
+       for (int i = 0; i < last; i++) {
+               c = GetChar(i);
+               if (table->IsContRow(current_cell_number+1)) {
+                       if (c == LYX_META_NEWLINE)
+                               current_cell_number++;
+                       continue;
+               }
+               column++;
+               
+               // Fully instantiated font
+               LyXFont font = getFont(i);
+
+               // Spaces at end of font change are simulated to be outside font change.
+               // i.e. we write "\textXX{text} " rather than "\textXX{text }". (Asger)
+               if (open_font && c == ' ' && i <= last-2 
+                   && getFont(i+1) != running_font && getFont(i+1) != font) {
+                       font = getFont(i+1);
+               }
+
+               // We end font definition before blanks
+               if (font != running_font && open_font) {
+                       column += running_font.latexWriteEndChanges(file, basefont);
+                       running_font = basefont;
+                       open_font = false;
+               }
+               // Blanks are printed before start of fontswitch
+               if (c == ' '){
+                       SimpleTeXBlanks(file, texrow, i, column, font, style);
+               }
+               // Do we need to change font?
+               if (font != running_font) {
+                       column += font.latexWriteStartChanges(file, basefont);
+                       running_font = font;
+                       open_font = true;
+               }
+               // Do we need to turn on LaTeX mode?
+               if (font.latex() != running_font.latex()) {
+                       if (font.latex() == LyXFont::ON
+                           && style->needprotect) {
+                               file += "\\protect ";
+                               column += 9;
+                       }
+               }
+               if (c == LYX_META_NEWLINE) {
+                       // special case for inside a table
+                       // different from default case in SimpleTeXSpecialChars()
+                       if (open_font) {
+                               column += running_font.latexWriteEndChanges(file, basefont);
+                               open_font = false;
+                       }
+                       basefont = getFont(-1);
+                       running_font = basefont;
+                       current_cell_number++;
+                       if (table->CellHasContRow(current_cell_number) >= 0) {
+                               TeXContTableRows(file, i+1, current_cell_number, column, texrow);
+                       }
+                       // if this cell follow only ContRows till end don't
+                       // put the EndOfCell because it is put after the
+                       // for(...)
+                       if (table->ShouldBeVeryLastCell(current_cell_number)) {
+                            current_cell_number--;
+                            break;
+                       }
+                       int tmp = table->TexEndOfCell(file, current_cell_number);
+                       if (tmp>0) {
+                               column = 0;
+                       } else if (tmp < 0) {
+                               tmp = -tmp;
+                       }
+                       for (;tmp--;) {
+                               texrow.newline();
+                       }
+                       texrow.start(this, i+1);
+               } else {
+                       SimpleTeXSpecialChars(file, texrow,
+                                             font, running_font, basefont,
+                                             open_font, style, i, column, c);
+               }
+       }
+
+       // If we have an open font definition, we have to close it
+       if (open_font) {
+               running_font.latexWriteEndChanges(file, basefont);
+       }
+       current_cell_number++;
+       tmp = table->TexEndOfCell(file, current_cell_number);
+       for (;tmp>0;tmp--)
+               texrow.newline();
+       lyxerr.debug(LString("SimpleTeXOneTablePar...done ")+(long)this, Error::LATEX);
+       return return_value;
+}
+
+
+// This one spits out the text off ContRows in tables
+bool LyXParagraph::TeXContTableRows(LString &file, int i,
+                                   int current_cell_number,
+                                   int &column, TexRow &texrow)
+{
+       lyxerr.debug(LString("TeXContTableRows...     ") +
+                    (long)this, Error::LATEX);
+       if (!table)
+               return false;
+    
+       char c;
+       int cell;
+       int lastpos;
+   
+       bool return_value = false;
+       LyXLayout * style = lyxstyle.Style(GetCurrentTextClass(), GetLayout());
+       LyXFont basefont;
+
+       basefont = getFont(-1); // Get layout font
+       // Which font is currently active?
+       LyXFont running_font = basefont;
+       // Do we have an open font change?
+       bool open_font = false;
+
+       lastpos = i;
+       cell = table->CellHasContRow(current_cell_number);
+       current_cell_number++;
+       while(cell >= 0) {
+               // first find the right position
+               i = lastpos;
+               for (; (i<last) && (current_cell_number<cell); i++) {
+                       c = GetChar(i);
+                       if (c == LYX_META_NEWLINE)
+                               current_cell_number++;
+               }
+               lastpos = i;
+               c=GetChar(i);
+               if (table->Linebreaks(table->FirstVirtualCell(cell))) {
+                       file += " \\\\\n";
+                       texrow.newline();
+                       column = 0;
+               } else if ((c != ' ') && (c != LYX_META_NEWLINE)) {
+                       file += ' ';
+               }
+               for (; (i < last) && ((c=GetChar(i)) != LYX_META_NEWLINE); i++) {
+                       column++;
+
+                       // Fully instantiated font
+                       LyXFont font = getFont(i);
+
+                       // Spaces at end of font change are simulated to be outside font change.
+                       // i.e. we write "\textXX{text} " rather than "\textXX{text }". (Asger)
+                       if (open_font && c == ' ' && i <= last-2 
+                           && getFont(i+1) != running_font && getFont(i+1) != font) {
+                               font = getFont(i+1);
+                       }
+
+                       // We end font definition before blanks
+                       if (font != running_font && open_font) {
+                               column += running_font.latexWriteEndChanges(file, basefont);
+                               running_font = basefont;
+                               open_font = false;
+                       }
+                       // Blanks are printed before start of fontswitch
+                       if (c == ' '){
+                               SimpleTeXBlanks(file, texrow, i, column, font, style);
+                       }
+                       // Do we need to change font?
+                       if (font != running_font) {
+                               column += font.latexWriteStartChanges(file, basefont);
+                               running_font = font;
+                               open_font = true;
+                       }
+                       // Do we need to turn on LaTeX mode?
+                       if (font.latex() != running_font.latex()) {
+                               if (font.latex() == LyXFont::ON
+                                   && style->needprotect)
+                                       {
+                                               file += "\\protect ";
+                                               column += 9;
+                                       }
+                       }
+                       SimpleTeXSpecialChars(file, texrow, font, running_font, basefont,
+                                             open_font, style, i, column, c);
+               }
+               // If we have an open font definition, we have to close it
+               if (open_font) {
+                       running_font.latexWriteEndChanges(file, basefont);
+                       open_font = false;
+               }
+               basefont = getFont(-1);
+               running_font = basefont;
+               cell = table->CellHasContRow(current_cell_number);
+       }
+       lyxerr.debug(LString("TeXContTableRows...done ")+(long)this, Error::LATEX);
+       return return_value;
+}
+
+
+bool LyXParagraph::linuxDocConvertChar(char c, LString &sgml_string)
+{
+       bool retval = false;
+       switch (c) {
+       case LYX_META_HFILL:
+               sgml_string.clean();
+               break;
+       case LYX_META_PROTECTED_SEPARATOR: 
+               sgml_string = ' ';
+               break;
+       case LYX_META_NEWLINE:
+               sgml_string = '\n';
+               break;
+       case '&': 
+               sgml_string = "&amp;";
+               break;
+       case '<': 
+               sgml_string = "&lt;"; 
+               break;
+       case '>':
+               sgml_string = "&gt;"; 
+               break;
+       case '$': 
+               sgml_string = "&dollar;"; 
+               break;
+       case '#': 
+               sgml_string = "&num;";
+               break;
+       case '%': 
+               sgml_string = "&percnt;";
+               break;
+       case '[': 
+               sgml_string = "&lsqb;";
+               break;
+       case ']': 
+               sgml_string = "&rsqb;";
+               break;
+       case '{': 
+               sgml_string = "&lcub;";
+               break;
+       case '}': 
+               sgml_string = "&rcub;";
+               break;
+       case '~': 
+               sgml_string = "&tilde;";
+               break;
+       case '"': 
+               sgml_string = "&dquot;";
+               break;
+       case '\\': 
+               sgml_string = "&bsol;";
+               break;
+       case ' ':
+               retval = true;
+               sgml_string = ' ';
+               break;
+       case '\0': /* Ignore :-) */
+               sgml_string.clean();
+               break;
+       default:
+               sgml_string = c;
+               break;
+       }
+       return retval;
+}
+
+void LyXParagraph::SimpleDocBookOneTablePar(LString &file, LString &extra,
+                                           int & desc_on, int depth) 
+{
+       if (!table)
+               return;
+       lyxerr.debug(LString("SimpleDocbookOneTablePar...     ") +
+                    (long)this, Error::LATEX);
+       int column, tmp;
+       bool return_value = false;
+       int current_cell_number = -1;
+       LyXFont font1,font2;
+       char c;
+       Inset *inset;
+       int main_body, j;
+       LString emph="emphasis";
+       bool emph_flag=false;
+       int char_line_count=0;
+       
+       LyXLayout * style = lyxstyle.Style(GetCurrentTextClass(), GetLayout());
+       
+       if (style->labeltype != LABEL_MANUAL)
+               main_body = 0;
+       else
+               main_body = BeginningOfMainBody();
+       
+       /* gets paragraph main font */
+       if (main_body > 0)
+               font1 = style->labelfont;
+       else
+               font1 = style->font;
+       
+       char_line_count = depth;
+       addNewlineAndDepth(file, depth);
+       if (footnoteflag == LyXParagraph::NO_FOOTNOTE) {
+               file += "<INFORMALTABLE>";
+               addNewlineAndDepth(file, ++depth);
+       }
+       current_cell_number = -1;
+       tmp = table->DocBookEndOfCell(file,current_cell_number, depth);
+       
+       /* parsing main loop */
+       for (int i = 0; i < last; i++) {
+               c = GetChar(i);
+               if (table->IsContRow(current_cell_number+1)) {
+                       if (c == LYX_META_NEWLINE)
+                               current_cell_number++;
+                       continue;
+               }
+               column++;
+               
+               // Fully instantiated font
+               font2 = getFont(i);
+               
+               /* handle <emphasis> tag */
+               if (font1.emph() != font2.emph() && i) {
+                       if (font2.emph() == LyXFont::ON) {
+                               file += "<emphasis>";
+                               emph_flag=true;
+                       } else if (emph_flag) {
+                               file += "</emphasis>";
+                               emph_flag=false;
+                       }
+               }
+               if (c == LYX_META_NEWLINE) {
+                       // we have only to control for emphasis open here!
+                       if (emph_flag) {
+                               file += "</emphasis>";
+                               emph_flag=false;
+                       }
+                       font1 = font2 = getFont(-1);
+                       current_cell_number++;
+                       if (table->CellHasContRow(current_cell_number) >= 0) {
+                               DocBookContTableRows(file, extra, desc_on, i+1,
+                                                    current_cell_number,
+                                                    column);
+                       }
+                       // if this cell follow only ContRows till end don't
+                       // put the EndOfCell because it is put after the
+                       // for(...)
+                       if (table->ShouldBeVeryLastCell(current_cell_number)) {
+                               current_cell_number--;
+                               break;
+                       }
+                       tmp=table->DocBookEndOfCell(file, current_cell_number,
+                                                   depth);
+                       
+                       if (tmp > 0)
+                               column = 0;
+               } else if (c == LYX_META_INSET) {
+                       inset = GetInset(i);
+                       LString tmp_out;
+                       inset->DocBook(tmp_out);
+                       //
+                       // This code needs some explanation:
+                       // Two insets are treated specially
+                       //   label if it is the first element in a command paragraph
+                       //         desc_on==3
+                       //   graphics inside tables or figure floats can't go on
+                               //   title (the equivalente in latex for this case is caption
+                       //   and title should come first
+                       //         desc_on==4
+                       //
+                       if(desc_on!=3 || i!=0) {
+                               if(tmp_out[0]=='@') {
+                                       if(desc_on==4)
+                                               extra += tmp_out.frontStrip('@');
+                                       else
+                                               file += tmp_out.frontStrip('@');
+                               } else
+                                       file += tmp_out;
+                       }
+               } else if (font2.latex() == LyXFont::ON) {
+                       // "TeX"-Mode on ==> SGML-Mode on.
+                       if (c!='\0')
+                               file += c;
+                       char_line_count++;
+               } else {
+                       LString sgml_string;
+                       if (linuxDocConvertChar(c, sgml_string) 
+                           && !style->free_spacing) {
+                               // in freespacing mode, spaces are
+                               // non-breaking characters
+                               // char is ' '
+                               if (desc_on == 1) {
+                                       char_line_count++;
+                                       file += '\n';
+                                       file += "</term><listitem><para>";
+                                       desc_on = 2;
+                               } else  {
+                                       file += c;
+                               }
+                       } else {
+                               file += sgml_string;
+                       }
+               }
+               font1 = font2;
+       }
+       
+       /* needed if there is an optional argument but no contents */ 
+       if (main_body > 0 && main_body == last) {
+               font1 = style->font;
+       }
+       
+       if (emph_flag) {
+               file += "</emphasis>";
+       }
+       
+       current_cell_number++;
+       tmp = table->DocBookEndOfCell(file, current_cell_number, depth);
+       /* resets description flag correctly */
+       switch(desc_on){
+       case 1:
+               /* <term> not closed... */
+               file += "</term>";
+               break;
+       }
+       if (footnoteflag == LyXParagraph::NO_FOOTNOTE)
+               file += "</INFORMALTABLE>";
+       file += '\n';
+       lyxerr.debug(LString("SimpleDocbookOneTablePar...done ") +
+                    (long)this, Error::LATEX);
+}
+
+void LyXParagraph::DocBookContTableRows(LString &file, LString &extra,
+                                        int & desc_on, int i,
+                                        int current_cell_number, int &column) 
+{
+       if (!table)
+               return;
+       
+       lyxerr.debug(LString("DocBookContTableRows... ") +
+                    (long)this, Error::LATEX);
+       int tmp, cell, lastpos;
+       LyXFont font1,font2;
+       char c;
+       Inset *inset;
+       int main_body, j;
+       LString emph="emphasis";
+       bool emph_flag=false;
+       int char_line_count=0;
+       
+       LyXLayout * style = lyxstyle.Style(GetCurrentTextClass(), GetLayout());
+       
+       if (style->labeltype != LABEL_MANUAL)
+               main_body = 0;
+       else
+               main_body = BeginningOfMainBody();
+       
+       /* gets paragraph main font */
+       if (main_body > 0)
+               font1 = style->labelfont;
+       else
+               font1 = style->font;
+       
+       lastpos = i;
+       cell = table->CellHasContRow(current_cell_number);
+       current_cell_number++;
+       while(cell >= 0) {
+               // first find the right position
+               i = lastpos;
+               for (; (i<last) && (current_cell_number<cell); i++) {
+                       c = GetChar(i);
+                       if (c == LYX_META_NEWLINE)
+                               current_cell_number++;
+               }
+               lastpos = i;
+               c=GetChar(i);
+               // I don't know how to handle this so I comment it
+                // for the moment (Jug)
+//             if (table->Linebreaks(table->FirstVirtualCell(cell))) {
+//                     file += " \\\\\n";
+//                     column = 0;
+//             } else
+               if ((c != ' ') && (c != LYX_META_NEWLINE)) {
+                       file += ' ';
+               }
+               for (; (i < last) && ((c=GetChar(i)) != LYX_META_NEWLINE); i++) {
+                       column++;
+                       
+                       // Fully instantiated font
+                       font2 = getFont(i);
+                       
+                       /* handle <emphasis> tag */
+                       if (font1.emph() != font2.emph() && i) {
+                               if (font2.emph() == LyXFont::ON) {
+                                       file += "<emphasis>";
+                                       emph_flag=true;
+                               } else if (emph_flag) {
+                                       file += "</emphasis>";
+                                       emph_flag=false;
+                               }
+                       }
+                       if (c == LYX_META_INSET) {
+                               inset = GetInset(i);
+                               LString tmp_out;
+                               inset->DocBook(tmp_out);
+                               //
+                               // This code needs some explanation:
+                               // Two insets are treated specially
+                               //   label if it is the first element in a command paragraph
+                               //       desc_on==3
+                               //   graphics inside tables or figure floats can't go on
+                               //   title (the equivalente in latex for this case is caption
+                               //   and title should come first
+                               //       desc_on==4
+                               //
+                               if(desc_on!=3 || i!=0) {
+                                       if(tmp_out[0]=='@') {
+                                               if(desc_on==4)
+                                                       extra += tmp_out.frontStrip('@');
+                                               else
+                                                       file += tmp_out.frontStrip('@');
+                                       } else
+                                               file += tmp_out;
+                               }
+                       } else if (font2.latex() == LyXFont::ON) {
+                               // "TeX"-Mode on ==> SGML-Mode on.
+                               if (c!='\0')
+                                       file += c;
+                               char_line_count++;
+                       } else {
+                               LString sgml_string;
+                               if (linuxDocConvertChar(c, sgml_string) 
+                                   && !style->free_spacing) {
+                               // in freespacing mode, spaces are
+                               // non-breaking characters
+                               // char is ' '
+                                       if (desc_on == 1) {
+                                               char_line_count++;
+                                               file += '\n';
+                                               file += "</term><listitem><para>";
+                                               desc_on = 2;
+                                       } else  {
+                                               file += c;
+                                       }
+                               } else {
+                                       file += sgml_string;
+                               }
+                       }
+               }
+               // we have only to control for emphasis open here!
+               if (emph_flag) {
+                       file += "</emphasis>";
+                       emph_flag=false;
+               }
+               font1 = font2 = getFont(-1);
+               cell = table->CellHasContRow(current_cell_number);
+       }
+       lyxerr.debug(LString("DocBookContTableRows...done ") +
+                    (long)this, Error::LATEX);
+}
+
+
+//
+void LyXParagraph::SimpleTeXBlanks(LString &file, TexRow &texrow,
+                                  int const i, int &column, LyXFont const &font,
+                                  LyXLayout const * const style)
+{
+       if (column > tex_code_break_column
+           && i 
+           && GetChar(i-1) != ' '
+           && (i < last-1)
+           // In LaTeX mode, we don't want to
+           // break lines since some commands
+           // do not like this
+           && ! (font.latex() == LyXFont::ON)
+           // same in FreeSpacing mode
+           && !style->free_spacing
+           // In typewriter mode, we want to avoid 
+           // ! . ? : at the end of a line
+           && !(font.family() == LyXFont::TYPEWRITER_FAMILY
+                && (GetChar(i-1) == '.'
+                    || GetChar(i-1) == '?' 
+                    || GetChar(i-1) == ':'
+                    || GetChar(i-1) == '!'))) {
+               if (tex_code_break_column == 0) {
+                       // in batchmode we need LaTeX to still
+                       // see it as a space not as an extra '\n'
+                       file += " %\n";
+               } else {
+                       file += '\n';
+               }
+               texrow.newline();
+               texrow.start(this, i+1);
+               column = 0;
+       } else if (font.latex() == LyXFont::OFF) {
+               if (font.family() == LyXFont::TYPEWRITER_FAMILY) {
+                       file += '~';
+               } else {
+                       file += ' ';
+               }
+       }
+}
+
+
+//
+void LyXParagraph::SimpleTeXSpecialChars(LString &file, TexRow &texrow,
+                                        LyXFont &font, LyXFont &running_font, LyXFont &basefont,
+                                        bool &open_font, LyXLayout const * const style,
+                                        int &i, int &column, char const c)
+{
+       Inset* inset;
+
+       // Two major modes:  LaTeX or plain
+       // Handle here those cases common to both modes
+       // and then split to handle the two modes separately.
+       switch (c) {
+       case LYX_META_INSET:
+               inset = GetInset(i);
+               if (inset) {
+                       int len = file.length();
+                       int tmp = inset->Latex(file, style->isCommand());
+                       
+                       if (tmp) {
+                               column = 0;
+                       } else {
+                               column += file.length() - len;
+                       }
+                       for (;tmp--;) {
+                               texrow.newline();
+                       }
+               }
+               break;
+
+       case LYX_META_NEWLINE:
+               if (open_font) {
+                       column += running_font.latexWriteEndChanges(file, basefont);
+                       open_font = false;
+               }
+               basefont = getFont(-1);
+               running_font = basefont;
+               break;
+
+       case LYX_META_HFILL: 
+               file += "\\hfill{}";
+               column += 7;
+               break;
+
+       default:
+               // And now for the special cases within each mode
+               // Are we in LaTeX mode?
+               if (font.latex() == LyXFont::ON) {
+                       // at present we only have one option
+                       // but I'll leave it as a switch statement
+                       // so its simpler to extend. (ARRae)
+                       switch (c) {
+                       case LYX_META_PROTECTED_SEPARATOR: 
+                               file += ' ';
+                               break;
+
+                       default:
+                               // make sure that we will not print
+                               // error generating chars to the tex
+                               // file. This test would not be needed
+                               // if it were done in the buffer
+                               // itself.
+                               if (c != '\0') {
+                                       file += c;
+                               }
+                               break;
+                       }
+               } else {
+                       // Plain mode (i.e. not LaTeX)
+                       switch (c) {
+                       case LYX_META_PROTECTED_SEPARATOR: 
+                               file += '~';
+                               break;
+
+                       case '\\': 
+                               file += "\\textbackslash{}";
+                               column += 15;
+                               break;
+               
+                       case '°': case '±': case '²': case '³':  
+                       case '×': case '÷': case '¹': case 'ª':
+                       case 'º': case '¬': case 'µ':
+                               if (current_view->currentBuffer()->params.inputenc == "latin1") {
+                                       file += "\\ensuremath{";
+                                       file += c;
+                                       file += '}';
+                                       column += 13;
+                               } else {
+                                       file += c;
+                               }
+                               break;
+
+                       case '|': case '<': case '>':
+                               // In T1 encoding, these characters exist
+                               if (lyxrc->fontenc == "T1") {
+                                       file += c;
+                                       //... but we should avoid ligatures
+                                       if ((c == '>' || c == '<')
+                                           && i <= last-2
+                                           && GetChar(i+1) == c){
+                                               file += "\\textcompwordmark{}";
+                                               column += 19;
+                                       }
+                                       break;
+                               }
+                               // Typewriter font also has them
+                               if (font.family() == LyXFont::TYPEWRITER_FAMILY) {
+                                       file += c;
+                                       break;
+                               } 
+                               // Otherwise, we use what LaTeX
+                               // provides us.
+                               switch(c) {
+                               case '<':
+                                       file += "\\textless{}";
+                                       column += 10;
+                                       break;
+                               case '>':
+                                       file += "\\textgreater{}";
+                                       column += 13;
+                                       break;
+                               case '|':
+                                       file += "\\textbar{}";
+                                       column += 9;
+                                       break;
+                               }
+                               break;
+
+                       case '-': // "--" in Typewriter mode -> "-{}-"
+                               if (i <= last-2
+                                   && GetChar(i+1) == '-'
+                                   && font.family() == LyXFont::TYPEWRITER_FAMILY) {
+                                       file += "-{}";
+                                       column += 2;
+                               } else {
+                                       file += '-';
+                               }
+                               break;
+
+                       case '\"': 
+                               file += "\\char`\\\"{}";
+                               column += 9;
+                               break;
+
+                       case '£':
+                               if (current_view->currentBuffer()->params.inputenc == "default") {
+                                       file += "\\pounds{}";
+                                       column += 8;
+                               } else {
+                                       file += c;
+                               }
+                               break;
+
+                       case '$': case '&':
+                       case '%': case '#': case '{':
+                       case '}': case '_':
+                               file += '\\';
+                               file += c;
+                               column += 1;
+                               break;
+
+                       case '^': case '~':
+                               file += '\\';
+                               file += c;
+                               file += "{}";
+                               column += 3;
+                               break;
+
+                       case '*': case '[': case ']':
+                               // avoid being mistaken for optional arguments
+                               file += '{';
+                               file += c;
+                               file += '}';
+                               column += 2;
+                               break;
+
+                       case ' ':
+                               /* blanks are printed before font switching */
+                               // Sure? I am not! (try nice-latex)
+                               // I am sure it's correct. LyX might be smarter
+                               // in the future, but for now, nothing wrong is
+                               // written. (Asger)
+                               break;
+
+                       default:
+                               /* idea for labels --- begin*/
+                               /* check for LyX */
+                               if (c ==  'L'
+                                   && i <= last-3
+                                   && font.family() != LyXFont::TYPEWRITER_FAMILY
+                                   && GetChar(i+1) == 'y'
+                                   && GetChar(i+2) == 'X') {
+                                       file += "\\LyX{}";
+                                       i += 2;
+                                       column += 5;
+                               }
+                               /* check for TeX */ 
+                               else if (c == 'T'
+                                        && i <= last-3
+                                        && font.family() != LyXFont::TYPEWRITER_FAMILY
+                                        && GetChar(i+1) == 'e'
+                                        && GetChar(i+2) == 'X') {
+                                       file += "\\TeX{}";
+                                       i += 2;
+                                       column += 5;
+                               }
+                               /* check for LaTeX2e */ 
+                               else if (c == 'L'
+                                        && i <= last-7
+                                        && font.family() != LyXFont::TYPEWRITER_FAMILY
+                                        && GetChar(i+1) == 'a'
+                                        && GetChar(i+2) == 'T'
+                                        && GetChar(i+3) == 'e'
+                                        && GetChar(i+4) == 'X'
+                                        && GetChar(i+5) == '2'
+                                        && GetChar(i+6) == 'e') {
+                                       file += "\\LaTeXe{}";
+                                       i += 6;
+                                       column += 8;
+                               }
+                               /* check for LaTeX */ 
+                               else if (c == 'L'
+                                        && i <= last-5
+                                        && font.family() != LyXFont::TYPEWRITER_FAMILY
+                                        && GetChar(i+1) == 'a'
+                                        && GetChar(i+2) == 'T'
+                                        && GetChar(i+3) == 'e'
+                                        && GetChar(i+4) == 'X') {
+                                       file += "\\LaTeX{}";
+                                       i += 4;
+                                       column += 7;
+                                       /* idea for labels --- end*/ 
+                               } else if (c != '\0') {
+                                       file += c;
+                               }
+                               break;
+                       }
+               }
+       }
+}
+
+
+bool LyXParagraph::RoffContTableRows(FILE *fp, int i, int actcell)
+{
+       if (!table)
+               return false;
+
+       LyXFont
+               font1 = LyXFont(LyXFont::ALL_INHERIT),
+               font2;
+       Inset
+               *inset;
+       int
+               lastpos, cell;
+       char
+               c;
+       LString
+               fname2;
+       FILE
+               *fp2;
+
+       fname2 = TmpFileName(LString(),"RAT2");
+       lastpos = i;
+       cell = table->CellHasContRow(actcell);
+       actcell++;
+       while(cell >= 0) {
+               // first find the right position
+               i = lastpos;
+               for (; (i<last) && (actcell<cell); i++) {
+                       c = GetChar(i);
+                       if (c == LYX_META_NEWLINE)
+                               actcell++;
+               }
+               lastpos = i;
+               c=GetChar(i);
+               if ((c != ' ') && (c != LYX_META_NEWLINE))
+                       fprintf(fp," ");
+               for (; (i < last) && ((c=GetChar(i)) != LYX_META_NEWLINE); i++) {
+                       font2 = GetFontSettings(i);
+                       if (font1.latex() != font2.latex()) {
+                               if (font2.latex() != LyXFont::OFF)
+                                       continue;
+                       }
+                       c = GetChar(i);
+                       switch (c) {
+                       case LYX_META_INSET:
+                               if ((inset = GetInset(i))) {
+                                       if (!(fp2=fopen(fname2.c_str(),"w+"))) {
+                                               WriteAlert(_("LYX_ERROR:"), _("Cannot open temporary file:"), fname2);
+                                               return false;
+                                       }
+                                       inset->Latex(fp2,-1);
+                                       rewind(fp2);
+                                       c = fgetc(fp2);
+                                       while(!feof(fp2)) {
+                                               if (c == '\\')
+                                                       fprintf(fp,"\\\\");
+                                               else
+                                                       fputc(c,fp);
+                                               c = fgetc(fp2);
+                                       }
+                                       fclose(fp2);
+                               }
+                               break;
+                       case LYX_META_NEWLINE:
+                               break;
+                       case LYX_META_HFILL: 
+                               break;
+                       case LYX_META_PROTECTED_SEPARATOR:
+                               break;
+                       case '\\': 
+                               fprintf(fp, "\\\\");
+                               break;
+                       default:
+                               if (c != '\0')
+                                       fprintf(fp, "%c", c);
+                               else
+                                       lyxerr.debug("RoffAsciiTable: NULL char in structure.");
+                               break;
+                       }
+               }
+               cell = table->CellHasContRow(actcell);
+       }
+       return true;
+}
+
+LyXParagraph * LyXParagraph::TeXDeeper(LString &file, TexRow &texrow,
+                                      LString &foot, TexRow &foot_texrow,
+                                      int &foot_count)
+{
+       lyxerr.debug(LString("TeXDeeper...     ") + (long)this, Error::LATEX);
+       LyXParagraph *par = this;
+
+       while (par && par->depth == depth) {
+               if (par->IsDummy())
+                       lyxerr.print("ERROR (LyXParagraph::TeXDeeper)");
+               if (lyxstyle.Style(GetCurrentTextClass(), 
+                                  par->layout)->isEnvironment()
+                   || par->pextra_type != PEXTRA_NONE) 
+                       {
+                               par = par->TeXEnvironment(file, texrow,
+                                                         foot, foot_texrow,
+                                                         foot_count);
+                       } else {
+                               par = par->TeXOnePar(file, texrow,
+                                                    foot, foot_texrow,
+                                                    foot_count);
+                       }
+       }
+       lyxerr.debug(LString("TeXDeeper...done ") + (long)par, Error::LATEX);
+
+       return par;
+}
+
+
+LyXParagraph* LyXParagraph::TeXEnvironment(LString &file, TexRow &texrow,
+                                          LString &foot, TexRow &foot_texrow,
+                                          int &foot_count)
+{
+       bool
+               eindent_open = false;
+       bool
+               foot_this_level = false;
+               // flags when footnotetext should be appended to file.
+        static bool
+               minipage_open = false;
+        static int
+                minipage_open_depth = 0;
+       char
+               par_sep = current_view->currentBuffer()->params.paragraph_separation;
+    
+       lyxerr.debug(LString("TeXEnvironment...     ") + long(this), Error::LATEX);
+       if (IsDummy())
+               lyxerr.print("ERROR (LyXParagraph::TeXEnvironment)");
+
+       LyXLayout * style = lyxstyle.Style(GetCurrentTextClass(), layout);
+       
+       if (pextra_type == PEXTRA_INDENT) {
+               if (!pextra_width.empty()) {
+                       file += "\\begin{LyXParagraphIndent}{"
+                               + pextra_width + "}\n";
+               } else {
+                       //float ib = atof(pextra_widthp.c_str())/100;
+                       // LString can't handle floats at present (971109)
+                       // so I'll do a conversion by hand knowing that
+                       // the limits are 0.0 to 1.0. ARRae.
+                       file += "\\begin{LyXParagraphIndent}{";
+                       switch (pextra_widthp.length()) {
+                       case 3:
+                               file += "1.00";
+                               break;
+                       case 2:
+                               file += "0.";
+                               file += pextra_widthp;
+                               break;
+                       case 1:
+                               file += "0.0";
+                               file += pextra_widthp;
+                       }
+                       file += "\\columnwidth}\n";
+               }
+               texrow.newline();
+               eindent_open = true;
+       }
+       if ((pextra_type == PEXTRA_MINIPAGE) && !minipage_open) {
+               if (pextra_hfill && Previous() &&
+                   (Previous()->pextra_type == PEXTRA_MINIPAGE)) {
+                       file += "\\hfill{}\n";
+                       texrow.newline();
+               }
+               if (par_sep == LYX_PARSEP_INDENT) {
+                       file += "{\\setlength\\parindent{0pt}\n";
+                       texrow.newline();
+               }
+               file += "\\begin{minipage}";
+               switch(pextra_alignment) {
+               case MINIPAGE_ALIGN_TOP:
+                       file += "[t]";
+                       break;
+               case MINIPAGE_ALIGN_MIDDLE:
+                       file += "[m]";
+                       break;
+               case MINIPAGE_ALIGN_BOTTOM:
+                       file += "[b]";
+                       break;
+               }
+               if (!pextra_width.empty()) {
+                       file += '{';
+                       file += pextra_width + "}\n";
+               } else {
+                       //float ib = atof(par->pextra_width.c_str())/100;
+                       // LString can't handle floats at present
+                       // so I'll do a conversion by hand knowing that
+                       // the limits are 0.0 to 1.0. ARRae.
+                       file += '{';
+                       switch (pextra_widthp.length()) {
+                       case 3:
+                               file += "1.00";
+                               break;
+                       case 2:
+                               file += "0.";
+                               file += pextra_widthp;
+                               break;
+                       case 1:
+                               file += "0.0";
+                               file += pextra_widthp;
+                       }
+                       file += "\\columnwidth}\n";
+               }
+               texrow.newline();
+               if (par_sep == LYX_PARSEP_INDENT) {
+                       file += "\\setlength\\parindent{\\LyXMinipageIndent}\n";
+                       texrow.newline();
+               }
+               minipage_open = true;
+                minipage_open_depth = depth;
+       }
+
+#ifdef WITH_WARNINGS
+#warning Define FANCY_FOOTNOTE_CODE to re-enable Allan footnote code
+       //I disabled it because it breaks when lists span on several
+       //pages (JMarc)
+#endif
+       if (style->isEnvironment()){
+               if (style->latextype == LATEX_LIST_ENVIRONMENT) {
+#ifdef FANCY_FOOTNOTE_CODE
+                       if (foot_count < 0) {
+                               // flag that footnote[mark][text] should be
+                               // used for any footnotes from now on
+                               foot_count = 0;
+                               foot_this_level = true;
+                       }
+#endif
+                       file += "\\begin{" + style->latexname + "}{"
+                               + labelwidthstring + "}\n";
+               } else if (style->labeltype == LABEL_BIBLIO) {
+                       // ale970405
+                       file += "\\begin{" + style->latexname + "}{"
+                               + bibitemWidthest() + "}\n";
+               } else if (style->latextype == LATEX_ITEM_ENVIRONMENT) {
+#ifdef FANCY_FOOTNOTE_CODE
+                       if (foot_count < 0) {
+                               // flag that footnote[mark][text] should be
+                               // used for any footnotes from now on
+                               foot_count = 0;
+                               foot_this_level = true;
+                       }
+#endif
+                       file += "\\begin{" + style->latexname + '}'
+                               + style->latexparam + '\n';
+               } else 
+                       file += "\\begin{" + style->latexname + '}'
+                               + style->latexparam + '\n';
+               texrow.newline();
+       }
+       LyXParagraph *par = this;
+       do {
+               par = par->TeXOnePar(file, texrow,
+                                    foot, foot_texrow, foot_count);
+#if 0
+               if (eindent_open && par && par->pextra_type != PEXTRA_INDENT) {
+                       file += "\\end{LyXParagraphIndent}\n";
+                       texrow.newline();
+                       eindent_open = false;
+                       if (!style->isEnvironment())
+                               break;
+               }
+#endif
+                if (minipage_open && par && !style->isEnvironment() &&
+                    (par->pextra_type == PEXTRA_MINIPAGE) &&
+                    par->pextra_start_minipage) {
+                    file += "\\end{minipage}\n";
+                    texrow.newline();
+                    if (par_sep == LYX_PARSEP_INDENT) {
+                        file += "}\n";
+                       texrow.newline();
+                    }
+                    minipage_open = false;
+                }
+               if (par && par->depth > depth) {
+                       if (lyxstyle.Style(GetCurrentTextClass(),
+                                          par->layout)->isParagraph()
+                           && !par->table
+                           && !file.suffixIs("\n\n")) {
+                           // There should be at least one '\n' already
+                           // but we need there to be two for Standard 
+                           // paragraphs that are depth-increment'ed to be
+                           // output correctly.  However, tables can also be
+                           // paragraphs so don't adjust them.  ARRae
+                               file += '\n';
+                               texrow.newline();
+                       }
+                       par = par->TeXDeeper(file, texrow,
+                                            foot, foot_texrow, foot_count);
+               }
+               if (par && par->layout == layout && par->depth == depth &&
+                   (par->pextra_type == PEXTRA_MINIPAGE) && !minipage_open) {
+                       if (par->pextra_hfill && par->Previous() &&
+                           (par->Previous()->pextra_type == PEXTRA_MINIPAGE)){
+                               file += "\\hfill{}\n";
+                                texrow.newline();
+                        }
+//                     else
+//                             file += '\n';
+                       if (par_sep == LYX_PARSEP_INDENT) {
+                               file += "{\\setlength\\parindent{0pt}\n";
+                               texrow.newline();
+                       }
+                       file += "\\begin{minipage}";
+                       switch(par->pextra_alignment) {
+                       case MINIPAGE_ALIGN_TOP:
+                               file += "[t]";
+                               break;
+                       case MINIPAGE_ALIGN_MIDDLE:
+                               file += "[m]";
+                               break;
+                       case MINIPAGE_ALIGN_BOTTOM:
+                               file += "[b]";
+                               break;
+                       }
+                       if (!par->pextra_width.empty()) {
+                               file += '{';
+                               file += par->pextra_width;
+                               file += "}\n";
+                       } else {
+                               //float ib = atof(par->pextra_widthp.c_str())/100;
+                               // LString can't handle floats at present
+                               // so I'll do a conversion by hand knowing that
+                               // the limits are 0.0 to 1.0. ARRae.
+                               file += '{';
+                               switch (par->pextra_widthp.length()) {
+                               case 3:
+                                       file += "1.00";
+                                       break;
+                               case 2:
+                                       file += "0.";
+                                       file += par->pextra_widthp;
+                                       break;
+                               case 1:
+                                       file += "0.0";
+                                       file += par->pextra_widthp;
+                               }
+                               file += "\\columnwidth}\n";
+                       }
+                       texrow.newline();
+                       if (par_sep == LYX_PARSEP_INDENT) {
+                               file += "\\setlength\\parindent{\\LyXMinipageIndent}\n";
+                               texrow.newline();
+                       }
+                       minipage_open = true;
+                        minipage_open_depth = par->depth;
+               }
+       } while (par
+                && par->layout == layout
+                && par->depth == depth
+                && par->pextra_type == pextra_type);
+       if (style->isEnvironment()) {
+               file += "\\end{" + style->latexname + '}';
+               // maybe this should go after the minipage closes?
+               if (foot_this_level) {
+                       if (foot_count >= 1) {
+                               if (foot_count > 1) {
+                                       file += "\\addtocounter{footnote}{-";
+                                       file += foot_count - 1;
+                                       file += '}';
+                               }
+                               file += foot;
+                               texrow += foot_texrow;
+                               foot.clean();
+                               foot_texrow.reset();
+                               foot_count = 0;
+                       }
+               }
+       }
+        if (minipage_open && (minipage_open_depth == depth) &&
+            (!par || par->pextra_start_minipage ||
+             par->pextra_type != PEXTRA_MINIPAGE)) {
+                file += "\\end{minipage}\n";
+               texrow.newline();
+                if (par_sep == LYX_PARSEP_INDENT) {
+                        file += "}\n";
+                       texrow.newline();
+                }
+                if (par && par->pextra_type != PEXTRA_MINIPAGE) {
+                        file += "\\medskip\n\n";
+                       texrow.newline();
+                       texrow.newline();
+                }
+                minipage_open = false;
+        }
+       if (eindent_open) {
+               file += "\\end{LyXParagraphIndent}\n";
+               texrow.newline();
+       }
+//     if (tex_code_break_column){
+        if (!(par && (par->pextra_type==PEXTRA_MINIPAGE) 
+             && par->pextra_hfill)) {
+                file += '\n';
+               texrow.newline();
+       }
+       lyxerr.debug(LString("TeXEnvironment...done ") 
+                    + (long)par, Error::LATEX);
+       return par;  // ale970302
+}
+
+
+LyXParagraph * LyXParagraph::TeXFootnote(LString &file, TexRow &texrow,
+                                        LString &foot, TexRow &foot_texrow,
+                                        int &foot_count)
+{
+       lyxerr.debug(LString("TeXFootnote...     ") 
+                    + (long)this, Error::LATEX);
+       if (footnoteflag == LyXParagraph::NO_FOOTNOTE)
+               lyxerr.print("ERROR (LyXParagraph::TeXFootnote): "
+                            "No footnote!");
+
+       LyXParagraph *par = this;
+       LyXLayout * style = lyxstyle.Style(GetCurrentTextClass(), 
+                                          previous->GetLayout());
+       
+       if (style->needprotect && footnotekind != LyXParagraph::FOOTNOTE){
+               lyxerr.print("ERROR (LyXParagraph::TeXFootnote): "
+                            "Float other than footnote in command"
+                            " with moving argument is illegal");
+       }
+
+       if (footnotekind != LyXParagraph::FOOTNOTE
+           && footnotekind != LyXParagraph::MARGIN
+           && file.length()
+           && !file.suffixIs('\n')) {
+               // we need to ensure that real floats like tables and figures
+               // have their \begin{} on a new line otherwise we can get
+               // incorrect results when using the endfloat.sty package
+               // especially if two floats follow one another.  ARRae 981022
+               // NOTE: if the file is length 0 it must have just been
+               //       written out so we assume it ended with a '\n'
+               file += '\n';
+               texrow.newline();
+       }
+       
+       BufferParams *params = &current_view->currentBuffer()->params;
+       bool footer_in_body = true;
+       switch (footnotekind) {
+       case LyXParagraph::FOOTNOTE:
+               if (style->intitle) {
+                       file += "\\thanks{\n";
+                       footer_in_body = false;
+               } else {
+                       if (foot_count == -1) {
+                               // we're at depth 0 so we can use:
+                               file += "\\footnote{%\n";
+                               footer_in_body = false;
+                       } else {
+                               file += "\\footnotemark{}%\n";
+                               if (foot_count) {
+                                       // we only need this when there are
+                                       // multiple footnotes
+                                       foot += "\\stepcounter{footnote}";
+                               }
+                               foot += "\\footnotetext{%\n";
+                               foot_texrow.start(this,0);
+                               foot_texrow.newline();
+                               ++foot_count;
+                       }
+               }
+               break;
+       case LyXParagraph::MARGIN:
+               file += "\\marginpar{\n";
+               break;
+       case LyXParagraph::FIG:
+               if (pextra_type == PEXTRA_FLOATFLT
+                   && (!pextra_width.empty()
+                       || !pextra_widthp.empty())) {
+                       char bufr[80];
+                       if (!pextra_width.empty())
+                               sprintf(bufr, "\\begin{floatingfigure}{%s}\n",
+                                       pextra_width.c_str());
+                       else
+                               sprintf(bufr, "\\begin{floatingfigure}{%f\\textwidth}\n",
+                                       atoi(pextra_widthp.c_str())/100.0);
+                       file += bufr;
+               } else {
+                       file += "\\begin{figure}";
+                       if (!params->float_placement.empty()) { 
+                               file += '[';
+                               file += params->float_placement;
+                               file += "]\n";
+                       } else {
+                               file += '\n';
+                       }
+               }
+               break;
+       case LyXParagraph::TAB:
+               file += "\\begin{table}";
+               if (!params->float_placement.empty()) { 
+                       file += '[';
+                       file += params->float_placement;
+                       file += "]\n";
+               } else {
+                       file += '\n';
+               }
+               break;
+       case LyXParagraph::WIDE_FIG:
+               file += "\\begin{figure*}";
+               if (!params->float_placement.empty()) { 
+                       file += '[';
+                       file += params->float_placement;
+                       file += "]\n";
+               } else {
+                       file += '\n';
+               }
+               break;
+       case LyXParagraph::WIDE_TAB:
+               file += "\\begin{table*}";
+               if (!params->float_placement.empty()) { 
+                       file += '[';
+                       file += params->float_placement;
+                       file += "]\n";
+               } else {
+                       file += '\n';
+               }
+               break;
+       case LyXParagraph::ALGORITHM:
+               file += "\\begin{algorithm}\n";
+               break;
+       }
+       texrow.newline();
+   
+       if (footnotekind != LyXParagraph::FOOTNOTE
+           || !footer_in_body) {
+               // Process text for all floats except footnotes in body
+               do {
+                       LyXLayout *style = lyxstyle.Style(GetCurrentTextClass(),
+                                                         par->layout);
+                       if (par->IsDummy())
+                               lyxerr.print("ERROR (LyXParagraph::TeXFootnote)");
+                       if (style->isEnvironment()
+                           || par->pextra_type == PEXTRA_MINIPAGE) { /* && !minipage_open ?? */
+                               // Allows the use of minipages within float environments.
+                               // Shouldn't be circular because we don't support
+                               // footnotes inside floats (yet). ARRae
+                               par = par->TeXEnvironment(file, texrow,
+                                                         foot, foot_texrow,
+                                                         foot_count);
+                       } else {
+                               par = par->TeXOnePar(file, texrow,
+                                                    foot, foot_texrow,
+                                                    foot_count);
+                       }
+                       
+                       if (par && !par->IsDummy() && par->depth > depth) {
+                               par = par->TeXDeeper(file, texrow,
+                                                    foot, foot_texrow,
+                                                    foot_count);
+                       }
+               } while (par && par->footnoteflag != LyXParagraph::NO_FOOTNOTE);
+       } else {
+               // process footnotes > depth 0 or in environments separately
+               // NOTE: Currently don't support footnotes within footnotes
+               //       even though that is possible using the \footnotemark
+               LString dummy;
+               TexRow dummy_texrow;
+               int dummy_count = 0;
+               do {
+                       LyXLayout *style = lyxstyle.Style(GetCurrentTextClass(),
+                                                         par->layout);
+                       if (par->IsDummy())
+                               lyxerr.print("ERROR (LyXParagraph::TeXFootnote)");
+                       if (style->isEnvironment()
+                           || par->pextra_type == PEXTRA_MINIPAGE) { /* && !minipage_open ?? */
+                               // Allows the use of minipages within float environments.
+                               // Shouldn't be circular because we don't support
+                               // footnotes inside floats (yet). ARRae
+                               par = par->TeXEnvironment(foot, foot_texrow,
+                                                         dummy, dummy_texrow,
+                                                         dummy_count);
+                       } else {
+                               par = par->TeXOnePar(foot, foot_texrow,
+                                                    dummy, dummy_texrow,
+                                                    dummy_count);
+                       }
+
+                       if (par && !par->IsDummy() && par->depth > depth) {
+                               par = par->TeXDeeper(foot, foot_texrow,
+                                                    dummy, dummy_texrow,
+                                                    dummy_count);
+                       }
+               } while (par && par->footnoteflag != LyXParagraph::NO_FOOTNOTE);
+               if (dummy_count) {
+                       lyxerr.print("ERROR (LyXParagraph::TeXFootnote): "
+                                    "Footnote in a Footnote -- not supported");
+               }
+       }
+
+       switch (footnotekind) {
+       case LyXParagraph::FOOTNOTE:
+               if (footer_in_body) {
+                       // This helps tell which of the multiple
+                       // footnotetexts an error was in.
+                       foot += "}%\n";
+                       foot_texrow.newline();
+               } else {
+                       file += '}';
+               }
+               break;
+       case LyXParagraph::MARGIN:
+               file += '}';
+               break;
+       case LyXParagraph::FIG:
+               if (pextra_type == PEXTRA_FLOATFLT
+                   && (!pextra_width.empty()
+                       || !pextra_widthp.empty()))
+                       file += "\\end{floatingfigure}";
+               else
+                       file += "\\end{figure}";
+               break;
+       case LyXParagraph::TAB:
+               file += "\\end{table}";
+               break;
+       case LyXParagraph::WIDE_FIG:
+               file += "\\end{figure*}";
+               break;
+       case LyXParagraph::WIDE_TAB:
+               file += "\\end{table*}";
+               break;
+       case LyXParagraph::ALGORITHM:
+               file += "\\end{algorithm}";
+               break;
+       }
+
+       if (footnotekind != LyXParagraph::FOOTNOTE
+           && footnotekind != LyXParagraph::MARGIN) {
+               // we need to ensure that real floats like tables and figures
+               // have their \end{} on a line of their own otherwise we can
+               // get incorrect results when using the endfloat.sty package.
+               file += "\n";
+               texrow.newline();
+       }
+
+       lyxerr.debug(LString("TeXFootnote...done ") +
+                    long(par->next), Error::LATEX);
+       return par;
+}
+
+
+void LyXParagraph::SetPExtraType(int type, const char *width,const char *widthp)
+{
+    pextra_type = type;
+    pextra_width = width;
+    pextra_widthp = widthp;
+
+    if (lyxstyle.Style(GetCurrentTextClass(), 
+                       layout)->isEnvironment()) {
+        LyXParagraph
+            *par = this,
+            *ppar = par;
+
+        while (par && (par->layout == layout) && (par->depth == depth)) {
+            ppar = par;
+            par = par->Previous();
+            if (par)
+                par = par->FirstPhysicalPar();
+            while (par && par->depth > depth) {
+                par = par->Previous();
+                if (par)
+                    par = par->FirstPhysicalPar();
+            }
+        }
+        par = ppar;
+        while (par && (par->layout == layout) && (par->depth == depth)) {
+            par->pextra_type = type;
+            par->pextra_width = width;
+            par->pextra_widthp = widthp;
+            par = par->NextAfterFootnote();
+            if (par && (par->depth > depth))
+                par->SetPExtraType(type,width,widthp);
+            while (par && ((par->depth > depth) || par->IsDummy()))
+                par = par->NextAfterFootnote();
+        }
+    }
+}
+
+void LyXParagraph::UnsetPExtraType()
+{
+    if (pextra_type == PEXTRA_NONE)
+        return;
+    
+    pextra_type = PEXTRA_NONE;
+    pextra_width.clean();
+    pextra_widthp.clean();
+
+    if (lyxstyle.Style(GetCurrentTextClass(), 
+                       layout)->isEnvironment()) {
+        LyXParagraph
+            *par = this,
+            *ppar = par;
+
+        while (par && (par->layout == layout) && (par->depth == depth)) {
+            ppar = par;
+            par = par->Previous();
+            if (par)
+                par = par->FirstPhysicalPar();
+            while (par && par->depth > depth) {
+                par = par->Previous();
+                if (par)
+                    par = par->FirstPhysicalPar();
+            }
+        }
+        par = ppar;
+        while (par && (par->layout == layout) && (par->depth == depth)) {
+            par->pextra_type = PEXTRA_NONE;
+            par->pextra_width.clean();
+            par->pextra_widthp.clean();
+            par = par->NextAfterFootnote();
+            if (par && (par->depth > depth))
+                par->UnsetPExtraType();
+            while (par && ((par->depth > depth) || par->IsDummy()))
+                par = par->NextAfterFootnote();
+        }
+    }
+}
diff --git a/src/pathstack.C b/src/pathstack.C
new file mode 100644 (file)
index 0000000..abba1d4
--- /dev/null
@@ -0,0 +1,92 @@
+// lyx-stack.C : implementation of PathStack class
+//   this file is part of LyX, the High Level Word Processor
+//   copyright (C) 1995-1996, Matthias Ettrich and the LyX Team
+
+#include <config.h>
+#include <unistd.h>
+
+#ifdef __GNUG__
+#pragma implementation "pathstack.h"
+#endif
+
+#include "pathstack.h"
+#include "filetools.h"
+#include "error.h"
+#include "LString.h"
+#include "gettext.h"
+
+// temporary hack
+#include "lyx_gui_misc.h"
+
+//     $Id: pathstack.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $ 
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: pathstack.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+// global path stack
+PathStack lyxPathStack;
+
+// Standard constructor
+PathStack::PathStack(LString const & string)
+       : Path(string)
+{
+       Next = NULL;
+}
+
+// Destructor
+PathStack::~PathStack()
+{
+       if (Next)
+               delete Next;
+}
+
+// Changes to directory
+int PathStack::PathPush(LString const & Path)
+{
+       // checks path string validity
+       if (Path.empty()) return 1;
+
+       PathStack *NewNode;
+
+       // gets current directory and switch to new one
+       LString CurrentPath = GetCWD();
+       if ((CurrentPath.empty()) || chdir(Path.c_str())) {
+               WriteFSAlert(_("Error: Could not change to directory: "), 
+                            Path);
+               return 2;
+       }
+
+       lyxerr.debug("PathPush: " + Path);
+       // adds new node
+       NewNode = new PathStack(CurrentPath);
+       NewNode->Next = Next;
+       Next = NewNode;
+       return 0;
+}
+
+// Goes back to previous directory
+int PathStack::PathPop()
+{
+       // checks stack validity and extracts old node
+       PathStack *OldNode = Next;
+       if (!OldNode) {
+               WriteAlert (_("LyX Internal Error:"), _("Path Stack underflow."));
+               return 1;
+       }
+       Next = OldNode->Next;
+       OldNode->Next = NULL;
+
+       // switches to old directory
+       int Result = 0;
+       if (chdir(OldNode->Path.c_str())) {
+               WriteFSAlert(_("Error: Could not change to directory: "), 
+                            Path);
+               Result = 2;
+       }
+       lyxerr.debug("PathPop: " + OldNode->Path);
+       delete OldNode;
+
+       return Result;
+}
+
diff --git a/src/pathstack.h b/src/pathstack.h
new file mode 100644 (file)
index 0000000..7d97a3b
--- /dev/null
@@ -0,0 +1,50 @@
+// -*- C++ -*-
+// lyx-stack.H : definition of PathStack class
+//   this file is part of LyX, the High Level Word Processor
+//   copyright (C) 1995-1996, Matthias Ettrich and the LyX Team
+
+#ifndef __LYX_STACK_H__
+#define __LYX_STACK_H__
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "LString.h"
+
+/// Path stack class definition
+class PathStack {
+public:
+       ///
+       PathStack() {
+               Next = 0;
+       }
+       ///
+       PathStack(LString const & Path);
+       ///
+       ~PathStack();
+       ///
+       int PathPush(LString const & Path);
+       ///
+       int PathPop();
+private:
+       ///
+       LString Path;
+       ///
+       PathStack *Next;
+};
+
+// global path stack
+extern PathStack lyxPathStack;
+
+/// some global wrapper functions
+inline int PathPush(LString const & szPath) {
+       return lyxPathStack.PathPush(szPath);
+}
+
+///
+inline int PathPop() { 
+       return lyxPathStack.PathPop(); 
+}
+
+#endif
diff --git a/src/print_form.C b/src/print_form.C
new file mode 100644 (file)
index 0000000..fb8d989
--- /dev/null
@@ -0,0 +1,145 @@
+// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "print_form.h"
+
+FD_form_print *create_form_form_print(void)
+{
+  FL_OBJECT *obj;
+  FD_form_print *fdui = (FD_form_print *) fl_calloc(1, sizeof(FD_form_print));
+
+  fdui->form_print = fl_bgn_form(FL_NO_BOX, 340, 360);
+  obj = fl_add_box(FL_UP_BOX,0,0,340,360,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,215,320,90,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,205,70,20,_("Print to"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->input_printer = obj = fl_add_input(FL_NORMAL_INPUT,90,225,230,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->input_file = obj = fl_add_input(FL_NORMAL_INPUT,90,265,230,30,"");
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+
+  fdui->group_radio_printto = fl_bgn_group();
+  fdui->radio_printer = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,225,80,30,idex(_("Printer|#P")));fl_set_button_shortcut(obj,scex(_("Printer|#P")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_file = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,265,80,30,idex(_("File|#F")));fl_set_button_shortcut(obj,scex(_("File|#F")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,180,20,150,70,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,20,160,180,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_button(FL_RETURN_BUTTON,10,315,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PrintOKCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,120,315,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PrintApplyCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,230,315,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,PrintCancelCB,0);
+
+  fdui->group_radio_pages = fl_bgn_group();
+  fdui->radio_all_pages = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,30,160,30,idex(_("All Pages|#G")));fl_set_button_shortcut(obj,scex(_("All Pages|#G")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_odd_pages = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,60,160,30,idex(_("Only Odd Pages|#O")));fl_set_button_shortcut(obj,scex(_("Only Odd Pages|#O")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_even_pages = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,90,160,30,idex(_("Only Even Pages|#E")));fl_set_button_shortcut(obj,scex(_("Only Even Pages|#E")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+
+  fdui->group_radio_order = fl_bgn_group();
+  fdui->radio_order_normal = obj = fl_add_checkbutton(FL_RADIO_BUTTON,180,30,150,30,idex(_("Normal Order|#N")));fl_set_button_shortcut(obj,scex(_("Normal Order|#N")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_order_reverse = obj = fl_add_checkbutton(FL_RADIO_BUTTON,180,60,150,30,idex(_("Reverse Order|#R")));fl_set_button_shortcut(obj,scex(_("Reverse Order|#R")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  obj = fl_add_text(FL_NORMAL_TEXT,200,10,60,20,_("Order"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,10,50,20,_("Print"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->input_pages = obj = fl_add_input(FL_NORMAL_INPUT,20,160,140,30,_("Pages:"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,180,110,150,90,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_text(FL_NORMAL_TEXT,200,95,50,20,_("Copies"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->input_copies = obj = fl_add_input(FL_NORMAL_INPUT,190,160,130,30,_("Count:"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+  fdui->do_unsorted = obj = fl_add_checkbutton(FL_PUSH_BUTTON,180,115,140,30,idex(_("Unsorted|#U")));fl_set_button_shortcut(obj,scex(_("Unsorted|#U")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_form();
+
+  //fdui->form_print->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_sendto *create_form_form_sendto(void)
+{
+  FL_OBJECT *obj;
+  FD_form_sendto *fdui = (FD_form_sendto *) fl_calloc(1, sizeof(FD_form_sendto));
+
+  fdui->form_sendto = fl_bgn_form(FL_NO_BOX, 340, 210);
+  obj = fl_add_box(FL_UP_BOX,0,0,340,210,"");
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,20,310,80,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,10,80,20,_("File Type"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  fdui->input_cmd = obj = fl_add_input(FL_NORMAL_INPUT,10,130,320,30,idex(_("Command:|#C")));fl_set_button_shortcut(obj,scex(_("Command:|#C")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_TOP_LEFT);
+  obj = fl_add_button(FL_RETURN_BUTTON,10,170,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,SendtoOKCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,120,170,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,SendtoApplyCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,230,170,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_callback(obj,SendtoCancelCB,0);
+
+  fdui->group_ftype = fl_bgn_group();
+  fdui->radio_ftype_dvi = obj = fl_add_checkbutton(FL_RADIO_BUTTON,110,30,110,30,idex(_("DVI|#D")));fl_set_button_shortcut(obj,scex(_("DVI|#D")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_ftype_ps = obj = fl_add_checkbutton(FL_RADIO_BUTTON,110,60,110,30,idex(_("Postscript|#P")));fl_set_button_shortcut(obj,scex(_("Postscript|#P")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_ftype_latex = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,60,100,30,idex(_("LaTeX|#T")));fl_set_button_shortcut(obj,scex(_("LaTeX|#T")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_button(obj, 1);
+  fdui->radio_ftype_lyx = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,30,100,30,idex(_("LyX|#L")));fl_set_button_shortcut(obj,scex(_("LyX|#L")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->radio_ftype_ascii = obj = fl_add_checkbutton(FL_RADIO_BUTTON,220,30,90,30,idex(_("Ascii|#s")));fl_set_button_shortcut(obj,scex(_("Ascii|#s")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  fl_end_form();
+
+  //fdui->form_sendto->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
diff --git a/src/print_form.h b/src/print_form.h
new file mode 100644 (file)
index 0000000..0a932aa
--- /dev/null
@@ -0,0 +1,56 @@
+/** Header file generated with fdesign on Mon Apr 12 19:09:43 1999.**/
+
+#ifndef FD_form_print_h_
+#define FD_form_print_h_
+
+/** Callbacks, globals and object handlers **/
+extern void PrintOKCB(FL_OBJECT *, long);
+extern void PrintApplyCB(FL_OBJECT *, long);
+extern void PrintCancelCB(FL_OBJECT *, long);
+
+extern void SendtoOKCB(FL_OBJECT *, long);
+extern void SendtoApplyCB(FL_OBJECT *, long);
+extern void SendtoCancelCB(FL_OBJECT *, long);
+
+
+/**** Forms and Objects ****/
+typedef struct {
+       FL_FORM *form_print;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *input_printer;
+       FL_OBJECT *input_file;
+       FL_OBJECT *group_radio_printto;
+       FL_OBJECT *radio_printer;
+       FL_OBJECT *radio_file;
+       FL_OBJECT *group_radio_pages;
+       FL_OBJECT *radio_all_pages;
+       FL_OBJECT *radio_odd_pages;
+       FL_OBJECT *radio_even_pages;
+       FL_OBJECT *group_radio_order;
+       FL_OBJECT *radio_order_normal;
+       FL_OBJECT *radio_order_reverse;
+       FL_OBJECT *input_pages;
+       FL_OBJECT *input_copies;
+       FL_OBJECT *do_unsorted;
+} FD_form_print;
+
+extern FD_form_print * create_form_form_print(void);
+typedef struct {
+       FL_FORM *form_sendto;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *input_cmd;
+       FL_OBJECT *group_ftype;
+       FL_OBJECT *radio_ftype_dvi;
+       FL_OBJECT *radio_ftype_ps;
+       FL_OBJECT *radio_ftype_latex;
+       FL_OBJECT *radio_ftype_lyx;
+       FL_OBJECT *radio_ftype_ascii;
+} FD_form_sendto;
+
+extern FD_form_sendto * create_form_form_sendto(void);
+
+#endif /* FD_form_print_h_ */
diff --git a/src/screen.C b/src/screen.C
new file mode 100644 (file)
index 0000000..3cde7c3
--- /dev/null
@@ -0,0 +1,848 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team
+*
+*======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "lyxscreen.h"
+#endif
+
+#include "lyxscreen.h"
+#include "lyxdraw.h"
+#include "lyxtext.h"
+
+//     $Id: screen.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $    
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: screen.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+extern int mono_video;
+extern int fast_selection;
+
+
+// Constructor
+LyXScreen::LyXScreen(Window window,
+                    Dimension width, 
+                    Dimension height,
+                    Dimension offset_x,
+                    Dimension offset_y,
+                    LyXText *text_ptr)
+       : text(text_ptr),_window(window), 
+         _width(width),_height(height),
+         _offset_x(offset_x), _offset_y(offset_y)
+{
+       first = 0;
+   
+       /* the cursor isnt yet visible */ 
+       cursor_visible = false;
+       screen_refresh_y = -1;
+
+       /* create the foreground pixmap */
+       foreground = XCreatePixmap (fl_display,
+                                   fl_root,
+                                   _width, _height, 
+                                   fl_get_visual_depth());
+       cursor_pixmap = 0;
+       cursor_pixmap_x = 0;
+       cursor_pixmap_y = 0;
+       cursor_pixmap_w = 0;
+       cursor_pixmap_h = 0;
+}
+
+
+// Destructor
+LyXScreen::~LyXScreen()
+{
+       XFreePixmap(fl_display, foreground);
+}
+
+
+void LyXScreen::Redraw()
+{
+       DrawFromTo(0, _height);
+       screen_refresh_y = -1;
+       expose(0, 0, _width, _height);
+       if (cursor_visible) {
+               cursor_visible = false;
+               ShowCursor();
+       }
+}
+
+
+void LyXScreen::expose(int x, int y, int exp_width, int exp_height)
+{
+       XCopyArea(fl_display,
+                 foreground,
+                 _window,
+                 getGC(gc_copy),
+                 x, y,
+                 exp_width, exp_height,
+                 x+_offset_x, y+_offset_y);
+}
+
+
+void LyXScreen::DrawFromTo(int y1, int y2)
+{
+       Row* row = 0;
+       long  y_text = 0;
+       long y = 0;
+       
+       y_text = first + y1;
+   
+       /* get the first needed row */ 
+       row = text->GetRowNearY(y_text);
+       /* y_text is now the real beginning of the row */
+   
+       y = y_text - first;
+       /* y1 is now the real beginning of row on the screen */
+       
+       while (row != NULL && y < y2) {
+
+               text->GetVisibleRow(*this, y, row, y + first);
+               y += row->height;
+               row = row -> next;
+
+       }
+   
+       /* maybe we have to clear the screen at the bottom */ 
+       if (y < y2) {
+               fillRectangle(gc_lighted,
+                             0,
+                             y,
+                             _width,
+                             y2 - y);
+       }
+}
+
+
+void LyXScreen::DrawOneRow(Row *row, long &y_text)
+{
+       long y = 0;
+   
+       y = y_text - first;
+      
+       if (y + row->height > 0 && y - row->height <= _height) {
+               /* ok there is something visible */
+               text->GetVisibleRow(*this, y, row, y + first);
+       }
+       y_text+=row->height;
+}
+
+
+/* draws the screen, starting with textposition y. uses as much already
+* printed pixels as possible */
+void LyXScreen::Draw(long  y)
+{
+       if (cursor_visible) HideCursor();
+
+       if (y<0) y = 0;
+       long old_first = first;
+       first = y;
+
+       /* is any optimiziation possible? */ 
+       if ((y - old_first) < _height 
+           && (old_first - y) < _height) {
+               if (first < old_first) {
+                       DrawFromTo(0, old_first - first);
+                       XCopyArea (fl_display,
+                                  _window,
+                                  _window,
+                                  getGC(gc_copy),
+                                  _offset_x, _offset_y, 
+                                  _width , _height - old_first + first,
+                                  _offset_x, _offset_y + old_first - first);
+                       // expose the area drawn
+                       expose(0, 0, _width, old_first - first);
+               } else  {
+                       DrawFromTo(_height + old_first - first, _height);
+                       XCopyArea (fl_display,
+                                  _window,
+                                  _window,
+                                  getGC(gc_copy),
+                                  _offset_x, _offset_y + first - old_first, 
+                                  _width , _height + old_first - first, 
+                                  _offset_x, _offset_y);
+                       // expose the area drawn
+                       expose(0, _height + old_first - first, 
+                              _width, first - old_first);
+               }
+       } else {
+               /* make a dumb new-draw */ 
+               DrawFromTo(0, _height);
+               expose(0, 0, _width, _height);
+       }
+}
+
+
+void LyXScreen::ShowCursor()
+{
+       long x = 0;
+       long y1 = 0;
+       long y2 = 0;
+   
+       if (cursor_visible) return;
+   
+       x = text->cursor.x;
+       
+       y1 = text->cursor.y - text->real_current_font.maxAscent() - first;
+       if (y1 < 0) y1 = 0;
+       
+       y2 = text->cursor.y + text->real_current_font.maxDescent() - first;
+       if (y2 > _height) y2 = _height;
+
+       // Secure against very strange situations
+       if (y2 < y1) y2 = y1;
+
+       if (fast_selection || mono_video) {
+               if (y2 > 0 && y1 < _height) {
+                       XDrawLine(fl_display,
+                                 _window, getGC(gc_select),
+                                 x + _offset_x,
+                                 y1 + _offset_y,
+                                 x + _offset_x,
+                                 y2 + _offset_y);
+                       cursor_visible = true;
+               }
+       } else {
+               if (cursor_pixmap){
+                       XFreePixmap(fl_display, cursor_pixmap);
+                       cursor_pixmap = 0;
+               }
+   
+               if (y2 > 0 && y1 < _height) {
+                       cursor_pixmap_w = 1;
+                       cursor_pixmap_h = y2 - y1 + 1;
+                       cursor_pixmap_x = x;
+                       cursor_pixmap_y = y1;
+                       cursor_pixmap =
+                               XCreatePixmap(fl_display,
+                                             fl_root,
+                                             cursor_pixmap_w,
+                                             cursor_pixmap_h,
+                                             fl_get_visual_depth());
+                       XCopyArea(fl_display,
+                                 _window,
+                                 cursor_pixmap,
+                                 getGC(gc_copy),
+                                 _offset_x + cursor_pixmap_x, 
+                                 _offset_y + cursor_pixmap_y,
+                                 cursor_pixmap_w, cursor_pixmap_h,
+                                 0, 0);
+                       XDrawLine(fl_display,
+                                 _window, getGC(gc_copy),
+                                 x + _offset_x,
+                                 y1 + _offset_y,
+                                 x + _offset_x,
+                                 y2 + _offset_y); 
+                       cursor_visible = true;
+               }
+       }
+}
+
+
+/* returns 1 if first has changed, otherwise 0 */ 
+int LyXScreen::FitManualCursor(long /*x*/, long y, int asc, int desc)
+{
+       long  newtop = first;
+  
+       if (y + desc  - first >= _height)
+               newtop = y - 3*_height / 4;   /* the scroll region must be so big!! */
+       else if (y - asc < first 
+                && first > 0) {
+               newtop = y - _height / 4;
+       }
+       if (newtop < 0)
+               newtop = 0;
+  
+       if (newtop != first){
+               Draw(newtop);
+               first = newtop;
+               return 1;
+       }
+       return 0;
+}
+
+
+void  LyXScreen::HideManualCursor(long x, long y, int asc, int desc){
+       if (fast_selection || mono_video)
+               ShowManualCursor(x,y,asc,desc);
+       else
+               HideCursor();
+}
+
+
+void  LyXScreen::ShowManualCursor(long x, long y, int asc, int desc)
+{
+       long y1 = 0;
+       long y2 = 0;
+       
+       y1 = y - first - asc;
+       if (y1 < 0)
+               y1 =0;
+       y2 = y -first + desc;
+       if (y2 > _height)
+               y2 = _height;
+       
+       if (fast_selection || mono_video){
+               if (y2 > 0 && y1 < _height) {
+                       XDrawLine(fl_display,
+                                 _window, getGC(gc_select),
+                                 x+_offset_x,
+                                 y1+_offset_y,
+                                 x+_offset_x,
+                                 y2+_offset_y);
+               }
+       } else {
+               if (cursor_pixmap){
+                       XFreePixmap(fl_display, cursor_pixmap);
+                       cursor_pixmap = 0;
+               }
+               
+               if (y2 > 0 && y1 < _height) {
+                       cursor_pixmap_w = 1;
+                       cursor_pixmap_h = y2 - y1 + 1;
+                       cursor_pixmap_x = x,
+                       cursor_pixmap_y = y1;
+                       cursor_pixmap =
+                               XCreatePixmap (fl_display,
+                                              fl_root,
+                                              cursor_pixmap_w,
+                                              cursor_pixmap_h,
+                                              fl_get_visual_depth());
+
+                       XCopyArea (fl_display,
+                                  _window,
+                                  cursor_pixmap,
+                                  getGC(gc_copy),
+                                  _offset_x + cursor_pixmap_x,
+                                  _offset_y + cursor_pixmap_y,
+                                  cursor_pixmap_w,
+                                  cursor_pixmap_h,
+                                  0, 0);
+                       XDrawLine(fl_display,
+                                 _window, getGC(gc_copy),
+                                 x+_offset_x,
+                                 y1+_offset_y,
+                                 x+_offset_x,
+                                 y2+_offset_y);                        
+               }
+               cursor_visible = true;
+       }
+}
+
+
+void LyXScreen::HideCursor()
+{
+       if (!cursor_visible) return;
+       
+       if (fast_selection || mono_video){
+               cursor_visible = false;
+               ShowCursor();
+               cursor_visible = false;
+       } else {
+               if (cursor_pixmap){
+                       XCopyArea (fl_display, 
+                                  cursor_pixmap,
+                                  _window,
+                                  getGC(gc_copy),
+                                  0, 0, 
+                                  cursor_pixmap_w, cursor_pixmap_h,
+                                  cursor_pixmap_x + _offset_x,
+                                  cursor_pixmap_y + _offset_y);
+               }
+               cursor_visible = false;
+       }
+}
+
+
+void LyXScreen::CursorToggle()
+{
+       if (cursor_visible)
+               HideCursor();
+       else
+               ShowCursor();
+}
+
+
+/* returns a new top so that the cursor is visible */ 
+long LyXScreen::TopCursorVisible()
+{
+       long  newtop = first;
+
+       if (text->cursor.y
+           - text->cursor.row->baseline
+           + text->cursor.row->height
+           - first >= _height) {
+               if (text->cursor.row->height < _height
+                   && text->cursor.row->height > _height/4)
+                       newtop = text->cursor.y
+                               + text->cursor.row->height
+                               - text->cursor.row->baseline - _height;
+               else
+                       newtop = text->cursor.y
+                               - 3*_height / 4;   /* the scroll region must be so big!! */
+       } else if (text->cursor.y - text->cursor.row->baseline < first 
+                  && first > 0) {
+               if (text->cursor.row->height < _height
+                   && text->cursor.row->height > _height/4)
+                       newtop = text->cursor.y - text->cursor.row->baseline;
+               else {
+                       newtop = text->cursor.y - _height / 4;
+                       if (newtop > first)
+                               newtop = first;
+               }
+       }
+       if (newtop < 0)
+               newtop = 0;
+       
+       return newtop;
+}
+
+
+/* scrolls the screen so that the cursor is visible, if necessary.
+* returns 1 if a change was made, otherwise 0 */ 
+int LyXScreen::FitCursor()
+{
+       /* is a change necessary */ 
+       long  newtop = TopCursorVisible();
+       int result = (newtop != first);
+       if (result)
+               Draw(newtop);
+       return result;
+}
+
+   
+void LyXScreen::Update()
+{
+       long y = 0;
+
+       if (text->status == LyXText::NEED_MORE_REFRESH
+           || screen_refresh_y > -1 ) {
+               if (screen_refresh_y > -1
+                   && screen_refresh_y < text->refresh_y)
+                       y = screen_refresh_y;
+               else
+                       y = text->refresh_y;
+               
+               if (y < first) y = first;
+               
+               DrawFromTo(y - first, _height);
+               text->refresh_y = 0;
+               text->status = LyXText::UNCHANGED;
+               screen_refresh_y = -1;
+               expose(0, y-first, _width, _height - (y - first));
+       } else if (text->status == LyXText::NEED_VERY_LITTLE_REFRESH) {
+               /* ok I will update the current cursor row */
+               y = text->refresh_y;
+               DrawOneRow(text->refresh_row, y);
+               text->status = LyXText::UNCHANGED;
+               expose(0, text->refresh_y-first,
+                    _width, text->refresh_row->height);
+       }
+}
+
+
+void LyXScreen::SmallUpdate()
+{
+       Row *row = 0;
+       long y = 0;
+       long y2 = 0;
+       
+       if (text->status == LyXText::NEED_MORE_REFRESH){
+               /* ok I will update till the current cursor row */
+               row = text->refresh_row;
+               y = text->refresh_y;
+               y2 = y;
+      
+               if (y > text->cursor.y) {
+                       Update();
+                       return;
+               }
+        
+               while (row && row != text->cursor.row && y < first + _height) {
+                       DrawOneRow(row, y);
+                       row = row->next;
+               }
+      
+               DrawOneRow(row, y);
+               screen_refresh_y = y;
+               screen_refresh_row = row->next;
+               text->status = LyXText::UNCHANGED;
+               // Is the right regin exposed?
+               expose(0, y2-first, _width, y-y2);
+       } else if (text->status == LyXText::NEED_VERY_LITTLE_REFRESH) {
+               /* ok I will update the current cursor row */
+               row = text->refresh_row;
+               y = text->refresh_y;
+               DrawOneRow(row, y);
+               text->status = LyXText::UNCHANGED;
+               expose(0, text->refresh_y - first,
+                      _width, row->height);
+       }
+}
+
+
+void LyXScreen::ToggleSelection(bool kill_selection)
+{
+       long top = 0;
+       long bottom = 0;
+   
+       /* only if there is a selection */ 
+       if (!text->selection)
+               return;
+       
+       if (fast_selection || mono_video){
+               
+               /* selection only in one row ?*/ 
+               if (text->sel_start_cursor.y == text->sel_end_cursor.y) {
+                       
+                       /* only if something is visible */ 
+                       if (text->sel_start_cursor.y
+                           - text->sel_start_cursor.row->baseline
+                           - first < _height
+                           && text->sel_start_cursor.y
+                           - text->sel_start_cursor.row->baseline + 
+                           text->sel_start_cursor.row->height - first > 0) {
+                               top = text->sel_start_cursor.y
+                                       - text->sel_start_cursor.row->baseline
+                                       - first;
+                               bottom = top
+                                       + text->sel_start_cursor.row->height;
+                               if (top<0)
+                                       top = 0;
+                               if (bottom > _height)
+                                       bottom = _height;
+                               XFillRectangle(fl_display,_window,
+                                              getGC(gc_select),
+                                              text->sel_start_cursor.x
+                                              +_offset_x, 
+                                              top+_offset_y,
+                                              text->sel_end_cursor.x
+                                              - text->sel_start_cursor.x,
+                                              bottom - top);
+                       }
+               } else {
+                       /* the sel_start_cursor row first */ 
+                       /* only if anything is visible */ 
+                       if (text->sel_start_cursor.y
+                           - text->sel_start_cursor.row->baseline
+                           - first < _height
+                           && text->sel_start_cursor.y
+                           - text->sel_start_cursor.row->baseline + 
+                           text->sel_start_cursor.row->height - first > 0) {
+                               top = text->sel_start_cursor.y
+                                       - text->sel_start_cursor.row->baseline
+                                       - first;
+                               bottom = top
+                                       + text->sel_start_cursor.row->height;
+                               if (top<0)
+                                       top = 0;
+                               if (bottom > _height)
+                                       bottom = _height;
+                               XFillRectangle(fl_display,_window,
+                                              getGC(gc_select),
+                                              text->sel_start_cursor.x
+                                              +_offset_x, 
+                                              top+_offset_y,
+                                              _width
+                                              - text->sel_start_cursor.x,
+                                              bottom - top);
+                       }
+                       
+                       /* the main body */ 
+                       
+                       if (text->sel_start_cursor.row->next !=
+                           text->sel_end_cursor.row) {
+                               top = text->sel_start_cursor.y
+                                       - text->sel_start_cursor.row->baseline
+                                       + text->sel_start_cursor.row->height;
+                               bottom = text->sel_end_cursor.y
+                                       - text->sel_end_cursor.row->baseline;
+                               
+                               if (top - first < 0)
+                                       top = first;
+                               if (bottom - first < 0)
+                                       bottom = first;
+                               
+                               if (bottom - first > _height)
+                                       bottom = first + _height;
+                               if (top - first > _height)
+                                       top = first + _height;
+                               
+                               if (top != bottom) {
+                                       XFillRectangle(fl_display,
+                                                      _window,
+                                                      getGC(gc_select),
+                                                      0+_offset_x, 
+                                                      top - first+_offset_y,
+                                                      _width,
+                                                      bottom - top);
+                               }
+                       }
+                       
+                       /* the sel_end_cursor row last */ 
+                       if (text->sel_end_cursor.y
+                           - text->sel_end_cursor.row->baseline
+                           - first < _height
+                           && text->sel_end_cursor.y
+                           - text->sel_end_cursor.row->baseline +
+                           text->sel_end_cursor.row->height - first > 0) {
+                               top = text->sel_end_cursor.y
+                                       - text->sel_end_cursor.row->baseline
+                                       - first;
+                               bottom = top
+                                       + text->sel_end_cursor.row->height;
+                               if (top<0)
+                                       top = 0;
+                               if (bottom > _height)
+                                       bottom = _height;
+                               XFillRectangle(fl_display,_window,
+                                              getGC(gc_select),
+                                              0+_offset_x, 
+                                              top+_offset_y,
+                                              text->sel_end_cursor.x,
+                                              bottom - top);
+                       }
+               }
+       } else {
+               top = text->sel_start_cursor.y
+                       - text->sel_start_cursor.row->baseline;
+               bottom = text->sel_end_cursor.y
+                       - text->sel_end_cursor.row->baseline 
+                       + text->sel_end_cursor.row->height;
+               
+               if (top - first < 0)
+                       top = first;
+               if (bottom - first < 0)
+                       bottom = first;
+               
+               if (bottom - first > _height)
+                       bottom = first + _height;
+               if (top - first > _height)
+                       top = first + _height;
+               
+               if (kill_selection)
+                       text->selection = 0;
+               DrawFromTo(top - first, bottom - first);
+               expose(0, top - first, _width, bottom - first - (top - first));
+       }
+}
+  
+   
+void LyXScreen::ToggleToggle()
+{
+       long top = 0;
+       long bottom = 0;
+       
+       if (text->toggle_cursor.par == text->toggle_end_cursor.par
+           && text->toggle_cursor.pos == text->toggle_end_cursor.pos)
+               return;
+
+       if (fast_selection || mono_video){
+               
+               /* selection only in one row ?*/ 
+               if (text->toggle_cursor.y == text->toggle_end_cursor.y) {
+                       
+                       /* only if anything is visible */ 
+                       if (text->toggle_cursor.y - text->toggle_cursor.row->baseline - first < _height
+                           && text->toggle_cursor.y - text->toggle_cursor.row->baseline + 
+                           text->toggle_cursor.row->height - first > 0) {
+                               top = text->toggle_cursor.y - text->toggle_cursor.row->baseline - first;
+                               bottom = top + text->toggle_cursor.row->height;
+                               if (top < 0) top = 0;
+                               if (bottom > _height) bottom = _height;
+                               XFillRectangle(fl_display,_window,
+                                              getGC(gc_select),
+                                              text->toggle_cursor.x+_offset_x, 
+                                              top+_offset_y,
+                                              text->toggle_end_cursor.x  -
+                                              text->toggle_cursor.x,
+                                              bottom - top);
+                       }
+               } else {
+                       /* the toggle_cursor row first */ 
+                       /* only if anything is visible */ 
+                       if (text->toggle_cursor.y - text->toggle_cursor.row->baseline - first < _height
+                           && text->toggle_cursor.y - text->toggle_cursor.row->baseline + 
+                           text->toggle_cursor.row->height - first > 0) {
+                               top = text->toggle_cursor.y - text->toggle_cursor.row->baseline - first;
+                               bottom = top + text->toggle_cursor.row->height;
+                               if (top<0)
+                                       top = 0;
+                               if (bottom > _height)
+                                       bottom = _height;
+                               XFillRectangle(fl_display,_window,
+                                              getGC(gc_select),
+                                              text->toggle_cursor.x+_offset_x, 
+                                              top+_offset_y,
+                                              _width - text->toggle_cursor.x,
+                                              bottom - top);
+                       }
+                       
+                       /* the main body */ 
+                       
+                       if (text->toggle_cursor.row->next !=
+                           text->toggle_end_cursor.row) {
+                               top = text->toggle_cursor.y
+                                       - text->toggle_cursor.row->baseline
+                                       + text->toggle_cursor.row->height;
+                               bottom = text->toggle_end_cursor.y
+                                       - text->toggle_end_cursor.row->baseline;
+                               
+                               if (top - first < 0)
+                                       top = first;
+                               if (bottom - first < 0)
+                                       bottom = first;
+                               
+                               if (bottom - first > _height)
+                                       bottom = first + _height;
+                               if (top - first > _height)
+                                       top = first + _height;
+                               
+                               if (top != bottom) {
+                                       XFillRectangle(fl_display,_window,
+                                                      getGC(gc_select),
+                                                      0+_offset_x, 
+                                                      top - first+_offset_y,
+                                                      _width,
+                                                      bottom - top);
+                               }
+                       }
+                       
+                       /* the toggle_end_cursor row last */ 
+                       if (text->toggle_end_cursor.y - text->toggle_end_cursor.row->baseline - first < _height
+                           && text->toggle_end_cursor.y - text->toggle_end_cursor.row->baseline +
+                           text->toggle_end_cursor.row->height - first > 0) {
+                               top = text->toggle_end_cursor.y
+                                       - text->toggle_end_cursor.row->baseline
+                                       - first;
+                               bottom = top
+                                       + text->toggle_end_cursor.row->height;
+                               if (top<0)
+                                       top = 0;
+                               if (bottom > _height)
+                                       bottom = _height;
+                               XFillRectangle(fl_display,_window,
+                                              getGC(gc_select),
+                                              0+_offset_x, 
+                                              top+_offset_y,
+                                              text->toggle_end_cursor.x,
+                                              bottom - top);
+                       }
+               }
+       } else {
+               top = text->toggle_cursor.y
+                       - text->toggle_cursor.row->baseline;
+               bottom = text->toggle_end_cursor.y
+                       - text->toggle_end_cursor.row->baseline 
+                       + text->toggle_end_cursor.row->height;
+               
+               if (top - first < 0)
+                       top = first;
+               if (bottom - first < 0)
+                       bottom = first;
+               
+               if (bottom - first > _height)
+                       bottom = first + _height;
+               if (top - first > _height)
+                       top = first + _height;
+               
+               DrawFromTo(top - first, bottom - first);
+               expose(0, top - first, _width, bottom - first - (top - first));
+       }
+}
+
+
+       
+void LyXScreen::drawTableLine(int baseline, int x, int length, bool on_off)
+{
+       GC gc;
+       if (on_off)
+               gc = getGC(gc_thin_on_off_line);
+       else
+               gc = getGC(gc_copy);
+       drawLine(gc,
+                x,
+                baseline,
+                x + length,
+                baseline);
+}
+
+       
+void LyXScreen::drawVerticalTableLine(int x, int y1, int y2, bool on_off)
+{
+       GC gc;
+       if (on_off)
+               gc = getGC(gc_thin_on_off_line);
+       else
+               gc = getGC(gc_copy);
+       drawLine(gc,
+                x,
+                y1,
+                x,
+                y2);
+}
+
+
+void LyXScreen::drawFrame(int /*ft*/, int x, int y, int w, int h,
+                         FL_COLOR /*col*/, int /*b*/)
+{
+#ifdef WITH_WARNINGS
+#warning Implement this using X11 calls, and the repaint problems are gone!
+#endif
+// At least, I think that should do it since we only have them after
+// one of these buttons are displayed now! Lars, it seems you've hit the
+// nail :-) (Asger)
+//     fl_winset(foreground);
+//     fl_drw_frame(ft, x,  y,  w,  h, col, b);
+       // This should be changed to draw a button like frame, in the
+       // mean time we'll just use a regular rectangle
+     
+         // I want the buttons back before 0.12. OK, this is very simple,
+         // like what is done in xforms sources.  (Ale)
+
+       // This one is too dirty. Get rid of it.
+       extern GC fl_gc;
+
+       // Please comment this annonymous variable.
+       int d = 2;
+
+       // I think these calls to fl_color might make xforms sometimes
+       // draw the wrong color on other objects.
+       fl_color(FL_TOP_BCOL);
+       XFillRectangle(fl_display, foreground, fl_gc,x-d,y-d,w+2*d,d);
+       fl_color(FL_BOTTOM_BCOL);
+       XFillRectangle(fl_display, foreground, fl_gc,x-d,y+h,w+2*d,d);
+       // Now a couple of trapezoids
+       XPoint pl[4], pr[4]; 
+       pl[0].x = x-d;   pl[0].y = y-d;
+       pl[1].x = x-d;   pl[1].y = y+h+d;
+       pl[2].x = x;     pl[2].y = y+h;
+       pl[3].x = x;     pl[3].y = y;
+       
+       pr[0].x = x+w+d; pr[0].y = y-d;
+       pr[1].x = x+w+d; pr[1].y = y+h+d;
+       pr[2].x = x+w;   pr[2].y = y+h;
+       pr[3].x = x+w;   pr[3].y = y;
+       
+       fl_color(FL_LEFT_BCOL);
+       XFillPolygon(fl_display,
+                    foreground,
+                    fl_gc, pl, 4,
+                    Convex, CoordModeOrigin); 
+       fl_color(FL_RIGHT_BCOL);
+       XFillPolygon(fl_display,
+                    foreground,
+                    fl_gc, pr, 4,
+                    Convex, CoordModeOrigin); 
+}
diff --git a/src/sp_form.C b/src/sp_form.C
new file mode 100644 (file)
index 0000000..c0fbf52
--- /dev/null
@@ -0,0 +1,126 @@
+// File modified by fdfix.sh for use by lyx (with xforms 0.81) and gettext
+#include <config.h>
+#include "lyx_gui_misc.h"
+#include "gettext.h"
+
+/* Form definition file generated with fdesign. */
+
+#include FORMS_H_LOCATION
+#include <stdlib.h>
+#include "sp_form.h"
+
+FD_form_spell_options *create_form_form_spell_options(void)
+{
+  FL_OBJECT *obj;
+  FD_form_spell_options *fdui = (FD_form_spell_options *) fl_calloc(1, sizeof(FD_form_spell_options));
+
+  fdui->form_spell_options = fl_bgn_form(FL_NO_BOX, 340, 400);
+  obj = fl_add_box(FL_UP_BOX,0,0,340,400,"");
+    fl_set_object_lsize(obj,0);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,20,320,110,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+  obj = fl_add_frame(FL_ENGRAVED_FRAME,10,150,320,200,"");
+    fl_set_object_color(obj,FL_COL1,FL_COL1);
+
+  fdui->lang_buts = fl_bgn_group();
+  fdui->buflang = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,30,320,30,idex(_("Use language of document|#D")));fl_set_button_shortcut(obj,scex(_("Use language of document|#D")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->altlang = obj = fl_add_checkbutton(FL_RADIO_BUTTON,10,60,320,30,idex(_("Use alternate language:|#U")));fl_set_button_shortcut(obj,scex(_("Use alternate language:|#U")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fl_end_group();
+
+  fdui->altlang_input = obj = fl_add_input(FL_NORMAL_INPUT,40,90,240,30,"");
+    fl_set_object_lsize(obj,0);
+  fdui->compounds = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,160,320,30,idex(_("Treat run-together words as legal|#T")));fl_set_button_shortcut(obj,scex(_("Treat run-together words as legal|#T")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->inpenc = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,190,320,30,idex(_("Input Encoding switch to ispell|#I")));fl_set_button_shortcut(obj,scex(_("Input Encoding switch to ispell|#I")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->ok = obj = fl_add_button(FL_RETURN_BUTTON,10,360,100,30,_("OK"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,SpellOptionsOKCB,0);
+  obj = fl_add_button(FL_NORMAL_BUTTON,230,360,100,30,idex(_("Cancel|^[")));fl_set_button_shortcut(obj,scex(_("Cancel|^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,SpellOptionsCancelCB,0);
+  fdui->perdict = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,220,320,30,idex(_("Use alternate personal dictionary:|#P")));fl_set_button_shortcut(obj,scex(_("Use alternate personal dictionary:|#P")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->esc_chars = obj = fl_add_checkbutton(FL_PUSH_BUTTON,10,280,320,30,idex(_("Extra special chars allowed in words:|#E")));fl_set_button_shortcut(obj,scex(_("Extra special chars allowed in words:|#E")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->perdict_input = obj = fl_add_input(FL_NORMAL_INPUT,40,250,240,30,"");
+    fl_set_object_lsize(obj,0);
+  fdui->esc_chars_input = obj = fl_add_input(FL_NORMAL_INPUT,40,310,240,30,"");
+    fl_set_object_lsize(obj,0);
+  obj = fl_add_text(FL_NORMAL_TEXT,20,10,90,20,_("Dictionary"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_text(FL_NORMAL_TEXT,30,140,70,20,_("Options"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    fl_set_object_lstyle(obj,FL_BOLD_STYLE);
+  obj = fl_add_button(FL_NORMAL_BUTTON,120,360,100,30,idex(_("Apply|#A")));fl_set_button_shortcut(obj,scex(_("Apply|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_gravity(obj, FL_SouthEast, FL_SouthEast);
+    fl_set_object_callback(obj,SpellOptionsApplyCB,0);
+  fl_end_form();
+
+  //fdui->form_spell_options->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
+FD_form_spell_check *create_form_form_spell_check(void)
+{
+  FL_OBJECT *obj;
+  FD_form_spell_check *fdui = (FD_form_spell_check *) fl_calloc(1, sizeof(FD_form_spell_check));
+
+  fdui->form_spell_check = fl_bgn_form(FL_NO_BOX, 540, 280);
+  obj = fl_add_box(FL_UP_BOX,0,0,540,280,"");
+    fl_set_object_lsize(obj,0);
+  fdui->text = obj = fl_add_text(FL_NORMAL_TEXT,80,10,220,30,"");
+    fl_set_object_boxtype(obj,FL_DOWN_BOX);
+    fl_set_object_lsize(obj,0);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+  fdui->input = obj = fl_add_input(FL_NORMAL_INPUT,80,40,220,30,_("Replace"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->browser = obj = fl_add_browser(FL_SELECT_BROWSER,80,70,220,150,_("Near\nMisses"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT);
+  fdui->options = obj = fl_add_button(FL_NORMAL_BUTTON,310,210,220,30,idex(_("Spellchecker Options...|#O")));fl_set_button_shortcut(obj,scex(_("Spellchecker Options...|#O")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->start = obj = fl_add_button(FL_NORMAL_BUTTON,310,10,220,30,idex(_("Start spellchecking|#S")));fl_set_button_shortcut(obj,scex(_("Start spellchecking|#S")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->insert = obj = fl_add_button(FL_NORMAL_BUTTON,310,50,220,30,idex(_("Insert in personal dictionary|#I")));fl_set_button_shortcut(obj,scex(_("Insert in personal dictionary|#I")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->ignore = obj = fl_add_button(FL_NORMAL_BUTTON,310,110,220,30,idex(_("Ignore word|#g")));fl_set_button_shortcut(obj,scex(_("Ignore word|#g")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->accept = obj = fl_add_button(FL_NORMAL_BUTTON,310,80,220,30,idex(_("Accept word in this session|#A")));fl_set_button_shortcut(obj,scex(_("Accept word in this session|#A")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->stop = obj = fl_add_button(FL_NORMAL_BUTTON,310,180,220,30,idex(_("Stop spellchecking|#T")));fl_set_button_shortcut(obj,scex(_("Stop spellchecking|#T")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->done = obj = fl_add_button(FL_NORMAL_BUTTON,310,240,220,30,idex(_("Close Spellchecker|#C^[")));fl_set_button_shortcut(obj,scex(_("Close Spellchecker|#C^[")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    // xgettext:no-c-format
+  obj = fl_add_box(FL_NO_BOX,10,250,50,20,_("0 %"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+    // xgettext:no-c-format
+  obj = fl_add_box(FL_NO_BOX,250,250,50,20,_("100 %"));
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+    fl_set_object_lalign(obj,FL_ALIGN_RIGHT|FL_ALIGN_INSIDE);
+  fdui->replace = obj = fl_add_button(FL_NORMAL_BUTTON,310,140,220,30,idex(_("Replace word|#R")));fl_set_button_shortcut(obj,scex(_("Replace word|#R")),1);
+    fl_set_object_lsize(obj,FL_NORMAL_SIZE);
+  fdui->slider = obj = fl_add_slider(FL_HOR_FILL_SLIDER,10,230,290,20,"");
+    fl_set_object_color(obj,FL_BLUE,FL_COL1);
+    fl_set_object_lsize(obj,0);
+    fl_set_object_lalign(obj,FL_ALIGN_LEFT);
+  fl_end_form();
+
+  //fdui->form_spell_check->fdui = fdui;
+
+  return fdui;
+}
+/*---------------------------------------*/
+
diff --git a/src/sp_form.h b/src/sp_form.h
new file mode 100644 (file)
index 0000000..f84524b
--- /dev/null
@@ -0,0 +1,54 @@
+/** Header file generated with fdesign on Mon Apr 12 19:09:43 1999.**/
+
+#ifndef FD_form_spell_options_h_
+#define FD_form_spell_options_h_
+
+/** Callbacks, globals and object handlers **/
+extern void SpellOptionsOKCB(FL_OBJECT *, long);
+extern void SpellOptionsCancelCB(FL_OBJECT *, long);
+extern void SpellOptionsApplyCB(FL_OBJECT *, long);
+
+
+
+/**** Forms and Objects ****/
+typedef struct {
+       FL_FORM *form_spell_options;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *lang_buts;
+       FL_OBJECT *buflang;
+       FL_OBJECT *altlang;
+       FL_OBJECT *altlang_input;
+       FL_OBJECT *compounds;
+       FL_OBJECT *inpenc;
+       FL_OBJECT *ok;
+       FL_OBJECT *perdict;
+       FL_OBJECT *esc_chars;
+       FL_OBJECT *perdict_input;
+       FL_OBJECT *esc_chars_input;
+} FD_form_spell_options;
+
+extern FD_form_spell_options * create_form_form_spell_options(void);
+typedef struct {
+       FL_FORM *form_spell_check;
+       void *vdata;
+       char *cdata;
+       long  ldata;
+       FL_OBJECT *text;
+       FL_OBJECT *input;
+       FL_OBJECT *browser;
+       FL_OBJECT *options;
+       FL_OBJECT *start;
+       FL_OBJECT *insert;
+       FL_OBJECT *ignore;
+       FL_OBJECT *accept;
+       FL_OBJECT *stop;
+       FL_OBJECT *done;
+       FL_OBJECT *replace;
+       FL_OBJECT *slider;
+} FD_form_spell_check;
+
+extern FD_form_spell_check * create_form_form_spell_check(void);
+
+#endif /* FD_form_spell_options_h_ */
diff --git a/src/spellchecker.C b/src/spellchecker.C
new file mode 100644 (file)
index 0000000..e74c163
--- /dev/null
@@ -0,0 +1,779 @@
+/*
+ *This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team
+ *
+ *======================================================
+ */
+
+#include <config.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <ctype.h>
+#include FORMS_H_LOCATION
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+
+#ifdef HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+
+#include "LString.h"
+#include "sp_form.h"
+#include "spellchecker.h"
+#include "lyx_main.h"
+#include "buffer.h"
+#include "lyxrc.h"
+#include "BufferView.h"
+#include "gettext.h"
+#include "lyx_gui_misc.h"
+
+extern LyXRC *lyxrc;
+extern BufferView *current_view;
+
+//     $Id: spellchecker.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $      
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: spellchecker.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+// Spellchecker status
+enum {
+       ISP_OK = 1,
+       ISP_ROOT,
+       ISP_COMPOUNDWORD,
+       ISP_UNKNOWN,
+       ISP_MISSED,
+       ISP_IGNORE
+};
+
+static bool RunSpellChecker(LString const &);
+
+static FILE *in, *out;  /* streams to communicate with ispell */
+pid_t isp_pid = -1; // pid for the `ispell' process. Also used (RO) in
+                    // lyx_cb.C
+
+// the true spell checker program being used
+enum ActualSpellChecker {ASC_ISPELL, ASC_ASPELL};
+static ActualSpellChecker actual_spell_checker;
+
+static int isp_fd;
+
+static FD_form_spell_options *fd_form_spell_options = NULL;
+FD_form_spell_check *fd_form_spell_check = NULL;
+
+//void sigchldhandler(int sig);
+void sigchldhandler(pid_t pid, int *status);
+
+//extern void sigchldchecker(int sig);
+extern void sigchldchecker(pid_t pid, int *status);
+
+struct isp_result {
+       int flag;
+       int count;
+       LString string;
+       char **misses;
+       isp_result() {
+               flag = ISP_UNKNOWN;
+               count = 0;
+               misses = (char**)NULL;
+       }
+       ~isp_result() {
+               if (misses) delete[] misses;
+       }
+};
+
+
+/***** Spellchecker options *****/
+
+// Rewritten to use ordinary LyX xforms loop and OK, Apply and Cancel set,
+// now also LString. Amazing, eh? (Asger)
+
+// Set (sane) values in form to current spellchecker options
+void SpellOptionsUpdate() 
+{
+       // Alternate language
+       if (lyxrc->isp_alt_lang.empty()) {
+               lyxrc->isp_use_alt_lang = false;
+       } else {
+               fl_set_input(fd_form_spell_options->altlang_input,
+                            lyxrc->isp_alt_lang.c_str());
+       }
+       if (lyxrc->isp_use_alt_lang) {
+               fl_set_button(fd_form_spell_options->buflang,0);
+               fl_set_button(fd_form_spell_options->altlang,1);
+       } else {
+               fl_set_button(fd_form_spell_options->buflang,1);
+               fl_set_button(fd_form_spell_options->altlang,0);
+       }  
+
+       // Personal dictionary
+       if (lyxrc->isp_pers_dict.empty()) {
+               lyxrc->isp_use_pers_dict = false;
+       } else {
+               fl_set_input(fd_form_spell_options->perdict_input,
+                            lyxrc->isp_pers_dict.c_str());
+       }
+       fl_set_button(fd_form_spell_options->perdict,
+                     lyxrc->isp_use_pers_dict ? 1:0);
+
+       // Escape chars
+       if (lyxrc->isp_esc_chars.empty()) {
+               lyxrc->isp_use_esc_chars = false;
+       } else {
+               fl_set_input(fd_form_spell_options->esc_chars_input,
+                            lyxrc->isp_esc_chars.c_str());
+       }
+       fl_set_button(fd_form_spell_options->esc_chars,
+                     lyxrc->isp_use_esc_chars ? 1:0);
+
+       // Options
+       fl_set_button(fd_form_spell_options->compounds,
+                     lyxrc->isp_accept_compound ? 1 : 0);
+       fl_set_button(fd_form_spell_options->inpenc,
+                     lyxrc->isp_use_input_encoding ? 1 : 0);
+}
+
+// Update spellchecker options
+void SpellOptionsApplyCB(FL_OBJECT *, long)
+{
+       // Build new status from form data
+       lyxrc->isp_use_alt_lang =
+               fl_get_button(fd_form_spell_options->altlang);
+       lyxrc->isp_use_pers_dict =
+               fl_get_button(fd_form_spell_options->perdict);
+       lyxrc->isp_accept_compound =
+               fl_get_button(fd_form_spell_options->compounds);
+       lyxrc->isp_use_esc_chars =
+               fl_get_button(fd_form_spell_options->esc_chars);
+       lyxrc->isp_use_input_encoding =
+               fl_get_button(fd_form_spell_options->inpenc);
+
+       // Update strings with data from input fields
+       lyxrc->isp_alt_lang =
+               fl_get_input(fd_form_spell_options->altlang_input);
+       lyxrc->isp_pers_dict =
+               fl_get_input(fd_form_spell_options->perdict_input);
+       lyxrc->isp_esc_chars =
+               fl_get_input(fd_form_spell_options->esc_chars_input);
+
+       // Update form
+       SpellOptionsUpdate();
+}
+
+
+void SpellOptionsCancelCB(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_form_spell_options->form_spell_options);
+}
+
+
+void SpellOptionsOKCB(FL_OBJECT * ob, long data)
+{
+       SpellOptionsApplyCB(ob, data);
+       SpellOptionsCancelCB(ob, data);
+}
+
+
+// Show spellchecker options form
+void SpellCheckerOptions()
+{
+       // Create form if nescessary
+       if (fd_form_spell_options ==  NULL) {
+               fd_form_spell_options = create_form_form_spell_options();
+               // Make sure pressing the close box does not kill LyX. (RvdK)
+               fl_set_form_atclose(fd_form_spell_options->form_spell_options, 
+                                   CancelCloseBoxCB, NULL);
+       }
+
+       // Update form to current options
+       SpellOptionsUpdate();
+
+       // Focus in alternate language field
+       fl_set_focus_object(fd_form_spell_options->form_spell_options,
+                           fd_form_spell_options->altlang_input);
+
+       // Show form
+       if (fd_form_spell_options->form_spell_options->visible) {
+               fl_raise_form(fd_form_spell_options->form_spell_options);
+       } else {
+               fl_show_form(fd_form_spell_options->form_spell_options,
+                            FL_PLACE_MOUSE,FL_FULLBORDER,
+                            _("Spellchecker Options"));
+       }
+}
+
+
+/***** Spellchecker *****/
+
+// Could also use a clean up. (Asger Alstrup)
+
+static
+void create_ispell_pipe(LString const & lang)
+{
+       static char o_buf[BUFSIZ];  // jc: it could be smaller
+       int pipein[2], pipeout[2];
+       char * argv[14];
+       int argc;
+
+       isp_pid = -1;
+
+       if(pipe(pipein)==-1 || pipe(pipeout)==-1) {
+               fprintf(stderr,"LyX: Can't create pipe for spellchecker!");
+               return;
+       }
+
+       if ((out = fdopen(pipein[1], "w"))==NULL) {
+               fprintf(stderr,"LyX: Can't create stream for pipe for spellchecker!");
+               return;
+       }
+
+       if ((in = fdopen(pipeout[0], "r"))==NULL) {
+               fprintf(stderr,"LyX: Can't create stream for pipe for spellchecker!");
+               return;
+       }
+
+       setvbuf(out, o_buf, _IOLBF, BUFSIZ);
+
+       isp_fd = pipeout[0];
+
+       isp_pid = fork();
+
+       if(isp_pid==-1) {
+               fprintf(stderr,"LyX: Can't create child process for spellchecker!");
+               return;
+       }
+
+       if(isp_pid==0) {        
+               /* child process */
+               dup2(pipein[0], STDIN_FILENO);
+               dup2(pipeout[1], STDOUT_FILENO);
+               close(pipein[0]);
+               close(pipein[1]);
+               close(pipeout[0]);
+               close(pipeout[1]);
+
+               argc = 0;
+               argv[argc++] = lyxrc->isp_command.copy();
+               argv[argc++] = LString("-a").copy(); // "Pipe" mode
+
+               if (lang != "default") {
+                       argv[argc++] = LString("-d").copy(); // Dictionary file
+                       argv[argc++] = lang.copy();
+               }
+
+               if (lyxrc->isp_accept_compound)
+                       // Consider run-together words as legal compounds
+                       argv[argc++] = LString("-C").copy(); 
+               else
+                       // Report run-together words with
+                       // missing blanks as errors
+                       argv[argc++] = LString("-B").copy(); 
+
+               if (lyxrc->isp_use_esc_chars) {
+                       // Specify additional characters that
+                       // can be part of a word
+                       argv[argc++] = LString("-w").copy(); 
+                       // Put the escape chars in ""s
+                       argv[argc++] = (LString("\"") + lyxrc->isp_esc_chars +
+                                       LString("\"")).copy();
+               }
+               if (lyxrc->isp_use_pers_dict) {
+                       // Specify an alternate personal dictionary
+                       argv[argc++] = LString("-p").copy(); 
+                       argv[argc++] = lyxrc->isp_pers_dict.copy();
+               }
+               if (lyxrc->isp_use_input_encoding &&
+                   current_view->currentBuffer()->params.inputenc != "default") {
+                       argv[argc++] = LString("-T").copy(); // Input encoding
+                       argv[argc++] = current_view->currentBuffer()->params.inputenc.copy();
+               }
+
+               argv[argc++] = NULL;
+
+               execvp("ispell", (char * const *) argv);
+
+               // free the memory used by LString::copy in the
+               // setup of argv
+               for (int i=0; i < argc -1; i++)
+                       delete[] argv[i];
+               
+               fprintf(stderr, "LyX: Failed to start ispell!\n");
+               _exit(0);
+       }
+
+       /* Parent process: Read ispells identification message */
+       // Hmm...what are we using this id msg for? Nothing? (Lgb)
+       // Actually I used it to tell if it's truly Ispell or if it's
+       // aspell -- (kevinatk@home.com)
+       char buf[2048];
+#ifdef WITH_WARNINGS
+#warning verify that this works.
+#endif
+       fd_set infds;
+       struct timeval tv;
+       int retval = 0;
+       FD_ZERO(&infds);
+       FD_SET(pipeout[0], &infds);
+       tv.tv_sec = 15; // fifteen second timeout. Probably too much,
+                       // but it can't really hurt.
+       tv.tv_usec = 0;
+
+       // Configure provides us with macros which are supposed to do
+       // the right typecast.
+       retval = select(SELECT_TYPE_ARG1 (pipeout[0]+1), 
+                       SELECT_TYPE_ARG234 (&infds), 
+                       0, 
+                       0, 
+                       SELECT_TYPE_ARG5 (&tv));
+
+       if (retval > 0) {
+               // Ok, do the reading. We don't have to FD_ISSET since
+               // there is only one fd in infds.
+               fgets(buf, 2048, in);
+               
+               // determine if the spell checker is really Aspell
+               if (strstr(buf, "Aspell"))
+                 actual_spell_checker = ASC_ASPELL;
+               else
+                 actual_spell_checker = ASC_ISPELL;
+               
+       } else if (retval == 0) {
+               // timeout. Give nice message to user.
+               fprintf(stderr, "Ispell read timed out, what now?\n");
+#ifdef WITH_WARNINGS
+#warning Is this the correct thing to do?
+#endif
+               isp_pid = -1;
+               close(pipeout[0]); close(pipeout[1]);
+               close(pipein[0]); close(pipein[1]);
+               isp_fd = -1;
+       } else {
+               // Select returned error
+               fprintf(stderr, "Select on ispell returned error, what now?\n");
+       }
+}
+
+
+// Send word to ispell and get reply
+static
+isp_result *ispell_check_word(char *word)
+{
+       //Please rewrite to use LString.
+       isp_result *result;
+       char buf[1024], *p;
+       int count, i;
+
+       fputs(word, out); 
+       fputc('\n', out);
+  
+       fgets(buf, 1024, in); 
+  
+       /* I think we have to check if ispell is still alive here because
+          the signal-handler could have disabled blocking on the fd */
+       if (isp_pid == -1) return (isp_result *) NULL;
+
+       result = new isp_result;
+  
+       switch (*buf) {
+       case '*': // Word found
+               result->flag = ISP_OK;
+               break;
+       case '+': // Word found through affix removal
+               result->flag = ISP_ROOT;
+               break;
+       case '-': // Word found through compound formation
+               result->flag = ISP_COMPOUNDWORD;
+               break;
+       case '\n': // Number or when in terse mode: no problems
+               result->flag = ISP_IGNORE;
+               break;
+       case '#': // Not found, no near misses and guesses
+               result->flag = ISP_UNKNOWN;
+               break;
+       case '?': // Not found, and no near misses, but guesses (guesses are ignored)
+       case '&': // Not found, but we have near misses
+       {
+               result->flag = ISP_MISSED;
+               result->string = buf;
+               char * nb = result->string.copy(); // This leaks.
+               p = strpbrk(nb+2, " ");
+               sscanf(p, "%d", &count); // Get near misses count
+               result->count = count;
+               if (count) result->misses = new char*[count];
+               p = strpbrk(nb, ":");
+               p +=2;
+               for (i = 0; i<count; i++) {
+                       result->misses[i] = p;
+                       p = strpbrk(p, ",\n");
+                       *p = 0;
+                       p+=2;
+               }
+               break;
+       }
+       default: // This shouldn't happend, but you know Murphy
+               result->flag = ISP_UNKNOWN;
+       }
+
+       *buf = 0;
+       if (result->flag!=ISP_IGNORE) {
+               while (*buf!='\n') fgets(buf, 255, in); /* wait for ispell to finish */
+       }
+       return result;
+}
+
+
+static
+inline void ispell_terminate()
+{
+        // Note: If you decide to optimize this out when it is not 
+        // needed please note that when Aspell is used this command 
+        // is also needed to save the replacement dictionary.
+        // -- Kevin Atkinson (kevinatk@home.com)
+
+       fputs("#\n", out); // Save personal dictionary
+
+       fflush(out);
+       fclose(out);
+}
+
+
+static
+inline void ispell_terse_mode()
+{
+       fputs("!\n", out); // Set terse mode (silently accept correct words)
+}
+
+
+static
+inline void ispell_insert_word(char const *word)
+{
+       fputc('*', out); // Insert word in personal dictionary
+       fputs(word, out);
+       fputc('\n', out);
+}
+
+
+static
+inline void ispell_accept_word(char const *word) 
+{
+       fputc('@', out); // Accept in this session
+       fputs(word, out);
+       fputc('\n', out);
+}
+
+static
+inline void ispell_store_replacement(const char *mis, LString const & cor) {
+        if(actual_spell_checker == ASC_ASPELL) {
+                fputs("$$ra ", out);
+                fputs(mis, out);
+                fputc(',', out);
+                fputs(cor.c_str(), out);
+                fputc('\n', out);
+        }
+}
+
+
+void ShowSpellChecker()
+{
+       FL_OBJECT *obj;
+       int ret;
+
+       // Exit if we don't have a document open
+       if (!current_view->getScreen())
+               return;
+
+       if (fd_form_spell_check == NULL) {
+               fd_form_spell_check = create_form_form_spell_check();
+               // Make sure pressing the close box does not kill LyX. (RvdK)
+               fl_set_form_atclose(fd_form_spell_check->form_spell_check, IgnoreCloseBoxCB, NULL);
+       }
+
+       // Clear form
+       fl_set_slider_value(fd_form_spell_check->slider, 0);
+       fl_set_slider_bounds(fd_form_spell_check->slider, 0, 100);
+       fl_set_object_label(fd_form_spell_check->text, "");
+       fl_set_input(fd_form_spell_check->input, "");
+       fl_clear_browser(fd_form_spell_check->browser);
+
+       // Show form
+       if (fd_form_spell_check->form_spell_check->visible) {
+               fl_raise_form(fd_form_spell_check->form_spell_check);
+       } else {
+               fl_show_form(fd_form_spell_check->form_spell_check,
+                            FL_PLACE_MOUSE,FL_FULLBORDER,
+                            _("Spellchecker"));
+       }
+       fl_deactivate_object(fd_form_spell_check->slider); 
+
+       // deactivate insert, accept, replace, and stop
+       fl_deactivate_object(fd_form_spell_check->insert);
+       fl_deactivate_object(fd_form_spell_check->accept);
+       fl_deactivate_object(fd_form_spell_check->ignore);
+       fl_deactivate_object(fd_form_spell_check->replace);
+       fl_deactivate_object(fd_form_spell_check->stop);
+       fl_deactivate_object(fd_form_spell_check->input);
+       fl_deactivate_object(fd_form_spell_check->browser);
+       fl_set_object_lcol(fd_form_spell_check->insert, FL_INACTIVE);
+       fl_set_object_lcol(fd_form_spell_check->accept, FL_INACTIVE);
+       fl_set_object_lcol(fd_form_spell_check->ignore, FL_INACTIVE);
+       fl_set_object_lcol(fd_form_spell_check->replace, FL_INACTIVE);
+       fl_set_object_lcol(fd_form_spell_check->stop, FL_INACTIVE);
+       fl_set_object_lcol(fd_form_spell_check->input, FL_INACTIVE);
+       fl_set_object_lcol(fd_form_spell_check->browser, FL_INACTIVE);
+
+       while (true){
+               obj = fl_do_forms();
+               if (obj == fd_form_spell_check->options){
+                       SpellCheckerOptions();
+               }
+               if (obj == fd_form_spell_check->start){
+                       // activate insert, accept, and stop
+                       fl_activate_object(fd_form_spell_check->insert);
+                       fl_activate_object(fd_form_spell_check->accept);
+                       fl_activate_object(fd_form_spell_check->ignore);
+                       fl_activate_object(fd_form_spell_check->stop);
+                       fl_activate_object(fd_form_spell_check->input);
+                       fl_activate_object(fd_form_spell_check->browser);
+                       fl_set_object_lcol(fd_form_spell_check->insert, FL_BLACK);
+                       fl_set_object_lcol(fd_form_spell_check->accept, FL_BLACK);
+                       fl_set_object_lcol(fd_form_spell_check->ignore, FL_BLACK);
+                       fl_set_object_lcol(fd_form_spell_check->stop, FL_BLACK);
+                       fl_set_object_lcol(fd_form_spell_check->input, FL_BLACK);
+                       fl_set_object_lcol(fd_form_spell_check->browser, FL_BLACK);
+                       // activate replace only if the file is not read-only
+                       if (!current_view->currentBuffer()->isReadonly()) { 
+                         fl_activate_object(fd_form_spell_check->replace);
+                         fl_set_object_lcol(fd_form_spell_check->replace, FL_BLACK);
+                       }
+
+                       // deactivate options and start
+                       fl_deactivate_object(fd_form_spell_check->options);
+                       fl_deactivate_object(fd_form_spell_check->start);
+                       fl_set_object_lcol(fd_form_spell_check->options, FL_INACTIVE);
+                       fl_set_object_lcol(fd_form_spell_check->start, FL_INACTIVE);
+
+                       ret = RunSpellChecker(current_view->currentBuffer()->GetLanguage());
+
+                       // deactivate insert, accept, replace, and stop
+                       fl_deactivate_object(fd_form_spell_check->insert);
+                       fl_deactivate_object(fd_form_spell_check->accept);
+                       fl_deactivate_object(fd_form_spell_check->ignore);
+                       fl_deactivate_object(fd_form_spell_check->replace);
+                       fl_deactivate_object(fd_form_spell_check->stop);
+                       fl_deactivate_object(fd_form_spell_check->input);
+                       fl_deactivate_object(fd_form_spell_check->browser);
+                       fl_set_object_lcol(fd_form_spell_check->insert, FL_INACTIVE);
+                       fl_set_object_lcol(fd_form_spell_check->accept, FL_INACTIVE);
+                       fl_set_object_lcol(fd_form_spell_check->ignore, FL_INACTIVE);
+                       fl_set_object_lcol(fd_form_spell_check->replace, FL_INACTIVE);
+                       fl_set_object_lcol(fd_form_spell_check->stop, FL_INACTIVE);
+                       fl_set_object_lcol(fd_form_spell_check->input, FL_INACTIVE);
+                       fl_set_object_lcol(fd_form_spell_check->browser, FL_INACTIVE);
+
+                       // activate options and start
+                       fl_activate_object(fd_form_spell_check->options);
+                       fl_activate_object(fd_form_spell_check->start);
+                       fl_set_object_lcol(fd_form_spell_check->options, FL_BLACK);
+                       fl_set_object_lcol(fd_form_spell_check->start, FL_BLACK);
+
+                       // if RunSpellChecker returns false quit spellchecker
+                       if (!ret) break;
+               }
+               if (obj == fd_form_spell_check->done) break;
+       }
+       fl_hide_form(fd_form_spell_check->form_spell_check);
+       EndOfSpellCheck();
+       return;
+}
+
+
+// Perform an ispell session
+static
+bool RunSpellChecker(LString const & lang)
+{
+       isp_result *result;
+       char *word;
+       int i, oldval, clickline, newvalue;
+       float newval;
+       FL_OBJECT *obj;
+       unsigned int word_count = 0;
+
+       LString tmp = (lyxrc->isp_use_alt_lang) ? lyxrc->isp_alt_lang:lang;
+
+       oldval = 0;  /* used for updating slider only when needed */
+       newval = 0.0;
+   
+       /* create ispell process */
+       create_ispell_pipe(tmp);
+
+       if (isp_pid == -1) {
+               fl_show_message(
+                       _("\n\n"
+                         "The ispell-process has died for some reason. *One* possible reason\n"
+                         "could be that you do not have a dictionary file\n"
+                         "for the language of this document installed.\n"
+                         "Check /usr/lib/ispell or set another\n"
+                         "dictionary in the Spellchecker Options menu."), "", "");
+               fclose(out);
+               return true;
+       }
+
+       // Put ispell in terse mode to improve speed
+       ispell_terse_mode();
+
+       while (true) {
+               word = NextWord(newval);
+               if (word==NULL) break;
+               word_count++;
+               
+               // Update slider if and only if value has changed
+               newvalue = int(100.0*newval);
+               if(newvalue!=oldval) {
+                       oldval = newvalue;
+                       fl_set_slider_value(fd_form_spell_check->slider, oldval);
+               }
+
+               result = ispell_check_word(word);
+               if (isp_pid==-1) {
+                       delete[] word;
+                       break;
+               }
+
+               obj =  fl_check_forms();
+               if (obj == fd_form_spell_check->stop) {
+                       delete result;
+                       delete[] word;
+                       ispell_terminate();
+                       return true;
+               }
+               if (obj == fd_form_spell_check->done) {
+                       delete result;
+                       delete[] word;
+                       ispell_terminate(); 
+                       return false;
+               }
+    
+               switch (result->flag) {
+               case ISP_UNKNOWN:
+               case ISP_MISSED:
+                       SelectLastWord();
+                       fl_set_object_label(fd_form_spell_check->text, word);
+                       fl_set_input(fd_form_spell_check->input, word);
+                       fl_clear_browser(fd_form_spell_check->browser);
+                       for (i=0; i<result->count; i++) {
+                               fl_add_browser_line(fd_form_spell_check->browser, result->misses[i]);
+                       }
+
+                       clickline = -1;
+                       while (true) {
+                               obj = fl_do_forms();
+                               if (obj==fd_form_spell_check->insert) {
+                                       ispell_insert_word(word);
+                                       break;
+                               }
+                               if (obj==fd_form_spell_check->accept) {
+                                       ispell_accept_word(word);
+                                       break;
+                               }
+                               if (obj==fd_form_spell_check->ignore) {
+                                       break;
+                               }
+                               if (obj==fd_form_spell_check->replace || 
+                                   obj==fd_form_spell_check->input) {
+                                       ispell_store_replacement(word, fl_get_input(fd_form_spell_check->input));
+                                       ReplaceWord(fl_get_input(fd_form_spell_check->input));
+                                       break;
+                               }
+                               if (obj==fd_form_spell_check->browser) {
+                                       // implements double click in the browser window.
+                                       // sent to lyx@via by Mark Burton <mark@cbl.leeds.ac.uk>
+                                       if (clickline ==
+                                           fl_get_browser(fd_form_spell_check->browser)) {
+                                               ispell_store_replacement(word, fl_get_input(fd_form_spell_check->input));
+                                               ReplaceWord(fl_get_input(fd_form_spell_check->input));
+                                               break;
+                                       }
+                                       clickline = fl_get_browser(fd_form_spell_check->browser);
+                                       fl_set_input(fd_form_spell_check->input, 
+                                                    fl_get_browser_line(fd_form_spell_check->browser,
+                                                                        fl_get_browser(fd_form_spell_check->browser)));
+                                                    
+                               }
+                               if (obj==fd_form_spell_check->stop) {
+                                       delete result;
+                                       delete[] word;
+                                       ispell_terminate();
+                                       return true;
+                               }
+           
+                               if (obj==fd_form_spell_check->done) {
+                                       delete result;
+                                       delete[] word;
+                                       ispell_terminate();
+                                       return false;
+                               }
+                       }
+               default:
+                       delete result;
+                       delete[] word;
+               }
+       }
+   
+       if(isp_pid!=-1) {
+               ispell_terminate();
+               LString word_msg;
+               word_msg += int(word_count);
+               if (word_count != 1) {
+                       word_msg += _(" words checked.");
+               } else {
+                       word_msg += _(" word checked.");
+               }
+               fl_show_message("",_("Spellchecking completed!"),
+                               word_msg.c_str());
+               return false;
+       } else {
+               fl_show_message(_("The ispell-process has died for some reason.\n"
+                               "Maybe it has been killed."), "", "");
+               fclose(out);
+               return true;
+       }
+}
+
+
+//void sigchldhandler(int sig)
+void sigchldhandler(pid_t pid, int *status)
+{ 
+       //int status ;
+
+       if (isp_pid>0)
+               //if (waitpid(isp_pid,&status,WNOHANG)==isp_pid) {
+               if (pid == isp_pid) {
+                       isp_pid=-1;
+                       fcntl(isp_fd, F_SETFL, O_NONBLOCK); /* set the file descriptor
+                                                              to nonblocking so we can 
+                                                              continue */
+               }
+       //sigchldchecker(sig);
+       sigchldchecker(pid, status);
+}
diff --git a/src/spellchecker.h b/src/spellchecker.h
new file mode 100644 (file)
index 0000000..87c8fe4
--- /dev/null
@@ -0,0 +1,32 @@
+// -*- C++ -*-
+#ifndef _SPELLCHECKER_H
+#define _SPELLCHECKER_H
+
+/* These functions are defined in lyx_cb.C */
+
+class LString;
+
+
+/** The returned word has to be deleted manually
+ */
+char* NextWord(float &value);
+
+
+/** MarkLastWord should only be used immidiately after NextWord().
+ If you give control back to the user, you _have_ to call EndOfSpellCheck()
+ or SelectLastWord(), otherwise segfaults should appear.
+ */
+void EndOfSpellCheck();
+///
+void SelectLastWord();
+///
+void ReplaceWord(LString const & replacestringstring);
+
+
+/** This function has to be implemented by the spell checker.
+  * It will show the spellcheker form*/ 
+void ShowSpellChecker();
+///
+void SpellCheckerOptions();
+
+#endif
diff --git a/src/stamp-h.in b/src/stamp-h.in
new file mode 100644 (file)
index 0000000..9788f70
--- /dev/null
@@ -0,0 +1 @@
+timestamp
diff --git a/src/strerror.C b/src/strerror.C
new file mode 100644 (file)
index 0000000..14c7e9b
--- /dev/null
@@ -0,0 +1,24 @@
+/*****************************************************
+ * provides strerror()
+ * author Stephan Witt <stephan.witt@beusen.de>
+ *****************************************************/
+
+#include <config.h>
+
+//     $Id: strerror.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $  
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: strerror.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+extern int     sys_nerr ;
+extern char *  sys_errlist [] ;
+
+char * strerror (int errnum)
+{
+       static  char *  errtext = "unknown errno" ;
+
+       if ( errnum < sys_nerr )
+               return sys_errlist [errnum] ;
+       return errtext ;
+}
diff --git a/src/syscall.C b/src/syscall.C
new file mode 100644 (file)
index 0000000..8beb7fd
--- /dev/null
@@ -0,0 +1,199 @@
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include "syscall.h"
+#include "syscontr.h"
+
+//----------------------------------------------------------------------
+// Class, which controlls a system-call
+//----------------------------------------------------------------------
+
+// constructor
+Systemcalls::Systemcalls()
+{
+       pid = (pid_t) 0; // yet no child
+}
+
+// constructor
+// 
+// starts child
+Systemcalls::Systemcalls(Starttype how, LString what, Callbackfct cback)
+{
+       start   = how;
+       command = what;
+       cbk     = cback;
+       pid     = (pid_t) 0; // no child yet
+       retval  = 0;
+       Startscript();
+}
+
+// destructor
+// not yet implemented (?)
+Systemcalls::~Systemcalls()
+{
+}
+
+// Start a childprocess
+// 
+// if child runs in background, add information to global controller.
+
+int Systemcalls::Startscript()
+{
+       retval = 0;
+       switch (start) {
+       case System: 
+               retval = system(command.c_str());
+               Callback();
+               break;
+       case Wait:   
+               pid = Fork();
+               if (pid>0) { // Fork succesful. Wait for child
+                       waitForChild();
+                       Callback();
+               } else
+                       retval = 1;
+               break;
+       case DontWait:
+               pid=Fork();
+               if (pid>0) {
+                       // Now integrate into Controller
+                       SystemcallsSingletoncontroller::Startcontroller starter;
+                       SystemcallsSingletoncontroller *contr=
+                               starter.GetController();
+                       // Add this to contr
+                       contr->AddCall(*this);
+               } else
+                       retval = 1;
+               break;
+               //default:  // error();
+               //break;
+       }
+       return retval;
+}
+
+
+// Wait for child process to finish. Returns returncode from child.
+void Systemcalls::waitForChild()
+{
+       // We'll pretend that the child returns 1 on all errorconditions.
+       retval = 1;
+       int status;
+       bool wait = true;
+       while (wait) {
+               pid_t waitrpid = waitpid(pid, &status, WUNTRACED);
+               if (waitrpid == -1) {
+                       perror("LyX: Error waiting for child");
+                       wait = false;
+               } else if (WIFEXITED(status)) {
+                       // Child exited normally. Update return value.
+                       retval = WEXITSTATUS(status);
+                       wait = false;
+               } else if (WIFSIGNALED(status)) {
+                       fprintf(stderr,"LyX: Child didn't catch signal %d "
+                               "and died. Too bad.\n", WTERMSIG(status));
+                       wait = false;
+               } else if (WIFSTOPPED(status)) {
+                       fprintf(stderr,"LyX: Child (pid: %ld) stopped on "
+                               "signal %d. Waiting for child to finish.\n", 
+                               (long) pid, WSTOPSIG(status));
+               } else {
+                       fprintf(stderr,"LyX: Something rotten happened while "
+                               "waiting for child %ld\n", (long) pid);
+                       wait = false;
+               }
+       }
+}
+
+
+// generate child in background
+
+pid_t Systemcalls::Fork()
+{
+       pid_t cpid=fork();
+       if (cpid == 0) { // child
+               LString childcommand(command); // copy
+               LString rest = command.split(childcommand, ' ');
+               const int MAX_ARGV = 255;
+               char *syscmd = NULL; 
+               char *argv[MAX_ARGV];
+               int  index = 0;
+               bool Abbruch;
+               do {
+                       if (syscmd == NULL) {
+                               syscmd = childcommand.copy();
+                       }
+                       argv[index++] = childcommand.copy();
+                       // reinit
+                       Abbruch = !rest.empty();
+                       if (Abbruch) 
+                               rest = rest.split(childcommand, ' ');
+               } while (Abbruch);
+               argv[index] = NULL;
+               // replace by command. Expand using PATH-environment-var.
+               execvp(syscmd, argv);
+               // If something goes wrong, we end up here:
+               perror("LyX: execvp failed");
+       } else if (cpid < 0) { // error
+               perror("LyX: Could not fork");
+       } else { // parent
+               return cpid;
+       }
+       return 0;
+}
+
+
+// Reuse of instance
+
+int Systemcalls::Startscript(Starttype how, LString what, Callbackfct cback)
+{
+       start   = how;
+       command = what;
+       cbk     = cback;
+       pid     = (pid_t) 0; // yet no child
+       retval  = 0;
+        return Startscript();
+}
+
+
+
+//
+// Mini-Test-environment for script-classes
+//
+#ifdef TEST_MAIN
+#include <stdio.h>
+
+
+int SimulateTimer;
+void back(LString cmd, int retval)
+{
+       printf("Done: %s gave %d\n", cmd.c_str(), retval);
+       SimulateTimer = 0;
+}
+
+
+int main(int, char**)
+{
+       
+       SystemcallsSingletoncontroller::Startcontroller starter; 
+       SystemcallsSingletoncontroller *contr=starter.GetController();
+       
+       Systemcalls one(Systemcalls::System, "ls -ltag", back);
+       Systemcalls two(Systemcalls::Wait, "ls -ltag", back);
+       SimulateTimer = 1;
+       Systemcalls three(Systemcalls::DontWait , "ls -ltag", back);
+       // Simulation of timer
+       while (SimulateTimer)
+               {
+                       sleep(1);
+                       contr->Timer();
+               }
+}
+#endif
diff --git a/src/syscall.h b/src/syscall.h
new file mode 100644 (file)
index 0000000..05102ef
--- /dev/null
@@ -0,0 +1,79 @@
+// -*- C++ -*-
+#include <sys/types.h>
+#include <LString.h>
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+
+/*@Doc:
+  Instance starts and represents childprocesses.
+  You should use this class if you need to start an external program in LyX.
+  You can start a child in the background and have a callback function
+  executed when the child finishes by using the DontWait starttype.
+  */
+class Systemcalls {
+public:
+       ///
+       enum Starttype {
+               System,
+               Wait,
+               DontWait
+       };
+       
+       /// Callback function gets commandline and returnvalue from child
+       typedef void (*Callbackfct)(LString cmd, int retval);
+       
+       ///
+       Systemcalls();
+       
+       /** Geberate instance and start childprocess 
+         The string "what" contains a commandline with arguments separated 
+         by spaces.
+         When the requested program finishes, the callback-function is 
+         called with the commandline and the returnvalue from the program.
+         The instance is automatically added to a timercheck if starttype is
+         DontWait (i.e. background execution). When a background child
+         finishes, the timercheck will automatically call the callback
+         function.
+         */
+       Systemcalls(Starttype how, LString what, Callbackfct call = 0);
+       
+       
+       ///
+       ~Systemcalls();
+       
+       /** Start childprocess. what contains a command on systemlevel. 
+        */
+       int Startscript(Starttype how, LString what, Callbackfct call = 0); // for reuse
+       
+       /** gets PID of childprocess. Used by timer */
+       inline pid_t Getpid() { return pid; }
+       
+       /// Start callback
+       inline void Callback() { if (cbk) cbk(command, retval); }
+       
+       /** Set return value. Used by timer */
+       inline void setRetValue(int r) { retval = r; }
+private:
+       /// Type of execution: system, wait for child or background
+       Starttype    start;
+       /// Callback function
+       Callbackfct  cbk;
+       /// Commmand line
+       LString      command;
+       /// Process ID of child
+       pid_t        pid;
+       /// Return value from child
+       int retval;
+       
+       ///
+       int Startscript();
+       
+       ///
+       pid_t Fork();
+       
+       /// Wait for child process to finish. Updates returncode from child.
+       void waitForChild();
+};
diff --git a/src/syscontr.C b/src/syscontr.C
new file mode 100644 (file)
index 0000000..d4bdf7f
--- /dev/null
@@ -0,0 +1,98 @@
+#include <config.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include "syscontr.h"
+#include "syscall.h"
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+//----------------------------------------------------------------------
+// Controller-Implementation
+//----------------------------------------------------------------------
+
+//
+// default contstructor
+//
+
+SystemcallsSingletoncontroller::SystemcallsSingletoncontroller() 
+{
+       SysCalls = NULL;
+}
+
+//
+// destructor
+// 
+// destroy structs for leaving program
+// open question: should we stop here childs?
+// Asger says no: I like to have my xdvi open after closing LyX. Maybe
+// I want to print or something.
+
+SystemcallsSingletoncontroller::~SystemcallsSingletoncontroller()
+{
+       ControlledCalls *next;
+       while (SysCalls)
+       {
+               next = SysCalls->next;
+               delete SysCalls;
+               SysCalls = next;
+       }
+       
+}
+
+//
+// Add childprocessinformation into controlled list
+//
+
+void 
+SystemcallsSingletoncontroller::AddCall(Systemcalls const &newcall)
+{
+// not yet implemented
+       ControlledCalls *newCall = new ControlledCalls;
+       if (newCall == NULL) // sorry, no idea
+               return;
+       newCall->next = SysCalls;
+       newCall->call = new Systemcalls(newcall);
+       SysCalls = newCall;
+}
+
+// 
+// Timer-call
+// 
+// Check list, if there is a stopped child. If yes, call-back.
+//
+
+void 
+SystemcallsSingletoncontroller::Timer()
+{
+       // check each entry of our list, if it's finished
+        ControlledCalls *prev = NULL;
+       for (ControlledCalls *actCall=SysCalls; actCall; actCall=actCall->next) 
+               {
+                       pid_t pid=actCall->call->Getpid();
+                       int stat_loc;
+                       waitpid(pid, &stat_loc, WNOHANG);
+                       if (WIFEXITED(stat_loc) || WIFSIGNALED(stat_loc)) {
+                               // Ok, the return value goes into retval.
+                               if (WIFEXITED(stat_loc)) {
+                                       actCall->call->setRetValue(WEXITSTATUS(stat_loc));
+                               } else {
+                                       // Child died, so pretend it returned 1
+                                       actCall->call->setRetValue(1);
+                               }
+                               // callback and release
+                               actCall->call->Callback();
+                               if (actCall == SysCalls) {
+                                       SysCalls = actCall->next;
+                               } else {
+                                       prev->next = actCall->next;
+                               }
+                               delete actCall;
+                               actCall = prev;
+                       }
+                       prev = actCall;
+               }
+}
diff --git a/src/syscontr.h b/src/syscontr.h
new file mode 100644 (file)
index 0000000..02ae8bd
--- /dev/null
@@ -0,0 +1,50 @@
+// -*- C++ -*-
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <LString.h>
+
+
+class Systemcalls;
+
+///
+class SystemcallsSingletoncontroller{
+public:
+       ///
+       class Startcontroller{
+       public:
+               ///
+               Startcontroller();
+               ///
+                ~Startcontroller();
+               ///
+               static SystemcallsSingletoncontroller *GetController();
+               ///
+                void ReduceRefcount() { refcount--; }
+       private:
+               ///
+               static SystemcallsSingletoncontroller *contr;
+               ///
+                static int refcount;
+        };
+       ///
+       ~SystemcallsSingletoncontroller();
+       ///
+       void AddCall(Systemcalls const &newcall);
+       ///
+       void Timer();
+       // private: // DEC cxx does not like that (JMarc)
+       ///
+       SystemcallsSingletoncontroller();
+private:
+       ///
+       struct ControlledCalls {
+               ///
+               Systemcalls *call;
+               ///
+               ControlledCalls *next; };
+       ///
+       ControlledCalls *SysCalls;
+};
diff --git a/src/syssingleton.C b/src/syssingleton.C
new file mode 100644 (file)
index 0000000..40f2919
--- /dev/null
@@ -0,0 +1,48 @@
+#include <config.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include "syscontr.h"
+
+
+//----------------------------------------------------------------------
+// Ensure, that only one controller exist inside process
+//----------------------------------------------------------------------
+
+// global controller variable
+SystemcallsSingletoncontroller *
+SystemcallsSingletoncontroller::Startcontroller::
+contr = NULL;
+
+// reference count
+int SystemcallsSingletoncontroller::Startcontroller::
+refcount = 0;
+
+// default constructor. 
+// Nothing to do at moment.
+SystemcallsSingletoncontroller::Startcontroller::
+Startcontroller() 
+{
+}
+
+// default destructor.
+// Nothing to do at moment
+SystemcallsSingletoncontroller::Startcontroller::
+~Startcontroller() 
+{
+}
+
+// Give reference to global controller-instance
+// 
+SystemcallsSingletoncontroller *
+SystemcallsSingletoncontroller::Startcontroller::
+GetController()
+{ 
+       if (! contr) 
+               { // generate the global controller
+                        contr = new SystemcallsSingletoncontroller;
+               }
+       refcount++;
+       return contr;
+}
diff --git a/src/table.C b/src/table.C
new file mode 100644 (file)
index 0000000..c7c3eb2
--- /dev/null
@@ -0,0 +1,2228 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *       Copyright (C) 1995 Matthias Ettrich
+ *        Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================
+ */
+
+#include <stdlib.h>
+#include "table.h"
+#include "vspace.h"
+#include "layout.h"
+
+//     $Id: table.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $     
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: table.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+extern void addNewlineAndDepth(LString &file, int const depth); // Jug 990923
+
+#define WIDTH_OF_LINE 5
+
+/* konstruktor */
+LyXTable::LyXTable(int rows_arg, int columns_arg)
+{
+       Init(rows_arg, columns_arg);
+}
+
+
+LyXTable::LyXTable(LyXLex &lex)
+{
+       FILE *file = lex.getFile();
+       Read(file);
+}
+
+
+LyXTable::~LyXTable() {
+       int i;
+       delete[] rowofcell;
+       delete[] columnofcell;
+       delete[] column_info;
+        delete[] row_info;
+       for (i=0; i<rows; i++) {
+               delete[] cell_info[i]; // verify that this shoudn't be freed with delete
+       }
+       delete[] cell_info;
+}
+
+
+LyXTable* LyXTable::Clone()
+{
+    LyXTable *result = new LyXTable(rows, columns);
+    int row, column;;
+
+    for (row=0; row<rows; row++){
+        for (column=0; column<columns;column++){
+            result->cell_info[row][column] = cell_info[row][column];
+        }
+    }
+
+    for (row=0; row<rows; row++){
+        result->row_info[row] = row_info[row];
+    }
+
+    for (column=0; column<columns; column++){
+        result->column_info[column].left_line = column_info[column].left_line;
+        result->column_info[column].right_line = column_info[column].right_line;
+        result->column_info[column].alignment = column_info[column].alignment;
+        result->column_info[column].p_width = column_info[column].p_width;
+        result->column_info[column].align_special = column_info[column].align_special;
+    }
+  
+    result->SetLongTable(is_long_table);
+    result->rotate=rotate;
+    result->Reinit();
+    return result;
+}
+
+
+/* activates all lines and sets all widths to 0 */ 
+void LyXTable::Init(int rows_arg, int columns_arg)
+{
+    int i,j,cellno;
+    rows = rows_arg;
+    columns = columns_arg;
+    column_info = new columnstruct[columns];
+    row_info = new rowstruct[rows];
+    cell_info = new cellstruct*[rows];
+
+    cellno = 0;
+    for (i=0; i<rows;i++) {
+        cell_info[i] = new cellstruct[columns];
+        row_info[i].top_line = true;
+        row_info[i].bottom_line = false;
+        row_info[i].is_cont_row = false;
+        row_info[i].newpage = false;
+        for (j=0; j<columns; j++) {
+            cell_info[i][j].cellno = cellno++;
+            cell_info[i][j].width_of_cell = 0;
+            cell_info[i][j].multicolumn = LyXTable::CELL_NORMAL;
+            cell_info[i][j].alignment = LYX_ALIGN_CENTER;
+            cell_info[i][j].top_line = row_info[i].top_line;
+            cell_info[i][j].bottom_line = row_info[i].bottom_line;
+            cell_info[i][j].has_cont_row = false;
+            cell_info[i][j].rotate = false;
+            cell_info[i][j].linebreaks = false;
+        }
+    }
+    row_info[i-1].bottom_line = true;
+    row_info[0].bottom_line = true;
+
+    for (i=0; i<columns;i++) {
+        column_info[i].left_line = true;
+        column_info[i].right_line = false;
+        column_info[i].alignment = LYX_ALIGN_CENTER;
+        // set width_of_column to zero before it is used in
+        // calculate_width_of_column() (thornley)
+        column_info[i].width_of_column = 0;
+        calculate_width_of_column(i);
+    }
+    column_info[i-1].right_line = true;
+   
+    calculate_width_of_table();
+
+    rowofcell = NULL;
+    columnofcell = NULL;
+    set_row_column_number_info();
+    is_long_table = false;
+    rotate = 0;
+    endhead = -1;
+    endfirsthead = -1;
+    endfoot = -1;
+    endlastfoot = -1;
+}
+
+
+void LyXTable::AppendRow(int cell)
+{
+    int row = row_of_cell(cell);
+    rowstruct *row_info2 = new rowstruct[rows+1];
+    cellstruct** cell_info2 = new cellstruct*[rows+1];
+    int i;
+
+    for (i=0; i <= row; i++) {
+        cell_info2[i] = cell_info[i];
+        row_info2[i] = row_info[i];
+    }
+    for (i=rows-1; i >= row; i--) {
+        cell_info2[i+1] = cell_info[i];
+        row_info2[i+1] = row_info[i];
+    }
+    for (i=row;row_info[i].is_cont_row;i--);
+    if (((row+1)>=rows) || !row_info[row+1].is_cont_row)
+        row_info2[row+1].is_cont_row = false;
+    row_info2[row+1].top_line = row_info[i].top_line;
+    cell_info2[row+1] = new cellstruct[columns];
+    for (i=0; i<columns; i++) {
+        cell_info2[row+1][i].width_of_cell = 0;
+        cell_info2[row+1][i] = cell_info2[row][i];
+    }
+   
+    delete[] cell_info;
+    cell_info = cell_info2;
+    delete[] row_info;
+    row_info = row_info2;
+   
+    rows++;
+   
+    Reinit();
+}
+
+
+void LyXTable::DeleteRow(int cell)
+{
+       int row = row_of_cell(cell);
+        while(!row_info[row].is_cont_row && RowHasContRow(cell))
+            DeleteRow(cell_info[row+1][0].cellno);
+        rowstruct *row_info2 = new rowstruct[rows-1];
+       cellstruct** cell_info2 = new cellstruct*[rows-1];
+       int i;
+
+       delete[] cell_info[row];
+       for (i=0; i < row; i++) {
+               cell_info2[i] = cell_info[i];
+                row_info2[i] = row_info[i];
+       }
+        if (row_info[i].is_cont_row)
+            row_info2[i-1].bottom_line = row_info[i].bottom_line;
+       for (i=row; i < rows - 1; i++) {
+               cell_info2[i] = cell_info[i+1];
+                row_info2[i] = row_info[i+1];
+       }
+   
+
+       delete[] cell_info;
+       cell_info = cell_info2;
+        delete[] row_info;
+        row_info = row_info2;
+   
+       rows--;
+
+       Reinit();
+}
+
+
+void LyXTable::AppendColumn(int cell)
+{
+    int i,j;
+    columnstruct *column_info2 = new columnstruct[columns+1];
+    int column = right_column_of_cell(cell);
+   
+    for (i=0; i<=column; i++){
+        column_info2[i] = column_info[i];
+    }
+    for (i=columns-1; i>=column; i--){
+        column_info2[i+1] = column_info[i];
+    }
+    
+    delete[] column_info;
+    column_info = column_info2;
+    
+    for (i=0; i<rows;i++){
+        cellstruct* tmp = cell_info[i];
+        cell_info[i] = new cellstruct[columns+1];
+        for (j=0; j<=column; j++){
+            cell_info[i][j]=tmp[j];
+        }
+        for (j=column; j<columns; j++){
+            cell_info[i][j+1]=tmp[j];
+        }
+        // care about multicolumns
+        if (cell_info[i][column+1].multicolumn
+            ==LyXTable::CELL_BEGIN_OF_MULTICOLUMN){
+            cell_info[i][column+1].multicolumn =
+                LyXTable::CELL_PART_OF_MULTICOLUMN;
+        }
+        if (column + 1 == columns
+            || cell_info[i][column+2].multicolumn
+            !=LyXTable::CELL_PART_OF_MULTICOLUMN){
+            cell_info[i][column+1].multicolumn =
+                LyXTable::CELL_NORMAL;
+        }
+        
+        delete[] tmp;
+    }
+    
+    columns++;
+    Reinit();
+}
+
+
+void LyXTable::Reinit()
+{   
+       int i,j;
+
+       for (i=0; i<rows;i++) {
+               for (j=0; j<columns; j++) {
+                       cell_info[i][j].width_of_cell = 0;
+                        if ((i+1 < rows) && !row_info[i+1].is_cont_row)
+                            cell_info[i][j].has_cont_row = false;
+               }
+       }
+  
+       for (i=0; i<columns;i++) {
+               calculate_width_of_column(i);
+       }
+       calculate_width_of_table();
+
+       set_row_column_number_info();
+}
+
+
+void LyXTable::set_row_column_number_info()
+{
+       int row = 0;
+       int c= 0;
+       int column = 0;
+       numberofcells = -1;
+       for (row=0; row<rows; ++row) {
+               for (column=0; column<columns; ++column) {
+                       if (cell_info[row][column].multicolumn
+                           != LyXTable::CELL_PART_OF_MULTICOLUMN)
+                               ++numberofcells;
+                        cell_info[row][column].cellno = numberofcells;
+               }
+       }
+       ++numberofcells; // because this is one more than as we start from 0
+       row = 0;
+       column = 0;
+
+       if (rowofcell)
+               delete [] rowofcell;
+       rowofcell = new int[numberofcells];
+       if (columnofcell)
+               delete [] columnofcell;
+       columnofcell = new int[numberofcells];
+  
+       while (c < numberofcells && row < rows && column < columns) {
+               rowofcell[c]=row;
+               columnofcell[c]=column;
+               c++;
+               do{
+                       column++;
+               } while (column < columns &&
+                        cell_info[row][column].multicolumn
+                        == LyXTable::CELL_PART_OF_MULTICOLUMN);
+               if (column == columns){
+                       column = 0;
+                       row++;
+               }
+       }
+}
+
+
+void LyXTable::DeleteColumn(int cell)
+{
+       int column1 = column_of_cell(cell);
+       int column2 = right_column_of_cell(cell);
+       int column;
+   
+       if (column1 == 0 && column2 == columns - 1)
+               return;
+   
+       for (column = column1; column <= column2;column++){
+               delete_column(column1);
+       }
+       Reinit();
+}
+
+
+int LyXTable::GetNumberOfCells()
+{
+       return numberofcells;
+}
+
+
+int LyXTable::NumberOfCellsInRow(int cell)
+{
+       int row = row_of_cell(cell);
+       int i=0;
+       int result = 0;
+       for (i=0; i<columns; i++){
+               if (cell_info[row][i].multicolumn != LyXTable::CELL_PART_OF_MULTICOLUMN)
+                       result++;
+       }
+       return result;
+}
+
+
+int LyXTable::AppendCellAfterCell(int append_cell, int question_cell)
+{
+       return (right_column_of_cell(append_cell) == 
+               right_column_of_cell(question_cell));
+}
+
+
+int LyXTable::DeleteCellIfColumnIsDeleted(int cell, int delete_column_cell)
+{
+    if (column_of_cell(delete_column_cell) == 0 && 
+        right_column_of_cell(delete_column_cell) == columns - 1)
+        return 0;
+    else
+        return
+            (column_of_cell(cell) >= column_of_cell(delete_column_cell) &&
+             column_of_cell(cell) <= right_column_of_cell(delete_column_cell));
+}
+
+
+/* returns 1 if there is a topline, returns 0 if not */ 
+bool LyXTable::TopLine(int cell)
+{
+    int row=row_of_cell(cell);
+    
+    if (IsContRow(cell))
+        return TopLine(cell_info[row-1][column_of_cell(cell)].cellno);
+    if (IsMultiColumn(cell))
+        return cellinfo_of_cell(cell)->top_line;
+    return row_info[row].top_line;
+}
+
+
+bool LyXTable::BottomLine(int cell)
+{
+    //no bottom line underneath non-existent cells if you please
+    if(cell >= numberofcells)
+       return false;
+
+    int row=row_of_cell(cell);
+    
+    if (RowHasContRow(cell))
+        return BottomLine(cell_info[row+1][column_of_cell(cell)].cellno);
+    if (IsMultiColumn(cell))
+        return cellinfo_of_cell(cell)->bottom_line;
+    return row_info[row_of_cell(cell)].bottom_line;
+}
+
+
+bool LyXTable::LeftLine(int cell)
+{
+       return column_info[column_of_cell(cell)].left_line;
+}
+
+bool LyXTable::RightLine(int cell)
+{
+       return column_info[right_column_of_cell(cell)].right_line;
+}
+
+
+bool LyXTable::TopAlreadyDrawed(int cell)
+{
+       if (AdditionalHeight(cell))
+               return false;
+       int row = row_of_cell(cell);
+       if (row > 0){
+               int column = column_of_cell(cell);
+               while (column
+                      && cell_info[row-1][column].multicolumn
+                      == LyXTable::CELL_PART_OF_MULTICOLUMN)
+                       column--;
+               if (cell_info[row-1][column].multicolumn
+                   == LyXTable::CELL_NORMAL)
+                       return row_info[row-1].bottom_line;
+               else
+                       return cell_info[row-1][column].bottom_line;
+       }
+       return false;
+}
+
+
+bool LyXTable::VeryLastRow(int cell)
+{
+       return (row_of_cell(cell) == rows-1);
+}
+
+
+int LyXTable::AdditionalHeight(int cell)
+{
+       int row = row_of_cell(cell);
+       int top = 1;
+       int bottom = 1;
+       int column;
+       if (row){
+               for (column=0;column < columns-1 && bottom;column++){
+                       switch (cell_info[row-1][column].multicolumn){
+                       case LyXTable::CELL_BEGIN_OF_MULTICOLUMN:
+                               bottom = cell_info[row-1][column].bottom_line;
+                               break;
+                       case LyXTable::CELL_NORMAL:
+                               bottom = row_info[row-1].bottom_line;
+                       }
+               }
+               for (column=0;column < columns-1 && top;column++){
+                       switch (cell_info[row][column].multicolumn){
+                       case LyXTable::CELL_BEGIN_OF_MULTICOLUMN:
+                               top = cell_info[row][column].top_line;
+                               break;
+                       case LyXTable::CELL_NORMAL:
+                               top = row_info[row].top_line;
+                       }
+               }
+               if (top && bottom)
+                       return WIDTH_OF_LINE;
+       }
+       return 0;
+}
+
+
+int LyXTable::AdditionalWidth(int cell)
+{
+       // internally already set in SetWidthOfCell
+       // used to get it back in text.C
+       int col = right_column_of_cell(cell);
+       if (col < columns - 1 && column_info[col].right_line &&
+            column_info[col+1].left_line)
+               return WIDTH_OF_LINE;
+       else
+               return 0;
+}
+
+
+// returns the maximum over all rows 
+int LyXTable::WidthOfColumn(int cell)
+{
+       int column1 = column_of_cell(cell);
+       int column2 = right_column_of_cell(cell);
+       int i;
+       int result=0;
+       for (i=column1; i<=column2;i++){
+               result += column_info[i].width_of_column;
+       }
+       return result;
+}
+
+
+int LyXTable::WidthOfTable()
+{
+       return width_of_table;
+}
+
+/* returns 1 if a complete update is necessary, otherwise 0 */ 
+bool LyXTable::SetWidthOfMulticolCell(int cell, int new_width)
+{
+    if (!IsMultiColumn(cell))
+        return false;
+    
+    int row = row_of_cell(cell);
+    int column1 = column_of_cell(cell);
+    int column2 = right_column_of_cell(cell);
+    int i;
+    int width=0;
+
+    // first set columns to 0 so we can calculate the right width
+    for (i=column1; i<=column2;i++) {
+        cell_info[row][i].width_of_cell = 0;
+    }
+    // set the width to MAX_WIDTH until width > 0
+    width = (new_width + 2*WIDTH_OF_LINE);
+    for (i=column1; (i<column2) && (width > 0);i++){
+        cell_info[row][i].width_of_cell = column_info[i].width_of_column;
+        width -= column_info[i].width_of_column;
+    }
+    if (i==column2) {
+        cell_info[row][i].width_of_cell = width;
+    }
+    return true;
+}
+
+void LyXTable::recalculateMulticolCells(int cell, int new_width)
+{
+    int
+        row = row_of_cell(cell),
+        column1 = column_of_cell(cell),
+        column2 = right_column_of_cell(cell),
+        i;
+
+    // first set columns to 0 so we can calculate the right width
+    for (i=column1; i<=column2;++i)
+        cell_info[row][i].width_of_cell = 0;
+    for(i=cell+1;(i<numberofcells) && (!IsMultiColumn(i));++i)
+        ;
+    if (i < numberofcells)
+        recalculateMulticolCells(i,GetWidthOfCell(i)-(2*WIDTH_OF_LINE));
+    SetWidthOfMulticolCell(cell,new_width);
+}
+
+/* returns 1 if a complete update is necessary, otherwise 0 */ 
+bool LyXTable::SetWidthOfCell(int cell, int new_width)
+{
+    int row = row_of_cell(cell);
+    int column1 = column_of_cell(cell);
+    int tmp=0;
+    int width=0;
+
+    if (IsMultiColumn(cell)) {
+        tmp = SetWidthOfMulticolCell(cell, new_width);
+    } else {
+       width = (new_width + 2*WIDTH_OF_LINE);
+        cell_info[row][column1].width_of_cell = width;
+        if (column_info[column1].right_line && (column1 < columns-1) &&
+            column_info[column1+1].left_line) // additional width
+            cell_info[row][column1].width_of_cell += WIDTH_OF_LINE;
+        tmp = calculate_width_of_column_NMC(column1);
+    }
+    if (tmp) {
+        int i;
+        for(i=0; i<columns;++i)
+            calculate_width_of_column_NMC(i);
+        for(i=0; (i<numberofcells) && !IsMultiColumn(i); ++i)
+            ;
+        if (i<numberofcells)
+            recalculateMulticolCells(i,GetWidthOfCell(i)-(2*WIDTH_OF_LINE));
+        for(i=0; i<columns;++i)
+            calculate_width_of_column(i);
+        calculate_width_of_table();
+        return true;
+    }
+    return false;
+}
+
+
+bool LyXTable::SetAlignment(int cell, char align)
+{
+    if (!IsMultiColumn(cell))
+        column_info[column_of_cell(cell)].alignment = align;
+    cellinfo_of_cell(cell)->alignment = align;
+    return true;
+}
+
+bool LyXTable::SetPWidth(int cell, LString width)
+{
+    int fvcell = FirstVirtualCell(cell);
+
+    if (IsMultiColumn(fvcell)) {
+//        if (column_info[column_of_cell(cell)].p_width.empty())
+//            column_info[column_of_cell(cell)].p_width = width;
+        cellinfo_of_cell(fvcell)->p_width = width;
+    } else {
+        column_info[column_of_cell(fvcell)].p_width = width;
+        SetAlignment(cell,LYX_ALIGN_LEFT);
+    }
+    return true;
+}
+
+bool LyXTable::SetAlignSpecial(int cell, LString special, int what)
+{
+    if (what == SET_SPECIAL_MULTI)
+        cellinfo_of_cell(cell)->align_special = special;
+    else
+        column_info[column_of_cell(cell)].align_special = special;
+    return true;
+}
+
+bool LyXTable::SetAllLines(int cell, bool line)
+{
+    SetTopLine(cell,line);
+    SetBottomLine(cell,line);
+    SetRightLine(cell,line);
+    SetLeftLine(cell,line);
+    return true;
+}
+
+bool LyXTable::SetTopLine(int cell, bool line)
+{
+    int row = row_of_cell(cell);
+
+    if (IsContRow(cell))
+        SetTopLine(cell_info[row-1][column_of_cell(cell)].cellno,line);
+    else if (!IsMultiColumn(cell))
+        row_info[row].top_line = line;
+    else
+        cellinfo_of_cell(cell)->top_line = line;
+    return true;
+}
+
+
+bool LyXTable::SetBottomLine(int cell, bool line)
+{
+    int row = row_of_cell(cell);
+
+    if (RowHasContRow(cell))
+        SetBottomLine(cell_info[row+1][column_of_cell(cell)].cellno,line);
+    else if (!IsMultiColumn(cell))
+        row_info[row_of_cell(cell)].bottom_line = line;
+    else
+        cellinfo_of_cell(cell)->bottom_line = line;
+    return true;
+}
+
+
+bool LyXTable::SetLeftLine(int cell, bool line)
+{
+       column_info[column_of_cell(cell)].left_line = line;
+       return true;
+}
+
+
+bool LyXTable::SetRightLine(int cell, bool line)
+{
+       column_info[right_column_of_cell(cell)].right_line = line;
+       return true;
+}
+
+
+char LyXTable::GetAlignment(int cell)
+{
+       if (IsMultiColumn(cell))
+               return cellinfo_of_cell(cell)->alignment;
+       else
+               return column_info[column_of_cell(cell)].alignment;
+}
+
+LString LyXTable::GetPWidth(int cell)
+{
+       int fvcell = FirstVirtualCell(cell);
+       
+       if (IsMultiColumn(fvcell)) // && !cellinfo_of_cell(cell)->p_width.empty())
+               return cellinfo_of_cell(fvcell)->p_width;
+       return column_info[column_of_cell(fvcell)].p_width;
+}
+
+LString LyXTable::GetAlignSpecial(int cell, int what)
+{
+    if (what == SET_SPECIAL_MULTI)
+        return cellinfo_of_cell(cell)->align_special;
+    return column_info[column_of_cell(cell)].align_special;
+}
+
+int LyXTable::GetWidthOfCell(int cell)
+{
+       int row = row_of_cell(cell);
+       int column1 = column_of_cell(cell);
+       int column2 = right_column_of_cell(cell);
+       int i;
+       int result=0;
+       for (i=column1; i<=column2;i++){
+               result += cell_info[row][i].width_of_cell;
+       }
+  
+       result += AdditionalWidth(cell);
+  
+       return result;
+}
+
+
+int LyXTable::GetBeginningOfTextInCell(int cell)
+{
+       int x = 0;
+   
+       switch (GetAlignment(cell)){
+       case LYX_ALIGN_CENTER:
+               x += (WidthOfColumn(cell) - GetWidthOfCell(cell)) / 2;
+               break;
+       case LYX_ALIGN_RIGHT:
+               x += WidthOfColumn(cell) - GetWidthOfCell(cell) + AdditionalWidth(cell);
+               break;
+       default: /* LYX_ALIGN_LEFT: nothing :-) */ 
+               break;
+       }
+
+       // the LaTeX Way :-(
+       x += WIDTH_OF_LINE;
+       return x;
+}
+
+
+bool LyXTable::IsFirstCell(int cell)
+{
+       return (column_of_cell(cell) == 0);
+}
+
+bool LyXTable::IsLastCell(int cell)
+{
+       return (right_column_of_cell(cell) == (columns-1));
+}
+
+
+bool LyXTable::calculate_width_of_column(int column)
+{
+       int i, max;
+       int old_column_width = column_info[column].width_of_column;
+       max = 0;
+       for (i=0; i<rows; i++) {
+               if (cell_info[i][column].width_of_cell > max) {
+                       max = cell_info[i][column].width_of_cell;
+               }
+       }
+       column_info[column].width_of_column = max;
+       return (column_info[column].width_of_column != old_column_width);
+}
+
+bool LyXTable::calculate_width_of_column_NMC(int column)
+{
+    int i, max;
+    int old_column_width = column_info[column].width_of_column;
+    max = 0;
+    for (i=0; i<rows; ++i) {
+        if (!IsMultiColumn(GetCellNumber(column,i)) &&
+            (cell_info[i][column].width_of_cell > max)) {
+            max = cell_info[i][column].width_of_cell;
+        }
+    }
+    column_info[column].width_of_column = max;
+    return (column_info[column].width_of_column != old_column_width);
+}
+
+void LyXTable::calculate_width_of_table()
+{
+       int i;
+       width_of_table = 0;
+       for (i=0; i<columns;i++) {
+               width_of_table += column_info[i].width_of_column;
+       }
+}
+
+
+int LyXTable::row_of_cell(int cell) 
+{
+    if (cell >= numberofcells)
+        return rows-1;
+    else if (cell < 0)
+        return 0;
+    return rowofcell[cell];
+}
+
+
+int LyXTable::column_of_cell(int cell)
+{
+    if (cell >= numberofcells)
+        return columns-1;
+    else if (cell < 0)
+        return 0;
+    return columnofcell[cell];
+}
+
+
+int LyXTable::right_column_of_cell(int cell) 
+{
+       int row = row_of_cell(cell);
+       int column = column_of_cell(cell);
+       while (column < columns - 1 &&
+              cell_info[row][column+1].multicolumn == LyXTable::CELL_PART_OF_MULTICOLUMN)
+               column++;
+       return column;
+}
+
+
+void LyXTable::Write(FILE* file)
+{
+    int i,j;
+    fprintf(file, "multicol5\n");
+    fprintf(file, "%d %d %d %d %d %d %d %d\n", rows, columns, is_long_table,
+            rotate, endhead, endfirsthead, endfoot, endlastfoot);
+    for (i=0; i<rows; i++){
+        fprintf(file, "%d %d %d %d\n", row_info[i].top_line,
+                row_info[i].bottom_line, row_info[i].is_cont_row,
+                row_info[i].newpage);
+    }
+    for (i=0; i<columns; i++){
+        fprintf(file, "%d %d %d \"%s\" \"%s\"\n",
+                column_info[i].alignment, column_info[i].left_line,
+                column_info[i].right_line,
+                VSpace(column_info[i].p_width).asLyXCommand().c_str(),
+                column_info[i].align_special.c_str());
+    }
+
+    for (i=0; i<rows;i++){
+        for (j=0;j<columns;j++){
+            fprintf(file, "%d %d %d %d %d %d %d \"%s\" \"%s\"\n",
+                    cell_info[i][j].multicolumn,
+                    cell_info[i][j].alignment,
+                    cell_info[i][j].top_line,
+                    cell_info[i][j].bottom_line,
+                    cell_info[i][j].has_cont_row,
+                    cell_info[i][j].rotate,
+                    cell_info[i][j].linebreaks,
+                    cell_info[i][j].align_special.c_str(),
+                    cell_info[i][j].p_width.c_str());
+        }
+    }
+}
+
+#ifdef WITH_WARNINGS
+#warning Clean up this code in 0.13 (Jug)
+#endif
+void LyXTable::Read(FILE* file)
+{
+    int version;
+    int i,j;
+    int rows_arg = 0;
+    int columns_arg = 0;
+    int is_long_table_arg = false;
+    int rotate_arg = false;
+    LString s;
+    int a = 0;
+    int b = 0;
+    int c = 0;
+    int d = 0;
+    int e = 0;
+    int f = 0;
+    int g = 0;
+    int h = 0;
+    char vtmp[100], stmp[100], atmp[100];
+
+    fscanf(file, "%s\n", vtmp);
+    s = vtmp;
+    if (s.length() > 8)
+        version = atoi(s.c_str()+8);
+    else
+        version = 1;
+    a=b=c=d=-1;
+    if (version > 2) {
+        fgets(vtmp,sizeof(vtmp),file);
+        sscanf(vtmp, "%d %d %d %d %d %d %d %d\n", &rows_arg, &columns_arg,
+               &is_long_table_arg, &rotate_arg, &a, &b, &c, &d);
+    } else
+        fscanf(file, "%d %d\n",
+               &rows_arg, &columns_arg);
+    Init(rows_arg, columns_arg);
+    SetLongTable(is_long_table_arg);
+    SetRotateTable(rotate_arg);
+    endhead = a;
+    endfirsthead = b;
+    endfoot = c;
+    endlastfoot = d;
+    for (i=0; i<rows; i++){
+        a=b=c=d=e=f=g=h=0;
+        fgets(vtmp,sizeof(vtmp),file);
+        sscanf(vtmp, "%d %d %d %d\n",
+               &a, &b, &c, &d);
+        row_info[i].top_line = a;
+        row_info[i].bottom_line = b;
+        row_info[i].is_cont_row = c;
+        row_info[i].newpage = d;
+    }
+    for (i=0; i<columns; i++){
+        *stmp = 0;
+        *atmp = 0;
+        fgets(vtmp,sizeof(vtmp),file);
+        sscanf(vtmp, "%d %d %d %s %s", &a, &b, &c, stmp, atmp);
+        column_info[i].alignment = (char) a;
+        column_info[i].left_line = b;
+        column_info[i].right_line = c;
+        if (*stmp == '"') { /* strip quotes if they exists */
+            *stmp = 0;
+            *atmp = 0;
+            // there are quotes so I have to reread the string correctly
+            // this is only because the old format did not have "
+            // this means also that atmp is ONLY set here!!!
+            if (stmp[1] == '"')
+                sscanf(vtmp, "%*d %*d %*d %*s \"%[^\"]\"", atmp);
+            else // otherwise after the first empty "" read is aborded
+                sscanf(vtmp, "%*d %*d %*d \"%[^\"]\" \"%[^\"]\"", stmp, atmp);
+            column_info[i].p_width = stmp;
+            column_info[i].align_special = atmp;
+        } else if (*stmp)
+            column_info[i].p_width = stmp;
+    }
+    if (version == 1){
+        for (i=0; i<rows;i++){
+            for (j=0;j<columns;j++){
+                fscanf(file, "%d %d\n", &a, &b);
+                cell_info[i][j].multicolumn = (char) a;
+                cell_info[i][j].alignment = (char) b;
+            }
+        }
+    } else if (version < 4) {
+        for (i=0; i<rows;i++){
+            for (j=0;j<columns;j++){
+                fscanf(file, "%d %d %d %d\n", &a, &b, &c, &d);
+                cell_info[i][j].multicolumn = (char) a;
+                cell_info[i][j].alignment = (char) b;
+                cell_info[i][j].top_line = (char) c;
+                cell_info[i][j].bottom_line = (char) d;
+            }
+        }
+    } else {
+        for (i=0; i<rows;i++){
+            for (j=0;j<columns;j++){
+                *stmp = 0;
+                *atmp = 0;
+                a=b=c=d=e=f=g=0;
+                fgets(vtmp,sizeof(vtmp),file);
+                sscanf(vtmp, "%d %d %d %d %d %d %d %s %s\n",
+                       &a, &b, &c, &d, &e, &f, &g, stmp, atmp);
+                cell_info[i][j].multicolumn = (char) a;
+                cell_info[i][j].alignment = (char) b;
+                cell_info[i][j].top_line = (char) c;
+                cell_info[i][j].bottom_line = (char) d;
+                cell_info[i][j].has_cont_row = (bool) e;
+                cell_info[i][j].rotate = (bool) f;
+                cell_info[i][j].linebreaks = (bool) g;
+                // this is only to see if I have an empty string first
+                // this clause should be always TRUE!!!
+                if (*stmp == '"') {
+                    *stmp = 0;
+                    *atmp = 0;
+                    if (stmp[1] == '"')
+                        sscanf(vtmp,"%*d %*d %*d %*d %*d %*d %*d %*s \"%[^\"]\"",
+                               atmp);
+                    else // otherwise after the first empty "" read is aborded
+                        sscanf(vtmp,"%*d %*d %*d %*d %*d %*d %*d \"%[^\"]\" \"%[^\"]\"",
+                               stmp, atmp);
+                    cell_info[i][j].align_special = stmp;
+                    cell_info[i][j].p_width = atmp;
+                } else if (*stmp)
+                    cell_info[i][j].align_special = stmp;
+            }
+        }
+    }
+    set_row_column_number_info();
+}
+
+
+// cell <0 will tex the preamble
+// returns the number of printed newlines
+int LyXTable::TexEndOfCell(LString& file, int cell)
+{
+    int i;
+    int ret = 0;
+    int tmp; // tmp2;
+    int fcell,nvcell;
+    if (ShouldBeVeryLastCell(cell)) {
+        // the very end at the very beginning
+        if (Linebreaks(cell))
+            file += "\\smallskip{}}";
+        if (IsMultiColumn(cell))
+            file += '}';
+        if (RotateCell(cell)) {
+            file += "\n\\end{sideways}";
+            ret++;
+        }
+        file += "\\\\\n";
+        ret++;
+    
+        tmp = 0;
+        fcell = cell; 
+        while (!IsFirstCell(fcell))fcell--;
+        for (i=0; i < NumberOfCellsInRow(fcell); i++){
+            if (BottomLine(fcell+i))
+                tmp++;
+        }
+        if (tmp == NumberOfCellsInRow(fcell)){
+            file += "\\hline ";
+        } else {
+            tmp = 0;
+            for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                if (BottomLine(fcell+i)){
+                   file += "\\cline{";
+                   file += column_of_cell(fcell+i)+1;
+                   file += '-';
+                   file += right_column_of_cell(fcell+i)+1;
+                   file += "} ";
+                    tmp = 1;
+                }
+            }
+        }
+        if (tmp){
+            file += '\n';
+            ret++;
+        }
+        if (is_long_table)
+            file += "\\end{longtable}";
+        else
+            file += "\\end{tabular}";
+        if (rotate) {
+            file += "\n\\end{sideways}";
+            ret++;
+        }
+    } else {
+        nvcell = NextVirtualCell(cell+1);
+        if (cell < 0){
+            // preamble
+            if (rotate) {
+                file += "\\begin{sideways}\n";
+                ret++;
+            }
+            if (is_long_table)
+                file += "\\begin{longtable}{";
+            else
+                file += "\\begin{tabular}{";
+            for (i=0; i<columns;i++){
+                if (column_info[i].left_line)
+                   file += '|';
+                if (!column_info[i].align_special.empty()) {
+                    file += column_info[i].align_special.c_str();
+                } else if (!column_info[i].p_width.empty()) {
+                    file += "p{";
+                    file += column_info[i].p_width;
+                    file += '}';
+                } else {
+                    switch (column_info[i].alignment) {
+                      case LYX_ALIGN_LEFT:
+                          file += 'l';
+                          break;
+                      case LYX_ALIGN_RIGHT:
+                          file += 'r';
+                          break;
+                      default:
+                          file += 'c';
+                          break;
+                    }
+                }
+                if (column_info[i].right_line)
+                    file += '|';
+            }
+            file += "}\n";
+            ret++;
+            tmp = 0;
+            if (GetNumberOfCells()){
+                fcell = 0;
+                for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                    if (TopLine(fcell+i))
+                        tmp++;
+                }
+                if (tmp == NumberOfCellsInRow(fcell)){
+                    file += "\\hline ";
+                } else {
+                    tmp = 0;
+                    for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                        if (TopLine(fcell+i)){
+                           file += "\\cline{";
+                           file += column_of_cell(fcell+i)+1;
+                           file += '-';
+                           file += right_column_of_cell(fcell+i)+1;
+                           file += "} ";
+                            tmp = 1;
+                        }
+                    }
+                }
+                if (tmp){
+                    file += '\n';
+                    ret++;
+                }
+            }
+            if (RotateCell(0)) {
+                file += "\\begin{sideways}\n";
+                ret++;
+            }
+        } else {
+            // usual cells
+            if (Linebreaks(cell))
+                file += "\\smallskip{}}";
+            if (IsMultiColumn(cell)){
+                file += '}';
+            }
+            if (RotateCell(cell)) {
+                file += "\n\\end{sideways}";
+                ret++;
+            }
+            if (IsLastCell(cell)) {
+                int row = row_of_cell(cell);
+                LString hline1,hline2;
+                bool print_hline = true;
+                bool pr_top_hline,flag1,flag2;
+                flag1 = IsLongTable() &&
+                    ((row == endhead) || (row == endfirsthead) ||
+                     (row == endfoot) || (row == endlastfoot));
+                row++;
+                flag2 = IsLongTable() &&
+                    ((row <= endhead) || (row <= endfirsthead) ||
+                     (row <= endfoot) || (row <= endlastfoot));
+                row--;
+                // print the bottom hline only if (otherwise it is doubled):
+                // - is no LongTable
+                // - there IS a first-header
+                // - the next row is no special header/footer
+                //   & this row is no special header/footer
+                // - the next row is a special header/footer
+                //   & this row is a special header/footer
+                pr_top_hline = (flag1 && flag2) || (!flag1 && !flag2) ||
+                    (endfirsthead == endhead);
+                file += "\\\\\n";
+                ret++;
+                tmp = 0;
+                fcell = cell;
+                while (!IsFirstCell(fcell))
+                    fcell--;
+                for (i=0; i < NumberOfCellsInRow(cell); i++){
+                    if (BottomLine(fcell+i))
+                        tmp++;
+                }
+                if (tmp == NumberOfCellsInRow(cell)){
+                    file += "\\hline ";
+                    hline1 = "\\hline ";
+                } else {
+                    tmp = 0;
+                    for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                        if (BottomLine(fcell+i)){
+                            file += "\\cline{";
+                            file += column_of_cell(fcell+i)+1;
+                            file += '-';
+                            file += right_column_of_cell(fcell+i)+1;
+                            file += "} ";
+                            hline1 += "\\cline{";
+                            hline1 += column_of_cell(fcell+i)+1;
+                            hline1 += '-';
+                            hline1 += right_column_of_cell(fcell+i)+1;
+                            hline1 += "} ";
+                            tmp = 1;
+                        }
+                    }
+                }
+                if (tmp){
+                    file += '\n';
+                    ret++;
+                }
+                if (IsLongTable() && (row == endfoot)) {
+                    file += "\\endfoot\n";
+                    ret++;
+                    print_hline = false; // no double line below footer
+                }
+                if (IsLongTable() && (row == endlastfoot)) {
+                    file += "\\endlastfoot\n";
+                    ret++;
+                    print_hline = false; // no double line below footer
+                }
+                if (IsLongTable() && row_info[row].newpage) {
+                    file += "\\newpage\n";
+                    ret++;
+                    print_hline = false; // no line below a \\newpage-command
+                }
+                tmp = 0;
+                if (nvcell < numberofcells && (cell < GetNumberOfCells()-1) &&
+                    !ShouldBeVeryLastCell(cell)) {
+                    fcell = nvcell;
+#if 0
+                    // Now jump all ContRows
+                    while (IsContRow(fcell))
+                        fcell++;
+                    while (!IsFirstCell(fcell))
+                        fcell--;
+#endif
+                    for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                        if (TopLine(fcell+i))
+                            tmp++;
+                    }
+                    if (tmp == NumberOfCellsInRow(fcell)){
+                        if (print_hline)
+                            file += "\\hline ";
+                        hline2 = "\\hline ";
+                    }
+                    else {
+                        tmp = 0;
+                        for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                            if (TopLine(fcell+i)){
+                                if (print_hline) {
+                                   file += "\\cline{";
+                                   file += column_of_cell(fcell+i)+1;
+                                   file += '-';
+                                   file += right_column_of_cell(fcell+i)+1;
+                                   file += "} ";
+                               }
+                                hline2 += "\\cline{";
+                                hline2 += column_of_cell(fcell+i)+1;
+                                hline2 += '-';
+                                hline2 += right_column_of_cell(fcell+i)+1;
+                                hline2 += "} ";
+                                tmp = 1;
+                            }
+                        }
+                    }
+                    if (tmp && print_hline){
+                        file += '\n';
+                        ret++;
+                    }
+                }
+                // the order here is important as if one defines two
+                // or more things in one line only the first entry is
+                // displayed the other are set to an empty-row. This
+                // is important if I have a footer and want that the
+                // lastfooter is NOT displayed!!!
+                bool sflag2 = (row == endhead) || (row == endfirsthead) ||
+                    (row == endfoot) || (row == endlastfoot);
+                row--;
+//                sflag2 = IsLongTable() && (row >= 0) &&
+//                    (sflag2 || (row == endhead) || (row == endfirsthead));
+                row += 2;
+                bool sflag1 = IsLongTable() && (row != endhead) &&
+                    (row != endfirsthead) &&
+                    ((row == endfoot) || (row == endlastfoot));
+                row--;
+                if (IsLongTable() && (row == endhead)) {
+                   file += "\\endhead\n";
+                    ret++;
+                }
+                if (IsLongTable() && (row == endfirsthead)) {
+                    file += "\\endfirsthead\n";
+                    ret++;
+                }
+                if (sflag1) { // add the \hline for next foot row
+                    if (!hline1.empty()) {
+                        file += hline1 + '\n';
+                        ret++;
+                    }
+                }
+                // add the \hline for the first row
+                if (pr_top_hline && sflag2) {
+                    if (!hline2.empty()) {
+                        file += hline2 + '\n';
+                        ret++;
+                    }
+                }
+                if (nvcell < numberofcells && RotateCell(nvcell)) {
+                    file += "\\begin{sideways}\n";
+                    ret++;
+                }
+            } else {
+                file += "&\n";
+                ret++;
+                if (nvcell < numberofcells && RotateCell(nvcell)) {
+                    file += "\\begin{sideways}\n";
+                    ret++;
+                }
+            }
+        }
+        if (nvcell < numberofcells && IsMultiColumn(nvcell)) {
+            file += "\\multicolumn{";
+           file += cells_in_multicolumn(nvcell);
+           file += "}{";
+            if (!cellinfo_of_cell(cell+1)->align_special.empty()) {
+                file += cellinfo_of_cell(cell+1)->align_special;
+                file += "}{";
+            } else {
+                if (LeftLine(nvcell))
+                    file += '|';
+                if (!GetPWidth(nvcell).empty()) {
+                    file += "p{";
+                    file += GetPWidth(nvcell);
+                    file += '}';
+                } else {
+                    switch (GetAlignment(nvcell)) {
+                      case LYX_ALIGN_LEFT: file += 'l'; break;
+                      case LYX_ALIGN_RIGHT: file += 'r'; break;
+                      default:  file += 'c'; break;
+                    }
+                }
+                if (RightLine(nvcell))
+                    file += '|';
+                //if (column_of_cell(cell+2)!=0 && LeftLine(cell+2))
+                if (((nvcell+1) < numberofcells) &&
+                    (NextVirtualCell(nvcell+1) < numberofcells) &&
+                    (column_of_cell(NextVirtualCell(nvcell+1))!=0) &&
+                    LeftLine(NextVirtualCell(nvcell+1)))
+                    file += '|';
+                file += "}{";
+            }
+        }
+        if (nvcell < numberofcells && Linebreaks(nvcell)) {
+//            !column_info[column_of_cell(nvcell)].p_width.empty()) {
+            file += "\\parbox{";
+           file += GetPWidth(nvcell);
+           file += "}{\\smallskip{}";
+       }
+    }
+    return ret;
+}
+
+
+// cell <0 will tex the preamble
+// returns the number of printed newlines
+int LyXTable::RoffEndOfCell(FILE* file, int cell)
+{
+    int i,j;
+    int ret = 0;
+
+    if (cell == GetNumberOfCells() - 1){
+        // the very end at the very beginning
+        if (CellHasContRow(cell) >= 0) {
+            fprintf(file,"\nT}");
+            ret++;
+        }
+        fprintf(file, "\n");
+        ret++;
+        if (row_info[row_of_cell(cell)].bottom_line) {
+            fprintf(file, "_\n");
+            ret++;
+        }
+        fprintf(file, ".TE\n.pl 1c");
+    } else {  
+        if (cell < 0){
+            int fcell=0;
+            // preamble
+            fprintf(file, "\n.pl 500c\n.TS\n");
+            for (j=0; j<rows; j++) {
+                for (i=0; i<columns;i++,fcell++) {
+                    if (column_info[i].left_line)
+                        fprintf(file, " | ");
+                    if (cell_info[j][i].multicolumn==CELL_PART_OF_MULTICOLUMN)
+                        fprintf(file, "s");
+                    else {
+                        switch (column_info[i].alignment) {
+                          case LYX_ALIGN_LEFT:
+                              fprintf(file, "l");
+                              break;
+                          case LYX_ALIGN_RIGHT:
+                              fprintf(file, "r");
+                              break;
+                          default:
+                              fprintf(file, "c");
+                              break;
+                        }
+                    }
+                    if (!column_info[i].p_width.empty())
+                        fprintf(file, "w(%s)", column_info[i].p_width.c_str());
+                    if (column_info[i].right_line)
+                        fprintf(file, " | ");
+                }
+                if ((j+1) < rows) {
+                    fprintf(file, "\n");
+                    ret++;
+                }
+            }
+            fprintf(file, ".\n");
+            ret++;
+            if (row_info[0].top_line) {
+                fprintf(file,"_\n");
+                ret++;
+            }
+            if (CellHasContRow(0) >= 0) {
+                fprintf(file,"T{\n");
+                ret++;
+            }
+        } else {
+            // usual cells
+            if (CellHasContRow(cell) >= 0) {
+                fprintf(file,"\nT}");
+                ret++;
+            }
+            if (right_column_of_cell(cell) == columns -1){
+                fprintf(file, "\n");
+                ret++;
+                int row = row_of_cell(cell);
+                if (row_info[row++].bottom_line) {
+                    fprintf(file, "_\n");
+                    ret++;
+                }
+                if ((row < rows) && row_info[row].top_line) {
+                    fprintf(file, "_\n");
+                    ret++;
+                }
+            } else
+                fprintf(file, "\t");
+            if ((cell < GetNumberOfCells() - 1) &&
+                (CellHasContRow(cell+1) >= 0)) {
+                fprintf(file,"T{\n");
+                ret++;
+            }
+        }
+    }
+    return ret;
+}
+
+const char *LyXTable::getDocBookAlign(int cell, bool isColumn=false)
+{
+    int i;
+    if (isColumn)
+       i = cell;
+    else
+       i = column_of_cell(cell);
+    if (!isColumn && IsMultiColumn(cell)) {
+       if (!cellinfo_of_cell(cell)->align_special.empty()) {
+           return cellinfo_of_cell(cell)->align_special.c_str();
+       } else {
+           switch (GetAlignment(cell)) {
+           case LYX_ALIGN_LEFT:
+               return "left";
+           case LYX_ALIGN_RIGHT:
+               return "right";
+           default:
+               return "center";
+           }
+       }
+    } else {
+       if (!column_info[i].align_special.empty()) {
+           return column_info[i].align_special.c_str();
+       }
+#ifdef IGNORE_THIS_FOR_NOW
+       else if (!column_info[i].p_width.empty()) {
+           file += "p{";
+           file += column_info[i].p_width;
+           file += '}';
+       }
+#endif
+       else {
+           switch (column_info[i].alignment) {
+           case LYX_ALIGN_LEFT:
+               return "left";
+           case LYX_ALIGN_RIGHT:
+               return "right";
+           default:
+               return "center";
+           }
+       }
+    }
+}
+
+// cell <0 will tex the preamble
+// returns the number of printed newlines
+int LyXTable::DocBookEndOfCell(LString& file, int cell, int &depth)
+{
+    int i;
+    int ret = 0;
+    int tmp; // tmp2;
+    int fcell,nvcell;
+    if (ShouldBeVeryLastCell(cell)) {
+#if 0
+        // the very end at the very beginning
+        if (Linebreaks(cell))
+            file += "\\smallskip{}}";
+        if (IsMultiColumn(cell))
+            file += '}';
+        if (RotateCell(cell)) {
+            file += "\n\\end{sideways}";
+            ret++;
+        }
+        file += "\\\\\n";
+        ret++;
+    
+        tmp = 0;
+        fcell = cell; 
+        while (!IsFirstCell(fcell))fcell--;
+        for (i=0; i < NumberOfCellsInRow(fcell); i++){
+            if (BottomLine(fcell+i))
+                tmp++;
+        }
+        if (tmp == NumberOfCellsInRow(fcell)){
+            file += "\\hline ";
+        } else {
+            tmp = 0;
+            for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                if (BottomLine(fcell+i)){
+                   file += "\\cline{";
+                   file += column_of_cell(fcell+i)+1;
+                   file += '-';
+                   file += right_column_of_cell(fcell+i)+1;
+                   file += "} ";
+                    tmp = 1;
+                }
+            }
+        }
+        if (tmp){
+            file += '\n';
+            ret++;
+        }
+#endif
+       addNewlineAndDepth(file,--depth);
+        file += "</ENTRY>";
+       addNewlineAndDepth(file,--depth);
+        file += "</ROW>";
+       addNewlineAndDepth(file,--depth);
+        file += "</TBODY>";
+       addNewlineAndDepth(file,--depth);
+        if (is_long_table)
+            file += "</TGROUP>";
+        else
+            file += "</TGROUP>";
+       addNewlineAndDepth(file,--depth);
+#if 0
+        if (rotate) {
+            file += "\n\\end{sideways}";
+            ret++;
+        }
+#endif
+        ret += 4;
+    } else {
+        nvcell = NextVirtualCell(cell+1);
+        if (cell < 0) {
+            // preamble
+            if (is_long_table)
+                file += "<TGROUP ";
+            else
+                file += "<TGROUP ";
+            file += "COLS='";
+            file += columns;
+            file += "' COLSEP='1' ROWSEP='1'>";
+           addNewlineAndDepth(file,++depth);
+            ret++;
+            for (i=0; i<columns;i++) {
+                file += "<COLSPEC ALIGN='";
+               file += getDocBookAlign(i, true);
+               file += "' COLNAME='col";
+                file += i+1;
+                file += "' COLNUM='";
+                file += i+1;
+               file += "' COLSEP='";
+               if (i == (columns-1)) {
+                    file += '1';
+               } else {
+                   if (column_info[i].right_line ||
+                       column_info[i+1].left_line)
+                       file += '1';
+                   else
+                       file += '0';
+               }
+               file += "'>";
+               addNewlineAndDepth(file,depth);
+                ret++;
+#ifdef NOT_HANDLED_YET_AS_I_DONT_KNOW_HOW
+                if (column_info[i].left_line)
+                    file += '|';
+#endif
+            }
+#if 0
+            tmp = 0;
+            if (GetNumberOfCells()) {
+                fcell = 0;
+                for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                    if (TopLine(fcell+i))
+                        tmp++;
+                }
+                if (tmp == NumberOfCellsInRow(fcell)){
+                    file += "\\hline ";
+                } else {
+                    tmp = 0;
+                    for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                        if (TopLine(fcell+i)){
+                           file += "\\cline{";
+                           file += column_of_cell(fcell+i)+1;
+                           file += '-';
+                           file += right_column_of_cell(fcell+i)+1;
+                           file += "} ";
+                            tmp = 1;
+                        }
+                    }
+                }
+                if (tmp){
+                    file += '\n';
+                    ret++;
+                }
+            }
+            if (RotateCell(0)) {
+                file += "\\begin{sideways}\n";
+                ret++;
+            }
+#endif
+            file += "<TBODY>";
+           addNewlineAndDepth(file,++depth);
+            file += "<ROW>";
+           addNewlineAndDepth(file,++depth);
+            file += "<ENTRY ALIGN='";
+            file += getDocBookAlign(0);
+           file += "'";
+           if (IsMultiColumn(0)) {
+               file += " NAMEST='col1' NAMEEND='col";
+               file += cells_in_multicolumn(0);
+               file += "'";
+           }
+            file += ">";
+           addNewlineAndDepth(file,++depth);
+            ret += 3;
+        } else {
+#if 0
+            // usual cells
+            if (Linebreaks(cell))
+                file += "\\smallskip{}}";
+            if (IsMultiColumn(cell)){
+                file += '}';
+            }
+            if (RotateCell(cell)) {
+                file += "\n\\end{sideways}";
+                ret++;
+            }
+#endif
+            if (IsLastCell(cell)) {
+               addNewlineAndDepth(file,--depth);
+                file += "</ENTRY>";
+               addNewlineAndDepth(file,--depth);
+                file += "</ROW>";
+               addNewlineAndDepth(file,depth);
+               file += "<ROW>";
+               addNewlineAndDepth(file,++depth);
+                file += "<ENTRY ALIGN='";
+                file += getDocBookAlign(cell+1);
+                file += "' VALIGN='middle'";
+               if (IsMultiColumn(cell+1)) {
+                   file += " NAMEST='col";
+                   file += column_of_cell(cell+1) + 1;
+                   file += "' NAMEEND='col";
+                   file += column_of_cell(cell+1) +
+                       cells_in_multicolumn(cell+1);
+                   file += "'";
+               }
+               file += ">";
+               addNewlineAndDepth(file,++depth);
+                ret += 4;
+#if 0
+                int row = row_of_cell(cell);
+                LString hline1,hline2;
+                bool print_hline = true;
+                bool pr_top_hline,flag1,flag2;
+                flag1 = IsLongTable() &&
+                    ((row == endhead) || (row == endfirsthead) ||
+                     (row == endfoot) || (row == endlastfoot));
+                row++;
+                flag2 = IsLongTable() &&
+                    ((row <= endhead) || (row <= endfirsthead) ||
+                     (row <= endfoot) || (row <= endlastfoot));
+                row--;
+                // print the bottom hline only if (otherwise it is doubled):
+                // - is no LongTable
+                // - there IS a first-header
+                // - the next row is no special header/footer
+                //   & this row is no special header/footer
+                // - the next row is a special header/footer
+                //   & this row is a special header/footer
+                pr_top_hline = (flag1 && flag2) || (!flag1 && !flag2) ||
+                    (endfirsthead == endhead);
+                file += "\\\\\n";
+                ret++;
+                tmp = 0;
+                fcell = cell;
+                while (!IsFirstCell(fcell))
+                    fcell--;
+                for (i=0; i < NumberOfCellsInRow(cell); i++){
+                    if (BottomLine(fcell+i))
+                        tmp++;
+                }
+                if (tmp == NumberOfCellsInRow(cell)){
+                    file += "\\hline ";
+                    hline1 = "\\hline ";
+                } else {
+                    tmp = 0;
+                    for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                        if (BottomLine(fcell+i)){
+                            file += "\\cline{";
+                            file += column_of_cell(fcell+i)+1;
+                            file += '-';
+                            file += right_column_of_cell(fcell+i)+1;
+                            file += "} ";
+                            hline1 += "\\cline{";
+                            hline1 += column_of_cell(fcell+i)+1;
+                            hline1 += '-';
+                            hline1 += right_column_of_cell(fcell+i)+1;
+                            hline1 += "} ";
+                            tmp = 1;
+                        }
+                    }
+                }
+                if (tmp){
+                    file += '\n';
+                    ret++;
+                }
+                if (IsLongTable() && (row == endfoot)) {
+                    file += "\\endfoot\n";
+                    ret++;
+                    print_hline = false; // no double line below footer
+                }
+                if (IsLongTable() && (row == endlastfoot)) {
+                    file += "\\endlastfoot\n";
+                    ret++;
+                    print_hline = false; // no double line below footer
+                }
+                if (IsLongTable() && row_info[row].newpage) {
+                    file += "\\newpage\n";
+                    ret++;
+                    print_hline = false; // no line below a \\newpage-command
+                }
+                tmp = 0;
+                if (nvcell < numberofcells && (cell < GetNumberOfCells()-1) &&
+                    !ShouldBeVeryLastCell(cell)) {
+                    fcell = nvcell;
+                    for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                        if (TopLine(fcell+i))
+                            tmp++;
+                    }
+                    if (tmp == NumberOfCellsInRow(fcell)){
+                        if (print_hline)
+                            file += "\\hline ";
+                        hline2 = "\\hline ";
+                    }
+                    else {
+                        tmp = 0;
+                        for (i=0; i < NumberOfCellsInRow(fcell); i++){
+                            if (TopLine(fcell+i)){
+                                if (print_hline) {
+                                   file += "\\cline{";
+                                   file += column_of_cell(fcell+i)+1;
+                                   file += '-';
+                                   file += right_column_of_cell(fcell+i)+1;
+                                   file += "} ";
+                               }
+                                hline2 += "\\cline{";
+                                hline2 += column_of_cell(fcell+i)+1;
+                                hline2 += '-';
+                                hline2 += right_column_of_cell(fcell+i)+1;
+                                hline2 += "} ";
+                                tmp = 1;
+                            }
+                        }
+                    }
+                    if (tmp && print_hline){
+                        file += '\n';
+                        ret++;
+                    }
+                }
+                // the order here is important as if one defines two
+                // or more things in one line only the first entry is
+                // displayed the other are set to an empty-row. This
+                // is important if I have a footer and want that the
+                // lastfooter is NOT displayed!!!
+                bool sflag2 = (row == endhead) || (row == endfirsthead) ||
+                    (row == endfoot) || (row == endlastfoot);
+                row--;
+//                sflag2 = IsLongTable() && (row >= 0) &&
+//                    (sflag2 || (row == endhead) || (row == endfirsthead));
+                row += 2;
+                bool sflag1 = IsLongTable() && (row != endhead) &&
+                    (row != endfirsthead) &&
+                    ((row == endfoot) || (row == endlastfoot));
+                row--;
+                if (IsLongTable() && (row == endhead)) {
+                    file += "\\endhead\n";
+                    ret++;
+                }
+                if (IsLongTable() && (row == endfirsthead)) {
+                    file += "\\endfirsthead\n";
+                    ret++;
+                }
+                if (sflag1) { // add the \hline for next foot row
+                    if (!hline1.empty()) {
+                        file += hline1 + '\n';
+                        ret++;
+                    }
+                }
+                // add the \hline for the first row
+                if (pr_top_hline && sflag2) {
+                    if (!hline2.empty()) {
+                        file += hline2 + '\n';
+                        ret++;
+                    }
+                }
+                if (nvcell < numberofcells && RotateCell(nvcell)) {
+                    file += "\\begin{sideways}\n";
+                    ret++;
+                }
+#endif
+            } else {
+               addNewlineAndDepth(file,--depth);
+                file += "</ENTRY>";
+               addNewlineAndDepth(file,depth);
+                file += "<ENTRY ALIGN='";
+                file += getDocBookAlign(cell+1);
+                file += "' VALIGN='middle'";
+               if (IsMultiColumn(cell+1)) {
+                   file += " NAMEST='col";
+                   file += column_of_cell(cell+1) + 1;
+                   file += "' NAMEEND='col";
+                   file += column_of_cell(cell+1) +
+                       cells_in_multicolumn(cell+1);
+                   file += "'";
+               }
+               file += ">";
+               addNewlineAndDepth(file,++depth);
+                ret += 3;
+#if 0
+                if (nvcell < numberofcells && RotateCell(nvcell)) {
+                    file += "\\begin{sideways}\n";
+                    ret++;
+                }
+#endif
+            }
+        }
+#if 0
+        if (nvcell < numberofcells && IsMultiColumn(nvcell)) {
+            file += "\\multicolumn{";
+            file += cells_in_multicolumn(nvcell);
+            file += "}{";
+            if (!cellinfo_of_cell(cell+1)->align_special.empty()) {
+                file += cellinfo_of_cell(cell+1)->align_special;
+                file += "}{";
+            } else {
+                if (LeftLine(nvcell))
+                    file += '|';
+                if (!GetPWidth(nvcell).empty()) {
+                    file += "p{";
+                    file += GetPWidth(nvcell);
+                    file += '}';
+                } else {
+                    switch (GetAlignment(nvcell)) {
+                      case LYX_ALIGN_LEFT: file += 'l'; break;
+                      case LYX_ALIGN_RIGHT: file += 'r'; break;
+                      default:  file += 'c'; break;
+                    }
+                }
+                if (RightLine(nvcell))
+                    file += '|';
+                //if (column_of_cell(cell+2)!=0 && LeftLine(cell+2))
+                if (((nvcell+1) < numberofcells) &&
+                    (NextVirtualCell(nvcell+1) < numberofcells) &&
+                    (column_of_cell(NextVirtualCell(nvcell+1))!=0) &&
+                    LeftLine(NextVirtualCell(nvcell+1)))
+                    file += '|';
+                file += "}{";
+            }
+        }
+        if (nvcell < numberofcells && Linebreaks(nvcell)) {
+//            !column_info[column_of_cell(nvcell)].p_width.empty()) {
+            file += "\\parbox{";
+            file += GetPWidth(nvcell);
+            file += "}{\\smallskip{}";
+        }
+#endif
+    }
+    return ret;
+}
+
+
+bool LyXTable::IsMultiColumn(int cell)
+{
+    int fvcell = FirstVirtualCell(cell);
+
+    return (cellinfo_of_cell(fvcell)->multicolumn != LyXTable::CELL_NORMAL);
+}
+
+
+LyXTable::cellstruct* LyXTable::cellinfo_of_cell(int cell)
+{
+    int row = row_of_cell(cell);
+    int column = column_of_cell(cell);
+    return  &cell_info[row][column];
+}
+   
+
+void LyXTable::SetMultiColumn(int cell, int number)
+{
+    int fvcell = FirstVirtualCell(cell);
+    int new_width = cellinfo_of_cell(fvcell)->width_of_cell;
+    
+    cellinfo_of_cell(fvcell)->multicolumn = LyXTable::CELL_BEGIN_OF_MULTICOLUMN;
+    cellinfo_of_cell(fvcell)->alignment = column_info[column_of_cell(fvcell)].alignment;
+    cellinfo_of_cell(fvcell)->top_line = row_info[row_of_cell(fvcell)].top_line;
+    cellinfo_of_cell(fvcell)->bottom_line = row_info[row_of_cell(fvcell)].bottom_line;
+    for (number--;number>0;number--){
+        cellinfo_of_cell(fvcell+number)->multicolumn =
+            LyXTable::CELL_PART_OF_MULTICOLUMN;
+        new_width += cellinfo_of_cell(fvcell+number)->width_of_cell;
+    }
+    set_row_column_number_info();
+    SetWidthOfCell(fvcell,new_width);
+}
+
+
+int LyXTable::cells_in_multicolumn(int cell)
+{
+    int row = row_of_cell(cell);
+    int column = column_of_cell(cell);
+    int result = 1;
+    column++;
+    while (column < columns && cell_info[row][column].multicolumn
+           == LyXTable::CELL_PART_OF_MULTICOLUMN){
+        result++;
+        column++;
+    }
+    return result;
+}
+
+
+int  LyXTable::UnsetMultiColumn(int cell)
+{
+    int fvcell = FirstVirtualCell(cell);
+    int row = row_of_cell(fvcell);
+    int column = column_of_cell(fvcell);
+    
+    int result = 0;
+    
+    if (cell_info[row][column].multicolumn
+        == LyXTable::CELL_BEGIN_OF_MULTICOLUMN){
+        cell_info[row][column].multicolumn = LyXTable::CELL_NORMAL;
+        column++;
+        while (column < columns &&
+               cell_info[row][column].multicolumn
+               == LyXTable::CELL_PART_OF_MULTICOLUMN){
+            cell_info[row][column].multicolumn =
+                LyXTable::CELL_NORMAL;
+            column++;
+            result++;
+        }
+    }
+    set_row_column_number_info();
+    return result;
+}
+
+
+void LyXTable::delete_column(int column)
+{
+    int i,j;
+    columnstruct *column_info2 = new columnstruct[columns-1];
+   
+    for (i=0; i<column; i++){
+        column_info2[i] = column_info[i];
+    }
+    for (i=column; i<columns-1; i++){
+        column_info2[i] = column_info[i+1];
+    }
+   
+    delete[] column_info;
+    column_info = column_info2;
+
+    for (i=0; i<rows;i++){
+        cellstruct* tmp = cell_info[i];
+        cell_info[i] = new cellstruct[columns-1];
+        for (j=0; j<column; j++){
+            cell_info[i][j]=tmp[j];
+        }
+        for (j=column; j<columns-1; j++){
+            cell_info[i][j]=tmp[j+1];
+        }
+        delete[] tmp;
+    }
+
+    columns--;
+    Reinit();
+}
+
+void LyXTable::SetLongTable(int what)
+{
+    is_long_table = what;
+}
+
+bool LyXTable::IsLongTable()
+{
+    return is_long_table;
+}
+
+void LyXTable::SetRotateTable(int what)
+{
+    rotate = what;
+}
+
+bool LyXTable::RotateTable()
+{
+    return rotate;
+}
+
+void LyXTable::SetRotateCell(int cell, int what)
+{
+    cellinfo_of_cell(cell)->rotate = what;
+}
+
+bool LyXTable::RotateCell(int cell)
+{
+    return cellinfo_of_cell(cell)->rotate;
+}
+
+bool LyXTable::NeedRotating()
+{
+    if (rotate)
+        return true;
+    for (int i=0; i<rows;i++){
+        for (int j=0;j<columns;j++){
+            if (cell_info[i][j].rotate)
+                return true;
+        }
+    }
+    return false;
+}
+
+void LyXTable::AppendContRow(int cell)
+{
+    int row = row_of_cell(cell)+1;
+
+    if (!RowHasContRow(cell) || (CellHasContRow(cell)>=0))
+        AppendRow(cell);
+    row_info[row].is_cont_row = true;
+    row_info[row].top_line = false;
+    cell_info[row-1][column_of_cell(cell)].has_cont_row = true;
+    Reinit();
+}
+
+bool LyXTable::IsContRow(int cell)
+{
+    return row_info[row_of_cell(cell)].is_cont_row;
+}
+
+int LyXTable::CellHasContRow(int cell)
+{
+    int row = row_of_cell(cell);
+
+    if (VeryLastRow(cell))
+        return -1;
+    if (cell_info[row][column_of_cell(cell)].has_cont_row)
+        return cell_info[row+1][column_of_cell(cell)].cellno;
+    return -1;
+}
+
+bool LyXTable::RowHasContRow(int cell)
+{
+    int row = row_of_cell(cell) + 1;
+
+    if (row < rows)
+        return row_info[row].is_cont_row;
+    return false;
+}
+
+int LyXTable::FirstVirtualCell(int cell)
+{
+    if (!IsContRow(cell))
+        return cell;
+    int row = row_of_cell(cell);
+    int column = column_of_cell(cell);
+    for(;(row>0) && IsContRow(cell_info[row][column].cellno); row--)
+        ;
+    return cell_info[row][column].cellno;
+}
+
+
+int LyXTable::NextVirtualCell(int cell)
+{
+    if (!IsContRow(cell))
+        return cell;
+    int row = row_of_cell(cell);
+    for(;(row < rows - 1) && IsContRow(cell_info[row][0].cellno); ++row)
+       ;
+    // what if(row >= rows) ?
+    return cell_info[row][0].cellno;
+}
+
+
+bool LyXTable::ShouldBeVeryLastCell(int cell)
+// "very last cell" ..of what? the row? the table?
+// "Cell" in this context appears to not count `virtual' cells
+{
+    int fcell = cell + 1;
+
+    if (cell == GetNumberOfCells() - 1)
+        return true; // not really sure if I should return false here
+    if (!IsContRow(fcell))
+        return false;
+    while((fcell < GetNumberOfCells() - 1) && IsContRow(fcell))
+        fcell++;
+    if (fcell < GetNumberOfCells() - 1)
+        return false;
+    return true;
+}
+
+bool LyXTable::ShouldBeVeryLastRow(int cell)
+{
+    if (CellHasContRow(cell)>=0)
+        return false;
+    int row = row_of_cell(cell)+1;
+    int column = column_of_cell(cell);
+    while((row < rows) && IsContRow(cell_info[row][column].cellno))
+        row++;
+    if (row < rows)
+        return false; // found another valid row
+    // I do not have any valid row after the actual
+    return true;
+}
+
+int LyXTable::GetCellAbove(int cell)
+{
+    int row = row_of_cell(cell);
+    
+    if (row > 0)
+        return cell_info[row-1][column_of_cell(cell)].cellno;
+    return cell;
+}
+
+int LyXTable::GetCellNumber(int column, int row)
+{
+    if (column >= columns)
+        column = columns - 1;
+    else if (column < 0)
+        column = 0;
+    if (row >= rows)
+        row = rows - 1;
+    else if (row < 0)
+        row = 0;
+    
+    return cell_info[row][column].cellno;
+}
+
+void LyXTable::SetLinebreaks(int cell, bool what)
+{
+    cellinfo_of_cell(FirstVirtualCell(cell))->linebreaks = what;
+}
+
+bool LyXTable::Linebreaks(int cell)
+{
+    int fvcell = FirstVirtualCell(cell);
+
+    if (column_info[column_of_cell(fvcell)].p_width.empty() &&
+        !(IsMultiColumn(fvcell) && !cellinfo_of_cell(fvcell)->p_width.empty()))
+        return false;
+    return cellinfo_of_cell(fvcell)->linebreaks;
+}
+
+void LyXTable::SetLTHead(int cell, bool first)
+{
+    int row = row_of_cell(cell);
+
+    if (first) {
+        if (row == endfirsthead)
+            endfirsthead = -1;
+        else
+            endfirsthead = row;
+    } else {
+        if (row == endhead)
+            endhead = -1;
+        else
+            endhead = row;
+    }
+}
+
+bool LyXTable::RowOfLTHead(int cell)
+{
+    if ((endhead+1) > rows)
+        endhead = -1;
+    return (row_of_cell(cell) == endhead);
+}
+
+bool LyXTable::RowOfLTFirstHead(int cell)
+{
+    if ((endfirsthead+1) > rows)
+        endfirsthead = -1;
+    return (row_of_cell(cell) == endfirsthead);
+}
+
+void LyXTable::SetLTFoot(int cell, bool last)
+{
+    int row = row_of_cell(cell);
+
+    if (last) {
+        if (row == endlastfoot)
+            endlastfoot = -1;
+        else
+            endlastfoot = row;
+    } else {
+        if (row == endfoot)
+            endfoot = -1;
+        else
+            endfoot = row;
+    }
+}
+
+bool LyXTable::RowOfLTFoot(int cell)
+{
+    if ((endfoot+1) > rows) {
+        endfoot = -1;
+        return false;
+    }
+    return (row_of_cell(cell) == endfoot);
+}
+
+bool LyXTable::RowOfLTLastFoot(int cell)
+{
+    if ((endlastfoot+1) > rows)
+        endlastfoot = -1;
+    return (row_of_cell(cell) == endlastfoot);
+}
+
+void LyXTable::SetLTNewPage(int cell, bool what)
+{
+    row_info[row_of_cell(cell)].newpage = what;
+}
+
+bool LyXTable::LTNewPage(int cell)
+{
+    return row_info[row_of_cell(cell)].newpage;
+}
diff --git a/src/table.h b/src/table.h
new file mode 100644 (file)
index 0000000..39918ee
--- /dev/null
@@ -0,0 +1,343 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *       Copyright (C) 1995, 1996 Matthias Ettrich
+ *
+ *======================================================*/
+#ifndef TABLE_H
+#define TABLE_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <config.h>
+#include <stdio.h>
+#include "definitions.h"
+#include "lyxlex.h"
+#include "LString.h"
+
+/* The features the text class offers for tables */ 
+
+///
+class LyXTable  {
+public:
+       // Are the values of these enums important? (Lgb)
+       enum {
+               APPEND_ROW = 0,
+               APPEND_COLUMN = 1,
+               DELETE_ROW = 2,
+               DELETE_COLUMN = 3,
+               TOGGLE_LINE_TOP = 4,
+               TOGGLE_LINE_BOTTOM = 5,
+               TOGGLE_LINE_LEFT = 6,
+               TOGGLE_LINE_RIGHT = 7,
+               ALIGN_LEFT = 8, // what are these alignment enums used for?
+               ALIGN_RIGHT = 9,
+               ALIGN_CENTER = 10,
+               DELETE_TABLE = 11,
+               MULTICOLUMN = 12,
+                SET_ALL_LINES = 13,
+                UNSET_ALL_LINES = 14,
+                SET_LONGTABLE = 15,
+                UNSET_LONGTABLE = 16,
+                SET_PWIDTH = 17,
+                APPEND_CONT_ROW = 18,
+                SET_ROTATE_TABLE = 19,
+                UNSET_ROTATE_TABLE = 20,
+                SET_ROTATE_CELL = 21,
+                UNSET_ROTATE_CELL = 22,
+                SET_LINEBREAKS = 23,
+                SET_LTHEAD = 24,
+                SET_LTFIRSTHEAD = 25,
+                SET_LTFOOT = 26,
+                SET_LTLASTFOOT = 27,
+                SET_LTNEWPAGE = 28,
+                SET_SPECIAL_COLUMN = 29,
+                SET_SPECIAL_MULTI = 30
+       };
+
+       enum {
+               CELL_NORMAL = 0,
+               CELL_BEGIN_OF_MULTICOLUMN = 1,
+               CELL_PART_OF_MULTICOLUMN = 2
+       };
+       /* konstruktor */
+       ///
+       LyXTable(int columns_arg, int rows_arg);
+       ///
+       LyXTable(LyXLex &lex);
+       ///
+       ~LyXTable();
+       ///
+       LyXTable* Clone();
+
+       /// Returns true if there is a topline, returns false if not
+       bool TopLine(int cell);
+       /// Returns true if there is a topline, returns false if not
+       bool BottomLine(int cell);
+       /// Returns true if there is a topline, returns false if not
+       bool LeftLine(int cell);
+       /// Returns true if there is a topline, returns false if not
+       bool RightLine(int cell);
+
+       ///
+       bool TopAlreadyDrawed(int cell);
+       ///
+       bool VeryLastRow(int cell);
+
+       ///
+       int AdditionalHeight(int cell);
+       ///
+       int AdditionalWidth(int cell);
+   
+       /* returns the maximum over all rows */
+       ///
+       int WidthOfColumn(int cell);
+       ///
+       int WidthOfTable();
+   
+       /// Returns true if a complete update is necessary, otherwise false
+       bool SetWidthOfCell(int cell, int new_width);
+       /// Returns true if a complete update is necessary, otherwise false
+       bool SetAllLines(int cell, bool line);
+       /// Returns true if a complete update is necessary, otherwise false
+       bool SetTopLine(int cell, bool line);
+       /// Returns true if a complete update is necessary, otherwise false
+       bool SetBottomLine(int cell, bool line);
+       /// Returns true if a complete update is necessary, otherwise false
+       bool SetLeftLine(int cell, bool line);
+       /// Returns true if a complete update is necessary, otherwise false
+       bool SetRightLine(int cell, bool line);
+       /// Returns true if a complete update is necessary, otherwise false
+       bool SetAlignment(int cell, char align);
+        ///
+       bool SetPWidth(int cell, LString width);
+        ///
+       bool SetAlignSpecial(int cell, LString special,int what);
+       ///
+       char GetAlignment(int cell); // add approp. signedness
+        ///
+        LString GetPWidth(int cell);
+        ///
+        LString GetAlignSpecial(int cell, int what);
+
+       ///
+       int GetWidthOfCell(int cell);
+       ///
+       int GetBeginningOfTextInCell(int cell);
+
+       ///
+       void AppendRow(int cell);
+       ///
+       void DeleteRow(int cell);
+
+       ///
+       void AppendColumn(int cell);
+       ///
+       void DeleteColumn(int cell);
+
+       ///
+       bool IsFirstCell(int cell);
+       ///
+       bool IsLastCell(int cell);
+
+       ///
+       int GetNumberOfCells();
+       ///
+       int AppendCellAfterCell(int append_cell, int question_cell);
+       ///
+       int DeleteCellIfColumnIsDeleted(int cell, int delete_column_cell);
+       ///
+       int NumberOfCellsInRow(int cell);
+       ///
+       void Reinit();
+
+       ///
+       void Init(int columns_arg, int rows_arg);
+
+       ///
+       void Write(FILE* file);
+       ///
+       void Read(FILE* file);
+
+       // cell <0 will tex the preamble
+       // returns the number of printed newlines
+       ///
+       int TexEndOfCell(LString& file, int cell);
+       ///
+       int RoffEndOfCell(FILE* file, int cell);
+       ///
+       const char *getDocBookAlign(int cell, bool isColumn=false);
+       ///
+       int DocBookEndOfCell(LString &file, int cell, int &depth);
+
+       ///
+       bool IsMultiColumn(int cell);
+       ///
+       void SetMultiColumn(int cell, int number);
+       ///
+       int UnsetMultiColumn(int cell); // returns number of new cells
+        ///
+       int row_of_cell(int cell);
+       ///
+       int column_of_cell(int cell);
+       ///
+       int rows;
+       ///
+       int columns;
+       ///
+       void SetLongTable(int what);
+       ///
+       bool IsLongTable();
+       ///
+       void SetRotateTable(int what);
+       ///
+       bool RotateTable();
+       ///
+       void SetRotateCell(int cell, int what);
+       ///
+       bool RotateCell(int cell);
+       ///
+        bool NeedRotating();
+        ///
+        void AppendContRow(int cell);
+        ///
+        bool IsContRow(int cell);
+        /// returns the number of the cell which continues
+        /// or -1 if no ContRow
+        int CellHasContRow(int cell);
+        ///
+        bool RowHasContRow(int cell);
+        ///
+        int FirstVirtualCell(int cell);
+        ///
+        int NextVirtualCell(int cell);
+        ///
+        bool ShouldBeVeryLastCell(int cell);
+        ///
+        bool ShouldBeVeryLastRow(int cell);
+        ///
+        int GetCellAbove(int cell);
+       ///
+       int GetCellNumber(int column, int row);
+       ///
+        void SetLinebreaks(int cell, bool what);
+       ///
+        bool Linebreaks(int cell);
+        ///
+        /// Long Table Options
+        ///
+        void SetLTHead(int cell, bool first);
+        ///
+        bool RowOfLTHead(int cell);
+       ///
+        bool RowOfLTFirstHead(int cell);
+       ///
+        void SetLTFoot(int cell, bool last);
+       ///
+        bool RowOfLTFoot(int cell);
+       ///
+        bool RowOfLTLastFoot(int cell);
+       ///
+        void SetLTNewPage(int cell, bool what);
+       ///
+        bool LTNewPage(int cell);
+private:
+       ///
+       struct cellstruct {
+            ///
+            int cellno;
+            ///
+            int width_of_cell;
+            ///
+            char  multicolumn; // add approp. signedness
+            ///
+            char alignment; // add approp. signedness
+            ///
+            bool top_line;
+            ///
+            bool bottom_line;
+            ///
+            bool has_cont_row;
+            ///
+            bool linebreaks;
+            ///
+            int rotate;
+            ///
+            LString align_special;
+            ///
+            LString p_width; // this is only set for multicolumn!!!
+       };
+        ///
+        struct rowstruct {
+                bool top_line;
+                bool bottom_line;
+                bool is_cont_row;
+                /// This are for longtables only
+                bool newpage;
+        };
+        ///
+        struct columnstruct {
+                char alignment; // add approp. signedness
+                bool left_line;
+                bool right_line;
+                int  width_of_column;
+                LString p_width;
+                LString align_special;
+        };
+       ///
+       int numberofcells;
+       ///
+       int* rowofcell;
+       ///
+       int* columnofcell;
+       ///
+       void set_row_column_number_info();
+
+       ///
+        rowstruct *row_info;
+        ///
+        columnstruct *column_info;
+        ///
+       cellstruct** cell_info;
+       ///
+       int width_of_table;
+        ///
+        /// for long tables
+        ///
+        int endhead; // row of endhead
+        int endfirsthead; // row of endfirsthead
+        int endfoot; // row of endfoot
+        int endlastfoot; // row of endlastfoot
+   
+       /// Returns true if a complete update is necessary, otherwise false
+       bool SetWidthOfMulticolCell(int cell, int new_width);
+       void recalculateMulticolCells(int cell, int new_width);
+       /// Returns true if change
+       bool calculate_width_of_column(int column);
+       bool calculate_width_of_column_NMC(int column); // no multi cells
+       ///
+       void calculate_width_of_table();
+
+        ///
+       int right_column_of_cell(int cell);
+
+       ///
+       cellstruct* cellinfo_of_cell(int cell);
+
+       ///
+       void delete_column(int column);
+
+       ///
+       int cells_in_multicolumn(int cell);
+       ///
+       int is_long_table;
+       ///
+       int rotate;
+};
+
+#endif
diff --git a/src/tex-accent.C b/src/tex-accent.C
new file mode 100644 (file)
index 0000000..24da40e
--- /dev/null
@@ -0,0 +1,92 @@
+#include <config.h>
+
+#include <stdlib.h>
+#include "tex-accent.h"
+#include "commandtags.h"
+#include "LString.h"
+
+/* the names used by TeX and XWindows for deadkeys/accents are not the same
+   so here follows a table to clearify the differences. Please correct this
+   if I got it wrong
+
+   |------------------|------------------|------------------|--------------|
+   |      TeX         |     XWindows     |   \bind/LFUN     | used by intl |
+   |------------------|------------------|------------------|--------------|
+   |    grave         |    grave         |LFUN_GRAVE        | grave
+   |    acute         |    acute         |LFUN_ACUTE        | acute
+   |    circumflex    |    circumflex    |LFUN_CIRCUMFLEX   | circumflex
+   | umlaut/dieresis  |    diaeresis     |LFUN_UMLAUT       | umlaut
+   |    tilde         |    tilde         |LFUN_TILDE        | tilde
+   |    macron        |    maron         |LFUN_MACRON       | macron
+   |    dot           |    abovedot      |LFUN_DOT          | dot
+   |    cedilla       |    cedilla       |LFUN_CEDILLA      | cedilla
+   |    underdot      |                  |LFUN_UNDERDOT     | underdot
+   |    underbar      |                  |LFUN_UNDERBAR     | underbar
+   |    hácek         |    caron         |LFUN_CARON        | caron
+   |    breve         |    breve         |LFUN_BREVE        | breve
+   |    tie           |                  |LFUN_TIE          | tie
+   | Hungarian umlaut |    doubleacute   |LFUN_HUNG_UMLAUT  | hungarian umlaut
+   |    circle        |    abovering     |LFUN_CIRCLE       | circle
+   |                  |    ogonek        |                  |
+   |                  |    iota          |                  |
+   |                  |    voiced_sound  |                  |
+   |                  | semivoiced_sound |                  |
+   |                  |                  |LFUN_SPECIAL_CARON| special caron
+   */
+// I am not sure how some of the XWindows names coresponds to the TeX ones.
+
+//static
+tex_accent_struct lyx_accent_table[18] ={
+       { (tex_accent)0, "", "", "",(kb_action)0},
+       {TEX_ACUTE,      "\\'",  " AEIOUYaeiouySZszRLCNrlcn","acute",   LFUN_ACUTE},
+       {TEX_GRAVE,      "\\`",  " aeiouAEIOU",           "grave",    LFUN_GRAVE},
+       {TEX_MACRON,     "\\=",  " EeAIOUaiou",           "macron",    LFUN_MACRON},
+       {TEX_TILDE,      "\\~",  " ANOanoIiUu",           "tilde",    LFUN_TILDE},
+       {TEX_UNDERBAR,   "\\b", " ",                     "underbar", LFUN_UNDERBAR},
+       {TEX_CEDILLA,    "\\c", " CcSsTtRLGrlgNKnk",     "cedilla",    LFUN_CEDILLA},
+       {TEX_UNDERDOT,   "\\d", " ",                     "underdot", LFUN_UNDERDOT},
+       {TEX_CIRCUMFLEX, "\\^",  " AEIOUaeiouHJhjCGScgs", "circumflex",  LFUN_CIRCUMFLEX},
+       {TEX_CIRCLE,     "\\r", " AaUu",                 "circle",  LFUN_CIRCLE},
+       {TEX_TIE,        "\\t", " ",                     "tie",    LFUN_TIE},
+       {TEX_BREVE,      "\\u", " AaGgUu",               "breve",    LFUN_BREVE},
+       {TEX_CARON,      "\\v", " LSTZlstzCEDNRcednr",   "caron",    LFUN_CARON},
+//  {TEX_SPECIAL_CARON, "\\q", "","ooo",  LFUN_SPECIAL_CARON},
+       {TEX_HUNGUML,    "\\H", " OUou",                 "hugarian_umlaut",    LFUN_HUNG_UMLAUT},
+       {TEX_UMLAUT,     "\\\"", " AEIOUaeiouy",          "umlaut",    LFUN_UMLAUT},
+       {TEX_DOT,        "\\.",  " ZzICGicgEe",           "dot",    LFUN_DOT},
+       {TEX_OGONEK,     "\\k",  " AaEe",                 "ogonek",    LFUN_OGONEK},
+       { (tex_accent)0, "", "", "",(kb_action)0}};
+        
+
+tex_accent_struct get_accent(kb_action action)
+{
+       int i=0;
+       while (i<=TEX_MAX_ACCENT){
+               if (lyx_accent_table[i].action == action)
+                       return lyx_accent_table[i];
+               i++;
+       }
+       struct tex_accent_struct temp = { (tex_accent)0, NULL, NULL,
+                                         NULL,(kb_action)0};
+       return temp;
+}
+
+LString DoAccent(const LString& s,tex_accent accent)
+{
+       LString res;
+       
+       res+=lyx_accent_table[accent].cmd;
+       res+='{';
+       if (s=="i" || s=="j") {
+               res+='\\';
+       }
+       res+=s;
+       res+='}';
+       return res;
+}
+
+LString DoAccent(char c,tex_accent accent)
+{
+       return DoAccent(LString(c),accent);
+}
+
diff --git a/src/tex-accent.h b/src/tex-accent.h
new file mode 100644 (file)
index 0000000..eb864d7
--- /dev/null
@@ -0,0 +1,99 @@
+// -*- C++ -*-
+
+#ifndef _TEX_ACCENT_
+#define _TEX_ACCENT_
+
+#include "commandtags.h"
+
+/* the names used by TeX and XWindows for deadkeys/accents are not the same
+   so here follows a table to clearify the differences. Please correct this
+   if I got it wrong
+
+   |------------------|------------------|------------------|--------------|
+   |      TeX         |     XWindows     |   \bind/LFUN     | used by intl |
+   |------------------|------------------|------------------|--------------|
+   |    grave         |    grave         |LFUN_GRAVE        | grave
+   |    acute         |    acute         |LFUN_ACUTE        | acute
+   |    circumflex    |    circumflex    |LFUN_CIRCUMFLEX   | circumflex
+   | umlaut/dieresis  |    diaeresis     |LFUN_UMLAUT       | umlaut
+   |    tilde         |    tilde         |LFUN_TILDE        | tilde
+   |    macron        |    maron         |LFUN_MACRON       | macron
+   |    dot           |    abovedot      |LFUN_DOT          | dot
+   |    cedilla       |    cedilla       |LFUN_CEDILLA      | cedilla
+   |    underdot      |                  |LFUN_UNDERDOT     | underdot
+   |    underbar      |                  |LFUN_UNDERBAR     | underbar
+   |    hácek         |    caron         |LFUN_CARON        | caron
+   |    breve         |    breve         |LFUN_BREVE        | breve
+   |    tie           |                  |LFUN_TIE          | tie
+   | Hungarian umlaut |    doubleacute   |LFUN_HUNG_UMLAUT  | hungarian umlaut
+   |    circle        |    abovering     |LFUN_CIRCLE       | circle
+   |                  |    ogonek        |                  |
+   |                  |    iota          |                  |
+   |                  |    voiced_sound  |                  |
+   |                  | semivoiced_sound |                  |
+   |                  |                  |LFUN_SPECIAL_CARON| special caron
+   */
+// I am not sure how some of the XWindows names coresponds to the TeX ones.
+
+///
+enum tex_accent {
+       ///
+       TEX_NOACCENT = 0,
+       ///
+       TEX_ACUTE,
+       ///
+       TEX_GRAVE,
+       ///
+       TEX_MACRON,
+       ///
+       TEX_TILDE,
+       ///
+       TEX_UNDERBAR,
+       ///
+       TEX_CEDILLA,
+       ///
+       TEX_UNDERDOT,
+       ///
+       TEX_CIRCUMFLEX,
+       ///
+       TEX_CIRCLE,
+       ///
+       TEX_TIE,
+       ///
+       TEX_BREVE,
+       ///
+       TEX_CARON,
+//  TEX_SPECIAL_CARON,
+       ///
+       TEX_HUNGUML,
+       ///
+       TEX_UMLAUT,
+       ///
+       TEX_DOT,
+       ///
+       TEX_OGONEK,
+       ///
+       TEX_MAX_ACCENT=TEX_OGONEK
+};
+
+
+/** the native is so we know what characters TeX can write in a decent way
+ it should be up to the user if _all_ characters should be allowed to
+ be accented. Lgb. */
+struct tex_accent_struct {
+       ///
+       tex_accent accent;
+       ///
+       char const *cmd;
+       ///
+       char const *native;
+       ///
+       char const *name;
+       ///
+       kb_action action;
+};
+
+///
+extern tex_accent_struct lyx_accent_table[];
+        
+#endif
diff --git a/src/tex-defs.h b/src/tex-defs.h
new file mode 100644 (file)
index 0000000..1025e85
--- /dev/null
@@ -0,0 +1,37 @@
+// -*- C++ -*-
+#ifndef _TEX_DEFS_H
+#define _TEX_DEFS_H
+
+
+// /* the names used by TeX and XWindows for deadkeys/accents are not the same
+//    so here follows a table to clearify the differences. Please correct this
+//    if I got it wrong
+
+//    |------------------|------------------|------------------|--------------|
+//    |      TeX         |     XWindows     |   \bind/LFUN     | used by intl |
+//    |------------------|------------------|------------------|--------------|
+//    |    grave         |    grave         |LFUN_GRAVE        | grave
+//    |    acute         |    acute         |LFUN_ACUTE        | acute
+//    |    circumflex    |    circumflex    |LFUN_CIRCUMFLEX   | circumflex
+//    | umlaut/dieresis  |    diaeresis     |LFUN_UMLAUT       | umlaut
+//    |    tilde         |    tilde         |LFUN_TILDE        | tilde
+//    |    macron        |    maron         |LFUN_MACRON       | macron
+//    |    dot           |    abovedot      |LFUN_DOT          | dot
+//    |    cedilla       |    cedilla       |LFUN_CEDILLA      | cedilla
+//    |    underdot      |                  |LFUN_UNDERDOT     | underdot
+//    |    underbar      |                  |LFUN_UNDERBAR     | underbar
+//    |    hácek         |    caron         |LFUN_CARON        | caron
+//    |    breve         |    breve         |LFUN_BREVE        | breve
+//    |    tie           |                  |LFUN_TIE          | tie
+//    | Hungarian umlaut |    doubleacute   |LFUN_HUNG_UMLAUT  | hungarian umlaut
+//    |    circle        |    abovering     |LFUN_CIRCLE       | circle
+//    |                  |    ogonek        |                  |
+//    |                  |    iota          |                  |
+//    |                  |    voiced_sound  |                  |
+//    |                  | semivoiced_sound |                  |
+//    |                  |                  |LFUN_SPECIAL_CARON| special caron
+//    */
+// // I am not sure how some of the XWindows names coresponds to the TeX ones.
+
+
+#endif
diff --git a/src/tex-strings.C b/src/tex-strings.C
new file mode 100644 (file)
index 0000000..ae27537
--- /dev/null
@@ -0,0 +1,75 @@
+#include <config.h>
+#include "tex-strings.h"
+
+// this file should perhaps be split into even smaller parts
+
+char const* string_paragraph_separation[3] = {
+        "indent", "skip", ""
+};
+
+
+char const* string_quotes_language[7] = {
+        "english", "swedish", "german", "polish", "french", "danish", ""
+};      
+
+
+char const* string_oldpapersize[10] = {
+       "a4paper", "a4", "a4wide", "widemarginsa4", "usletter", 
+       "a5paper", "b5paper", "executivepaper", "legalpaper",""
+};
+
+
+char const* string_papersize[12] = {
+       "Default", "Custom", "letterpaper", "executivepaper", "legalpaper", 
+       "a3paper","a4paper","a5paper","b3paper","b4paper","b5paper",""
+};
+
+
+char const* string_paperpackages[4] = {
+       "a4", "a4wide", "widemarginsa4", ""
+};
+
+
+char const* string_orientation[3] = {
+       "portrait", "landscape", ""
+};
+
+
+char const* string_footnotekinds[8] = {
+        "footnote", "margin", "fig", "tab", "alg", "wide-fig", "wide-tab", ""
+};
+
+
+char const* string_align[5] = {
+        "block", "left", "right", "center", ""
+};
+
+
+// The following was moved from tex-defs.h to here, because tex-defs.h is
+// used all over. As it happens, that meant that these strings were included 
+// 27 times in the object file. (Asger)
+
+///
+char const *tex_babel[] = {"default","afrikaans", "american",
+                          "austrian", "bahasa", "brazil", "breton",
+                          "catalan", "croatian", "czech", "danish", "dutch", 
+                          "english", "esperanto", "estonian",
+                          "finnish", "francais", "french", "frenchb",
+                          "galician",
+                          "german", "greek", "hungarian", "irish",
+                          "italian","lsorbian", "magyar", "norsk",
+                          "polish", "portuges", "romanian",
+                          "russian", "scottish",
+                          "spanish", "slovak", "slovene", "swedish",
+                          "turkish", "usorbian", "welsh",
+                          ""};
+
+
+char const *tex_graphics[] = {"default", "dvips", "dvitops", "emtex",
+                     "ln", "oztex", "textures", "none", ""};
+
+
+char const *tex_fonts[] = {"default", "times", "palatino", "helvet", "avant",
+                    "newcent", "bookman", ""};
+
+
diff --git a/src/tex-strings.h b/src/tex-strings.h
new file mode 100644 (file)
index 0000000..7175516
--- /dev/null
@@ -0,0 +1,38 @@
+// -*- C++ -*-
+
+#ifndef _TEX_STRINGS_
+#define _TEX_STRINGS_
+
+// this file should perhaps be split into even smaler parts
+
+///
+extern char const* string_paragraph_separation[];
+///
+extern char const* string_quotes_language[];
+///
+extern char const* string_oldpapersize[];
+///
+extern char const* string_papersize[];
+///
+extern char const* string_paperpackages[];
+///
+extern char const* string_orientation[];
+///
+extern char const* string_footnotekinds[];
+///
+extern char const* string_align[];
+
+// The following was moved from tex-defs.h to here, because tex-defs.h is
+// used all over. As it happens, that meant that these strings were included 
+// 27 times in the object file. (Asger)
+
+///
+extern char const *tex_babel[];
+
+///
+extern char const *tex_graphics[];
+
+///
+extern char const *tex_fonts[];
+
+#endif
diff --git a/src/texoptions.C b/src/texoptions.C
new file mode 100644 (file)
index 0000000..f12c5c5
--- /dev/null
@@ -0,0 +1,48 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*
+*           Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*           This file is Copyleft (C) 1996-1998
+*           Lars Gullik Bjønnes
+*
+*======================================================*/
+
+#include <config.h>
+#include FORMS_H_LOCATION
+#include "latexoptions.h"
+#include "lyx_cb.h"
+#include "lyx_main.h"
+#include "buffer.h"
+#include "BufferView.h"
+
+//     $Id: texoptions.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $        
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: texoptions.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+extern FD_LaTeXOptions *fd_latex_options;
+extern BufferView *current_view;
+
+void LaTeXOptionsOK(FL_OBJECT *ob, long data)
+{
+       LaTeXOptionsApply(ob, data);
+       LaTeXOptionsCancel(ob, data);
+}
+
+void LaTeXOptionsApply(FL_OBJECT *, long)
+{
+       if (fl_get_button(fd_latex_options->accents))
+               current_view->currentBuffer()->params.allowAccents = true;
+       else
+               current_view->currentBuffer()->params.allowAccents = false;
+}
+
+void LaTeXOptionsCancel(FL_OBJECT *, long)
+{
+       fl_hide_form(fd_latex_options->LaTeXOptions);
+}
diff --git a/src/texrow.C b/src/texrow.C
new file mode 100644 (file)
index 0000000..ae84722
--- /dev/null
@@ -0,0 +1,123 @@
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "texrow.h"
+#include "lyxparagraph.h"
+#include "error.h"
+
+//     $Id: texrow.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $    
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: texrow.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+// Delete linked list
+void TexRow::reset()
+{
+       TexRow_Item *current, *iter = next;
+       while (iter) {
+               // Iterate through the list deleting as you go.
+               // A bit easier to debug than recursive deletion.
+               current = iter;
+               iter = iter->next;
+               delete current;
+       }
+       count = 0;
+       next = 0;
+       lastpar = 0;
+       lastpos = -1;
+}
+
+// Defines paragraph and position for the beginning of this row
+void TexRow::start(LyXParagraph *par, int pos) {
+       lastpar = par;
+       lastpos = pos;
+}
+
+// Insert node when line is completed
+void TexRow::newline()
+{
+       TexRow_Item *tmp = new TexRow_Item;
+       tmp->pos = lastpos;
+       
+       if (lastpar)
+               tmp->id = lastpar->GetID();
+       else
+               tmp->id = -1;
+
+       // Inserts at the beginning of the list
+       tmp->next = next;
+       next = tmp;
+       count++;
+       tmp->rownumber = count;
+}
+
+
+void TexRow::getIdFromRow(int row, int &id, int &pos)
+{
+       TexRow_Item *tmp = next;
+       while (tmp && tmp->rownumber != row) {
+               tmp = tmp->next;
+       }
+       if (tmp) {
+               TexRow_Item *tmp2 = next;
+               // Increase the pos of all rows with the
+               // same id (and where the pos is larger)
+               // to avoid putting errorinsets at the
+               // same pos.
+               while (tmp2) {
+                       if (tmp2 != tmp &&
+                           tmp2->id == tmp->id &&
+                           tmp2->pos >= tmp->pos)
+                               tmp2->pos++;
+                       tmp2 = tmp2->next;
+               }
+               id = tmp->id;
+               pos = tmp->pos;
+       } else {
+               id = -1;
+               pos = 0;
+       }
+}
+
+
+TexRow & TexRow::operator+=(const TexRow &tr)
+{
+       // remember that the lists are stored in reverse 
+       // so you've got to turn the second one around 
+       // as you insert it in the first
+       for (int counter = tr.count; counter > 0; --counter) {
+               int i = 1;
+               TexRow_Item *iter = tr.next;
+               while (i < counter) {
+                       iter = iter->next;
+                       ++i;
+               }
+
+               ++count;
+               TexRow_Item *tmp;
+               tmp = new TexRow_Item;
+               tmp->id = iter->id;
+               tmp->pos = iter->pos;
+               tmp->next = next;
+               tmp->rownumber = count;
+               next = tmp;
+       }
+       // should I be doing this or not?
+       //lastpar = tr.lastpar;
+       //lastpos = tr.lastpos;
+       return *this;
+}      
diff --git a/src/texrow.h b/src/texrow.h
new file mode 100644 (file)
index 0000000..11aa605
--- /dev/null
@@ -0,0 +1,81 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team
+ *
+ *======================================================*/
+
+#ifndef _TEXROW_H
+#define _TEXROW_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+class LyXParagraph;
+
+// Controls correspondance between paragraphs and the generated LaTeX file
+class TexRow {
+public:
+       ///
+       TexRow() {
+               count = 0;
+               next = 0;
+               lastpar = 0;
+               lastpos = -1;
+       }
+       ///
+       ~TexRow() {
+               reset();
+       }
+
+       /// Clears structure
+       void reset();
+
+       /// Define what paragraph and position the next row will represent
+       void start(LyXParagraph *par, int pos);
+
+       /// Insert node when line is completed
+       void newline();
+
+       /// Returns paragraph id and position from a row number
+       void getIdFromRow(int row, int &id, int &pos);
+
+       /// Appends another TexRow
+       TexRow & operator+=(const TexRow &);
+
+private:
+       /// Linked list of items
+       struct TexRow_Item {
+               ///
+               TexRow_Item() {
+                       id = -1;
+                       pos = -1;
+                       next = 0;
+                       rownumber = 0;
+               }
+
+               ///
+               int id;
+               ///
+               int pos;
+               ///
+               int rownumber;
+               ///
+               TexRow_Item *next;
+       };
+       ///
+       unsigned int count;
+       ///
+       TexRow_Item *next;
+       /// Last paragraph
+       LyXParagraph * lastpar;
+       /// Last position
+       int lastpos;
+       
+};
+#endif
diff --git a/src/text.C b/src/text.C
new file mode 100644 (file)
index 0000000..8fc1958
--- /dev/null
@@ -0,0 +1,4123 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#ifdef __GNUG__
+#pragma implementation "table.h"
+#endif
+
+#include "layout.h"
+#include "lyxparagraph.h"
+#include "lyxtext.h"
+#include "textutils.h"
+#include "lyx_gui_misc.h"
+#include "lyxdraw.h"
+#include "gettext.h"
+#include "bufferparams.h"
+#include "buffer.h"
+#include "lyxscreen.h"
+#include "minibuffer.h"
+
+//     $Id: text.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $      
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: text.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+
+static const int LYX_PAPER_MARGIN = 20;
+
+extern int mono_video;
+extern int reverse_video;
+extern int fast_selection;
+extern BufferView *current_view;
+extern int UnlockInset(UpdatableInset* inset);
+
+// ale070405
+extern int bibitemMaxWidth(const class LyXFont &);
+
+// dnaber 1999-02-02
+extern MiniBuffer *minibuffer;
+
+int LyXText::SingleWidth(LyXParagraph *par, int pos)
+{
+       char c = par->GetChar(pos);
+       return SingleWidth(par, pos, c);
+}
+
+
+int LyXText::SingleWidth(LyXParagraph *par, int pos, char c)
+{
+       LyXFont font = GetFont(par, pos);
+
+       // The most common case is handled first (Asger)
+       if (IsPrintable(c)) {
+               return font.width(c);
+
+       } else if (IsHfillChar(c)) {
+               return 3;       /* because of the representation
+                                * as vertical lines */
+
+       } else if (c == LYX_META_FOOTNOTE ||
+                  c == LYX_META_MARGIN ||
+                  c == LYX_META_FIG ||
+                  c == LYX_META_TAB ||
+                  c == LYX_META_WIDE_FIG ||
+                  c == LYX_META_WIDE_TAB ||
+                  c == LYX_META_ALGORITHM) 
+       {
+               LString fs;
+               switch (c) {
+               case LYX_META_MARGIN:
+                       fs = "margin";
+                       break;
+               case LYX_META_FIG:
+                       fs = "fig";
+                       break;
+               case LYX_META_TAB:
+                       fs = "tab";
+                       break;
+               case LYX_META_ALGORITHM:
+                       fs = "alg";
+                       break;
+               case LYX_META_WIDE_FIG:
+                       fs = "wide-fig";
+                       break;
+               case LYX_META_WIDE_TAB:
+                       fs = "wide-tab";
+                       break;
+               case LYX_META_FOOTNOTE:
+                       fs = "foot";
+                       break;
+               }
+               font.decSize();
+               font.decSize();
+               return font.stringWidth(fs);
+       } 
+   
+       else if (c == LYX_META_INSET) {
+               Inset *tmpinset=par->GetInset(pos);
+               if (tmpinset)
+                       return par->GetInset(pos)->Width(font);
+               else
+                       return 0;
+
+       } else if (IsSeparatorChar(c))
+               c = ' ';
+       else if (IsNewlineChar(c))
+               c = 'n';
+       return font.width(c);
+}
+
+
+/* returns the paragraph position of the last character in the 
+ * specified row */
+int LyXText::RowLast(Row *row)
+{
+       if (row->next == NULL)
+               return row->par->Last()-1;
+       else if (row->next->par != row->par) 
+               return row->par->Last()-1;
+       else 
+               return row->next->pos - 1;
+}
+
+
+void LyXText::Draw(Row *row, int &pos, LyXScreen &scr, int offset, float &x)
+{
+       char c = row->par->GetChar(pos);
+
+       if (IsNewlineChar(c)) {
+               pos++;
+               // Draw end-of-line marker
+
+               LyXFont font = GetFont(row->par, pos);
+               int asc = font.maxAscent();
+               int wid = font.width('n');
+               int y = (offset + row->baseline);
+               XPoint p[3];
+               p[0].x = int(x + wid*0.375); p[0].y = int(y - 0.875*asc*0.75);
+               p[1].x = int(x);             p[1].y = int(y - 0.500*asc*0.75);
+               p[2].x = int(x + wid*0.375); p[2].y = int(y - 0.125*asc*0.75);
+               scr.drawLines(::getGC(gc_new_line),p, 3);
+               
+               p[0].x = int(x);             p[0].y = int(y - 0.500*asc*0.75);
+               p[1].x = int(x + wid);       p[1].y = int(y - 0.500*asc*0.75);
+               p[2].x = int(x + wid);       p[2].y = int(y - asc*0.75);
+               scr.drawLines(::getGC(gc_new_line),p, 3);
+               return;
+       }
+
+       LyXFont font = GetFont(row->par, pos);
+       LyXFont font2 = font;
+
+       if (c == LYX_META_FOOTNOTE ||
+           c == LYX_META_MARGIN ||
+           c == LYX_META_FIG ||
+           c == LYX_META_TAB ||
+           c == LYX_META_WIDE_FIG ||
+           c == LYX_META_WIDE_TAB ||
+           c == LYX_META_ALGORITHM) {
+               LString fs;
+               switch (c) {
+               case LYX_META_MARGIN:
+                       fs = "margin";
+                       /* draw a sign at the left margin! */ 
+                       scr.drawText(font, "!", 1, offset + row->baseline,
+                                    (LYX_PAPER_MARGIN - font.width('!'))/2);
+                       break;
+               case LYX_META_FIG:
+                       fs = "fig";
+                       break;
+               case LYX_META_TAB:
+                       fs = "tab";
+                       break;
+               case LYX_META_ALGORITHM:
+                       fs = "alg";
+                       break;
+               case LYX_META_WIDE_FIG:
+                       fs = "wide-fig";
+                       break;
+               case LYX_META_WIDE_TAB:
+                       fs = "wide-tab";
+                       break;
+               case LYX_META_FOOTNOTE:
+                       fs = "foot";
+                       break;
+               }
+               font.decSize();
+               font.decSize();
+         
+               /* calculate the position of the footnotemark */
+               int y = (row->baseline - font2.maxAscent() 
+                        + font.maxAscent());
+         
+               font.setColor(LyXFont::INSET);
+
+               float tmpx = x;
+
+               /* draw it and set new x position */
+               x += scr.drawString(font, fs, offset + y, int(x));
+
+               scr.drawLine(gc_foot, offset + row->baseline,
+                            int(tmpx), int(x - tmpx));
+         
+               pos++;
+               return;
+       } else if (c == LYX_META_INSET) {
+               Inset *tmpinset = row->par->GetInset(pos);
+               if (tmpinset) 
+                       tmpinset->Draw(font, scr, offset + row->baseline, x);
+               pos++;
+               return;
+       }
+
+       /* usual characters, no insets */
+
+       // Collect character that we can draw in one command
+
+       // This is dirty, but fast. Notice that it will never be too small.
+       // For the record, I'll note that Microsoft Word has a limit
+       // of 768 here. We have none :-) (Asger)
+       static char textstring[1024];
+
+       int last = RowLast(row);
+       // Prevent crash in the extremely unlikely event
+       // that our array is too small
+       if (last > pos+1020) last = pos + 1020;
+
+       textstring[0] = c;
+       pos++;
+
+       int i = 1;
+
+       while (pos <= last &&
+              (unsigned char) (c = row->par->GetChar(pos)) > ' ' &&
+              font2 == GetFont(row->par, pos)) {
+               textstring[i++] = c;
+               pos++;
+       }
+       textstring[i] = 0; 
+
+       float tmpx = x;
+
+       // If monochrome and LaTeX mode, provide reverse background
+       if (mono_video && font.latex() == LyXFont::ON) {
+               int a=font.maxAscent(), d=font.maxDescent();
+               scr.fillRectangle(gc_copy, int(tmpx), offset + row->baseline-a,
+                                 font.textWidth(textstring, i), a+d);
+       }
+
+       /* Draw text and set the new x position */ 
+       x += scr.drawText(font, textstring, i, offset + row->baseline, 
+                         int(x));
+       /* what about underbars? */
+       if (font.underbar() == LyXFont::ON && font.latex() != LyXFont::ON) {
+               scr.drawLine(gc_copy, offset + row->baseline + 2,
+                            int(tmpx), int(x - tmpx));
+       }
+
+       // If we want ulem.sty support, drawing
+       // routines should go here. (Asger)
+       // Why shouldn't LyXFont::drawText handle it internally?
+}
+
+
+/* Returns the left beginning of the text. 
+* This information cannot be taken from the layouts-objekt, because in 
+* LaTeX the beginning of the text fits in some cases (for example sections)
+* exactly the label-width. */
+int LyXText::LeftMargin(Row* row)
+{
+   int x;
+   LyXLayout *layout;
+   LyXFont labelfont;
+   LyXParagraph *newpar;
+   Row dummyrow;
+   layout = lyxstyle.Style(parameters->textclass, row->par->GetLayout());
+   
+   LString parindent = layout->parindent; 
+
+   /* table stuff -- begin*/ 
+   if (row->par->table)
+      parindent.clean();
+   /* table stuff -- end*/       
+
+   x = LYX_PAPER_MARGIN;
+
+   x += lyxstyle.TextClass(parameters->textclass)->
+     defaultfont.signedStringWidth(lyxstyle.TextClass(parameters->textclass)->leftmargin);
+
+   if (row->par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)  {
+       LyXFont font(LyXFont::ALL_SANE);
+       font.setSize(LyXFont::SIZE_SMALL);
+       x += font.textWidth("Mwide-figM", 10) + LYX_PAPER_MARGIN/2;
+   }
+
+   /* this is the way, LyX handles the LaTeX-Environments.
+    * I have had this idea very late, so it seems to be a
+    * later added hack and this is true */ 
+   if (!row->par->GetDepth()) {
+      if (!row->par->GetLayout()) {
+        /* find the previous same level paragraph */
+        if (row->par->FirstPhysicalPar()->Previous()) {
+           newpar = row->par->DepthHook(row->par->GetDepth());
+           if (newpar && lyxstyle.Style(parameters->textclass, newpar->GetLayout())->nextnoindent)
+              parindent.clean();
+        }
+      }
+   }
+   else {
+      /* find the next level paragraph */ 
+      
+      newpar = row->par->DepthHook(row->par->GetDepth()-1);
+
+      /* make a corresponding row. Needed to call LeftMargin() */
+      
+      /* check wether it is a sufficent paragraph */ 
+      if (newpar && newpar->footnoteflag == row->par->footnoteflag
+         && lyxstyle.Style(parameters->textclass, 
+                           newpar->GetLayout())->isEnvironment()) {
+            dummyrow.par = newpar;
+            dummyrow.pos = newpar->Last();
+            x = LeftMargin(&dummyrow);
+      }
+      else {
+        /* this is no longer an error, because this function is used
+         * to clear impossible depths after changing a layout. Since there
+         * is always a redo, LeftMargin() is always called */ 
+        
+        /* printf("LYX_ERROR (text, LeftMargin()) impossible depth \n");*/ 
+        row->par->FirstPhysicalPar()->depth = 0;
+      }
+      
+      if (newpar && !row->par->GetLayout()) {
+        if (newpar->FirstPhysicalPar()->noindent)
+           parindent.clean();
+        else
+           parindent = lyxstyle.Style(parameters->textclass, 
+                                      newpar->GetLayout())->parindent;
+      }
+      
+   }
+   
+   labelfont = GetFont(row->par, -2);
+   switch (layout->margintype) {
+    case MARGIN_DYNAMIC:
+      if (!layout->leftmargin.empty()) {
+       x += lyxstyle.TextClass(parameters->textclass)->defaultfont.signedStringWidth(layout->leftmargin);
+      }
+      if (!row->par->GetLabelString().empty()) {
+           x += labelfont.signedStringWidth(layout->labelindent);
+           x += labelfont.stringWidth(row->par->GetLabelString());
+           x += labelfont.stringWidth(layout->labelsep);
+      }
+      break;
+    case MARGIN_MANUAL:
+      x += labelfont.signedStringWidth(layout->labelindent);
+      if (row->pos >= BeginningOfMainBody(row->par)) {
+        if (!row->par->GetLabelWidthString().empty()) {
+           x += labelfont.stringWidth(row->par->GetLabelWidthString());
+           x += labelfont.stringWidth(layout->labelsep);
+        }
+      }
+      break;
+    case MARGIN_STATIC:
+      x += ( lyxstyle.TextClass(parameters->textclass)->defaultfont.signedStringWidth(layout->leftmargin) * 4
+            / (row->par->GetDepth() + 4));
+      break;
+    case MARGIN_FIRST_DYNAMIC:
+      if (layout->labeltype == LABEL_MANUAL) {
+        if (row->pos >= BeginningOfMainBody(row->par)) {
+           x += labelfont.signedStringWidth(layout->leftmargin);
+        } else {
+           x += labelfont.signedStringWidth(layout->labelindent);
+        }
+      } else {
+        if (row->pos
+            // Special case to fix problems with theorems (JMarc)
+            || (layout->labeltype == LABEL_STATIC
+                && layout->latextype == LATEX_ENVIRONMENT
+                && ! row->par->IsFirstInSequence())) {
+                x += labelfont.signedStringWidth(layout->leftmargin);
+        } else if (layout->labeltype != LABEL_TOP_ENVIRONMENT
+                 && layout->labeltype != LABEL_BIBLIO
+                 && layout->labeltype != LABEL_CENTERED_TOP_ENVIRONMENT) {
+                x += labelfont.signedStringWidth(layout->labelindent);
+                x += labelfont.stringWidth(layout->labelsep);
+                x += labelfont.stringWidth(row->par->GetLabelString());
+        } 
+      }
+      break;
+      
+    case MARGIN_RIGHT_ADDRESS_BOX:
+    {
+      /* ok, a terrible hack. The left margin depends on the widest row
+       * in this paragraph. Do not care about footnotes, they are *NOT*
+       * allowed in the LaTeX realisation of this layout. */ 
+      
+      /* find the first row of this paragraph */ 
+      Row *tmprow = row;
+      while (tmprow->previous && tmprow->previous->par == row->par)
+       tmprow = tmprow->previous;
+      
+      int minfill = tmprow->fill;
+      while (tmprow-> next && tmprow->next->par == row->par) {
+        tmprow = tmprow->next;
+        if (tmprow->fill < minfill)
+          minfill = tmprow->fill;
+      }
+      
+      x += lyxstyle.TextClass(parameters->textclass)->defaultfont.signedStringWidth(layout->leftmargin);
+      x += minfill;
+    }
+      break;
+   }
+   if (row->par->pextra_type == PEXTRA_INDENT) {
+       if (!row->par->pextra_widthp.empty()) {
+           x += paperwidth * atoi(row->par->pextra_widthp.c_str()) / 100;
+       } else if (!row->par->pextra_width.empty()) {
+           int xx = VSpace(row->par->pextra_width).inPixels();
+
+           if (xx > paperwidth)
+               xx = paperwidth * 80 / 100;
+           x += xx;
+       } else { // should not happen
+           LyXFont font(LyXFont::ALL_SANE);
+           x += font.stringWidth("XXXXXX");
+       }
+   }
+   
+   int align;
+   if (row->par->FirstPhysicalPar()->align == LYX_ALIGN_LAYOUT)
+     align = layout->align;
+   else
+     align = row->par->FirstPhysicalPar()->align;
+   
+   /* set the correct parindent */
+   if (row->pos == 0) {
+       if ((layout->labeltype == LABEL_NO_LABEL 
+           || layout->labeltype == LABEL_TOP_ENVIRONMENT 
+           || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT
+           || (layout->labeltype == LABEL_STATIC
+               && layout->latextype == LATEX_ENVIRONMENT
+               && ! row->par->IsFirstInSequence()))
+          && row->par == row->par->FirstPhysicalPar()
+          && align == LYX_ALIGN_BLOCK
+          && !row->par->noindent
+          && (row->par->layout ||
+              parameters->paragraph_separation == LYX_PARSEP_INDENT))
+        x += lyxstyle.TextClass(parameters->textclass)->defaultfont.stringWidth(parindent);
+       else 
+        if (layout->labeltype==LABEL_BIBLIO) { // ale970405 Right width for bibitems
+            x += bibitemMaxWidth(lyxstyle.TextClass(parameters->textclass)->defaultfont);
+        }
+   }
+
+   return x;
+}
+    
+   
+int LyXText::RightMargin(Row *row)
+{
+   int  x;
+   LyXLayout* layout;
+   
+   LyXParagraph *newpar;
+   Row dummyrow;
+   layout = lyxstyle.Style(parameters->textclass, row->par->GetLayout());
+
+   x = LYX_PAPER_MARGIN;
+
+   x += lyxstyle.TextClass(parameters->textclass)->
+     defaultfont.signedStringWidth(lyxstyle.TextClass(parameters->textclass)->rightmargin);
+   if (row->par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)  {
+     x += LYX_PAPER_MARGIN/2;
+   }
+
+    /* this is the way, LyX handles the LaTeX-Environments.
+    * I have had this idea very late, so it seems to be a
+    * later added hack and this is true */ 
+   if (row->par->GetDepth()) {
+      /* find the next level paragraph */ 
+      
+      newpar = row->par;
+      
+      do {
+               newpar = newpar->FirstPhysicalPar()->Previous();
+               if (newpar) 
+                       newpar = newpar->FirstPhysicalPar();
+      } while (newpar && newpar->GetDepth() >= row->par->GetDepth()
+              && newpar->footnoteflag == row->par->footnoteflag);
+      
+      /* make a corresponding row. Needed to call LeftMargin() */
+
+      /* check wether it is a sufficent paragraph */ 
+      if (newpar && newpar->footnoteflag == row->par->footnoteflag
+         && lyxstyle.Style(parameters->textclass,
+                           newpar->GetLayout())->isEnvironment()) {
+            dummyrow.par = newpar;
+            dummyrow.pos = 0;
+            x = RightMargin(&dummyrow);
+         }
+      else {
+        /* this is no longer an error, because this function is used
+         * to clear impossible depths after changing a layout. Since there
+         * is always a redo, LeftMargin() is always called */ 
+        
+        /* printf("LYX_ERROR (text, LeftMargin()) impossible depth \n");*/ 
+        row->par->FirstPhysicalPar()->depth = 0;
+      }
+   }
+
+   //fprintf(stderr,"rightmargin: %s\n", layout->rightmargin.c_str());
+   //fflush(stderr);
+   x += (lyxstyle.TextClass(parameters->textclass)->defaultfont.signedStringWidth(layout->rightmargin) * 4
+        / (row->par->GetDepth() + 4));
+   return x;
+   
+}
+
+
+int LyXText::LabelEnd (Row *row)
+{
+   if (lyxstyle.Style(parameters->textclass, row->par->GetLayout())->margintype == MARGIN_MANUAL) {
+      Row tmprow;
+      tmprow = *row;
+      tmprow.pos = row->par->Last();
+      return LeftMargin(&tmprow);      /* just the beginning 
+                                       * of the main body */
+   }
+   else
+     return 0;                        /* LabelEnd is only needed, if the  
+                                       * layout fills a flushleft
+                                       * label. */
+}
+
+
+/* table stuff -- begin*/ 
+int LyXText::NumberOfCell(LyXParagraph *par, int pos)
+{
+   int cell = 0;
+   int tmp_pos = 0;
+   while (tmp_pos < pos) {
+      if (par->IsNewline(tmp_pos))
+        cell++;
+      tmp_pos++;
+   }
+   return cell;
+}
+
+
+int LyXText::WidthOfCell(LyXParagraph *par, int &pos)
+{
+   int w = 0;
+   while (pos < par->Last() && !par->IsNewline(pos)) {
+      w += SingleWidth(par, pos);
+      pos++;
+   }
+   if (par->IsNewline(pos))
+      pos++;
+   return w;
+}
+
+
+char LyXText::HitInTable(Row* row, int x)
+{
+  float tmpx;
+  float fill_separator, fill_hfill, fill_label_hfill;
+  if (!row->par->table)
+    return 0;
+  PrepareToPrint(row, tmpx, fill_separator, fill_hfill, fill_label_hfill);
+  return (x > tmpx && x < tmpx + row->par->table->WidthOfTable());
+}
+
+
+bool LyXText::MouseHitInTable(int x, long y)
+{
+       Row *row = GetRowNearY(y);
+        return HitInTable(row, x);
+}
+
+
+/* table stuff -- end*/
+
+
+/* get the next breakpoint in a given paragraph */
+int LyXText::NextBreakPoint(Row* row, int width)
+{
+       int x = 0;
+       int last_separator = -1; /* position of the last possible breakpoint 
+                                 * -1 isn't a suitable value, but a flag */
+       int i = 0;
+       int left_margin;
+       
+       LyXParagraph *par = row->par;
+       int pos = row->pos;
+       
+       /* table stuff -- begin*/ 
+       if (par->table) {
+               while (pos<par->last 
+                      && (!par->IsNewline(pos) 
+                          || !par->table->IsFirstCell(NumberOfCell(par, pos+1)))) {
+                       if (par->GetChar(pos) == LYX_META_INSET &&
+                           par->GetInset(pos) && par->GetInset(pos)->Display()){
+                               par->GetInset(pos)->SetDisplay(false);
+                       }
+                       pos++;
+               }
+               return pos;
+       }
+       /* table stuff -- end*/ 
+       
+       left_margin = LabelEnd(row);
+       width -= RightMargin(row);
+       int main_body = BeginningOfMainBody(par);
+       LyXLayout* layout = lyxstyle.Style(parameters->textclass, par->GetLayout());
+       i = pos;
+       char c;
+       
+       if (layout->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
+               /* special code for right address boxes, only newlines count */
+               while (i < par->Last()) {
+                       if (par->IsNewline(i)) {
+                               last_separator = i;
+                               i = par->Last() - 1;/* this means break  */
+                               x = width;
+                       } else if (par->GetChar(i) == LYX_META_INSET &&
+                                  par->GetInset(i) && par->GetInset(i)->Display()){
+                               par->GetInset(i)->SetDisplay(false);
+                       }
+                       i++;
+               }
+       } else {
+               // Last position is an invariant
+               int const last = par->Last();
+               /* this is the usual handling */ 
+               x = LeftMargin(row);
+               while (x < width && i < last) {
+                       c = par->GetChar(i);
+                       if (IsNewlineChar(c)) {
+                               last_separator = i;
+                               x = width;                     /* this means break  */
+                       } else if (c == LYX_META_INSET &&
+                                  par->GetInset(i) && par->GetInset(i)->Display()){
+                               /* check wether a Display() inset is valid here .
+                                  if not, change it to non-display*/ 
+                               if (layout->isCommand()
+                                   || (layout->labeltype == LABEL_MANUAL
+                                       && i < BeginningOfMainBody(par))){
+                                       /* display istn't allowd */ 
+                                       par->GetInset(i)->SetDisplay(false);
+                                       x += SingleWidth(par, i, c);
+                               } else {
+                                       /* inset is display. So break the line here */ 
+                                       if (i==pos){
+                                               if (pos < last-1) {
+                                                       last_separator = i;
+                                                       if (IsLineSeparatorChar(par->GetChar(i+1)))
+                                                               last_separator++;
+                                               } else
+                                                       last_separator = last; // to avoid extra rows
+                                       } else
+                                               last_separator = i - 1;
+                                       x = width;                     /* this means break  */
+                               }
+                       } else  {
+                               if (IsLineSeparatorChar(c))
+                                       last_separator = i;
+                               x += SingleWidth(par, i, c);
+                       }
+                       i++;
+                       if (i == main_body) {
+                               x += GetFont(par, -2).stringWidth(layout->labelsep);
+                               if (par->IsLineSeparator(i - 1))
+                                       x-= SingleWidth(par, i - 1);
+                               if (x < left_margin)
+                                       x = left_margin;
+                       }
+               }
+               /* end of paragraph is always a suitable separator */
+               if (i == last && x < width)
+                       last_separator = i;
+       }
+       
+       /* well, if last_separator is still 0, the line isn't breakable. 
+        * don't care and cut simply at the end */
+       if (last_separator < 0) {
+               last_separator = i;
+       }
+       
+       /* manual labels cannot be broken in LaTeX, do not care  */
+       if (main_body && last_separator < main_body)
+               last_separator = main_body - 1;
+       
+       return last_separator;
+}
+
+
+/* returns the minimum space a row needs on the screen in pixel */
+int LyXText::Fill(Row *row, int paperwidth)
+{
+   int w,i, last, fill, left_margin;
+   /* get the pure distance */
+   last = RowLast(row);
+   
+   /* table stuff -- begin*/
+   if (row->par->table) {
+      /* for tables FILL does calculate the widthes of each cell in 
+       * the row */ 
+      int pos = row->pos;
+      int cell = NumberOfCell(row->par, pos);
+      w = 0;
+      do {
+        row->par->table->SetWidthOfCell(cell, WidthOfCell(row->par, pos));
+        cell++;
+      } while (pos <= last && !row->par->table->IsFirstCell(cell));
+      /* don't forget the very last table cell without characters */
+      if (cell == row->par->table->GetNumberOfCells()-1)
+          row->par->table->SetWidthOfCell(cell, WidthOfCell(row->par, pos));
+      
+      return 0; /* width of table cannot be returned since
+                * we cannot guarantee its correct value at
+                * this point. */ 
+   }
+   /* table stuff -- end*/ 
+
+   left_margin = LabelEnd(row);
+
+     /* if the row ends with newline, this newline will not be relevant */ 
+     if (last >= 0 && row->par->IsNewline(last))
+       last--;
+     
+     /* if the row ends with a space, this space will not be relevant */ 
+     if (last >= 0 && row->par->IsLineSeparator(last))
+       last--;
+
+   /* special handling of the right address boxes */ 
+   if (lyxstyle.Style(parameters->textclass, row->par->GetLayout())->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
+      int tmpfill = row->fill;
+      row->fill = 0;                  /* the minfill in MarginLeft()  */
+      w = LeftMargin(row);
+      row->fill = tmpfill;
+      
+      /* the old way, impossible when using environments: */ 
+      /*  w = LyXStringWidth(lyxstyle.Style(parameters->textclass, row->par->GetLayout())->font, */ 
+      /*                        lyxstyle.Style(parameters->textclass, row->par->GetLayout())->leftmargin); */
+   }
+   else
+     w = LeftMargin(row);
+   
+   int main_body = BeginningOfMainBody(row->par);
+   LyXLayout *layout = lyxstyle.Style(parameters->textclass,
+                                     row->par->GetLayout());
+   i = row->pos;
+   while (i<= last) {
+      w += SingleWidth(row->par, i);
+      i++;
+      if (i == main_body) {
+        w += GetFont(row->par, -2).stringWidth(layout->labelsep);
+        if (row->par->IsLineSeparator(i - 1))
+          w-= SingleWidth(row->par, i - 1);
+        if (w < left_margin)
+          w = left_margin;
+      }
+   }
+   
+   fill = paperwidth - w - RightMargin(row);
+   return fill;
+}
+
+
+/* returns the minimum space a manual label needs on the screen in pixel */ 
+int LyXText::LabelFill(Row *row)
+{
+   int w,i, last;
+   int fill=0;
+   
+   last = BeginningOfMainBody(row->par) - 1;
+   /* -1 because a label ends either with a space that is in the label, 
+    * or with the beginning of a footnote that is outside the label. */ 
+
+   // I don't understand this code in depth, but sometimes "last" is less than
+   // 0 and this causes a crash. This fix seems to work correctly, but I
+   // bet the real error is elsewhere.  The bug is triggered when you have an 
+   // open footnote in a paragraph environment with a manual label. (Asger)
+   if (last<0) last = 0;
+
+   if (row->par->IsLineSeparator(last))    /* a sepearator at this end 
+                                       * does not count */
+     last--;
+   
+   w = 0;
+   i = row->pos;
+   while (i<= last) {
+      w += SingleWidth(row->par, i);
+      i++;
+   }
+   
+   if (!row->par->labelwidthstring.empty()) {
+      fill = GetFont(row->par, -2).stringWidth(row->par->labelwidthstring) - w;
+   }
+   
+   if (fill < 0)
+     fill = 0;
+   
+   return fill;
+}
+
+
+/* returns the number of separators in the specified row. The separator 
+* on the very last column doesnt count */ 
+int LyXText::NumberOfSeparators(Row *row)
+{
+   int n,p,last;
+   
+   last = RowLast(row);
+   n = 0;
+   p = row->pos;
+   int main_body = BeginningOfMainBody(row->par);
+   if (p < main_body)
+     p = main_body;
+   for (; p < last; p++) {
+      if (row->par->IsSeparator(p)) {
+        n++;
+      }
+   }
+   return n;
+}
+
+
+/* returns the number of hfills in the specified row. The LyX-Hfill is
+* a LaTeX \hfill so that the hfills at the beginning and at the end were 
+* ignored. This is *MUCH* more usefull than not to ignore!  */
+int LyXText::NumberOfHfills(Row *row)
+{
+   int n,p,last, first;
+   
+   last = RowLast(row);
+   first = row->pos;
+   if (first) {                               /* hfill *DO* count at the beginning 
+                                       * of paragraphs! */
+     while(first <= last && row->par->IsHfill(first))
+       first++;
+   }
+
+   n = 0;
+   int main_body = BeginningOfMainBody(row->par);
+   if (first < main_body)
+     first = main_body;
+   for (p = first; p <= last; p++) {    /* last, because the end is ignored!  */
+      if (row->par->IsHfill(p)) {
+        n++;
+      }
+   }
+   return n;
+}
+
+
+/* like NumberOfHfills, but only those in the manual label! */ 
+int LyXText::NumberOfLabelHfills(Row *row)
+{
+   int n,p,last, first;
+   
+   last = RowLast(row);
+   first = row->pos;
+   if (first) {                               /* hfill *DO* count at the beginning 
+                                       * of paragraphs! */
+      while(first < last && row->par->IsHfill(first))
+       first++;
+   }
+
+   n = 0;
+   int main_body = BeginningOfMainBody(row->par);
+   
+   if (last > main_body)
+     last = main_body;
+   
+   for (p = first; p < last; p++) {    /* last, because the end is ignored!  */
+      if (row->par->IsHfill(p)) {
+        n++;
+      }
+   }
+   return n;
+}
+
+
+/* returns true, if a expansion is needed.
+ * Rules are given by LaTeX */ 
+bool LyXText::HfillExpansion(Row *row_ptr, int pos)
+{
+   /* by the way, is it a hfill? */ 
+   if (!row_ptr->par->IsHfill(pos))
+     return false;
+   
+   /* at the end of a row it does not count */ 
+   if (pos >= RowLast(row_ptr))
+     return false;
+   
+   /* at the beginning of a row it does not count, if it is not 
+    * the first row of a paragaph */ 
+   if (!row_ptr->pos)
+     return true;
+   
+   /* in some labels  it does not count */ 
+   if ( lyxstyle.Style(parameters->textclass, row_ptr->par->GetLayout())->margintype != MARGIN_MANUAL &&
+       pos < BeginningOfMainBody(row_ptr->par))
+     return false; 
+   
+   /* if there is anything between the first char of the row and
+    * the sepcified position that is not a newline and not a hfill,
+    * the hfill will count, otherwise not */ 
+   
+   int i = row_ptr->pos;
+   while (i < pos && (row_ptr->par->IsNewline(i)
+                     || row_ptr->par->IsHfill(i)))
+     i++;
+   
+   return (i != pos);
+}
+
+
+void LyXText::SetHeightOfRow(Row *row_ptr)
+{
+    /* get the maximum ascent and the maximum descent */
+   int asc, maxasc, desc, maxdesc, pos_end, pos, labeladdon;
+   float layoutasc = 0;
+   float layoutdesc = 0;
+   float tmptop = 0;
+   LyXParagraph *par, *firstpar;
+   LyXFont tmpfont;
+   Inset *tmpinset;
+
+   /* this must not happen before the currentrow for clear reasons.
+      so the trick is just to set the current row onto this row */
+   long unused_y;
+   GetRow(row_ptr->par, row_ptr->pos, unused_y);
+
+   /* ok , let us initialize the maxasc and maxdesc value. 
+    * This depends in LaTeX of the font of the last character
+    * in the paragraph. The hack below is necessary because
+    * of the possibility of open footnotes */
+
+   /* Correction: only the fontsize count. The other properties
+      are taken from the layoutfont. Nicer on the screen :) */
+   
+   par = row_ptr->par->LastPhysicalPar();
+   firstpar = row_ptr->par->FirstPhysicalPar();
+   
+   LyXLayout *layout = lyxstyle.Style(parameters->textclass, firstpar->GetLayout());
+   
+   LyXFont font = GetFont(par, par->Last()-1);
+   LyXFont::FONT_SIZE size = font.size();
+   font = GetFont(par, -1);
+   font.setSize(size);
+
+   LyXFont labelfont = GetFont(par, -2);
+
+   maxasc = int(font.maxAscent() *
+                  layout->spacing.getValue() *
+                  parameters->spacing.getValue());
+   maxdesc = int(font.maxDescent() *
+                   layout->spacing.getValue() *
+                   parameters->spacing.getValue());
+
+   pos_end = RowLast(row_ptr);
+   
+   labeladdon = 0;
+
+   // Check if any insets are larger
+   for (pos = row_ptr->pos; pos <= pos_end; pos++) {
+      if (row_ptr->par->GetChar(pos) == LYX_META_INSET) {
+        tmpfont = GetFont(row_ptr->par, pos);
+         tmpinset = row_ptr->par->GetInset(pos);
+         if (tmpinset) {
+            asc = tmpinset->Ascent(tmpfont);
+            desc = tmpinset->Descent(tmpfont);
+           if (asc > maxasc) 
+             maxasc = asc;
+           if (desc > maxdesc)
+             maxdesc = desc;
+        }
+      }
+   }
+
+   // Check if any custom fonts are larger (Asger)
+   // This is not completely correct, but we can live with the small,
+   // cosmetic error for now.
+   LyXFont::FONT_SIZE maxsize = row_ptr->par->HighestFontInRange(row_ptr->pos, pos_end);
+   if (maxsize > font.size()) {
+       font.setSize(maxsize);
+
+       asc = font.maxAscent();
+       desc = font.maxDescent();
+       if (asc > maxasc) 
+               maxasc = asc;
+       if (desc > maxdesc)
+               maxdesc = desc;
+   }
+
+   /* table stuff -- begin*/
+   if (row_ptr->par->table){
+     // stretch the rows a bit
+      maxasc += 1;
+      maxdesc +=1;
+   }
+   /* table stuff -- end*/
+
+   // This is nicer with box insets:
+   maxasc++;
+   maxdesc++;
+
+   row_ptr->ascent_of_text = maxasc;
+   
+   /* is it a top line? */ 
+   if (row_ptr->pos == 0
+       && row_ptr->par == firstpar) {
+      
+      /* some parksips VERY EASY IMPLEMENTATION */ 
+      if (parameters->paragraph_separation == LYX_PARSEP_SKIP) {
+        if (layout->isParagraph()
+            && firstpar->GetDepth() == 0
+            && firstpar->Previous())
+           maxasc += parameters->getDefSkip().inPixels();
+        else if (firstpar->Previous()
+                 && lyxstyle.Style(parameters->textclass,
+                          firstpar->Previous()->GetLayout())->isParagraph()
+                 && firstpar->Previous()->GetDepth() == 0)
+          // is it right to use defskip here too? (AS)
+          maxasc += parameters->getDefSkip().inPixels();
+      }
+      
+      /* the paper margins */ 
+      if (!row_ptr->par->previous)
+        maxasc += LYX_PAPER_MARGIN;
+      
+      /* add the vertical spaces, that the user added */
+      if (firstpar->added_space_top.kind() != VSpace::NONE)
+        maxasc += int(firstpar->added_space_top.inPixels());
+      
+      /* do not forget the DTP-lines! 
+       * there height depends on the font of the nearest character */
+      if (firstpar->line_top)
+        maxasc += 2 * GetFont(firstpar, 0).ascent('x');
+      
+      /* and now the pagebreaks */ 
+      if (firstpar->pagebreak_top)
+        maxasc += 3 * DefaultHeight();
+      
+      /*  this is special code for the chapter, since the label of this
+       * layout is printed in an extra row */ 
+      if (layout->labeltype == LABEL_COUNTER_CHAPTER
+         && parameters->secnumdepth>=0) {
+             labeladdon = int(labelfont.maxDescent() *
+                                 layout->spacing.getValue() *
+                                 parameters->spacing.getValue())
+                     + int(labelfont.maxAscent() *
+                              layout->spacing.getValue() *
+                              parameters->spacing.getValue());
+      }
+      
+      /* special code for the top label */ 
+      if ((layout->labeltype == LABEL_TOP_ENVIRONMENT
+          || layout->labeltype == LABEL_BIBLIO
+          || layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT)
+         && row_ptr->par->IsFirstInSequence()
+         && !row_ptr->par->GetLabelString().empty()) {
+        labeladdon = int(
+                (labelfont.maxAscent() *
+                 layout->spacing.getValue() *
+                 parameters->spacing.getValue())
+                +(labelfont.maxDescent() *
+                  layout->spacing.getValue() *
+                  parameters->spacing.getValue())
+                + layout->topsep * DefaultHeight()
+                + layout->labelbottomsep *  DefaultHeight());
+      }
+   
+      /* and now the layout spaces, for example before and after a section, 
+       * or between the items of a itemize or enumerate environment */ 
+      
+      if (!firstpar->pagebreak_top) {
+        LyXParagraph *prev = row_ptr->par->Previous();
+        if (prev)
+           prev = row_ptr->par->DepthHook(row_ptr->par->GetDepth());
+        if (prev && prev->GetLayout() == firstpar->GetLayout()
+            && prev->GetDepth() == firstpar->GetDepth()
+            && prev->GetLabelWidthString() == firstpar->GetLabelWidthString())
+          {
+             layoutasc = (layout->itemsep * DefaultHeight());
+          }
+        else if (row_ptr->previous) {
+           tmptop = layout->topsep;
+           
+           if (row_ptr->previous->par->GetDepth() >= row_ptr->par->GetDepth())
+              tmptop-=lyxstyle.Style(parameters->textclass, row_ptr->previous->par->GetLayout())->bottomsep;
+           
+           if (tmptop > 0)
+              layoutasc = (tmptop * DefaultHeight());
+        }
+        else if (row_ptr->par->line_top){
+           tmptop = layout->topsep;
+           
+           if (tmptop > 0)
+              layoutasc = (tmptop * DefaultHeight());
+        }
+        
+        prev = row_ptr->par->DepthHook(row_ptr->par->GetDepth()-1);
+        if (prev)  {
+           maxasc += int(lyxstyle.Style(parameters->textclass,
+                                        prev->GetLayout())->parsep * DefaultHeight());
+        }
+        else {
+               if (firstpar->Previous()
+                   && firstpar->Previous()->GetDepth() == 0
+                   && firstpar->Previous()->GetLayout() != firstpar->GetLayout()) {
+                  /* avoid parsep */ 
+               }
+           else if (firstpar->Previous()){
+              maxasc += int(layout->parsep * DefaultHeight());
+           }
+        }
+      }
+   }
+   
+   /* is it a bottom line? */ 
+   if (row_ptr->par->ParFromPos(RowLast(row_ptr) + 1) == par
+       && (!row_ptr->next || row_ptr->next->par != row_ptr->par)) {     
+         
+         /* the paper margins */ 
+         if (!par->next)
+           maxdesc += LYX_PAPER_MARGIN;
+       
+         /* add the vertical spaces, that the user added */
+         if (firstpar->added_space_bottom.kind() != VSpace::NONE)
+           maxdesc += int(firstpar->added_space_bottom.inPixels());
+         
+         /* do not forget the DTP-lines! 
+          * there height depends on the font of the nearest character */
+         if (firstpar->line_bottom)
+           maxdesc += 2 * (GetFont(par, par->Last()-1).ascent('x'));
+         
+         /* and now the pagebreaks */
+         if (firstpar->pagebreak_bottom)
+           maxdesc += 3 * DefaultHeight();
+         
+         /* and now the layout spaces, for example before and after a section, 
+          * or between the items of a itemize or enumerate environment */
+         if (!firstpar->pagebreak_bottom && row_ptr->par->Next()) {
+            LyXParagraph *nextpar = row_ptr->par->Next();
+            LyXParagraph *comparepar = row_ptr->par;
+            float usual = 0;
+            float  unusual = 0;
+            
+            if (comparepar->GetDepth() > nextpar->GetDepth()) {
+               usual = (lyxstyle.Style(parameters->textclass, comparepar->GetLayout())->bottomsep * DefaultHeight());
+               comparepar = comparepar->DepthHook(nextpar->GetDepth());
+               if (comparepar->GetLayout()!=nextpar->GetLayout()
+                   || nextpar->GetLabelWidthString() != 
+                       comparepar->GetLabelWidthString())
+                 unusual = (lyxstyle.Style(parameters->textclass, comparepar->GetLayout())->bottomsep * DefaultHeight());
+               
+               if (unusual > usual)
+                 layoutdesc = unusual;
+               else
+                 layoutdesc = usual;
+            }
+            else if (comparepar->GetDepth() ==  nextpar->GetDepth()) {
+               
+               if (comparepar->GetLayout()!= nextpar->GetLayout()
+                   || nextpar->GetLabelWidthString() !=
+                       comparepar->GetLabelWidthString())
+                 layoutdesc = int(lyxstyle.Style(parameters->textclass, comparepar->GetLayout())->bottomsep * DefaultHeight());
+            }
+         }
+       }
+   
+   /* incalculate the layout spaces */ 
+   maxasc += int(layoutasc * 2 / (2 + firstpar->GetDepth()));
+   maxdesc += int(layoutdesc * 2 / (2 + firstpar->GetDepth()));
+
+   /* table stuff -- begin*/
+   if (row_ptr->par->table){
+      maxasc += row_ptr->par->table->
+       AdditionalHeight(NumberOfCell(row_ptr->par, row_ptr->pos));
+   }
+   /* table stuff -- end*/
+   
+   /* calculate the new height of the text */ 
+   height -= row_ptr->height;
+   
+   row_ptr->height=maxasc+maxdesc+labeladdon;
+   row_ptr->baseline=maxasc+labeladdon;
+   
+   height += row_ptr->height;
+}
+
+
+/* Appends the implicit specified paragraph behind the specified row,
+ * start at the implicit given position */
+void LyXText::AppendParagraph(Row *row)
+{
+   int z;
+   Row *tmprow;
+   bool not_ready = true;
+   
+   // Get the width of the row
+   z = row->pos;
+
+   // The last character position of a paragraph is an invariant so we can 
+   // safely get it here. (Asger)
+   int lastposition = row->par->Last();
+
+   do {
+      // Get the next breakpoint
+      z = NextBreakPoint(row, paperwidth);
+      
+      tmprow = row;
+
+      // Insert the new row
+      if (z < lastposition) {
+        z++;
+        InsertRow(row, row->par, z);
+        row = row->next;
+
+        row->height = 0;
+      } else
+        not_ready = false;
+      
+      // Set the dimensions of the row
+      tmprow->fill = Fill(tmprow, paperwidth);
+      SetHeightOfRow(tmprow);
+
+   } while (not_ready);
+}
+
+
+void LyXText::BreakAgain(Row *row)
+{
+   int z;
+   char not_ready;
+   z = row->pos;
+   Row *tmprow, *tmprow2;
+   
+   not_ready = 1;
+   
+   do  {
+      /* get the next breakpoint */
+      z = NextBreakPoint(row, paperwidth);
+      
+      tmprow = row;
+      
+      if (z < row->par->Last() ) {
+        if (!row->next || (row->next && row->next->par != row->par)) {
+           /* insert a new row */ 
+           z++;
+           InsertRow(row, row->par, z);
+           row = row->next;
+           row->height = 0;
+        }
+        else  {
+           row=row->next;
+           z++;
+           if (row->pos == z)
+             not_ready = 0;           /* the rest will not change  */
+           else {
+              row->pos = z;
+           }
+        }
+      }
+      else {
+        /* if there are some rows too much, delete them */
+        /* only if you broke the whole paragraph! */ 
+        tmprow2 = row;
+        while (tmprow2->next && tmprow2->next->par == row->par) {
+           tmprow2 = tmprow2->next;
+        }
+        while (tmprow2 != row) {
+           tmprow2 = tmprow2->previous;
+           RemoveRow(tmprow2->next);
+        }
+        not_ready = 0;
+      }
+       
+      /* set the dimensions of the row */ 
+      tmprow->fill = Fill(tmprow, paperwidth);
+      SetHeightOfRow(tmprow);
+   } while (not_ready);
+}
+
+
+/* this is just a little changed version of break again */ 
+void LyXText::BreakAgainOneRow(Row *row)
+{
+   int z;
+   char not_ready;
+   z = row->pos;
+   Row *tmprow, *tmprow2;
+   
+   not_ready = 1;
+   
+   /* get the next breakpoint */
+   z = NextBreakPoint(row, paperwidth);
+   
+   tmprow = row;
+   
+   if (z < row->par->Last() ) {
+      if (!row->next || (row->next && row->next->par != row->par)) {
+        /* insert a new row */ 
+        z++;
+        InsertRow(row, row->par, z);
+        row = row->next;
+        row->height = 0;
+      }
+      else  {
+        row=row->next;
+        z++;
+        if (row->pos == z)
+          not_ready = 0;              /* the rest will not change  */
+        else {
+           row->pos = z;
+        }
+      }
+   }
+   else {
+      /* if there are some rows too much, delete them */
+      /* only if you broke the whole paragraph! */ 
+      tmprow2 = row;
+      while (tmprow2->next && tmprow2->next->par == row->par) {
+        tmprow2 = tmprow2->next;
+      }
+      while (tmprow2 != row) {
+        tmprow2 = tmprow2->previous;
+        RemoveRow(tmprow2->next);
+      }
+      not_ready = 0;
+   }
+   
+   /* set the dimensions of the row */ 
+   tmprow->fill = Fill(tmprow, paperwidth);
+   SetHeightOfRow(tmprow);
+}
+
+
+void LyXText::BreakParagraph(char keep_layout)
+{
+   LyXLayout *layout = lyxstyle.Style(parameters->textclass,
+                                     cursor.par->GetLayout());
+   
+   /* table stuff -- begin*/
+   if (cursor.par->table) {
+       // breaking of tables is only allowed at the beginning or the end */
+       if (cursor.pos && cursor.pos < cursor.par->last &&
+           !cursor.par->table->ShouldBeVeryLastCell(NumberOfCell(cursor.par, cursor.pos)))
+           return; /* no breaking of tables allowed */ 
+   }
+   /* table stuff -- end*/
+
+   /* this is only allowed, if the current paragraph is not empty or caption*/ 
+   if ((cursor.par->Last() <= 0 && !cursor.par->IsDummy())
+       && 
+       layout->labeltype!=LABEL_SENSITIVE)
+     return;
+
+   SetUndo(Undo::INSERT, 
+          cursor.par->ParFromPos(cursor.pos)->previous, 
+          cursor.par->ParFromPos(cursor.pos)->next); 
+
+   /* table stuff -- begin*/
+   if (cursor.par->table) {
+       int cell = NumberOfCell(cursor.par, cursor.pos);
+       if (cursor.par->table->ShouldBeVeryLastCell(cell))
+           SetCursor(cursor.par,cursor.par->last);
+   }
+   /* table stuff -- end*/
+   /* please break alway behind a space */ 
+   if (cursor.pos < cursor.par->Last()
+       && cursor.par->IsLineSeparator(cursor.pos))
+     cursor.pos++;
+   
+   /* break the paragraph */
+   if (keep_layout)
+     keep_layout = 2;
+   else        
+     keep_layout = layout->isEnvironment();
+   cursor.par->BreakParagraph(cursor.pos, keep_layout);
+
+   /* table stuff -- begin*/
+   if (cursor.par->table){
+     // the table should stay with the contents
+     if (!cursor.pos){
+       cursor.par->Next()->table = cursor.par->table;
+       cursor.par->table = NULL;
+     }
+   }
+   /* table stuff -- end*/
+
+   /* well this is the caption hack since one caption is really enough */
+   if (layout->labeltype == LABEL_SENSITIVE){
+     if (!cursor.pos)
+       cursor.par->SetLayout(0); /* set the new paragraph to standard-layout */
+     else
+       cursor.par->Next()->SetLayout(0); /* set the new paragraph to standard-layout */
+        
+   }
+   
+   /* if the cursor is at the beginning of a row without prior newline, 
+    *  move one row up! 
+    * This touches only the screen-update. Otherwise we would may have
+    * an empty row on the screen */
+   if (cursor.pos && !cursor.row->par->IsNewline(cursor.row->pos -1) &&
+       cursor.row->pos == cursor.pos) {
+     CursorLeft();
+   } 
+   
+   status = LyXText::NEED_MORE_REFRESH;
+   refresh_row = cursor.row;
+   refresh_y = cursor.y - cursor.row->baseline;
+   
+   /* Do not forget the special right address boxes */
+   if (layout->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
+      while (refresh_row->previous &&
+            refresh_row->previous->par == refresh_row->par) {
+               refresh_row = refresh_row->previous;
+               refresh_y -= refresh_row->height;
+            }
+   }
+   RemoveParagraph(cursor.row);
+   
+   /* set the dimensions of the cursor row */
+   cursor.row->fill = Fill(cursor.row, paperwidth);
+
+   SetHeightOfRow(cursor.row);
+   
+   while (!cursor.par->Next()->table && cursor.par->Next()->Last()
+         && cursor.par->Next()->IsNewline(0))
+     cursor.par->Next()->Erase(0);
+   
+   InsertParagraph(cursor.par->Next(), cursor.row);
+
+   UpdateCounters(cursor.row->previous);
+   
+   /* this check is necessary. Otherwise the new empty paragraph will
+    * be deleted automatically. And it is more friendly for the user! */ 
+   if (cursor.pos)
+     SetCursor(cursor.par->Next(), 0);
+   else
+     SetCursor(cursor.par, 0);
+   
+   if (cursor.row->next)
+     BreakAgain(cursor.row->next);
+
+   need_break_row = NULL;
+}
+
+
+void LyXText::OpenFootnote()
+{
+   LyXParagraph *par, *endpar,*tmppar;
+   Row *row;
+   
+   par = cursor.par->ParFromPos(cursor.pos);
+   
+   /* if there is no footnote in this paragraph, just return. */ 
+   if (!par->next
+       || par->next->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE)
+     return;
+   
+   /* ok, move the cursor right before the footnote */ 
+   
+   /* just a little faster than using CursorRight() */
+   for (cursor.pos=0; cursor.par->ParFromPos(cursor.pos)!=par; cursor.pos++);
+   /* now the cursor is at the beginning of the physical par */
+   SetCursor(cursor.par, cursor.pos + cursor.par->ParFromPos(cursor.pos)->last);
+   
+   /* the cursor must be exactly before the footnote */ 
+   par = cursor.par->ParFromPos(cursor.pos);
+   
+   status = LyXText::NEED_MORE_REFRESH;
+   refresh_row = cursor.row;
+   refresh_y = cursor.y - cursor.row->baseline;
+   
+   tmppar = cursor.par;
+   endpar = cursor.par->Next();
+   row = cursor.row;
+   
+   tmppar->OpenFootnote(cursor.pos);
+   RemoveParagraph(row);
+   /* set the dimensions of the cursor row */
+   row->fill = Fill(row, paperwidth);
+   SetHeightOfRow(row);
+   tmppar = tmppar->Next();
+   
+   while (tmppar != endpar) {
+      if (tmppar) {
+        InsertParagraph(tmppar, row);
+        while (row->next && row->next->par == tmppar)
+          row = row->next;
+        tmppar = tmppar->Next();
+      }
+   }
+   SetCursor(par->next, 0);
+   sel_cursor = cursor;
+}
+   
+
+/* table stuff -- begin*/
+
+void LyXText::TableFeatures(int feature, LString val)
+{
+    int
+        actCell;
+    
+    if (!cursor.par->table)
+        return; /* this should never happen */
+  
+    actCell = NumberOfCell(cursor.par, cursor.pos);
+    SetUndo(Undo::FINISH, 
+            cursor.par->ParFromPos(cursor.pos)->previous, 
+            cursor.par->ParFromPos(cursor.pos)->next); 
+
+    switch (feature){
+      case LyXTable::SET_PWIDTH:
+          cursor.par->table->SetPWidth(actCell,val);
+          break;
+      case LyXTable::SET_SPECIAL_COLUMN:
+      case LyXTable::SET_SPECIAL_MULTI:
+          cursor.par->table->SetAlignSpecial(actCell,val,feature);
+          break;
+      default:
+          break;
+    }
+    RedoParagraph();
+}
+
+
+void LyXText::TableFeatures(int feature)
+{
+    int
+        setLines = 0,
+        setAlign = LYX_ALIGN_LEFT,
+        lineSet,
+        actCell;
+    bool
+        what;
+    
+    if (!cursor.par->table)
+        return; /* this should never happen */
+  
+    actCell = NumberOfCell(cursor.par, cursor.pos);
+    SetUndo(Undo::FINISH, 
+            cursor.par->ParFromPos(cursor.pos)->previous, 
+            cursor.par->ParFromPos(cursor.pos)->next); 
+
+    switch (feature){
+      case LyXTable::ALIGN_LEFT:
+          setAlign=LYX_ALIGN_LEFT;
+          break;
+      case LyXTable::ALIGN_RIGHT:
+          setAlign=LYX_ALIGN_RIGHT;
+          break;
+      case LyXTable::ALIGN_CENTER:
+          setAlign=LYX_ALIGN_CENTER;
+          break;
+      default:
+          break;
+    }
+    switch (feature){
+      case LyXTable::APPEND_ROW: {
+         int pos = cursor.pos;
+          /* move to the next row */
+          int cell_org = actCell;
+          int cell = cell_org;
+
+          // if there is a ContRow following this row I have to add
+          // the row after the ContRow's
+          if ((pos < cursor.par->Last()) &&
+              cursor.par->table->RowHasContRow(cell_org)) {
+              while((pos < cursor.par->Last()) &&
+                    !cursor.par->table->IsContRow(cell)) {
+                  while (pos < cursor.par->Last() &&
+                         !cursor.par->IsNewline(pos))
+                      pos++;
+                  if (pos < cursor.par->Last())
+                      pos++;
+                  cell++;
+              }
+              while((pos < cursor.par->Last()) &&
+                    cursor.par->table->IsContRow(cell)) {
+                  while (pos < cursor.par->Last() &&
+                         !cursor.par->IsNewline(pos))
+                      pos++;
+                  if (pos < cursor.par->Last())
+                      pos++;
+                  cell++;
+              }
+              cell_org = --cell;
+              if (pos < cursor.par->Last())
+                  pos--;
+          }
+          while (pos < cursor.par->Last() && 
+                 (cell == cell_org || !cursor.par->table->IsFirstCell(cell))){
+              while (pos < cursor.par->Last() && !cursor.par->IsNewline(pos))
+                  pos++;
+              if (pos < cursor.par->Last())
+                  pos++;
+              cell++;
+          }
+               
+          /* insert the new cells */ 
+          int number = cursor.par->table->NumberOfCellsInRow(cell_org);
+          int i;
+          for (i=0; i<number; i++)
+              cursor.par->InsertChar(pos, LYX_META_NEWLINE);
+               
+          /* append the row into the table */
+          cursor.par->table->AppendRow(cell_org);
+          RedoParagraph();
+          return;
+      }
+      case LyXTable::APPEND_CONT_ROW: {
+          int pos = cursor.pos;
+          /* move to the next row */
+          int cell_org = actCell;
+          int cell = cell_org;
+
+          // if there is already a controw but not for this cell
+          // the AppendContRow sets only the right values but does
+          // not actually add a row
+          if (cursor.par->table->RowHasContRow(cell_org) &&
+              (cursor.par->table->CellHasContRow(cell_org)<0)) {
+              cursor.par->table->AppendContRow(cell_org);
+              RedoParagraph();
+              return;
+          }
+          while (pos < cursor.par->Last() && 
+                 (cell == cell_org
+                  || !cursor.par->table->IsFirstCell(cell))){
+              while (pos < cursor.par->Last() && !cursor.par->IsNewline(pos))
+                  pos++;
+              if (pos < cursor.par->Last())
+                  pos++;
+              cell++;
+          }
+               
+          /* insert the new cells */ 
+          int number = cursor.par->table->NumberOfCellsInRow(cell_org);
+          int i;
+          for (i=0; i<number; i++)
+              cursor.par->InsertChar(pos, LYX_META_NEWLINE);
+               
+          /* append the row into the table */
+          cursor.par->table->AppendContRow(cell_org);
+          RedoParagraph();
+          return;
+      }
+      case LyXTable::APPEND_COLUMN: { 
+          int pos = 0;
+          int cell_org = actCell;
+          int cell = 0;
+          do{
+              if (pos && (cursor.par->IsNewline(pos-1))){
+                  if (cursor.par->table->AppendCellAfterCell(cell_org, cell)){
+                      cursor.par->InsertChar(pos, LYX_META_NEWLINE);
+                      if (pos<=cursor.pos)
+                          cursor.pos++;
+                      pos++;
+                  }
+                  cell++;
+              }
+              pos++;
+          } while (pos<= cursor.par->Last());
+          /* remember that the very last cell doesn't end with a newline.
+             This saves one byte memory per table ;-) */ 
+          if (cursor.par->table->AppendCellAfterCell(cell_org, cell))
+              cursor.par->InsertChar(cursor.par->Last(), LYX_META_NEWLINE);
+               
+          /* append the column into the table */ 
+          cursor.par->table->AppendColumn(cell_org);
+               
+          RedoParagraph();
+          return;
+      }
+      case LyXTable::DELETE_ROW:
+          if (current_view->currentBuffer()->the_locking_inset)
+              UnlockInset(current_view->currentBuffer()->the_locking_inset);
+          RemoveTableRow(&cursor);
+          RedoParagraph();
+          return;
+       
+      case LyXTable::DELETE_COLUMN: {
+          int pos = 0;
+          int cell_org = actCell;
+          int cell = 0;
+          if (current_view->currentBuffer()->the_locking_inset)
+              UnlockInset(current_view->currentBuffer()->the_locking_inset);
+          do {
+              if (!pos || (cursor.par->IsNewline(pos-1))){
+                  if (cursor.par->table->DeleteCellIfColumnIsDeleted(cell, cell_org)){
+                      // delete one cell
+                      while (pos < cursor.par->Last() && !cursor.par->IsNewline(pos))
+                          cursor.par->Erase(pos);
+                      if (pos < cursor.par->Last())
+                          cursor.par->Erase(pos);
+                      else 
+                          cursor.par->Erase(pos - 1); // the missing newline at the end of a table
+                      pos--; // because of pos++ below
+                  }   
+                  cell++;
+              }
+              pos++;
+          } while (pos<= cursor.par->Last());
+               
+          /* delete the column from the table */ 
+          cursor.par->table->DeleteColumn(cell_org);
+               
+          /* set the cursor to the beginning of the table, where else? */ 
+          cursor.pos = 0;
+          RedoParagraph();
+          return;
+      }
+      case LyXTable::TOGGLE_LINE_TOP:
+          lineSet = !cursor.par->table->TopLine(actCell);
+          if (!selection){
+              cursor.par->table->SetTopLine(actCell,lineSet);
+          } else {
+              int i,n=-1,m=-2;
+              for (i=sel_start_cursor.pos; i<=sel_end_cursor.pos; i++){
+                  if ((n=NumberOfCell(sel_start_cursor.par,i)) != m) {
+                      cursor.par->table->SetTopLine(n,lineSet);
+                      m = n;
+                  }
+              }
+          }
+          RedoParagraph();
+          return;
+    
+      case LyXTable::TOGGLE_LINE_BOTTOM:
+          lineSet = !cursor.par->table->BottomLine(actCell);
+          if (!selection){
+              cursor.par->table->SetBottomLine(actCell,lineSet);
+          } else {
+              int i,n=-1,m=-2;
+              for (i=sel_start_cursor.pos; i<=sel_end_cursor.pos; i++){
+                  if ((n=NumberOfCell(sel_start_cursor.par,i)) != m) {
+                      cursor.par->table->SetBottomLine(n,lineSet);
+                      m = n;
+                  }
+              }
+          }
+          RedoParagraph();
+          return;
+               
+      case LyXTable::TOGGLE_LINE_LEFT:
+          lineSet = !cursor.par->table->LeftLine(actCell);
+          if (!selection){
+              cursor.par->table->SetLeftLine(actCell,lineSet);
+          } else {
+              int i,n=-1,m=-2;
+              for (i=sel_start_cursor.pos; i<=sel_end_cursor.pos; i++){
+                  if ((n=NumberOfCell(sel_start_cursor.par,i)) != m) {
+                      cursor.par->table->SetLeftLine(n,lineSet);
+                      m = n;
+                  }
+              }
+          }
+          RedoParagraph();
+          return;
+
+      case LyXTable::TOGGLE_LINE_RIGHT:
+          lineSet = !cursor.par->table->RightLine(actCell);
+          if (!selection){
+              cursor.par->table->SetRightLine(actCell,lineSet);
+          } else {
+              int i,n=-1,m=-2;
+              for (i=sel_start_cursor.pos; i<=sel_end_cursor.pos; i++){
+                  if ((n=NumberOfCell(sel_start_cursor.par,i)) != m) {
+                      cursor.par->table->SetRightLine(n,lineSet);
+                      m = n;
+                  }
+              }
+          }
+          RedoParagraph();
+          return;
+    
+      case LyXTable::ALIGN_LEFT:
+      case LyXTable::ALIGN_RIGHT:
+      case LyXTable::ALIGN_CENTER:
+          if (!selection){
+              cursor.par->table->SetAlignment(actCell,setAlign);
+          } else {
+              int i,n=-1,m=-2;
+              for (i=sel_start_cursor.pos; i<=sel_end_cursor.pos; i++){
+                  if ((n=NumberOfCell(sel_start_cursor.par,i)) != m) {
+                      cursor.par->table->SetAlignment(n,setAlign);
+                      m = n;
+                  }
+              }
+          }
+          RedoParagraph();
+          return;
+               
+      case LyXTable::DELETE_TABLE:
+          SetCursorIntern(cursor.par, 0);
+          delete cursor.par->table;
+          cursor.par->table = NULL;
+          // temporary: Should put table in simple_cut_buffer (with before and after
+          // dummy-paragraph !! 
+          // not necessar anymore with UNDO :)
+          int i;
+          for (i = cursor.par->last-1; i>=0; i--)
+             cursor.par->Erase(i);
+          RedoParagraph();
+          return;
+               
+      case LyXTable::MULTICOLUMN: {
+          int number = 0;
+          // check wether we are completly in a multicol
+          int multicol = cursor.par->table->IsMultiColumn(actCell);
+          if (multicol && selection && sel_start_cursor.row == sel_end_cursor.row){
+             multicol = NumberOfCell(sel_start_cursor.par, sel_start_cursor.pos)
+                  == NumberOfCell(sel_end_cursor.par, sel_end_cursor.pos);
+          }
+
+          if (multicol){
+             int newlines = cursor.par->table->UnsetMultiColumn(actCell);
+             int pos = cursor.pos;
+             while (pos<cursor.par->Last() && !cursor.par->IsNewline(pos))
+                  pos++;
+             for (;newlines;newlines--)
+                  cursor.par->InsertChar(pos, LYX_META_NEWLINE);
+             RedoParagraph();
+             return;
+          }
+          else {
+             // selection must be in one row (or no selection)
+             if (!selection){
+                  cursor.par->table->SetMultiColumn(NumberOfCell(cursor.par,
+                                                                 cursor.pos),
+                                                    1);
+                  RedoParagraph();
+                  return;
+             }
+             else {
+                  if (sel_start_cursor.row == sel_end_cursor.row){
+                      int i;
+                      number = 1;
+                      for (i=sel_start_cursor.pos; i<sel_end_cursor.pos; i++){
+                          if (sel_start_cursor.par->IsNewline(i)){
+                              sel_start_cursor.par->Erase(i);
+                              // check for double-blanks
+                              if ((i && !sel_start_cursor.par->IsLineSeparator(i-1))
+                                  &&
+                                  (i<sel_start_cursor.par->Last() 
+                                   && !sel_start_cursor.par->IsLineSeparator(i)))
+                                  sel_start_cursor.par->InsertChar(i, ' ');
+                              else {
+                                  sel_end_cursor.pos--;
+                                  i--;
+                              }
+                              number++;
+                          }
+                      }
+                      cursor.par->table->
+                         SetMultiColumn(NumberOfCell(sel_start_cursor.par,
+                                                     sel_start_cursor.pos),
+                                        number);
+                      cursor.pos = sel_start_cursor.pos;
+                      RedoParagraph();
+                      return;
+                  }
+                  else {
+                      WriteAlert(_("Impossible Operation!"), 
+                                 _("Multicolumns can only be horizontally."), 
+                                 _("Sorry."));
+                  }
+             }
+          }
+         break;
+      }
+      case LyXTable::SET_ALL_LINES:
+          setLines = 1;
+      case LyXTable::UNSET_ALL_LINES:
+          if (!selection){
+              cursor.par->table->SetAllLines(NumberOfCell(cursor.par,
+                                                          cursor.pos),
+                                             setLines);
+          } else {
+              int i,n=-1,m=-2;
+              for (i=sel_start_cursor.pos; i<=sel_end_cursor.pos; i++){
+                  if ((n=NumberOfCell(sel_start_cursor.par,i)) != m) {
+                      cursor.par->table->SetAllLines(n,setLines);
+                      m = n;
+                  }
+              }
+          }
+          RedoParagraph();
+          return;
+      case LyXTable::SET_LONGTABLE:
+          cursor.par->table->SetLongTable(true);
+          return;
+      case LyXTable::UNSET_LONGTABLE:
+          cursor.par->table->SetLongTable(false);
+          return;
+      case LyXTable::SET_ROTATE_TABLE:
+          cursor.par->table->SetRotateTable(true);
+          return;
+      case LyXTable::UNSET_ROTATE_TABLE:
+          cursor.par->table->SetRotateTable(false);
+          return;
+      case LyXTable::SET_ROTATE_CELL:
+          if (!selection){
+              cursor.par->table->SetRotateCell(actCell,true);
+          } else {
+              int i,n=-1,m=-2;
+              for (i=sel_start_cursor.pos; i<=sel_end_cursor.pos; i++){
+                  if ((n=NumberOfCell(sel_start_cursor.par,i)) != m) {
+                      cursor.par->table->SetRotateCell(n,true);
+                      m = n;
+                  }
+              }
+          }
+          return;
+      case LyXTable::UNSET_ROTATE_CELL:
+          if (!selection){
+              cursor.par->table->SetRotateCell(actCell,false);
+          } else {
+              int i,n=-1,m=-2;
+              for (i=sel_start_cursor.pos; i<=sel_end_cursor.pos; i++){
+                  if ((n=NumberOfCell(sel_start_cursor.par,i)) != m) {
+                      cursor.par->table->SetRotateCell(n,false);
+                      m = n;
+                  }
+              }
+          }
+          return;
+      case LyXTable::SET_LINEBREAKS:
+          what = !cursor.par->table->Linebreaks(cursor.par->table->FirstVirtualCell(actCell));
+          if (!selection){
+              cursor.par->table->SetLinebreaks(actCell,what);
+          } else {
+              int i,n=-1,m=-2;
+              for (i=sel_start_cursor.pos; i<=sel_end_cursor.pos; i++){
+                  if ((n=NumberOfCell(sel_start_cursor.par,i)) != m) {
+                      cursor.par->table->SetLinebreaks(n,what);
+                      m = n;
+                  }
+              }
+          }
+          return;
+      case LyXTable::SET_LTFIRSTHEAD:
+          cursor.par->table->SetLTHead(actCell,true);
+          return;
+      case LyXTable::SET_LTHEAD:
+          cursor.par->table->SetLTHead(actCell,false);
+          return;
+      case LyXTable::SET_LTFOOT:
+          cursor.par->table->SetLTFoot(actCell,false);
+          return;
+      case LyXTable::SET_LTLASTFOOT:
+          cursor.par->table->SetLTFoot(actCell,true);
+          return;
+      case LyXTable::SET_LTNEWPAGE:
+          what = !cursor.par->table->LTNewPage(actCell);
+          cursor.par->table->SetLTNewPage(actCell,what);
+          return;
+    }
+}
+       
+
+void LyXText::InsertCharInTable(char c)
+{
+       Row *row;
+       Row *tmprow;
+       long y;
+       bool jumped_over_space;
+       
+       /* first check, if there will be two blanks together or a blank at 
+        * the beginning of a paragraph. 
+        * I decided to handle blanks like normal characters, the main 
+        * difference are the special checks when calculating the row.fill
+        * (blank does not count at the end of a row) and the check here */ 
+       
+       LyXFont realtmpfont = real_current_font;
+       LyXFont rawtmpfont = current_font; /* store the current font.
+                                           * This is because of the use
+                                           * of cursor movements. The moving
+                                           * cursor would refresh the 
+                                           * current font */
+
+       // Get the font that is used to calculate the baselineskip
+       int const lastpos = cursor.par->Last();
+       LyXFont rawparfont = cursor.par->GetFontSettings(lastpos - 1);
+
+       jumped_over_space = false;
+       if (IsLineSeparatorChar(c)) {
+               
+               /* avoid double blanks but insert the new blank because
+                * of a possible font change */
+               if (cursor.pos < lastpos &&
+                   cursor.par->IsLineSeparator(cursor.pos))
+               {
+                       cursor.par->Erase(cursor.pos);
+                       jumped_over_space = true;
+               }
+               else if ((cursor.pos > 0 && 
+                         cursor.par->IsLineSeparator(cursor.pos - 1))
+                        || (cursor.pos > 0 && cursor.par->IsNewline(cursor.pos - 1))
+                         || (cursor.pos == 0 &&
+                             !(cursor.par->Previous()
+                             && cursor.par->Previous()->footnoteflag
+                             == LyXParagraph::OPEN_FOOTNOTE)))
+                       return;
+       }
+       else if (IsNewlineChar(c)) {
+            if (!IsEmptyTableCell()) {
+                TableFeatures(LyXTable::APPEND_CONT_ROW);
+                CursorDown();
+            }
+         /* the newline character is the separator of the cells */
+         // cursor.par->InsertChar(cursor.pos, c);
+         // SetCharFont(cursor.par, cursor.pos, rawtmpfont);
+         // RedoParagraphs(cursor, cursor.par->Next());
+         // SetCursor(cursor.par, cursor.pos+1);
+         return;
+       }
+   
+       row = cursor.row;
+       y = cursor.y - row->baseline;
+       if (c != LYX_META_INSET)        /* in this case LyXText::InsertInset 
+                                        * already inserted the character */
+               cursor.par->InsertChar(cursor.pos, c);
+       SetCharFont(cursor.par, cursor.pos, rawtmpfont);
+
+       if (!jumped_over_space) {
+               /* refresh the positions */
+               tmprow = row;
+               while (tmprow->next && tmprow->next->par == row->par) {
+                       tmprow = tmprow->next;
+                       tmprow->pos++;
+               }
+       }
+
+       cursor.pos++;
+
+       CheckParagraphInTable(cursor.par, cursor.pos);
+       
+       current_font = rawtmpfont;
+       real_current_font = realtmpfont;
+       
+       /* check, whether the last character's font has changed. */
+       if (cursor.pos && cursor.pos == cursor.par->Last()
+           && rawparfont != rawtmpfont)
+               RedoHeightOfParagraph(cursor);
+}
+
+
+void LyXText::CheckParagraphInTable(LyXParagraph* par, int pos)
+{
+       Row *row;
+       long y;
+       
+       if (par->GetChar(pos) == LYX_META_INSET &&
+           par->GetInset(pos) && par->GetInset(pos)->Display()){
+         par->GetInset(pos)->SetDisplay(false);
+       }
+
+       row = GetRow(par, pos, y);
+       
+       int tmpheight = row->height;
+       SetHeightOfRow(row);
+       
+       int tmp_pos = pos;
+       /* update the table information */
+       while (tmp_pos && !par->IsNewline(tmp_pos - 1))
+               tmp_pos--;
+       if (par->table->SetWidthOfCell(NumberOfCell(par, pos),
+                                      WidthOfCell(par, tmp_pos))) {
+               LyXCursor tmpcursor = cursor;
+               SetCursorIntern(par, pos);
+               /* make a complete redraw */
+               RedoDrawingOfParagraph(cursor);
+               cursor = tmpcursor;
+       }
+       else {
+               /* redraw only the row */
+               LyXCursor tmpcursor = cursor;
+               SetCursorIntern(par, pos);
+               refresh_y = y;
+               refresh_x = cursor.x;
+               refresh_row = row;
+               refresh_pos = cursor.pos;
+               cursor = tmpcursor;
+               
+               if (tmpheight == row->height)
+                       status = LyXText::NEED_VERY_LITTLE_REFRESH;
+               else
+                       status = LyXText::NEED_MORE_REFRESH;
+       }
+        SetCursorIntern(cursor.par, cursor.pos);
+}
+
+
+void LyXText::BackspaceInTable()
+{
+       Row *tmprow, *row;
+       long y;
+       
+       LyXFont rawtmpfont = current_font;
+       LyXFont realtmpfont = real_current_font;
+
+       // Get the font that is used to calculate the baselineskip
+       int const lastpos = cursor.par->Last();
+       LyXFont rawparfont = cursor.par->GetFontSettings(lastpos - 1);
+       
+       if (cursor.pos == 0) {
+               /* no pasting of table paragraphs */
+               
+               CursorLeft();
+       }
+       else {
+               /* this is the code for a normal backspace, not pasting
+                * any paragraphs */ 
+         SetUndo(Undo::DELETE, 
+                 cursor.par->ParFromPos(cursor.pos)->previous, 
+                 cursor.par->ParFromPos(cursor.pos)->next); 
+         
+               CursorLeftIntern();
+               
+               /* some insets are undeletable here */
+               if (cursor.par->GetChar(cursor.pos)==LYX_META_INSET) {
+                       if (!cursor.par->GetInset(cursor.pos)->Deletable())
+                               return;
+               }
+               
+               row = cursor.row;
+               y = cursor.y - row->baseline;
+               
+               /* some special code when deleting a newline. */
+               if (cursor.par->IsNewline(cursor.pos)) {
+                       /* nothing :-) */
+                       return;
+               }
+               else {
+                       cursor.par->Erase(cursor.pos);
+                       
+                       /* refresh the positions */
+                       tmprow = row;
+                       while (tmprow->next && tmprow->next->par == row->par) {
+                               tmprow = tmprow->next;
+                               tmprow->pos--;
+                       }
+                       
+                       /* delete superfluous blanks */ 
+                       if (cursor.pos < cursor.par->Last() - 1 &&
+                       (cursor.par->IsLineSeparator(cursor.pos))) {
+                               
+                               if (cursor.pos == BeginningOfMainBody(cursor.par)
+                               || !cursor.pos 
+                               || cursor.par->IsLineSeparator(cursor.pos - 1)) {
+                                       cursor.par->Erase(cursor.pos);
+                                       /* refresh the positions */
+                                       tmprow = row;
+                                       while (tmprow->next && 
+                                              tmprow->next->par == row->par) {
+                                               tmprow = tmprow->next;
+                                               tmprow->pos--;
+                                       }
+                                       if (cursor.pos)   /* move one character left */
+                                               cursor.pos--;
+                               }
+                       }
+               }
+      
+               CheckParagraphInTable(cursor.par, cursor.pos);
+      
+               /* check, wether the last characters font has changed. */ 
+               if (cursor.pos && cursor.pos == cursor.par->Last()
+                   && rawparfont != rawtmpfont)
+                       RedoHeightOfParagraph(cursor);
+
+               /* restore the current font 
+                * That is what a user expects! */
+               current_font = rawtmpfont;
+               real_current_font = realtmpfont;
+       }
+       SetCursorIntern(cursor.par, cursor.pos);
+}
+
+/* table stuff -- end*/
+
+
+/* just a macro to make some thing easier. */ 
+void LyXText::RedoParagraph()
+{
+  LyXCursor tmpcursor = cursor;
+  ClearSelection();
+  RedoParagraphs(cursor, cursor.par->Next());;
+  SetCursorIntern(tmpcursor.par, tmpcursor.pos);
+}
+
+
+/* insert a character, moves all the following breaks in the 
+ * same Paragraph one to the right and make a rebreak */
+void  LyXText::InsertChar(char c)
+{
+       Row *row;
+       Row *tmprow;
+       int z;
+       long y;
+       bool jumped_over_space;
+       LyXFont realtmpfont;
+       LyXFont rawtmpfont;
+       int lastpos;
+       LyXFont rawparfont;
+   
+       SetUndo(Undo::INSERT, 
+               cursor.par->ParFromPos(cursor.pos)->previous, 
+               cursor.par->ParFromPos(cursor.pos)->next);
+
+       /* When the free-spacing option is set for the current layout,
+        * all spaces are converted to protected spaces. */
+       bool freeSpacingBo =
+               lyxstyle.Style(parameters->textclass,
+                              cursor.row->par->GetLayout())->free_spacing;
+       //
+       // Is this wanted? There cannot be a line break between protected
+       // separators. Therefore I suggest the way implemented below
+       // (Matthias)
+       //
+       //   if ( freeSpacingBo && IsLineSeparatorChar(c) )
+       //         c = LYX_META_PROTECTED_SEPARATOR;
+   
+       if (freeSpacingBo && IsLineSeparatorChar(c) 
+           && (!cursor.pos || cursor.par->IsLineSeparator(cursor.pos-1))) 
+               c = LYX_META_PROTECTED_SEPARATOR;
+   
+       /* table stuff -- begin*/
+       if (cursor.par->table) {
+               InsertCharInTable(c);
+               goto out;
+       }
+       /* table stuff -- end*/
+   
+       /* first check, if there will be two blanks together or a blank at 
+        * the beginning of a paragraph. 
+        * I decided to handle blanks like normal characters, the main 
+        * difference are the special checks when calculating the row.fill
+        * (blank does not count at the end of a row) and the check here */ 
+
+       // The bug is triggered when we type in a description environment:
+       // The current_font is not changed when we go from label to main text
+       // and it should (along with realtmpfont) when we type the space.
+#ifdef WITH_WARNINGS
+#warning There is a bug here! (Asger)
+#endif
+       
+       realtmpfont = real_current_font;
+       rawtmpfont = current_font;  /* store the current font.
+                                    * This is because of the use
+                                    * of cursor movements. The moving
+                                    * cursor would refresh the 
+                                    * current font */
+
+       // Get the font that is used to calculate the baselineskip
+       lastpos = cursor.par->Last();
+       rawparfont = cursor.par->GetFontSettings(lastpos - 1);
+
+       jumped_over_space = false;
+   
+       if (IsLineSeparatorChar(c)) {
+          
+               if (cursor.pos < lastpos
+                   && cursor.par->IsLineSeparator(cursor.pos)) {
+                       /* the user inserted a space before a space. So we
+                        * will just make a CursorRight. BUT: The font of this
+                        * space should be set to current font. That is why
+                        * we need to rebreak perhaps. If there is a protected
+                        * blank at the end of a row we have to force
+                        * a rebreak.*/ 
+          
+                       minibuffer->Set(_("You cannot type two spaces this way.  Please read the Tutorial."));
+                       if (cursor.pos == RowLast(cursor.row)
+                           && !IsLineSeparatorChar(c))
+                               cursor.row->fill = -1;    /* force rebreak  */
+          
+                       cursor.par->Erase(cursor.pos);
+                       jumped_over_space = true;
+          
+               } else if ((cursor.pos > 0 
+                           && cursor.par->IsLineSeparator(cursor.pos - 1))
+                          || (cursor.pos > 0
+                              && cursor.par->IsNewline(cursor.pos - 1))
+                          || (cursor.pos == 0
+                              && !(cursor.par->Previous()
+                                   && cursor.par->Previous()->footnoteflag
+                                   == LyXParagraph::OPEN_FOOTNOTE))) {
+                       if (cursor.pos == 0 )
+                               minibuffer->Set(_("You cannot insert a space at the beginning of a paragraph.  Please read the Tutorial."));
+                       else
+                               minibuffer->Set(_("You cannot type two spaces this way.  Please read the Tutorial."));
+                       goto out;
+               }
+       } else if (IsNewlineChar(c)) {
+               if (cursor.par->FirstPhysicalPar() == cursor.par
+                   && cursor.pos <= BeginningOfMainBody(cursor.par))
+                       goto out;
+               /* no newline at first position 
+                * of a paragraph or behind labels. 
+                * TeX does not allow that. */
+               
+               if (cursor.pos < cursor.par->Last() &&
+                   cursor.par->IsLineSeparator(cursor.pos))
+                       CursorRightIntern(); // newline always after a blank!
+               cursor.row->fill = -1;         // to force a new break
+       }
+   
+       /* the display inset stuff */ 
+       if (cursor.row->par->GetChar(cursor.row->pos) == LYX_META_INSET
+           && cursor.row->par->GetInset(cursor.row->pos)
+           && cursor.row->par->GetInset(cursor.row->pos)->Display())
+               cursor.row->fill = -1; // to force a new break  
+
+       /* get the cursor row fist */
+       /* this is a dumb solution, i will try to hold the cursor.row
+          in future */ 
+       /* row = GetRow(cursor.par, cursor.pos, y);*/
+       /* ok, heres a better way: */ 
+       row = cursor.row;
+       y = cursor.y - row->baseline;
+       if (c != LYX_META_INSET)  /* in this case LyXText::InsertInset 
+                                  * already insertet the character */
+               cursor.par->InsertChar(cursor.pos, c);
+       SetCharFont(cursor.par, cursor.pos, rawtmpfont);
+
+       if (!jumped_over_space) {
+               /* refresh the positions */
+               tmprow = row;
+               while (tmprow->next && tmprow->next->par == row->par) {
+                       tmprow = tmprow->next;
+                       tmprow->pos++;
+               }
+       }
+   
+       /* Is there a break one row above */ 
+       if ((cursor.par->IsLineSeparator(cursor.pos)
+            || cursor.par->IsNewline(cursor.pos)
+            || cursor.row->fill == -1)
+           && row->previous && row->previous->par == row->par) {
+               z = NextBreakPoint(row->previous, paperwidth);
+               if ( z >= row->pos) {
+                       row->pos = z + 1;
+                       
+                       /* set the dimensions of the row above  */ 
+                       row->previous->fill = Fill(row->previous, paperwidth);
+
+                       SetHeightOfRow(row->previous);
+            
+                       y -= row->previous->height;
+                       refresh_y = y;
+                       refresh_row = row->previous;
+                       status = LyXText::NEED_MORE_REFRESH;
+            
+                       BreakAgainOneRow(row);
+                       SetCursor(cursor.par, cursor.pos + 1);
+                       /* cursor MUST be in row now */
+            
+                       if (row->next && row->next->par == row->par)
+                               need_break_row = row->next;
+                       else
+                               need_break_row = NULL;
+
+                       current_font = rawtmpfont;
+                       real_current_font = realtmpfont;
+            
+                       // check, wether the last characters font has changed. 
+                       if (cursor.pos && cursor.pos == cursor.par->Last()
+                           && rawparfont != rawtmpfont)
+                               RedoHeightOfParagraph(cursor);
+                       
+                       goto out;
+               }
+       }
+   
+       /* recalculate the fill of the row */ 
+       if (row->fill >= 0)  /* needed because a newline
+                             * will set fill to -1. Otherwise
+                             * we would not get a rebreak! */
+               row->fill = Fill(row, paperwidth);
+       if (row->fill < 0 ) {
+               refresh_y = y;
+               refresh_row = row; 
+               refresh_x = cursor.x;
+               refresh_pos = cursor.pos;
+               status = LyXText::NEED_MORE_REFRESH;
+               BreakAgainOneRow(row); 
+               /* will the cursor be in another row now? */ 
+               if (RowLast(row) <= cursor.pos + 1 && row->next) {
+                       if (row->next && row->next->par == row->par)
+                               /* this should
+                                * always be true */
+                               row = row->next;
+                       BreakAgainOneRow(row);
+               }
+               SetCursor(cursor.par, cursor.pos + 1);
+               if (row->next && row->next->par == row->par)
+                       need_break_row = row->next;
+               else
+                       need_break_row = NULL;
+               
+               current_font = rawtmpfont;
+               real_current_font = realtmpfont;
+       } else {
+               refresh_y = y;
+               refresh_x = cursor.x;
+               refresh_row = row;
+               refresh_pos = cursor.pos;
+               
+               int tmpheight = row->height;
+               SetHeightOfRow(row);
+               if (tmpheight == row->height)
+                       status = LyXText::NEED_VERY_LITTLE_REFRESH;
+               else
+                       status = LyXText::NEED_MORE_REFRESH;
+            
+               SetCursor(cursor.par, cursor.pos + 1);
+               current_font = rawtmpfont;
+               real_current_font = realtmpfont;
+       }
+
+       /* check, wether the last characters font has changed. */ 
+       if (cursor.pos && cursor.pos == cursor.par->Last()
+           && rawparfont != rawtmpfont) {
+               RedoHeightOfParagraph(cursor);
+       } else {
+               /* now the special right address boxes */
+               if (lyxstyle.Style(parameters->textclass,
+                                  cursor.par->GetLayout())->margintype
+                   == MARGIN_RIGHT_ADDRESS_BOX) {
+                       RedoDrawingOfParagraph(cursor); 
+               }
+       }
+  out:
+
+       // Here we could call FinishUndo for every 20 characters inserted.
+       // This is from my experience how emacs does it.
+       static unsigned short counter = 0;
+       if (counter < 20) {
+               ++counter;
+       } else {
+               FinishUndo();
+               counter = 0;
+       }
+       return;
+}
+   
+   
+void LyXText::PrepareToPrint(Row *row, float &x, float &fill_separator, 
+                            float &fill_hfill, float &fill_label_hfill)
+{
+       float w, nh, nlh, ns;
+       
+       w = row->fill;
+       fill_hfill = 0;
+       fill_label_hfill = 0;
+       fill_separator = 0;
+       fill_label_hfill = 0;
+       
+       x = LeftMargin(row);
+       
+       /* is there a manual margin with a manual label */ 
+       if (lyxstyle.Style(parameters->textclass,
+                          row->par->GetLayout())->margintype == MARGIN_MANUAL
+           && lyxstyle.Style(parameters->textclass,
+                             row->par->GetLayout())->labeltype == LABEL_MANUAL) {
+              
+               nlh = NumberOfLabelHfills(row) + 1; /* one more since labels 
+                                                   * are left aligned*/ 
+               if (nlh && !row->par->GetLabelWidthString().empty()) {
+                       fill_label_hfill = LabelFill(row) / nlh;
+               }
+       }
+               
+       /* are there any hfills in the row? */ 
+       nh = NumberOfHfills(row);
+       
+/* table stuff -- begin*/
+       if (row->par->table) {
+          w = paperwidth - row->par->table->WidthOfTable()
+          - x - RightMargin(row);
+          nh = 0; /* ignore hfills in tables */ 
+       }
+/* table stuff -- end*/
+
+       if (nh)
+         fill_hfill = w /nh;
+       else  {
+          /* is it block, flushleft or flushright? 
+           * set x how you need it */
+          int align;
+          if (row->par->FirstPhysicalPar()->align == LYX_ALIGN_LAYOUT)
+            align = lyxstyle.Style(parameters->textclass, row->par->GetLayout())->align;
+          else
+            align = row->par->FirstPhysicalPar()->align;
+          
+          /* center displayed insets */ 
+          if (row->par->GetChar(row->pos) == LYX_META_INSET
+              && row->par->GetInset(row->pos)
+              && row->par->GetInset(row->pos)->Display())
+            align = LYX_ALIGN_CENTER;
+
+          switch (align) {
+           case LYX_ALIGN_BLOCK:
+             ns = NumberOfSeparators(row);
+             if (ns && row->next && row->next->par == row->par &&
+                 !(row->next->par->IsNewline(row->next->pos-1))
+                 && !(row->next->par->GetChar(row->next->pos) == LYX_META_INSET
+                      && row->next->par->GetInset(row->next->pos)
+                      && row->next->par->GetInset(row->next->pos)->Display())
+                 )
+               fill_separator = w / ns;
+             break;
+           case LYX_ALIGN_RIGHT:
+             x += w;
+             break;
+           case LYX_ALIGN_CENTER:
+             x += w / 2;
+             break;
+          }
+       }
+     }
+
+      
+/* important for the screen */
+
+
+/* the cursor set functions have a special mechanism. When they
+* realize, that you left an empty paragraph, they will delete it.
+* They also delete the corresponding row */
+
+void LyXText::CursorRightOneWord()
+{
+       // treat floats, HFills and Insets as words
+       LyXCursor tmpcursor = cursor;
+
+       if (tmpcursor.pos == tmpcursor.par->Last()
+           && tmpcursor.par->Next())
+       {
+                       tmpcursor.par = tmpcursor.par->Next();
+                       tmpcursor.pos = 0;
+       } else {
+               int steps = 0;
+
+               // Skip through initial nonword stuff.
+               while ( tmpcursor.pos < tmpcursor.par->Last() &&
+                       ! tmpcursor.par->IsWord( tmpcursor.pos ) ) 
+               {
+                 //    printf("Current pos1 %d",tmpcursor.pos) ;
+                       tmpcursor.pos++;
+                       steps++;
+               }
+               // Advance through word.
+               while ( tmpcursor.pos < tmpcursor.par->Last() &&
+                       tmpcursor.par->IsWord( tmpcursor.pos ) )
+               {
+                 //     printf("Current pos2 %d",tmpcursor.pos) ;
+                       tmpcursor.pos++;
+                       steps++;
+               }
+       }
+       SetCursor(tmpcursor.par, tmpcursor.pos);
+}
+
+
+void LyXText::CursorTab()
+{
+    if (cursor.par->table) {
+        int cell = NumberOfCell(cursor.par, cursor.pos);
+        while(cursor.par->table->IsContRow(cell)) {
+            CursorUp();
+            cell = NumberOfCell(cursor.par, cursor.pos);
+        }
+        if (cursor.par->table->ShouldBeVeryLastCell(cell))
+            TableFeatures(LyXTable::APPEND_ROW);
+    }
+    LyXCursor tmpcursor = cursor;
+    while (tmpcursor.pos < tmpcursor.par->Last()
+           && !tmpcursor.par->IsNewline(tmpcursor.pos))
+        tmpcursor.pos++;
+   
+    if (tmpcursor.pos == tmpcursor.par->Last()){
+        if (tmpcursor.par->Next()) {
+            tmpcursor.par = tmpcursor.par->Next();
+            tmpcursor.pos = 0;
+        }
+    }
+    else
+        tmpcursor.pos++;
+    SetCursor(tmpcursor.par, tmpcursor.pos);
+    if (cursor.par->table) {
+        int cell = NumberOfCell(cursor.par, cursor.pos);
+        while (cursor.par->table->IsContRow(cell) &&
+               !cursor.par->table->ShouldBeVeryLastCell(cell)) {
+            tmpcursor = cursor;
+            while (tmpcursor.pos < tmpcursor.par->Last()
+                   && !tmpcursor.par->IsNewline(tmpcursor.pos))
+                tmpcursor.pos++;
+   
+            if (tmpcursor.pos == tmpcursor.par->Last()){
+                if (tmpcursor.par->Next()) {
+                    tmpcursor.par = tmpcursor.par->Next();
+                    tmpcursor.pos = 0;
+                }
+            }
+            else
+                tmpcursor.pos++;
+            SetCursor(tmpcursor.par, tmpcursor.pos);
+            cell = NumberOfCell(cursor.par, cursor.pos);
+        }
+    }
+}
+
+
+/* -------> Skip initial whitespace at end of word and move cursor to *start*
+            of prior word, not to end of next prior word. */
+
+void LyXText::CursorLeftOneWord() 
+{
+       // treat HFills, floats and Insets as words
+       LyXCursor tmpcursor = cursor;
+       while (tmpcursor.pos 
+              && (tmpcursor.par->IsSeparator(tmpcursor.pos - 1) 
+                  || tmpcursor.par->IsKomma(tmpcursor.pos - 1))
+              && !(tmpcursor.par->IsHfill(tmpcursor.pos - 1)
+                   || tmpcursor.par->IsFloat(tmpcursor.pos - 1)
+                   || tmpcursor.par->IsInset(tmpcursor.pos - 1)))
+               tmpcursor.pos--;
+
+       if (tmpcursor.pos
+           && (tmpcursor.par->IsInset(tmpcursor.pos - 1)
+               || tmpcursor.par->IsFloat(tmpcursor.pos - 1)
+               || tmpcursor.par->IsHfill(tmpcursor.pos - 1))) {
+               tmpcursor.pos--;
+       } else if (!tmpcursor.pos) {
+               if (tmpcursor.par->Previous()){
+                       tmpcursor.par = tmpcursor.par->Previous();
+                       tmpcursor.pos = tmpcursor.par->Last();
+               }
+       } else {                // Here, tmpcursor != 0 
+               while (tmpcursor.pos > 0 &&
+                      tmpcursor.par->IsWord(tmpcursor.pos-1) )
+                       tmpcursor.pos-- ;
+       }
+       SetCursor(tmpcursor.par, tmpcursor.pos);
+}
+
+/* -------> Select current word. This depends on behaviour of CursorLeftOneWord(), so it is
+                       patched as well. */
+
+void LyXText::SelectWord() 
+{
+       /* Move cursor to the beginning, when not already there. */
+       if ( cursor.pos
+            && !cursor.par->IsSeparator(cursor.pos-1)
+            && !cursor.par->IsKomma(cursor.pos-1) )
+               CursorLeftOneWord();
+
+       /* set the sel cursor */
+       sel_cursor = cursor;
+
+       while ( cursor.pos < cursor.par->Last()
+                       && !cursor.par->IsSeparator(cursor.pos)
+                       && !cursor.par->IsKomma(cursor.pos) )
+               cursor.pos++;
+       SetCursor( cursor.par, cursor.pos );
+       
+       /* finally set the selection */ 
+       SetSelection();
+}
+
+
+/* -------> Select the word currently under the cursor when:
+                       1: no selection is currently set,
+                       2: the cursor is not at the borders of the word. */
+
+int LyXText::SelectWordWhenUnderCursor() 
+{
+       if ( selection ) return 0;
+       if ( cursor.pos < cursor.par->Last()
+                && !cursor.par->IsSeparator(cursor.pos)
+                && !cursor.par->IsKomma(cursor.pos)
+                && cursor.pos 
+                && !cursor.par->IsSeparator(cursor.pos -1)
+                && !cursor.par->IsKomma(cursor.pos -1) ) {
+               SelectWord();
+               return 1;
+       }
+       return 0;
+}
+
+
+// This function is only used by the spellchecker for NextWord().
+// It doesn't handle LYX_ACCENTs and probably never will.
+char* LyXText::SelectNextWord(float &value)
+{
+       LyXParagraph* tmppar = cursor.par;
+       
+       // If this is not the very first word, skip rest of
+       // current word because we are probably in the middle
+       // of a word if there is text here.
+       if (cursor.pos || cursor.par->previous) {
+               while (cursor.pos < cursor.par->Last()
+                      && cursor.par->IsLetter(cursor.pos))
+                       cursor.pos++;
+       }
+       // Now, skip until we have real text (will jump paragraphs)
+       while ((cursor.par->Last() > cursor.pos
+               && (!cursor.par->IsLetter(cursor.pos)
+                   || cursor.par->getFont(cursor.pos).latex() == LyXFont::ON))
+              || (cursor.par->Last() == cursor.pos
+                  && cursor.par->Next())){
+               if (cursor.pos == cursor.par->Last()) {
+                       cursor.par = cursor.par->Next();
+                       cursor.pos = 0;
+               }
+               else
+                       cursor.pos++;
+       }
+  
+       // Update the value if we changed paragraphs
+       if (cursor.par != tmppar){
+               SetCursor(cursor.par, cursor.pos);
+               value = float(cursor.y)/float(height);
+       }
+
+       /* Start the selection from here */
+       sel_cursor = cursor;
+
+       LString latex;
+   
+       /* and find the end of the word 
+          (optional hyphens are part of a word) */
+       while (cursor.pos < cursor.par->Last()
+              && (cursor.par->IsLetter(cursor.pos)) 
+                  || (cursor.par->GetChar(cursor.pos) == LYX_META_INSET &&
+                      cursor.par->GetInset(cursor.pos) != 0 &&
+                      cursor.par->GetInset(cursor.pos)->Latex(latex,0)==0 &&
+                      latex == "\\-"))
+               cursor.pos++;
+
+       // Finally, we copy the word to a string and return it
+       char* string = NULL;
+
+       if (sel_cursor.pos < cursor.pos) {
+               string = new char [cursor.pos - sel_cursor.pos + 2];
+               int i,j;
+               
+               for (i=sel_cursor.pos, j=0; i<cursor.pos; i++) {
+                       if (cursor.par->GetChar(i) != LYX_META_INSET)
+                               string[j++] = cursor.par->GetChar(i);
+               }
+               string[j] = '\0';
+       }
+       return string;
+}
+
+
+// This one is also only for the spellchecker
+void LyXText::SelectSelectedWord()
+{
+       /* move cursor to the beginning */
+       SetCursor(sel_cursor.par, sel_cursor.pos);
+       
+       /* set the sel cursor */
+       sel_cursor = cursor;
+
+       LString latex;
+       
+       /* now find the end of the word */
+       while (cursor.pos < cursor.par->Last()
+              && (cursor.par->IsLetter(cursor.pos)
+                  || (cursor.par->GetChar(cursor.pos) == LYX_META_INSET &&
+                      cursor.par->GetInset(cursor.pos) != 0 &&
+                      cursor.par->GetInset(cursor.pos)->Latex(latex,0)==0 &&
+                      latex == "\\-")))
+               cursor.pos++;
+       
+       SetCursor(cursor.par, cursor.pos);
+       
+       /* finally set the selection */ 
+       SetSelection();
+}
+
+
+/* -------> Delete from cursor up to the end of the current or next word. */
+void LyXText::DeleteWordForward()
+{
+       LyXCursor tmpcursor = cursor;
+        
+       if (!cursor.par->Last())
+               CursorRight();
+       else {
+               /* -------> Skip initial non-word stuff. */
+               while ( cursor.pos < cursor.par->Last() 
+                       && (cursor.par->IsSeparator(cursor.pos)
+                           || cursor.par->IsKomma(cursor.pos)) )
+                       cursor.pos++;
+               
+               SetCursorIntern(cursor.par, cursor.pos);
+               selection = True; // to avoid deletion 
+               CursorRightOneWord();
+               sel_cursor = cursor;
+               cursor = tmpcursor;
+               SetSelection(); 
+               
+               /* -----> Great, CutSelection() gets rid of multiple spaces. */
+               CutSelection();
+       }
+}
+
+
+/* -------> Delete from cursor to start of current or prior word. */
+void LyXText::DeleteWordBackward()
+{
+       LyXCursor tmpcursor = cursor;
+       if (!cursor.par->Last())
+         CursorLeft();
+       else{
+         selection = True; // to avoid deletion 
+         CursorLeftOneWord();
+         sel_cursor = cursor;
+         cursor = tmpcursor;
+         SetSelection();
+         CutSelection();
+       }
+}
+
+
+/* -------> Kill to end of line. */
+void LyXText::DeleteLineForward()
+{
+       LyXCursor tmpcursor = cursor;
+       if (!cursor.par->Last())
+               CursorRight();
+       else {
+               CursorEnd();
+               sel_cursor = cursor;
+               cursor = tmpcursor;
+               SetSelection();
+               if (selection == false) {
+                       DeleteWordForward();
+               } else {
+                       CutSelection();
+               }
+       }
+}
+
+// Change the case of a word at cursor position. The meaning of action
+// is:
+// 0  change to lowercase
+// 1  capitalize word
+// 2  change to uppercase
+// This function directly manipulates LyXParagraph::text because there
+// is no LyXParagraph::SetChar currently. I did what I could to ensure
+// that it is correct. I guess part of it should be moved to
+// LyXParagraph, but it will have to change for 1.1 anyway. At least
+// it does not access outside of the allocated array as the older
+// version did. (JMarc) 
+void LyXText::ChangeWordCase(int action) 
+{
+       LyXParagraph *tmppar = cursor.par->ParFromPos(cursor.pos);
+       int tmppos = cursor.par->PositionInParFromPos(cursor.pos);
+
+       SetUndo(Undo::FINISH, tmppar->previous, tmppar->next); 
+
+       while (tmppos < tmppar->last) {
+               unsigned char c = tmppar->text[tmppos];
+               if (IsKommaChar(c) || IsLineSeparatorChar(c))
+                       break;
+               if (c != LYX_META_INSET) {
+                       switch (action) {
+                       case 0:
+                               c = tolower(c);
+                               break;
+                       case 1:
+                               c = toupper(c);
+                               action = 0;
+                               break;
+                       case 2:
+                               c = toupper(c);
+                               break;
+                       }
+               }
+               
+               tmppar->text[tmppos] = c;
+               tmppos++;
+       }
+       CheckParagraph(tmppar, tmppos);
+       CursorRightOneWord();
+}
+
+
+void  LyXText::Delete()
+{
+   LyXCursor old_cursor = cursor;
+   LyXCursor tmpcursor;
+   /* this is a very easy implementation*/ 
+   
+   /* just move to the right */ 
+   CursorRightIntern();
+   
+   if (cursor.par->previous == old_cursor.par->previous
+       && cursor.par != old_cursor.par)
+     return; // delete-emty-paragraph-mechanism has done it
+   
+   /* if you had success make a backspace */ 
+   if (old_cursor.par != cursor.par || old_cursor.pos != cursor.pos) {
+     tmpcursor = cursor;
+     cursor = old_cursor; // to make sure undo gets the right cursor position
+     SetUndo(Undo::DELETE, 
+            cursor.par->ParFromPos(cursor.pos)->previous, 
+            cursor.par->ParFromPos(cursor.pos)->next); 
+     cursor = tmpcursor;
+     Backspace();
+   }
+}
+
+
+void  LyXText::Backspace()
+{
+       LyXParagraph *tmppar;
+       Row *tmprow, *row;
+       long y;
+       int tmpheight;
+
+       /* table stuff -- begin*/
+   
+       if (cursor.par->table) {
+               BackspaceInTable();
+               return;
+       }
+       /* table stuff -- end*/
+       
+       LyXFont rawtmpfont = current_font;
+       LyXFont realtmpfont = real_current_font;
+   
+       // Get the font that is used to calculate the baselineskip
+       int const lastpos = cursor.par->Last();
+       LyXFont rawparfont = cursor.par->GetFontSettings(lastpos - 1);
+
+       if (cursor.pos == 0) {
+               /* we may paste some paragraphs */
+      
+               /* is it an empty paragraph? */
+      
+               if ((lastpos == 0
+                    || (lastpos == 1 && cursor.par->IsSeparator(0)))
+                   && !(cursor.par->Next() 
+                        && cursor.par->footnoteflag ==
+                        LyXParagraph::NO_FOOTNOTE
+                        && cursor.par->Next()->footnoteflag ==
+                        LyXParagraph::OPEN_FOOTNOTE)) {
+                       
+                       if (cursor.par->previous) {
+                               tmppar = cursor.par->previous->FirstPhysicalPar();
+                               if (cursor.par->GetLayout() == tmppar->GetLayout()
+                                   && cursor.par->footnoteflag == tmppar->footnoteflag
+                                   && cursor.par->GetAlign() == tmppar->GetAlign()) {
+                                       
+                                       tmppar->line_bottom = cursor.par->line_bottom;
+                                       tmppar->added_space_bottom = cursor.par->added_space_bottom;
+                                       tmppar->pagebreak_bottom = cursor.par->pagebreak_bottom;
+                               }
+                               
+                               CursorLeftIntern();
+                    
+                               /* the layout things can change the height of a row ! */ 
+                               tmpheight = cursor.row->height;
+                               SetHeightOfRow(cursor.row);
+                               if (cursor.row->height != tmpheight) {
+                                       refresh_y = cursor.y - cursor.row->baseline;
+                                       refresh_row = cursor.row;
+                                       status = LyXText::NEED_MORE_REFRESH;
+                               }
+                               return;
+                       }
+               }
+               if (cursor.par->ParFromPos(cursor.pos)->previous){
+                       SetUndo(Undo::DELETE, 
+                               cursor.par->ParFromPos(cursor.pos)->previous->previous, 
+                               cursor.par->ParFromPos(cursor.pos)->next); 
+               }
+               tmppar = cursor.par;
+               tmprow = cursor.row;
+               CursorLeftIntern();
+               /* Pasting is not allowed, if the paragraphs have different layout.
+                * I think it is a real bug of all other word processors to allow
+                * it. It confuses the user. Even so with a footnote paragraph and
+                * a non-footnote paragraph. I will not allow pasting in this case, 
+                * because the user would be confused if the footnote behaves 
+                * different wether it is open or closed.
+                * 
+                * Correction: Pasting is always allowed with standard-layout */
+               if (cursor.par != tmppar
+                   && (cursor.par->GetLayout() == tmppar->GetLayout()
+                       || !tmppar->GetLayout())
+                   && cursor.par->footnoteflag == tmppar->footnoteflag
+                   /* table stuff -- begin*/
+                   && !cursor.par->table /* no pasting of tables */ 
+                   /* table stuff -- end*/
+                   && cursor.par->GetAlign() == tmppar->GetAlign()) {
+                       
+                       cursor.par->PasteParagraph();
+                       
+                       if (!(cursor.pos &&
+                             cursor.par->IsSeparator(cursor.pos - 1)))
+                               cursor.par->InsertChar(cursor.pos, ' ');
+                       else
+                               if (cursor.pos)
+                                       cursor.pos--;
+                       
+                       status = LyXText::NEED_MORE_REFRESH;
+                       refresh_row = cursor.row;
+                       refresh_y = cursor.y - cursor.row->baseline;
+                       
+                       /* remove the lost paragraph */
+                       RemoveParagraph(tmprow);
+                       RemoveRow(tmprow);  
+                       
+                       /* break the paragraph again */ 
+                       /* BreakAgain(cursor.row); */ 
+                       
+                       AppendParagraph(cursor.row);
+                       UpdateCounters(cursor.row);
+                       
+                       /* the row may have changed, block, hfills etc. */ 
+                       SetCursor(cursor.par, cursor.pos);
+               }
+       } else  {
+               /* this is the code for a normal backspace, not pasting
+                * any paragraphs */ 
+               SetUndo(Undo::DELETE, 
+                       cursor.par->ParFromPos(cursor.pos)->previous, 
+                       cursor.par->ParFromPos(cursor.pos)->next); 
+               CursorLeftIntern();
+               
+               /* some insets are undeletable here */
+               if (cursor.par->GetChar(cursor.pos)==LYX_META_INSET) {
+                       if (!cursor.par->GetInset(cursor.pos)->Deletable())
+                               return; 
+                       /* force complete redo when erasing display insets */ 
+                       /* this is a cruel mathod but save..... Matthias */ 
+                       if (cursor.par->GetInset(cursor.pos)->Display()){
+                               cursor.par->Erase(cursor.pos);
+                               RedoParagraph();
+                               return;
+                       }
+               }
+               
+               row = cursor.row;
+               y = cursor.y - row->baseline;
+               int z;
+               
+               /* remember that a space at the end of a row doesnt count
+                * when calculating the fill */ 
+               if (cursor.pos < RowLast(row) ||
+                   !cursor.par->IsLineSeparator(cursor.pos)) {
+                       row->fill += SingleWidth(cursor.par, cursor.pos);
+               }
+               
+               /* some special code when deleting a newline. This is similar
+                * to the behavior when pasting paragraphs */ 
+               if (cursor.pos && cursor.par->IsNewline(cursor.pos)) {
+                       cursor.par->Erase(cursor.pos);
+                       /* refresh the positions */
+                       tmprow = row;
+                       while (tmprow->next && tmprow->next->par == row->par) {
+                               tmprow = tmprow->next;
+                               tmprow->pos--;
+                       }
+                       if (cursor.par->IsLineSeparator(cursor.pos - 1))
+                               cursor.pos--;
+                       
+                       if (cursor.pos < cursor.par->Last() && !cursor.par->IsSeparator(cursor.pos)) {
+                               cursor.par->InsertChar(cursor.pos, ' ');
+                               /* refresh the positions */
+                               tmprow = row;
+                               while (tmprow->next && tmprow->next->par == row->par) {
+                                       tmprow = tmprow->next;
+                                       tmprow->pos++;
+                               }
+                       }
+               } else {
+                       cursor.par->Erase(cursor.pos);
+                       
+                       /* refresh the positions */
+                       tmprow = row;
+                       while (tmprow->next && tmprow->next->par == row->par) {
+                               tmprow = tmprow->next;
+                               tmprow->pos--;
+                       }
+                       
+                       /* delete superfluous blanks */ 
+                       if (cursor.pos < cursor.par->Last() - 1 &&
+                           (cursor.par->IsLineSeparator(cursor.pos))) {
+                               
+                               if (cursor.pos == BeginningOfMainBody(cursor.par)
+                                   || !cursor.pos 
+                                   || cursor.par->IsLineSeparator(cursor.pos - 1)) {
+                                       cursor.par->Erase(cursor.pos);
+                                       /* refresh the positions */
+                                       tmprow = row;
+                                       while (tmprow->next && 
+                                              tmprow->next->par == row->par) {
+                                               tmprow = tmprow->next;
+                                               tmprow->pos--;
+                                       }
+                                       if (cursor.pos)   /* move one character left */
+                                               cursor.pos--;
+                               }
+                       }
+                       
+                       /* delete newlines at the beginning of paragraphs */ 
+                       while (cursor.par->Last() &&
+                              cursor.par->IsNewline(cursor.pos) &&
+                              cursor.pos == BeginningOfMainBody(cursor.par)
+                               ) {
+                               cursor.par->Erase(cursor.pos);
+                               /* refresh the positions */
+                               tmprow = row;
+                               while (tmprow->next && 
+                                      tmprow->next->par == row->par) {
+                                       tmprow = tmprow->next;
+                                       tmprow->pos--;
+                               }
+                       }
+               }
+               
+               /* is there a break one row above */ 
+               if (row->previous && row->previous->par == row->par) {
+                       z = NextBreakPoint(row->previous, paperwidth);
+                       if ( z >= row->pos) {
+                               row->pos = z + 1;
+                               
+                               tmprow = row->previous;
+                               
+                               /* maybe the current row is now empty */ 
+                               if (row->pos >= row->par->Last()) {
+                                       /* remove it */ 
+                                       RemoveRow(row);
+                                       need_break_row = NULL;
+                               }
+                               else  {
+                                       BreakAgainOneRow(row);
+                                       if (row->next && row->next->par == row->par)
+                                               need_break_row = row->next;
+                                       else
+                                               need_break_row = NULL;
+                               }
+                               
+                               /* set the dimensions of the row above  */ 
+                               y -= tmprow->height;
+                               tmprow->fill = Fill(tmprow, paperwidth);
+                               SetHeightOfRow(tmprow);
+                               
+                               refresh_y = y;
+                               refresh_row = tmprow;
+                               status = LyXText::NEED_MORE_REFRESH;
+                               SetCursor(cursor.par, cursor.pos);
+                               current_font = rawtmpfont;
+                               real_current_font = realtmpfont;
+                               /* check, whether the last character's font has changed. */
+                               rawtmpfont = cursor.par->GetFontSettings(cursor.par->Last() - 1);
+                               if (rawparfont != rawtmpfont)
+                                       RedoHeightOfParagraph(cursor);
+                               return;
+                       }
+               }
+               
+               /* break the cursor row again */ 
+               z = NextBreakPoint(row, paperwidth);
+               
+               if ( z != RowLast(row) || 
+                    (row->next && row->next->par == row->par &&
+                     RowLast(row) == row->par->Last() - 1)){
+                       
+                       /* it can happen that a paragraph loses one row
+                        * without a real breakup. This is when a word
+                        * is to long to be broken. Well, I don t care this 
+                        * hack ;-) */ 
+                       if (row->next && row->next->par == row->par &&
+                           RowLast(row) == row->par->Last() - 1)
+                               RemoveRow(row->next);
+                       
+                       refresh_y = y;
+                       refresh_row = row;
+                       status = LyXText::NEED_MORE_REFRESH;
+                       
+                       BreakAgainOneRow(row);
+                       
+                       SetCursor(cursor.par, cursor.pos);
+                       /* cursor MUST be in row now */
+                       
+                       if (row->next && row->next->par == row->par)
+                               need_break_row = row->next;
+                       else
+                               need_break_row = NULL;
+               } else  {
+                       /* set the dimensions of the row */ 
+                       row->fill = Fill(row, paperwidth);
+                       int tmpheight = row->height;
+                       SetHeightOfRow(row);
+                       if (tmpheight == row->height)
+                               status = LyXText::NEED_VERY_LITTLE_REFRESH;
+                       else
+                               status = LyXText::NEED_MORE_REFRESH;
+                       refresh_y = y;
+                       refresh_row = row;
+                       SetCursor(cursor.par, cursor.pos);
+               }
+       }
+   
+       /* restore the current font 
+        * That is what a user expects! */
+       current_font = rawtmpfont; 
+       real_current_font = realtmpfont;
+       
+       /* check, wether the last characters font has changed. */
+       rawtmpfont = cursor.par->GetFontSettings(cursor.par->Last() - 1);
+       if (rawparfont != rawtmpfont) {
+               RedoHeightOfParagraph(cursor);
+       } else {
+               /* now the special right address boxes */
+               if (lyxstyle.Style(parameters->textclass,
+                                  cursor.par->GetLayout())->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
+                       RedoDrawingOfParagraph(cursor); 
+               }
+       }
+}
+
+
+void LyXText::GetVisibleRow(LyXScreen &scr, int offset, 
+                           Row *row_ptr, long y)
+{
+       /* returns a printed row */
+       
+       int pos, pos_end;
+       float x, tmpx;
+       int y_top, y_bottom;
+       float fill_separator, fill_hfill, fill_label_hfill;
+       LyXParagraph *par, *firstpar;
+       int left_margin;
+       LyXFont font;
+       int maxdesc;
+       if (row_ptr->height <= 0) {
+               fprintf(stderr, "LYX_ERROR: row.height: %d \n",
+                       row_ptr->height);
+               return;
+       }
+       left_margin = LabelEnd(row_ptr);
+       PrepareToPrint(row_ptr, x, fill_separator,
+                      fill_hfill, fill_label_hfill);
+       
+       int main_body = BeginningOfMainBody(row_ptr->par);
+       
+       /* initialize the pixmap */
+       
+       scr.fillRectangle(gc_clear,
+                         0, offset, paperwidth, row_ptr->height);
+       // check for NOT FAST SELECTION
+       if (!fast_selection && !mono_video && selection) {
+               /* selection code */ 
+               if (sel_start_cursor.row == row_ptr &&
+                   sel_end_cursor.row == row_ptr) {
+                       scr.fillRectangle(gc_selection, sel_start_cursor.x,
+                                         offset,
+                                         sel_end_cursor.x -
+                                         sel_start_cursor.x,
+                                         row_ptr->height);
+               }
+               else if (sel_start_cursor.row == row_ptr) {
+                       scr.fillRectangle(gc_selection, sel_start_cursor.x,
+                                         offset,
+                                         paperwidth - sel_start_cursor.x,
+                                         row_ptr->height);
+               } else if (sel_end_cursor.row == row_ptr) {
+                       scr.fillRectangle(gc_selection,0, offset,
+                                         sel_end_cursor.x, row_ptr->height);
+               } else if (y > sel_start_cursor.y && y < sel_end_cursor.y) {
+                       scr.fillRectangle(gc_selection, 0, offset,
+                                         paperwidth, row_ptr->height);
+                       
+               }
+       } // end of NOT FAST SELECTION code
+       
+       if (row_ptr->par->appendix){
+         scr.drawVerticalLine(gc_math, 1, offset, offset+row_ptr->height);
+         scr.drawVerticalLine(gc_math, paperwidth-2 , offset, offset+row_ptr->height);
+       }
+
+       if (row_ptr->par->pextra_type == PEXTRA_MINIPAGE) {
+               /* draw a marker at the left margin! */ 
+               LyXFont font = GetFont(row_ptr->par, 0);
+               int asc = font.maxAscent();
+               int x = (LYX_PAPER_MARGIN - font.width('|')) / 2;
+               int y1 = (offset + row_ptr->baseline);
+               int y2 = (offset + row_ptr->baseline) - asc;
+
+               scr.drawVerticalLine(gc_minipage, x, y1, y2);
+       }       
+       if (row_ptr->par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) {
+               LyXFont font(LyXFont::ALL_SANE);
+               font.setSize(LyXFont::SIZE_FOOTNOTE);
+               font.setColor(LyXFont::RED);
+               
+               int box_x = LYX_PAPER_MARGIN;
+               box_x += font.textWidth(" wide-tab ", 10);
+               if (row_ptr->previous && 
+                   row_ptr->previous->par->footnoteflag != LyXParagraph::OPEN_FOOTNOTE){
+                       LString fs;
+                       switch (row_ptr->par->footnotekind) {
+                       case LyXParagraph::MARGIN:
+                               fs = " margin";
+                               break;
+                       case LyXParagraph::FIG:
+                               fs = " fig";
+                               break;
+                       case LyXParagraph::TAB:
+                               fs = " tab";
+                               break;
+                       case LyXParagraph::WIDE_FIG:
+                               fs = " wide-fig";
+                               break;
+                       case LyXParagraph::WIDE_TAB:
+                               fs = " wide-tab";
+                               break;
+                       case LyXParagraph::ALGORITHM:
+                               fs = " alg";
+                               break;
+                       case LyXParagraph::FOOTNOTE:
+                               fs = " foot";
+                               break;
+                       }
+                       
+                       // Determine background color.
+                       gc_type back = gc_lighted;
+                       if (mono_video) {
+                               back = gc_clear;
+                       }
+                       scr.fillRectangle(back,LYX_PAPER_MARGIN, offset+1,
+                                         box_x - LYX_PAPER_MARGIN, 
+                                         int(font.maxAscent())+
+                                         int(font.maxDescent()));
+                       
+                       scr.drawLine(gc_foot,
+                                    offset,
+                                    LYX_PAPER_MARGIN,
+                                    paperwidth - 2*LYX_PAPER_MARGIN);
+                       
+                       scr.drawString(font, fs,
+                                      offset + int(font.maxAscent())+1,
+                                      LYX_PAPER_MARGIN);
+                       scr.drawVerticalLine(gc_foot,
+                                            LYX_PAPER_MARGIN,
+                                            offset,
+                                            offset
+                                            + int(font.maxAscent())+
+                                            int(font.maxDescent()));
+                       
+                       scr.drawLine(gc_foot,
+                                    offset
+                                    + int(font.maxAscent())
+                                    + int(font.maxDescent()) + 1,
+                                    LYX_PAPER_MARGIN, box_x - LYX_PAPER_MARGIN); 
+               }
+               
+               /* draw the open floats in a red box */
+               scr.drawVerticalLine(gc_foot,
+                                    box_x,
+                                    offset,  offset + row_ptr->height);
+               
+               scr.drawVerticalLine(gc_foot,
+                                    paperwidth - LYX_PAPER_MARGIN,
+                                    offset,
+                                    offset + row_ptr->height);
+                       
+               
+       } else  {
+               if (row_ptr->previous &&
+                   row_ptr->previous->par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) {
+                       LyXFont font(LyXFont::ALL_SANE);
+                       font.setSize(LyXFont::SIZE_FOOTNOTE);
+                       
+                       int box_x = LYX_PAPER_MARGIN;
+                       box_x += font.textWidth(" wide-tab ", 10);
+                       
+                       scr.drawLine(gc_foot,
+                                    offset,
+                                    box_x,
+                                    paperwidth - LYX_PAPER_MARGIN - box_x);
+               }
+       }
+       
+       LyXLayout* layout = lyxstyle.Style(parameters->textclass,
+                                          row_ptr->par->GetLayout());
+       firstpar = row_ptr->par->FirstPhysicalPar();
+       
+       y_top = 0;
+       y_bottom = row_ptr->height;
+       
+       /* is it a first row? */ 
+       if (row_ptr->pos == 0
+           && row_ptr->par == firstpar) {
+               
+                /* start of appendix? */
+               if (row_ptr->par->start_of_appendix){
+                 scr.drawLine(gc_math, 
+                              offset,
+                              1, paperwidth-2);
+               }
+
+               /* think about the margins */ 
+               if (!row_ptr->previous)
+                       y_top += LYX_PAPER_MARGIN;
+               
+               if (row_ptr->par->pagebreak_top){ /* draw a top pagebreak  */
+                       scr.drawOnOffLine(offset + y_top + 2 * DefaultHeight(),
+                                         0, paperwidth);
+                       y_top += 3 * DefaultHeight();
+               }
+               
+               if (row_ptr->par->added_space_top.kind() == VSpace::VFILL) {
+                       /* draw a vfill top  */
+                       scr.drawLine(gc_fill, 
+                                    offset + 2 + y_top,
+                                    0, LYX_PAPER_MARGIN);
+                       scr.drawLine(gc_fill,
+                                    offset + y_top + 3 * DefaultHeight(),
+                                    0, LYX_PAPER_MARGIN);
+                       scr.drawVerticalOnOffLine(LYX_PAPER_MARGIN / 2, 
+                                                 offset + 2 + y_top,
+                                                 offset + y_top + 3 *
+                                                 DefaultHeight());
+                       
+                       y_top += 3 * DefaultHeight();
+               }
+               
+               /* think about user added space */ 
+               y_top += int(row_ptr->par->added_space_top.inPixels());
+               
+               /* think about the parskip */ 
+               /* some parskips VERY EASY IMPLEMENTATION */ 
+               if (parameters->paragraph_separation == LYX_PARSEP_SKIP) {
+                       if (layout->latextype == LATEX_PARAGRAPH
+                           && firstpar->GetDepth() == 0
+                           && firstpar->Previous())
+                               y_top += parameters->getDefSkip().inPixels();
+                       else if (firstpar->Previous()
+                                && lyxstyle.Style(parameters->textclass,
+                                                  firstpar->Previous()->GetLayout())->latextype == LATEX_PARAGRAPH
+                                && firstpar->Previous()->GetDepth() == 0)
+                               // is it right to use defskip here, too? (AS) 
+                               y_top += parameters->getDefSkip().inPixels();
+               }
+               
+               if (row_ptr->par->line_top) {      /* draw a top line  */
+                       y_top +=  GetFont(row_ptr->par, 0).ascent('x');
+
+                       scr.drawThickLine(offset + y_top,
+                                         0, paperwidth);
+                       y_top +=  GetFont(row_ptr->par, 0).ascent('x');
+               }
+               
+               /* should we print a label? */ 
+               if (layout->labeltype >= LABEL_STATIC
+                   && (layout->labeltype != LABEL_STATIC
+                       || layout->latextype != LATEX_ENVIRONMENT
+                       || row_ptr->par->IsFirstInSequence())) {
+                       font = GetFont(row_ptr->par, -2);
+                       if (!row_ptr->par->GetLabelString().empty()) {
+                               tmpx = x;
+                               LString tmpstring = row_ptr->par->GetLabelString();
+                               
+                               if (layout->labeltype == LABEL_COUNTER_CHAPTER) {
+                                       if (parameters->secnumdepth >=0){
+                                               /* this is special code for the chapter layout. This is printed in
+                                                * an extra row and has a pagebreak at the top. */
+                                               maxdesc = int(font.maxDescent() * layout->spacing.getValue() * parameters->spacing.getValue())
+                                                       + int(layout->parsep) * DefaultHeight();
+                                               scr.drawString(font, tmpstring,
+                                                              offset + row_ptr->baseline
+                                                              - row_ptr->ascent_of_text - maxdesc,
+                                                              int(x));
+                                       }
+                               } else {
+                                       x -= font.stringWidth( layout->labelsep);
+                                       x -= font.stringWidth( tmpstring);
+                                       /* draw it! */
+                                       scr.drawString(font, tmpstring,
+                                                      offset + row_ptr->baseline, int(x));
+                               }
+                               x = tmpx;
+                       }
+                       /* the labels at the top of an environment. More or less for bibliography */ 
+               } else if (layout->labeltype == LABEL_TOP_ENVIRONMENT ||
+                          layout->labeltype == LABEL_BIBLIO ||
+                          layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT) {
+                       if (row_ptr->par->IsFirstInSequence()) {
+                               font = GetFont(row_ptr->par, -2);
+                               if (!row_ptr->par->GetLabelString().empty()) {
+                                       LString tmpstring = row_ptr->par->GetLabelString();
+                                       
+                                       maxdesc = int(font.maxDescent() * layout->spacing.getValue() * parameters->spacing.getValue()
+                                                        + (layout->labelbottomsep * DefaultHeight()));
+                                       
+                                       int top_label_x = int(x);
+                                       if (layout->labeltype == LABEL_CENTERED_TOP_ENVIRONMENT){
+                                               top_label_x = int(x + (paperwidth - RightMargin(row_ptr) - x) / 2); 
+                                               top_label_x -= (font.stringWidth( tmpstring)/2);
+                                       }
+                                       
+                                       scr.drawString(font, tmpstring,
+                                                      offset + row_ptr->baseline
+                                                      - row_ptr->ascent_of_text - maxdesc,  
+                                                      top_label_x);                
+                               }
+                       }
+               }
+               if (layout->labeltype==LABEL_BIBLIO) { // ale970302
+                       if (row_ptr->par->bibkey) {
+                               tmpx = x;
+                               x -= font.stringWidth(layout->labelsep);
+                               font = GetFont(row_ptr->par, -1);
+                               x -= row_ptr->par->bibkey->Width(font);
+                               row_ptr->par->bibkey->Draw(font, scr,
+                                                          offset + row_ptr->baseline, 
+                                                          x);
+                               x = tmpx;
+                       }
+               } 
+       }
+       
+       /* is it a last row? */
+       par = row_ptr->par->LastPhysicalPar();
+       if (row_ptr->par->ParFromPos(RowLast(row_ptr) + 1) == par
+           && (!row_ptr->next || row_ptr->next->par != row_ptr->par)) {     
+               
+               /* think about the margins */ 
+               if (!row_ptr->next)
+                       y_bottom -= LYX_PAPER_MARGIN;
+               
+               /* draw a bottom pagebreak */ 
+               if (firstpar->pagebreak_bottom) {
+                       scr.drawOnOffLine(offset + y_bottom - 2 *
+                                         DefaultHeight(),
+                                         0, paperwidth);
+                       y_bottom -= 3 * DefaultHeight();
+               }
+               
+               if (firstpar->added_space_bottom.kind() == VSpace::VFILL) {
+                       /* draw a vfill bottom  */
+                       scr.drawLine(gc_fill,
+                                    offset + y_bottom - 3 * DefaultHeight(),
+                                    0, LYX_PAPER_MARGIN);
+                       scr.drawLine(gc_fill, offset + y_bottom - 2,
+                                    0, LYX_PAPER_MARGIN);
+                       scr.drawVerticalOnOffLine(LYX_PAPER_MARGIN / 2, 
+                                                 offset + y_bottom - 3 * DefaultHeight(),
+                                                 offset + y_bottom - 2
+                               );          
+                       y_bottom -= 3* DefaultHeight();
+               }
+               
+               /* think about user added space */ 
+               y_bottom -= int(firstpar->added_space_bottom.inPixels());
+               
+               if (firstpar->line_bottom) {
+                       /* draw a bottom line */
+                       y_bottom -= GetFont(par, par->Last() - 1).ascent('x');
+
+                       scr.drawThickLine(offset + y_bottom,
+                                         0, paperwidth);           
+                       y_bottom -= GetFont(par, par->Last() - 1).ascent('x');
+               }
+       }
+       
+       /* draw the text in the pixmap */  
+       pos_end = RowLast(row_ptr);
+       
+       pos = row_ptr->pos;
+       /* table stuff -- begin*/
+       if (row_ptr->par->table) {
+               bool on_off;
+               int cell = NumberOfCell(row_ptr->par, row_ptr->pos);
+               float x_old = x;
+               x += row_ptr->par->table->GetBeginningOfTextInCell(cell);
+               
+               while (pos <= pos_end)  {
+                       if (row_ptr->par->IsNewline(pos)) {
+                               
+                               x = x_old + row_ptr->par->table->WidthOfColumn(cell);
+                               /* draw the table lines, still very simple */
+                               on_off = !row_ptr->par->table->TopLine(cell);
+                               if ((!on_off ||
+                                    !row_ptr->par->table->TopAlreadyDrawed(cell)) &&
+                                   !row_ptr->par->table->IsContRow(cell))
+                                       scr.drawTableLine(offset + row_ptr->baseline -
+                                                         row_ptr->ascent_of_text,
+                                                         int(x_old), int(x - x_old), on_off);
+                               on_off = !row_ptr->par->table->BottomLine(cell);
+                               if ((!on_off && !row_ptr->par->table->RowHasContRow(cell)) ||
+                                   row_ptr->par->table->VeryLastRow(cell))
+                                       scr.drawTableLine(offset + y_bottom - 1,
+                                                         int(x_old), int(x - x_old), on_off);
+                               on_off = !row_ptr->par->table->LeftLine(cell);
+                               
+                               scr.drawVerticalTableLine(int(x_old), 
+                                                         offset + row_ptr->baseline -
+                                                         row_ptr->ascent_of_text,
+                                                         offset + y_bottom - 1,
+                                                         on_off);
+                               on_off = !row_ptr->par->table->RightLine(cell);
+                               
+                               scr.drawVerticalTableLine(int(x) -
+                                                         row_ptr->par->table->AdditionalWidth(cell),
+                                                         offset + row_ptr->baseline -
+                                                         row_ptr->ascent_of_text,
+                                                         offset + y_bottom - 1,
+                                                         on_off);
+                               x_old = x;
+                /* take care about the alignment and other spaces */
+                               cell++;
+                               x += row_ptr->par->table->GetBeginningOfTextInCell(cell);
+                               if (row_ptr->par->table->IsFirstCell(cell))
+                                       cell--; // little hack, sorry
+                               pos++;
+                       } else if (row_ptr->par->IsHfill(pos)) {
+                               x += 1;
+                               
+                               scr.drawVerticalLine(gc_fill, int(x),  
+                                                    offset + row_ptr->baseline - DefaultHeight()/2, 
+                                                    offset + row_ptr->baseline);               
+                               x += 2;
+                               pos++;
+                       } else {
+                               if (row_ptr->par->IsSeparator(pos)) {
+                                       tmpx = x;
+                                       x+=SingleWidth(row_ptr->par, pos);
+                                       /* -------> Only draw protected spaces when not in
+                                        * free-spacing mode. */
+                                       if (row_ptr->par->GetChar(pos)==LYX_META_PROTECTED_SEPARATOR && !layout->free_spacing) {
+                                               scr.drawVerticalLine(gc_fill, int(tmpx),
+                                                                    offset + row_ptr->baseline - 3,
+                                                                    offset + row_ptr->baseline - 1);
+                                               scr.drawLine(gc_fill,
+                                                            offset + row_ptr->baseline - 1,
+                                                            int(tmpx),
+                                                            int(x-tmpx-2));
+                                               scr.drawVerticalLine(gc_fill, int(x-2),
+                                                                    offset + row_ptr->baseline - 3,
+                                                                    offset + row_ptr->baseline - 1);                   
+                                               /* what about underbars? */
+                                               font = GetFont(row_ptr->par, pos); 
+                                               if (font.underbar() == LyXFont::ON
+                                                   && font.latex() != LyXFont::ON) {
+                                                       scr.drawLine(gc_copy,
+                                                                    offset +
+                                                                    row_ptr->baseline + 2,
+                                                                    int(tmpx),
+                                                                    int(x - tmpx));                        
+                                               }
+                                       }
+                                       pos++;
+                               } else
+                                       Draw(row_ptr, pos, scr, offset, x);
+                       }
+               }
+               
+               /* do not forget the very last cell. This has no NEWLINE so 
+                * ignored by the code above*/ 
+               if (cell == row_ptr->par->table->GetNumberOfCells()-1){
+                       x = x_old + row_ptr->par->table->WidthOfColumn(cell);
+                       on_off = !row_ptr->par->table->TopLine(cell);
+                       if ((!on_off ||
+                            !row_ptr->par->table->TopAlreadyDrawed(cell)) &&
+                           !row_ptr->par->table->IsContRow(cell))
+                               
+                               scr.drawTableLine(offset + row_ptr->baseline -
+                                                 row_ptr->ascent_of_text,
+                                                 int(x_old), int(x - x_old), on_off);      
+                       on_off = !row_ptr->par->table->BottomLine(cell);
+                       if ((!on_off && !row_ptr->par->table->RowHasContRow(cell)) ||
+                           row_ptr->par->table->VeryLastRow(cell))
+                               
+                               scr.drawTableLine(offset + y_bottom - 1,
+                                                 int(x_old), int(x - x_old), on_off);      
+                       on_off = !row_ptr->par->table->LeftLine(cell);
+                       
+                       scr.drawVerticalTableLine(int(x_old), 
+                                                 offset + row_ptr->baseline -
+                                                 row_ptr->ascent_of_text,
+                                                 offset + y_bottom - 1,
+                                                 on_off);          
+                       on_off = !row_ptr->par->table->RightLine(cell);
+                       
+                       scr.drawVerticalTableLine(int(x) -
+                                                 row_ptr->par->table->AdditionalWidth(cell),
+                                                 offset + row_ptr->baseline -
+                                                 row_ptr->ascent_of_text,
+                                                 offset + y_bottom - 1,
+                                                 on_off);          
+               }
+       } else {
+               /* table stuff -- end*/
+               
+               while (pos <= pos_end)  {
+                       
+                       if (row_ptr->par->IsHfill(pos)) {
+                               x += 1;
+                               scr.drawVerticalLine(gc_fill, int(x),  
+                                                    offset + row_ptr->baseline - DefaultHeight()/2, 
+                                                    offset + row_ptr->baseline);               
+                               if (HfillExpansion(row_ptr,pos)) {
+                                       if (pos >= main_body) {
+                                               scr.drawOnOffLine(offset + row_ptr->baseline -
+                                                                 DefaultHeight()/4,
+                                                                 int(x),
+                                                                 int(fill_hfill));                     
+                                               x += fill_hfill;
+                    } else {
+                           scr.drawOnOffLine(offset + row_ptr->baseline -
+                                             DefaultHeight()/4,
+                                             int(x),
+                                             int(fill_label_hfill));
+                           x += fill_label_hfill;
+                    }
+                                       scr.drawVerticalLine(gc_fill, int(x),
+                                                            offset + row_ptr->baseline -
+                                                            DefaultHeight()/2, 
+                                                            offset + row_ptr->baseline);
+                               }
+                               x += 2;
+                               pos++;
+                       } else {
+                               if (row_ptr->par->IsSeparator(pos)) {
+                                       tmpx = x;
+                                       x+=SingleWidth(row_ptr->par, pos);
+                                       if (pos >= main_body)
+                                               x+= fill_separator;
+                                       /* -------> Only draw protected spaces when not in
+                                        * free-spacing mode. */
+                                       if (row_ptr->par->GetChar(pos)==LYX_META_PROTECTED_SEPARATOR && !layout->free_spacing) {
+                                               
+                                               scr.drawVerticalLine(gc_fill, int(tmpx),
+                                                                    offset + row_ptr->baseline - 3,
+                                                                    offset + row_ptr->baseline - 1);
+                                               scr.drawLine(gc_fill,
+                                                            offset + row_ptr->baseline - 1,
+                                                            int(tmpx),
+                                                            int(x-tmpx-2));
+                                               scr.drawVerticalLine(gc_fill, int(x-2),
+                                                                    offset + row_ptr->baseline - 3,
+                                                                    offset + row_ptr->baseline - 1);                   
+                                               /* what about underbars? */
+                                               font = GetFont(row_ptr->par, pos); 
+                                               if (font.underbar() == LyXFont::ON
+                                                   && font.latex() != LyXFont::ON) {
+                                                       scr.drawLine(gc_copy,
+                                            offset + row_ptr->baseline + 2,
+                                                                    int(tmpx),
+                                                                    int(x - tmpx));
+                                               }
+                                       }
+                                       pos++;
+                               } else
+                                       Draw(row_ptr, pos, scr, offset, x);
+                       }
+                       if (pos == main_body) {
+                               x += GetFont(row_ptr->par, -2).stringWidth(
+                                       layout->labelsep);
+                               if (row_ptr->par->IsLineSeparator(pos - 1))
+                                       x-= SingleWidth(row_ptr->par, pos - 1);
+                               if (x < left_margin)
+                                       x = left_margin;
+                       }
+               }
+       }
+       // check for FAST SELECTION
+       if (fast_selection || mono_video){
+               if (selection) {
+                       
+                       /* selection code */ 
+                       if (sel_start_cursor.row == row_ptr && sel_end_cursor.row == row_ptr) {
+                               scr.fillRectangle(gc_select,sel_start_cursor.x, offset,
+                                                 sel_end_cursor.x - sel_start_cursor.x,
+                                                 row_ptr->height); 
+                       } else if (sel_start_cursor.row == row_ptr) {
+                               scr.fillRectangle(gc_select, sel_start_cursor.x, offset,
+                                                 paperwidth - sel_start_cursor.x,
+                                                 row_ptr->height);
+                       } else if (sel_end_cursor.row == row_ptr) {
+                               scr.fillRectangle(gc_select, 0, offset,
+                                                 sel_end_cursor.x,
+                                                 row_ptr->height);
+                       } else if (y > sel_start_cursor.y && y < sel_end_cursor.y) {
+                               scr.fillRectangle(gc_select, 0, offset,
+                                                 paperwidth, row_ptr->height);
+                               
+                       }
+               }
+       }
+// end of FAST SELECTION code
+       /* thats it */ 
+}
+
+
+int LyXText::DefaultHeight()
+{
+       LyXFont font(LyXFont::ALL_SANE);
+       return int(font.maxAscent() + font.maxDescent() * 1.5);
+}
+
+   
+/* returns the column near the specified x-coordinate of the row 
+* x is set to the real beginning of this column  */ 
+int  LyXText::GetColumnNearX(Row *row, int& x)
+{
+       int c; 
+       float tmpx = 0.0;
+       float fill_separator, fill_hfill, fill_label_hfill;
+       int left_margin;
+   
+       left_margin = LabelEnd(row);
+       PrepareToPrint(row, tmpx, fill_separator,
+                      fill_hfill, fill_label_hfill);
+       int main_body = BeginningOfMainBody(row->par);
+   
+       c = row->pos;
+
+       int last = RowLast(row);
+       if (row->par->IsNewline(last))
+               last--;
+   
+       LyXLayout *layout = lyxstyle.Style(parameters->textclass,
+                                          row->par->GetLayout());
+       /* table stuff -- begin*/
+       if (row->par->table) {
+               if (!row->next || row->next->par != row->par)
+                       last = RowLast(row); /* the last row doesn't need a newline at the end*/
+               int cell = NumberOfCell(row->par, row->pos);
+               float x_old = tmpx;
+               bool ready = false;
+               tmpx += row->par->table->GetBeginningOfTextInCell(cell);
+               while (c <= last
+                      && tmpx + (SingleWidth(row->par, c)/2) <= x
+                      && !ready){
+                       if (row->par->IsNewline(c)) {
+                               if (x_old + row->par->table->WidthOfColumn(cell) <= x){
+                                       tmpx = x_old + row->par->table->WidthOfColumn(cell);
+                                       x_old = tmpx;
+                                       cell++;
+                                       tmpx += row->par->table->GetBeginningOfTextInCell(cell);
+                                       c++;
+                               } else
+                                       ready = true;
+                       } else {
+                               tmpx += SingleWidth(row->par, c);
+                               c++;
+                       }
+               }
+       } else
+               /* table stuff -- end*/
+
+               while (c <= last
+                      && tmpx + (SingleWidth(row->par, c)/2)  <= x) {
+                       
+                       if (c && c == main_body
+                           && !row->par->IsLineSeparator(c - 1)) {
+                               tmpx += GetFont(row->par, -2)
+                                       .stringWidth(layout->labelsep);
+                               if (tmpx < left_margin)
+                                       tmpx = left_margin;
+                       }
+            
+                       tmpx += SingleWidth(row->par, c);
+                       if (HfillExpansion(row, c)) {
+                               if (c >= main_body)
+                                       tmpx += fill_hfill;
+                               else
+                                       tmpx += fill_label_hfill;
+                       }
+                       else if (c >= main_body
+                                && row->par->IsSeparator(c)) {
+                               tmpx+= fill_separator;  
+                       }
+                       c++;
+                       if (c == main_body
+                           && row->par->IsLineSeparator(c - 1)) {
+                               tmpx += GetFont(row->par, -2)
+                                       .stringWidth(layout->labelsep);
+                               tmpx-= SingleWidth(row->par, c - 1);
+                               if (tmpx < left_margin)
+                                       tmpx = left_margin;
+                       }
+               }
+       /* make sure that a last space in a row doesnt count */
+       if (c > 0 && c >= last
+           && row->par->IsLineSeparator(c - 1)
+           && !(!row->next || row->next->par != row->par)) {
+               tmpx -= SingleWidth(row->par, c - 1);
+               tmpx -= fill_separator;
+       }
+       c-=row->pos;
+       
+       x = int(tmpx);
+       return c;
+}
+
+   
+/* turn the selection into a new environment. If there is no selection,
+* create an empty environment */ 
+void LyXText::InsertFootnoteEnvironment(LyXParagraph::footnote_kind kind)
+{
+   /* no footnoteenvironment in a footnoteenvironment */ 
+   if (cursor.par->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
+      WriteAlert(_("Impossible operation"), 
+                _("You can't insert a float in a float!"), 
+                _("Sorry."));
+     return;
+   }
+   /* no marginpars in minipages */
+   if (kind == LyXParagraph::MARGIN 
+      && cursor.par->pextra_type == PEXTRA_MINIPAGE) {
+      WriteAlert(_("Impossible operation"), 
+                _("You can't insert a marginpar in a minipage!"), 
+                _("Sorry."));
+      return;
+   }
+   
+   /* this doesnt make sense, if there is no selection */ 
+   bool dummy_selection = false;
+   if (!selection) {
+      sel_start_cursor = cursor;       /* dummy selection  */
+      sel_end_cursor = cursor;
+      dummy_selection = true;
+   }
+   
+   LyXParagraph *tmppar;
+
+   if (sel_start_cursor.par->table || sel_end_cursor.par->table){
+      WriteAlert(_("Impossible operation"), _("Cannot cut table."), _("Sorry."));
+      return;
+   }
+     
+   /* a test to make sure there is not already a footnote
+    * in the selection. */
+   
+   tmppar = sel_start_cursor.par->ParFromPos(sel_start_cursor.pos);
+   
+   while (tmppar != sel_end_cursor.par->ParFromPos(sel_end_cursor.pos) && 
+         tmppar->footnoteflag == LyXParagraph::NO_FOOTNOTE)
+     tmppar = tmppar->next;
+   
+   if (tmppar != sel_end_cursor.par->ParFromPos(sel_end_cursor.pos)
+       || tmppar->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
+      WriteAlert(_("Impossible operation"), 
+                _("Float would include float!"), 
+                _("Sorry."));
+      return;
+   }
+   
+   /* ok we have a selection. This is always between sel_start_cursor
+    * and sel_end cursor */
+
+   SetUndo(Undo::FINISH, 
+          sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->previous, 
+          sel_end_cursor.par->ParFromPos(sel_end_cursor.pos)->next); 
+   
+   if (sel_end_cursor.pos > 0 
+       && sel_end_cursor.par->IsLineSeparator(sel_end_cursor.pos - 1))
+     sel_end_cursor.pos--;            /* please break before a space at
+                                       * the end */
+   if (sel_start_cursor.par == sel_end_cursor.par
+       && sel_start_cursor.pos > sel_end_cursor.pos)
+     sel_start_cursor.pos--;
+
+   sel_end_cursor.par->BreakParagraphConservative(sel_end_cursor.pos);
+   
+   sel_end_cursor.par = sel_end_cursor.par->Next();
+   sel_end_cursor.pos = 0;
+   
+   // don't forget to insert a dummy layout paragraph if necessary
+   if (sel_start_cursor.par->GetLayout() != sel_end_cursor.par->layout){
+     sel_end_cursor.par->BreakParagraphConservative(0);
+     sel_end_cursor.par->layout = LYX_DUMMY_LAYOUT;
+     sel_end_cursor.par = sel_end_cursor.par->next;
+   }
+   else
+     sel_end_cursor.par->layout = LYX_DUMMY_LAYOUT;
+
+   cursor = sel_end_cursor;
+
+   /* please break behind a space, if there is one. The space should
+    * be erased too */ 
+   if (sel_start_cursor.pos > 0 
+       && sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos - 1))
+     sel_start_cursor.pos--;
+   if (sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos)) {
+      sel_start_cursor.par->Erase(sel_start_cursor.pos);
+   }
+   
+   sel_start_cursor.par->BreakParagraphConservative(sel_start_cursor.pos);
+   tmppar = sel_start_cursor.par->Next();
+   
+   if (dummy_selection) {
+          tmppar->Clear();
+          if (kind == LyXParagraph::TAB
+              || kind == LyXParagraph::FIG 
+               || kind == LyXParagraph::WIDE_TAB
+              || kind == LyXParagraph::WIDE_FIG 
+               || kind == LyXParagraph::ALGORITHM) {
+                  int lay = lyxstyle.NumberOfLayout(parameters->textclass,
+                                                    "Caption");
+                  if (lay == -1) // layout not found
+                          // use default layout "Standard" (0)
+                          lay = 0;
+                  tmppar->SetLayout(lay);
+          }
+   }
+   else {
+     if (sel_start_cursor.pos > 0) {
+       /* the footnote-environment should begin with a standard layout.
+       * Imagine you insert a footnote within an enumeration, you 
+       * certainly do not want an enumerated footnote! */ 
+       tmppar->Clear();
+     }
+     else {
+       /* this is a exception the user would sometimes expect, I hope */
+       sel_start_cursor.par->Clear();
+     }
+   }
+   
+   while (tmppar != sel_end_cursor.par) {
+      tmppar->footnoteflag = LyXParagraph::OPEN_FOOTNOTE;
+      tmppar->footnotekind = kind;
+      tmppar = tmppar->Next();
+   } 
+
+   RedoParagraphs(sel_start_cursor, sel_end_cursor.par->Next());
+   
+   SetCursor(sel_start_cursor.par->Next(), 0);
+
+   ClearSelection();
+}
+   
+
+/* returns pointer to a specified row */
+Row* LyXText::GetRow(LyXParagraph *par, int pos, long &y)
+{
+   Row* tmprow;
+
+   if (currentrow){
+     if (par == currentrow->par || par == currentrow->par->Previous()){
+            // do not dereference par, it may have been deleted
+            // already! (Matthias) 
+            while (currentrow->previous && currentrow->previous->par != par){
+                    currentrow = currentrow->previous;
+                    currentrow_y -= currentrow->height;
+            }
+            while (currentrow->previous && currentrow->previous->par == par){
+                    currentrow = currentrow->previous;
+                    currentrow_y -= currentrow->height;
+            }
+     }
+     tmprow = currentrow;
+     y = currentrow_y;
+     /* find the first row of the specified paragraph */ 
+     while (tmprow->next && (tmprow->par != par)) {
+       y += tmprow->height;
+       tmprow = tmprow->next;
+     }
+
+     if (tmprow->par == par){
+       /* now find the wanted row */ 
+       while (tmprow->pos < pos && tmprow->next && tmprow->next->par == par && 
+             tmprow->next->pos <= pos) {
+        y += tmprow->height;
+       tmprow = tmprow->next;
+       }
+       currentrow = tmprow;
+       currentrow_y = y;
+       return tmprow;
+     }
+   }
+   tmprow = firstrow;
+   y = 0;
+   /* find the first row of the specified paragraph */ 
+   while (tmprow->next && (tmprow->par != par)) {
+      y += tmprow->height;
+      tmprow = tmprow->next;
+   }
+   /* now find the wanted row */ 
+   while (tmprow->pos < pos && tmprow->next && tmprow->next->par == par && 
+         tmprow->next->pos <= pos) {
+            y += tmprow->height;
+            tmprow = tmprow->next;
+   }
+   
+   currentrow = tmprow;
+   currentrow_y = y;
+
+   return tmprow;
+}
diff --git a/src/text2.C b/src/text2.C
new file mode 100644 (file)
index 0000000..1cbb53b
--- /dev/null
@@ -0,0 +1,3628 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*       
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*======================================================*/
+
+#include <config.h>
+
+#include <ctype.h>
+#include FORMS_H_LOCATION
+
+#ifdef __GNUG__
+#pragma implementation "lyxtext.h"
+#pragma implementation "undo.h"
+#endif
+
+#include "LString.h"
+#include "lyxparagraph.h"
+#include "insets/inseterror.h"
+#include "layout.h"
+#include "LyXView.h"
+#include "textutils.h"
+#include "lyx_cb.h"
+#include "undo.h"
+#include "minibuffer.h"
+#include "buffer.h"
+#include "bufferparams.h"
+#include "lyx_gui_misc.h"
+#include "lyxtext.h"
+#include "gettext.h"
+
+//     $Id: text2.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $     
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: text2.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+extern MiniBuffer *minibuffer;
+
+// Constructor
+LyXText::LyXText(int pw, Buffer *p)
+{
+       firstrow = NULL;
+       lastrow = NULL;
+       currentrow = NULL;
+       currentrow_y = 0;
+       paperwidth = pw;
+       parameters = &p->params;
+       params = p;
+       number_of_rows = 0;
+       refresh_y= 0;
+       status = LyXText::UNCHANGED;
+       LyXParagraph *par = p->paragraph;
+       current_font = GetFont(par, 0);
+   
+       height = 0;
+   
+       while (par) {
+               InsertParagraph(par, lastrow);
+               par = par->Next();
+       }
+       /* set cursor at the very top position */
+       selection = true;                      /* these setting is necessary 
+                                               * because of the delete-empty-
+                                               * paragraph mechanism in
+                                               * SetCursor */
+       SetCursor(firstrow->par, 0);
+       sel_cursor = cursor;
+       selection = false;
+       mark_set = false;
+   
+       /* no rebreak necessary */ 
+       need_break_row = NULL;
+   
+       undo_finished = true;
+       undo_frozen = false;
+
+       // Default layouttype for copy environment type
+       copylayouttype = 0;
+}
+
+
+// Destructor
+LyXText::~LyXText()
+{
+       // Delete all rows, this does not touch the paragraphs!
+       Row *tmprow = firstrow;
+       while (firstrow) {
+               tmprow = firstrow->next;
+               delete firstrow;
+               firstrow = tmprow;
+       }
+}
+
+
+// Gets the fully instantiated font at a given position in a paragraph
+// Basically the same routine as LyXParagraph::getFont() in paragraph.C.
+// The difference is that this one is used for displaying, and thus we
+// are allowed to make cosmetic improvements. For instance make footnotes
+// smaller. (Asger)
+// If position is -1, we get the layout font of the paragraph.
+// If position is -2, we get the font of the manual label of the paragraph.
+LyXFont LyXText::GetFont(LyXParagraph* par, int pos)
+{
+       LyXLayout *layout = 
+               lyxstyle.Style(parameters->textclass, par->GetLayout());
+
+       char par_depth = par->GetDepth();
+       // We specialize the 95% common case:
+       if (par->footnoteflag == LyXParagraph::NO_FOOTNOTE && !par_depth) {
+               if (pos >= 0){
+                       // 95% goes here
+                       if (layout->labeltype == LABEL_MANUAL
+                           && pos < BeginningOfMainBody(par)) {
+                               // 1% goes here
+                               return par->GetFontSettings(pos).
+                                               realize(layout->reslabelfont);
+                       } else
+                               return par->GetFontSettings(pos).
+                                               realize(layout->resfont);
+               } else {
+                       // 5% goes here.
+                       // process layoutfont for pos == -1 and labelfont for pos < -1
+                       if (pos == -1)
+                               return layout->resfont;
+                       else
+                               return layout->reslabelfont;
+               }
+       }
+
+       // The uncommon case need not be optimized as much
+
+       LyXFont layoutfont, tmpfont;
+
+       if (pos >= 0){
+               // 95% goes here
+               if (pos < BeginningOfMainBody(par)) {
+                       // 1% goes here
+                       layoutfont = layout->labelfont;
+               } else {
+                       // 99% goes here
+                       layoutfont = layout->font;
+               }
+               tmpfont = par->GetFontSettings(pos);
+               tmpfont.realize(layoutfont);
+       } else{
+               // 5% goes here.
+               // process layoutfont for pos == -1 and labelfont for pos < -1
+               if (pos == -1)
+                       tmpfont = layout->font;
+               else
+                       tmpfont = layout->labelfont;
+       }
+
+       // Resolve against environment font information
+       //if (par->GetDepth()){ // already in while condition
+               while (par && par_depth && !tmpfont.resolved()) {
+                       par = par->DepthHook(par_depth - 1);
+                       if (par) {
+                               tmpfont.realize(lyxstyle.
+                                               Style(parameters->textclass,
+                                                     par->GetLayout())->font);
+                               par_depth = par->GetDepth();
+                       }
+               }
+       //}
+
+       tmpfont.realize(lyxstyle.TextClass(parameters->textclass)->defaultfont);
+
+       // Cosmetic improvement: If this is an open footnote, make the font 
+       // smaller.
+       if (par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
+           && par->footnotekind == LyXParagraph::FOOTNOTE) {
+               tmpfont.decSize();
+       }
+
+       return tmpfont;
+}
+
+
+void LyXText::SetCharFont(LyXParagraph *par, int pos, LyXFont font)
+{
+       /* let the insets convert their font */ 
+       if (par->GetChar(pos) == LYX_META_INSET) {
+               if (par->GetInset(pos))
+                       font = par->GetInset(pos)->ConvertFont(font);
+       }
+
+       LyXLayout *layout = lyxstyle.Style(parameters->textclass,
+                                          par->GetLayout());
+
+       // Get concrete layout font to reduce against
+       LyXFont layoutfont;
+
+       if (pos < BeginningOfMainBody(par))
+               layoutfont = layout->labelfont;
+       else
+               layoutfont = layout->font;
+
+       // Realize against environment font information
+       if (par->GetDepth()){
+               LyXParagraph * tp = par;
+               while (!layoutfont.resolved() && tp && tp->GetDepth()) {
+                       tp = tp->DepthHook(tp->GetDepth()-1);
+                       if (tp)
+                               layoutfont.realize(lyxstyle.
+                                               Style(parameters->textclass,
+                                                     tp->GetLayout())->font);
+               }
+       }
+
+       layoutfont.realize(lyxstyle.TextClass(parameters->textclass)->defaultfont);
+
+       if (par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
+           && par->footnotekind == LyXParagraph::FOOTNOTE) {
+               layoutfont.decSize();
+       }
+
+       // Now, reduce font against full layout font
+       font.reduce(layoutfont);
+
+       par->SetFont(pos, font);
+}
+
+
+/* inserts a new row behind the specified row, increments
+ * the touched counters */
+void LyXText::InsertRow(Row *row, LyXParagraph *par, int pos)
+{
+       Row *tmprow = new Row;
+       if (!row) {
+               tmprow->previous = NULL;
+               tmprow->next = firstrow;
+               firstrow = tmprow;
+       }
+       else {
+               tmprow->previous = row;
+               tmprow->next = row->next;
+               row->next = tmprow;
+       }
+   
+       if (tmprow->next)
+               tmprow->next->previous = tmprow;
+   
+       if (tmprow->previous)
+               tmprow->previous->next = tmprow;
+   
+   
+       tmprow->par = par;
+       tmprow->pos = pos;
+   
+       if (row == lastrow)
+               lastrow = tmprow;
+       number_of_rows++;                              /* one more row  */
+}
+
+
+/* removes the row and reset the touched counters */
+void LyXText::RemoveRow(Row *row)
+{
+       /* this must not happen before the currentrow for clear reasons.
+          so the trick is just to set the current row onto the previous
+          row of this row */
+       long unused_y;
+       GetRow(row->par, row->pos, unused_y);
+       currentrow = currentrow->previous;
+       if (currentrow)
+               currentrow_y -= currentrow->height;
+       else
+               currentrow_y = 0;
+   
+       if (row->next)
+               row->next->previous = row->previous;
+       if (!row->previous) {
+               firstrow = row->next;
+       }
+       else  {
+               row->previous->next = row->next;
+       }
+       if (row == lastrow)
+               lastrow = row->previous;
+   
+       height -= row->height;         /* the text becomes smaller  */
+   
+       delete row;
+       number_of_rows--;                              /* one row less  */
+}
+
+/* remove all following rows of the paragraph of the specified row. */
+void LyXText::RemoveParagraph(Row *row)
+{
+       LyXParagraph *tmppar;
+       Row *tmprow;
+
+       tmppar = row->par;
+       row = row->next;
+    
+       while (row && row->par == tmppar) {
+               tmprow = row->next;
+               RemoveRow(row);
+               row = tmprow;
+       }
+}
+   
+  
+/* insert the specified paragraph behind the specified row */
+void LyXText::InsertParagraph(LyXParagraph *par, Row *row)
+{
+       InsertRow(row, par, 0);        /* insert a new row, starting 
+                                       * at postition 0 */
+
+       SetCounter(par);                       /* set the counters  */
+   
+       /* and now append the whole paragraph behind the new row */
+       if (!row) {
+               firstrow->height = 0;
+               AppendParagraph(firstrow);
+       }
+       else {
+               row->next->height = 0;
+               AppendParagraph(row->next);
+       }
+}
+    
+
+void LyXText::ToggleFootnote()
+{
+       LyXParagraph *par;
+   
+       par = cursor.par->ParFromPos(cursor.pos);
+       if (par->next && par->next->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE){
+               OpenFootnote();
+               minibuffer->Set(_("Opened float"));
+       }
+       else {
+               minibuffer->Set(_("Closed float"));
+               CloseFootnote();
+       }
+}
+
+
+void LyXText::OpenStuff()
+{
+       if (cursor.pos == 0 && cursor.par->bibkey){
+               cursor.par->bibkey->Edit(0,0);
+       }
+       else if (cursor.pos < cursor.par->Last() 
+                && cursor.par->GetChar(cursor.pos) == LYX_META_INSET
+                && cursor.par->GetInset(cursor.pos)->Editable()) {
+               minibuffer->Set(cursor.par->GetInset(cursor.pos)->EditMessage());
+               if (cursor.par->GetInset(cursor.pos)->Editable() != 2)
+                       SetCursorParUndo();
+               cursor.par->GetInset(cursor.pos)->Edit(0,0);
+       }
+       else {
+               ToggleFootnote();
+       }
+}
+
+
+void LyXText::CloseFootnote()
+{
+       LyXParagraph *par, *endpar,*tmppar;
+       Row *row;
+   
+       par = cursor.par->ParFromPos(cursor.pos);
+   
+       /* if the cursor is not in an open footnote, or 
+        * there is no open footnote in this paragraph, just return. */ 
+       if (cursor.par->footnoteflag != LyXParagraph::OPEN_FOOTNOTE) {
+      
+               if (!par->next
+                   || par->next->footnoteflag != LyXParagraph::OPEN_FOOTNOTE) {
+                       minibuffer->Set(_("Nothing to do"));
+                       return;
+               }
+   
+               /* ok, move the cursor right before the footnote */ 
+               /* just a little faster than using CursorRight() */
+               for (cursor.pos=0; cursor.par->ParFromPos(cursor.pos)!=par; cursor.pos++);
+               /* now the cursor is at the beginning of the physical par */
+               SetCursor(cursor.par, cursor.pos + cursor.par->ParFromPos(cursor.pos)->last);
+       }
+       else  {
+               /* we are in a footnote, so let us move at the beginning */ 
+               /*      while (cursor.par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)
+                       cursor.par = cursor.par->Previous();
+              
+                       SetCursor(cursor.par, cursor.par->Last()); */
+               /* this is just faster than using just CursorLeft() */ 
+       
+               tmppar = cursor.par;
+               while (tmppar->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) {
+                       /* just a little bit faster than movin the cursor */
+                       tmppar = tmppar->Previous();
+               }
+               SetCursor(tmppar, tmppar->Last());
+       }
+   
+       /* the cursor must be exactly before the footnote */ 
+       par = cursor.par->ParFromPos(cursor.pos);
+   
+       status = LyXText::NEED_MORE_REFRESH;
+       refresh_row = cursor.row;
+       refresh_y = cursor.y - cursor.row->baseline;
+   
+       tmppar = cursor.par;
+       endpar = par->NextAfterFootnote()->Next();
+       row = cursor.row;
+   
+       tmppar->CloseFootnote(cursor.pos);
+
+       /* set the dimensions of the cursor row */
+       /* row->fill = Fill(row, paperwidth);
+          SetHeightOfRow(row);  */ 
+   
+       while (tmppar != endpar) {
+               RemoveRow(row->next);
+               if (row->next)
+                       tmppar = row->next->par;
+               else
+                       tmppar = NULL;
+       }
+   
+       AppendParagraph(cursor.row);
+   
+       SetCursor(cursor.par, cursor.pos);
+       sel_cursor = cursor;
+   
+       /* just necessary */
+       if (cursor.row->next)
+               SetHeightOfRow(cursor.row->next);
+}
+
+
+/* used in setlayout */
+// Asger is not sure we want to do this...
+void LyXText::MakeFontEntriesLayoutSpecific(LyXParagraph *par)
+{
+       LyXFont layoutfont, tmpfont;
+   
+       int pos;
+   
+       LyXLayout* layout = lyxstyle.Style(parameters->textclass, par->GetLayout());
+   
+       for (pos = 0; pos < par->Last(); pos++) {
+               if (pos < BeginningOfMainBody(par))
+                       layoutfont = layout->labelfont;
+               else
+                       layoutfont = layout->font;
+      
+               tmpfont = par->GetFontSettings(pos);
+               tmpfont.reduce(layoutfont);
+               par->SetFont(pos, tmpfont);
+       }
+}
+
+
+/* set layout over selection and make a total rebreak of those paragraphs */
+void  LyXText::SetLayout(char layout)
+{
+       LyXCursor tmpcursor;
+
+       /* if there is no selection just set the layout of the current paragraph  */
+       if (!selection) {
+               sel_start_cursor = cursor;       /* dummy selection  */
+               sel_end_cursor = cursor;
+       }
+
+       LyXParagraph *endpar = sel_end_cursor.par->LastPhysicalPar()->Next();
+       LyXParagraph *undoendpar = endpar;
+
+       if (endpar && endpar->GetDepth()) {
+               while (endpar && endpar->GetDepth()) {
+                       //endpar->depth = 0;
+                       endpar = endpar->LastPhysicalPar()->Next();
+                       undoendpar = endpar;
+               }
+       }
+       else if (endpar) {
+               endpar = endpar->Next();               /* because of parindents etc.  */
+       }
+   
+       SetUndo(Undo::EDIT, 
+               sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->previous, 
+               undoendpar);
+
+       tmpcursor = cursor;                    /* store the current cursor  */
+
+       /* ok we have a selection. This is always between sel_start_cursor
+        * and sel_end cursor */ 
+       cursor = sel_start_cursor;
+   
+       LyXLayout * lyxlayout = lyxstyle.Style(parameters->textclass, layout);
+   
+       while (cursor.par != sel_end_cursor.par) {
+               if (cursor.par->footnoteflag ==
+                   sel_start_cursor.par->footnoteflag) {
+                       cursor.par->SetLayout(layout);
+                       MakeFontEntriesLayoutSpecific(cursor.par);
+                       LyXParagraph* fppar = cursor.par->FirstPhysicalPar();
+                       fppar->added_space_top = lyxlayout->fill_top ?
+                               VSpace(VSpace::VFILL) : VSpace(VSpace::NONE);
+                       fppar->added_space_bottom = lyxlayout->fill_bottom ? 
+                               VSpace(VSpace::VFILL) : VSpace(VSpace::NONE); 
+                       if (lyxlayout->margintype == MARGIN_MANUAL)
+                               cursor.par->SetLabelWidthString(lyxlayout->labelstring);
+                       if (lyxlayout->labeltype != LABEL_BIBLIO
+                           && fppar->bibkey) {
+                               delete fppar->bibkey;
+                               fppar->bibkey = 0;
+                       }
+               }
+               cursor.par = cursor.par->Next();
+       }
+       if (cursor.par->footnoteflag ==
+           sel_start_cursor.par->footnoteflag) {
+               cursor.par->SetLayout(layout);
+               MakeFontEntriesLayoutSpecific(cursor.par);
+               LyXParagraph* fppar = cursor.par->FirstPhysicalPar();
+               fppar->added_space_top = lyxlayout->fill_top ?
+                       VSpace(VSpace::VFILL) : VSpace(VSpace::NONE);
+               fppar->added_space_bottom = lyxlayout->fill_bottom ? 
+                       VSpace(VSpace::VFILL) : VSpace(VSpace::NONE); 
+               if (lyxlayout->margintype == MARGIN_MANUAL)
+                       cursor.par->SetLabelWidthString(lyxlayout->labelstring);
+               if (lyxlayout->labeltype != LABEL_BIBLIO
+                   && fppar->bibkey) {
+                       delete fppar->bibkey;
+                       fppar->bibkey = 0;
+               }
+       }
+   
+       RedoParagraphs(sel_start_cursor, endpar);
+   
+       /* we have to reset the selection, because the
+        * geometry could have changed */ 
+       SetCursor(sel_start_cursor.par, sel_start_cursor.pos);
+       sel_cursor = cursor;
+       SetCursor(sel_end_cursor.par, sel_end_cursor.pos);
+       UpdateCounters(cursor.row);
+       ClearSelection();
+       SetSelection();
+       SetCursor(tmpcursor.par, tmpcursor.pos);
+}
+
+
+/* increment depth over selection and
+ * make a total rebreak of those paragraphs */
+void  LyXText::IncDepth()
+{
+       // If there is no selection, just use the current paragraph
+       if (!selection) {
+               sel_start_cursor = cursor;       /* dummy selection */
+               sel_end_cursor = cursor;
+       }
+
+       // We end at the next paragraph with depth 0
+       LyXParagraph *endpar = sel_end_cursor.par->LastPhysicalPar()->Next();
+       LyXParagraph *undoendpar = endpar;
+
+       if (endpar && endpar->GetDepth()) {
+               while (endpar && endpar->GetDepth()) {
+                       endpar = endpar->LastPhysicalPar()->Next();
+                       undoendpar = endpar;
+               }
+       }
+       else if (endpar) {
+               endpar = endpar->Next();               /* because of parindents etc.  */
+       }
+       
+       SetUndo(Undo::EDIT, 
+               sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->previous, 
+               undoendpar);
+
+       LyXCursor tmpcursor = cursor;        /* store the current cursor  */
+
+       /* ok we have a selection. This is always between sel_start_cursor
+        * and sel_end cursor */ 
+       cursor = sel_start_cursor;
+   
+       bool anything_changed = false;
+   
+       while (true) {
+               // NOTE: you can't change the depth of a bibliography entry
+               if (cursor.par->footnoteflag ==
+                   sel_start_cursor.par->footnoteflag
+                   && lyxstyle.Style(parameters->textclass,
+                                     cursor.par->GetLayout()
+                                    )->labeltype != LABEL_BIBLIO) {
+                       LyXParagraph * prev = cursor.par->FirstPhysicalPar()->Previous();
+                       if (prev 
+                           && (prev->GetDepth() - cursor.par->GetDepth() > 0
+                               || (prev->GetDepth() == cursor.par->GetDepth()
+                                   && lyxstyle.Style(parameters->textclass,
+                                                     prev->GetLayout())->isEnvironment()))) {
+                               cursor.par->FirstPhysicalPar()->depth++;
+                               anything_changed = true;
+                               }
+               }
+               if (cursor.par == sel_end_cursor.par)
+                       break;
+               cursor.par = cursor.par->Next();
+       }
+   
+       /* if nothing changed set all depth to 0 */ 
+       if (!anything_changed) {
+               cursor = sel_start_cursor;
+               while (cursor.par != sel_end_cursor.par) {
+                       cursor.par->FirstPhysicalPar()->depth = 0;
+                       cursor.par = cursor.par->Next();
+               }
+               if (cursor.par->footnoteflag == sel_start_cursor.par->footnoteflag)
+                       cursor.par->FirstPhysicalPar()->depth = 0;
+       }
+   
+       RedoParagraphs(sel_start_cursor, endpar);
+   
+       /* we have to reset the selection, because the
+        * geometry could have changed */ 
+       SetCursor(sel_start_cursor.par, sel_start_cursor.pos);
+       sel_cursor = cursor;
+       SetCursor(sel_end_cursor.par, sel_end_cursor.pos);
+       UpdateCounters(cursor.row);
+       ClearSelection();
+       SetSelection();
+       SetCursor(tmpcursor.par, tmpcursor.pos);
+}
+
+
+/* decrement depth over selection and
+ * make a total rebreak of those paragraphs */
+void  LyXText::DecDepth()
+{
+       /* if there is no selection just set the layout of the current paragraph  */
+       if (!selection) {
+               sel_start_cursor = cursor;       /* dummy selection  */
+               sel_end_cursor = cursor;
+       }
+   
+       LyXParagraph *endpar = sel_end_cursor.par->LastPhysicalPar()->Next();
+       LyXParagraph *undoendpar = endpar;
+
+       if (endpar && endpar->GetDepth()) {
+               while (endpar && endpar->GetDepth()) {
+                       endpar = endpar->LastPhysicalPar()->Next();
+                       undoendpar = endpar;
+               }
+       }
+       else if (endpar) {
+               endpar = endpar->Next();               /* because of parindents etc.  */
+       }
+   
+       SetUndo(Undo::EDIT, 
+               sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->previous, 
+               undoendpar);
+
+       LyXCursor tmpcursor = cursor;                  /* store the current cursor  */
+
+       /* ok we have a selection. This is always between sel_start_cursor
+        * and sel_end cursor */ 
+       cursor = sel_start_cursor;
+
+       while (true) {
+               if (cursor.par->footnoteflag ==
+                   sel_start_cursor.par->footnoteflag) {
+                       if (cursor.par->FirstPhysicalPar()->depth)
+                               cursor.par->FirstPhysicalPar()->depth--;
+               }
+               if (cursor.par == sel_end_cursor.par)
+                       break;
+               cursor.par = cursor.par->Next();
+       }
+
+       RedoParagraphs(sel_start_cursor, endpar);
+   
+       /* we have to reset the selection, because the
+        * geometry could have changed */ 
+       SetCursor(sel_start_cursor.par, sel_start_cursor.pos);
+       sel_cursor = cursor;
+       SetCursor(sel_end_cursor.par, sel_end_cursor.pos);
+       UpdateCounters(cursor.row);
+       ClearSelection();
+       SetSelection();
+       SetCursor(tmpcursor.par, tmpcursor.pos);
+}
+
+
+/* set font over selection and make a total rebreak of those paragraphs */
+void  LyXText::SetFont(LyXFont font, bool toggleall)
+{
+       /* if there is no selection just set the current_font */
+       if (!selection) {
+               // Determine basis font
+               LyXFont layoutfont;
+               if (cursor.pos < BeginningOfMainBody(cursor.par))
+                       layoutfont = GetFont(cursor.par, -2);
+               else
+                       layoutfont = GetFont(cursor.par, -1);
+
+               // Update current font
+               real_current_font.update(font,toggleall);
+
+               // Reduce to implicit settings
+               current_font = real_current_font;
+               current_font.reduce(layoutfont);
+               // And resolve it completely
+               real_current_font.realize(layoutfont);
+               return;
+       }
+
+       LyXCursor tmpcursor = cursor;                  /* store the current cursor  */
+   
+       /* ok we have a selection. This is always between sel_start_cursor
+        * and sel_end cursor */ 
+   
+       SetUndo(Undo::EDIT, 
+               sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->previous, 
+               sel_end_cursor.par->ParFromPos(sel_end_cursor.pos)->next); 
+       cursor = sel_start_cursor;
+       while (cursor.par != sel_end_cursor.par ||
+              (cursor.par->footnoteflag == sel_start_cursor.par->footnoteflag
+               && cursor.pos < sel_end_cursor.pos)) 
+       {
+               if (cursor.pos < cursor.par->Last()
+                   && cursor.par->footnoteflag
+                   == sel_start_cursor.par->footnoteflag) {   /* an open footnote
+                                                               * should behave
+                                                               * like a closed */
+                       LyXFont newfont = GetFont(cursor.par,cursor.pos);
+                       newfont.update(font,toggleall);
+                       SetCharFont(cursor.par, cursor.pos, newfont);
+                       cursor.pos++;
+               } else {
+                       cursor.pos = 0;
+                       cursor.par = cursor.par->Next();
+               }
+       }
+   
+       RedoParagraphs(sel_start_cursor, sel_end_cursor.par->Next());
+   
+       /* we have to reset the selection, because the
+        * geometry could have changed */ 
+       SetCursor(sel_start_cursor.par, sel_start_cursor.pos);
+       sel_cursor = cursor;
+       SetCursor(sel_end_cursor.par, sel_end_cursor.pos);
+       ClearSelection();
+       SetSelection();
+       SetCursor(tmpcursor.par, tmpcursor.pos);
+}
+
+
+void LyXText::RedoHeightOfParagraph(LyXCursor cursor)
+{
+       Row *tmprow;
+       LyXParagraph *first_phys_par;
+       long y;
+   
+       tmprow = cursor.row;
+   
+       y = cursor.y - tmprow->baseline;
+       SetHeightOfRow(tmprow);
+       first_phys_par = tmprow->par->FirstPhysicalPar();
+       /* find the first row of the paragraph */
+       if (first_phys_par != tmprow->par)
+               while (tmprow->previous && tmprow->previous->par != first_phys_par)  {
+                       tmprow = tmprow->previous;
+                       y -= tmprow->height;
+                       SetHeightOfRow(tmprow);
+               }
+       while (tmprow->previous && tmprow->previous->par == first_phys_par)  {
+               tmprow = tmprow->previous;
+               y -= tmprow->height;
+               SetHeightOfRow(tmprow);
+       }
+   
+       /* we can set the refreshing parameters now */
+       status = LyXText::NEED_MORE_REFRESH;
+       refresh_y = y;
+       refresh_row = tmprow;
+       SetCursor(cursor.par, cursor.pos);
+}
+
+
+void LyXText::RedoDrawingOfParagraph(LyXCursor cursor)
+{
+       Row *tmprow;
+       LyXParagraph *first_phys_par;
+       long y;
+   
+       tmprow = cursor.row;
+   
+       y = cursor.y - tmprow->baseline;
+       SetHeightOfRow(tmprow);
+       first_phys_par = tmprow->par->FirstPhysicalPar();
+       /* find the first row of the paragraph */
+       if (first_phys_par != tmprow->par)
+               while (tmprow->previous && tmprow->previous->par != first_phys_par)  {
+                       tmprow = tmprow->previous;
+                       y -= tmprow->height;
+               }
+       while (tmprow->previous && tmprow->previous->par == first_phys_par)  {
+               tmprow = tmprow->previous;
+               y -= tmprow->height;
+      
+       }
+   
+       /* we can set the refreshing parameters now */
+       if (status == LyXText::UNCHANGED || y < refresh_y) {
+               refresh_y = y;
+               refresh_row = tmprow;
+       }
+       status = LyXText::NEED_MORE_REFRESH;
+       SetCursor(cursor.par, cursor.pos);
+}
+
+
+/* deletes and inserts again all paragaphs between the cursor
+* and the specified par 
+* This function is needed after SetLayout and SetFont etc. */
+void LyXText::RedoParagraphs(LyXCursor cursor, LyXParagraph *endpar)
+{
+       Row *tmprow, *tmprow2;
+       LyXParagraph *tmppar, *first_phys_par;
+       long y;
+   
+       tmprow = cursor.row;
+   
+       y = cursor.y - tmprow->baseline;
+   
+       if (!tmprow->previous){
+               first_phys_par = FirstParagraph();   // a trick/hack for UNDO
+       }
+       else {
+               first_phys_par = tmprow->par->FirstPhysicalPar();
+               /* find the first row of the paragraph */
+               if (first_phys_par != tmprow->par)
+                       while (tmprow->previous && tmprow->previous->par != first_phys_par)  {
+                               tmprow = tmprow->previous;
+                               y -= tmprow->height;
+                       }
+               while (tmprow->previous && tmprow->previous->par == first_phys_par)  {
+                       tmprow = tmprow->previous;
+                       y -= tmprow->height;
+               }
+       }
+   
+       /* we can set the refreshing parameters now */
+       status = LyXText::NEED_MORE_REFRESH;
+       refresh_y = y;
+       refresh_row = tmprow->previous;        /* the real refresh row will
+                                               * be deleted, so I store
+                                               * the previous here */ 
+       /* remove it */
+       if (tmprow->next)
+               tmppar = tmprow->next->par;
+       else
+               tmppar = NULL;
+       while (tmppar != endpar) {
+               RemoveRow(tmprow->next);
+               if (tmprow->next)
+                       tmppar = tmprow->next->par;
+               else
+                       tmppar = NULL;
+       }  
+   
+       /* remove the first one */
+       tmprow2 = tmprow;                      /* this is because tmprow->previous
+                                               * can be NULL */
+       tmprow = tmprow->previous;
+       RemoveRow(tmprow2);
+   
+       tmppar = first_phys_par;
+
+       do {
+               if (tmppar) {
+                       InsertParagraph(tmppar, tmprow);
+                       if (!tmprow)
+                               tmprow = firstrow;
+                       while (tmprow->next && tmprow->next->par == tmppar)
+                               tmprow = tmprow->next;
+                       tmppar = tmppar->Next();
+        
+               }
+       }
+       while (tmppar != endpar);
+   
+       /* this is because of layout changes */ 
+       if (refresh_row) {
+               refresh_y -= refresh_row->height;
+               SetHeightOfRow(refresh_row);   
+       }
+       else {
+               refresh_row = firstrow;
+               refresh_y = 0;
+               SetHeightOfRow(refresh_row);   
+       }
+   
+       if (tmprow && tmprow->next)
+               SetHeightOfRow(tmprow->next);
+   
+       /* restore the correct refresh row  */
+/*    if (refresh_row)
+      refresh_row = refresh_row->next;
+      else
+      refresh_row = firstrow;*/ 
+}
+
+
+int LyXText::FullRebreak()
+{
+       if (need_break_row) {
+               BreakAgain(need_break_row);
+               need_break_row = NULL;
+               return 1;
+       }
+       return 0;
+}
+
+
+/* important for the screen */
+
+
+/* the cursor set functions have a special mechanism. When they
+* realize, that you left an empty paragraph, they will delete it.
+* They also delet the corresponding row */
+   
+/* need the selection cursor: */ 
+void LyXText::SetSelection()
+{
+       if (!selection) {
+               last_sel_cursor = sel_cursor;
+               sel_start_cursor = sel_cursor;
+               sel_end_cursor = sel_cursor;
+       }
+   
+       selection = True;
+   
+       /* first the toggling area */ 
+       if (cursor.y < last_sel_cursor.y ||
+           (cursor.y == last_sel_cursor.y && cursor.x < last_sel_cursor.x)) {
+               toggle_end_cursor = last_sel_cursor;
+               toggle_cursor = cursor;
+       }
+       else {
+               toggle_end_cursor = cursor;
+               toggle_cursor = last_sel_cursor;
+       }
+   
+       last_sel_cursor = cursor;
+   
+       /* and now the whole selection */ 
+   
+       if (sel_cursor.y < cursor.y ||
+           (sel_cursor.y == cursor.y && sel_cursor.x < cursor.x)) {
+               sel_end_cursor = cursor;
+               sel_start_cursor = sel_cursor;
+       }
+       else {
+               sel_end_cursor = sel_cursor; 
+               sel_start_cursor = cursor;
+       }
+   
+       /* a selection with no contents is not a selection */ 
+       if (sel_start_cursor.x == sel_end_cursor.x && 
+           sel_start_cursor.y == sel_end_cursor.y)
+               selection = false;
+}
+
+
+void LyXText::ClearSelection()
+{
+       selection = false;
+       mark_set = false;
+}
+
+
+void  LyXText::CursorHome()
+{
+       SetCursor(cursor.par, cursor.row->pos);
+}
+
+
+void  LyXText::CursorEnd()
+{
+       if (!cursor.row->next || cursor.row->next->par != cursor.row->par)
+               SetCursor(cursor.par, RowLast(cursor.row) + 1);
+       else {
+               if (cursor.par->Last() && 
+                   (cursor.par->GetChar(RowLast(cursor.row)) == ' '
+                    || cursor.par->IsNewline(RowLast(cursor.row))))
+                       SetCursor(cursor.par, RowLast(cursor.row));
+               else
+                       SetCursor(cursor.par, RowLast(cursor.row) + 1);
+       }
+        if (cursor.par->table) {
+                int cell = NumberOfCell(cursor.par, cursor.pos);
+                if (cursor.par->table->RowHasContRow(cell) &&
+                    cursor.par->table->CellHasContRow(cell)<0) {
+                        if (!cursor.row->next || cursor.row->next->par != cursor.row->par)
+                                SetCursor(cursor.par, RowLast(cursor.row) + 1);
+                        else {
+                                if (cursor.par->Last() && 
+                                    (cursor.par->GetChar(RowLast(cursor.row)) == ' '
+                                     || cursor.par->IsNewline(RowLast(cursor.row))))
+                                        SetCursor(cursor.par, RowLast(cursor.row));
+                                else
+                                        SetCursor(cursor.par, RowLast(cursor.row) + 1);
+                        }
+                }
+        }
+}
+
+
+void  LyXText::CursorTop()
+{
+       while (cursor.par->Previous())
+               cursor.par = cursor.par->Previous();
+       SetCursor(cursor.par, 0);
+}
+
+
+void  LyXText::CursorBottom()
+{
+       while (cursor.par->Next())
+               cursor.par = cursor.par->Next();
+       SetCursor(cursor.par, cursor.par->Last());
+}
+   
+   
+/* returns a pointer to the row near the specified y-coordinate
+* (relative to the whole text). y is set to the real beginning
+* of this row */ 
+Row* LyXText::GetRowNearY(long& y)
+{
+       Row* tmprow;
+       long tmpy;
+   
+       if (currentrow){
+               tmprow = currentrow;
+               tmpy = currentrow_y;
+       }
+       else {
+               tmprow = firstrow;
+               tmpy = 0;
+       }
+
+       if (tmpy<=y)
+               while (tmprow->next && tmpy + tmprow->height <= y) {
+                       tmpy += tmprow->height;
+                       tmprow = tmprow->next;
+               }
+       else
+               while (tmprow->previous && tmpy > y) {
+                       tmprow = tmprow->previous;
+                       tmpy -= tmprow->height;
+               }
+
+       currentrow = tmprow;
+       currentrow_y = tmpy;
+
+       y = tmpy;                              /* return the real y  */
+       return tmprow;
+}
+   
+
+void LyXText::ToggleFree(LyXFont font, bool toggleall)
+{
+       // If the mask is completely neutral, tell user
+       if (font == LyXFont(LyXFont::ALL_IGNORE)){
+               // Could only happen with user style
+               minibuffer->Set(_("No font change defined. Use Character under"
+                                 " the Layout menu to define font change."));
+               return;
+       }
+
+       // Try implicit word selection
+       LyXCursor resetCursor = cursor;
+       int implicitSelection = SelectWordWhenUnderCursor();
+
+       // Set font
+       SetFont(font,toggleall);
+       //minibuffer->Set(_("Font style changed"));
+
+       /* Implicit selections are cleared afterwards and cursor is set to the
+          original position. */
+       if (implicitSelection) {
+               ClearSelection();
+               cursor = resetCursor;
+               SetCursor( cursor.par, cursor.pos );
+               sel_cursor = cursor;
+       }
+}
+
+
+int LyXText::BeginningOfMainBody(LyXParagraph *par)
+{
+       if (lyxstyle.Style(parameters->textclass, par->GetLayout())->labeltype != LABEL_MANUAL)
+               return 0;
+       else
+               return par->BeginningOfMainBody();
+}
+
+
+/* if there is a selection, reset every environment you can find
+* in the selection, otherwise just the environment you are in */ 
+void LyXText::MeltFootnoteEnvironment()
+{
+       LyXParagraph *tmppar, *firsttmppar;
+   
+       ClearSelection();
+   
+       /* is is only allowed, if the cursor is IN an open footnote.
+        * Otherwise it is too dangerous */ 
+       if (cursor.par->footnoteflag != LyXParagraph::OPEN_FOOTNOTE)
+               return;
+   
+       SetUndo(Undo::FINISH, 
+               cursor.par->PreviousBeforeFootnote()->previous,
+               cursor.par->NextAfterFootnote()->next);
+
+       /* ok, move to the beginning of the footnote. */ 
+       while (cursor.par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)
+               cursor.par = cursor.par->Previous();
+   
+       SetCursor(cursor.par, cursor.par->Last());
+       /* this is just faster than using CursorLeft(); */ 
+   
+       firsttmppar = cursor.par->ParFromPos(cursor.pos);
+       tmppar = firsttmppar;
+       /* tmppar is now the paragraph right before the footnote */
+   
+       char first_footnote_par_is_not_empty = tmppar->next->last;
+   
+       while (tmppar->next && tmppar->next->footnoteflag == LyXParagraph::OPEN_FOOTNOTE) {
+               tmppar = tmppar->next;         /* I use next instead of Next(),
+                                               * because there cannot be any
+                                               * footnotes in a footnote
+                                               * environment */
+               tmppar->footnoteflag = LyXParagraph::NO_FOOTNOTE;
+      
+               /* remember the captions and empty paragraphs */
+               if ((lyxstyle.Style(parameters->textclass,
+                                   tmppar->GetLayout())->labeltype == LABEL_SENSITIVE)
+                   || !tmppar->Last())
+                       tmppar->SetLayout(0);
+       }
+   
+       /* now we will paste the ex-footnote, if the layouts allow it */
+       /* first restore the layout of the paragraph right behind the footnote*/ 
+       if (tmppar->next) 
+               tmppar->next->MakeSameLayout(cursor.par);
+
+       /* first the end */ 
+       if ((!tmppar->GetLayout() && !tmppar->table)
+           || (tmppar->Next() && (!tmppar->Next()->Last()
+                                  || tmppar->Next()->HasSameLayout(tmppar)))) {
+               if (tmppar->Next()->Last() && tmppar->Next()->IsLineSeparator(0))
+                       tmppar->Next()->Erase(0);
+               tmppar->PasteParagraph();
+       }
+
+       tmppar = tmppar->Next();               /* make shure tmppar cannot be touched
+                                               * by the pasting of the beginning */
+
+       /* then the beginning */ 
+       /* if there is no space between the text and the footnote, so we insert
+        * a blank 
+        * (only if the previous par and the footnotepar are not empty!) */
+       if ((!firsttmppar->next->GetLayout() && !firsttmppar->next->table)
+           || firsttmppar->HasSameLayout(firsttmppar->next)) {
+               if (firsttmppar->last
+                   && !firsttmppar->IsSeparator(firsttmppar->last - 1)
+                   && first_footnote_par_is_not_empty) {
+                       firsttmppar->next->InsertChar(0, ' ');
+               }
+               firsttmppar->PasteParagraph();
+       }
+   
+       /* now redo the paragaphs */
+       RedoParagraphs(cursor, tmppar);
+   
+       SetCursor(cursor.par, cursor.pos);
+   
+       /* sometimes it can happen, that there is a counter change */ 
+       Row *row = cursor.row;
+       while (row->next && row->par != tmppar && row->next->par != tmppar)
+               row = row->next;
+       UpdateCounters(row);
+   
+   
+       ClearSelection();
+}
+
+
+/* the DTP switches for paragraphs. LyX will store them in the 
+* first physicla paragraph. When a paragraph is broken, the top settings 
+* rest, the bottom settings are given to the new one. So I can make shure, 
+* they do not duplicate themself and you cannnot make dirty things with 
+* them!  */ 
+
+void LyXText::SetParagraph(bool line_top, bool line_bottom,
+                          bool pagebreak_top, bool pagebreak_bottom,
+                          VSpace space_top, VSpace space_bottom,
+                          char align, 
+                          LString labelwidthstring,
+                          bool noindent) 
+{
+       LyXCursor tmpcursor;
+       tmpcursor = cursor;
+       LyXParagraph *tmppar;
+       if (!selection) {
+               sel_start_cursor = cursor;
+               sel_end_cursor = cursor;
+       }
+
+       // make sure that the depth behind the selection are restored, too
+       LyXParagraph *endpar = sel_end_cursor.par->LastPhysicalPar()->Next();
+       LyXParagraph *undoendpar = endpar;
+
+       if (endpar && endpar->GetDepth()) {
+               while (endpar && endpar->GetDepth()) {
+                       endpar = endpar->LastPhysicalPar()->Next();
+                       undoendpar = endpar;
+               }
+       }
+       else if (endpar) {
+               endpar = endpar->Next(); /* because of parindents etc.  */
+       }
+   
+       SetUndo(Undo::EDIT, 
+               sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->previous, 
+               undoendpar);
+
+       
+       tmppar = sel_end_cursor.par;
+       while (tmppar != sel_start_cursor.par->FirstPhysicalPar()->Previous())
+               {
+                       SetCursor(tmppar->FirstPhysicalPar(), 0);
+                       status = LyXText::NEED_MORE_REFRESH;
+                       refresh_row = cursor.row;
+                       refresh_y = cursor.y - cursor.row->baseline;
+                       if (cursor.par->footnoteflag ==
+                           sel_start_cursor.par->footnoteflag) {
+                               cursor.par->line_top = line_top;
+                               cursor.par->line_bottom = line_bottom;
+                               cursor.par->pagebreak_top = pagebreak_top;
+                               cursor.par->pagebreak_bottom = pagebreak_bottom;
+                               cursor.par->added_space_top = space_top;
+                               cursor.par->added_space_bottom = space_bottom;
+                               /* does the layout allow the new alignment? */ 
+                               if (align == LYX_ALIGN_LAYOUT)
+                                       align = lyxstyle.Style(parameters->textclass, cursor.par->GetLayout())->align;
+                               if (align & lyxstyle.Style(parameters->textclass, cursor.par->GetLayout())->alignpossible) {
+                                       if (align == lyxstyle.Style(parameters->textclass, cursor.par->GetLayout())->align)
+                                               cursor.par->align = LYX_ALIGN_LAYOUT;
+                                       else
+                                               cursor.par->align = align;
+                               }
+                               cursor.par->SetLabelWidthString(labelwidthstring);
+                               cursor.par->noindent = noindent;
+                       }
+          
+                       /* 
+                          tmprow = cursor.row;
+                          while (tmprow->next && tmprow->next->par->previous != cursor.par->LastPhysicalPar())
+                          tmprow = tmprow->next;
+                          SetHeightOfRow(tmprow);
+                          SetHeightOfRow(cursor.row); */ 
+                       tmppar = cursor.par->FirstPhysicalPar()->Previous();
+               }
+       
+       RedoParagraphs(sel_start_cursor, endpar);
+       
+       ClearSelection();
+       SetCursor(sel_start_cursor.par, sel_start_cursor.pos);
+       sel_cursor = cursor;
+       SetCursor(sel_end_cursor.par, sel_end_cursor.pos);
+       SetSelection();
+       SetCursor(tmpcursor.par, tmpcursor.pos);
+}
+
+
+void LyXText::SetParagraphExtraOpt(int type,
+                                   const char *width,
+                                   const char *widthp,
+                                   int alignment, bool hfill,
+                                   bool start_minipage)
+{
+       LyXCursor tmpcursor;
+       tmpcursor = cursor;
+       LyXParagraph *tmppar;
+       if (!selection) {
+               sel_start_cursor = cursor;
+               sel_end_cursor = cursor;
+       }
+
+       // make sure that the depth behind the selection are restored, too
+       LyXParagraph *endpar = sel_end_cursor.par->LastPhysicalPar()->Next();
+       LyXParagraph *undoendpar = endpar;
+
+       if (endpar && endpar->GetDepth()) {
+               while (endpar && endpar->GetDepth()) {
+                       endpar = endpar->LastPhysicalPar()->Next();
+                       undoendpar = endpar;
+               }
+       }
+       else if (endpar) {
+               endpar = endpar->Next(); /* because of parindents etc.  */
+       }
+   
+       SetUndo(Undo::EDIT, 
+               sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->previous, 
+               undoendpar);
+       
+       tmppar = sel_end_cursor.par;
+       while(tmppar != sel_start_cursor.par->FirstPhysicalPar()->Previous()) {
+                SetCursor(tmppar->FirstPhysicalPar(), 0);
+                status = LyXText::NEED_MORE_REFRESH;
+                refresh_row = cursor.row;
+                refresh_y = cursor.y - cursor.row->baseline;
+                if (cursor.par->footnoteflag ==
+                    sel_start_cursor.par->footnoteflag) {
+                        if (type == PEXTRA_NONE) {
+                                if (cursor.par->pextra_type != PEXTRA_NONE) {
+                                        cursor.par->UnsetPExtraType();
+                                        cursor.par->pextra_type=PEXTRA_NONE;
+                                }
+                        } else {
+                                cursor.par->SetPExtraType(type,width,widthp);
+                                cursor.par->pextra_hfill = hfill;
+                                cursor.par->pextra_start_minipage = start_minipage;
+                                cursor.par->pextra_alignment = alignment;
+                        }
+                }
+                tmppar = cursor.par->FirstPhysicalPar()->Previous();
+        }
+       RedoParagraphs(sel_start_cursor, endpar);
+       ClearSelection();
+       SetCursor(sel_start_cursor.par, sel_start_cursor.pos);
+       sel_cursor = cursor;
+       SetCursor(sel_end_cursor.par, sel_end_cursor.pos);
+       SetSelection();
+       SetCursor(tmpcursor.par, tmpcursor.pos);
+}
+
+
+static char*  alphaCounter(int n){
+  static char result[2];
+  result[1] = 0;
+  if (n == 0)
+    return "";
+  else {
+    result[0] = 64+n;
+    if (n > 26)
+      return "??";
+  }
+  return result;
+}
+
+
+/* set the counter of a paragraph. This includes the labels */ 
+void LyXText::SetCounter(LyXParagraph *par)
+{
+       int i;
+   
+       /* this is only relevant for the beginning of paragraph */ 
+       par = par->FirstPhysicalPar();
+
+       LyXLayout* layout = lyxstyle.Style(parameters->textclass, 
+                                          par->GetLayout());
+
+       LyXTextClass *textclass = lyxstyle.TextClass(parameters->textclass);
+
+       /* copy the prev-counters to this one, unless this is the start of a 
+          footnote or of a bibliography or the very first paragraph */
+       if (par->Previous()
+           && !(par->Previous()->footnoteflag == LyXParagraph::NO_FOOTNOTE 
+                   && par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
+                   && par->footnotekind == LyXParagraph::FOOTNOTE)
+           && !(lyxstyle.Style(parameters->textclass,
+                               par->Previous()->GetLayout()
+                               )->labeltype != LABEL_BIBLIO
+                && layout->labeltype == LABEL_BIBLIO)) {
+               for (i=0; i<10; i++) {
+                       par->setCounter(i, par->Previous()->GetFirstCounter(i));
+               }
+               par->appendix = par->Previous()->FirstPhysicalPar()->appendix;
+               if (!par->appendix && par->start_of_appendix){
+                 par->appendix = true;
+                 for (i=0; i<10; i++) {
+                   par->setCounter(i, 0);
+                 }  
+               }
+               par->enumdepth = par->Previous()->FirstPhysicalPar()->enumdepth;
+               par->itemdepth = par->Previous()->FirstPhysicalPar()->itemdepth;
+       }
+       else {
+               for (i=0; i<10; i++) {
+                       par->setCounter(i, 0);
+               }  
+               par->appendix = par->start_of_appendix;
+               par->enumdepth = 0;
+               par->itemdepth = 0;
+       }
+
+        // if this is an open marginnote and this is the first
+        // entry in the marginnote and the enclosing
+        // environment is an enum/item then correct for the
+        // LaTeX behaviour (ARRae)
+        if(par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
+          && par->footnotekind == LyXParagraph::MARGIN
+           && par->Previous()
+           && par->Previous()->footnoteflag != LyXParagraph::OPEN_FOOTNOTE
+           && (par->PreviousBeforeFootnote()
+               && lyxstyle.Style(parameters->textclass,
+                                 par->PreviousBeforeFootnote()->GetLayout()
+                                )->labeltype >= LABEL_COUNTER_ENUMI)) {
+                // Any itemize or enumerate environment in a marginnote
+                // that is embedded in an itemize or enumerate
+                // paragraph is seen by LaTeX as being at a deeper
+                // level within that enclosing itemization/enumeration
+                // even if there is a "standard" layout at the start of
+                // the marginnote.
+                par->enumdepth++;
+                par->itemdepth++;
+        }
+
+       /* Maybe we have to increment the enumeration depth.
+        * BUT, enumeration in a footnote is considered in isolation from its
+        *      surrounding paragraph so don't increment if this is the
+        *      first line of the footnote
+        * AND, bibliographies can't have their depth changed ie. they
+        *      are always of depth 0
+        */
+       if (par->Previous()
+           && par->Previous()->GetDepth() < par->GetDepth()
+           && lyxstyle.Style(parameters->textclass,
+                             par->Previous()->GetLayout()
+                            )->labeltype == LABEL_COUNTER_ENUMI
+           && par->enumdepth < 3
+           && !(par->Previous()->footnoteflag == LyXParagraph::NO_FOOTNOTE 
+                   && par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
+                   && par->footnotekind == LyXParagraph::FOOTNOTE)
+           && layout->labeltype != LABEL_BIBLIO) {
+               par->enumdepth++;
+       }
+
+       /* Maybe we have to decrement the enumeration depth, see note above */
+       if (par->Previous()
+           && par->Previous()->GetDepth() > par->GetDepth()
+           && !(par->Previous()->footnoteflag == LyXParagraph::NO_FOOTNOTE
+                   && par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
+                   && par->footnotekind == LyXParagraph::FOOTNOTE)
+           && layout->labeltype != LABEL_BIBLIO) {
+               par->enumdepth = par->DepthHook(par->GetDepth())->enumdepth;
+               par->setCounter(6 + par->enumdepth,
+                       par->DepthHook(par->GetDepth())->getCounter(6 + par->enumdepth));
+               /* reset the counters.
+                * A depth change is like a breaking layout
+                */
+               for (i=6 + par->enumdepth + 1; i<10;i++)
+                       par->setCounter(i, 0);
+       }
+   
+       if (!par->labelstring.empty()) {
+               par->labelstring.clean();
+       }
+   
+       if (layout->margintype == MARGIN_MANUAL) {
+               if (par->labelwidthstring.empty()) {
+                       par->SetLabelWidthString(layout->labelstring);
+               }
+       }
+       else {
+               par->SetLabelWidthString(LString());
+       }
+   
+       /* is it a layout that has an automatic label ? */ 
+       if (layout->labeltype >=  LABEL_FIRST_COUNTER) {
+      
+               i = layout->labeltype - LABEL_FIRST_COUNTER;
+               if (i>=0 && i<=parameters->secnumdepth) {
+                       par->incCounter(i);     // increment the counter  
+        
+                       char * s = new char[50];
+
+                       // Is there a label? Useful for Chapter layout
+                       if (!par->appendix){
+                               if (!layout->labelstring.empty())
+                                       par->labelstring = layout->labelstring;
+                               else
+                                       par->labelstring.clean();
+                        }
+                       else {
+                               if (!layout->labelstring_appendix.empty())
+                                       par->labelstring = layout->labelstring_appendix;
+                               else
+                                       par->labelstring.clean();
+                       }
+                       if (!par->appendix){
+                               switch (2 * LABEL_FIRST_COUNTER -
+                                       textclass->maxcounter + i) {
+                               case LABEL_COUNTER_CHAPTER:
+                                       sprintf(s, "%d",
+                                               par->getCounter(i));
+                                       break;
+                               case LABEL_COUNTER_SECTION:
+                                       sprintf(s, "%d.%d",
+                                               par->getCounter(i - 1),
+                                               par->getCounter(i));
+                                       break;
+                               case LABEL_COUNTER_SUBSECTION:
+                                       sprintf(s, "%d.%d.%d",
+                                               par->getCounter(i-2),
+                                               par->getCounter(i-1),
+                                               par->getCounter(i));
+                                       break;
+                               case LABEL_COUNTER_SUBSUBSECTION:
+                                       sprintf(s, "%d.%d.%d.%d",
+                                               par->getCounter(i-3),
+                                               par->getCounter(i-2),
+                                               par->getCounter(i-1),
+                                               par->getCounter(i));
+                                       break;
+                               case LABEL_COUNTER_PARAGRAPH:
+                                       sprintf(s, "%d.%d.%d.%d.%d",
+                                               par->getCounter(i-4),
+                                               par->getCounter(i-3),
+                                               par->getCounter(i-2),
+                                               par->getCounter(i-1),
+                                               par->getCounter(i));
+                                       break;
+                               case LABEL_COUNTER_SUBPARAGRAPH:
+                                       sprintf(s, "%d.%d.%d.%d.%d.%d",
+                                               par->getCounter(i-5),
+                                               par->getCounter(i-4),
+                                               par->getCounter(i-3),
+                                               par->getCounter(i-2),
+                                               par->getCounter(i-1),
+                                               par->getCounter(i));
+                                       break;
+                               default:
+                                       sprintf(s, "%d.", par->getCounter(i));
+                                        break;
+                               }
+                       }
+                       else {
+                               switch (2 * LABEL_FIRST_COUNTER - textclass->maxcounter+ i) {
+                               case LABEL_COUNTER_CHAPTER:
+                                       sprintf(s, "%s",
+                                               alphaCounter(par->getCounter(i)));
+                                       break;
+                               case LABEL_COUNTER_SECTION:
+                                       sprintf(s, "%s.%d",
+                                               alphaCounter(par->getCounter(i - 1)),
+                                               par->getCounter(i));
+                                       break;
+                               case LABEL_COUNTER_SUBSECTION:
+                                       sprintf(s, "%s.%d.%d",
+                                               alphaCounter(par->getCounter(i-2)),
+                                               par->getCounter(i-1),
+                                               par->getCounter(i));
+                                       break;
+                               case LABEL_COUNTER_SUBSUBSECTION:
+                                       sprintf(s, "%s.%d.%d.%d",
+                                               alphaCounter(par->getCounter(i-3)),
+                                               par->getCounter(i-2),
+                                               par->getCounter(i-1),
+                                               par->getCounter(i));
+                                       break;
+                               case LABEL_COUNTER_PARAGRAPH:
+                                       sprintf(s, "%s.%d.%d.%d.%d",
+                                               alphaCounter(par->getCounter(i-4)),
+                                               par->getCounter(i-3),
+                                               par->getCounter(i-2),
+                                               par->getCounter(i-1),
+                                               par->getCounter(i));
+                                       break;
+                               case LABEL_COUNTER_SUBPARAGRAPH:
+                                       sprintf(s, "%s.%d.%d.%d.%d.%d",
+                                               alphaCounter(par->getCounter(i-5)),
+                                               par->getCounter(i-4),
+                                               par->getCounter(i-3),
+                                               par->getCounter(i-2),
+                                               par->getCounter(i-1),
+                                               par->getCounter(i));
+                                       break;
+                               default:
+                                       sprintf(s, "%c.", par->getCounter(i));
+                                       break;
+                               }
+                       }
+        
+                       par->labelstring += s;
+                       delete[] s;
+        
+                       for (i++; i<10; i++) {
+                               /* reset the following counters  */
+                               par->setCounter(i, 0);
+                       }
+               } else if (layout->labeltype < LABEL_COUNTER_ENUMI) {
+                       for (i++; i<10; i++) {
+                               /* reset the following counters  */
+                               par->setCounter(i, 0);
+                       }
+               } else if (layout->labeltype == LABEL_COUNTER_ENUMI) {
+                       par->incCounter(i + par->enumdepth);
+                       char * s = new char[25];
+                       int number = par->getCounter(i + par->enumdepth);
+                       switch (par->enumdepth) {
+                       case 1:
+                               sprintf(s, "(%c)", (number % 27) + 'a' - 1);
+                               break;
+                       case 2:
+                               switch (number) {
+                               case 1: sprintf(s, "i."); break;
+                               case 2: sprintf(s, "ii."); break;
+                               case 3: sprintf(s, "iii."); break;
+                               case 4: sprintf(s, "iv."); break;
+                               case 5: sprintf(s, "v."); break;
+                               case 6: sprintf(s, "vi."); break;
+                               case 7: sprintf(s, "vii."); break;
+                               case 8: sprintf(s, "viii."); break;
+                               case 9: sprintf(s, "ix."); break;
+                               case 10: sprintf(s, "x."); break;
+                               case 11: sprintf(s, "xi."); break;
+                               case 12: sprintf(s, "xii."); break;
+                               case 13: sprintf(s, "xiii."); break;
+                               default:
+                                       sprintf(s, "\\roman{%d}.", number);
+                                       break;
+                               }
+                               break;
+                       case 3:
+                               sprintf(s, "%c.", (number % 27) + 'A' - 1);
+                               break;
+                       default:
+                               sprintf(s, "%d.", number);
+                               break;
+                       }
+                       par->labelstring = s;
+                       delete[] s;
+
+                       for (i += par->enumdepth + 1;i<10;i++)
+                               par->setCounter(i, 0);  /* reset the following counters  */
+        
+               } 
+       } else if (layout->labeltype == LABEL_BIBLIO) {// ale970302
+           i = LABEL_COUNTER_ENUMI - LABEL_FIRST_COUNTER + par->enumdepth;
+           par->incCounter(i);
+           int number = par->getCounter(i);
+           if (!par->bibkey)
+             par->bibkey = new InsetBibKey();
+           par->bibkey->setCounter(number);
+           par->labelstring = layout->labelstring;
+           
+           // In biblio should't be following counters but...
+       }                                               
+       else  {
+               LString s = layout->labelstring;
+      
+               /* the caption hack: */
+      
+               if (layout->labeltype == LABEL_SENSITIVE) {
+                       if (par->footnoteflag != LyXParagraph::NO_FOOTNOTE
+                           && (par->footnotekind == LyXParagraph::FIG
+                           || par->footnotekind == LyXParagraph::WIDE_FIG))
+                               s = "Figure:";
+                       else if (par->footnoteflag != LyXParagraph::NO_FOOTNOTE
+                                && (par->footnotekind == LyXParagraph::TAB
+                                || par->footnotekind == LyXParagraph::WIDE_TAB))
+                               s = "Table:";
+                       else if (par->footnoteflag != LyXParagraph::NO_FOOTNOTE
+                                && par->footnotekind == LyXParagraph::ALGORITHM)
+                               s = "Algorithm:";
+                       else {
+                               /* par->SetLayout(0); 
+                                  s = layout->labelstring;  */
+                               s = "Senseless: "; 
+          
+                       }
+               }
+               par->labelstring = s;
+      
+               /* reset the enumeration counter. They are always resetted
+                * when there is any other layout between */ 
+               for (i=6 + par->enumdepth; i<10;i++)
+                       par->setCounter(i, 0);
+       }
+}
+
+
+/* Updates all counters BEHIND the row. Changed paragraphs
+* with a dynamic left margin will be rebroken. */ 
+void LyXText::UpdateCounters(Row *row)
+{
+       LyXParagraph *par;
+       if (!row) {
+               row = firstrow;
+               par = row->par;
+       }
+       else {
+               if (row->par->next && row->par->next->footnoteflag != LyXParagraph::OPEN_FOOTNOTE) {
+                       par = row->par->LastPhysicalPar()->Next();
+               } else {
+                       par = row->par->next;
+               }
+       }
+
+       while (par) {
+               while (row->par != par)
+                       row = row->next;
+      
+               SetCounter(par);
+      
+               /* now  check for the headline layouts. remember that they
+                * have a dynamic left margin */ 
+               if (!par->IsDummy()
+                   && ( lyxstyle.Style(parameters->textclass, par->layout)->margintype == MARGIN_DYNAMIC
+                        || lyxstyle.Style(parameters->textclass, par->layout)->labeltype == LABEL_SENSITIVE)
+                       ){
+        
+                       /* Rebreak the paragraph */ 
+                       RemoveParagraph(row);
+                       AppendParagraph(row);
+       
+                       /* think about the damned open footnotes! */ 
+                       while (par->Next() &&
+                              (par->Next()->footnoteflag == LyXParagraph::OPEN_FOOTNOTE
+                               || par->Next()->IsDummy())){
+                               par = par->Next();
+                               if (par->IsDummy()) {
+                                       while (row->par != par)
+                                               row = row->next;
+                                       RemoveParagraph(row);
+                                       AppendParagraph(row);
+                               }
+                       }
+               }
+     
+               par = par->LastPhysicalPar()->Next();
+     
+       }
+}
+
+
+/* insets an inset. */ 
+void LyXText::InsertInset(Inset *inset)
+{
+       SetUndo(Undo::INSERT, 
+               cursor.par->ParFromPos(cursor.pos)->previous, 
+               cursor.par->ParFromPos(cursor.pos)->next);
+       cursor.par->InsertChar(cursor.pos, LYX_META_INSET);
+       cursor.par->InsertInset(cursor.pos, inset);
+       InsertChar(LYX_META_INSET);  /* just to rebreak and refresh correctly.
+                                     * The character will not be inserted a
+                                     * second time */
+}
+
+
+/* this is for the simple cut and paste mechanism */ 
+static LyXParagraph *simple_cut_buffer = NULL;
+static char simple_cut_buffer_textclass = 0;
+
+void DeleteSimpleCutBuffer()
+{
+       if (!simple_cut_buffer)
+               return;
+       LyXParagraph *tmppar;
+
+       while (simple_cut_buffer) {
+               tmppar =  simple_cut_buffer;
+               simple_cut_buffer = simple_cut_buffer->next;
+               delete tmppar;
+       }
+       simple_cut_buffer = NULL;
+}
+
+
+void LyXText::copyEnvironmentType()
+{
+       copylayouttype = cursor.par->GetLayout();
+}
+
+
+void LyXText::pasteEnvironmentType()
+{
+       SetLayout(copylayouttype);
+}
+
+
+void LyXText::CutSelection(bool doclear)
+{
+       /* This doesn't make sense, if there is no selection */ 
+       if (!selection) {
+               return;
+       }
+   
+       /* OK, we have a selection. This is always between sel_start_cursor
+        * and sel_end cursor */
+       LyXParagraph *tmppar;
+       int i;
+   
+       /* Check whether there are half footnotes in the selection */
+       if (sel_start_cursor.par->footnoteflag != LyXParagraph::NO_FOOTNOTE
+           || sel_end_cursor.par->footnoteflag != LyXParagraph::NO_FOOTNOTE){
+               tmppar = sel_start_cursor.par;
+               while (tmppar != sel_end_cursor.par){
+                       if (tmppar->footnoteflag != sel_end_cursor.par->footnoteflag){
+                               WriteAlert(_("Impossible operation"), _("Don't know what to do with half floats."), _("sorry."));
+                               return;
+                       }
+                       tmppar = tmppar->Next();
+               }
+       }
+
+       /* table stuff -- begin*/
+       if (sel_start_cursor.par->table || sel_end_cursor.par->table){
+               if ( sel_start_cursor.par != sel_end_cursor.par){
+                       WriteAlert(_("Impossible operation"), _("Don't know what to do with half tables."), _("sorry."));
+                       return;
+               }
+               sel_start_cursor.par->table->Reinit();
+       }
+       /* table stuff -- end*/
+
+       // make sure that the depth behind the selection are restored, too
+       LyXParagraph *endpar = sel_end_cursor.par->LastPhysicalPar()->Next();
+       LyXParagraph *undoendpar = endpar;
+
+       if (endpar && endpar->GetDepth()) {
+               while (endpar && endpar->GetDepth()) {
+                       endpar = endpar->LastPhysicalPar()->Next();
+                       undoendpar = endpar;
+               }
+       }
+       else if (endpar) {
+               endpar = endpar->Next();               /* because of parindents etc.  */
+       }
+   
+       SetUndo(Undo::DELETE, 
+               sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->previous, 
+               undoendpar);
+   
+       /* delete the simple_cut_buffer */ 
+       DeleteSimpleCutBuffer();
+   
+       /* set the textclass */
+       simple_cut_buffer_textclass = parameters->textclass;
+
+#ifdef WITH_WARNINGS
+#warning Asger: Make cut more intelligent here.
+#endif
+/* 
+White paper for "intelligent" cutting:
+
+Example: "This is our text."
+Using " our " as selection, cutting will give "This istext.".
+Using "our" as selection, cutting will give "This is text.".
+Using " our" as selection, cutting will give "This is text.".
+Using "our " as selection, cutting will give "This is text.".
+
+All those four selections will (however) paste identically:
+Pasting with the cursor right after the "is" will give the
+original text with all four selections.
+
+The rationale is to be intelligent such that words are copied,
+cut and pasted in a functional manner.
+
+This is not implemented yet.
+*/
+
+       char space_wrapped =
+               sel_end_cursor.par->IsLineSeparator(sel_end_cursor.pos);
+       if (sel_end_cursor.pos > 0
+           && sel_end_cursor.par->IsLineSeparator(sel_end_cursor.pos - 1)) {
+               sel_end_cursor.pos--;  /* please break before a space at
+                                       * the end */
+               space_wrapped = True;
+       }
+
+       // cut behind a space if there is one
+       while (sel_start_cursor.par->Last() > sel_start_cursor.pos
+              && sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos)
+              && (sel_start_cursor.par != sel_end_cursor.par
+                  || sel_start_cursor.pos < sel_end_cursor.pos))
+               sel_start_cursor.pos++; 
+   
+       /* there are two cases: cut only within one paragraph or
+        * more than one paragraph */
+   
+       if (sel_start_cursor.par->ParFromPos(sel_start_cursor.pos) 
+           == sel_end_cursor.par->ParFromPos(sel_end_cursor.pos)) {
+               /* only within one paragraph */
+               simple_cut_buffer = new LyXParagraph();
+               for (i=sel_start_cursor.pos; i< sel_end_cursor.pos; i++){
+                       /* table stuff -- begin*/
+                       if (sel_start_cursor.par->table
+                           && sel_start_cursor.par->IsNewline(sel_start_cursor.pos)){
+                               sel_start_cursor.par->CopyIntoMinibuffer(sel_start_cursor.pos);
+                               sel_start_cursor.pos++;
+                       } else {
+                               /* table stuff -- end*/
+                               sel_start_cursor.par->CopyIntoMinibuffer(sel_start_cursor.pos);
+                               sel_start_cursor.par->Erase(sel_start_cursor.pos);
+                       }
+                       simple_cut_buffer->InsertFromMinibuffer(simple_cut_buffer->Last());
+               }
+               /* check for double spaces */
+               if (sel_start_cursor.pos &&
+                   sel_start_cursor.par->Last()>sel_start_cursor.pos &&
+                   sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos - 1) &&
+                   sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos)){
+                       sel_start_cursor.par->Erase(sel_start_cursor.pos);
+               }
+               if (space_wrapped)
+                       simple_cut_buffer->InsertChar(i - sel_start_cursor.pos, ' ');
+               endpar = sel_end_cursor.par->Next();
+       }
+       else {
+               /* cut more than one paragraph */ 
+   
+               sel_end_cursor.par->BreakParagraphConservative(sel_end_cursor.pos);
+               /* insert a space at the end if there was one */
+               if (space_wrapped)
+                       sel_end_cursor.par->InsertChar(sel_end_cursor.par->Last(), ' ');
+   
+               sel_end_cursor.par = sel_end_cursor.par->Next();
+               sel_end_cursor.pos = 0;
+   
+               cursor = sel_end_cursor;
+   
+               /* please break behind a space, if there is one. The space should
+                * be copied too */ 
+               if (sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos))
+                       sel_start_cursor.pos++;
+   
+               sel_start_cursor.par->BreakParagraphConservative(sel_start_cursor.pos);
+               if (!sel_start_cursor.pos
+                   || sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos - 1)
+                   || sel_start_cursor.par->IsNewline(sel_start_cursor.pos - 1)) {
+                       sel_start_cursor.par->Next()->InsertChar(0, ' ');
+               }
+   
+               /* store the endparagraph for redoing later */
+               endpar = sel_end_cursor.par->Next();   /* needed because
+                                                       * the sel_end_
+                                                       * cursor.par
+                                                       * will be pasted!*/
+   
+               /*store the selection */ 
+               simple_cut_buffer = sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->next;
+               simple_cut_buffer->previous = NULL;
+               sel_end_cursor.par->previous->next = NULL;
+
+               /* cut the selection */ 
+               sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->next 
+                       = sel_end_cursor.par;
+   
+               sel_end_cursor.par->previous 
+                       = sel_start_cursor.par->ParFromPos(sel_start_cursor.pos);
+
+               /* care about footnotes */
+               if (simple_cut_buffer->footnoteflag) {
+                       LyXParagraph *tmppar = simple_cut_buffer;
+                       while (tmppar){
+                               tmppar->footnoteflag = LyXParagraph::NO_FOOTNOTE;
+                               tmppar = tmppar->next;
+                       }
+               }
+
+               /* the cut selection should begin with standard layout */
+               simple_cut_buffer->Clear(); 
+   
+               /* paste the paragraphs again, if possible  */
+               if (doclear)
+                       sel_start_cursor.par->Next()->ClearParagraph();
+               if (sel_start_cursor.par->FirstPhysicalPar()->HasSameLayout(sel_start_cursor.par->Next())
+                   || 
+                   !sel_start_cursor.par->Next()->Last())
+                       sel_start_cursor.par->ParFromPos(sel_start_cursor.pos)->PasteParagraph();
+
+   
+               /* maybe a forgotten blank */
+               if (sel_start_cursor.pos 
+                   && sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos)
+                   && sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos - 1)) {
+                       sel_start_cursor.par->Erase(sel_start_cursor.pos);
+               }
+       }   
+
+
+       /* sometimes necessary */
+       if (doclear)
+               sel_start_cursor.par->ClearParagraph();
+
+       RedoParagraphs(sel_start_cursor, endpar);
+   
+       ClearSelection();
+       cursor = sel_start_cursor;
+       SetCursor(cursor.par, cursor.pos);
+       sel_cursor = cursor;
+       UpdateCounters(cursor.row);
+}
+
+    
+void LyXText::CopySelection()
+{
+       int i=0;
+   
+       /* this doesnt make sense, if there is no selection */ 
+       if (!selection) {
+               return;
+       }
+
+       /* ok we have a selection. This is always between sel_start_cursor
+        * and sel_end cursor */
+       LyXParagraph *tmppar;
+   
+       /* check wether there are half footnotes in the selection */
+       if (sel_start_cursor.par->footnoteflag != LyXParagraph::NO_FOOTNOTE
+           || sel_end_cursor.par->footnoteflag != LyXParagraph::NO_FOOTNOTE){
+               tmppar = sel_start_cursor.par;
+               while (tmppar != sel_end_cursor.par){
+                       if (tmppar->footnoteflag != sel_end_cursor.par->footnoteflag){
+                               WriteAlert(_("Impossible operation"), _("Don't know what to do with half floats."), _("sorry."));
+                               return;
+                       }
+                       tmppar = tmppar->Next();
+               }
+       }
+
+       /* table stuff -- begin*/
+       if (sel_start_cursor.par->table || sel_end_cursor.par->table){
+               if ( sel_start_cursor.par != sel_end_cursor.par){
+                       WriteAlert(_("Impossible operation"), _("Don't know what to do with half tables."), _("sorry."));
+                       return;
+               }
+       }
+       /* table stuff -- end*/
+   
+       /* delete the simple_cut_buffer */ 
+       DeleteSimpleCutBuffer();
+
+       /* set the textclass */
+       simple_cut_buffer_textclass = parameters->textclass;
+
+       // copy behind a space if there is one
+       while (sel_start_cursor.par->Last() > sel_start_cursor.pos
+              && sel_start_cursor.par->IsLineSeparator(sel_start_cursor.pos)
+              && (sel_start_cursor.par != sel_end_cursor.par
+                  || sel_start_cursor.pos < sel_end_cursor.pos))
+               sel_start_cursor.pos++; 
+
+       /* there are two cases: copy only within one paragraph or more than one paragraph */
+       if (sel_start_cursor.par->ParFromPos(sel_start_cursor.pos) 
+           == sel_end_cursor.par->ParFromPos(sel_end_cursor.pos)) {
+               /* only within one paragraph */
+               simple_cut_buffer = new LyXParagraph();
+               for (i=sel_start_cursor.pos; i< sel_end_cursor.pos; i++){
+                       sel_start_cursor.par->CopyIntoMinibuffer(i);
+                       simple_cut_buffer->InsertFromMinibuffer(i - sel_start_cursor.pos);
+               }
+       }
+       else {
+               /* copy more than one paragraph */ 
+               /* clone the paragraphs within the selection*/
+               tmppar = sel_start_cursor.par->ParFromPos(sel_start_cursor.pos);
+               simple_cut_buffer = tmppar->Clone();
+               LyXParagraph *tmppar2 = simple_cut_buffer;
+     
+               while (tmppar != sel_end_cursor.par->ParFromPos(sel_end_cursor.pos)
+                      && tmppar->next) {
+                       tmppar = tmppar->next;
+                       tmppar2->next = tmppar->Clone();
+                       tmppar2->next->previous = tmppar2;
+                       tmppar2=tmppar2->next;
+               }
+               tmppar2->next = NULL;
+
+               /* care about footnotes */
+               if (simple_cut_buffer->footnoteflag) {
+                       tmppar = simple_cut_buffer;
+                       while (tmppar){
+                               tmppar->footnoteflag = LyXParagraph::NO_FOOTNOTE;
+                               tmppar = tmppar->next;
+                       }
+               }
+     
+               /* the simple_cut_buffer paragraph is too big */
+               int tmpi2;
+
+               tmpi2 = sel_start_cursor.par->PositionInParFromPos(sel_start_cursor.pos);
+               for (;tmpi2;tmpi2--)
+                       simple_cut_buffer->Erase(0);
+
+               /* now tmppar 2 is too big, delete all after sel_end_cursor.pos */
+     
+               tmpi2 = sel_end_cursor.par->PositionInParFromPos(sel_end_cursor.pos);
+               while (tmppar2->last > tmpi2) {
+                       tmppar2->Erase(tmppar2->last-1);
+               }
+
+       }
+}
+          
+
+void LyXText::PasteSelection()
+{
+       /* this does not make sense, if there is nothing to paste */ 
+       if (!simple_cut_buffer)
+               return;
+
+       LyXParagraph *tmppar;
+       LyXParagraph *endpar;
+
+       LyXCursor tmpcursor;
+
+       /* be carefull with footnotes in footnotes */ 
+       if (cursor.par->footnoteflag != LyXParagraph::NO_FOOTNOTE) {
+      
+               /* check whether the cut_buffer includes a footnote */
+               tmppar = simple_cut_buffer;
+               while (tmppar && tmppar->footnoteflag == LyXParagraph::NO_FOOTNOTE)
+                       tmppar = tmppar->next;
+      
+               if (tmppar) {
+                       WriteAlert(_("Impossible operation"),
+                                  _("Can't paste float into float!"), _("Sorry."));
+                       return;
+               }
+       }
+
+       /* table stuff -- begin*/
+       if (cursor.par->table){
+               if (simple_cut_buffer->next){
+                       WriteAlert(_("Impossible operation"),
+                                  _("Table cell cannot include more than one paragraph!"),
+                                  _("Sorry."));
+                       return;
+               }
+       }
+       /* table stuff -- end*/
+   
+       SetUndo(Undo::INSERT, 
+               cursor.par->ParFromPos(cursor.pos)->previous, 
+               cursor.par->ParFromPos(cursor.pos)->next); 
+
+       tmpcursor = cursor;
+
+       /* There are two cases: cutbuffer only one paragraph or many */
+       if (!simple_cut_buffer->next) {
+               /* only within a paragraph */
+     
+               /* please break behind a space, if there is one */
+               while (tmpcursor.par->Last() > tmpcursor.pos
+                      && tmpcursor.par->IsLineSeparator(tmpcursor.pos))
+                       tmpcursor.pos++; 
+
+               tmppar = simple_cut_buffer->Clone();
+               /* table stuff -- begin*/
+               bool table_too_small = false;
+               if (tmpcursor.par->table) {
+                       while (simple_cut_buffer->last && !table_too_small){
+                               if (simple_cut_buffer->IsNewline(0)){
+                                       while(tmpcursor.pos < tmpcursor.par->Last() && !tmpcursor.par->IsNewline(tmpcursor.pos))
+                                               tmpcursor.pos++;
+                                       simple_cut_buffer->Erase(0);
+                                       if (tmpcursor.pos < tmpcursor.par->Last())
+                                               tmpcursor.pos++;
+                                       else
+                                               table_too_small = true;
+                               } else {
+                                       simple_cut_buffer->CutIntoMinibuffer(0);
+                                       simple_cut_buffer->Erase(0);
+                                       tmpcursor.par->InsertFromMinibuffer(tmpcursor.pos);
+                                       tmpcursor.pos++;
+                               }
+                       }
+               } else {
+                       /* table stuff -- end*/
+                       while (simple_cut_buffer->last){
+                               simple_cut_buffer->CutIntoMinibuffer(0);
+                               simple_cut_buffer->Erase(0);
+                               tmpcursor.par->InsertFromMinibuffer(tmpcursor.pos);
+                               tmpcursor.pos++;
+                       }
+               }
+
+               delete simple_cut_buffer;
+               simple_cut_buffer = tmppar;
+               endpar = tmpcursor.par->Next();
+       } else {
+               /* many paragraphs */
+
+               /* make a copy of the simple cut_buffer */
+               tmppar = simple_cut_buffer;
+               LyXParagraph *simple_cut_clone = tmppar->Clone();
+               LyXParagraph *tmppar2 = simple_cut_clone;
+               if (cursor.par->footnoteflag){
+                       tmppar->footnoteflag = cursor.par->footnoteflag;
+                       tmppar->footnotekind = cursor.par->footnotekind;
+               }
+               while (tmppar->next) {
+                       tmppar = tmppar->next;
+                       tmppar2->next = tmppar->Clone();
+                       tmppar2->next->previous = tmppar2;
+                       tmppar2=tmppar2->next;
+                       if (cursor.par->footnoteflag){
+                               tmppar->footnoteflag = cursor.par->footnoteflag;
+                               tmppar->footnotekind = cursor.par->footnotekind;
+                       }
+               }
+     
+               /* make sure there is no class difference */ 
+               SwitchLayoutsBetweenClasses(simple_cut_buffer_textclass,
+                                           parameters->textclass,
+                                           simple_cut_buffer);
+     
+               /* make the simple_cut_buffer exactly the same layout than
+                  the cursor paragraph */
+               simple_cut_buffer->MakeSameLayout(cursor.par);
+     
+               /* find the end of the buffer */ 
+               LyXParagraph *lastbuffer = simple_cut_buffer;
+               while (lastbuffer->Next())
+                       lastbuffer=lastbuffer->Next();
+     
+               /* find the physical end of the buffer */ 
+               lastbuffer = simple_cut_buffer;
+               while (lastbuffer->Next())
+                       lastbuffer=lastbuffer->Next();
+     
+               /* please break behind a space, if there is one. The space 
+                * should be copied too */
+               if (cursor.par->Last() > cursor.pos && cursor.par->IsLineSeparator(cursor.pos))
+                       cursor.pos++; 
+     
+               bool paste_the_end = false;
+
+               /* open the paragraph for inserting the simple_cut_buffer
+                  if necessary */
+               if (cursor.par->Last() > cursor.pos || !cursor.par->Next()){
+                       cursor.par->BreakParagraphConservative(cursor.pos);
+                       paste_the_end = true;
+               }
+     
+               /* be careful with double spaces */ 
+               if ((!cursor.par->Last()
+                    || cursor.par->IsLineSeparator(cursor.pos - 1)
+                    || cursor.par->IsNewline(cursor.pos - 1))
+                   && simple_cut_buffer->last
+                   && simple_cut_buffer->IsLineSeparator(0))
+                       simple_cut_buffer->Erase(0);
+     
+               /* set the end for redoing later */ 
+               endpar = cursor.par->ParFromPos(cursor.pos)->next->Next();
+     
+               /* paste it! */ 
+               lastbuffer->ParFromPos(lastbuffer->Last())->next = cursor.par->ParFromPos(cursor.pos)->next;
+               cursor.par->ParFromPos(cursor.pos)->next->previous = lastbuffer->ParFromPos(lastbuffer->Last());
+     
+               cursor.par->ParFromPos(cursor.pos)->next = simple_cut_buffer;
+               simple_cut_buffer->previous = cursor.par->ParFromPos(cursor.pos);
+   
+               if (cursor.par->ParFromPos(cursor.pos)->Next() == lastbuffer)
+                       lastbuffer = cursor.par;
+     
+               cursor.par->ParFromPos(cursor.pos)->PasteParagraph();
+     
+               /* store the new cursor position  */
+               tmpcursor.par = lastbuffer;
+               tmpcursor.pos = lastbuffer->Last();
+     
+               /* maybe some pasting */ 
+               if (lastbuffer->Next() && paste_the_end) {
+                       if (lastbuffer->Next()->HasSameLayout(lastbuffer)) {
+        
+                               /* be careful witth double spaces */ 
+                               if ((!lastbuffer->Last()
+                                    || lastbuffer->IsLineSeparator(lastbuffer->Last() - 1)
+                                    || lastbuffer->IsNewline(lastbuffer->Last() - 1))
+                                   && lastbuffer->Next()->Last()
+                                   && lastbuffer->Next()->IsLineSeparator(0))
+                                       lastbuffer->Next()->Erase(0);
+        
+                               lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph();
+        
+                       }
+                       else if (!lastbuffer->Next()->Last()) {
+                               lastbuffer->Next()->MakeSameLayout(lastbuffer);
+        
+                               /* be careful witth double spaces */ 
+                               if ((!lastbuffer->Last()
+                                    || lastbuffer->IsLineSeparator(lastbuffer->Last() - 1)
+                                    || lastbuffer->IsNewline(lastbuffer->Last() - 1))
+                                   && lastbuffer->Next()->Last()
+                                   && lastbuffer->Next()->IsLineSeparator(0))
+                                       lastbuffer->Next()->Erase(0);
+        
+                               lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph();
+        
+                       }
+                       else if (!lastbuffer->Last()) {
+                               lastbuffer->MakeSameLayout(lastbuffer->next);
+        
+                               /* be careful witth double spaces */ 
+                               if ((!lastbuffer->Last()
+                                    || lastbuffer->IsLineSeparator(lastbuffer->Last() - 1)
+                                    || lastbuffer->IsNewline(lastbuffer->Last() - 1))
+                                   && lastbuffer->Next()->Last()
+                                   && lastbuffer->Next()->IsLineSeparator(0))
+                                       lastbuffer->Next()->Erase(0);
+        
+                               lastbuffer->ParFromPos(lastbuffer->Last())->PasteParagraph();
+        
+                       }
+                       else lastbuffer->Next()->ClearParagraph();
+               }
+
+               /* restore the simple cut buffer */
+               simple_cut_buffer = simple_cut_clone;
+       }
+
+       RedoParagraphs(cursor, endpar);
+    
+       SetCursor(cursor.par, cursor.pos);
+       ClearSelection();
+   
+       sel_cursor = cursor;
+       SetCursor(tmpcursor.par, tmpcursor.pos);
+       SetSelection();
+       UpdateCounters(cursor.row);
+}
+   
+
+/* returns a pointer to the very first LyXParagraph */ 
+LyXParagraph* LyXText::FirstParagraph()
+{
+       return params->paragraph;
+}
+
+
+/* returns true if the specified string is at the specified position */
+bool LyXText::IsStringInText(LyXParagraph *par, int pos, char const* string)
+{
+       if (par) {
+               int i = 0;
+               while (pos+i < par->Last() && string[i] && 
+                      string[i]==par->GetChar(pos+i))
+               {
+                       i++;
+               }
+
+               if (!string[i])
+                       return true;
+       }
+       return false;
+}
+
+
+/* sets the selection over the number of characters of string, no check!! */
+void LyXText::SetSelectionOverString(char const* string)
+{
+       sel_cursor = cursor;
+       int i;
+       for (i=0; string[i]; i++)
+               CursorRight();
+       SetSelection();
+}
+
+
+/* simple replacing. The font of the first selected character is used */
+void LyXText::ReplaceSelectionWithString(char const* string)
+{
+       SetCursorParUndo();
+       FreezeUndo();
+
+       if (!selection) { /* create a dummy selection */
+               sel_end_cursor = cursor;
+               sel_start_cursor = cursor;
+       }
+
+       // Get font setting before we cut
+       int pos = sel_end_cursor.pos;
+       LyXFont font = sel_start_cursor.par->GetFontSettings(sel_start_cursor.pos);
+
+       // Insert the new string
+       for (int i=0; string[i];i++) {
+               sel_end_cursor.par->InsertChar(pos, string[i]);
+               sel_end_cursor.par->SetFont(pos, font);
+               pos++;
+       }
+
+       // Cut the selection
+       CutSelection();
+
+       UnFreezeUndo();
+}
+
+
+/* if the string can be found: return true and set the cursor to
+ * the new position */
+bool LyXText::SearchForward(char const* string)
+{
+       LyXParagraph *par = cursor.par;
+       int pos = cursor.pos;
+
+       while (par && !IsStringInText(par,pos,string)) {
+               if (pos<par->Last()-1)
+                       pos++;
+               else {
+                       pos = 0;
+                       par = par->Next();
+               }
+       }
+       if (par) {
+               SetCursor(par,pos);
+               return true;
+       }
+       else
+               return false;
+}
+
+
+bool LyXText::SearchBackward(char const* string)
+{
+       LyXParagraph *par = cursor.par;
+       int pos = cursor.pos;
+
+       do {
+               if (pos>0)
+                       pos--;
+               else {
+                       // We skip empty paragraphs (Asger)
+                       do {
+                               par = par->Previous();
+                               if (par)
+                                       pos = par->Last()-1;
+                       } while (par && pos<0);
+               }
+       } while (par && !IsStringInText(par,pos,string));
+  
+       if (par) {
+               SetCursor(par,pos);
+               return true;
+       }
+       else
+               return false;
+}
+
+
+/* needed to insert the selection */
+void LyXText::InsertStringA(char* string)
+{
+       LyXParagraph *par = cursor.par;
+       int pos = cursor.pos;
+       int a = 0;
+        int cell = 0;
+       LyXParagraph *endpar = cursor.par->Next();
+
+       SetCursorParUndo();
+
+       char flag = lyxstyle.Style(parameters->textclass, 
+                                  cursor.par->GetLayout())->isEnvironment();
+       /* only to be sure, should not be neccessary */ 
+       ClearSelection();
+   
+       /* insert the string, don't insert doublespace */ 
+       int i=0;
+       int i2 = 0;
+
+       for (i2=i;string[i2]&&string[i2]!='\n';i2++);
+       par->Enlarge(pos, i2 - i);
+       while (string[i]) {
+               if (string[i]!='\n') {
+                       if (string[i]==' ' && (string[i+1]!=' ')
+                           && pos && par->GetChar(pos-1)!=' ') {
+                               par->InsertChar(pos,' ');
+                               pos++;
+                       }
+                        else if (par->table) {
+                            if (string[i] == '\t') {
+                                while((pos < par->last) &&
+                                      (par->GetChar(pos) != LYX_META_NEWLINE))
+                                        pos++;
+                                if (pos < par->last)
+                                        pos++;
+                                else // no more fields to fill skip the rest
+                                        break;
+                            } else if ((string[i] != 13) &&
+                                (((unsigned char) string[i] & 127) >= ' ')) {
+                                par->InsertChar(pos,string[i]);
+                                pos++;
+                            }
+                        }
+                       else if (string[i]==' ') {
+                               par->InsertChar(pos,LYX_META_PROTECTED_SEPARATOR);
+                               pos++;
+                       }
+                       else if (string[i]=='\t') {
+                               for (a=pos; a<(pos/8+1)*8 ; a++) {
+                                       par->InsertChar(a,LYX_META_PROTECTED_SEPARATOR);
+                               }
+                               pos = a;
+                       }
+                       else if (string[i]!=13 && 
+                                // Ignore unprintables
+                                ((unsigned char) string[i] & 127) >= ' ') {
+                               par->InsertChar(pos,string[i]);
+                               pos++;
+                       }
+               } else {
+                        if (par->table) {
+                                if (!string[i+1]) {
+                                        pos++;
+                                        break;
+                                }
+                                while((pos < par->last) &&
+                                      (par->GetChar(pos) != LYX_META_NEWLINE))
+                                        pos++;
+                                pos++;
+                                cell=NumberOfCell(par,pos);
+                                while((pos < par->last) &&
+                                      !(par->table->IsFirstCell(cell))) {
+                                        while((pos < par->last) &&
+                                              (par->GetChar(pos) != LYX_META_NEWLINE))
+                                                pos++;
+                                        pos++;
+                                        cell=NumberOfCell(par,pos);
+                                }
+                                if (pos >= par->last)
+                                        // no more fields to fill skip the rest
+                                        break;
+                        } else {
+                                if (!par->last) {
+                                        par->InsertChar(pos,LYX_META_PROTECTED_SEPARATOR);
+                                        pos++;
+                                }
+                                par->BreakParagraph(pos, flag);
+                                par = par->Next();
+                                pos = 0;
+                        }
+                       for (i2=i;string[i2]&&string[i2]!='\n';i2++);
+                       par->Enlarge(pos, i2 - i);
+               }
+      
+               i++;
+       }
+   
+       RedoParagraphs(cursor,endpar);
+       SetCursor(cursor.par, cursor.pos);
+       sel_cursor = cursor;
+       SetCursor(par, pos);
+       SetSelection();
+}
+
+/* turns double-CR to single CR, others where converted into one blank and 13s 
+ * that are ignored .Double spaces are also converted into one. Spaces at
+ * the beginning of a paragraph are forbidden. tabs are converted into one
+ * space. then InsertStringA is called */ 
+void LyXText::InsertStringB(char* string)
+{
+       LyXParagraph *par = cursor.par;
+       int i=1;
+       while (string[i]) {
+               if (string[i]=='\t' && !par->table)
+                       string[i] = ' ';
+               if (string[i]==' ' && string[i+1]==' ')
+                       string[i] = 13;
+               if (string[i]=='\n' && string[i+1] && !par->table){
+                       if (string[i+1]!='\n') {
+                               if (string[i-1]!=' ')
+                                       string[i]=' ';
+                               else
+                                       string[i]= 13;
+                       }
+                       while (string[i+1] && (string[i+1]==' '
+                                              || string[i+1]=='\t'
+                                              || string[i+1]=='\n'
+                                              || string[i+1]==13)) {
+                               string[i+1]=13;
+                               i++;
+                       }
+               }
+               i++;
+       }
+       InsertStringA(string);
+}
+
+
+bool LyXText::GotoNextError()
+{
+       LyXCursor res=cursor;
+       do {
+               if (res.pos < res.par->Last()-1) {
+                       res.pos++;
+               }
+               else  {
+                       res.par=res.par->Next();
+                       res.pos = 0;
+               }
+      
+       } while (res.par && 
+                !(res.par->GetChar(res.pos)==LYX_META_INSET
+                  && res.par->GetInset(res.pos)->AutoDelete()));
+   
+       if (res.par) {
+               SetCursor(res.par, res.pos);
+               return true;
+       }
+   
+       return false;
+}
+
+
+bool LyXText::GotoNextNote()
+{
+       LyXCursor res=cursor;
+       do {
+               if (res.pos < res.par->Last()-1) {
+                       res.pos++;
+               }
+               else  {
+                       res.par=res.par->Next();
+                       res.pos = 0;
+               }
+      
+       } while (res.par && 
+                !(res.par->GetChar(res.pos)==LYX_META_INSET
+                  && res.par->GetInset(res.pos)->LyxCode()==Inset::IGNORE_CODE));
+   
+       if (res.par) {
+               SetCursor(res.par, res.pos);
+               return true;
+       }
+   
+       return false;
+}
+
+
+int LyXText::SwitchLayoutsBetweenClasses(char class1, char class2,
+                                        LyXParagraph *par)
+{
+       InsetError * new_inset = NULL;
+       int ret = 0;
+       if (!par || class1 == class2)
+               return ret;
+       par = par->FirstPhysicalPar();
+       while (par) {
+               LString name = lyxstyle.NameOfLayout(class1, par->layout);
+               int lay = lyxstyle.NumberOfLayout(class2, name);
+               if (lay == -1) // layout not found
+                       // use default layout "Stadard" (0)
+                       lay = 0;
+               par->layout = lay;
+      
+               if (name != lyxstyle.NameOfLayout(class2, par->layout)) {
+                       ret++;
+                       LString s= "Layout had to be changed from\n"
+                               + name + " to " + lyxstyle.NameOfLayout(class2, par->layout)
+                               + "\nbecause of class conversion from\n"
+                               + lyxstyle.NameOfClass(class1) + " to "
+                               + lyxstyle.NameOfClass(class2);
+                       new_inset = new InsetError(s);
+                       par->InsertChar(0, LYX_META_INSET);
+                       par->InsertInset(0, new_inset);
+               }
+      
+               par = par->next;
+       }
+       return ret;
+}
+
+
+void LyXText::CheckParagraph(LyXParagraph* par, int pos)
+{
+  
+       LyXCursor tmpcursor;
+
+       /* table stuff -- begin*/
+   
+       if (par->table) {
+               CheckParagraphInTable(par, pos);
+       }
+       else {
+               /* table stuff -- end*/
+     
+               long y = 0;
+               int z;
+     
+               Row* row = GetRow(par, pos, y);
+     
+               /* is there a break one row above */ 
+               if (row->previous && row->previous->par == row->par) {
+                       z = NextBreakPoint(row->previous, paperwidth);
+                       if ( z >= row->pos) {
+                               /* set the dimensions of the row above  */ 
+                               y -= row->previous->height;
+                               refresh_y = y;
+                               refresh_row = row->previous;
+                               status = LyXText::NEED_MORE_REFRESH;
+       
+                               BreakAgain(row->previous);
+
+                               /* set the cursor again. Otherwise dungling pointers are possible */
+                               SetCursor(cursor.par, cursor.pos);
+                               sel_cursor = cursor;
+                               return;
+                       }
+               }
+
+               int tmpheight = row->height;
+               int tmplast = RowLast(row);
+               refresh_y = y;
+               refresh_row = row;
+
+               BreakAgain(row);
+               if (row->height == tmpheight && RowLast(row) == tmplast)
+                       status = LyXText::NEED_VERY_LITTLE_REFRESH;
+               else
+                       status = LyXText::NEED_MORE_REFRESH; 
+   
+               /* check the special right address boxes */
+               if (lyxstyle.Style(parameters->textclass, par->GetLayout())->margintype == MARGIN_RIGHT_ADDRESS_BOX) {
+                       tmpcursor.par = par;
+                       tmpcursor.row = row;
+                       tmpcursor.y = y;
+                       tmpcursor.x = 0;
+                       tmpcursor.x_fix = 0;
+                       tmpcursor.pos = pos;
+                       RedoDrawingOfParagraph(tmpcursor); 
+               }
+   
+       }
+
+       /* set the cursor again. Otherwise dangling pointers are possible */
+       // also set the selection
+   
+       if (selection){
+               tmpcursor = cursor;
+               SetCursorIntern(sel_cursor.par, sel_cursor.pos);
+               sel_cursor = cursor; 
+               SetCursorIntern(sel_start_cursor.par, sel_start_cursor.pos);
+               sel_start_cursor = cursor; 
+               SetCursorIntern(sel_end_cursor.par, sel_end_cursor.pos);
+               sel_end_cursor = cursor; 
+               SetCursorIntern(last_sel_cursor.par, last_sel_cursor.pos);
+               last_sel_cursor = cursor; 
+               cursor = tmpcursor;
+       }
+       SetCursorIntern(cursor.par, cursor.pos);
+}
+
+
+/* returns 0 if inset wasn't found */
+int LyXText::UpdateInset(Inset* inset)
+{
+       int pos;
+       LyXParagraph *par;
+
+       /* first check the current paragraph */
+       pos = cursor.par->GetPositionOfInset(inset);
+       if (pos != -1){
+               CheckParagraph(cursor.par, pos);
+               return 1;
+       }
+  
+       /* check every paragraph */
+  
+       par = FirstParagraph();
+       do {
+               /* make sure the paragraph is open */
+               if (par->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE){
+                       pos = par->GetPositionOfInset(inset);
+                       if (pos != -1){
+                               CheckParagraph(par, pos);
+                               return 1;
+                       }
+               }
+               par = par->Next();
+       } while (par);
+  
+       return 0;
+}
+
+
+void LyXText::SetCursor(LyXParagraph *par, int pos)
+{
+       LyXCursor old_cursor = cursor;
+       SetCursorIntern(par, pos);
+       DeleteEmptyParagraphMechanism(old_cursor);
+}
+
+
+void LyXText::SetCursorIntern(LyXParagraph *par, int pos)
+{
+       long y;
+       Row *row;
+       int left_margin;
+       LyXParagraph *tmppar;
+   
+       /* correct the cursor position if impossible */
+       if (pos > par->Last()){
+               tmppar = par->ParFromPos(pos);
+               pos = par->PositionInParFromPos(pos);
+               par = tmppar;
+       }
+       if (par->IsDummy() && par->previous && 
+           par->previous->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE) {
+               while (par->previous && 
+                      par->previous->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE){
+                       par = par->previous ;
+               }
+               if (par->previous) {
+                       par = par->previous;
+               }
+               pos += par->last + 1;
+       }
+
+       cursor.par = par;
+       cursor.pos = pos;
+
+       /* get the cursor y position in text  */
+       row = GetRow(par, pos, y);
+       /* y is now the beginning of the cursor row */ 
+       y += row->baseline;
+       /* y is now the cursor baseline */ 
+       cursor.y = y;
+   
+       /* now get the cursors x position */
+   
+       float x;
+       float fill_separator, fill_hfill, fill_label_hfill;
+       left_margin = LabelEnd(row);
+       PrepareToPrint(row, x, fill_separator, fill_hfill, fill_label_hfill);
+       int main_body = BeginningOfMainBody(row->par);
+      
+       /* table stuff -- begin*/
+       if (row->par->table) {
+               int cell = NumberOfCell(row->par, row->pos);
+               float x_old = x;
+               x += row->par->table->GetBeginningOfTextInCell(cell);
+               for (pos = row->pos; pos < cursor.pos; pos++)  {
+                       if (row->par->IsNewline(pos)) {
+                               x = x_old + row->par->table->WidthOfColumn(cell);
+                               x_old = x;
+                               cell++;
+                               x += row->par->table->GetBeginningOfTextInCell(cell);
+                       } else {
+                               x += SingleWidth(row->par, pos);
+                       }
+               }
+       } else
+               /* table stuff -- end*/
+
+               for (pos = row->pos; pos < cursor.pos; pos++)  {
+                       if (pos && pos == main_body
+                           && !row->par->IsLineSeparator(pos - 1)) {
+                               x += GetFont(row->par, -2).stringWidth(
+                                                   lyxstyle.Style(parameters->textclass, row->par->GetLayout())->labelsep);
+                               if (x < left_margin)
+                                       x = left_margin;
+                       }
+      
+                       x += SingleWidth(row->par, pos);
+                       if (HfillExpansion(row, pos)) {
+                               if (pos >= main_body)
+                                       x += fill_hfill;
+                               else 
+                                       x += fill_label_hfill;
+                       }
+                       else if (pos >= main_body && row->par->IsSeparator(pos)) {
+                               x+= fill_separator;
+                       }
+      
+                       if (pos + 1 == main_body
+                           && row->par->IsLineSeparator(pos)) {
+                               x += GetFont(row->par, -2).stringWidth(
+                                                   lyxstyle.Style(parameters->textclass, row->par->GetLayout())->labelsep);
+                               if (row->par->IsLineSeparator(pos))
+                                       x-= SingleWidth(row->par, pos);
+                               if (x < left_margin)
+                                       x = left_margin;
+                       }
+               }
+   
+       cursor.x = int(x);
+   
+       cursor.x_fix = cursor.x;
+       cursor.row = row;
+   
+       if (cursor.pos && 
+           (cursor.pos == cursor.par->Last() || cursor.par->IsSeparator(cursor.pos)
+            || (cursor.pos && cursor.pos == BeginningOfMainBody(cursor.par)
+                && !cursor.par->IsSeparator(cursor.pos))
+                   )) {
+               current_font = cursor.par->GetFontSettings(cursor.pos - 1);
+               real_current_font = GetFont(cursor.par, cursor.pos - 1);
+       } else {
+               current_font = cursor.par->GetFontSettings(cursor.pos);
+               real_current_font = GetFont(cursor.par, cursor.pos);
+       }
+}
+
+
+void LyXText::SetCursorFromCoordinates(int x, long y)
+{
+       Row *row;
+       int column;
+
+       LyXCursor old_cursor;
+   
+       old_cursor = cursor;
+   
+       /* get the row first */ 
+   
+       row = GetRowNearY(y);
+   
+       cursor.par = row->par;
+   
+       column = GetColumnNearX(row, x);
+       cursor.pos = row->pos + column;
+       cursor.x = x;
+       cursor.y = y + row->baseline;
+   
+       cursor.row = row;
+    
+       if (cursor.pos && 
+           (cursor.pos == cursor.par->Last()
+            || cursor.par->IsSeparator(cursor.pos)
+            || (cursor.pos && cursor.pos == BeginningOfMainBody(cursor.par)
+                && !cursor.par->IsSeparator(cursor.pos))
+                   )) {
+               current_font = cursor.par->GetFontSettings(cursor.pos - 1);
+               real_current_font = GetFont(cursor.par, cursor.pos - 1);
+       } else {
+               current_font = cursor.par->GetFontSettings(cursor.pos);
+               real_current_font = GetFont(cursor.par, cursor.pos);
+       }
+       DeleteEmptyParagraphMechanism(old_cursor);
+}
+
+
+void LyXText::CursorLeft()
+{
+       CursorLeftIntern();
+        if (cursor.par->table) {
+                int cell = NumberOfCell(cursor.par, cursor.pos);
+                if (cursor.par->table->IsContRow(cell) &&
+                    cursor.par->table->CellHasContRow(cursor.par->table->GetCellAbove(cell))<0) {
+                        CursorUp();
+                }
+        }
+}
+
+
+void LyXText::CursorLeftIntern()
+{
+       if (cursor.pos > 0) {
+               SetCursor(cursor.par, cursor.pos - 1);
+       }
+       else if (cursor.par->Previous()) {
+               SetCursor(cursor.par->Previous(), cursor.par->Previous()->Last());
+       }
+}
+
+
+void LyXText::CursorRight()
+{
+       CursorRightIntern();
+        if (cursor.par->table) {
+                int cell = NumberOfCell(cursor.par, cursor.pos);
+                if (cursor.par->table->IsContRow(cell) &&
+                    cursor.par->table->CellHasContRow(cursor.par->table->GetCellAbove(cell))<0) {
+                        CursorUp();
+                }
+        }
+}
+
+
+void LyXText::CursorRightIntern()
+{
+       if (cursor.pos < cursor.par->Last()) {
+               SetCursor(cursor.par, cursor.pos + 1);
+       }
+       else if (cursor.par->Next()) {
+               SetCursor(cursor.par->Next(), 0);
+       }
+}
+
+
+void LyXText::CursorUp()
+{
+       SetCursorFromCoordinates(cursor.x_fix, 
+                                cursor.y - cursor.row->baseline - 1);
+        if (cursor.par->table) {
+                int cell = NumberOfCell(cursor.par, cursor.pos);
+                if (cursor.par->table->IsContRow(cell) &&
+                    cursor.par->table->CellHasContRow(cursor.par->table->GetCellAbove(cell))<0) {
+                        CursorUp();
+                }
+        }
+}
+
+
+void LyXText::CursorDown()
+{
+        if (cursor.par->table &&
+            cursor.par->table->ShouldBeVeryLastRow(NumberOfCell(cursor.par, cursor.pos)) &&
+            !cursor.par->next)
+                return;
+       SetCursorFromCoordinates(cursor.x_fix, 
+                                cursor.y - cursor.row->baseline
+                                + cursor.row->height + 1);
+        if (cursor.par->table) {
+                int cell = NumberOfCell(cursor.par, cursor.pos);
+                int cell_above = cursor.par->table->GetCellAbove(cell);
+                while(cursor.par->table &&
+                      cursor.par->table->IsContRow(cell) &&
+                      (cursor.par->table->CellHasContRow(cell_above)<0)) {
+                    SetCursorFromCoordinates(cursor.x_fix, 
+                                             cursor.y - cursor.row->baseline
+                                             + cursor.row->height + 1);
+                    if (cursor.par->table) {
+                        cell = NumberOfCell(cursor.par, cursor.pos);
+                        cell_above = cursor.par->table->GetCellAbove(cell);
+                    }
+                }
+        }
+}
+
+
+void LyXText::CursorUpParagraph()
+{
+       if (cursor.pos > 0) {
+               SetCursor(cursor.par, 0);
+       }
+       else if (cursor.par->Previous()) {
+               SetCursor(cursor.par->Previous(), 0);
+       }
+}
+
+
+void LyXText::CursorDownParagraph()
+{
+       if (cursor.par->Next()) {
+               SetCursor(cursor.par->Next(), 0);
+       } else {
+               SetCursor(cursor.par,cursor.par->Last());
+       }
+}
+
+
+
+void LyXText::DeleteEmptyParagraphMechanism(LyXCursor old_cursor)
+{
+    bool deleted = false;
+       
+    /* this is the delete-empty-paragraph-mechanism. */ 
+    if (selection)
+        return;
+
+    // Paragraph should not be deleted if empty
+    if ((lyxstyle.Style(parameters->textclass,
+                        old_cursor.par->GetLayout()))->keepempty)
+        return;
+
+    LyXCursor tmpcursor;
+
+    if (old_cursor.par != cursor.par) {
+        if ( (old_cursor.par->Last() == 0
+              || (old_cursor.par->Last() == 1
+                  && (old_cursor.par->IsLineSeparator(0))))
+             && old_cursor.par->FirstPhysicalPar()
+             == old_cursor.par->LastPhysicalPar()
+             //&& (
+             // impossible to insert your own \caption with
+             // this set. made it impossible to use the
+             // optional argument...
+             // also empty pars in fig or tab never was removed(?)(Lgb)
+             //lyxstyle.Style(parameters->textclass,
+//                                     old_cursor.par->GetLayout())->labeltype!=LABEL_SENSITIVE || 
+             //     (old_cursor.par->footnoteflag == LyXParagraph::NO_FOOTNOTE
+             //|| (old_cursor.par->footnotekind != LyXParagraph::FIG
+             //          && old_cursor.par->footnotekind != LyXParagraph::TAB)))
+             ) {
+                       
+            /* ok, we will delete anything */ 
+                       
+            // make sure that you do not delete any environments
+            if ((old_cursor.par->footnoteflag != LyXParagraph::OPEN_FOOTNOTE &&
+                 !(old_cursor.row->previous 
+                   && old_cursor.row->previous->par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)
+                 && !(old_cursor.row->next 
+                      && old_cursor.row->next->par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE))
+                || 
+                (old_cursor.par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE &&
+                 ((old_cursor.row->previous 
+                   && old_cursor.row->previous->par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE)
+                  || 
+                  (old_cursor.row->next
+                   && old_cursor.row->next->par->footnoteflag == LyXParagraph::OPEN_FOOTNOTE))
+                 )){
+                status = LyXText::NEED_MORE_REFRESH;
+                deleted = true;
+                               
+                if (old_cursor.row->previous) {
+                    refresh_row = old_cursor.row->previous;
+                    refresh_y = old_cursor.y - old_cursor.row->baseline - refresh_row->height;
+                    tmpcursor = cursor;
+                    cursor = old_cursor; // that undo can restore the right cursor position
+                    LyXParagraph *endpar = old_cursor.par->next;
+                    if (endpar && endpar->GetDepth()) {
+                        while (endpar && endpar->GetDepth()) {
+                            endpar = endpar->LastPhysicalPar()->Next();
+                        }
+                    }
+                    SetUndo(Undo::DELETE,
+                            old_cursor.par->previous,
+                            endpar);
+                    cursor = tmpcursor;
+
+                    /* delete old row */ 
+                    RemoveRow(old_cursor.row);
+                    if (params->paragraph == old_cursor.par) {
+                        params->paragraph = params->paragraph->next;
+                    }
+                    /* delete old par */ 
+                    delete old_cursor.par;
+                                       
+                    /* Breakagain the next par. Needed
+                     * because of the parindent that
+                     * can occur or dissappear. The
+                     * next row can change its height,
+                     * if there is another layout before */
+                    if (refresh_row->next) {
+                        BreakAgain(refresh_row->next);
+                        UpdateCounters(refresh_row);
+                    }
+                    SetHeightOfRow(refresh_row);
+                }
+                else {
+                    refresh_row = old_cursor.row->next;
+                    refresh_y = old_cursor.y - old_cursor.row->baseline;
+                                       
+                    tmpcursor = cursor;
+                    cursor = old_cursor; // that undo can restore the right cursor position
+                    LyXParagraph *endpar = old_cursor.par->next;
+                    if (endpar && endpar->GetDepth()) {
+                        while (endpar && endpar->GetDepth()) {
+                            endpar = endpar->LastPhysicalPar()->Next();
+                        }
+                    }
+                    SetUndo(Undo::DELETE,
+                            old_cursor.par->previous,
+                            endpar);
+                    cursor = tmpcursor;
+
+                    /* delete old row */ 
+                    RemoveRow(old_cursor.row);
+                    /* delete old par */ 
+                    if (params->paragraph == old_cursor.par) {
+                        params->paragraph = params->paragraph->next;
+                    }
+                    delete old_cursor.par;
+                                       
+                    /* Breakagain the next par. Needed because of
+                     * the parindent that can occur or dissappear.
+                     * The next row can change its height, if there
+                     * is another layout before */ 
+                    if (refresh_row) {
+                        BreakAgain(refresh_row);
+                        UpdateCounters(refresh_row->previous);
+                    }
+                }
+                               
+                               /* correct cursor y */
+                SetCursor(cursor.par, cursor.pos);
+                    
+                               /* if (cursor.y > old_cursor.y)
+                                  cursor.y -= old_cursor.row->height; */ 
+        
+                if (sel_cursor.par  == old_cursor.par
+                    && sel_cursor.pos == sel_cursor.pos) {
+                    /* correct selection*/ 
+                    sel_cursor = cursor;
+                }
+            }
+       
+        }
+        if (!deleted){
+            if (old_cursor.par->ClearParagraph()){
+                RedoParagraphs(old_cursor, old_cursor.par->Next());
+                               /* correct cursor y */
+                SetCursor(cursor.par, cursor.pos);
+                sel_cursor = cursor;
+            }
+        }
+    } else if (cursor.par->table && (cursor.row != old_cursor.row)) {
+        int cell = NumberOfCell(old_cursor.par, old_cursor.pos);
+        if (old_cursor.par->table->IsContRow(cell) &&
+            IsEmptyTableRow(&old_cursor)) {
+            RemoveTableRow(&old_cursor);
+            RedoParagraph();
+        }
+    }
+}
+
+
+LyXParagraph* LyXText::GetParFromID(int id)
+{
+       LyXParagraph* result = FirstParagraph();
+       while (result && result->GetID() != id)
+               result = result->next;
+       return result;
+}
+
+
+// undo functions
+bool  LyXText::TextUndo()
+{ // returns false if no undo possible
+       Undo *undo = params->undostack.Pop();
+       if (undo){
+               FinishUndo();
+               if (!undo_frozen)
+                       params->redostack.Push(CreateUndo(undo->kind, 
+                                                         GetParFromID(undo->number_of_before_par),
+                                                         GetParFromID(undo->number_of_behind_par)));
+       }
+       return TextHandleUndo(undo);
+}
+
+
+bool LyXText::TextRedo()
+{ // returns false if no redo possible
+       Undo *undo = params->redostack.Pop();
+       if (undo){
+               FinishUndo();
+               if (!undo_frozen)
+                       params->undostack.Push(CreateUndo(undo->kind, 
+                                                         GetParFromID(undo->number_of_before_par),
+                                                         GetParFromID(undo->number_of_behind_par)));
+       }
+       return TextHandleUndo(undo);
+}
+
+
+bool LyXText::TextHandleUndo(Undo* undo){ // returns false if no undo possible
+       bool result = false;
+       if (undo){
+               LyXParagraph* before = GetParFromID(undo->number_of_before_par); 
+               LyXParagraph* behind = GetParFromID(undo->number_of_behind_par); 
+               LyXParagraph* tmppar;
+               LyXParagraph* tmppar2;
+               LyXParagraph* tmppar3;
+               LyXParagraph* tmppar4;
+               LyXParagraph* endpar;
+               LyXParagraph* tmppar5;
+    
+               /*
+                 if (before){
+                 before->text[before->last] = 0;
+                 printf("before: %s\n", before->text);
+                 }
+                 if (behind){
+                 behind->text[behind->last] = 0;
+                 printf("behind: %s\n", behind->text);
+                 }
+                 */ 
+
+               // if there's no before take the beginning of the document for redoing
+               if (!before)
+                       SetCursorIntern(FirstParagraph(), 0);
+
+               // replace the paragraphs with the undo informations
+
+               tmppar3 = undo->par;
+               undo->par = NULL; // otherwise the undo destructor would delete the paragraph
+               tmppar4 = tmppar3;
+               if (tmppar4){
+                       while (tmppar4->next)
+                               tmppar4 = tmppar4->next;
+               } // get last undo par
+    
+               // now remove the old text if there is any
+               if (before != behind || (!behind && !before)){
+                       if (before)
+                               tmppar5 = before->next;
+                       else
+                               tmppar5 = params->paragraph;
+                       tmppar2 = tmppar3;
+                       while (tmppar5 && tmppar5 != behind){
+                               tmppar = tmppar5;
+                               tmppar5 = tmppar5->next;
+                               // a memory optimization for edit: Only layout information
+                               // is stored in the undo. So restore the text informations.
+                               if (undo->kind == Undo::EDIT){
+                                       tmppar2->text = tmppar->text;
+                                       tmppar->text = NULL;
+                                       tmppar2 = tmppar2->next;
+                               }
+                               if ( currentrow && currentrow->par == tmppar )
+                                       currentrow = currentrow -> previous;
+                               delete tmppar;
+                       }
+               }
+    
+               // put the new stuff in the list if there is one
+               if (tmppar3){
+                       if (before)
+                               before->next = tmppar3;
+                       else
+                               params->paragraph = tmppar3;
+                       tmppar3->previous = before;
+               }
+               else {
+                       if (!before)
+                               params->paragraph = behind;
+               }
+               if (tmppar4) {
+                       tmppar4->next = behind;
+                       if (behind)
+                               behind->previous = tmppar4;
+               }
+    
+    
+               // Set the cursor for redoing
+               if (before){
+                       SetCursorIntern(before->FirstSelfrowPar(), 0);
+                       // check wether before points to a closed float and open it if necessary
+                       if (before && before->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE
+                           && before->next && before->next->footnoteflag != LyXParagraph::NO_FOOTNOTE){
+                               tmppar4 =before;
+                               while (tmppar4->previous && 
+                                      tmppar4->previous->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE)
+                                       tmppar4 = tmppar4->previous;
+                               while (tmppar4 && tmppar4->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE){
+                                       tmppar4->footnoteflag = LyXParagraph::OPEN_FOOTNOTE;
+                                       tmppar4 = tmppar4->next;
+                               }
+                       }
+               }
+    
+               // open a cosed footnote at the end if necessary
+               if (behind && behind->previous && 
+                   behind->previous->footnoteflag != LyXParagraph::NO_FOOTNOTE &&
+                   behind->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE){
+                       while (behind && behind->footnoteflag == LyXParagraph::CLOSED_FOOTNOTE){
+                               behind->footnoteflag = LyXParagraph::OPEN_FOOTNOTE;
+                               behind = behind->next;
+                       }
+               }
+    
+               // calculate the endpar for redoing the paragraphs.
+               if (behind){
+                       if (behind->footnoteflag != LyXParagraph::CLOSED_FOOTNOTE)
+                               endpar = behind->LastPhysicalPar()->Next();
+                       else
+                               endpar = behind->NextAfterFootnote()->LastPhysicalPar()->Next();
+               }
+               else
+                       endpar = behind;
+    
+               tmppar = GetParFromID(undo->number_of_cursor_par);
+               RedoParagraphs(cursor, endpar); 
+               if (tmppar){
+                       SetCursorIntern(tmppar, undo->cursor_pos);
+                       UpdateCounters(cursor.row);
+               }
+               result = true;
+               delete undo;
+       }
+       FinishUndo();
+       return result;
+}
+
+
+void LyXText::FinishUndo()
+{ // makes sure the next operation will be stored
+       undo_finished = True;
+}
+
+
+void LyXText::FreezeUndo()
+{ // this is dangerous and for internal use only
+       undo_frozen = True;
+}
+
+
+void LyXText::UnFreezeUndo()
+{ // this is dangerous and for internal use only
+       undo_frozen = false;
+}
+
+
+void LyXText::SetUndo(Undo::undo_kind kind, LyXParagraph *before, LyXParagraph *behind)
+{
+       if (!undo_frozen)
+               params->undostack.Push(CreateUndo(kind, before, behind));
+       params->redostack.Clear();
+}
+
+
+void LyXText::SetRedo(Undo::undo_kind kind, LyXParagraph *before, LyXParagraph *behind)
+{
+       params->redostack.Push(CreateUndo(kind, before, behind));
+}
+
+
+Undo* LyXText::CreateUndo(Undo::undo_kind kind, LyXParagraph *before,
+                         LyXParagraph *behind)
+{
+       int before_number = -1;
+       int behind_number = -1;
+       if (before)
+               before_number = before->GetID();
+       if (behind)
+               behind_number = behind->GetID();
+       // Undo::EDIT  and Undo::FINISH are
+       // always finished. (no overlapping there)
+       // overlapping only with insert and delete inside one paragraph: 
+       // Nobody wants all removed  character
+       // appear one by one when undoing. 
+       // EDIT is special since only layout information, not the
+       // contents of a paragaph are stored.
+       if (!undo_finished && kind != Undo::EDIT && 
+           kind != Undo::FINISH){
+               // check wether storing is needed
+               if (params->undostack.Top() && 
+                   params->undostack.Top()->kind == kind &&
+                   params->undostack.Top()->number_of_before_par ==  before_number &&
+                   params->undostack.Top()->number_of_behind_par ==  behind_number ){
+                       // no undo needed
+                       return NULL;
+               }
+       }
+       // create a new Undo
+       LyXParagraph* undopar;
+       LyXParagraph* tmppar;
+       LyXParagraph *tmppar2;
+
+       LyXParagraph* start = NULL;
+       LyXParagraph* end = NULL;
+  
+       if (before)
+               start = before->next;
+       else
+               start = FirstParagraph();
+       if (behind)
+               end = behind->previous;
+       else {
+               end = FirstParagraph();
+               while (end->next)
+                       end = end->next;
+       }
+
+       if (start && end && start != end->next && (before != behind || (!before && !behind))) {
+               tmppar = start;
+               tmppar2 = tmppar->Clone();
+               tmppar2->SetID(tmppar->GetID());
+
+               // a memory optimization: Just store the layout information when only edit
+               if (kind == Undo::EDIT){
+                       if (tmppar2->text)
+                               delete[] tmppar2->text;
+                       tmppar2->text = NULL;
+               }
+
+               undopar = tmppar2;
+  
+               while (tmppar != end && tmppar->next) {
+                       tmppar = tmppar->next;
+                       tmppar2->next = tmppar->Clone();
+                       tmppar2->next->SetID(tmppar->GetID());
+                       // a memory optimization: Just store the layout information when only edit
+                       if (kind == Undo::EDIT){
+                               if (tmppar2->next->text)
+                                       delete[] tmppar2->next->text;
+                               tmppar2->next->text = NULL;
+                       }
+                       tmppar2->next->previous = tmppar2;
+                       tmppar2=tmppar2->next;
+               }
+               tmppar2->next = NULL;
+       }
+       else
+               undopar = NULL; // nothing to replace (undo of delete maybe)
+  
+       int cursor_par = cursor.par->ParFromPos(cursor.pos)->GetID();
+       int cursor_pos =  cursor.par->PositionInParFromPos(cursor.pos);
+
+       Undo* undo = new Undo(kind, 
+                             before_number, behind_number,  
+                             cursor_par, cursor_pos, 
+                             undopar);
+  
+       undo_finished = false;
+       return undo;
+}
+
+
+void LyXText::SetCursorParUndo()
+{
+       SetUndo(Undo::FINISH, 
+               cursor.par->ParFromPos(cursor.pos)->previous, 
+               cursor.par->ParFromPos(cursor.pos)->next); 
+}
+
+void LyXText::RemoveTableRow(LyXCursor *cursor)
+{
+    int
+        cell_act,
+        cell = -1,
+        cell_org = 0,
+        ocell = 0;
+    
+    /* move to the previous row */
+    cell_act = NumberOfCell(cursor->par, cursor->pos);
+    if (cell < 0)
+        cell = cell_act;
+    while (cursor->pos && !cursor->par->IsNewline(cursor->pos-1))
+        cursor->pos--;
+    while (cursor->pos && 
+           !cursor->par->table->IsFirstCell(cell_act)){
+        cursor->pos--;
+        while (cursor->pos && !cursor->par->IsNewline(cursor->pos-1))
+            cursor->pos--;
+            cell--;
+            cell_act--;
+    }
+    /* now we have to pay attention if the actual table is the
+       main row of TableContRows and if yes to delete all of them */
+    if (!cell_org)
+        cell_org = cell;
+    do {
+        ocell = cell;
+        /* delete up to the next row */
+        while (cursor->pos < cursor->par->Last() && 
+               (cell_act == ocell
+                || !cursor->par->table->IsFirstCell(cell_act))){
+            while (cursor->pos < cursor->par->Last() &&
+                   !cursor->par->IsNewline(cursor->pos))
+                cursor->par->Erase(cursor->pos);
+            cell++;
+            cell_act++;
+            if (cursor->pos < cursor->par->Last())
+                cursor->par-> Erase(cursor->pos);
+        }
+        if (cursor->pos && cursor->pos == cursor->par->Last()){
+            cursor->pos--;
+            cursor->par->Erase(cursor->pos); // no newline at the very end!
+        }
+    } while (((cell+1) < cursor->par->table->GetNumberOfCells()) &&
+             !cursor->par->table->IsContRow(cell_org) &&
+             cursor->par->table->IsContRow(cell));
+    cursor->par->table->DeleteRow(cell_org);
+    return;
+}
+
+bool LyXText::IsEmptyTableRow(LyXCursor *old_cursor)
+{
+       if (!old_cursor->par->table)
+               return false;
+#ifdef I_DONT_KNOW_IF_I_SHOULD_DO_THIS
+       int
+               pos = old_cursor->pos,
+               cell = NumberOfCell(old_cursor->par, pos);
+
+       // search first charater of this table row
+       while (pos && !old_cursor->par->table->IsFirstCell(cell)) {
+               pos--;
+               while (pos && !old_cursor->par->IsNewline(pos-1))
+                       pos--;
+               cell--;
+       }
+       if (!old_cursor->par->IsNewline(pos))
+               return false;
+       cell++;
+       pos++;
+       while ((pos < old_cursor->par->Last()) &&
+              !old_cursor->par->table->IsFirstCell(cell)) {
+               if (!old_cursor->par->IsNewline(pos))
+                       return false;
+               pos++;
+               cell++;
+       }
+       return true;
+#endif
+       return false;
+}
+
+
+bool LyXText::IsEmptyTableCell()
+{
+       int pos = cursor.pos - 1;
+       
+       while ((pos>=0) && (pos < cursor.par->Last()) &&
+              !cursor.par->IsNewline(pos))
+               pos--;
+       return cursor.par->IsNewline(pos+1);
+}
+
+void LyXText::toggleAppendix(){
+  LyXParagraph* par = cursor.par->FirstPhysicalPar();
+  bool start = !par->start_of_appendix;
+
+  /* ensure that we have only one start_of_appendix in this document */
+  LyXParagraph* tmp = FirstParagraph();
+  for (;tmp;tmp=tmp->next)
+    tmp->start_of_appendix = 0;
+  par->start_of_appendix = start;
+
+  /* we can set the refreshing parameters now */
+  status = LyXText::NEED_MORE_REFRESH;
+  refresh_y = 0;
+  refresh_row = 0; // not needed for full update
+  UpdateCounters(0);
+  SetCursor(cursor.par, cursor.pos);
+}
+
diff --git a/src/textutils.h b/src/textutils.h
new file mode 100644 (file)
index 0000000..73d97cd
--- /dev/null
@@ -0,0 +1,92 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *
+ *======================================================*/
+#ifndef _TEXTUTILS_H
+#define _TEXTUTILS_H
+
+#include "definitions.h"
+
+///
+inline bool IsNewlineChar(char c) {
+       return (c == LYX_META_NEWLINE);
+}
+///
+inline bool IsSeparatorChar(char c) {
+       return (c == ' ' || c == LYX_META_PROTECTED_SEPARATOR);
+}
+///
+inline bool IsHfillChar(char c) {
+       return (c == LYX_META_HFILL);
+}
+///
+inline bool IsInsetChar(char c) {
+       return (c == LYX_META_INSET);
+}
+///
+inline bool IsFloatChar(char c) {
+       return (c == LYX_META_FOOTNOTE
+               || c == LYX_META_MARGIN
+               || c == LYX_META_FIG
+               || c == LYX_META_TAB
+               || c == LYX_META_ALGORITHM
+               || c == LYX_META_WIDE_FIG
+               || c == LYX_META_WIDE_TAB);
+}
+///
+inline bool IsLineSeparatorChar(char c) {
+       return (c == ' ');
+}
+///
+inline bool IsKommaChar(char c) {
+       return (c == ',' 
+               || c=='('
+               || c==')'
+               || c=='['
+               || c==']'
+               || c=='{'
+               || c=='}'
+               || c==';'
+               || c=='.'
+               || c==':'
+               || c=='-'
+               || c=='?'
+               || c=='!'
+               || c=='&'
+               || c=='@'
+               || c=='+'
+               || c=='-'
+               || c=='~'
+               || c=='#'
+               || c=='%'
+               || c=='^'
+               || c=='/' 
+               || c=='\\'
+               || c==LYX_META_NEWLINE
+               || c==LYX_META_PROTECTED_SEPARATOR
+               );
+}
+///
+inline bool IsLetterChar(unsigned char c) {
+       return ((c>='A' && c<='Z')
+               || (c>='a' && c<='z')
+               || (c>=192)); // in iso-8859-x these are accented chars
+}
+///
+inline bool IsPrintable(unsigned char c) {
+       return (c>=' ');
+}
+/// Word is not IsSeparator or IsKomma or IsHfill or IsFloat or IsInset. 
+inline bool IsWordChar(unsigned char c) {
+  return !( IsSeparatorChar( c ) 
+           ||  IsKommaChar( c )  
+           ||  IsHfillChar( c )  
+           ||  IsFloatChar( c )  
+           ||  IsInsetChar( c ) ) ;
+}
+#endif
diff --git a/src/toolbar.C b/src/toolbar.C
new file mode 100644 (file)
index 0000000..3992444
--- /dev/null
@@ -0,0 +1,619 @@
+/* This file is part of
+* ======================================================
+* 
+*           LyX, The Document Processor
+*
+*          Copyright (C) 1995 Matthias Ettrich
+*           Copyright (C) 1995-1998 The LyX Team.
+*
+*           This file is Copyright 1996-1998
+*           Lars Gullik Bjønnes
+*
+*======================================================*/
+
+//  Added pseudo-action handling, asierra 180296
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "toolbar.h"
+#endif
+
+#include "lyx_main.h"
+#include "lyx_gui_misc.h"
+#include "lyx.h"
+#include "toolbar.h"
+#include "lyxfunc.h"
+#include "lyxlex.h"
+#include "error.h"
+#include "combox.h"
+#include "lyx_cb.h"
+#include "LyXView.h"
+
+#ifdef TWO_COLOR_ICONS
+#include "cut_bw.xpm"
+#include "emph_bw.xpm"
+#include "fig_bw.xpm"
+#include "foot_bw.xpm"
+#include "math_bw.xpm"
+#include "depth_bw.xpm"
+#include "margin_bw.xpm"
+#include "melt_bw.xpm"
+#include "copy_bw.xpm"
+#include "noun_bw.xpm"
+#include "paste_bw.xpm"
+#include "free_bw.xpm"
+#include "tab_bw.xpm"
+#include "tex_bw.xpm"
+#include "open_bw.xpm"
+#include "close_bw.xpm"
+#include "save_bw.xpm"
+#include "print1_bw.xpm"
+#include "quit_bw.xpm"
+#include "typeset_ps_bw.xpm"
+#include "unknown_bw.xpm"
+#else 
+#include "cut.xpm"
+#include "emph.xpm"
+#include "fig.xpm"
+#include "foot.xpm"
+#include "math.xpm"
+#include "depth.xpm"
+#include "margin.xpm"
+#include "melt.xpm"
+#include "copy.xpm"
+#include "noun.xpm"
+#include "paste.xpm"
+#include "free.xpm"
+#include "tab.xpm"
+#include "tex.xpm"
+#include "open.xpm"
+#include "close.xpm"
+#include "save.xpm"
+#include "print1.xpm"
+#include "quit.xpm"
+#include "typeset_ps.xpm"
+#include "unknown.xpm"
+#endif
+
+// These pixmaps are the same regardless of color:
+#include "bold_bw.xpm"
+#include "make_ascii_bw.xpm"
+#include "make_latex_bw.xpm"
+#include "run_latex_bw.xpm"
+#include "sans_bw.xpm"
+#include "view_dvi_bw.xpm"
+#include "view_ps_bw.xpm"
+#include "layout_code.xpm"
+#include "layout_latex.xpm"
+#include "layout_scrap.xpm"
+#include "layout_sec.xpm"
+#include "layout_std.xpm"
+#include "build.xpm"
+
+
+
+//     $Id: toolbar.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $   
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: toolbar.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+extern void LayoutsCB(int, void*);
+extern char** get_pixmap_from_symbol(char const *arg, int, int);
+extern LyXAction lyxaction;
+
+
+enum _tooltags {
+       TO_ADD = 1,
+       TO_ENDTOOLBAR,
+        TO_SEPARATOR,
+        TO_LAYOUTS,
+        TO_NEWLINE,
+       TO_LAST
+};
+
+
+struct keyword_item toolTags[TO_LAST-1] = {
+       { "\\add", TO_ADD },
+       { "\\end_toolbar", TO_ENDTOOLBAR },
+        { "\\layouts", TO_LAYOUTS },
+        { "\\newline", TO_NEWLINE },
+        { "\\separator", TO_SEPARATOR }
+};
+
+
+Toolbar::Toolbar(Toolbar const &rct, LyXView *o, int x, int y)
+       : owner(o), sxpos(x), sypos(y)
+{
+       combox = 0;
+       bubble_timer = 0;
+       reset();
+
+       // extracts the toolbar struct form rct.
+       toolbarItem *tmplist = rct.toollist;
+       while (tmplist != NULL) {
+               add(tmplist->action);
+               lyxerr.debug(LString("tool action: ") + int(tmplist->action),
+                             Error::TOOLBAR);
+               tmplist=tmplist->next;
+       }
+}
+
+
+// timer-cb for bubble-help (Matthias)
+void Toolbar::BubbleTimerCB(FL_OBJECT *, long data){
+       FL_OBJECT* ob = (FL_OBJECT*) data;
+       char* help = (char*) ob->u_vdata;
+       fl_show_oneliner(help, ob->form->x + ob->x,
+                        ob->form->y + ob->y + ob->h);
+}
+
+
+// post_handler for bubble-help (Matthias)
+int Toolbar::BubblePost(FL_OBJECT *ob, int event,
+            FL_Coord /*mx*/, FL_Coord /*my*/, int /*key*/, void */*xev*/)
+{
+       LString help = (char *)ob->u_vdata;
+       Toolbar *t = (Toolbar*)ob->u_ldata;
+       
+       if(event == FL_ENTER && !help.empty()){
+               fl_set_object_callback(t->bubble_timer,
+                                      BubbleTimerCB, (long) ob);
+               fl_set_timer(t->bubble_timer, 1);
+       }
+       else if(event != FL_MOTION){
+               fl_set_timer(t->bubble_timer, 0);
+               fl_hide_oneliner();
+       }
+       return 0;
+}
+
+
+void Toolbar::activate()
+{
+       toolbarItem *item, *tmp=NULL;
+       item = toollist;
+       while(item){
+               tmp = item->next;
+               if (item->icon) {
+                       fl_activate_object(item->icon);
+               }
+               item = tmp;
+       }
+}
+
+
+void Toolbar::deactivate()
+{
+       toolbarItem *item, *tmp=NULL;
+       item = toollist;
+       while(item){
+               tmp = item->next;
+               if (item->icon) {
+                       fl_deactivate_object(item->icon);
+               }
+               item = tmp;
+       }
+}
+
+
+void Toolbar::ToolbarCB(FL_OBJECT *ob, long ac)
+{
+       Toolbar *t = (Toolbar*)ob->u_ldata;
+       
+       LString res = t->owner->getLyXFunc()->Dispatch(int(ac));
+       if(!res.empty())
+               lyxerr.debug(res, Error::TOOLBAR); 
+}
+
+
+int Toolbar::get_toolbar_func(LString const & func)
+{
+       int action = lyxaction.LookupFunc(func.c_str());
+       if (action == -1) {
+               if (func == "separator"){
+                       action = TOOL_SEPARATOR;
+               } else if (func == "layouts"){
+                        action = TOOL_LAYOUTS;
+                } else action = 0;
+       }
+       return action;
+}
+
+
+void Toolbar::init()
+{
+       add(TOOL_LAYOUTS);
+       add(LFUN_MENUOPEN);
+       //add(LFUN_CLOSEBUFFER);
+       add(LFUN_MENUWRITE);
+       add(LFUN_MENUPRINT);
+       add(TOOL_SEPARATOR);
+
+       add(LFUN_CUT);
+       add(LFUN_COPY);
+       add(LFUN_PASTE);
+       add(TOOL_SEPARATOR);
+       
+       add(LFUN_EMPH);
+       add(LFUN_NOUN);
+       add(LFUN_FREE);
+       add(TOOL_SEPARATOR);
+       
+       add(LFUN_FOOTMELT);
+       add(LFUN_MARGINMELT);
+       add(LFUN_DEPTH);
+       add(TOOL_SEPARATOR);
+
+       add(LFUN_TEX);
+        add(LFUN_MATH_MODE);
+       add(TOOL_SEPARATOR);
+
+       add(LFUN_FIGURE);
+       add(LFUN_TABLE);
+       //add(LFUN_MELT);
+}
+
+
+void Toolbar::set(bool doingmain)
+{
+       // we shouldn't set if we have not cleaned
+       if (!cleaned) return;
+       
+       toolbarItem *item;
+       FL_OBJECT *obj;
+       item = toollist;
+       
+       if (!doingmain) {
+               fl_freeze_form(owner->getForm());
+               fl_addto_form(owner->getForm());
+       }
+
+#if FL_REVISION <86
+       // Ensure borderwidth is 2 to get visual feedback
+       int bw = fl_get_border_width();
+       fl_set_border_width(-2);
+#endif
+
+       // add the time if it don't exist
+       if (bubble_timer == NULL)
+               bubble_timer = fl_add_timer(FL_HIDDEN_TIMER,
+                                           xpos,ypos,0,0,"Timer");
+       
+       while(item != NULL) {
+               switch(item->action){
+                 case TOOL_SEPARATOR:
+                         xpos += sepspace;
+                         item = item->next;
+                         break;
+                 case TOOL_LAYOUTS:
+                         xpos += standardspacing;
+                         if (!combox)
+                                 combox = new Combox(FL_COMBOX_DROPLIST);
+                         combox->add(xpos, ypos, 135, height, 300);
+                         combox->setcallback(LayoutsCB);
+                         combox->resize(FL_RESIZE_ALL);
+                         combox->gravity(NorthWestGravity, NorthWestGravity);
+                         item = item->next;
+                         xpos += 135;
+                         break;
+                 default:
+                         xpos += standardspacing;
+                         item->icon = obj =
+                                 fl_add_pixmapbutton(FL_NORMAL_BUTTON,
+                                                     xpos,ypos,
+                                                     buttonwidth,
+                                                     height,"");
+                         fl_set_object_boxtype(obj,FL_UP_BOX);
+                         fl_set_object_color(obj,FL_MCOL,FL_BLUE);
+                         fl_set_object_resize(obj, FL_RESIZE_ALL);
+                         fl_set_object_gravity(obj,
+                                               NorthWestGravity,
+                                               NorthWestGravity);
+                         fl_set_object_callback(obj,ToolbarCB,
+                                                (long)item->action);
+#if FL_REVISION >85
+                         // Remove the blue feedback rectangle
+                         fl_set_pixmapbutton_focus_outline(obj,0);
+#endif
+
+                         // set the bubble-help (Matthias)
+                         obj->u_vdata = (void *) item->help.c_str();
+                         // we need to know what toolbar this item
+                         // belongs too. (Lgb)
+                         obj->u_ldata = (long) this;
+                         
+                         fl_set_object_posthandler(obj, BubblePost);
+
+                         fl_set_pixmapbutton_data(obj,item->pixmap);
+                         item = item->next;
+                         // we must remember to update the positions
+                         xpos += buttonwidth;
+                         // ypos is constant
+                         /* Here will come a check to see if the new
+                          * pos is within the bounds of the main frame,
+                          * and perhaps wrap the toolbar if not.
+                          */
+                         break;
+               }
+       }
+#if FL_REVISION <86
+       // Reset borderwidth to its default value.
+       fl_set_border_width(bw);
+#endif
+       if (!doingmain) {
+               fl_end_form();
+               fl_unfreeze_form(owner->getForm());
+               // Should be safe to do this here.
+               owner->updateLayoutChoice();
+       }
+       
+       cleaned = false;
+}
+
+
+char **Toolbar::getPixmap(kb_action action, LString const & arg)
+{
+       char **pixmap = unknown_xpm; //NULL
+       switch(action){
+       case LFUN_MENUOPEN:    pixmap = open_xpm; break;
+       case LFUN_CLOSEBUFFER: pixmap = close_xpm; break;
+       case LFUN_MENUPRINT:   pixmap = print1_xpm; break;
+       case LFUN_MENUWRITE:   pixmap = save_xpm; break;
+       case LFUN_EMPH:  pixmap = emph_xpm; break;
+       case LFUN_NOUN:        pixmap = noun_xpm; break;
+       case LFUN_FREE:        pixmap = free_xpm; break;
+       case LFUN_FOOTMELT:    pixmap = foot_xpm; break;
+       case LFUN_DEPTH:       pixmap = depth_xpm; break;
+       case LFUN_COPY:        pixmap = copy_xpm; break;
+       case LFUN_CUT:         pixmap = cut_xpm; break;
+       case LFUN_PASTE:       pixmap = paste_xpm; break;
+       case LFUN_TEX:         pixmap = tex_xpm; break;
+       case LFUN_MATH_MODE:   pixmap = math_xpm; break;
+       case LFUN_MARGINMELT:  pixmap = margin_xpm; break;
+       case LFUN_FIGURE:      pixmap = fig_xpm; break;
+       case LFUN_TABLE:       pixmap = tab_xpm; break;
+       case LFUN_MELT:        pixmap = melt_xpm; break;
+       case LFUN_QUIT:        pixmap = quit_xpm; break;
+       case LFUN_RUNDVIPS:    pixmap = update_ps_xpm; break;
+       case LFUN_EXPORT:
+       {
+               if (arg == "ascii")
+                       pixmap = make_ascii_xpm;
+               else if (arg == "latex")
+                       pixmap = make_latex_xpm;
+       }
+       break; 
+       case LFUN_LAYOUT:
+       {
+               if (arg == "Section")
+                       pixmap = layout_sec_xpm;
+               else if (arg == "LaTeX")
+                       pixmap = layout_latex_xpm;
+               else if (arg == "LyX-Code")
+                       pixmap = layout_code_xpm;
+               else if (arg == "Scrap")
+                       pixmap = layout_scrap_xpm;
+               else
+                       pixmap = layout_std_xpm;
+       }
+       break;
+
+       case LFUN_BOLD : pixmap = bold_xpm; break; 
+       case LFUN_SANS: pixmap = sans_xpm; break; 
+       case LFUN_RUNLATEX: pixmap = run_latex_xpm; break; 
+        case LFUN_BUILDPROG: pixmap = build_xpm; break; 
+       case LFUN_PREVIEWPS: pixmap = view_ps_xpm; break; 
+       case LFUN_PREVIEW: pixmap = view_dvi_xpm; break; 
+       case LFUN_INSERT_MATH:
+       {
+               if (!arg.empty())
+                       pixmap = get_pixmap_from_symbol(arg.c_str(),
+                                                       buttonwidth,
+                                                       height);
+       }
+       break;
+       default:
+               //pixmap = unknown_xpm;
+               break;
+       }
+       return pixmap;
+}
+
+
+void Toolbar::add(int action, bool doclean)
+{
+       if (doclean && !cleaned) clean();
+
+       // this is what we do if we want to add to an existing
+       // toolbar.
+       if (!doclean && owner) {
+               // first «hide» the toolbar buttons. This is not a real hide
+               // actually it deletes and frees the button altogether.
+               lyxerr.print("Toolbar::add: «hide» the toolbar buttons.");
+               toolbarItem *item, *tmp=NULL;
+               item = toollist;
+
+               lightReset();
+               
+               fl_freeze_form(owner->getForm());
+               while(item){
+                       tmp = item->next;
+                       if (item->icon) {
+                               fl_delete_object(item->icon);
+                               fl_free_object(item->icon);
+                       }
+                       item = tmp;
+               }
+               if (combox) {
+                       delete combox;
+                       combox = 0;
+               }
+               fl_unfreeze_form(owner->getForm());
+               cleaned = true; // this is not completely true, but OK anyway
+       }
+       
+       // there exist some special actions not part of
+       // kb_action: SEPARATOR, LAYOUTS
+       char **pixmap = NULL;
+       LString help;
+
+       toolbarItem *newItem,*tmp;
+
+       if (lyxaction.isPseudoAction(action)) {
+               char const *arg;
+               kb_action act = (kb_action)lyxaction.retrieveActionArg(action, &arg);
+               pixmap = getPixmap(act, arg);
+               help = lyxaction.helpText(act);
+               help += " ";
+               help += arg;
+               lyxerr.debug(LString("Pseudo action ") + int(action));
+       } else {
+               pixmap = getPixmap((kb_action)action);
+               help = lyxaction.helpText((kb_action)action);
+       }
+       
+       // adds an item to the list
+       if (pixmap != NULL
+           || action == TOOL_SEPARATOR
+           || action == TOOL_LAYOUTS)
+       {
+               newItem = new toolbarItem;
+               newItem->action = action;
+               newItem->pixmap = pixmap;
+               newItem->help = help;
+               // the new item is placed at the end of the list
+               tmp = toollist;
+               if (tmp != NULL){
+                       while(tmp->next != NULL)
+                               tmp = tmp->next;
+                       // here is tmp->next == NULL
+                       tmp->next = newItem;
+               } else
+                       toollist = newItem;
+       }
+       //if (action == TOOL_LAYOUTS) {
+       //      combox = new Combox(FL_COMBOX_DROPLIST);
+       //}
+}
+
+
+void Toolbar::add(LString const & func, bool doclean)
+{
+       int tf = lyxaction.LookupFunc(func.c_str());
+
+       if (tf == -1){
+               lyxerr.print("Toolbar::add: no LyX command called`"
+                               +func+"'exists!"); 
+       } else {
+               add(tf, doclean);
+       }
+}
+
+
+void Toolbar::clean()
+{
+       toolbarItem *item, *tmp= NULL;
+       item = toollist;
+
+       reset();
+
+       //now delete all the objects..
+       if (owner)
+               fl_freeze_form(owner->getForm());
+       while (item) {
+               tmp = item->next;
+               delete item;
+               item = tmp;
+       }
+       //lyxerr.print(LString("Combox: ") + int(combox));
+       if (combox) {
+               delete combox;
+               combox = 0;
+       }
+       if (owner)
+               fl_unfreeze_form(owner->getForm());
+       lyxerr.debug("toolbar cleaned",Error::TOOLBAR);
+       cleaned = true;
+}
+
+
+void Toolbar::push(int nth)
+{
+       lyxerr.debug(LString("Toolbar::push: trying to trigger no `")+nth+'\'',
+                     Error::TOOLBAR);
+       
+       if (nth == 0) return;
+
+       int count=0;
+       toolbarItem *tmp = toollist;
+       while (tmp) {
+               count++;
+               if (count == nth) {
+                       fl_trigger_object(tmp->icon);
+                       return;
+               }
+               tmp = tmp->next;
+       }
+       // item nth not found...
+       LyXBell();
+}
+
+
+void Toolbar::read(LyXLex &lex)
+{
+       //consistency check
+       if (lex.GetString() != "\\begin_toolbar")
+               lyxerr.print("Toolbar::read: ERROR wrong token:`"
+                               +lex.GetString()+'\''); 
+
+       clean();
+       LString func;
+       bool quit = false;
+       
+       lex.pushTable(toolTags, TO_LAST - 1);
+
+       if (lyxerr.debugging(Error::LEX_PARSER))
+               lex.printTable();
+       
+       while (lex.IsOK() && !quit) {
+               
+               lyxerr.debug("Toolbar::read: current lex text: `"
+                               +lex.GetString()+'\'',Error::TOOLBAR);
+
+               switch(lex.lex()) {
+                 case TO_ADD:
+                         if (lex.EatLine()) {
+                                 func = lex.GetString();
+                                 lyxerr.debug("Toolbar::read TO_ADD func: `"
+                                              + func + "'", Error::TOOLBAR);
+                                 add(func);
+                         }
+                         break;
+                  
+                 case TO_SEPARATOR:
+                         add(TOOL_SEPARATOR);
+                         break;
+                  
+                 case TO_LAYOUTS:
+                         add(TOOL_LAYOUTS);
+                         break;
+                  
+                 case TO_NEWLINE:
+                         add(TOOL_NEWLINE);
+                         break;
+                       
+                 case TO_ENDTOOLBAR:
+                         // should not set automatically
+                         //set();
+                         quit = true;
+                         break;
+                 default:
+                         lex.printError("Toolbar::read: "
+                                         "Unknown toolbar tag: `$$Token'");
+                         break;
+               }
+       }
+       lex.popTable();
+}
diff --git a/src/toolbar.h b/src/toolbar.h
new file mode 100644 (file)
index 0000000..3b30995
--- /dev/null
@@ -0,0 +1,178 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+* 
+*           LyX, The Document Processor
+*          Copyright (C) 1995 Matthias Ettrich
+*
+*           This file is Copyright (C) 1996-1998
+*           Lars Gullik Bjønnes
+*
+*======================================================*/
+
+#ifndef _TOOLBAR_H_
+#define _TOOLBAR_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include FORMS_H_LOCATION
+#include "lyxfunc.h"
+#include "lyxlex.h"
+#include "combox.h"
+
+/** The LyX toolbar class
+  This class {\em is} the LyX toolbar, and is not likely to be enhanced
+  further until we begin the move to Qt. We will probably have to make our
+  own QToolBar, at least until Troll Tech makes theirs.
+  */
+class Toolbar {
+public:
+       ///
+       Toolbar(Toolbar const &, LyXView *o, int x, int y);
+
+       ///
+       Toolbar()
+       {
+               owner = NULL;
+               sxpos = 0;
+               sypos = 0;
+               bubble_timer = NULL;
+               combox = NULL;
+               reset();
+               init(); // set default toolbar.
+       }
+
+       ///
+       ~Toolbar() {
+               clean();
+       }
+       
+       ///
+       int get_toolbar_func(LString const & func);
+       
+        /// The special toolbar actions
+       enum  TOOLBARITEMS {
+               /// adds space between buttons in the toolbar
+               TOOL_SEPARATOR = -1,
+               /// a special combox insead of a button
+               TOOL_LAYOUTS = -2,
+               /// begin a new line of button (not working)
+               TOOL_NEWLINE = -3
+       };
+
+       ///
+       Combox *combox;
+
+       ///
+       void read(LyXLex&);
+       /// sets up the default toolbar
+       void init();
+       /// (re)sets the toolbar
+       void set(bool doingmain=false);
+
+       /** this is to be the entry point to the toolbar
+         frame, where you can change the toolbar realtime. */
+       void edit();
+       /// add a new button to the toolbar.
+       void add(int ,bool doclean=true);
+       /// name of func instead of kb_action
+       void add(LString const & , bool doclean=true);
+       /// invokes the n'th icon in the toolbar
+       void push(int);
+       /// activates the toolbar
+        void activate();
+       /// deactivates the toolbar
+        void deactivate();
+
+private:
+       ///
+       struct toolbarItem
+       {
+               ///
+               toolbarItem *next;
+               ///
+               int action;
+               ///
+               LString help;
+               ///
+               FL_OBJECT *icon;
+               ///
+               bool IsBitmap;
+               ///
+               char **pixmap;
+               ///
+               toolbarItem(){
+                       next = NULL;
+                       action = LFUN_NOACTION;
+                       icon = NULL;
+                       pixmap = NULL;
+                       IsBitmap = false;
+               }
+               ///
+               ~toolbarItem(){
+                       if (icon){
+                               fl_delete_object(icon);
+                               fl_free_object(icon);
+                       }
+               }
+                       
+       };
+
+       /// a list containing all the buttons
+       toolbarItem *toollist;
+       ///
+       LyXView *owner;
+       ///
+       FL_OBJECT *bubble_timer;
+       /// Starting position
+       int sxpos, sypos;
+       ///
+       int xpos;
+       ///
+       int ypos;
+       ///
+       int buttonwidth;
+       ///
+       int height;
+       ///
+       int standardspacing;
+       ///
+       int sepspace;
+       ///
+       bool cleaned;
+
+       ///
+       char **getPixmap(kb_action, LString const & arg=LString());
+       /// removes all toolbar buttons from the toolbar.
+       void clean();
+       ///
+       static void ToolbarCB(FL_OBJECT*, long);
+       ///
+       static void BubbleTimerCB(FL_OBJECT *, long);
+       ///
+       static int BubblePost(FL_OBJECT *ob, int event,
+                             FL_Coord mx, FL_Coord my, int key, void *xev);
+
+       /** more...
+        */
+       void reset(){
+               toollist = NULL;
+               cleaned = false;
+               
+               lightReset();
+       }
+
+       /** more...
+        */
+       void lightReset(){
+               standardspacing = 2; // the usual space between items
+               sepspace = 6; // extra space
+               xpos = sxpos - standardspacing;
+               ypos = sypos;
+               buttonwidth = 30; // the standard button width
+               height = 30; // the height of all items in the toolbar
+       }
+};
+#endif
diff --git a/src/trans.C b/src/trans.C
new file mode 100644 (file)
index 0000000..58a413f
--- /dev/null
@@ -0,0 +1,407 @@
+#include <config.h>
+
+#include <stdio.h>
+
+#ifdef __GNUG__
+#pragma implementation "trans.h"
+#endif
+
+#include "LyXView.h"
+#include "trans.h"
+#include "filetools.h"
+#include "tex-strings.h"
+#include "lyxlex.h"
+#include "error.h"
+#include "trans_mgr.h"
+
+
+// KmodInfo
+KmodInfo::KmodInfo()
+{
+       exception_list=NULL;
+}
+
+
+KmodInfo::KmodInfo(const KmodInfo& o)
+{
+       (*this)=o;
+}
+
+
+KmodInfo& KmodInfo::operator=(const KmodInfo& o)
+{
+       if (this!=&o) {
+               allowed=o.allowed;
+               accent=o.accent;
+               data=o.data;
+               exception_list=o.exception_list;
+       }
+
+       return *this;
+}
+
+    
+// Default Trans
+bool DefaultTrans::init_=false;
+
+
+DefaultTrans::DefaultTrans()
+{
+       if (init_==false) {
+               // Do initialization
+               init_=true;
+       }
+}
+
+
+LString DefaultTrans::process(char c,TransManager& k)
+{
+       char dummy[2]="?";
+       dummy[0]=c;
+    
+       return k.normalkey(c,dummy);
+}
+
+
+// Trans class
+
+Trans::Trans()
+{
+       int i;
+
+       for(i=0; i<256; i++)
+               keymap_[i]=NULL;
+
+       for(i=0; i<TEX_MAX_ACCENT+1; i++)
+               kmod_list_[i]=0;
+}
+
+
+Trans::~Trans()
+{
+       FreeKeymap();
+}
+
+
+void Trans::InsertException(Trans::keyexc& exclist, char c,
+                           const LString& data,bool flag,tex_accent accent)
+{
+       keyexc p;
+
+       p = new Keyexc; 
+       p -> next = exclist;
+       p -> c = c;
+
+       p->data = data;
+       p->combined=flag;
+       p->accent=accent;
+
+       exclist = p;
+}
+
+
+void Trans::FreeException(Trans::keyexc& exclist)
+{
+       Trans::keyexc p;
+
+       p = exclist;
+       while (p) {
+               p = exclist->next;
+               delete exclist;
+               exclist = p;
+       }
+}
+
+
+void Trans::FreeKeymap()
+{
+       int i;
+
+       for(i=0; i<256; i++)
+               if (keymap_[i]) {
+                       delete keymap_[i];
+                       keymap_[i]=NULL;
+               }
+       for(i=0; i<TEX_MAX_ACCENT+1; i++)
+               if (kmod_list_[i]) {
+                       FreeException(kmod_list_[i]->exception_list);
+                       delete kmod_list_[i];
+                       kmod_list_[i]=0;
+               }
+}
+
+
+bool Trans::IsDefined()
+{
+       return !name_.empty();
+}
+
+
+const LString& Trans::GetName()
+{
+       return name_;
+}
+
+
+enum _kmaptags {
+       KCOMB=1,
+       KMOD,
+       KMAP,
+       KXMOD,
+       K_LAST
+};
+
+
+struct keyword_item kmapTags[K_LAST-1] = {
+       {"\\kcomb",KCOMB },
+       { "\\kmap", KMAP },
+       { "\\kmod", KMOD },
+       { "\\kxmod", KXMOD }
+};
+
+
+tex_accent getkeymod(const LString&);
+
+
+void Trans::AddDeadkey(tex_accent accent,const LString& keys,
+                      const LString& allowed)
+{
+       if (kmod_list_[accent]) {
+               FreeException(kmod_list_[accent]->exception_list);
+               
+               delete kmod_list_[accent];
+       }
+       
+       kmod_list_[accent] = new kmod_list_decl;
+       kmod_list_[accent]->data = keys;
+       kmod_list_[accent]->accent = accent;
+       if (allowed=="all") { 
+               kmod_list_[accent]->allowed=lyx_accent_table[accent].native;
+       } else { 
+               kmod_list_[accent]->allowed = allowed;
+       }
+       
+       for(int i=0;i<keys.length();i++) {
+               char *temp;
+               temp=keymap_[(unsigned char)keys[i]]=new char[2];
+               temp[0]=0; temp[1]=accent;
+       }
+       kmod_list_[accent]->exception_list=NULL;
+}
+
+
+int Trans::Load(LyXLex &lex)
+{
+       bool error = false;
+
+       while (lex.IsOK() && !error) {
+               switch(lex.lex()) {
+               case KMOD:
+               {
+                       if (lyxerr.debugging(Error::KBMAP))
+                               fprintf(stderr,"KMOD:   %s\n",lex.text());
+                       if (lex.next(true)) {
+                               if (lyxerr.debugging(Error::KBMAP))
+                                       fprintf(stderr, "key     `%s'\n", lex.text());
+                       } else
+                               return -1;
+                       
+                       LString keys = lex.GetString();
+
+                       if (lex.next(true)) {
+                               if ( lyxerr.debugging(Error::KBMAP))
+                                       fprintf(stderr, "accent     `%s'\n", lex.text());
+                       } else
+                               return -1;
+
+                       tex_accent accent = getkeymod(lex.GetString());
+
+                       if (accent==TEX_NOACCENT)
+                               return -1;
+
+                       if (lex.next(true)) {
+                               if (lyxerr.debugging(Error::KBMAP))
+                                       fprintf(stderr,
+                                               "allowed     `%s'\n",
+                                               lex.text());
+                       } else
+                               return -1;
+
+                       LString allowed = lex.GetString();
+
+                       AddDeadkey(accent, keys, allowed);
+                       break;
+               }       
+               case KCOMB: {
+                       const char *str;
+
+                       lyxerr.debug("KCOMB:",Error::KBMAP);
+                       if (lex.next(true)) {
+                               str=lex.text();
+                               lyxerr.debug(str,Error::KBMAP);
+                       } else
+                               return -1;
+                       
+                       tex_accent accent_1=getkeymod(str);
+                       if (accent_1==TEX_NOACCENT) return -1;
+
+                       if (lex.next(true)) {
+                               str=lex.text();
+                               lyxerr.debug(str,Error::KBMAP);
+                       } else
+                               return -1;
+
+                       tex_accent accent_2=getkeymod(str);
+                       if (accent_2==TEX_NOACCENT) return -1;
+
+                       if (kmod_list_[accent_1]==NULL || kmod_list_[accent_2]==NULL)
+                               return -1;
+
+                       // Find what key accent_2 is on - should check about accent_1 also
+                       int key;
+
+                       for(key=0;key<256;key++) 
+                               if (keymap_[key] && keymap_[key][0]==0 && keymap_[key][1]==accent_2)
+                                       break;
+                       
+                       LString allowed;
+
+                       if (lex.next()) {
+                               allowed=lex.GetString();
+                               lyxerr.debug("allowed: "+allowed,Error::KBMAP);
+                       } else
+                               return -1;
+
+                       InsertException(kmod_list_[accent_1]->exception_list,(char)key,allowed,true,accent_2);
+               }
+               break;
+               case KMAP: {
+                       char key_from;
+                       char *string_to;
+
+                       if (lyxerr.debugging(Error::KBMAP))
+                               fprintf(stderr, "KMAP: %s\n", lex.text());
+                       if (lex.next(true)) {
+                               key_from=lex.text()[0];
+                               if (lyxerr.debugging(Error::KBMAP))
+                                       fprintf(stderr, "     `%s'\n", lex.text());
+                       } else
+                               return -1;
+
+                       if (lex.next(true)) {
+                               char const *t = lex.text();
+                               string_to = strcpy(new char[strlen(t)+1],t);
+                               keymap_[(unsigned char)key_from]=string_to;
+                               if (lyxerr.debugging(Error::KBMAP))
+                                       fprintf(stderr, "     `%s'\n", string_to);
+                       } else
+                               return -1;
+
+                       break;
+               }
+               case KXMOD: {
+                       tex_accent accent;
+                       char key;
+                       const char *str;
+
+                       if (lyxerr.debugging(Error::KBMAP))
+                               fprintf(stderr, "KXMOD: %s\n", lex.text());
+                       if (lex.next(true)) {
+                               if (lyxerr.debugging(Error::KBMAP))
+                                       fprintf(stderr, "     `%s'\n", lex.text());
+                               accent = getkeymod(lex.GetString());
+                       } else
+                               return -1;
+
+                       if (lex.next(true)) {
+                               if (lyxerr.debugging(Error::KBMAP))
+                                       fprintf(stderr, "      `%s'\n", lex.text());
+                               key=lex.text()[0];
+                       } else
+                               return -1;
+
+                       if (lex.next(true)) {
+                               if (lyxerr.debugging(Error::KBMAP))
+                                       fprintf(stderr, "      `%s'\n", lex.text());
+                               str=lex.text();
+                       } else
+                               return -1;
+
+                       InsertException(kmod_list_[accent]->exception_list,key,str);
+                       break;
+               }
+               case LyXLex::LEX_FEOF:
+                       lyxerr.debug("End of parsing",Error::LEX_PARSER);
+                       break;
+               default:
+                       lex.printError("ParseKeymapFile: "
+                                      "Unknown tag: `$$Token'");
+                       return -1;
+               }
+       }
+       return 0;
+}
+
+
+bool Trans::isAccentDefined(tex_accent accent,KmodInfo& i)
+{
+       if (kmod_list_[accent]!=NULL) {
+               i=*kmod_list_[accent];
+               return true;
+       }
+       return false;
+}
+
+
+LString Trans::process(char c,TransManager& k)
+{
+       char dummy[2]="?";
+       char *dt=dummy;
+       char *t=Match(c);
+       
+    
+       if ((t==NULL && (*dt=c)) || (t[0]!=0 && (dt=t)) ){
+               return k.normalkey(c,dt);
+       } else {
+               return k.deadkey(c,*kmod_list_[(tex_accent)t[1]]);
+       }
+}
+
+
+int Trans::Load(LString const &language)
+{
+       LString filename = LibFileSearch("kbd", language, "kmap");
+       if (filename.empty())
+               return -1;
+
+       FreeKeymap();
+       LyXLex lex(kmapTags, K_LAST-1);
+       lex.setFile(filename);
+       
+       int res=Load(lex);
+
+       if (res==0) {
+               name_=language;
+       } else
+               name_.clean();
+
+       return res;
+}
+
+
+tex_accent getkeymod(LString const &p)
+       /* return modifier - decoded from p and update p */
+{
+       for (int i = 1; i <= TEX_MAX_ACCENT; i++) {
+               if (lyxerr.debugging(Error::KBMAP))
+                       fprintf(stderr,
+                               "p = %s, lyx_accent_table[%d].name = `%s'\n",
+                               p.c_str(), i, lyx_accent_table[i].name);
+               
+               if ( lyx_accent_table[i].name && p.contains(lyx_accent_table[i].name)) {
+                       lyxerr.debug("Found it!",Error::KBMAP);
+                       return (tex_accent)i;
+               }
+       }
+       return TEX_NOACCENT;
+}
diff --git a/src/trans.h b/src/trans.h
new file mode 100644 (file)
index 0000000..929cd7f
--- /dev/null
@@ -0,0 +1,103 @@
+// -*- C++ -*-
+#ifndef _Trans_h_
+#define _Trans_h_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "tex-accent.h"
+#include "LString.h"
+#include "trans_decl.h"
+
+class LyXLex;
+
+class TransManager;
+
+/**
+  TransInterface: the interface that every translation class
+  should obey too.
+  Visitor pattern applied here
+  */
+class TransInterface {
+public:
+       ///
+       virtual LString process(char,TransManager&)=0;
+       ///
+       virtual bool isAccentDefined(tex_accent,KmodInfo&)=0;
+};
+
+/**
+  DefaultTrans: the default translation class. Hols info
+  on tex-accents. Monostate
+  */
+class DefaultTrans: public TransInterface {
+private:
+       ///
+       static bool init_;
+public:
+       ///
+       DefaultTrans();
+       ///
+       virtual LString process(char,TransManager&);
+};
+
+
+/**
+  Trans: holds a .kmap file 
+  */
+class Trans:public TransInterface {
+public:
+       ///
+       Trans();
+       ///
+       virtual ~Trans();
+
+       ///
+       int Load(LString const &language);
+       ///
+       bool IsDefined();
+       ///
+       const LString& GetName();
+       ///
+       LString process(char,TransManager&);
+       ///
+       bool isAccentDefined(tex_accent,KmodInfo&);
+    
+private:
+       ///
+       typedef KmodInfo kmod_list_decl;
+       ///
+       typedef KmodException keyexc;
+    
+       ///
+       void AddDeadkey(tex_accent, const LString&, const LString&);
+       ///
+       void FreeKeymap();
+       ///
+       int Load(LyXLex &);
+       ///
+       inline char* Match(char c);
+       ///
+       void InsertException(keyexc &exclist, char c,
+                            const LString& data, bool = false,
+                            tex_accent = TEX_NOACCENT);
+       ///
+       void FreeException(keyexc& exclist);
+
+       ///
+       LString name_;
+       ///
+       char *keymap_[256];
+       ///
+       kmod_list_decl *kmod_list_[TEX_MAX_ACCENT+1];
+
+};
+
+
+char* Trans::Match(char c)
+{
+       return keymap_[(unsigned char)c];
+}
+
+#endif 
diff --git a/src/trans_decl.h b/src/trans_decl.h
new file mode 100644 (file)
index 0000000..85d39e0
--- /dev/null
@@ -0,0 +1,35 @@
+// -*- C++ -*-
+#ifndef _Trans_Decl_h_
+#define _Trans_Decl_h_
+
+#include "LString.h"
+#include "tex-accent.h"
+
+struct Keyexc {
+       char c;         /* character to make exception */
+       LString data;   /* exception data */
+       Keyexc *next;
+       bool combined;  // Combination with another deadkey
+       tex_accent accent;      // The accent combined with
+};
+
+///
+typedef Keyexc *KmodException;
+
+//
+// 
+//
+
+struct KmodInfo {
+       LString data;
+       tex_accent accent;
+       LString allowed;
+       KmodException exception_list;    
+       
+       KmodInfo(const KmodInfo&);
+       KmodInfo();
+       
+       KmodInfo& operator=(const KmodInfo&);
+};
+
+#endif
diff --git a/src/trans_mgr.C b/src/trans_mgr.C
new file mode 100644 (file)
index 0000000..a3435dc
--- /dev/null
@@ -0,0 +1,391 @@
+
+#ifdef __GNUG__
+#pragma implementation "trans_mgr.h"
+#endif
+
+#include <assert.h>
+#include "trans_mgr.h"
+#include "trans.h"
+#include "lyxtext.h"
+#include "LString.h"
+#include "error.h"
+#include "chset.h"
+#include "insets/insetlatexaccent.h"
+#include "BufferView.h"
+#include "buffer.h"
+#include "lyxrc.h"
+
+extern LyXRC* lyxrc;
+extern LString DoAccent(const LString&,tex_accent);
+extern void InsertCorrectQuote();
+extern LString DoAccent(char,tex_accent);
+extern BufferView* current_view;
+
+
+// TransFSMData
+TransFSMData::TransFSMData()
+{
+    deadkey_=deadkey2_=0;
+    deadkey_info_.accent=deadkey2_info_.accent=TEX_NOACCENT;
+    comb_info_=NULL;
+}
+
+
+// TransState
+const char TransState::TOKEN_SEP=4;
+
+
+TransState::~TransState()
+{}
+
+
+// TransInitState
+TransInitState::TransInitState()
+{
+    init_state_=this;
+}
+
+
+LString TransInitState::normalkey(char c,char *t)
+{
+    LString res;
+    if (t!=NULL)
+       res=t;
+    else
+       res=c;
+       
+    return res;
+}
+
+
+//bool TransInitState::backspace()
+//{
+//    return true;
+//}
+
+
+LString TransInitState::deadkey(char c,KmodInfo d)
+{
+    deadkey_=c;
+    deadkey_info_=d;
+    currentState=deadkey_state_;
+    return LString();
+}
+
+
+// TransDeadkeyState
+TransDeadkeyState::TransDeadkeyState()
+{
+    deadkey_state_=this;
+}
+
+
+LString TransDeadkeyState::normalkey(char c,char *trans)
+{
+    LString res;
+    
+    // Check if it is an exception
+    KmodException l=deadkey_info_.exception_list;
+    while(l!=NULL) {
+       if (l->c==c) {
+           res=l->data;
+           break;
+       }
+       l=l->next;
+    }
+    if (l==NULL) {
+       // Not an exception. Check if it allowed
+       if (current_view->currentBuffer()->params.allowAccents==true ||
+           deadkey_info_.allowed.countChar(c)>0) {
+           res=DoAccent(c,deadkey_info_.accent);
+       } else {
+           // Not allowed
+           if (deadkey_!=0)
+               res=deadkey_;
+           res+=TOKEN_SEP;
+           res+=trans;
+       }
+    }
+    currentState=init_state_;
+    return res;
+}
+
+
+//bool TransDeadkeyState::backspace()
+//{
+//    currentState=init_state_;
+//    return false;
+//}
+
+
+LString TransDeadkeyState::deadkey(char c,KmodInfo d)
+{
+    LString res;
+    
+    // Check if the same deadkey was typed twice
+    if (deadkey_==c) {
+       res=deadkey_;
+       deadkey_=0;
+       deadkey_info_.accent=TEX_NOACCENT;
+       currentState=init_state_;
+       return res;
+    }
+    
+    // Check if it is a combination or an exception
+    KmodException l;
+    l=deadkey_info_.exception_list;
+    
+    while(l) {
+       if (l->combined==true && l->accent==d.accent) {
+           deadkey2_=c;
+           deadkey2_info_=d;
+           comb_info_=l;
+           currentState=combined_state_;
+           return LString();
+       }
+       if (l->c==c) {
+           res=l->data;
+           deadkey_=0;
+           deadkey_info_.accent=TEX_NOACCENT;
+           currentState=init_state_;
+           return res;
+       }
+       
+       l=l->next;
+    }
+    
+    // Not a combination or an exception. 
+    // Output deadkey1 and keep deadkey2
+    
+    if (deadkey_!=0)
+       res=deadkey_;
+    deadkey_=c;
+    deadkey_info_=d;
+    currentState=deadkey_state_;
+    return res;
+}
+
+
+TransCombinedState::TransCombinedState()
+{
+    combined_state_=this;
+}
+
+
+LString TransCombinedState::normalkey(char c,char *trans)
+{
+    LString res;
+    
+    // Check if the key is allowed on the combination
+    if (comb_info_->data.countChar(c)>0) {
+       LString temp;
+       temp=DoAccent(c,deadkey2_info_.accent);
+       res=DoAccent(temp,deadkey_info_.accent);
+       currentState=init_state_;
+    } else {
+       // Not allowed. Output deadkey1 and check deadkey2 + c
+       if (deadkey_!=0)
+           res+=deadkey_;
+       res+=TOKEN_SEP;
+       deadkey_=deadkey2_;
+       deadkey_info_=deadkey2_info_;
+       // Call deadkey state and leave it to setup the FSM
+       res+=deadkey_state_->normalkey(c,trans);
+    }
+    return res;
+}
+
+
+// bool TransCombinedState::backspace()
+// {
+//     // cancel the second deadkey
+//     deadkey2_=0;
+//     deadkey2_info_.accent=TEX_NOACCENT;
+//     currentState=deadkey_state_;
+    
+//     return false;
+// }
+
+
+LString TransCombinedState::deadkey(char c,KmodInfo d)
+{
+    // Third key in a row. Output the first one and
+    // reenter with shifted deadkeys
+    LString res;
+    if (deadkey_!=0)
+       res=deadkey_;
+    res+=TOKEN_SEP;
+    deadkey_=deadkey2_;
+    deadkey_info_=deadkey2_info_;
+    res+=deadkey_state_->deadkey(c,d);
+    return res;
+}
+
+
+// TransFSM
+TransFSM::TransFSM():
+    TransFSMData(),
+    TransInitState(),
+    TransDeadkeyState(),
+    TransCombinedState()
+{
+    currentState=init_state_;
+}
+
+
+// TransManager
+    
+TransManager::TransManager()
+    : active_(NULL),t1_(new Trans),t2_(new Trans),chset_(new CharacterSet)
+{}
+
+
+Trans* TransManager::default_=new Trans;
+
+
+TransManager::~TransManager() 
+{ 
+    delete t1_;
+    delete t2_;
+    delete chset_;
+}
+
+
+int TransManager::SetPrimary(LString const & language)
+{
+    if (t1_->GetName()==language) 
+       return 0;
+       
+    return t1_->Load(language);
+}
+
+
+int TransManager::SetSecondary(LString const & language)
+{
+    if (t2_->GetName()==language)
+       return 0;
+       
+    return t2_->Load(language);
+}
+
+
+bool TransManager::setCharset(const char *set)
+{
+    return chset_->loadFile(set);
+}
+
+
+void TransManager::EnablePrimary()
+{
+    if (t1_->IsDefined())
+       active_=t1_;
+
+    lyxerr.debug("Enabling primary keymap",Error::KBMAP);
+}
+
+
+void TransManager::EnableSecondary()
+{
+    if (t2_->IsDefined( ))
+       active_=t2_;
+    lyxerr.debug("Enabling secondary keymap",Error::KBMAP);
+}
+
+
+void TransManager::DisableKeymap()
+{
+    active_=default_;
+    lyxerr.debug("Disabling keymap",Error::KBMAP);
+}
+
+
+void  TransManager::TranslateAndInsert(char c,LyXText *text)
+{
+    LString res;
+       
+    res=active_->process(c,*this);
+    
+    // Process with tokens
+    LString temp;
+       
+    while(res.length()>0) {
+       res.split(temp,TransState::TOKEN_SEP);
+       insert(temp,text);
+    }
+}
+
+
+void TransManager::insertVerbatim(const LString& str,LyXText *text)
+{      
+    int l=str.length();
+       
+    for (int i=0;i<l;i++){
+       if (str[i]=='\"' 
+           && text->GetFont(text->cursor.par,
+                            text->cursor.pos).latex() == LyXFont::OFF)
+           InsertCorrectQuote();
+       else
+           text->InsertChar(str[i]);
+    }
+}
+
+
+void TransManager::insert(LString str,LyXText *text)
+{
+    LString t=str;
+    
+    // Go through the character encoding only if the current 
+    // encoding (chset_->name()) matches the current font_norm
+    // (lyrxc->font_norm
+
+    if (chset_->getName()!=lyxrc->font_norm || 
+       chset_->encodeString(str)==false) {
+       // Could not find an encoding
+       InsetLatexAccent ins(str);
+       if (ins.CanDisplay()) {
+           text->InsertInset(new InsetLatexAccent(ins));
+           return;
+       }
+    }
+    
+    insertVerbatim(str,text);
+}
+
+
+//bool TransManager::backspace()
+//{
+//    return trans_fsm_.currentState->backspace();
+//}
+
+
+void TransManager::deadkey(char c,tex_accent accent,LyXText *t)
+{
+    KmodInfo i;
+    LString res;
+    
+    if (c==0 && active_!=default_) {
+       // A deadkey was pressed that cannot be printed
+       // or a accent command was typed in the minibuffer
+       
+       if (active_->isAccentDefined(accent,i)==true) {
+           res=trans_fsm_.currentState->deadkey(c,i);
+           insert(res,t);
+           return;
+       }
+    }// else {
+       // Fall through to the next case
+    //}
+    
+    if (active_==default_ || c==0) {
+       i.accent=accent;
+       i.allowed=lyx_accent_table[accent].native;
+       i.data.clean();
+       i.exception_list=NULL;
+       
+       LString res=trans_fsm_.currentState->deadkey(c,i);
+       insert(res,t);
+    } else {
+       // Go through the translation
+       TranslateAndInsert(c,t);
+    }
+}
diff --git a/src/trans_mgr.h b/src/trans_mgr.h
new file mode 100644 (file)
index 0000000..214886b
--- /dev/null
@@ -0,0 +1,201 @@
+// -*- C++ -*-
+#ifndef _Trans_Manager_h_
+#define _Trans_Manager_h_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "tex-accent.h"
+#include "trans_decl.h"
+
+class LyXText;
+class LString;
+class CharacterSet;
+class Trans;
+
+/// Translation State
+class TransState {
+public:
+       ///
+       virtual ~TransState();
+       ///
+       virtual LString normalkey(char,char*)=0;
+       ///
+       virtual bool backspace()=0;
+       ///
+       virtual LString deadkey(char,KmodInfo)=0;
+       ///
+       static const char TOKEN_SEP;
+};
+
+
+/// Translation FSM
+class TransFSMData {
+protected:
+       ///
+       virtual ~TransFSMData()
+       {}
+       ///
+       char deadkey_;
+       ///
+       KmodInfo deadkey_info_;
+       ///
+       char deadkey2_;
+       ///
+       KmodInfo deadkey2_info_;
+       ///
+       KmodException comb_info_;
+       ///
+       TransState* init_state_;
+       ///
+       TransState* deadkey_state_;
+       ///
+       TransState* combined_state_;
+       ///
+public:
+       ///
+       TransFSMData();
+       ///
+       TransState* currentState;
+};
+
+
+/// Init State
+class TransInitState: 
+       virtual public TransFSMData,
+       public TransState {
+public:
+               ///
+               TransInitState();
+               ///
+               virtual LString normalkey(char,char*);
+               ///
+               virtual bool backspace() { return true; }
+               ///
+               virtual LString deadkey(char,KmodInfo);
+};
+
+
+/// Deadkey State
+class TransDeadkeyState: 
+       virtual public TransFSMData,
+       public TransState {
+public:
+               ///
+               TransDeadkeyState();
+               ///
+               virtual LString normalkey(char,char*);
+               ///
+               virtual bool backspace()
+       {
+               currentState=init_state_;
+               return false;
+       }
+               ///
+               virtual LString deadkey(char,KmodInfo);
+};
+
+
+/// Combined State
+class TransCombinedState: 
+       virtual public TransFSMData,
+       public TransState {
+public:
+               ///
+               TransCombinedState();
+               ///
+               virtual LString normalkey(char,char*);
+               ///
+               virtual bool backspace()
+       {
+               // cancel the second deadkey
+               deadkey2_=0;
+               deadkey2_info_.accent=TEX_NOACCENT;
+               currentState=deadkey_state_;
+               
+               return false;
+       }
+               ///
+               virtual LString deadkey(char,KmodInfo);
+};
+
+
+///
+class TransFSM:        
+       virtual public TransFSMData,
+       public TransInitState,
+       public TransDeadkeyState,
+       public TransCombinedState
+{
+public:
+       ///
+       TransFSM();
+};
+
+///
+class TransManager
+{
+private:
+       ///
+       TransFSM trans_fsm_;
+       ///
+       Trans* active_;
+       ///
+       Trans* t1_;
+       ///
+       Trans* t2_;
+       ///
+       static Trans* default_;
+       ///
+       CharacterSet* chset_;
+       ///
+       void insert(LString,LyXText*);
+       ///
+       void insertVerbatim(const LString&,LyXText*);
+public:
+       ///
+       TransManager();
+       ///
+       virtual ~TransManager();
+       ///
+       int SetPrimary(LString const &);
+       ///
+       int SetSecondary(LString const &);
+       ///
+       void EnablePrimary();
+       ///
+       void EnableSecondary();
+       ///
+       void DisableKeymap();
+       ///
+       bool setCharset(const char*);
+       ///
+       bool backspace()
+       {
+               return trans_fsm_.currentState->backspace();
+       }
+       ///
+       void TranslateAndInsert(char,LyXText*);
+       ///
+       inline LString deadkey(char,KmodInfo);
+       ///
+       inline LString normalkey(char,char*);
+       ///
+       void deadkey(char,tex_accent,LyXText*);
+    
+};
+
+
+LString TransManager::normalkey(char c,char *t)
+{
+       return trans_fsm_.currentState->normalkey(c,t);
+}
+
+
+LString TransManager::deadkey(char c,KmodInfo t)
+{
+       return trans_fsm_.currentState->deadkey(c,t);
+}
+
+#endif
diff --git a/src/undo.h b/src/undo.h
new file mode 100644 (file)
index 0000000..da2be2b
--- /dev/null
@@ -0,0 +1,162 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich, 1995, 1996 LyX Team
+ *
+ *======================================================*/
+#ifndef _UNDO_H
+#define _UNDO_H
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include "definitions.h"
+#include "lyxparagraph.h"
+
+
+///
+class Undo {
+public:
+       /// The undo kinds
+       enum undo_kind {
+               ///
+               INSERT,
+               ///
+               DELETE,
+               ///
+               EDIT,
+               ///
+               FINISH
+       };
+       ///
+       undo_kind kind;
+       ///
+       int number_of_before_par;
+       ///
+       int number_of_behind_par;
+       ///
+       int number_of_cursor_par;
+       ///
+       int cursor_pos; // valid if >= 0
+       ///
+       LyXParagraph* par;
+       ///
+       Undo(undo_kind kind_arg,
+            int number_before_arg, int number_behind_arg,
+            int cursor_par_arg, int cursor_pos_arg,
+            LyXParagraph* par_arg)
+       {
+               kind = kind_arg;
+               number_of_before_par = number_before_arg;
+               number_of_behind_par = number_behind_arg;
+               number_of_cursor_par = cursor_par_arg;
+               cursor_pos = cursor_pos_arg;
+               par = par_arg;
+       }
+       ///
+       ~Undo(){
+               LyXParagraph* tmppar;
+               while (par) {
+                       tmppar = par;
+                       par = par->next;
+                       delete tmppar;
+               }
+       }
+};
+
+
+/// A limited Stack for the undo informations. Matthias 290496
+class UndoStack{
+private:
+       ///
+       struct StackAtom{
+               ///
+               StackAtom* previous;
+               ///
+               Undo* undo;
+       };
+       ///
+       StackAtom* current;
+       ///
+       StackAtom *tmp;
+       ///
+       int size;
+       ///
+       int limit;
+public:
+       ///
+       UndoStack(){
+               current = NULL;
+               // size must be initialised (thornley)
+               size = 0;
+               limit = 100; // the maximum number of undo steps stored. 0 means NO LIMIT. 
+               // Limit can be changed with UndoStack::SetStackLimit(int) 
+       }
+       ///
+       Undo *Pop(){
+               Undo* result = NULL;
+               if (current){
+                       result = current->undo;
+                       tmp = current;
+                       current = current->previous;
+                       delete tmp;
+                       size--;
+               }
+               else {
+                       size = 0; // for safety...
+               }
+               return result;
+       }
+       ///
+       Undo* Top(){
+               if (current)
+                       return current->undo;
+               else
+                       return NULL;
+       }
+       ///
+       ~UndoStack(){
+               Clear();
+       }
+       ///
+       void Clear(){
+               Undo* tmp_undo = Pop();
+               while (tmp_undo){
+                       delete tmp_undo;
+                       tmp_undo = Pop();
+               }
+       }
+       ///
+       void SetStackLimit(int limit_arg) {
+               limit = limit_arg;
+       }
+    
+       ///
+       void Push(Undo* undo_arg){
+               int i;
+               StackAtom* tmp2;
+               if (undo_arg){
+                       tmp = new StackAtom;
+                       tmp->undo = undo_arg;
+                       tmp->previous = current;
+                       current = tmp;
+                       size++;
+                       if (limit && size > limit){
+                               for (i=0; i<limit && tmp; i++)
+                                       tmp = tmp->previous;
+                               while(tmp && tmp->previous){
+                                       tmp2 = tmp->previous->previous;
+                                       delete tmp->previous;
+                                       size--;
+                                       tmp->previous = tmp2;
+                               }
+                       }
+               }
+       }
+};
+
+#endif
diff --git a/src/version.h b/src/version.h
new file mode 100644 (file)
index 0000000..9068008
--- /dev/null
@@ -0,0 +1,3 @@
+/* Version and release date definition */
+#define LYX_VERSION "1.0.4pre7"
+#define LYX_RELEASE "Wed, Jul 26, 1999"
diff --git a/src/vms_defines.h b/src/vms_defines.h
new file mode 100644 (file)
index 0000000..8e2d552
--- /dev/null
@@ -0,0 +1,17 @@
+/* -*- C++ -*- */
+/* This file is part of
+* ======================================================
+* 
+*           LyX, the High Level Word Processor
+*        
+*           Copyright (C) 1995,1996 Matthias Ettrich
+*
+*======================================================
+ A few prototypes and definitions needed for VMS / OpenVMS */
+
+#ifndef _VMS_DEFINES_H
+#define _VMS_DEFINES_H
+
+/* Currently empty. */
+
+#endif /* _VMS_DEFINES_H */
diff --git a/src/vspace.C b/src/vspace.C
new file mode 100644 (file)
index 0000000..c66e787
--- /dev/null
@@ -0,0 +1,605 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 Matthias Ettrich
+ *          Copyright (C) 1995-1998 The LyX Team.
+ *
+ *======================================================*/
+
+#include <config.h>
+
+#ifdef __GNUG__
+#pragma implementation "vspace.h"
+#endif
+
+#include "lyx_main.h"
+#include "buffer.h"
+#include "vspace.h"
+#include "lyxrc.h"
+#include "lyxtext.h"
+#include <stdio.h>
+#include <string.h>
+#include "BufferView.h"
+
+extern LyXRC * lyxrc;
+extern BufferView *current_view;
+
+//     $Id: vspace.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $    
+
+#if !defined(lint) && !defined(WITH_WARNINGS)
+static char vcid[] = "$Id: vspace.C,v 1.1 1999/09/27 18:44:38 larsbj Exp $";
+#endif /* lint */
+
+/*  length units
+ */
+
+static const int   num_units            = int(LyXLength::UNIT_NONE);
+
+// I am not sure if "mu" should be possible to select (Lgb)
+static char const* unit_name[num_units] = { "sp", "pt", "bp", "dd",
+                                           "mm", "pc", "cc", "cm",
+                                           "in", "ex", "em", "mu" }; 
+
+
+LyXLength::UNIT unitFromString (LString const & data)
+{
+       int i=0;
+       while ((i<num_units) && (data != unit_name[i])) i++;
+       return (LyXLength::UNIT)i;
+}
+
+/*  The following static items form a simple scanner for
+ *  length strings, used by isValid[Glue]Length.  See comments there.
+ */
+static float           number[4] = { 0, 0, 0, 0 };
+static LyXLength::UNIT unit[4]   = { LyXLength::UNIT_NONE,
+                                    LyXLength::UNIT_NONE,
+                                    LyXLength::UNIT_NONE,
+                                    LyXLength::UNIT_NONE };
+//static int number_index, unit_index;
+int number_index, unit_index;
+
+static void advance (LString& data, const int n)
+{
+       if (data.length() <= n)
+               data.clean();
+       else
+               data.substring (n, data.length()-1);
+}
+
+static bool isEndOfData (LString& data)
+{
+       data.frontStrip (' ');
+       return data.empty();
+}
+
+static char nextToken (LString& data)
+{
+       data.frontStrip (' ');
+
+       if (data.empty())
+               return '\0';
+       else if (data[0] == '+') {
+               advance (data, 1);
+               return '+';
+       }
+       else if (data.prefixIs ("plus")) {
+               advance (data, 4);
+               return '+';
+       }
+       else if (data[0] == '-') {
+               advance (data, 1);
+               return '-';
+       }
+        else if (data.prefixIs ("minus")) {
+               advance (data, 5);
+               return '-';
+       }
+       else {
+               int      i;
+
+               // I really mean assignment ("=") below, not equality!
+
+               if ((i = strspn (data.c_str(), "0123456789."))) {
+                       if (number_index > 3) return 'E';  // Error
+                        LString buffer = data;
+                       buffer.substring (0, i-1);
+                       if (sscanf (buffer.c_str(),
+                                   "%f", &number[number_index]) == 1) {
+                               advance (data, i);
+                               number_index++;
+                               return 'n';
+                       } else 
+                               return 'E';  // Error
+               } else if ((i = strspn (data.c_str(),
+                                      "abcdefghijklmnopqrstuvwxyz"))) {
+                       if (unit_index > 3) return 'E';  // Error
+                       LString buffer = data; buffer.substring (0, i-1);
+                       unit[unit_index] = unitFromString (buffer);
+                       if (unit[unit_index] != LyXLength::UNIT_NONE) {
+                               advance (data, i);
+                               unit_index++;
+                               return 'u';
+                       } else
+                               return 'E';  // Error
+               } else
+                       return 'E';  // Error
+       }
+}
+
+static struct {
+       char const* pattern;
+       int   plus_val_index, minus_val_index,
+             plus_uni_index, minus_uni_index;
+} table[] = { { "nu",       0, 0, 0, 0 },
+             { "nu+nu",    2, 0, 2, 0 },
+             { "nu+nu-nu", 2, 3, 2, 3 },
+             { "nu+-nu",   2, 2, 2, 2 },
+             { "nu-nu",    0, 2, 0, 2 },
+             { "nu-nu+nu", 3, 2, 3, 2 },
+             { "nu-+nu",   2, 2, 2, 2 },
+             { "n+nu",     2, 0, 1, 0 },
+             { "n+n-nu",   2, 3, 1, 1 },
+             { "n+-nu",    2, 2, 1, 1 },
+             { "n-nu",     0, 2, 0, 1 },
+             { "n-n+nu",   3, 2, 1, 1 },
+             { "n-+nu",    2, 2, 1, 1 },
+              { "",         0, 0, 0, 0 }   // sentinel, must be empty
+};
+
+bool isValidGlueLength (LString const & data, LyXGlueLength* result)
+{
+       // This parser is table-driven.  First, it constructs a "pattern"
+        // that describes the sequence of tokens in "data".  For example,
+       // "n-nu" means: number, minus sign, number, unit.  As we go along,
+        // numbers and units are stored into static arrays.  Then, "pattern"
+        // is searched in the "table".  If it is found, the associated
+        // table entries tell us which number and unit should go where
+        // in the LyXLength structure.  Example: if "data" has the "pattern"
+        // "nu+nu-nu", the associated table entries are "2, 3, 2, 3".  
+       // That means, "plus_val" is the second number that was seen
+       // in the input, "minus_val" is the third number, and "plus_uni"
+       // and "minus_uni" are the second and third units, respectively.
+       // ("val" and "uni" are always the first items seen in "data".)
+        //     This is the most elegant solution I could find -- a straight-
+        // forward approach leads to very long, tedious code that would be
+        // much harder to understand and maintain. (AS)
+
+       LString   buffer = data;
+       buffer.frontStrip(' ');
+
+       // To make isValidGlueLength recognize negative values as
+       // the first number this little hack is needed:
+       short val_sign = 1; // positive as default
+       switch(buffer[0]) {
+       case '-':
+               advance(buffer, 1);
+               val_sign = -1;
+               break;
+       case '+':
+               advance(buffer, 1);
+               // fall through
+       default:
+               // no action
+               break;
+       }
+       // end of hack
+       
+       int       pattern_index = 0, table_index = 0;
+       char      pattern[20];
+
+       number_index = unit_index = 1;  // entries at index 0 are sentinels
+
+       // construct "pattern" from "data"
+       while (!isEndOfData (buffer)) {
+               if (pattern_index > 20) return false;
+               pattern[pattern_index] = nextToken (buffer);
+               if (pattern[pattern_index] == 'E') return false;
+               pattern_index++;
+       }
+       pattern[pattern_index] = '\0';
+
+       // search "pattern" in "table"
+       table_index = 0;
+       while (strcmp (pattern, table[table_index].pattern)) {
+               table_index++;
+               if (!*table[table_index].pattern) return false;
+       }
+       
+       // Get the values from the appropriate places.  If an index
+       // is zero, the corresponding array value is zero or UNIT_NONE,
+       // so we needn't check this.
+       if (result) {
+           result->val = number[1] * val_sign;
+           result->uni = unit[1];
+           result->plus_val  = number[table[table_index].plus_val_index];
+           result->minus_val = number[table[table_index].minus_val_index];
+           result->plus_uni  = unit  [table[table_index].plus_uni_index];
+           result->minus_uni = unit  [table[table_index].minus_uni_index];
+       }
+       return true;
+}
+
+
+bool isValidLength(LString const & data, LyXLength* result)
+{
+       /// This is a trimmed down version of isValidGlueLength.
+       /// The parser may seem overkill for lengths without 
+       /// glue, but since we already have it, using it is
+       /// easier than writing something from scratch.
+
+        LString   buffer = data;
+       int       pattern_index = 0;
+       char      pattern[3];
+
+       // To make isValidLength recognize negative values
+       // this little hack is needed:
+       short val_sign = 1; // positive as default
+       switch(buffer[0]) {
+       case '-':
+               advance(buffer, 1);
+               val_sign = -1;
+               break;
+       case '+':
+               advance(buffer, 1);
+               // fall through
+       default:
+               // no action
+               break;
+       }
+       // end of hack
+       
+       number_index = unit_index = 1;  // entries at index 0 are sentinels
+
+       // construct "pattern" from "data"
+       while (!isEndOfData (buffer)) {
+               if (pattern_index > 2) return false;
+               pattern[pattern_index] = nextToken (buffer);
+               if (pattern[pattern_index] == 'E') return false;
+               pattern_index++;
+       }
+       pattern[pattern_index] = '\0';
+
+       // only the most basic pattern is accepted here
+       if (strcmp (pattern, "nu") != 0) return false;          
+       
+       // It _was_ a correct length string.  
+       // Store away the values we found.
+       if (result) {
+           result->val = number[1]*val_sign;
+           result->uni = unit[1];
+       }
+       return true;
+}
+
+/// LyXLength class
+
+LyXLength::LyXLength(LString const & data)
+{
+       LyXLength tmp;
+       
+       if (!isValidLength (data, &tmp))
+               return; // should raise an exception
+       else {
+               val = tmp.val;
+               uni = tmp.uni;
+       }
+}
+
+bool LyXLength::operator== (LyXLength other)
+{
+       return (this->val == other.val)
+           && (this->uni == other.uni);
+}
+
+LString LyXLength::asString() const
+{
+       char buffer[20];
+
+       sprintf (buffer, "%g%s", val, unit_name[uni]);
+       return LString (buffer);
+}
+
+
+/*  LyXGlueLength class
+ */
+
+LyXGlueLength::LyXGlueLength (LString const & data)
+{
+       LyXGlueLength tmp(0.0, PT);
+
+       if (!isValidGlueLength (data, &tmp))
+               return; // should raise an exception
+       else {
+               val=tmp.val;
+               uni=tmp.uni;
+               plus_val =tmp.plus_val;
+               plus_uni =tmp.plus_uni;
+               minus_val=tmp.minus_val;
+               minus_uni=tmp.minus_uni;
+       }
+}
+
+
+bool LyXGlueLength::operator== (LyXGlueLength other)
+{
+       return (this->val == other.val) 
+           && (this->uni == other.uni)
+           && (this->plus_val  == other.plus_val)
+           && (this->plus_uni  == other.plus_uni)
+           && (this->minus_val == other.minus_val)
+           && (this->minus_uni == other.minus_uni);
+}
+
+
+LString LyXGlueLength::asString () const
+{
+       char buffer[20];
+       
+       if (plus_val != 0.0)
+           if (minus_val != 0.0)
+               if ((uni == plus_uni) && (uni == minus_uni))
+                   if (plus_val == minus_val)
+                       sprintf (buffer, "%g+-%g%s",
+                                val, plus_val, unit_name[uni]);
+                   else
+                       sprintf (buffer, "%g+%g-%g%s",
+                                val, plus_val, minus_val, 
+                                unit_name[uni]);
+               else
+                   if ((plus_uni == minus_uni) && (plus_val == minus_val))
+                       sprintf (buffer, "%g%s+-%g%s",
+                                val, unit_name[uni],
+                                plus_val, unit_name[plus_uni]);
+                   else
+                       sprintf (buffer, "%g%s+%g%s-%g%s",
+                                val,       unit_name[uni],
+                                plus_val,  unit_name[plus_uni],
+                                minus_val, unit_name[minus_uni]);
+           else 
+               if (uni == plus_uni)
+                   sprintf (buffer, "%g+%g%s",
+                            val, plus_val, unit_name[uni]);
+               else
+                   sprintf (buffer, "%g%s+%g%s",
+                            val,      unit_name[uni],
+                            plus_val, unit_name[plus_uni]);
+       else
+           if (minus_val != 0.0)
+               if (uni == minus_uni)
+                   sprintf (buffer, "%g-%g%s",
+                            val, minus_val, unit_name[uni]);
+               else
+                   sprintf (buffer, "%g%s-%g%s",
+                            val,       unit_name[uni],
+                            minus_val, unit_name[minus_uni]);
+           else
+               sprintf (buffer, "%g%s", val, unit_name[uni]);
+       return LString (buffer);
+}
+
+
+LString LyXGlueLength::asLatexString() const
+{
+       char buffer[40];
+
+       if (plus_val != 0.0)
+               if (minus_val != 0.0)
+                       sprintf (buffer, "%g%s plus %g%s minus %g%s",
+                                val, unit_name[uni],
+                                plus_val,  unit_name[plus_uni],
+                                minus_val, unit_name[minus_uni]);
+               else
+                       sprintf (buffer, "%g%s plus %g%s",
+                                val,      unit_name[uni],
+                                plus_val, unit_name[plus_uni]);
+       else
+               if (minus_val != 0.0)
+                       sprintf (buffer, "%g%s minus %g%s",
+                                val,       unit_name[uni],
+                                minus_val, unit_name[minus_uni]);
+               else
+                       sprintf (buffer, "%g%s",
+                                val, unit_name[uni]);
+       return LString (buffer);
+}
+
+
+/*  VSpace class
+ */
+
+VSpace::VSpace (LString const & data)
+       : kin (NONE), len (0.0, LyXLength::PT) 
+{
+       float   value;
+       LString input  = data;
+
+       input.strip(' ');
+       int length = input.length();
+
+       if (length > 1 && input[length-1] == '*') {
+               kp = true;
+               input.substring (0, length-2);
+       } else
+               kp = false;
+
+       if      (input.prefixIs ("defskip"))   kin = DEFSKIP;
+       else if (input.prefixIs ("smallskip")) kin = SMALLSKIP;
+       else if (input.prefixIs ("medskip"))   kin = MEDSKIP;
+       else if (input.prefixIs ("bigskip"))   kin = BIGSKIP;
+       else if (input.prefixIs ("vfill"))     kin = VFILL;
+       else if (isValidGlueLength (input, &len))
+               kin = LENGTH;
+       else if (sscanf (input.c_str(), "%f", &value) == 1) {
+               // This last one is for reading old .lyx files
+               // without units in added_space_top/bottom.
+               // Let unit default to centimeters here.
+               kin = LENGTH;
+               len = LyXGlueLength (value, LyXLength::CM);
+       }
+}
+
+
+bool VSpace::operator== (VSpace other)
+{
+       if (this->kin == other.kin) 
+               if (this->kin == LENGTH)
+                       if (this->len == other.len)
+                               return this->kp == other.kp;
+                       else
+                               return false;
+               else
+                       return this->kp == other.kp;
+       else
+               return false;
+}
+
+
+LString VSpace::asLyXCommand() const
+{
+        LString result;
+
+       switch (kin) {
+       case NONE:      break;
+       case DEFSKIP:   result = "defskip";      break;
+       case SMALLSKIP: result = "smallskip";    break;
+       case MEDSKIP:   result = "medskip";      break;
+       case BIGSKIP:   result = "bigskip";      break;
+       case VFILL:     result = "vfill";        break;
+       case LENGTH:    result = len.asString(); break;
+       }
+       if (kp && (kin != NONE) && (kin != DEFSKIP))
+               return result += '*';
+       else
+               return result;
+}
+
+
+LString VSpace::asLatexCommand() const
+{
+       switch (kin) {
+       case NONE:      return LString();
+       case DEFSKIP:   
+         return current_view->currentBuffer()->params.getDefSkip().asLatexCommand();
+       case SMALLSKIP: return kp ? "\\vspace*{\\smallskipamount}"
+                                 : "\\smallskip{}";
+       case MEDSKIP:   return kp ? "\\vspace*{\\medskipamount}"
+                                 : "\\medskip{}";
+       case BIGSKIP:   return kp ? "\\vspace*{\\bigskipamount}"
+                                 : "\\bigskip{}";
+       case VFILL:     return kp ? "\\vspace*{\\fill}"
+                                 : "\\vfill{}";
+       case LENGTH:    return kp ? "\\vspace*{" + len.asLatexString() + '}'
+                                 : "\\vspace{" + len.asLatexString() + '}';
+       }
+       return LString();  // should never be reached
+}
+
+
+int VSpace::inPixels() const
+{
+       // Height of a normal line in pixels (zoom factor considered)
+       int height = current_view->currentBuffer()->text->DefaultHeight(); // [pixels]
+
+       // Zoom factor specified by user in percent
+       float const zoom = lyxrc->zoom / 100.0; // [percent]
+
+       // DPI setting for monitor: pixels/inch
+       float const dpi = lyxrc->dpi; // screen resolution [pixels/inch]
+
+       // We want the result in pixels
+       float result, value;
+
+       switch (kin) {
+       case NONE: return 0;
+
+       case DEFSKIP:
+         return current_view->currentBuffer()->params.getDefSkip().inPixels();
+
+       // This is how the skips are normally defined by
+       // LateX.  But there should be some way to change
+       // this per document.
+       case SMALLSKIP: return height/4;
+       case MEDSKIP:   return height/2;
+       case BIGSKIP:   return height;
+       case VFILL:     return 3*height;
+                       // leave space for the vfill symbol
+       case LENGTH:
+               // Pixel values are scaled so that the ratio
+               // between lengths and font sizes on the screen
+               // is the same as on paper.
+
+               // we don't care about sign of value, we
+               // can't display negative anyway
+               result = 0.0;
+               value = len.value();
+               short val_sign = value < 0.0 ? -1 : 1;
+               
+               switch (len.unit()) {
+               case LyXLength::SP:
+                       // Scaled point: sp = 1/65536 pt
+                       result = zoom * dpi * value
+                               / (72.27 * 65536); // 4736286.7
+                       break;
+               case LyXLength::PT:
+                       // Point: 1 pt = 1/72.27 inch
+                       result = zoom * dpi * value
+                               / 72.27; // 72.27
+                       break;
+               case LyXLength::BP:
+                       // Big point: 1 bp = 1/72 inch
+                       result = zoom * dpi * value
+                               / 72; // 72
+                       break;
+               case LyXLength::DD:
+                       // Didot: 1157dd = 1238 pt?
+                       result = zoom * dpi * value
+                               / (72.27/(0.376 * 2.845)); // 67.559735
+                       break;
+               case LyXLength::MM:
+                       // Millimeter: 1 mm = 1/25.4 inch
+                       result = zoom * dpi * value
+                               / 25.4; // 25.4
+                       break;
+               case LyXLength::PC:
+                       // Pica: 1 pc = 12 pt
+                       result = zoom * dpi * value
+                               / (72.27/12); // 6.0225
+                       break;
+               case LyXLength::CC:
+                       // Cicero: 1 cc = 12 dd
+                       result = zoom * dpi * value
+                               / (72.27/ (12*0.376*2.845)); // 5.6299779
+                       break;
+               case LyXLength::CM:
+                       // Centimeter: 1 cm = 1/2.54 inch
+                       result = zoom * dpi * value
+                               / 2.54; // 2.54
+                       break;
+               case LyXLength::IN:
+                       // Inch
+                       result = zoom * dpi * value;
+                       break;
+               case LyXLength::EX:
+                       // Ex: The height of an "x"
+                       result = zoom * value * height / 2; // what to / width?
+                       break;
+               case LyXLength::EM: // what to / width?
+                       // Em: The width of an "m"
+                       result = zoom * value * height / 2; // Why 2?
+                       break;
+               case LyXLength::MU: // This is probably only allowed in
+                                   // math mode
+                       result = zoom * value * height;
+                       break;
+               case LyXLength::UNIT_NONE:
+                       result = 0;  // this cannot happen
+                       break;  
+               }
+               return int (result * val_sign + 0.5);
+       }
+       return 0; // never reached
+}
diff --git a/src/vspace.h b/src/vspace.h
new file mode 100644 (file)
index 0000000..8e22464
--- /dev/null
@@ -0,0 +1,200 @@
+// -*- C++ -*-
+/* This file is part of
+ * ======================================================
+ * 
+ *           LyX, The Document Processor
+ *      
+ *         Copyright (C) 1995 1996 Matthias Ettrich
+ *           and the LyX Team.
+ *
+ *======================================================*/
+
+#ifndef _VSPACE_H_
+#define _VSPACE_H_
+
+#ifdef __GNUG__
+#pragma interface
+#endif
+
+#include <stdio.h>
+
+///  LyXLength Class
+class LyXLength {
+public:
+       /// length units
+       enum UNIT {
+               /// Scaled point (65536sp = 1pt) TeX's smallest unit.
+               SP,
+               /// Point = 1/72.27in = 0.351mm
+               PT,
+               /// Big point (72bp = 1in), also PostScript point
+               BP,
+               /// Didot point = 1/72 of a French inch, = 0.376mm
+               DD,
+               /// Millimeter = 2.845pt
+               MM,
+               /// Pica = 12pt = 4.218mm
+               PC,
+               /// Cicero = 12dd = 4.531mm
+               CC,
+               /// Centimeter = 10mm = 2.371pc
+               CM,
+               /// Inch = 25.4mm = 72.27pt = 6.022pc
+               IN,
+               /// Height of a small "x" for the current font.
+               EX,
+               /// Width of capital "M" in current font.
+               EM,
+               /// Math unit (18mu = 1em) for positioning in math mode
+               MU,
+               /// no unit
+               UNIT_NONE
+       };
+
+       //@Man: constructors
+       //@{
+       ///
+       LyXLength() : val(0), uni(LyXLength::PT) {};
+       LyXLength(float v, LyXLength::UNIT u) : val(v), uni(u) {};
+
+       /** "data" must be a decimal number, followed by a unit. */
+        LyXLength(LString const & data);
+       //@}
+       
+       //@Man: selectors
+       //@{
+       ///
+       float value() const         { return val; };
+       ///
+       LyXLength::UNIT unit() const { return uni; };
+       //@}
+
+       ///
+        bool operator==(LyXLength other);
+
+       /// conversion
+       virtual LString asString() const;
+       virtual LString asLatexString() const { return this->asString(); };
+
+
+       /** If "data" is valid, the length represented by it is
+         stored into "result", if that is not NULL. */
+       friend bool isValidLength(LString const & data, 
+                                 LyXLength* result=NULL);
+
+protected:
+       float           val;
+       LyXLength::UNIT uni;
+};
+
+extern LyXLength::UNIT unitFromString (LString const & data);
+extern bool isValidLength(LString const &data, LyXLength* result);
+
+/// LyXGlueLength class
+class LyXGlueLength : public LyXLength {
+public:
+       //@Man: constructors
+       //@{
+       ///
+       LyXGlueLength(float v,      LyXLength::UNIT u, 
+                     float pv=0.0, LyXLength::UNIT pu=LyXLength::UNIT_NONE, 
+                     float mv=0.0, LyXLength::UNIT mu=LyXLength::UNIT_NONE) 
+               : LyXLength (v, u), 
+                 plus_val(pv), minus_val(mv), 
+                 plus_uni(pu), minus_uni(mu) {};
+
+       /** "data" must be a decimal number, followed by a unit, and 
+         optional "glue" indicated by "+" and "-".  You may abbreviate
+         reasonably.  Examples:
+         1.2 cm  //  4mm +2pt  //  2cm -4mm +2mm  //  4+0.1-0.2cm
+         The traditional Latex format is also accepted, like  
+         4cm plus 10pt minus 10pt */
+        LyXGlueLength(LString const & data);
+       //@}
+       
+       //@Man: selectors
+       //@{
+       ///
+       float plusValue() const         { return plus_val; };
+       ///
+       LyXLength::UNIT plusUnit() const { return plus_uni; };
+       ///
+       float minusValue() const         { return minus_val; };
+       ///
+       LyXLength::UNIT minusUnit() const { return minus_uni; };
+       //@}
+
+       ///
+        bool operator==(LyXGlueLength other);
+
+       /// conversion
+       virtual LString asString() const;
+       virtual LString asLatexString() const;
+
+
+       /** If "data" is valid, the length represented by it is
+         stored into "result", if that is not NULL. */
+       friend bool isValidGlueLength(LString const & data, 
+                                     LyXGlueLength* result=NULL);
+
+protected:
+       float           plus_val, minus_val;
+       LyXLength::UNIT plus_uni, minus_uni;
+};
+
+extern bool isValidGlueLength(LString const &data, LyXGlueLength* result);
+
+///  VSpace class
+class VSpace {
+public:
+       ///
+       enum vspace_kind { NONE, DEFSKIP, 
+                          SMALLSKIP, MEDSKIP, BIGSKIP, 
+                          VFILL, LENGTH };
+       // constructors
+       VSpace() : 
+               kin (NONE), 
+               len(0.0, LyXLength::PT),
+                kp (false) {};
+
+       VSpace(vspace_kind k) : 
+               kin (k), 
+               len (0.0, LyXLength::PT),
+               kp (false) {};
+
+       VSpace(LyXGlueLength l) :
+               kin (LENGTH),
+               len (l),
+               kp (false) {};
+
+       VSpace(float v, LyXLength::UNIT u) : 
+               kin (LENGTH), 
+               len (v, u),
+               kp (false) {};
+
+       /// this constructor is for reading from a .lyx file
+       VSpace(LString const & data);
+       
+       // access functions
+       vspace_kind kind() const  { return  kin; }
+       LyXLength   length() const { return len; }
+
+       // a flag that switches between \vspace and \vspace*
+        bool keep() const      { return kp; }
+       void setKeep(bool val) { kp = val; } 
+
+        bool operator== (VSpace other);
+
+       // conversion
+       LString asLyXCommand() const;  // how it goes into the LyX file
+       LString asLatexCommand() const;
+       int inPixels() const;
+private:
+       vspace_kind  kin;  
+       LyXGlueLength    len;
+       bool kp;
+};
+
+#endif
+
+