Chameleon

Chameleon Svn Source Tree

Root/branches/ErmaC/Trunk/package/bin/po4a/lib/Locale/Po4a/LaTeX.pm

1#!/usr/bin/perl -w
2
3# Copyright (c) 2004, 2005 by Nicolas FRANÇOIS <nicolas.francois@centraliens.net>
4#
5# This file is part of po4a.
6#
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2 of the License, or
10# (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# along with po4a; if not, write to the Free Software
19# Foundation, Inc.,
20# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21#
22########################################################################
23
24=encoding UTF-8
25
26=head1 NAME
27
28Locale::Po4a::LaTeX - convert LaTeX documents and derivates from/to PO files
29
30=head1 DESCRIPTION
31
32The po4a (PO for anything) project goal is to ease translations (and more
33interestingly, the maintenance of translations) using gettext tools on
34areas where they were not expected like documentation.
35
36Locale::Po4a::LaTeX is a module to help the translation of LaTeX documents into
37other [human] languages. It can also be used as a base to build modules for
38LaTeX-based documents.
39
40This module contains the definitions of common LaTeX commands and
41environments.
42
43See the L<Locale::Po4a::TeX(3pm)|Locale::Po4a::TeX> manpage for the list
44of recognized options.
45
46=head1 SEE ALSO
47
48L<Locale::Po4a::TeX(3pm)|Locale::Po4a::TeX>,
49L<Locale::Po4a::TransTractor(3pm)|Locale::Po4a::TransTractor>,
50L<po4a(7)|po4a.7>
51
52=head1 AUTHORS
53
54 Nicolas François <nicolas.francois@centraliens.net>
55
56=head1 COPYRIGHT AND LICENSE
57
58Copyright 2004, 2005 by Nicolas FRANÇOIS <nicolas.francois@centraliens.net>.
59
60This program is free software; you may redistribute it and/or modify it
61under the terms of GPL (see COPYING file).
62
63=cut
64
65package Locale::Po4a::LaTeX;
66
67use 5.006;
68use strict;
69use warnings;
70
71require Exporter;
72use vars qw($VERSION @ISA @EXPORT);
73$VERSION= $Locale::Po4a::TeX::VERSION;
74@ISA= qw(Locale::Po4a::TeX);
75@EXPORT= qw();
76
77use Locale::Po4a::TeX;
78use subs qw(&generic_command
79 &parse_definition_file
80 &register_generic_command
81 &register_generic_environment);
82*parse_definition_file = \&Locale::Po4a::TeX::parse_definition_file;
83*generic_command = \&Locale::Po4a::TeX::generic_command;
84*register_generic_command = \&Locale::Po4a::TeX::register_generic_command;
85*register_generic_environment = \&Locale::Po4a::TeX::register_generic_environment;
86use vars qw($RE_ESCAPE $ESCAPE
87 $no_wrap_environments
88 %commands %environments
89 %separated_command %separated_environment
90 %command_parameters %environment_parameters
91 %env_separators
92 @exclude_include);
93*RE_ESCAPE = \$Locale::Po4a::TeX::RE_ESCAPE;
94*ESCAPE = \$Locale::Po4a::TeX::ESCAPE;
95*no_wrap_environments = \$Locale::Po4a::TeX::no_wrap_environments;
96*commands = \%Locale::Po4a::TeX::commands;
97*environments = \%Locale::Po4a::TeX::environments;
98*separated_command = \%Locale::Po4a::TeX::separated_command;
99*separated_environment = \%Locale::Po4a::TeX::separated_environment;
100*env_separators = \%Locale::Po4a::TeX::env_separators;
101*exclude_include = \@Locale::Po4a::TeX::exclude_include;
102*command_parameters = \%Locale::Po4a::TeX::command_parameters;
103*environment_parameters = \%Locale::Po4a::TeX::environment_parameters;
104
105
106# documentclass:
107# Only read the documentclass in order to find some po4a directives.
108# FIXME: The documentclass could contain translatable strings.
109# Maybe it should be implemented as \include{}.
110register_generic_command("*documentclass,[]{}");
111# We use register_generic_command to define the number and types of
112# parameters. The function is then overwritten:
113$commands{'documentclass'} = sub {
114 my $self = shift;
115 my ($command,$variant,$args,$env) = (shift,shift,shift,shift);
116 my $no_wrap = shift;
117
118 # Only try to parse the file. We don't want to fail or parse this file
119 # if it is a standard documentclass.
120 my $name = ($args->[0] eq '[')? $args->[3]: $args->[1];
121 parse_definition_file($self, $name.".cls", 1);
122
123 my ($t,@e) = generic_command($self,$command,$variant,$args,$env,$no_wrap);
124
125 return ($t, @$env);
126};
127
128# LaTeX 2
129# I chose not to translate files, counters, lengths
130register_generic_command("*addcontentsline,{}{}{_}");
131register_generic_command("address,{_}"); # lines are seperated by \\
132register_generic_command("*addtocontents,{}{_}");
133register_generic_command("*addtocounter,{}{}");
134register_generic_command("*addtolength,{}{}");
135register_generic_command("*addvspace,{}");
136register_generic_command("alph,{}"); # another language may not want this alphabet
137register_generic_command("arabic,{}"); # another language may not want an arabic numbering
138register_generic_command("*author,{_}"); # authors are separated by \and
139register_generic_command("bibitem,[]{}");
140register_generic_command("*bibliographystyle,{}"); # BibTeX
141register_generic_command("*bibliography,{}"); # BibTeX
142register_generic_command("*centerline,{_}");
143register_generic_command("*caption,[]{_}");
144register_generic_command("cc,{_}");
145register_generic_command("circle,[]{}");
146register_generic_command("cite,[_]{}");
147register_generic_command("cline,{}");
148register_generic_command("closing,{_}");
149register_generic_command("dashbox,{}"); # followed by a (w,h) argument
150register_generic_command("date,{_}");
151register_generic_command("*enlargethispage,{}");
152register_generic_command("ensuremath,{_}");
153register_generic_command("*fbox,{_}");
154register_generic_command("fnsymbol,{}");
155register_generic_command("*footnote,[]{_}");
156register_generic_command("*footnotemark,[]");
157register_generic_command("*footnotetext,[]{_}");
158register_generic_command("frac,{_}{_}");
159register_generic_command("*frame,{_}");
160register_generic_command("*framebox,[][]{_}"); # There is another form in picture environment
161register_generic_command("*hbox,{}");
162register_generic_command("*hspace,[]{}");
163register_generic_command("*hyphenation,{_}"); # Translators may wish to add/remove words
164register_generic_command("*include,{}");
165#register_generic_command("includeonly,{}"); # should not be supported for now
166register_generic_command("*index,{_}");
167register_generic_command("*input,{}");
168register_generic_command("*item,[_]");
169register_generic_command("*label,{}");
170register_generic_command("lefteqn,{_}");
171register_generic_command("line,"); # The first argument is (x,y)
172register_generic_command("*linebreak,[]");
173register_generic_command("linethickness,{}");
174register_generic_command("location,{_}");
175register_generic_command("makebox,[][]{_}"); # There's another form in picture environment
176register_generic_command("makelabels,{}");
177register_generic_command("*markboth,[]{_}{_}");
178register_generic_command("*markright,{_}");
179register_generic_command("mathcal,{_}");
180register_generic_command("mathop,{_}");
181register_generic_command("mbox,{_}");
182register_generic_command("multicolumn,{}{}{_}");
183register_generic_command("multiput,"); # The first arguments are (x,y)(dx,dy)
184register_generic_command("name,{_}");
185register_generic_command("*newcommand,{}[][]{_}");
186register_generic_command("*newcounter,{}[]");
187register_generic_command("*newenvironment,{}[]{_}{_}");
188register_generic_command("*newfont,{}{}");
189register_generic_command("*newlength,{}");
190register_generic_command("*newsavebox,{}");
191register_generic_command("*newtheorem,{}{_}"); # Two forms, the optionnal arg is not the first one
192register_generic_command("nocite,{}");
193register_generic_command("nolinebreak,[]");
194register_generic_command("*nopagebreak,[]");
195register_generic_command("opening,{_}");
196register_generic_command("oval,"); # The first argument is (w,h)
197register_generic_command("overbrace,{_}");
198register_generic_command("overline,{_}");
199register_generic_command("*pagebreak,[]");
200register_generic_command("*pagenumbering,{_}");
201register_generic_command("pageref,{}");
202register_generic_command("*pagestyle,{}");
203register_generic_command("*parbox,[][][]{}{_}");
204register_generic_command("providecommand,{}[][]{_}");
205register_generic_command("put,"); # The first argument is (x,y)
206register_generic_command("raisebox,{}[][]{_}");
207register_generic_command("ref,{}");
208register_generic_command("*refstepcounter,{}");
209register_generic_command("*renewcommand,{}[][]{_}");
210register_generic_command("*renewenvironment,{}[]{_}{_}");
211register_generic_command("roman,{}"); # another language may not want a roman numbering
212register_generic_command("rule,[]{}{}");
213register_generic_command("savebox,{}"); # Optional arguments in 2nd & 3rd position
214register_generic_command("sbox,{}{_}");
215register_generic_command("*setcounter,{}{}");
216register_generic_command("*setlength,{}{}");
217register_generic_command("*settodepth,{}{_}");
218register_generic_command("*settoheight,{}{_}");
219register_generic_command("*settowidth,{}{_}");
220register_generic_command("shortstack,[]{_}");
221register_generic_command("signature,{_}");
222register_generic_command("sqrt,[_]{_}");
223register_generic_command("stackrel,{_}{_}");
224register_generic_command("stepcounter,{}");
225register_generic_command("*subfigure,[_]{_}");
226register_generic_command("symbol,{_}");
227register_generic_command("telephone,{_}");
228register_generic_command("thanks,{_}");
229register_generic_command("*thispagestyle,{}");
230register_generic_command("*title,{_}");
231register_generic_command("typeout,{_}");
232register_generic_command("typein,[]{_}");
233register_generic_command("twocolumn,[_]");
234register_generic_command("underbrace,{_}");
235register_generic_command("underline,{_}");
236register_generic_command("*usebox,{}");
237register_generic_command("usecounter,{}");
238register_generic_command("*usepackage,[]{}");
239register_generic_command("value,{}");
240register_generic_command("vector,"); # The first argument is (x,y)
241register_generic_command("vphantom,{_}");
242register_generic_command("*vspace,[]{}");
243register_generic_command("*vbox,{}");
244register_generic_command("*vcenter,{}");
245
246register_generic_command("*part,[_]{_}");
247register_generic_command("*chapter,[_]{_}");
248register_generic_command("*section,[_]{_}");
249register_generic_command("*subsection,[_]{_}");
250register_generic_command("*subsubsection,[_]{_}");
251register_generic_command("*paragraph,[_]{_}");
252register_generic_command("*subparagraph,[_]{_}");
253
254register_generic_command("textrm,{_}");
255register_generic_command("textit,{_}");
256register_generic_command("emph,{_}");
257register_generic_command("textmd,{_}");
258register_generic_command("textbf,{_}");
259register_generic_command("textup,{_}");
260register_generic_command("textsl,{_}");
261register_generic_command("textsf,{_}");
262register_generic_command("textsc,{_}");
263register_generic_command("texttt,{_}");
264register_generic_command("textnormal,{_}");
265register_generic_command("mathrm,{_}");
266register_generic_command("mathsf,{_}");
267register_generic_command("mathtt,{_}");
268register_generic_command("mathit,{_}");
269register_generic_command("mathnormal,{_}");
270register_generic_command("mathversion,{}");
271
272register_generic_command("*contentspage,");
273register_generic_command("*tablelistpage,");
274register_generic_command("*figurepage,");
275
276register_generic_command("*PassOptionsToPackage,{}{}");
277
278register_generic_command("*ifthenelse,{}{_}{_}");
279
280# graphics
281register_generic_command("*includegraphics,[]{}");
282register_generic_command("*graphicspath,{}");
283register_generic_command("*resizebox,{}{}{_}");
284register_generic_command("*scalebox,{}{_}");
285register_generic_command("*rotatebox,{}{_}");
286
287# url
288register_generic_command("UrlFont,{}");
289register_generic_command("*urlstyle,{}");
290
291# hyperref
292register_generic_command("href,{}{_}"); # 1:URL
293register_generic_command("url,{}"); # URL
294register_generic_command("nolinkurl,{}"); # URL
295register_generic_command("hyperbaseurl,{}"); # URL
296register_generic_command("hyperimage,{}"); # URL
297register_generic_command("hyperdef,{}{}{_}"); # 1:category, 2:name
298register_generic_command("hyperref,{}{}{}{_}"); # 1:URL, 2:category, 3:name
299register_generic_command("hyperlink,{}{_}"); # 1:name
300register_generic_command("*hypersetup,{_}");
301register_generic_command("hypertarget,{}{_}"); # 1:name
302register_generic_command("autoref,{}"); # 1:label
303
304register_generic_command("*selectlanguage,{}");
305
306# color
307register_generic_command("*definecolor,{}{}{}");
308register_generic_command("*textcolor,{}{_}");
309register_generic_command("*colorbox,{}{_}");
310register_generic_command("*fcolorbox,{}{}{_}");
311register_generic_command("*pagecolor,{_}");
312register_generic_command("*color,{}");
313
314# equations/theorems
315register_generic_command("*qedhere,");
316register_generic_command("*qedsymbol,");
317register_generic_command("*theoremstyle,{}");
318register_generic_command("*proclaim,{_}");
319register_generic_command("*endproclaim,");
320register_generic_command("*shoveleft,{_}");
321register_generic_command("*shoveright,{_}");
322
323# commands without arguments. This is better than untranslated or
324# translate_joined because the number of arguments will be checked.
325foreach (qw(a *appendix *backmatter backslash *baselineskip *baselinestretch bf
326 *bigskip boldmath cal cdots *centering *cleardoublepage *clearpage
327 ddots dotfill em flushbottom *footnotesize frenchspacing
328 *frontmatter *glossary *hfill *hline hrulefill huge Huge indent it
329 kill large Large LARGE ldots left linewidth listoffigures
330 listoftables *mainmatter *makeatletter *makeglossary *makeindex
331 *maketitle *medskip *newline *newpage noindent nonumber *normalsize
332 not *null *onecolumn *par parindent *parskip *printindex protect ps
333 pushtabs *qquad *quad raggedbottom raggedleft raggedright right rm
334 sc scriptsize sf sl small *smallskip *startbreaks *stopbreaks
335 *tableofcontents textwidth textheight tiny today tt unitlength
336 vdots verb *vfill *vline *fussy *sloppy
337
338 aleph hbar imath jmath ell wp Re Im prime nabla surd angle forall
339 exists partial infty triangle Box Diamond flat natural sharp
340 clubsuit diamondsuit heartsuit spadesuit dag ddag S P copyright
341 pounds Delta ASCII
342
343 rmfamily itshape mdseries bfseries upshape slshape sffamily scshape
344 ttfamily *normalfont width height depth totalheight
345
346 *fboxsep *fboxrule
347 *itemi *itemii *itemiii *itemiv
348 *theitemi *theitemii *theitemiii *theitemiv)) {
349 register_generic_command("$_,");
350}
351
352
353
354# standard environments.
355# FIXME: All these definitions should be re-checked
356foreach (qw(abstract align align* cases center description displaymath document enumerate
357 eqnarray eqnarray* equation equation* flushleft flushright footnotesize itemize
358 letter lrbox multline multline* proof quotation quote
359 sloppypar tabbing theorem titlepage
360 trivlist verbatim verbatim* verse wrapfigure)) {
361 register_generic_environment("$_,");
362}
363register_generic_environment("tabular,[]{}");
364register_generic_environment("tabular*,{}{}");
365register_generic_environment("tabularx,{}{}");
366register_generic_environment("multicols,{}");
367register_generic_environment("list,{_}{}");
368register_generic_environment("array,[]{}");
369register_generic_environment("figure,[]");
370register_generic_environment("minipage,[]{}");
371register_generic_environment("picture,{}{}");
372register_generic_environment("table,[]");
373register_generic_environment("thebibliography,{_}");
374
375
376# Commands and environments with separators.
377
378# & is the cell separator, \\ is the line separator
379# '\' is escaped twice
380$env_separators{'array'} =
381 $env_separators{'tabular'} =
382 $env_separators{'tabularx'} = "(?:&|\\\\\\\\|\\\\hline)";
383
384$env_separators{'trivlist'} =
385 $env_separators{'list'} =
386 $env_separators{'description'} =
387 $env_separators{'enumerate'} =
388 $env_separators{'itemize'} = "\\\\item";
389
390$env_separators{'thebibliography'} = "\\\\bibitem";
391
392$env_separators{'displaymath'} =
393 $env_separators{'eqnarray'} =
394 $env_separators{'eqnarray*'} =
395 $env_separators{'flushleft'} =
396 $env_separators{'flushright'} =
397 $env_separators{'center'} =
398 $env_separators{'author{#1}'} =
399 $env_separators{'title{#1}'} = "\\\\\\\\";
400
401# tabbing
402
4031;
404

Archive Download this file

Revision: 1847