Mercurial > hgbook
annotate tools/po4a/lib/Locale/Po4a/TransTractor.pm @ 722:082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
author | Dongsheng Song <dongsheng.song@gmail.com> |
---|---|
date | Thu, 12 Mar 2009 15:43:56 +0800 |
parents | |
children |
rev | line source |
---|---|
722
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl -w |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
2 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
3 require Exporter; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
5 package Locale::Po4a::TransTractor; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
6 use DynaLoader; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
7 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
8 use 5.006; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
9 use strict; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
10 use warnings; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
11 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
12 use subs qw(makespace); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
13 use vars qw($VERSION @ISA @EXPORT); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
14 $VERSION="0.36"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
15 @ISA = qw(DynaLoader); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
16 @EXPORT = qw(new process translate |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
17 read write readpo writepo |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
18 getpoout setpoout); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
19 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
20 # Try to use a C extension if present. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
21 eval("bootstrap Locale::Po4a::TransTractor $VERSION"); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
22 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
23 use Carp qw(croak); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
24 use Locale::Po4a::Po; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
25 use Locale::Po4a::Common; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
26 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
27 use File::Path; # mkdir before write |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
28 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
29 use Encode; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
30 use Encode::Guess; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
31 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
32 =head1 NAME |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
33 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
34 Locale::Po4a::TransTractor - Generic trans(lator ex)tractor. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
35 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
36 =head1 DESCRIPTION |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
37 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
38 The po4a (po for anything) project goal is to ease translations (and more |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
39 interestingly, the maintenance of translations) using gettext tools on |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
40 areas where they were not expected like documentation. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
41 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
42 This class is the ancestor of every po4a parsers used to parse a document to |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
43 search translatable strings, extract them to a po file and replace them by |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
44 their translation in the output document. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
45 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
46 More formally, it takes the following arguments as input: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
47 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
48 =over 2 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
49 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
50 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
51 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
52 a document to translate ; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
53 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
54 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
55 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
56 a po file containing the translations to use. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
57 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
58 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
59 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
60 As output, it produces: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
61 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
62 =over 2 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
63 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
64 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
65 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
66 another po file, resulting of the extraction of translatable strings from |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
67 the input document ; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
68 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
69 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
70 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
71 a translated document, with the same structure than the one in input, but |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
72 with all translatable strings replaced with the translations found in the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
73 po file provided in input. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
74 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
75 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
76 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
77 Here is a graphical representation of this: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
78 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
79 Input document --\ /---> Output document |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
80 \ / (translated) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
81 +-> parse() function -----+ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
82 / \ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
83 Input po --------/ \---> Output po |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
84 (extracted) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
85 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
86 =head1 FUNCTIONS YOUR PARSER SHOULD OVERRIDE |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
87 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
88 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
89 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
90 =item parse() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
91 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
92 This is where all the work takes place: the parsing of input documents, the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
93 generation of output, and the extraction of the translatable strings. This |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
94 is pretty simple using the provided functions presented in the section |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
95 "INTERNAL FUNCTIONS" below. See also the synopsis, which present an |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
96 example. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
97 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
98 This function is called by the process() function bellow, but if you choose |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
99 to use the new() function, and to add content manually to your document, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
100 you will have to call this function yourself. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
101 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
102 =item docheader() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
103 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
104 This function returns the header we should add to the produced document, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
105 quoted properly to be a comment in the target language. See the section |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
106 "Educating developers about translations", from L<po4a(7)|po4a.7>, for what |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
107 it is good for. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
108 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
109 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
110 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
111 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
112 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
113 sub docheader {} |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
114 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
115 sub parse {} |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
116 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
117 =head1 SYNOPSIS |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
118 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
119 The following example parses a list of paragraphs beginning with "<p>". For the sake |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
120 of simplicity, we assume that the document is well formatted, i.e. that '<p>' |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
121 tags are the only tags present, and that this tag is at the very beginning |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
122 of each paragraph. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
123 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
124 sub parse { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
125 my $self = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
126 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
127 PARAGRAPH: while (1) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
128 my ($paragraph,$pararef)=("",""); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
129 my $first=1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
130 my ($line,$lref)=$self->shiftline(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
131 while (defined($line)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
132 if ($line =~ m/<p>/ && !$first--; ) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
133 # Not the first time we see <p>. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
134 # Reput the current line in input, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
135 # and put the built paragraph to output |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
136 $self->unshiftline($line,$lref); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
137 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
138 # Now that the document is formed, translate it: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
139 # - Remove the leading tag |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
140 $paragraph =~ s/^<p>//s; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
141 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
142 # - push to output the leading tag (untranslated) and the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
143 # rest of the paragraph (translated) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
144 $self->pushline( "<p>" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
145 . $document->translate($paragraph,$pararef) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
146 ); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
147 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
148 next PARAGRAPH; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
149 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
150 # Append to the paragraph |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
151 $paragraph .= $line; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
152 $pararef = $lref unless(length($pararef)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
153 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
154 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
155 # Reinit the loop |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
156 ($line,$lref)=$self->shiftline(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
157 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
158 # Did not get a defined line? End of input file. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
159 return; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
160 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
161 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
162 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
163 Once you've implemented the parse function, you can use your document |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
164 class, using the public interface presented in the next section. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
165 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
166 =head1 PUBLIC INTERFACE for scripts using your parser |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
167 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
168 =head2 Constructor |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
169 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
170 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
171 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
172 =item process(%) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
173 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
174 This function can do all you need to do with a po4a document in one |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
175 invocation. Its arguments must be packed as a hash. ACTIONS: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
176 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
177 =over 3 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
178 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
179 =item a. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
180 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
181 Reads all the po files specified in po_in_name |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
182 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
183 =item b. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
184 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
185 Reads all original documents specified in file_in_name |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
186 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
187 =item c. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
188 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
189 Parses the document |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
190 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
191 =item d. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
192 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
193 Reads and applies all the addenda specified |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
194 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
195 =item e. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
196 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
197 Writes the translated document to file_out_name (if given) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
198 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
199 =item f. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
200 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
201 Writes the extracted po file to po_out_name (if given) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
202 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
203 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
204 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
205 ARGUMENTS, beside the ones accepted by new() (with expected type): |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
206 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
207 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
208 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
209 =item file_in_name (@) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
210 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
211 List of filenames where we should read the input document. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
212 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
213 =item file_in_charset ($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
214 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
215 Charset used in the input document (if it isn't specified, it will try |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
216 to detect it from the input document). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
217 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
218 =item file_out_name ($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
219 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
220 Filename where we should write the output document. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
221 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
222 =item file_out_charset ($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
223 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
224 Charset used in the output document (if it isn't specified, it will use |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
225 the po file charset). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
226 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
227 =item po_in_name (@) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
228 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
229 List of filenames where we should read the input po files from, containing |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
230 the translation which will be used to translate the document. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
231 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
232 =item po_out_name ($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
233 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
234 Filename where we should write the output po file, containing the strings |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
235 extracted from the input document. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
236 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
237 =item addendum (@) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
238 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
239 List of filenames where we should read the addenda from. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
240 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
241 =item addendum_charset ($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
242 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
243 Charset for the addenda. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
244 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
245 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
246 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
247 =item new(%) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
248 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
249 Create a new Po4a document. Accepted options (but be in a hash): |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
250 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
251 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
252 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
253 =item verbose ($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
254 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
255 Sets the verbosity. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
256 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
257 =item debug ($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
258 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
259 Sets the debugging. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
260 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
261 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
262 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
263 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
264 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
265 sub process { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
266 ## Determine if we were called via an object-ref or a classname |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
267 my $self = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
268 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
269 ## Any remaining arguments are treated as initial values for the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
270 ## hash that is used to represent this object. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
271 my %params = @_; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
272 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
273 # Build the args for new() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
274 my %newparams = (); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
275 foreach (keys %params) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
276 next if ($_ eq 'po_in_name' || |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
277 $_ eq 'po_out_name' || |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
278 $_ eq 'file_in_name' || |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
279 $_ eq 'file_in_charset' || |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
280 $_ eq 'file_out_name' || |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
281 $_ eq 'file_out_charset' || |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
282 $_ eq 'addendum' || |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
283 $_ eq 'addendum_charset'); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
284 $newparams{$_}=$params{$_}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
285 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
286 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
287 $self->detected_charset($params{'file_in_charset'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
288 $self->{TT}{'file_out_charset'}=$params{'file_out_charset'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
289 if (defined($self->{TT}{'file_out_charset'}) and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
290 length($self->{TT}{'file_out_charset'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
291 $self->{TT}{'file_out_encoder'} = find_encoding($self->{TT}{'file_out_charset'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
292 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
293 $self->{TT}{'addendum_charset'}=$params{'addendum_charset'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
294 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
295 foreach my $file (@{$params{'po_in_name'}}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
296 print STDERR "readpo($file)... " if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
297 $self->readpo($file); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
298 print STDERR "done.\n" if $self->debug() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
299 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
300 foreach my $file (@{$params{'file_in_name'}}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
301 print STDERR "read($file)..." if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
302 $self->read($file); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
303 print STDERR "done.\n" if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
304 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
305 print STDERR "parse..." if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
306 $self->parse(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
307 print STDERR "done.\n" if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
308 foreach my $file (@{$params{'addendum'}}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
309 print STDERR "addendum($file)..." if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
310 $self->addendum($file) || die "An addendum failed\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
311 print STDERR "done.\n" if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
312 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
313 if (defined $params{'file_out_name'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
314 print STDERR "write(".$params{'file_out_name'}.")... " |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
315 if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
316 $self->write($params{'file_out_name'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
317 print STDERR "done.\n" if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
318 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
319 if (defined $params{'po_out_name'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
320 print STDERR "writepo(".$params{'po_out_name'}.")... " |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
321 if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
322 $self->writepo($params{'po_out_name'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
323 print STDERR "done.\n" if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
324 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
325 return $self; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
326 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
327 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
328 sub new { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
329 ## Determine if we were called via an object-ref or a classname |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
330 my $this = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
331 my $class = ref($this) || $this; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
332 my $self = { }; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
333 my %options=@_; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
334 ## Bless ourselves into the desired class and perform any initialization |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
335 bless $self, $class; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
336 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
337 ## initialize the plugin |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
338 # prevent the plugin from croaking on the options intended for Po.pm |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
339 $self->{options}{'porefs'} = ''; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
340 # let the plugin parse the options and such |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
341 $self->initialize(%options); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
342 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
343 ## Create our private data |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
344 my %po_options; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
345 $po_options{'porefs'} = $self->{options}{'porefs'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
346 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
347 # private data |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
348 $self->{TT}=(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
349 $self->{TT}{po_in}=Locale::Po4a::Po->new(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
350 $self->{TT}{po_out}=Locale::Po4a::Po->new(\%po_options); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
351 # Warning, this is an array of array: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
352 # The document is splited on lines, and for each |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
353 # [0] is the line content, [1] is the reference [2] the type |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
354 $self->{TT}{doc_in}=(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
355 $self->{TT}{doc_out}=(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
356 if (defined $options{'verbose'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
357 $self->{TT}{verbose} = $options{'verbose'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
358 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
359 if (defined $options{'debug'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
360 $self->{TT}{debug} = $options{'debug'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
361 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
362 # Input document is in ascii until we prove the opposite (in read()) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
363 $self->{TT}{ascii_input}=1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
364 # We try not to use utf unless it's forced from the outside (in case the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
365 # document isn't in ascii) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
366 $self->{TT}{utf_mode}=0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
367 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
368 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
369 return $self; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
370 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
371 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
372 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
373 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
374 =head2 Manipulating document files |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
375 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
376 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
377 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
378 =item read($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
379 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
380 Add another input document at the end of the existing one. The argument is |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
381 the filename to read. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
382 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
383 Please note that it does not parse anything. You should use the parse() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
384 function when you're done with packing input files into the document. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
385 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
386 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
387 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
388 #' |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
389 sub read() { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
390 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
391 my $filename=shift |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
392 or croak wrap_msg(dgettext("po4a", "Can't read from file without having a filename")); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
393 my $linenum=0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
394 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
395 open INPUT,"<$filename" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
396 or croak wrap_msg(dgettext("po4a", "Can't read from %s: %s"), $filename, $!); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
397 while (defined (my $textline = <INPUT>)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
398 $linenum++; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
399 my $ref="$filename:$linenum"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
400 my @entry=($textline,$ref); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
401 push @{$self->{TT}{doc_in}}, @entry; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
402 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
403 if (!defined($self->{TT}{'file_in_charset'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
404 # Detect if this file has non-ascii characters |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
405 if($self->{TT}{ascii_input}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
406 my $decoder = guess_encoding($textline); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
407 if (!ref($decoder) or $decoder !~ /Encode::XS=/) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
408 # We have detected a non-ascii line |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
409 $self->{TT}{ascii_input} = 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
410 # Save the reference for future error message |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
411 $self->{TT}{non_ascii_ref} ||= $ref; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
412 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
413 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
414 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
415 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
416 close INPUT |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
417 or croak wrap_msg(dgettext("po4a", "Can't close %s after reading: %s"), $filename, $!); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
418 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
419 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
420 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
421 =item write($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
422 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
423 Write the translated document to the given filename. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
424 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
425 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
426 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
427 sub write { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
428 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
429 my $filename=shift |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
430 or croak wrap_msg(dgettext("po4a", "Can't write to a file without filename")); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
431 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
432 my $fh; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
433 if ($filename eq '-') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
434 $fh=\*STDOUT; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
435 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
436 # make sure the directory in which we should write the localized file exists |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
437 my $dir = $filename; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
438 if ($dir =~ m|/|) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
439 $dir =~ s|/[^/]*$||; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
440 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
441 File::Path::mkpath($dir, 0, 0755) # Croaks on error |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
442 if (length ($dir) && ! -e $dir); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
443 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
444 open $fh,">$filename" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
445 or croak wrap_msg(dgettext("po4a", "Can't write to %s: %s"), $filename, $!); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
446 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
447 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
448 map { print $fh $_ } $self->docheader(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
449 map { print $fh $_ } @{$self->{TT}{doc_out}}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
450 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
451 if ($filename ne '-') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
452 close $fh or croak wrap_msg(dgettext("po4a", "Can't close %s after writing: %s"), $filename, $!); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
453 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
454 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
455 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
456 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
457 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
458 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
459 =head2 Manipulating po files |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
460 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
461 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
462 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
463 =item readpo($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
464 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
465 Add the content of a file (which name is passed in argument) to the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
466 existing input po. The old content is not discarded. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
467 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
468 =item writepo($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
469 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
470 Write the extracted po file to the given filename. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
471 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
472 =item stats() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
473 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
474 Returns some statistics about the translation done so far. Please note that |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
475 it's not the same statistics than the one printed by msgfmt |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
476 --statistic. Here, it's stats about recent usage of the po file, while |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
477 msgfmt reports the status of the file. It is a wrapper to the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
478 Locale::Po4a::Po::stats_get function applied to the input po file. Example |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
479 of use: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
480 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
481 [normal use of the po4a document...] |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
482 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
483 ($percent,$hit,$queries) = $document->stats(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
484 print "We found translations for $percent\% ($hit from $queries) of strings.\n"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
485 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
486 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
487 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
488 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
489 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
490 sub getpoout { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
491 return $_[0]->{TT}{po_out}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
492 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
493 sub setpoout { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
494 $_[0]->{TT}{po_out} = $_[1]; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
495 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
496 sub readpo { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
497 $_[0]->{TT}{po_in}->read($_[1]); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
498 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
499 sub writepo { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
500 $_[0]->{TT}{po_out}->write( $_[1] ); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
501 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
502 sub stats { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
503 return $_[0]->{TT}{po_in}->stats_get(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
504 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
505 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
506 =head2 Manipulating addenda |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
507 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
508 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
509 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
510 =item addendum($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
511 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
512 Please refer to L<po4a(7)|po4a.7> for more information on what addenda are, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
513 and how translators should write them. To apply an addendum to the translated |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
514 document, simply pass its filename to this function and you are done ;) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
515 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
516 This function returns a non-null integer on error. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
517 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
518 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
519 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
520 # Internal function to read the header. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
521 sub addendum_parse { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
522 my ($filename,$header)=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
523 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
524 my ($errcode,$mode,$position,$boundary,$bmode,$content)= |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
525 (1,"","","","",""); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
526 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
527 unless (open (INS, "<$filename")) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
528 warn wrap_msg(dgettext("po4a", "Can't read from %s: %s"), $filename, $!); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
529 goto END_PARSE_ADDFILE; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
530 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
531 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
532 unless (defined ($header=<INS>) && $header) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
533 warn wrap_msg(dgettext("po4a", "Can't read Po4a header from %s."), $filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
534 goto END_PARSE_ADDFILE; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
535 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
536 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
537 unless ($header =~ s/PO4A-HEADER://i) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
538 warn wrap_msg(dgettext("po4a", "First line of %s does not look like a Po4a header."), $filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
539 goto END_PARSE_ADDFILE; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
540 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
541 foreach my $part (split(/;/,$header)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
542 unless ($part =~ m/^\s*([^=]*)=(.*)$/) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
543 warn wrap_msg(dgettext("po4a", "Syntax error in Po4a header of %s, near \"%s\""), $filename, $part); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
544 goto END_PARSE_ADDFILE; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
545 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
546 my ($key,$value)=($1,$2); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
547 $key=lc($key); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
548 if ($key eq 'mode') { $mode=lc($value); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
549 } elsif ($key eq 'position') { $position=$value; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
550 } elsif ($key eq 'endboundary') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
551 $boundary=$value; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
552 $bmode='after'; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
553 } elsif ($key eq 'beginboundary') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
554 $boundary=$value; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
555 $bmode='before'; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
556 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
557 warn wrap_msg(dgettext("po4a", "Invalid argument in the Po4a header of %s: %s"), $filename, $key); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
558 goto END_PARSE_ADDFILE; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
559 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
560 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
561 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
562 unless (length($mode)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
563 warn wrap_msg(dgettext("po4a", "The Po4a header of %s does not define the mode."), $filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
564 goto END_PARSE_ADDFILE; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
565 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
566 unless ($mode eq "before" || $mode eq "after") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
567 warn wrap_msg(dgettext("po4a", "Mode invalid in the Po4a header of %s: should be 'before' or 'after' not %s."), $filename, $mode); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
568 goto END_PARSE_ADDFILE; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
569 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
570 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
571 unless (length($position)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
572 warn wrap_msg(dgettext("po4a", "The Po4a header of %s does not define the position."), $filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
573 goto END_PARSE_ADDFILE; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
574 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
575 unless ($mode eq "before" || length($boundary)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
576 warn wrap_msg(dgettext("po4a", "No ending boundary given in the Po4a header, but mode=after.")); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
577 goto END_PARSE_ADDFILE; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
578 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
579 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
580 while (defined(my $line = <INS>)) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
581 $content .= $line; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
582 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
583 close INS; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
584 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
585 $errcode=0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
586 END_PARSE_ADDFILE: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
587 return ($errcode,$mode,$position,$boundary,$bmode,$content); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
588 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
589 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
590 sub mychomp { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
591 my ($str) = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
592 chomp($str); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
593 return $str; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
594 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
595 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
596 sub addendum { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
597 my ($self,$filename) = @_; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
598 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
599 print STDERR "Apply addendum $filename..." if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
600 unless ($filename) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
601 warn wrap_msg(dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
602 "Can't apply addendum when not given the filename")); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
603 return 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
604 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
605 die wrap_msg(dgettext("po4a", "Addendum %s does not exist."), $filename) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
606 unless -e $filename; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
607 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
608 my ($errcode,$mode,$position,$boundary,$bmode,$content)= |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
609 addendum_parse($filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
610 return 0 if ($errcode); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
611 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
612 print STDERR "mode=$mode;pos=$position;bound=$boundary;bmode=$bmode;ctn=$content\n" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
613 if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
614 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
615 # We only recode the addendum if an origin charset is specified, else we |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
616 # suppose it's already in the output document's charset |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
617 if (defined($self->{TT}{'addendum_charset'}) && |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
618 length($self->{TT}{'addendum_charset'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
619 Encode::from_to($content,$self->{TT}{'addendum_charset'}, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
620 $self->get_out_charset); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
621 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
622 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
623 my $found = scalar grep { /$position/ } @{$self->{TT}{doc_out}}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
624 if ($found == 0) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
625 warn wrap_msg(dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
626 "No candidate position for the addendum %s."), $filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
627 return 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
628 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
629 if ($found > 1) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
630 warn wrap_msg(dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
631 "More than one candidate position found for the addendum %s."), $filename); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
632 return 0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
633 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
634 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
635 if ($mode eq "before") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
636 if ($self->verbose() > 1 || $self->debug() ) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
637 map { print STDERR wrap_msg(dgettext("po4a", "Addendum '%s' applied before this line: %s"), $filename, $_) if (/$position/); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
638 } @{$self->{TT}{doc_out}}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
639 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
640 @{$self->{TT}{doc_out}} = map { /$position/ ? ($content,$_) : $_ |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
641 } @{$self->{TT}{doc_out}}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
642 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
643 my @newres=(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
644 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
645 do { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
646 # make sure it doesnt whine on empty document |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
647 my $line = scalar @{$self->{TT}{doc_out}} ? shift @{$self->{TT}{doc_out}} : ""; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
648 push @newres,$line; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
649 my $outline=mychomp($line); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
650 $outline =~ s/^[ \t]*//; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
651 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
652 if ($line =~ m/$position/) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
653 while ($line=shift @{$self->{TT}{doc_out}}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
654 last if ($line=~/$boundary/); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
655 push @newres,$line; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
656 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
657 if (defined $line) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
658 if ($bmode eq 'before') { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
659 print wrap_msg(dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
660 "Addendum '%s' applied before this line: %s"), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
661 $filename, $outline) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
662 if ($self->verbose() > 1 || $self->debug()); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
663 push @newres,$content; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
664 push @newres,$line; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
665 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
666 print wrap_msg(dgettext("po4a", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
667 "Addendum '%s' applied after the line: %s."), |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
668 $filename, $outline) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
669 if ($self->verbose() > 1 || $self->debug()); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
670 push @newres,$line; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
671 push @newres,$content; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
672 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
673 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
674 print wrap_msg(dgettext("po4a", "Addendum '%s' applied at the end of the file."), $filename) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
675 if ($self->verbose() > 1 || $self->debug()); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
676 push @newres,$content; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
677 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
678 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
679 } while (scalar @{$self->{TT}{doc_out}}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
680 @{$self->{TT}{doc_out}} = @newres; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
681 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
682 print STDERR "done.\n" if $self->debug(); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
683 return 1; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
684 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
685 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
686 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
687 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
688 =head1 INTERNAL FUNCTIONS used to write derivated parsers |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
689 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
690 =head2 Getting input, providing output |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
691 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
692 Four functions are provided to get input and return output. They are very |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
693 similar to shift/unshift and push/pop. The first pair is about input, while |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
694 the second is about output. Mnemonic: in input, you are interested in the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
695 first line, what shift gives, and in output you want to add your result at |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
696 the end, like push does. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
697 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
698 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
699 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
700 =item shiftline() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
701 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
702 This function returns the next line of the doc_in to be parsed and its |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
703 reference (packed as an array). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
704 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
705 =item unshiftline($$) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
706 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
707 Unshifts a line of the input document and its reference. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
708 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
709 =item pushline($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
710 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
711 Push a new line to the doc_out. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
712 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
713 =item popline() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
714 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
715 Pop the last pushed line from the doc_out. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
716 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
717 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
718 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
719 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
720 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
721 sub shiftline { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
722 my ($line,$ref)=(shift @{$_[0]->{TT}{doc_in}}, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
723 shift @{$_[0]->{TT}{doc_in}}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
724 return ($line,$ref); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
725 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
726 sub unshiftline { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
727 my $self = shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
728 unshift @{$self->{TT}{doc_in}},@_; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
729 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
730 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
731 sub pushline { push @{$_[0]->{TT}{doc_out}}, $_[1] if defined $_[1]; } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
732 sub popline { return pop @{$_[0]->{TT}{doc_out}}; } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
733 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
734 =head2 Marking strings as translatable |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
735 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
736 One function is provided to handle the text which should be translated. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
737 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
738 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
739 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
740 =item translate($$$) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
741 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
742 Mandatory arguments: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
743 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
744 =over 2 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
745 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
746 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
747 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
748 A string to translate |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
749 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
750 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
751 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
752 The reference of this string (ie, position in inputfile) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
753 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
754 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
755 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
756 The type of this string (ie, the textual description of its structural role |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
757 ; used in Locale::Po4a::Po::gettextization() ; see also L<po4a(7)|po4a.7>, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
758 section I<Gettextization: how does it work?>) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
759 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
760 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
761 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
762 This function can also take some extra arguments. They must be organized as |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
763 a hash. For example: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
764 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
765 $self->translate("string","ref","type", |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
766 'wrap' => 1); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
767 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
768 =over |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
769 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
770 =item wrap |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
771 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
772 boolean indicating whether we can consider that whitespaces in string are |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
773 not important. If yes, the function canonizes the string before looking for |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
774 a translation or extracting it, and wraps the translation. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
775 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
776 =item wrapcol |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
777 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
778 The column at which we should wrap (default: 76). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
779 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
780 =item comment |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
781 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
782 An extra comment to add to the entry. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
783 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
784 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
785 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
786 Actions: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
787 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
788 =over 2 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
789 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
790 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
791 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
792 Pushes the string, reference and type to po_out. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
793 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
794 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
795 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
796 Returns the translation of the string (as found in po_in) so that the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
797 parser can build the doc_out. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
798 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
799 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
800 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
801 Handles the charsets to recode the strings before sending them to |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
802 po_out and before returning the translations. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
803 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
804 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
805 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
806 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
807 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
808 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
809 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
810 sub translate { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
811 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
812 my ($string,$ref,$type)=(shift,shift,shift); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
813 my (%options)=@_; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
814 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
815 # my $validoption="wrap wrapcol"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
816 # my %validoption; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
817 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
818 return "" unless defined($string) && length($string); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
819 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
820 # map { $validoption{$_}=1 } (split(/ /,$validoption)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
821 # foreach (keys %options) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
822 # Carp::confess "internal error: translate() called with unknown arg $_. Valid options: $validoption" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
823 # unless $validoption{$_}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
824 # } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
825 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
826 my $in_charset; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
827 if ($self->{TT}{ascii_input}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
828 $in_charset = "ascii"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
829 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
830 if (defined($self->{TT}{'file_in_charset'}) and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
831 length($self->{TT}{'file_in_charset'}) and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
832 $self->{TT}{'file_in_charset'} !~ m/ascii/i) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
833 $in_charset=$self->{TT}{'file_in_charset'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
834 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
835 # FYI, the document charset have to be determined *before* we see the first |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
836 # string to recode. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
837 die wrap_mod("po4a", dgettext("po4a", "Couldn't determine the input document's charset. Please specify it on the command line. (non-ascii char at %s)"), $self->{TT}{non_ascii_ref}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
838 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
839 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
840 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
841 if ($self->{TT}{po_in}->get_charset ne "CHARSET") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
842 $string = encode_from_to($string, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
843 $self->{TT}{'file_in_encoder'}, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
844 $self->{TT}{po_in}{encoder}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
845 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
846 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
847 if (defined $options{'wrapcol'} && $options{'wrapcol'} < 0) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
848 # FIXME: should be the parameter given with --width |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
849 $options{'wrapcol'} = 76 + $options{'wrapcol'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
850 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
851 my $transstring = $self->{TT}{po_in}->gettext($string, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
852 'wrap' => $options{'wrap'}||0, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
853 'wrapcol' => $options{'wrapcol'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
854 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
855 if ($self->{TT}{po_in}->get_charset ne "CHARSET") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
856 my $out_encoder = $self->{TT}{'file_out_encoder'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
857 unless (defined $out_encoder) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
858 $out_encoder = find_encoding($self->get_out_charset) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
859 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
860 $transstring = encode_from_to($transstring, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
861 $self->{TT}{po_in}{encoder}, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
862 $out_encoder); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
863 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
864 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
865 # If the input document isn't completely in ascii, we should see what to |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
866 # do with the current string |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
867 unless ($self->{TT}{ascii_input}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
868 my $out_charset = $self->{TT}{po_out}->get_charset; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
869 # We set the output po charset |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
870 if ($out_charset eq "CHARSET") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
871 if ($self->{TT}{utf_mode}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
872 $out_charset="utf-8"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
873 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
874 $out_charset=$in_charset; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
875 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
876 $self->{TT}{po_out}->set_charset($out_charset); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
877 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
878 if ( $in_charset !~ /^$out_charset$/i ) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
879 Encode::from_to($string,$in_charset,$out_charset); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
880 if (defined($options{'comment'}) and length($options{'comment'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
881 Encode::from_to($options{'comment'},$in_charset,$out_charset); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
882 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
883 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
884 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
885 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
886 # the comments provided by the modules are automatic comments from the PO point of view |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
887 $self->{TT}{po_out}->push('msgid' => $string, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
888 'reference' => $ref, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
889 'type' => $type, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
890 'automatic' => $options{'comment'}, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
891 'wrap' => $options{'wrap'}||0, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
892 'wrapcol' => $options{'wrapcol'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
893 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
894 # if ($self->{TT}{po_in}->get_charset ne "CHARSET") { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
895 # Encode::from_to($transstring,$self->{TT}{po_in}->get_charset, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
896 # $self->get_out_charset); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
897 # } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
898 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
899 if ($options{'wrap'}||0) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
900 $transstring =~ s/( *)$//s; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
901 my $trailing_spaces = $1||""; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
902 $transstring =~ s/ *$//gm; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
903 $transstring .= $trailing_spaces; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
904 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
905 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
906 return $transstring; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
907 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
908 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
909 =head2 Misc functions |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
910 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
911 =over 4 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
912 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
913 =item verbose() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
914 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
915 Returns if the verbose option was passed during the creation of the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
916 TransTractor. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
917 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
918 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
919 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
920 sub verbose { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
921 if (defined $_[1]) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
922 $_[0]->{TT}{verbose} = $_[1]; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
923 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
924 return $_[0]->{TT}{verbose} || 0; # undef and 0 have the same meaning, but one generates warnings |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
925 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
926 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
927 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
928 =item debug() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
929 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
930 Returns if the debug option was passed during the creation of the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
931 TransTractor. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
932 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
933 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
934 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
935 sub debug { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
936 return $_[0]->{TT}{debug}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
937 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
938 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
939 =item detected_charset($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
940 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
941 This tells TransTractor that a new charset (the first argument) has been |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
942 detected from the input document. It can usually be read from the document |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
943 header. Only the first charset will remain, coming either from the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
944 process() arguments or detected from the document. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
945 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
946 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
947 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
948 sub detected_charset { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
949 my ($self,$charset)=(shift,shift); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
950 unless (defined($self->{TT}{'file_in_charset'}) and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
951 length($self->{TT}{'file_in_charset'}) ) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
952 $self->{TT}{'file_in_charset'}=$charset; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
953 if (defined $charset) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
954 $self->{TT}{'file_in_encoder'}=find_encoding($charset); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
955 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
956 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
957 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
958 if (defined $self->{TT}{'file_in_charset'} and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
959 length $self->{TT}{'file_in_charset'} and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
960 $self->{TT}{'file_in_charset'} !~ m/ascii/i) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
961 $self->{TT}{ascii_input}=0; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
962 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
963 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
964 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
965 =item get_out_charset() |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
966 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
967 This function will return the charset that should be used in the output |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
968 document (usually useful to substitute the input document's detected charset |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
969 where it has been found). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
970 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
971 It will use the output charset specified in the command line. If it wasn't |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
972 specified, it will use the input po's charset, and if the input po has the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
973 default "CHARSET", it will return the input document's charset, so that no |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
974 encoding is performed. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
975 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
976 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
977 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
978 sub get_out_charset { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
979 my $self=shift; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
980 my $charset; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
981 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
982 # Use the value specified at the command line |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
983 if (defined($self->{TT}{'file_out_charset'}) and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
984 length($self->{TT}{'file_out_charset'})) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
985 $charset=$self->{TT}{'file_out_charset'}; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
986 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
987 if ($self->{TT}{utf_mode} && $self->{TT}{ascii_input}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
988 $charset="utf-8"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
989 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
990 $charset=$self->{TT}{po_in}->get_charset; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
991 $charset=$self->{TT}{'file_in_charset'} |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
992 if $charset eq "CHARSET" and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
993 defined($self->{TT}{'file_in_charset'}) and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
994 length($self->{TT}{'file_in_charset'}); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
995 $charset="ascii" |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
996 if $charset eq "CHARSET"; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
997 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
998 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
999 return $charset; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1000 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1001 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1002 =item recode_skipped_text($) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1003 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1004 This function returns the recoded text passed as argument, from the input |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1005 document's charset to the output document's one. This isn't needed when |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1006 translating a string (translate() recodes everything itself), but it is when |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1007 you skip a string from the input document and you want the output document to |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1008 be consistent with the global encoding. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1009 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1010 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1011 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1012 sub recode_skipped_text { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1013 my ($self,$text)=(shift,shift); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1014 unless ($self->{TT}{'ascii_input'}) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1015 if(defined($self->{TT}{'file_in_charset'}) and |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1016 length($self->{TT}{'file_in_charset'}) ) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1017 $text = encode_from_to($text, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1018 $self->{TT}{'file_in_encoder'}, |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1019 find_encoding($self->get_out_charset)); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1020 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1021 die wrap_mod("po4a", dgettext("po4a", "Couldn't determine the input document's charset. Please specify it on the command line. (non-ascii char at %s)"), $self->{TT}{non_ascii_ref}) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1022 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1023 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1024 return $text; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1025 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1026 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1027 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1028 # encode_from_to($,$,$) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1029 # |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1030 # Encode the given text from one encoding to another one. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1031 # It differs from Encode::from_to because it does not take the name of the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1032 # encoding in argument, but the encoders (as returned by the |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1033 # Encode::find_encoding(<name>) method). Thus it permits to save a bunch |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1034 # of call to find_encoding. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1035 # |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1036 # If the "from" encoding is undefined, it is considered as UTF-8 (or |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1037 # ascii). |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1038 # If the "to" encoding is undefined, it is considered as UTF-8. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1039 # |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1040 sub encode_from_to { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1041 my ($text,$from,$to) = (shift,shift,shift); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1042 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1043 if (not defined $from) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1044 # for ascii and UTF-8, no conversion needed to get an utf-8 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1045 # string. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1046 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1047 $text = $from->decode($text, 0); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1048 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1049 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1050 if (not defined $to) { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1051 # Already in UTF-8, no conversion needed |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1052 } else { |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1053 $text = $to->encode($text, 0); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1054 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1055 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1056 return $text; |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1057 } |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1058 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1059 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1060 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1061 =head1 FUTURE DIRECTIONS |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1062 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1063 One shortcoming of the current TransTractor is that it can't handle |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1064 translated document containing all languages, like debconf templates, or |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1065 .desktop files. |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1066 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1067 To address this problem, the only interface changes needed are: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1068 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1069 =over 2 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1070 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1071 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1072 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1073 take a hash as po_in_name (a list per language) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1074 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1075 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1076 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1077 add an argument to translate to indicate the target language |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1078 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1079 =item - |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1080 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1081 make a pushline_all function, which would make pushline of its content for |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1082 all language, using a map-like syntax: |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1083 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1084 $self->pushline_all({ "Description[".$langcode."]=". |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1085 $self->translate($line,$ref,$langcode) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1086 }); |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1087 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1088 =back |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1089 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1090 Will see if it's enough ;) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1091 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1092 =head1 AUTHORS |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1093 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1094 Denis Barbier <barbier@linuxfr.org> |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1095 Martin Quinson (mquinson#debian.org) |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1096 Jordi Vilalta <jvprat@gmail.com> |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1097 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1098 =cut |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1099 |
082bb76417f1
Add Po4a 0.37-dev(2009-03-08)
Dongsheng Song <dongsheng.song@gmail.com>
parents:
diff
changeset
|
1100 1; |